Lsof命令使用

详细讲解Linux系统管理利器lsof命令的使用方法,涵盖按进程、用户、文件名和网络连接等多种过滤方式,以及在排查占用端口、查找已删除文件和监控系统活动等场景中的实际应用。

一、lsof 简介

lsof(List Open Files)是一个功能强大的命令行工具,用于列出当前系统中所有打开的文件及其相关进程。在 Unix 和 Linux 系统中,几乎所有事物(包括常规文件、目录、网络连接、设备等)都被视为文件,因此 lsof 在多种场景下都非常有用。

二、安装 lsof

在大多数 Linux 发行版中,lsof 可通过包管理器安装:

  • Debian/Ubuntu

    1
    2
    
    sudo apt update
    sudo apt install lsof
    
  • CentOS/RHEL

    1
    
    sudo yum install lsof
    
  • Arch Linux

    1
    
    sudo pacman -S lsof
    

三、基本语法

1
lsof [选项] [文件名或目录]

四、常用选项

(一)按进程过滤

  • -p <PID>:按进程 ID 过滤。

    1
    
    lsof -p 1234
    
  • -c <进程名>:按进程名过滤。

    1
    
    lsof -c sshd
    
  • -c <进程名1> -c <进程名2>:同时列出多个进程的打开文件。

    1
    
    lsof -c mysql -c apache
    

(二)按用户过滤

  • -u <用户名>:按用户名过滤。

    1
    
    lsof -u username
    
  • -u ^<用户名>:排除指定用户的打开文件。

    1
    
    lsof -u ^root
    

(三)按文件名或目录过滤

  • 指定文件名或目录名,列出与之相关的打开文件。

    1
    2
    
    lsof /path/to/file
    lsof /path/to/directory
    
  • 使用 +D 递归列出目录及其子目录下所有打开的文件。

    1
    
    lsof +D /path/to/directory
    

(四)按网络连接过滤

  • -i:显示所有网络连接。

    1
    
    lsof -i
    
  • -i :<端口号>:按端口号过滤。

    1
    
    lsof -i :80
    
  • -i <协议>@<IP地址>:按协议和 IP 地址过滤。

    1
    
    lsof -i tcp@192.168.1.100
    
  • -i TCP:仅显示 TCP 连接。

    1
    
    lsof -i TCP
    
  • -i UDP:仅显示 UDP 连接。

    1
    
    lsof -i UDP
    

(五)其他选项

  • -n:不解析主机名,直接显示 IP 地址。

  • -P:不解析端口号,直接显示数字。

  • -t:仅显示进程 ID。

  • -l:显示文件的 inode 号。

  • -a:组合多个条件。

    1
    
    lsof -u username -c process_name
    

五、使用场景

(一)查找占用特定文件的进程

1
lsof /var/log/syslog

此命令可帮助你找出哪个进程正在使用 /var/log/syslog 文件。

(二)查找占用特定端口的进程

1
lsof -i :80

此命令可帮助你找出哪个进程正在使用 TCP 端口 80。

(三)查找某个用户打开的文件

1
lsof -u username

此命令可列出用户 username 打开的所有文件。

(四)查看某个进程打开的文件

1
lsof -p 1234

此命令可列出进程 ID 为 1234 的所有打开文件。

(五)查找被删除但仍在使用的文件

1
lsof | grep deleted

此命令可帮助你找出已被删除但仍被进程占用的文件。

(六)监控文件系统活动

1
lsof +D /path/to/directory

此命令可实时监控指定目录及其子目录下所有打开的文件。

(七)查找打开的文件数量

1
lsof | wc -l

此命令可统计系统中打开的文件总数。

(八)识别资源泄漏

1
lsof -p <PID>

此命令可帮助你查找某个进程打开的文件,从而排查资源泄漏问题。

(九)查看特定类型的文件

1
lsof -U

此命令可列出所有 Unix 域套接字。

六、高级用法

(一)列出监听的网络连接

1
lsof -i TCP:LISTEN

此命令可列出所有处于监听状态的 TCP 端口。

(二)列出特定用户的网络连接

1
lsof -a -u username -i

此命令可列出用户 username 的所有网络连接。

(三)列出特定协议的文件

1
lsof -i TCP:https

此命令可列出所有使用 HTTPS 端口的 TCP 文件。

(四)重复模式

1
lsof -r 5 -i UDP

此命令每 5 秒输出一次所有正在进行的 UDP 连接,直到手动终止。

(五)列出特定范围的文件描述符

1
lsof -d 2-3

此命令可列出文件描述符范围为 2-3 的文件。

七、注意事项

  1. 权限问题:某些信息(如其他用户的文件)可能需要管理员权限才能查看。
  2. 输出格式lsof 的输出包含多个字段,如进程 ID、用户、文件描述符等。可以通过 man lsof 查看详细字段说明。
  3. 性能影响:在系统文件数量较多时,lsof 的运行可能会稍显缓慢,尤其是在没有过滤条件的情况下。

八、总结

lsof 是一个功能强大的工具,适用于多种场景,包括故障排查、性能监测、资源管理等。通过掌握基本语法和常用选项,可以快速定位文件占用、网络连接等问题。结合过滤条件和其他命令,lsof 的应用场景更加广泛,能够满足复杂的系统管理和调试需求。