除了排查“已删除未释放文件”L1lsof作为 Linux 系统管理的“瑞士军刀”在网络排查、进程分析、设备管理、安全审计等场景中都有不可替代的经典用法。1.排查文件已删除空间为释放lsofL1-w2/dev/null|grepdeleted|sort-k7-rn|head-20# lsofList Open Files列出当前系统打开的文件。# L1这是一个筛选参数表示列出链接数Link Count小于 1 的文件。# -w禁止截断换行输出防止长路径截断。lsof L1就是专门用来把这些已经被删除、但依然占用磁盘空间的文件找出来的。COMMAND PIDUSERFD TYPE DEVICE SIZE/OFF NLINK NODE NAME nginx1234root 4w REG253,0155446270995536/var/log/nginx/access.log(deleted)java5678app 10w REG253,0391297111920101454061/tmp/app.log(deleted)(deleted)标记该文件已被删除。NLINK为 0表示链接数已归零印证了L1的筛选条件。SIZE/OFF显示该文件仍在占用的实际磁盘空间大小单位byte。2. 端口占用精准定位替代 netstat/ss当服务启动失败提示Address already in use时快速找出占用端口的进程。# 查看谁占用了 8080 端口推荐加 -nP 禁止解析速度更快sudolsof-i:8080-nP# 只查看 TCP 监听状态的端口排查服务是否正常启动sudolsof-iTCP-sTCP:LISTEN-nP# 查看某个进程的所有网络连接sudolsof-p1234-i-nP 技巧-n禁止域名反解-P禁止端口转服务名两者组合可避免 DNS 查询导致的卡顿在故障排查时务必加上。3. 解决 “Device is busy” 无法卸载问题卸载磁盘或 NFS 挂载点时报错用lsof找出还在访问该路径的进程。# 递归扫描 /mnt/data 下所有被打开的文件sudolsofD /mnt/data# 非递归扫描仅当前目录速度更快sudolsofd /mnt/data# 直接指定挂载点sudolsof/dev/sdb1⚠️ 注意D是递归扫描数据量大时非常慢如果明确知道问题在当前层优先用d。找到进程后先尝试kill -HUP或优雅停止而非直接umount -f。4. 进程资源全透视调试/性能分析分析某个进程打开了哪些文件、库、Socket判断是否存在句柄泄漏或异常行为。# 查看 Java 进程打开的所有文件sudolsof-cjava# 统计某进程打开的文件描述符数量监控句柄泄漏watch-n1sudo lsof -p 1234 | wc -l# 只看普通文件排除 socket、pipe、mem 等干扰sudolsof-p1234|awk$5 REG# 查看进程的工作目录sudolsof-p1234|awk$4 cwd4. 安全审计与异常连接排查检查系统是否有可疑外连、挖矿程序或非授权用户活动。# 查看所有 ESTABLISHED 状态的外连排查矿池/C2通信sudolsof-i-sTCP:ESTABLISHED-nP|grep-v127.0.0.1\|::1# 查看特定用户的网络连接审计 www-data/nginx 等低权用户sudolsof-uwww-data-i-nP# 查找 /tmp 或 /dev/shm 下的可疑可执行文件sudolsofD /tmp|awk$5 REG $NF ~ /\.(sh|py|elf)$/5. 文件级操作追踪确认某个关键文件如日志、配置、数据文件正被哪些进程读写。# 查看谁在写 /var/log/syslogsudolsof/var/log/syslog# 查看 /etc/passwd 是否被异常读取sudolsof/etc/passwd# 批量检查多个文件sudolsof/var/log/nginx/access.log /var/log/nginx/error.log6. 脚本化集成仅获取 PID在自动化运维脚本中通常只需要 PID 而不需要完整表格输出。# 杀掉占用 3306 端口的进程一行搞定kill-9$(sudolsof-t-i:3306)# 重启持有某日志文件的进程sudolsof-t/var/log/app.log|xargskill-HUP# 统计每个用户打开的文件数sudolsof-Fu|awk/^u/{user$0} /^p/{count[user]} END{for(u in count) print count[u], u}|sort-rn-t参数只输出 PID无表头、无多余字段专为管道和脚本设计是自动化场景的核心选项。7.使用原则总结原则说明必加 sudo普通用户看不到其他进程的 fd排查结果不完整必加 -nP网络相关查询默认触发 DNS/服务名解析生产环境必须禁用慎用 D递归扫描 I/O 开销大优先用精确路径或d输出是瞬时快照lsof反映的是执行那一刻的状态持续监控需配合watch或-r N结合 /proc 验证当lsof结果存疑时直接ls -la /proc/pid/fd/是最底层的验证手段掌握以上场景基本可以覆盖 90% 以上的 Linux 故障排查和安全审计需求。建议将常用命令保存为 shell alias 或函数提升应急响应效率。加粗样式