Linux lsof 命令
中一个功能强大的命令行工具,用于列出当前系统打开的所有文件及相关进程信息。在 Linux 中,"一切皆文件"的理念意味着 lsof 不仅能显示常规文件,还能显示网络连接、设备文件、管道和套接字等。
lsof 基本语法
lsof [选项] [文件名或目录]
常用选项参数说明
选项 | 说明 |
---|---|
-a |
使用 AND 逻辑组合多个条件 |
-c <进程名> |
显示指定进程打开的文件 |
-d <文件描述符> |
显示指定文件描述符的文件 |
-i |
显示网络连接相关信息 |
-n |
不解析主机名(显示 IP 地址) |
-P |
不解析端口名(显示端口号) |
-p <PID> |
显示指定进程 ID 打开的文件 |
-u <用户名> |
显示指定用户打开的文件 |
+D <目录> |
递归显示目录下被打开的文件 |
-t |
仅输出进程 ID(适合脚本使用) |
常用操作示例
1. 查看所有打开的文件
lsof
这会列出系统中所有被打开的文件,包括普通文件、目录、库文件、设备和网络连接等。
2. 查看指定进程打开的文件
实例
lsof -p 1234 # 查看 PID 为 1234 的进程打开的文件
lsof -c nginx # 查看所有 nginx 进程打开的文件
lsof -c nginx # 查看所有 nginx 进程打开的文件
3. 查看网络连接
实例
lsof -i # 查看所有网络连接
lsof -i :80 # 查看所有使用 80 端口的连接
lsof -i TCP # 查看所有 TCP 连接
lsof -i :80 # 查看所有使用 80 端口的连接
lsof -i TCP # 查看所有 TCP 连接
4. 查看用户打开的文件
lsof -u root # 查看 root 用户打开的文件
5. 查找被删除但仍被进程占用的文件
lsof | grep deleted
这种情况常见于日志文件被删除但服务仍在运行,导致磁盘空间未被释放。
6. 查看指定目录下被打开的文件
lsof +D /var/log # 查看 /var/log 目录下被打开的文件
输出字段解析
lsof 命令输出的典型列如下:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
- COMMAND:进程名称
- PID:进程 ID
- USER:运行进程的用户
- FD:文件描述符
cwd
:当前工作目录txt
:程序代码文件mem
:内存映射文件0u
、1u
、2u
:标准输入、输出、错误
- TYPE:文件类型(REG 常规文件,DIR 目录,CHR 字符设备等)
- DEVICE:设备号
- SIZE/OFF:文件大小或偏移量
- NODE:文件 inode 号
- NAME:文件名或挂载点
高级应用场景
1. 查找占用端口的进程
lsof -i :8080
当你想启动服务但端口已被占用时,这个命令能快速找到占用端口的进程。
2. 恢复被删除的文件
当文件被删除但仍有进程在使用时,可以通过 /proc 文件系统恢复:
实例
lsof | grep deleted # 找到被删除的文件和进程
ls -l /proc//fd # 查看进程的文件描述符
cp /proc//fd/ /path/to/recovery # 恢复文件
ls -l /proc//fd # 查看进程的文件描述符
cp /proc//fd/ /path/to/recovery # 恢复文件
3. 监控文件访问
watch -n 1 'lsof /path/to/file'
这可以实时监控某个文件被哪些进程访问。
常见问题解决
1. 磁盘空间不足但找不到大文件
lsof | grep deleted
查找被删除但仍被进程占用的文件,然后重启相关进程释放空间。
2. 无法卸载设备
lsof /mount/point
查找哪些进程正在使用挂载点,关闭这些进程后再卸载。
3. 网络连接问题排查
lsof -i -n -P
查看所有网络连接,帮助排查端口冲突或连接问题。
性能考虑
虽然 lsof 功能强大,但在繁忙的生产环境中使用时需要注意:
- 直接运行
lsof
会扫描整个系统,可能消耗较多资源 - 尽量使用精确的过滤条件(如
-p
、-u
、-i
等)缩小查询范围 - 在脚本中使用
-t
选项只输出 PID,减少解析开销
替代工具
虽然 lsof 是最常用的工具,但某些场景下可以考虑:
- fuser:快速查看哪些进程在使用特定文件或套接字
- ss/netstat:专门用于网络连接信息
- ps:结合
/proc
文件系统也能获取部分信息
总结
lsof 是 Linux 系统管理员和开发人员的瑞士军刀,掌握它能帮助你:
- 快速定位资源占用问题
- 排查文件和网络相关问题
- 了解系统运行状态
- 解决各种"文件被占用"的问题
建议在日常工作中多加练习,结合具体场景灵活运用各种选项参数,逐步掌握这个强大工具的全部潜力。
点我分享笔记