说明:
lsof 全称为 list open file。
是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。
案例:
1、直接使用命令 lsof
[root@cenos79 log]# lsof | head
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,1 4096 2 /
systemd 1 root rtd DIR 253,1 4096 2 /
systemd 1 root txt REG 253,1 1632744 269418 /usr/lib/systemd/systemd
systemd 1 root mem REG 253,1 20064 266479 /usr/lib64/libuuid.so.1.3.0
systemd 1 root mem REG 253,1 265576 266471 /usr/lib64/libblkid.so.1.1.0
systemd 1 root mem REG 253,1 90176 265736 /usr/lib64/libz.so.1.2.7
systemd 1 root mem REG 253,1 157424 266444 /usr/lib64/liblzma.so.5.2.2
systemd 1 root mem REG 253,1 23968 266498 /usr/lib64/libcap-ng.so.0.0.0
systemd 1 root mem REG 253,1 19896 265924 /usr/lib64/libattr.so.1.1.0
[root@cenos79 log]#
解释:
1、COMMAND 表示进程或命令的名称。
2、PID 表示进程号。
3、USER 表示进程的所有者。
4、FD 文件扫描符。应用程序通过文件描述符识别该文件。如cwd、txt等。
4.1、cwd:表示current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改。
4.2、txt:该类型的文件是程序代码,如应用程序二进制文件本身或共享库。
4.3、0表示标准输出。
4.4、1表示标准输入。
4.5、2表示标准错误。
一般在标准输出、标准错误、标准输入后还跟着文件状态模式:r、w、u等。
u、表示该文件被打开并处于读取/写入模式。
r、表示该文件被打开并处于只读模式。
w、表示该文件被打开并处于写入模式。
-:表示该文件的状态模式为unknow,且被锁定。
空格:表示该文件的状态模式为unknow,且没有锁定。
5、TYPE 文件类型,如DIR、REG等,常见的文件类型。
5.1、DIR:表示目录。
5.2、CHR:表示字符类型。
5.3、BLK:块设备类型。
5.4、UNIX: UNIX 域套接字。
5.5、FIFO:先进先出 (FIFO) 队列。
5.6、IPv4:网际协议 (IP) 套接字。
6、DEVICE 指定磁盘的名称。
7、SIZE/OFF 文件的大小。
8、NODE 索引节点(文件在磁盘上的标识)。
9、NAME 打开文件的确切名称。
2、查看某个文件的进程。
[root@cenos79 log]# lsof /var/log/messages | column -t
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsyslogd 15056 root 6w REG 253,1 62463 132212 /var/log/messages
[root@cenos79 log]#
案例中表示, /var/log/messages 是由 rsyslogd 进程在使用。
3、-c 进程名称。 显示指定进程名称所打开的文件。
-c 进程名称。 显示指定进程名称所打开的文件。
[root@cenos79 log]# lsof -c systemd
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,1 4096 2 /
systemd 1 root rtd DIR 253,1 4096 2 /
systemd 1 root txt REG 253,1 1632744 269418 /usr/lib/systemd/systemd
systemd 1 root mem REG 253,1 20064 266479 /usr/lib64/libuuid.so.1.3.0
systemd 1 root mem REG 253,1 265576 266471 /usr/lib64/libblkid.so.1.1.0
systemd 1 root mem REG 253,1 90176 265736 /usr/lib64/libz.so.1.2.7
systemd 1 root mem REG 253,1 157424 266444 /usr/lib64/liblzma.so.5.2.2
systemd 1 root mem REG 253,1 23968 266498 /usr/lib64/libcap-ng.so.0.0.0
4、-p pid 显示指定进程号所打开的文件。
[root@cenos79 log]# lsof -p 1 | head
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,1 4096 2 /
systemd 1 root rtd DIR 253,1 4096 2 /
systemd 1 root txt REG 253,1 1632744 269418 /usr/lib/systemd/systemd
systemd 1 root mem REG 253,1 20064 266479 /usr/lib64/libuuid.so.1.3.0
systemd 1 root mem REG 253,1 265576 266471 /usr/lib64/libblkid.so.1.1.0
systemd 1 root mem REG 253,1 90176 265736 /usr/lib64/libz.so.1.2.7
systemd 1 root mem REG 253,1 157424 266444 /usr/lib64/liblzma.so.5.2.2
systemd 1 root mem REG 253,1 23968 266498 /usr/lib64/libcap-ng.so.0.0.0
systemd 1 root mem REG 253,1 19896 265924 /usr/lib64/libattr.so.1.1.0
5、-u username 列表某个用户打开的文件。
[root@cenos79 log]# lsof -u root | head
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,1 4096 2 /
systemd 1 root rtd DIR 253,1 4096 2 /
systemd 1 root txt REG 253,1 1632744 269418 /usr/lib/systemd/systemd
systemd 1 root mem REG 253,1 20064 266479 /usr/lib64/libuuid.so.1.3.0
systemd 1 root mem REG 253,1 265576 266471 /usr/lib64/libblkid.so.1.1.0
systemd 1 root mem REG 253,1 90176 265736 /usr/lib64/libz.so.1.2.7
systemd 1 root mem REG 253,1 157424 266444 /usr/lib64/liblzma.so.5.2.2
systemd 1 root mem REG 253,1 23968 266498 /usr/lib64/libcap-ng.so.0.0.0
systemd 1 root mem REG 253,1 19896 265924 /usr/lib64/libattr.so.1.1.0
6、lsof -c mysql -c httpd 列出多个程序打开的文件。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 17418 mysql cwd DIR 253,1 4096 2517605 /www/server/data
mysqld 17418 mysql rtd DIR 253,1 4096 2 /
mysqld 17418 mysql txt REG 253,1 252004608 280945 /usr/sbin/mysqld
mysqld 17418 mysql mem REG 253,1 68192 266453 /usr/lib64/libbz2.so.1.0.6
mysqld 17418 mysql mem REG 253,1 157424 266444 /usr/lib64/liblzma.so.5.2.2
mysqld 17418 mysql mem REG 253,1 90176 265736 /usr/lib64/libz.so.1.2.7
httpd 26300 apache 0r CHR 1,3 0t0 5334 /dev/null
httpd 26300 apache 1u unix 0xffff9b86f9b0c800 0t0 304342850 socket
httpd 26300 apache 2w REG 253,1 58055 132003 /var/log/httpd/error_log
httpd 26300 apache 3u IPv4 304342860 0t0 TCP *:http (LISTEN)
httpd 26300 apache 4r FIFO 0,9 0t0 361090317 pipe
7、lsof -p 1,2,3 | head 打开多个进程号的文件。
[root@cenos79 log]# lsof -p 1,2,3 | head
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,1 4096 2 /
systemd 1 root rtd DIR 253,1 4096 2 /
systemd 1 root txt REG 253,1 1632744 269418 /usr/lib/systemd/systemd
8、-i 通过监听指定的协议、端口和主机等信息,列出符合条件的进程信息。
[root@cenos79 log]# lsof -i tcp
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 416 root 3u IPv4 203042 0t0 TCP *:ssh (LISTEN)
httpd 3810 apache 3u IPv4 304342860 0t0 TCP *:http (LISTEN)
httpd 3812 apache 3u IPv4 304342860 0t0 TCP *:http (LISTEN)
httpd 3815 apache 3u IPv4 304342860 0t0 TCP *:http (LISTEN)
BT-Panel 9892 root 5u IPv4 303653460 0t0 TCP *:ddi-tcp-1 (LISTEN)
sshd 10154 root 3u IPv4 364460418 0t0 TCP iZ2zeho556ymkh0betn2r0Z:ssh->114.243.122.141:51036 (ESTABLISHED)
nginx 10522 root 6u IPv4 324793554 0t0 TCP *:webcache (LISTEN)
9、查看指定的 tcp 端口。
[root@cenos79 log]# lsof -i tcp:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 3810 apache 3u IPv4 304342860 0t0 TCP *:http (LISTEN)
httpd 3812 apache 3u IPv4 304342860 0t0 TCP *:http (LISTEN)
httpd 3815 apache 3u IPv4 304342860 0t0 TCP *:http (LISTEN)
httpd 14911 root 3u IPv4 304342860 0t0 TCP *:http (LISTEN)
httpd 18716 apache 3u IPv4 304342860 0t0 TCP *:http (LISTEN)
httpd 18717 apache 3u IPv4 304342860 0t0 TCP *:http (LISTEN)
httpd 18718 apache 3u IPv4 304342860 0t0 TCP *:http (LISTEN)