首页/系统/Linux 运维命令速查/lsof 查看进程打开的文件
进程与作业69 条

lsof 查看进程打开的文件

列出进程打开的所有文件(含普通文件、目录、socket):按进程/路径/用户查;排查句柄泄漏、文件占用、已删未释放都靠它。

Linux 运维命令速查系统更新于 2026-10-13

lsof 是什么

lsof 列出进程打开的所有文件,包括普通文件、目录、设备与网络套接字。按进程、路径、用户、端口都能过滤。它是排查句柄泄漏、文件被谁占用、已删除文件仍占空间这三类问题的首选工具。代价是全量扫描开销不小,生产上要记得带过滤条件。

基本信息

适用平台Linux、Unix;多数发行版需要单独安装
命令语法lsof [选项] [路径 | 目录 | 端口 | 进程号]
常用选项-p 按进程 / -c 按命令名 / -u 按用户 / -i 网络 / +D 递归目录 / +L1 已删除文件 / -t 只输出 PID / -n、-P 不解析名称
权限要求查看他人进程需要 root

典型使用场景

  • 查端口被谁占用,配合网络类问题排查
  • 准备卸载或修改文件前,确认它被哪个进程打开
  • 排查句柄泄漏:定期统计某进程的打开文件数
  • 找出已经被删除但仍在占空间的文件
  • 安全排查:列出某个进程的全部网络连接

常用示例

常用示例
lsof -p 1234 | head -30              # 该进程打开的文件
lsof /var/log/app.log                # 谁占着这个文件
lsof -u www-data | wc -l             # 某用户的打开文件数
lsof -i :8080                        # 谁在用这个端口
lsof +D /data/app | head             # 目录下被打开的文件(慢)
lsof +L1 /var/log | head             # 已删除但仍被持有的文件
lsof -t /var/log/app.log             # 只输出占用者的进程号

常用选项

选项作用提示
-p按进程号过滤与进程列表对照定位
-u按用户过滤统计某个服务的句柄数
-c按命令名前缀过滤匹配多个同类进程
-i按网络过滤可再叠加端口或协议
+D递归列出目录下的文件开销大,按需使用
+L1链接数为零的文件用来定位已删除文件
-t只输出进程号便于交给脚本继续处理
不带参数运行会遍历全系统,大机器上又慢又重,还可能因为权限看不到全部结果;生产环境一定要带过滤条件。
查看别人的进程需要 root,出现空结果时先排除权限因素;在容器里操作时还要注意,宿主侧未必能看到容器命名空间里的全部进程。

易错点

  • 无参数全量扫描开销很大,忙时执行容易拖累系统
  • 权限不足时结果不完整,而且不会明确报错
  • 递归目录模式在海量文件目录上极慢,改用整取再筛选更快
  • 输出中的进程名可能被截断,同名进程要靠进程号区分
  • 已删除的文件在输出里带删除标记,别把这类路径当成正常文件继续引用

数据来源与参考

  • man 8 lsof(lsof 官方手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌