lsof是用于查看进程打开文件描述符的工具,支持按pid、路径、网络端口、用户及文件类型精准排查资源占用。

如果您需要确认某个进程正在访问哪些文件、日志、配置或网络资源,则可利用lsof工具列出其打开的所有文件描述符。以下是具体操作方法:
一、安装并验证lsof工具可用性
lsof默认未预装于部分统信UOS精简版本中,需手动安装以确保命令可执行。安装后可通过基础调用验证是否就绪。
1、打开终端,执行命令检查是否已安装:lsof --version
2、若提示“command not found”,则运行安装命令:sudo apt update && sudo apt install lsof
3、再次执行lsof --version,确认输出版本号(如lsof version 4.94.0)即表示安装成功。
二、列出指定进程打开的所有文件
当已知目标进程PID时,可精准筛选该进程关联的全部打开文件路径、设备节点及网络socket,避免全局扫描干扰。
1、通过系统监视器或ps命令获取目标进程PID(例如为1234)
2、在终端中执行:lsof -p 1234
3、观察输出中NAME列内容,识别如/var/log/syslog、/etc/nginx/nginx.conf等关键路径
三、按文件路径反查占用进程
当发现某关键文件(如数据库锁文件、日志归档目录)被持续占用无法删除或修改时,可通过路径定位到持有句柄的进程。
1、执行命令查询指定路径下所有打开实例:lsof /var/lib/postgresql/14/main/global/pg_control
2、若返回结果非空,从COMMAND与PID列提取进程名与ID
3、结合ps -p PID -o pid,user,comm,args进一步确认该进程是否为预期服务
四、查看所有网络连接及监听端口对应文件
网络socket在Linux中亦属“打开的文件”,lsof可统一呈现TCP/UDP连接状态、本地地址、远程地址及关联进程信息。
1、列出全部监听端口及其绑定进程:lsof -i -P -n | grep LISTEN
2、筛选特定端口(如80)的占用详情:lsof -i :80 -P -n
3、识别输出中FD列为u(读写)、r(只读)或w(只写),辅助判断连接活跃度
五、筛选特定用户或文件类型进行深度排查
在多用户环境中,常需隔离某用户空间内打开的文件;或聚焦于常规文件、目录、内存映射等特定类型,提升排查效率。
1、列出用户calvin所有打开文件:lsof -u calvin
2、仅显示普通文件(不含网络socket或设备):lsof -a -d txt,r,w,u -F n
3、查找所有被删除但仍被进程持有的文件(deleted标记):lsof +L1,此类文件持续占用磁盘空间但不可见于目录树










