ITPub博客

首页 > > > Linux 下那些容易被忽视的命令用法!

Linux 下那些容易被忽视的命令用法!

作者:u_453e1a12781dea 时间:2017-08-30 16:39:39 0 删除 编辑
点击上方“CU技术社区”一起玩耍哦~
本文适合在 Linux 下开发的同学阅读,需要具备基本的 linux 操作命令。

一、前言


工作中发现很多同学对于 Linux 下的命令不太熟悉,尤其是一些功能强大的工具,使用者很少。正所谓工欲善其事,必先利其器。本文总结了 Linux 下常用命令的用法,希望能够帮助大家提升日常开发的效率。

二、命令

1.strace


strace 用于跟踪程序执行过程中的系统调用,如跟踪 test 进程,只需要:


  1. strace -p [test_pid] 或直接strace ./test


但如果需要:

跟踪进程内的线程: -f 选项

统计时间段内的各个系统调用次数分布:-C 选项

过滤某些系统调用:-e trace 选项,如 - e trace=network 只显示网络相关的系统调用,-e trace=open,close,read,write 只显示这 4 个系统调用,常用于只获取某些特定的系统调用

显示系统调用的时间:-ttt 选项

详细显示每行的数据,而不是... -s 选项加大字符串的长度限制如 - s 1024

比如,跟踪 pid 为 12345 的进程中所有线程的 read 和 write 系统调用,输出字符串的长度限制为 1024:

  1. strace -s 1024 -f -e trace=read,write -p 12345

2.tcpdump


tcpdump 是 Linux 上的抓包工具,如抓取 eth0 网卡上的包,使用:

  1. sudo tcpdump -i eth0


但如果需要:

文本形式显示抓包数据:-A 选项

显示 16 进制的报文数据:-X 选项

输出结果到文件中 -w 选项,如 - w 1.cap 将报文输出到 1.cap 文件,此文件可用 wireshark 查看

过滤主机和端口号 如 host 11.11.11.11 and port 12345 过滤主机 ip 为 11.11.11.11,端口号为 12345 的 tcp 报文

比如,抓取 80 端口的 HTTP 报文,以文本形式展示:

  1. sudo tcpdump -i any port 80 -A


这样你就可以清楚看到 GET、POST 请求的内容了。

3.nc


nc 可以在 Linux 上开启 TCP Server、TCP Client、UDP Server、UDP Client。

如在端口号 12345 上开启 TCP Server 和 Client 模拟 TCP 通信:

  1. Server:  nc -l 127.0.0.1 12345

  2. Client:  nc 127.0.0.1 12345


在端口号 12345 上开启 UDP Server 和 Client 模拟 TCP 通信:

  1. Server:  nc -ul 127.0.0.1 12345

  2. Client:  nc -u 127.0.0.1 12345


Unix Socket 通信示例:

  1. Server:  nc -Ul /tmp/1.sock

  2. Client:  nc -U /tmp/1.sock

4.curl


curl 用于模拟 HTTP 请求,在终端模拟请求时常用,如最基本的用法:

  1. curl http://


但如果需要:

指定 HTTP 首部 -H 选项,如 - H "Host: xx.xx.xx.xx"

指定请求方法 -X 选项,如 - X POST,-d 指定 post 数据

显示请求详细信息,包括请求和响应首部 -v 选项

重定向请求自动追踪 -L 选项

常见的 curl 请求选项 - sSfL 表示: 不显示进度信息,显示错误信息,发生 HTTP 错误时失败,自动跟踪重定向

5.find


find 可用于查找文件,比如:

  1. find . -name "1.txt"


表示在当前目录及其子目录下查找文件名为 1.txt 的文件,结合 xargs 使用功能更加强大,如:

  1. find . -type f|xargs grep 'abcd'


表示在当前目录及其子目录下查找包含 abcd 字符串的文件行,经常用于搜索代码。

6.lsof


lsof 命令主要用法包括:


sudo lsof -i :[port] 查看端口占用进程信息,经常用于端口绑定失败时确认端口被哪个进程占用

sudo lsof -p [pid] 查看进程打开了哪些文件或套接字

7.ss


Linux 上的 ss 命令可以用于替换 netstat,ss 直接读取解析 / proc/net 下的统计信息,相比 netstat 遍历 / proc 下的每个 PID 目录,速度快很多。

常见示例:

  1. ss -t -a 显示所有的 TCP Sockets

  2. ss -u -a 显示所有的 UDP Sockets

  3. ss -x src /tmp/a.sock 显示连接到 / tmp/a.sock 的进程

  4. ss -o state [state TCP-STATE] 如 ss -o state established 显示所有建立的连接

8.awk/sed


awk 和 sed 在文本处理方面十分强大,其中,awk 按列进行处理,sed 按行进行处理。

如采用冒号分隔数据,输出第一列数据 ($0 代表行全部列数据,$1 代表第一列,$2 代表第二列...)

  1. awk -F ":" '{print $1}'


在 awk 的结果基础上,结合 sort、uniq 和 head 等命令可以轻松完成频率统计等功能

  1. 查看文件的第100行到第200行:

  2. sed -n '100,200p' log.txt

  3. 替换字符串中的特定子串

  4. echo "int charset=gb2312 float"|sed "s/charset=gb2312/charset=UTF-8/g"

  5. 替换test文件每行匹配ab的部分为cd

  6. sed -i 's/ab/cd/g' test

9.screen


当采用 telnet 或 SSH 登录远程主机时,因为网络中断的原因会导致 session 终止,此时会触发 SIGHUP 信号使得任务终止,因此我们常常会看到有些任务采用 nohup 的方式运行,避免任务被打断。screen 通过多终端的方式,巧妙地解决了这个问题。 示例:

screen -S test 开启一个 screen,这时拥有一个终端,所有执行的程序都会在 ps 中展示

Ctrl+a 键 + d 键 退出当前 screen, 切到上级窗口

  1. screen -ls 查看所有 screen 列表,如

  2. 13333.test      (Detached)

  3. 14039.test4     (Detached)


表示两个screen,screen标识为13333.test和14039.test4 

screen -r [pid.]tty.host 进入选定的 screen,如 screen -r 13333.test

exit 关闭当前 screen

注:本文假定读者已经知道类似 top、netstat、df、vmstat 等常见命令的用法,所以介绍的都是一些容易被忽视却很实用的命令用法。本文对于这些命令进行了简化和提炼,所有命令的完整功能需要具体参考命令手册。

与 100 + 技术大牛面对面

SACC2017

作为国内最受欢迎的架构师盛会,2017 第九届中国系统架构师大会 (SACC) 将于将于 2017 年 10 月 19-21 日在北京新云南皇冠假日酒店震撼来袭。


大会以 “云智未来” 为主题,云集国内外顶级专家,围绕云计算、人工智能、大数据、移动互联网、产业应用等热点领域展开技术探讨与交流。本届大会共设置 2 大主会场,18 个技术专场;邀请来自互联网、金融、制造业、电商等多个领域,100 余位技术专家及行业领袖来分享他们的经验;并将吸引 4000 + 人次的系统运维、架构师及 IT 决策人士参会,为他们提供最具价值的交流平台。

点击“阅读原文”与100+技术大牛面对面,立享购票7.8折优惠~

原文作者:;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2019-07-17

  • 博文量
    1982
  • 访问量
    17917