Administrator
Published on 2026-01-19 / 1 Visits
0
0

lsof 常见用法全解析 Linux 运维排障必备:端口、文件、挂载、删除失败,一把梭


一句话先给结论:
你解决不了的问题,80% 都能用 lsof 找到“是谁在占用”
不会 lsof,等于在 Linux 里闭着眼排错


一、为什么 Linux 运维一定离不开 lsof?

在 Linux 世界里:

一切皆文件

  • 普通文件 → 文件描述符

  • 端口 → socket 文件

  • 设备 → 设备文件

  • 目录 → 文件系统对象

lsof 做的事只有一件:

列出“进程打开的文件”

这也是它的名字:
List Open Files


二、最基础用法:lsof

1️⃣ 直接执行

lsof

你会看到成百上千行输出。

📌 结论:

  • ✔ 命令没错

  • ❌ 实战几乎没用

lsof 一定要配条件使用


三、最常用场景一:端口被占用(运维第一高频)

场景

服务起不来,提示:
Address already in use

正确姿势

lsof -i :8080

示例输出:

java  12345  root  123u  IPv4  123456  TCP *:8080 (LISTEN)

你能一眼看懂:

  • 进程名:java

  • PID:12345

  • 端口:8080

  • 状态:LISTEN

下一步你就知道该干嘛了:

kill 12345

查看某个进程占用的所有端口

lsof -i -p 12345

四、最常用场景二:查看工作目录的进程

例:目录 / 挂载点卸载失败

场景

umount /data

报错:

target is busy

正确排查方式

lsof +D /data

输出示例:

bash  2345  user  cwd  DIR  /data

📌 意味着:

  • PID 2345 的 bash

  • 当前工作目录就在 /data

👉 解决方法:

cd /

或:

kill 2345

五、最常用场景三:文件删不掉(但磁盘空间不释放)

场景

  • rm 已执行

  • df -h 空间没变

这是 Linux 非常经典的问题。


排查方法

lsof | grep deleted

示例:

java  3456  root  10u  REG  /var/log/app.log (deleted)

含义:

  • 文件已被删除

  • 但进程仍然占用

解决方法只有一个:

kill 3456

或重启服务


六、按用户排查(共享服务器非常有用)

lsof -u kylin

查看某个用户:

  • 打开了哪些文件

  • 占用了哪些端口

  • 是否存在异常进程


七、按进程排查(精确打击)

lsof -p 12345

你可以看到:

  • 程序读了哪些配置文件

  • 日志写到哪里

  • 是否打开了异常文件

📌 这是定位“程序行为异常”的利器


八、只看网络相关

lsof -i

只看 TCP

lsof -i tcp

只看 UDP

lsof -i udp

只看监听端口

lsof -i -sTCP:LISTEN

九、lsof 常用参数速查表(实战向)

参数

含义

-i

网络连接

:PORT

指定端口

-p PID

指定进程

-u USER

指定用户

+D DIR

指定目录

-n

不解析主机名(更快)

-P

不解析端口名

-t

只输出 PID(脚本友好)

示例(脚本常用)

kill $(lsof -t -i :8080)

十、lsof vs 其他命令(别混用)

需求

推荐

看端口

lsof / ss

看进程

ps / top

看磁盘

df

看占用关系

lsof(唯一)

只有 lsof 能把“进程 ↔ 文件 ↔ 端口”连起来


十一、国产化 / 麒麟环境下的注意点

  • lsof 不是默认安装

  • 属于独立包

sudo apt install lsof
  • 离线环境只需一个 .deb,依赖极少


十二、运维级总结(可直接写进规范)

  • 端口冲突 → lsof -i :PORT

  • 挂载失败 → lsof +D 目录

  • 空间不释放 → lsof | grep deleted

  • 精确定位问题 → lsof -p PID

lsof 是 Linux 排障的“最后一公里”。


结语:为什么说 lsof 是“高手分水岭”?

因为它不是“看状态”,
而是看因果关系

谁在用 → 用了什么 → 为什么用 → 怎么停

当你真正把 lsof 用熟,
你会发现:
很多 Linux 问题,其实一点都不复杂。



Comment