简介
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
最佳实践
建议:
- 定期检查系统打开文件数量
- 监控关键进程的文件使用
- 及时清理已删除但未释放的文件
- 合理设置文件描述符限制