Linux lsof 命令查找文件与端口占用

1次阅读

lsof 是 linux 下用于列出进程打开文件及排查资源占用的诊断工具,支持查看端口占用、文件锁定、按用户/进程筛选,并可谨慎终止相关进程。

Linux lsof 命令查找文件与端口占用

lsof(list open files)是 Linux 下非常实用的系统诊断工具,不仅能列出进程打开的所有文件(包括普通文件、目录、设备、管道、网络套接字等),还能快速定位端口占用、文件被哪个进程锁定等问题。

查看某个端口被谁占用

当启动服务失败提示“Address already in use”时,常用此方法排查:

  • 查 TCP 端口(如 8080):lsof -i :8080
  • udp 端口:lsof -iUDP:53
  • 只看监听状态的 TCP 进程:lsof -iTCP -sTCP:LISTEN
  • 结合 grep 精准过滤:lsof -i :3306 | grep LISTEN

输出中重点关注 PID(进程号)、USER(所属用户)、COMMAND(进程名)和 TYPE(类型,如 IPv4/IPv6、sock)列。

查找某个文件或目录被哪些进程占用

卸载分区失败(”device is busy”)或删除文件提示“Text file busy”时适用:

  • 查具体文件:lsof /var/log/syslog
  • 查整个目录(含子目录):lsof +D /tmp(注意:+D 会递归扫描,大目录慎用)
  • 查某类文件(如所有 .log 文件):lsof | awk ‘$9 ~ /.log$/ {print}’

常见占用场景:日志文件被 tail -f 监听、编辑器未关闭、进程仍在读写该路径下的文件。

按用户、进程或协议筛选

缩小排查范围,提升效率:

  • 查指定用户的打开文件:lsof -u nginx
  • 查指定进程名:lsof -c sshd
  • 只显示网络连接(排除普通文件):lsof -i
  • 显示 PID 和对应命令全路径:lsof -i -P -n | head -10(-P 禁用端口名解析,-n 禁用主机名解析,加快输出)

终止占用进程(谨慎操作)

确认无误后可直接 kill:

  • 从 lsof 输出中获取 PID,例如为 1234:kill 1234
  • 强制终止:kill -9 1234
  • 一键杀掉占用某端口的所有进程(高危!请先确认):lsof -t -i :8080 | xargs kill -9

注意:避免误杀系统关键进程(如 systemd、kthreadd),执行前务必核对 COMMAND 和 USER 字段。

text=ZqhQzanResources