lsof(list open files)命令是一个强大的工具,用于列出系统中所有打开的文件。在Linux系统中,一切皆文件,包括普通文件、目录、网络套接字、管道等。
基本用法
关键选项
| 选项 |
描述 |
| 无选项 |
列出所有活跃进程打开的文件 |
| -a |
结果进行”与”运算(默认是”或”运算) |
| -l |
显示用户ID而不是用户名 |
| -h |
显示帮助信息 |
| -t |
仅返回进程ID |
| -U |
显示UNIX套接字地址 |
| -F |
格式化输出结果,用于其他命令 |
| -c |
显示指定命令打开的文件 |
| -p |
显示指定进程ID打开的文件 |
| -u |
显示指定用户打开的文件 |
| -i |
显示网络连接 |
| -d |
显示指定文件描述符的文件 |
网络连接信息
显示所有网络连接
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| lsof -i
lsof -i 4
lsof -i 6
lsof -iTCP
lsof -iUDP
|
端口相关
1 2 3 4 5 6 7 8
| lsof -i :22
lsof -i :80,443
lsof -i :1000-2000
|
主机和端口组合
1 2 3 4 5 6 7 8
| lsof -i@192.168.1.100
lsof -i@192.168.1.100:80
lsof -i @192.168.1.100
|
连接状态
1 2 3 4 5 6 7 8
| lsof -i -sTCP:LISTEN
lsof -i -sTCP:ESTABLISHED
lsof -i -sTCP:CLOSE_WAIT
|
用户相关
1 2 3 4 5 6 7 8
| lsof -u username
lsof -u user1,user2
lsof -u ^username
|
进程和命令相关
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| lsof -p 1234
lsof -p 1234,5678
lsof -c nginx
lsof -c "^java"
lsof -t -c java
|
文件和目录相关
1 2 3 4 5 6 7 8 9 10 11
| lsof /path/to/file
lsof +D /path/to/directory
lsof +R 3 /path/to/directory
lsof +L1
|
高级用法
组合选项
1 2 3 4 5 6 7 8
| lsof -a -u username -i :80
lsof -a -p 1234 -i
lsof -a -c nginx -iTCP
|
格式化输出
1 2 3 4 5
| lsof -F pcfn
lsof -F0 pcfn
|
查找占用文件的进程
1 2 3 4 5
| lsof /path/to/locked/file
lsof +D /path/to/directory
|
查找网络问题
1 2 3 4 5 6 7 8
| lsof -i :80
lsof -i -sTCP:LISTEN
lsof -i @192.168.1.100
|
实用示例
1. 查找占用端口的进程
1 2 3 4 5
| lsof -i :8080
lsof -t -i :8080
|
2. 查找进程打开的文件
1 2 3 4 5
| lsof -c nginx
lsof -p 1234 -i
|
3. 查找用户活动
1 2 3 4 5
| lsof -u john
lsof -u john -i
|
4. 查找删除但仍占用的文件
1 2 3 4 5
| lsof +L1
lsof -a +L1 -c nginx
|
输出字段解释
| 字段 |
含义 |
| COMMAND |
进程名称 |
| PID |
进程ID |
| USER |
进程所有者 |
| FD |
文件描述符 |
| TYPE |
文件类型 |
| DEVICE |
设备号 |
| SIZE |
文件大小 |
| NODE |
节点号 |
| NAME |
文件名或网络连接信息 |
文件描述符类型
| 类型 |
含义 |
| cwd |
当前工作目录 |
| txt |
可执行文件 |
| mem |
内存映射文件 |
| mmap |
内存映射设备 |
| rtd |
根目录 |
| 0 |
标准输入 |
| 1 |
标准输出 |
| 2 |
标准错误 |
| u |
UDP套接字 |
| t |
TCP套接字 |
常见问题解决
1. 端口被占用
问题:启动服务时提示端口已被占用
解决方案:
1 2 3 4 5
| lsof -i :端口号
kill $(lsof -t -i :端口号)
|
2. 磁盘空间不足但看不到大文件
问题:磁盘空间不足,但找不到大文件
解决方案:
3. 查找可疑连接
问题:发现可疑的网络连接
解决方案:
1 2 3 4 5
| lsof -i
lsof -i -sTCP:ESTABLISHED
|
性能考虑
lsof命令会扫描系统中所有打开的文件,可能会消耗较多系统资源
- 在大型系统上,
lsof可能需要较长时间才能完成
- 对于频繁执行的场景,建议使用
-t 选项只返回PID,减少输出量
参考资料