小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
lsof(list open files)是一个列出打开文件的工具。众所周知,在linux系统中,一切皆是文件,通过文件不仅可以访问常规数据,还可以访问网络连接和硬件。所以通过lsof命令,不仅可以查看打开的文件、目录信息,还可以查看网络相关的信息、管道等等。下面就来介绍一下lsof命令的用法。
lsof可以查看打开的文件有:
- 普通文件
- 目录
- 网络文件系统的文件
- 字符或设备文件
- (函数) 共享库
- 管道、命名管道
- 符号链接
- 网络相关文件(底层的socket字流,网络socket,unix域名socket)
- 其它类型的文件等等
lsof命令语法详解
语法格式
lsof [选项]
常用选项如下:
- -a:使用 AND 逻辑,合并选项的输出内容
- -c <进程名>:列出名称以指定名称开头的进程打开的文件
- -d <文件描述符>:列出打开指定文件描述的进程
- +d <目录>:列出指定目录下被打开的文件
- +D <目录>:递归列出目录下被打开的文件
- -u <用户名>:列出指定用户打开的文件
- -p <进程号>:列出指定进程号打开的文件
- -i <条件>:列出符合条件的与网络相关的文件(:端口、 @ip等)
输出内容详解:
执行lsof输出如下:
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 8,1 4096 2 /
systemd 1 root rtd DIR 8,1 4096 2 /
systemd 1 root txt REG 8,1 1632744 790864 /usr/lib/systemd/systemd
systemd 1 root mem REG 8,1 20064 787793 /usr/lib64/libuuid.so.1.3.0
systemd 1 root mem REG 8,1 265576 789229 /usr/lib64/libblkid.so.1.1.0
systemd 1 root mem REG 8,1 90176 787777 /usr/lib64/libz.so.1.2.7
systemd 1 root mem REG 8,1 157424 787790 /usr/lib64/liblzma.so.5.2.2
systemd 1 root mem REG 8,1 23968 788002 /usr/lib64/libcap-ng.so.0.0.0
systemd 1 root mem REG 8,1 19896 788009 /usr/lib64/libattr.so.1.1.0
systemd 1 root mem REG 8,1 19248 787615 /usr/lib64/libdl-2.17.so
systemd 1 root mem REG 8,1 402384 787766 /usr/lib64/libpcre.so.1.2.0
systemd 1 root mem REG 8,1 2156352 787585 /usr/lib64/libc-2.17.so
systemd 1 root mem REG 8,1 142144 787611 /usr/lib64/libpthread-2.17.so
systemd 1 root mem REG 8,1 88720 793180 /usr/lib64/libgcc_s-4.8.5-20150702.so.1
···
···
-
COMMAND:进程的名称
-
PID:进程标识符
-
TID:线程标识符
-
USER:进程所有者
-
FD:文件描述符,应用程序通过文件描述符识别该文件。
-
TYPE:文件类型,常见的文件类型有以下几种:
- DIR:表示目录
- CHR:表示字符类型
- BLK:块设备类型
- UNIX:UNIX 域套接字
- FIFO:先进先出(FIFO)队列
- IPv4:网际协议(IP)套接字
-
DEVICE:指定磁盘的名称
-
SIZE/OFF:文件的大小
-
NODE:索引节点(文件在磁盘上的标识)
-
NAME:打开文件的确切名称
常用操作
- 命令
lsof test.txt:显示使用test.txt文件的进程 - 命令
lsof -i:80:列出80端口目前打开的文件列表 - 命令
lsof -i:列出所有的网络连接 - 命令
lsof -i tcp:列出所有的 TCP 网络连接信息 - 命令
lsof -i udp:列出所有的 UDP 网络连接信息 - 命令
lsof -i tcp:8080:列出8080端口 TCP 协议的所有连接信息 - 命令
lsof -i udp:8080:列出8080端口 UDP 协议的所有连接信息 - 命令
lsof -c docker:列出以docker开头的进程打开的文件列表 - 命令
lsof -p 3669:列出指定进程打开的文件列表 - 命令
lsof -u root:列出指定用户打开的文件列表 - 命令
lsof -u root -i tcp:列出指定用户打开的文件列表信息和所有的 TCP 网络连接信息 - 命令
lsof -a -u root -i tcp:列出指定用户打开的文件列表信息,同时是 TCP 网络连接信息 - 命令:
lsof +d /usr/local/说明:列出指定目录下被进程打开的文件列表
原创不易,如果小伙伴们觉得有帮助,麻烦点个赞再走呗~
最后,感谢女朋友在工作和生活中的包容、理解与支持 !