简介

lsof(list open files)是一个强大的系统工具,用于列出系统上所有已经打开的文件。在Linux中,一切皆文件,因此lsof可以帮助我们了解进程、端口、管道等各种系统资源的使用情况。

主要功能:
  • 查看进程打开的文件
  • 查看文件被哪些进程打开
  • 查看端口占用情况
  • 分析系统资源使用
  • 排查文件系统问题
注意:lsof需要root权限才能查看完整信息,普通用户只能看到自己的进程信息。

基础用法

常用选项

选项 说明 示例
-p 指定进程ID lsof -p 1234
-u 指定用户名 lsof -u root
-i 显示网络连接 lsof -i :80
-d 指定文件描述符 lsof -d 0-2
+D 递归查看目录 lsof +D /var/log

输出字段说明

字段 含义
COMMAND 进程名称
PID 进程ID
USER 用户名
FD 文件描述符
TYPE 文件类型
DEVICE 设备号
SIZE/OFF 文件大小或偏移量
NODE 索引节点
NAME 文件名

文件分析

查看文件使用情况

查看指定文件被谁打开:

lsof /path/to/file

查看目录下所有打开的文件:

lsof +D /path/to/directory

查看已删除但仍被占用的文件:

lsof | grep deleted

文件系统分析

查看指定文件系统的文件使用:

lsof /home

查看NFS文件系统使用:

lsof -N

进程分析

进程文件使用分析

查看进程打开的所有文件:

lsof -p PID

查看用户的所有进程文件:

lsof -u username

排除某用户的进程:

lsof -u ^root

进程资源监控

监控进程的文件描述符:

watch -n 1 'lsof -p PID | wc -l'

查看进程打开的目录:

lsof -p PID -d cwd

网络分析

网络连接分析

查看所有网络连接:

lsof -i

查看特定端口:

lsof -i :80

查看TCP连接:

lsof -i tcp

网络监听分析

查看监听端口:

lsof -i -sTCP:LISTEN

查看已建立的连接:

lsof -i -sTCP:ESTABLISHED
网络安全提示:
  • 定期检查未知端口的监听
  • 关注非预期的网络连接
  • 监控重要端口的访问情况

故障排查

常见问题分析

排查要点:
  • 文件无法删除(文件被占用)
  • 磁盘空间不足(大文件占用)
  • 端口冲突(端口被占用)
  • 文件描述符耗尽

问题定位脚本

查找占用空间最大的打开文件:

lsof -s | sort -nr -k7 | head -10

监控文件描述符使用情况:

#!/bin/bash while true; do echo "$(date) - FD usage:" lsof | wc -l sleep 5 done

最佳实践

建议:
  • 定期检查系统打开文件数量
  • 监控关键进程的文件使用
  • 及时清理已删除但未释放的文件
  • 合理设置文件描述符限制