Shell Daily 2026-01-12: 端口侦探 (Lsof)
Shell Daily 2026-01-12: 端口侦探 (Lsof)
作为运维人员,你一定遇到过这种抓狂时刻:尝试启动服务,系统报错 "Address already in use";或者试图卸载(Unmount)一个磁盘,系统提示 "Device is busy"。
这时候,你需要一位侦探来找出到底是哪个进程在“占着茅坑不拉屎”。相比于功能单一的 netstat,lsof (List Open Files) 才是 Unix 世界里真正的全能侦探。
怎么用
Unix 哲学核心是“一切皆文件”。对 lsof 来说,网络连接、打开的目录、加载的库文件,统统都是文件。
- 核心语法:
lsof -i :<端口号>:查看端口占用。lsof +D <目录>:查看谁在使用该目录下的文件。
- 权限:查看属于其他用户的进程通常需要
sudo。 - 兼容性:Linux / macOS (BSD) 通用。
适用场景
- 端口冲突排查:找出占用 8080 端口的“元凶”进程。
- 磁盘卸载失败:找出是谁在后台读写 U 盘或挂载点的数据,导致无法弹出。
示例 1:精准定位端口占用
不用再费劲地去 netstat -alp | grep 了,直接问端口:
# 找出谁在监听 80 端口
sudo lsof -i :80
# 输出直观明了:
# COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
# nginx 1205 root 6u IPv4 20480 0t0 TCP *:http (LISTEN)
示例 2:解决 "Device is busy"
想卸载 /data 盘,系统死活不让。用 +D (Directory) 参数,揪出正在操作该目录下文件的进程:
# 看看是谁在用 /data 目录
sudo lsof +D /data
# 发现原来是一个还没退出的 bash 进程在里面
# COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
# bash 3421 root cwd DIR 253,1 4096 2 /data
(注:lsof 的功能远不止于此,它甚至能帮你找回被删除但仍被进程占用的文件。掌握它,你就是系统里的福尔摩斯。)

浙公网安备 33010602011771号