Linux命令:lsof - 列出打开的文件及其信息
lsof
命令是list open files
的缩写,该命令用于列出当前系统上所有已经打开的文件。
Linux系统一切皆文件,不仅仅包括普通的数据文件,还有网络套接字、设备文件、管道、命名空间等
常用参数:
-a
:逻辑AND,多个-lsof选项之间需满足所有条件。-b
:显示IPv4/IPv6缓存和统计信息。-c <进程名>
:列出指定名称的进程所打开的文件。-d <文件描述符号>
:仅显示指定文件描述符对应的文件。-g
:显示进程组信息。-i [46] [protocol][@hostname|:portnumber]
:列出所有网络连接信息,可以筛选TCP或UDP协议以及特定主机或端口。-p <进程ID>
:显示指定进程ID的进程所打开的文件。-u <用户名>
:列出指定用户打开的所有文件。-n
:禁止DNS解析,显示IP地址而非主机名。-t
:只输出进程ID,常用于与其他命令结合使用。-h
:显示帮助信息。-L
:列出符号链接到的文件而不是符号链接本身。-r <间隔秒数>
:连续列出,每隔指定秒数刷新输出结果。-F
:使用格式输出,便于其他程序分析。
输出格式:
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,0 265 64 /
COMMAND
:执行命令的程序名称,即进程的命令行全称PID
:进程idTID
:线程idUSER
:拥有该进程的用户账号名称。FD
:文件描述符TYPE
:文件类型。如DIR(目录)、REG(常规文件)、CHR(字符设备)、BLK(块设备)、UNIX(Unix域套接字)、FIFO(命名管道)、IPv4/IPv6套接字等DEVICE
:设备号SIZE/OFF
:大小/偏移量,具体含义取决于文件类型。如果是普通文件,通常是文件的大小;如果是设备文件或套接字等,可能显示不同的信息。NODE
:索引节点(inode)号,是文件系统中标识文件的唯一编号。NAME
:打开文件的名称,也就是文件的路径。对于网络套接字,可能是IP地址和端口号的组合形式
使用示例:
# 列出系统中所有打开的文件
lsof
# 查找哪个进程正在使用特定文件
lsof /path/to/somefile
# 列出某个进程打开的所有文件
lsof -p <pid>
# 查找指定用户打开的文件
lsof -u <username>
# 查找监听指定端口的进程
lsof -i :<port>
# 查找监听指定端口的进程时指定协议
lsof -i tcp:<port> -i udp:<port>
# 显示所有网络连接
lsof -i -n
# 查找某个应用程序打开的所有文件
lsof -c <application>
# 查找已经被删除但仍然被进程占用的文件
lsof +L1
# 按照文件描述符查找文件
# 0 标准输入(stdin)
# 1 标准输出(stdout)
# 2 标准错误输出(stderr)
lsof -d 0,1,2
# 列出所有打开的网络文件描述符(网络套接字)
lsof -i
# 列出某个目录及其子目录下所有被打开的文件
lsof +D /path/to
# 连续列出文件状态的变化,每5秒刷新一次
lsof -r 5
# 将输出结果格式化以便于后续处理
lsof -F
Linux命令系列: