{"msg":"操作成功","code":200,"data":{"createBy":"admin","createTime":"2025-01-10 15:46:20","updateBy":"admin","updateTime":"2025-01-10 15:46:20","remark":null,"id":99,"articleTitle":"每天一个Linux命令（二十三）lsof","articleUrl":"linux_lsof","articleThumbnail":"https://www.asumimoe.com/imgfiles/20250301/b95d839fa195428cb42fc7f104f50b0d.png","articleFlag":"0","draftStatus":"1","reprintStatement":"0","articleSummary":"lsof（List Open Files）是 Linux/Unix 系统中用于**列出系统打开文件信息**的强大工具，支持查看进程打开的文件、目录、网络连接等信息。它是系统故障排查、资源监控和安全审计的关键工具。","articleContent":"## 简介\n\n`lsof`（List Open Files）是 Linux/Unix 系统中用于**列出系统打开文件信息**的强大工具，支持查看进程打开的文件、目录、网络连接等信息。它是系统故障排查、资源监控和安全审计的关键工具。\n\n---\n\n## 安装说明\n\n大多数 Linux 发行版已预装，未安装时可通过以下命令安装：\n\n### CentOS/RHEL\n\n```bash\nyum install lsof\n```\n\n---\n\n## 基础语法\n\n```bash\nlsof [选项] [文件/目录/进程...]\n```\n\n---\n\n## 常用选项\n\n| 选项     | 说明            |\n| -------- | --------------- |\n| `-i`     | 列出网络连接    |\n| `-p`     | 按进程 ID 过滤  |\n| `-u`     | 按用户过滤      |\n| `-c`     | 按进程名过滤    |\n| `+D`     | 递归查找目录    |\n| `-t`     | 仅输出进程 ID   |\n| `-n`     | 禁止解析主机名  |\n| `-P`     | 禁止解析端口名  |\n| `-i TCP` | 仅显示 TCP 连接 |\n| `-i UDP` | 仅显示 UDP 连接 |\n\n---\n\n## 输出字段详解\n\n| 字段     | 说明                       |\n| -------- | -------------------------- |\n| COMMAND  | 进程名称                   |\n| PID      | 进程 ID                    |\n| USER     | 运行用户                   |\n| FD       | 文件描述符（cwd=当前目录） |\n| TYPE     | 文件类型（REG=普通文件）   |\n| DEVICE   | 设备号                     |\n| SIZE/OFF | 文件大小/偏移量            |\n| NODE     | Inode 编号                 |\n| NAME     | 文件绝对路径               |\n\n## 基础使用示例\n\n### 1. 列出所有打开的文件\n\n```bash\nlsof\n```\n\n输出示例：\n\n```bash\nCOMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME\nsystemd     1 root  cwd    DIR  253,0     4096       2 /\nsshd     1234 root  txt    REG  253,0   123456  789012 /usr/sbin/sshd\n```\n\n### 2. 查看指定进程打开的文件\n\n```bash\nlsof -p 1234\n```\n\n输出示例：\n\n```bash\nsshd     1234 root  cwd    DIR  253,0     4096       2 /\nsshd     1234 root  txt    REG  253,0   123456  789012 /usr/sbin/sshd\n```\n\n### 3. 查看网络连接\n\n```bash\nlsof -i\n```\n\n输出示例：\n\n```bash\nCOMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME\nsshd    1234 root    3u  IPv4  12345      0t0  TCP *:ssh (LISTEN)\nchrome  5678 user   20u  IPv4  67890      0t0  TCP 192.168.1.100:12345->1.1.1.1:https (ESTABLISHED)\n```\n\n### 4. 查看指定端口使用情况\n\n```bash\nlsof -i :80\n```\n\n输出示例：\n\n```bash\nnginx   7890 root    6u  IPv4  45678      0t0  TCP *:http (LISTEN)\n```\n\n### 5. 查看用户打开的文件\n\n```bash\nlsof -u root\n```\n\n输出示例：\n\n```bash\nsystemd     1 root  cwd    DIR  253,0     4096       2 /\nsshd     1234 root  txt    REG  253,0   123456  789012 /usr/sbin/sshd\n```\n\n### 6. 查找被删除但未释放的文件\n\n```bash\nlsof +L1\n```\n\n输出示例：\n\n```bash\npython3 8910 user    3w   REG  253,0 104857600 123456 /path/to/deleted/file (deleted)\n```\n\n### 7. 查看指定目录下的打开文件\n\n```bash\nlsof +D /var/log\n```\n\n输出示例：\n\n```bash\nrsyslogd 456 root    4w   REG  253,0   123456  789012 /var/log/syslog\n```\n\n---\n\n## 进阶用法\n\n### 1. 组合过滤条件\n\n```bash\nlsof -i TCP:22 -u root\n```\n\n输出示例：\n\n```bash\nsshd    1234 root    3u  IPv4  12345      0t0  TCP *:ssh (LISTEN)\n```\n\n### 2. 查看指定进程的网络连接\n\n```bash\nlsof -a -p 1234 -i\n```\n\n输出示例：\n\n```bash\nchrome  1234 user   20u  IPv4  67890      0t0  TCP 192.168.1.100:12345->1.1.1.1:https (ESTABLISHED)\n```\n\n### 3. 查看文件被哪些进程使用\n\n```bash\nlsof /var/log/syslog\n```\n\n输出示例：\n\n```bash\nrsyslogd 456 root    4w   REG  253,0   123456  789012 /var/log/syslog\n```\n\n### 4. 查看所有 ESTABLISHED 连接\n\n```bash\nlsof -i TCP -s TCP:ESTABLISHED\n```\n\n输出示例：\n\n```bash\nchrome  5678 user   20u  IPv4  67890      0t0  TCP 192.168.1.100:12345->1.1.1.1:https (ESTABLISHED)\n```\n\n### 5. 查看所有监听端口\n\n```bash\nlsof -i -s TCP:LISTEN\n```\n\n输出示例：\n\n```bash\nsshd    1234 root    3u  IPv4  12345      0t0  TCP *:ssh (LISTEN)\nnginx   7890 root    6u  IPv4  45678      0t0  TCP *:http (LISTEN)\n```\n\n### 6. 查看指定协议和端口范围\n\n```bash\nlsof -i UDP:50000-60000\n```\n\n输出示例：\n\n```bash\ndhclient 891 root    6u  IPv4  23456      0t0  UDP *:54321\n```\n\n### 7. 生成进程树视图\n\n```bash\nlsof -R\n```\n\n输出示例：\n\n```bash\nCOMMAND   PID  PPID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME\nsystemd     1     0 root  cwd    DIR  253,0     4096       2 /\n ├─sshd  1234     1 root  txt    REG  253,0   123456  789012 /usr/sbin/sshd\n └─nginx 7890     1 root  txt    REG  253,0   456789  012345 /usr/sbin/nginx\n```\n\n---\n\n## 实际应用场景\n\n### 1. 排查 \"Device busy\" 错误\n\n```bash\nlsof +D /mnt/disk\n```\n\n### 2. 分析内存泄漏\n\n```bash\nlsof -p <PID> | grep deleted\n```\n\n### 3. 监控文件访问行为\n\n```bash\nlsof -r 5 /path/to/file\n```\n\n### 4. 安全审计\n\n```bash\nlsof -i -n -P\n```\n\n### 5. 网络故障排查\n\n```bash\nlsof -i :443\n```\n\n### 6. 恢复被删除文件\n\n```bash\n# 1. 查找文件描述符\nlsof /path/to/deleted_file\n# 2. 从/proc复制文件\ncp /proc/<PID>/fd/<FD> recovered_file\n```\n\n### 7. 分析进程资源占用\n\n```bash\nlsof -p <PID> -a -d 0-999\n```\n\n---\n\n## 性能优化技巧\n\n### 1. 限制输出范围\n\n```bash\nlsof -b\n```\n\n### 2. 快速模式（不解析网络信息）\n\n```bash\nlsof -Fn\n```\n\n### 3. 使用缓存加速查询\n\n```bash\nlsof +c 0\n```","categoryId":1,"viewCount":83,"categoryName":"Linux","author":"球接子","authorAvatar":null,"tagIds":[10],"tagNames":["Linux基础"]}}