ZBLOG

linux 系统 lsof 命令的功能

lsofList Open Files)是 Linux 系统中一个强大的工具,用于列出当前系统所有被打开的文件及相关进程信息。由于 Linux 中“一切皆文件”(包括普通文件、目录、管道、套接字、设备等),lsof 的功能非常广泛。以下是其主要功能详解:


1. 核心功能

  • 列出所有打开的文件
    显示系统中所有被进程打开的文件(默认无参数时输出全部信息)。

    1. sudo lsof
  • 按条件过滤
    支持按进程、用户、文件类型等过滤,例如:

    1. lsof -u root # 查看 root 用户打开的文件
    2. lsof -c nginx # 查看 nginx 进程打开的文件
    3. lsof -p <PID> # 查看指定 PID 的进程打开的文件

2.关键用途与示例

**(1) 查找占用文件的进程

  1. sudo lsof /var/log/syslog # 查看谁在使用某个文件

**(2) 查找已删除但未释放的文件

  1. sudo lsof +L1 # 列出所有被删除但仍被进程占用的文件
  2. sudo lsof | grep "deleted" # 筛选已被删除的文件

**(3) 查看网络连接

  1. sudo lsof -i # 列出所有网络连接(TCP/UDP)
  2. sudo lsof -i :80 # 查看占用端口80的进程
  3. sudo lsof -i tcp # 仅显示 TCP 连接

**(4) 查看目录或设备的占用

  1. sudo lsof /mnt # 查看谁在访问某个目录
  2. sudo lsof /dev/sda1 # 查看哪个进程在使用磁盘设备

**(5) 恢复误删的文件

通过 /proc/<PID>/fd/

  1. # (1)找到持有已删除文件的进程 PID(如 PID=1234)
  2. sudo lsof | grep "deleted"
  3. # (2)从 fd (如 fd=3)恢复内容到新文件
  4. cat /proc/1234/fd/3 > /tmp/recovered_file.txt

3.常用选项速查表

选项 作用
-u <user> 按用户过滤
-c <command> 按进程名过滤
-p <PID> 按进程 ID过滤
-i 显示网络连接(可加协议或端口)
+L1 显示链接数为0(已删除)的文件
-t 仅输出 PID(适合脚本处理)

4.高级用法

(1)统计打开的句柄数

  1. lsof -n | wc -l #统计系统总打开文件数
  2. lsof -u nginx | wc -l #统计某用户的打开文件数

(2)结合 grep/awk分析

  1. #找出所有监听端口的 Java程序:
  2. lsof -i -c java | grep LISTEN
  3. #计算被删除但未释放的总大小(MB):
  4. lsof | grep deleted | awk '{sum+=$7} END {print sum/1024/1024 " MB"}'

5.注意事项

  • 权限需求:部分信息需 root权限才能查看。
  • 性能影响:在繁忙的系统上直接运行 lsof可能负载较高,建议配合过滤条件使用。

如果需要针对具体场景进一步分析,可以提供更多上下文!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23425

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?