lsof 命令
2024年11月1日大约 2 分钟
lsof(List Open Files)是 Unix 和 Linux 系统中的一个命令,用于列出当前系统中所有打开的文件及其相关信息。由于在 Unix/Linux 中几乎所有内容(包括目录、设备、套接字等)都被视为文件,lsof 可以用于查看打开的文件、网络连接、打开的端口等。
基本语法
lsof [选项]常用选项
-u 用户名:显示指定用户打开的文件。-p PID:显示指定进程 ID (PID) 打开的文件。-i:显示与网络相关的文件(套接字),通常用于查看网络连接。-i :端口号:查看特定端口的网络连接。-i tcp:仅显示 TCP 连接。-i udp:仅显示 UDP 连接。
-t:只输出 PID(适合脚本处理)。-c 进程名:显示指定进程名相关的文件。+D 目录:显示特定目录中打开的文件,但不递归。+d 目录:显示特定目录及其子目录中打开的文件(递归搜索)。-n:不解析主机名,以减少查询时间。-r N:每隔 N 秒刷新lsof的输出结果。
示例
1. 查看所有打开的文件
lsof2. 查看指定用户打开的文件
lsof -u username # 显示指定用户 username 打开的文件3. 查看特定进程的文件
lsof -p 1234 # 显示 PID 为 1234 的进程打开的文件4. 查看特定端口的网络连接
lsof -i :80 # 查看使用端口 80 的进程
lsof -i tcp:443 # 查看 TCP 端口 443 上的进程(常用于 HTTPS)5. 查看与网络相关的文件
lsof -i # 显示所有网络连接
lsof -i tcp # 显示所有 TCP 连接
lsof -i udp # 显示所有 UDP 连接6. 查找特定目录下打开的文件
lsof +D /path/to/dir # 显示目录 /path/to/dir 下的打开文件
lsof +d /path/to/dir # 显示目录 /path/to/dir 及子目录下的打开文件7. 查看某程序打开的文件
lsof -c ssh # 查看名称包含 "ssh" 的进程打开的文件8. 结合 grep 查找特定文件
lsof | grep "filename" # 在所有打开的文件中查找特定文件常用场景
- 查找文件占用:用于检测文件或设备是否被占用(如文件无法删除、设备无法卸载)。
- 查看网络连接:通过
-i选项查看网络连接,特别是查看某端口的活动连接。 - 监控进程文件使用:查找某个进程打开的文件,有助于调试和资源管理。
注意事项
lsof通常需要管理员权限(sudo)来查看其他用户的文件和网络连接。- 使用
-r选项可以持续监控系统中的文件打开情况。