lsof
(list open files)是一个列出当前系统打开文件的工具。在linux环境中一切皆文件,经过文件不单单能够访问常规数据,还能够访问网络链接和硬件。因此如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,不管这个文件的本质如何,该文件描述符为应用程序与基础操做系统之间的交互提供了通用接口。由于应用程序打开文件的描述符列表提供了大量关于这个应用程序自己的信息,所以经过lsof工具可以查看这个列表对系统监测以及排错将是颇有帮助的。java
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root cwd DIR 253,0 224 64 / systemd 1 root rtd DIR 253,0 224 64 / systemd 1 root txt REG 253,0 1482128 67418805 /usr/lib/systemd/systemd systemd 1 root mem REG 253,0 20040 33619254 /usr/lib64/libuuid.so.1.3.0 ...
lsof
输出各列信息的意义以下:mysql
$ sudo lsof /home/mysql/ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 18522 mysql cwd DIR 253,0 4096 655378 /home/mysql sudo 18544 root cwd DIR 253,0 4096 655378 /home/mysql lsof 18545 root cwd DIR 253,0 4096 655378 /home/mysql lsof 18546 root cwd DIR 253,0 4096 655378 /home/mysql
可配合 +d
选项,表示/home/mysql
目录及目录下的文件,不包括子目录linux
$ sudo lsof /home/mysql/ +d
-p
选项,列出指定pid打开的文件,若是要多个,则用逗号隔开sql
$ sudo lsof -p 16273 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nano 16273 root cwd DIR 253,0 4096 1179649 /root
-u
选项,列出指定用户打开的文件bash
$ sudo lsof -u test1 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 16335 test1 cwd DIR 253,0 4096 1966556 /home/test1
-c
选项,列出指定进程名打开的文件网络
sudo lsof -c java # 显示command列中以java的全部打开的文件 sudo lsof -c java -c sh # 显示command列中以java开头或以sh开头的打开的文件 sudo lsof -c ^java # 显示command列中全部不以java开头的打开的文件
-i
选项,能够列出网络链接状况。语法格式以下:ssh
lsof -i[46] [protocol] [@hostname|hostaddr] [:service|prot] 参数解析: 4/6:IPv4或IPv6 protocol:TCP或UDP hostname:主机名 hostaddr:ip地址 service:/etc/service中服务名,可写多个 port:端口号,可写多个
1. 查看IPv4网络状况工具
$ lsof -i 4 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rpcbind 1599 rpc 6u IPv4 10168 0t0 UDP *:sunrpc rpcbind 1599 rpc 7u IPv4 10169 0t0 UDP *:926 ...
2. 查看指定IPui
-n
表示不进行IP域名反查,直接显示ip地址操作系统
$ lsof -i @10.0.137.144 -n COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 16734 root 3u IPv4 14692046 0t0 TCP 10.0.137.144:ssh->10.0.2.136:49614 (ESTABLISHED) sshd 16736 test 3u IPv4 14692046 0t0 TCP 10.0.137.144:ssh->10.0.2.136:49614 (ESTABLISHED)
3. 查看指定IP及端口
$ sudo lsof -i @10.0.137.144:22 -n COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 16734 root 3u IPv4 14692046 0t0 TCP 10.0.137.144:ssh->10.0.2.136:49614 (ESTABLISHED) sshd 16736 test 3u IPv4 14692046 0t0 TCP 10.0.137.144:ssh->10.0.2.136:49614 (ESTABLISHED)
4. 查看指定端口
$ lsof -i :22 -n COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1095 root 3u IPv4 14032 0t0 TCP *:ssh (LISTEN) sshd 1095 root 4u IPv6 14034 0t0 TCP *:ssh (LISTEN) sshd 16734 root 3u IPv4 14692046 0t0 TCP 10.0.137.144:ssh->10.0.2.136:49614 (ESTABLISHED) sshd 16736 test 3u IPv4 14692046 0t0 TCP 10.0.137.144:ssh->10.0.2.136:49614 (ESTABLISHED)
5. 查看指定协议
$ sudo lsof -i UDP COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsyslogd 17935 root 3u IPv4 11066422 0t0 UDP *:40296