1. 简介
lsof(list open file)用于列出打开指定文件的进程,或进程打开的文件。 Linux下一切皆文件,这里的文件可以是:
- 普通文件或目录,符号链接
- 网络文件系统的文件,网络文件(NFS、Socket、unix域名Socket)
- 字符或块设备
- 共享库
- 管道,命名管道
Option | 描述 | 例子 |
---|---|---|
-a | 打开指定文件的进程 | lsof -a logs/*.log |
-p <进程号> | 列出指定进程号所打开的文件 | lsof -p 68661 |
-c <进程名> | 列出进程名对应进程所打开的文件 | lsof -c mysql |
-g | 列出GID号进程详情,线上进程组号 | lsof -g |
+d <目录> | 列出目录下被打开的文件 | lsof +d logs/ |
+D <目录> | 递归列出目录下被打开的文件 | lsof +D logs/ |
-i <条件> | 列出符合条件的进程。(4、6、协议、:端口、 @ip ) | lsof -i 4 lsof -i 6 lsof -i TCP lsof -i :8080 lsof -i @192.168.36.92 |
-u <uid> | 列出UID号进程详情 | 先根据id 获取用户对应的uidlsof -u 1005 |
-h | 显示帮助信息 | |
-v | 显示版本信息 | |
-d <文件号> | 列出占用该文件号的进程 | lsof -d |
-n <目录> | 列出使用NFS的文件 |
2. 实例
2.1 列出打开指定文件的进程
lsof -a logs/*
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 68661 tomcat 1w REG 8,4 4163932 12896179966 logs/catalina.out
java 68661 tomcat 2w REG 8,4 4163932 12896179966 logs/catalina.out
java 68661 tomcat 9w REG 8,4 124952 12958543250 logs/catalina.2020-05-08.log
java 68661 tomcat 10w REG 8,4 1588 12899674820 logs/localhost.2020-05-08.log
java 68661 tomcat 11w REG 8,4 0 12960986910 logs/manager.2020-05-08.log
java 68661 tomcat 12w REG 8,4 0 12962162467 logs/host-manager.2020-05-08.log
java 68661 tomcat 53w REG 8,4 9481508 13008365317 logs/localhost_access_log.2020-05-08.txt
2.2 列出指定用户(排除指定用户)打开的文件
lsof -u tomcat
lsof -u ^root # 排除root,其他用户打开的文件
2.3 列出特定命令打开的文件
lsof -c mysql
2.4 列出指定PID打开的文件
lsof -p 137910
lsof -p 1,2,3 # 多个PID
lsof -p ^1 # 排除PID
2.5 列出所有的网络连接
lsof -i | head -10
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 19672 tomcat 47u IPv4 2627111864 0t0 TCP *:58089 (LISTEN)
java 19672 tomcat 52u IPv4 2627111868 0t0 TCP *:58019 (LISTEN)
java 19672 tomcat 60u IPv4 2654162170 0t0 TCP qaserver1:18086->192.168.156.129:63085 (ESTABLISHED)
java 19672 tomcat 61u IPv4 2627111876 0t0 TCP localhost:8109 (LISTEN)
java 19956 tomcat 46u IPv4 1392272368 0t0 TCP *:17080 (LISTEN)
java 19956 tomcat 47u IPv4 1392272369 0t0 TCP *:17009 (LISTEN)
java 19956 tomcat 48u IPv4 2714881397 0t0 TCP qaserver1:63540->qaserver1:mysql (ESTABLISHED)
java 19956 tomcat 86u IPv4 1392300038 0t0 TCP localhost:17005 (LISTEN)
java 25629 tomcat 46u IPv4 1392295271 0t0 TCP *:48080 (LISTEN)
2.6 列出所有的TCP连接
lsof -i tcp
2.7 列出所有连接指定端口的进程
lsof -i :8080
2.8 列出特定用户打开的所有网络端口
lsof -a -u tomcat -i
2.9 进程ID:1234打开的所有IPv4连接
lsof -i 4 -a -p 1234
2.10 qaserver1上3306、80端口打开的进程,每隔3s重新执行
lsof -i @qaserver1:3306,80 -r 3
3. 字段说明
[root@localhost /data/apollo]#lsof | more
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,0 4096 128 /
systemd 1 root rtd DIR 253,0 4096 128 /
systemd 1 root txt REG 253,0 1523624 25890731 /usr/lib/systemd/systemd
systemd 1 root mem REG 253,0 20032 18349978 /usr/lib64/libuuid.so.1.3.0
systemd 1 root mem REG 253,0 252696 16979944 /usr/lib64/libblkid.so.1.1.0
systemd 1 root mem REG 253,0 90664 16850728 /usr/lib64/libz.so.1.2.7
systemd 1 root mem REG 253,0 153192 17282020 /usr/lib64/liblzma.so.5.0.99
systemd 1 root mem REG 253,0 19888 16850823 /usr/lib64/libattr.so.1.1.0
systemd 1 root mem REG 253,0 19776 16991745 /usr/lib64/libdl-2.17.so
systemd 1 root mem REG 253,0 402384 16829280 /usr/lib64/libpcre.so.1.2.0
systemd 1 root mem REG 253,0 2127336 16991739 /usr/lib64/libc-2.17.so
输出参数说明
---------------------------------------------------------------------------
COMMAND :进程的名称
PID :进程标识符
PPID :父进程标识符(需要指定-R参数)
USER :进程所有者
PGID :进程所属组
FD :文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
(1)cwd:表示current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改
(2)txt :该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序
(3)lnn:library references (AIX);
(4)er:FD information error (see NAME column);
(5)jld:jail directory (FreeBSD);
(6)ltx:shared library text (code and data);
(7)mxx :hex memory-mapped type number xx.
(8)m86:DOS Merge mapped file;
(9)mem:memory-mapped file;
(10)mmap:memory-mapped device;
(11)pd:parent directory;
(12)rtd:root directory;
(13)tr:kernel trace file (OpenBSD);
(14)v86 VP/ix mapped file;
(15)0:表示标准输出
(16)1:表示标准输入
(17)2:表示标准错误
一般在标准输出、标准错误、标准输入后还跟着文件状态模式:r、w、u等
(1)u:表示该文件被打开并处于读取/写入模式
(2)r:表示该文件被打开并处于只读模式
(3)w:表示该文件被打开并处于
(4)空格:表示该文件的状态模式为unknow,且没有锁定
(5)-:表示该文件的状态模式为unknow,且被锁定
时在文件状态模式后面,还跟着相关的锁
(1)N:for a Solaris NFS lock of unknown type;
(2)r:for read lock on part of the file;
(3)R:for a read lock on the entire file;
(4)w:for a write lock on part of the file;(文件的部分写锁)
(5)W:for a write lock on the entire file;(整个文件的写锁)
(6)u:for a read and write lock of any length;
(7)U:for a lock of unknown type;
(8)x:for an SCO OpenServer Xenix lock on part of the file;
(9)X:for an SCO OpenServer Xenix lock on the entire file;
(10)space:if there is no lock.
TYPE :文件类型,如DIR、REG等,常见的文件类型
(1)DIR:表示目录
(2)CHR:表示字符类型
(3)BLK:块设备类型
(4)UNIX: UNIX 域套接字
(5)FIFO先进先出 (FIFO) 队列
(6)IPv4:网际协议 (IP) 套接字
DEVICE :指定磁盘的名称
SIZE :文件的大小
NODE :索引节点(文件在磁盘上的标识)
NAME :打开文件的确切名称