lsof 简介
在 Linux 世界里,'一切皆文件'不仅仅是一句口号,更是理解系统运作的关键。lsof (List Open Files) 正是基于这一理念设计的强大诊断工具。它能列出当前系统中被进程打开的文件描述符,涵盖管道、套接字、目录甚至设备节点。
为什么需要它?
日常运维中,我们常遇到端口被占用、文件无法删除(被锁定)等问题。lsof 能直接告诉你'是谁'占用了资源,比 netstat 或 fuser 提供更细粒度的视角。
基本用法与权限
直接输入 lsof 会列出所有进程打开的所有文件,输出量巨大。由于涉及核心内存和各类文件访问,建议以 root 身份运行才能获取完整信息。
lsof
常见实战场景
1. 查找端口占用
想知道哪个进程占用了 8080 端口?
lsof -i :8080
或者查找 TCP 连接:
lsof -i tcp
2. 按用户筛选
查看特定用户打开的所有文件:
lsof -u username
3. 按进程 ID 查询
已知 PID,查看其打开的文件:
lsof -p 1234
输出列解读
典型输出包含以下关键字段:
| 字段 | 说明 |
|---|---|
| COMMAND | 进程名 |
| PID | 进程 ID |
| USER | 所有者 |
| FD | 文件描述符(如 cwd, txt, mem) |
| TYPE | 类型(REG, DIR, FIFO, IPv4 等) |
| NAME | 文件名或地址 |
实用技巧
- 组合过滤:输出太多时,配合
grep快速定位。lsof -i :80 | grep LISTEN - 限制数量:使用
-c参数可按命令名过滤。 - 静默模式:生产环境慎用,避免刷屏。
掌握 lsof 后,排查系统资源争用会变得直观很多。记住,它不仅是命令,更是理解 Linux 文件机制与系统监控的钥匙。

