一切皆文件 – Linux lsof 妙用技巧
lsof(List Open Files)是 Linux 中用于列出系统打开文件的实用工具。它可显示进程与文件、目录、网络连接等的关联信息。以下是常见使用场景和示例:
1、列出所有打开的文件
$ sudo lsof
2、查看某用户打开的文件
$ sudo lsof -u <用户名>
3、查看指定进程ID(PID)打开的文件
$ sudo lsof -p <PID>
4、查看某个文件被哪些进程使用
$ sudo lsof <文件路径>
5、查看占用某个端口的进程:
$ sudo lsof -i :<端口号>
指定TCP/UDP协议
$ sudo lsof -i tcp # 所有TCP连接
$ sudo lsof -i udp # 所有UDP连接
6、同时按用户和端口过滤
$ sudo lsof -u <用户名> -i :<端口号>
7、排除某用户
显示非该用户打开的文件
$ sudo lsof -u ^<用户名>
8、找被删除但未释放的文件
显示链接数为0的文件
$ sudo lsof +L1
结合grep快速定位
$ sudo lsof /path | grep deleted
9、查看指定进程名称打开的文件
$ sudo lsof -c <进程名>
10、列出占用某端口的PID(方便脚本处理)
$ sudo lsof -t -i :<端口号>
11、列出某个用户的所有活跃的网络端口
$ sudo lsof -a -u <用户名> -I
12、查找包含 flask 关键字的进程的资源使用
$ sudo lsof -p $(pgrep -f flask)
13、通过 ps 找到进程 PID,再用 lsof 查看详细信息
$ sudo lsof -p $(pgrep -f <进程名或命令片段>)
14、查看占用 80 端口的进程的所有文件
$ sudo lsof -p $(sudo lsof -t -i :80)
15、直接终止占用某个文件或端口的进程
$ sudo kill $(sudo lsof -t <文件路径或端口>)
终止占用 8000 端口的进程
$ sudo kill $(sudo lsof -t -i :8000)
终止占用 /var/log/syslog 的进程
$ sudo kill $(sudo lsof -t /var/log/syslog)
16、查找最近修改的文件(结合 find)
列出 /path 下最近 5 分钟修改过且被打开的文件
$ find /path -mmin -5 | xargs lsof