Shell Daily 2026-01-12: 端口侦探 (Lsof)

Shell Daily 2026-01-12: 端口侦探 (Lsof)

作为运维人员,你一定遇到过这种抓狂时刻:尝试启动服务,系统报错 "Address already in use";或者试图卸载(Unmount)一个磁盘,系统提示 "Device is busy"。

这时候,你需要一位侦探来找出到底是哪个进程在“占着茅坑不拉屎”。相比于功能单一的 netstatlsof (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 的功能远不止于此,它甚至能帮你找回被删除但仍被进程占用的文件。掌握它,你就是系统里的福尔摩斯。)

posted @ 2026-01-12 15:41  Terrasse  阅读(8)  评论(0)    收藏  举报