一、lsof 简介
lsof(List Open Files)是一个功能强大的命令行工具,用于列出当前系统中所有打开的文件及其相关进程。在 Unix 和 Linux 系统中,几乎所有事物(包括常规文件、目录、网络连接、设备等)都被视为文件,因此 lsof 在多种场景下都非常有用。
二、安装 lsof
在大多数 Linux 发行版中,lsof 可通过包管理器安装:
Debian/Ubuntu:
1 2sudo apt update sudo apt install lsofCentOS/RHEL:
1sudo yum install lsofArch Linux:
1sudo pacman -S lsof
三、基本语法
| |
四、常用选项
(一)按进程过滤
-p <PID>:按进程 ID 过滤。1lsof -p 1234-c <进程名>:按进程名过滤。1lsof -c sshd-c <进程名1> -c <进程名2>:同时列出多个进程的打开文件。1lsof -c mysql -c apache
(二)按用户过滤
-u <用户名>:按用户名过滤。1lsof -u username-u ^<用户名>:排除指定用户的打开文件。1lsof -u ^root
(三)按文件名或目录过滤
指定文件名或目录名,列出与之相关的打开文件。
1 2lsof /path/to/file lsof /path/to/directory使用
+D递归列出目录及其子目录下所有打开的文件。1lsof +D /path/to/directory
(四)按网络连接过滤
-i:显示所有网络连接。1lsof -i-i :<端口号>:按端口号过滤。1lsof -i :80-i <协议>@<IP地址>:按协议和 IP 地址过滤。1lsof -i tcp@192.168.1.100-i TCP:仅显示 TCP 连接。1lsof -i TCP-i UDP:仅显示 UDP 连接。1lsof -i UDP
(五)其他选项
-n:不解析主机名,直接显示 IP 地址。-P:不解析端口号,直接显示数字。-t:仅显示进程 ID。-l:显示文件的 inode 号。-a:组合多个条件。1lsof -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 的应用场景更加广泛,能够满足复杂的系统管理和调试需求。