共计 2644 个字符,预计需要花费 7 分钟才能阅读完成。
这篇文章给大家分享的是有关 Linux 下容易被忽视的命令有哪些的内容。丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,一起跟随丸趣 TV 小编过来看看吧。
一、前言
工作中发现很多同学对于 Linux 下的命令不太熟悉,尤其是一些功能强大的工具,使用者很少。正所谓工欲善其事,必先利其器。
二、命令
1.strace
strace 用于跟踪程序执行过程中的系统调用,如跟踪 test 进程,只需要:
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:
strace -s 1024 -f -e trace=read,write -p 12345
2.tcpdump
tcpdump 是 Linux 上的抓包工具,如抓取 eth0 网卡上的包,使用:
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 报文,以文本形式展示:
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 通信:
Server: nc -l 127.0.0.1 12345 Client: nc 127.0.0.1 12345
在端口号 12345 上开启 UDP Server 和 Client 模拟 TCP 通信:
Server: nc -ul 127.0.0.1 12345 Client: nc -u 127.0.0.1 12345
Unix Socket 通信示例:
Server: nc -Ul /tmp/1.sock Client: nc -U /tmp/1.sock
4.curl
curl 用于模拟 HTTP 请求,在终端模拟请求时常用,如最基本的用法:
curl http://www.baidu.com
但如果需要:
指定 HTTP 首部 - H 选项,如 -H Host: xx.xx.xx.xx
指定请求方法 - X 选项,如 -X POST,- d 指定 post 数据
显示请求详细信息,包括请求和响应首部 - v 选项
重定向请求自动追踪 - L 选项
常见的 curl 请求选项 -sSfL 表示:不显示进度信息,显示错误信息,发生 HTTP 错误时失败,自动跟踪重定向
5.find
find 可用于查找文件,比如:
find . -name 1.txt
表示在当前目录及其子目录下查找文件名为 1.txt 的文件,结合 xargs 使用功能更加强大,如:
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 目录,速度快很多。
常见示例:
ss -t -a 显示所有的 TCP Sockets
ss -u -a 显示所有的 UDP Sockets
ss -x src /tmp/a.sock 显示连接到 /tmp/a.sock 的进程
ss -o state [state TCP-STATE] 如 ss -o state established 显示所有建立的连接
8.awk/sed
awk 和 sed 在文本处理方面十分强大,其中,awk 按列进行处理,sed 按行进行处理。
如采用冒号分隔数据,输出 *** 列数据 ($0 代表行全部列数据,$1 代表 *** 列,$2 代表第二列 …)
awk -F : {print $1}
在 awk 的结果基础上,结合 sort、uniq 和 head 等命令可以轻松完成频率统计等功能
查看文件的第 100 行到第 200 行: sed -n 100,200p log.txt 替换字符串中的特定子串 echo int charset=gb2312 float |sed s/charset=gb2312/charset=UTF-8/g 替换 test 文件每行匹配 ab 的部分为 cd sed -i s/ab/cd/g test
9.screen
当采用 telnet 或 SSH 登录远程主机时,因为网络中断的原因会导致 session 终止,此时会触发 SIGHUP 信号使得任务终止,因此我们常常会看到有些任务采用 nohup 的方式运行,避免任务被打断。screen 通过多终端的方式,巧妙地解决了这个问题。 示例:
screen -S test 开启一个 screen,这时拥有一个终端,所有执行的程序都会在 ps 中展示
Ctrl+ a 键 + d 键 退出当前 screen, 切到上级窗口
screen -ls 查看所有 screen 列表,如
13333.test (Detached) 14039.test4 (Detached) 表示两个 screen,screen 标识为 13333.test 和 14039.test4
screen -r [pid.]tty.host 进入选定的 screen,如 screen -r 13333.test
exit 关闭当前 screen
感谢各位的阅读!关于“Linux 下容易被忽视的命令有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!