一、lsof
简介
lsof
(List Open Files)是一个功能强大的命令行工具,用于列出当前系统中所有打开的文件及其相关进程。在 Unix 和 Linux 系统中,几乎所有事物(包括常规文件、目录、网络连接、设备等)都被视为文件,因此 lsof
在多种场景下都非常有用。
二、安装 lsof
在大多数 Linux 发行版中,lsof
可通过包管理器安装:
Debian/Ubuntu:
1 2
sudo apt update sudo apt install lsof
CentOS/RHEL:
1
sudo yum install lsof
Arch Linux:
1
sudo pacman -S lsof
三、基本语法
|
|
四、常用选项
(一)按进程过滤
-p <PID>
:按进程 ID 过滤。1
lsof -p 1234
-c <进程名>
:按进程名过滤。1
lsof -c sshd
-c <进程名1> -c <进程名2>
:同时列出多个进程的打开文件。1
lsof -c mysql -c apache
(二)按用户过滤
-u <用户名>
:按用户名过滤。1
lsof -u username
-u ^<用户名>
:排除指定用户的打开文件。1
lsof -u ^root
(三)按文件名或目录过滤
指定文件名或目录名,列出与之相关的打开文件。
1 2
lsof /path/to/file lsof /path/to/directory
使用
+D
递归列出目录及其子目录下所有打开的文件。1
lsof +D /path/to/directory
(四)按网络连接过滤
-i
:显示所有网络连接。1
lsof -i
-i :<端口号>
:按端口号过滤。1
lsof -i :80
-i <协议>@<IP地址>
:按协议和 IP 地址过滤。1
lsof -i tcp@192.168.1.100
-i TCP
:仅显示 TCP 连接。1
lsof -i TCP
-i UDP
:仅显示 UDP 连接。1
lsof -i UDP
(五)其他选项
-n
:不解析主机名,直接显示 IP 地址。-P
:不解析端口号,直接显示数字。-t
:仅显示进程 ID。-l
:显示文件的 inode 号。-a
:组合多个条件。1
lsof -u username -c process_name
五、使用场景
(一)查找占用特定文件的进程
|
|
此命令可帮助你找出哪个进程正在使用 /var/log/syslog
文件。
(二)查找占用特定端口的进程
|
|
此命令可帮助你找出哪个进程正在使用 TCP 端口 80。
(三)查找某个用户打开的文件
|
|
此命令可列出用户 username
打开的所有文件。
(四)查看某个进程打开的文件
|
|
此命令可列出进程 ID 为 1234 的所有打开文件。
(五)查找被删除但仍在使用的文件
|
|
此命令可帮助你找出已被删除但仍被进程占用的文件。
(六)监控文件系统活动
|
|
此命令可实时监控指定目录及其子目录下所有打开的文件。
(七)查找打开的文件数量
|
|
此命令可统计系统中打开的文件总数。
(八)识别资源泄漏
|
|
此命令可帮助你查找某个进程打开的文件,从而排查资源泄漏问题。
(九)查看特定类型的文件
|
|
此命令可列出所有 Unix 域套接字。
六、高级用法
(一)列出监听的网络连接
|
|
此命令可列出所有处于监听状态的 TCP 端口。
(二)列出特定用户的网络连接
|
|
此命令可列出用户 username
的所有网络连接。
(三)列出特定协议的文件
|
|
此命令可列出所有使用 HTTPS 端口的 TCP 文件。
(四)重复模式
|
|
此命令每 5 秒输出一次所有正在进行的 UDP 连接,直到手动终止。
(五)列出特定范围的文件描述符
|
|
此命令可列出文件描述符范围为 2-3 的文件。
七、注意事项
- 权限问题:某些信息(如其他用户的文件)可能需要管理员权限才能查看。
- 输出格式:
lsof
的输出包含多个字段,如进程 ID、用户、文件描述符等。可以通过man lsof
查看详细字段说明。 - 性能影响:在系统文件数量较多时,
lsof
的运行可能会稍显缓慢,尤其是在没有过滤条件的情况下。
八、总结
lsof
是一个功能强大的工具,适用于多种场景,包括故障排查、性能监测、资源管理等。通过掌握基本语法和常用选项,可以快速定位文件占用、网络连接等问题。结合过滤条件和其他命令,lsof
的应用场景更加广泛,能够满足复杂的系统管理和调试需求。