Linux lsof命令详解

guiyun affiliate
命令安装

这是一个很尴尬的事情,这么好用的工具,在很多Linux发行版上居然不是自带的,在CentOS/Fedora/RHEL版本的Linux中则使用下面的命令进行安装。

  1. # yum install -y lsof

命令详解

lsof也是有着最多选项的Linux/Unix命令之一。lsof可以查看打开的文件是:

  • 普通文件

  • 目录

  • 网络文件系统的文件

  • 字符或设备文件

  • (函数)共享库

  • 管道、命名管道

  • 符号链接

  • 网络文件(例如:NFS file、网络socket,unix域名socket)

  • 还有其它类型的文件,等等

虽然lsof命令有着N多的选项,但是常用的只有以下几个:

  • -a:使用AND逻辑,合并选项输出内容

  • -c:列出名称以指定名称开头的进程打开的文件

  • -d:列出打开指定文件描述的进程

  • +d:列出目录下被打开的文件

  • +D:递归列出目录下被打开的文件

  • -n:列出使用NFS的文件

  • -u:列出指定用户打开的文件

  • -p:列出指定进程号所打开的文件

  • -i:列出打开的套接字

使用实例

总的说来,lsof命令还是一个比较复杂的命令,那么多选项,用起来还是蛮累的,但是这不能否定它是一个出色的工具,一个我们不得不学习的命令。下面就来说一些lsof的惯用用法。

  • 命令:lsof
    输出:

  1. COMMAND     PID   TID    USER   FD      TYPE             DEVICE   SIZE/OFF       NODE NAME

  2. systemd       1          root  cwd       DIR              253,1       4096          2 /

  3. systemd       1          root  rtd       DIR              253,1       4096          2 /

  4. systemd       1          root  txt       REG              253,1    1523568    1053845 /usr/lib/systemd/systemd

  5. systemd       1          root  mem       REG              253,1      20040    1050452 /usr/lib64/libuuid.so.1.3.0

  6. systemd       1          root  mem       REG              253,1     261336    1051899 /usr/lib64/libblkid.so.1.1.0

  7. systemd       1          root  mem       REG              253,1      90664    1050435 /usr/lib64/libz.so.1.2.7

  8. systemd       1          root  mem       REG              253,1     157424    1050447 /usr/lib64/liblzma.so.5.2.2

  9. systemd       1          root  mem       REG              253,1      23968    1050682 /usr/lib64/libcap-ng.so.0.0.0

  10. systemd       1          root  mem       REG              253,1      19888    1050666 /usr/lib64/libattr.so.1.1.0

  • 输出内容详解:

    • DIR:表示目录

    • CHR:表示字符类型

    • BLK:块设备类型

    • UNIX:UNIX域套接字

    • FIFO:先进先出(FIFO)队列

    • IPv4:网际协议(IP)套接字

    • cwd:表示current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录

    • txt:该类型的文件是程序代码,如应用程序二进制文件本身或共享库

    • lnn:library references (AIX)

    • er:FD information error (see NAME column)

    • jld:jail directory (FreeBSD)

    • ltx:shared library text (code and data)

    • mxx:hex memory-mapped type number xx

    • m86:DOS Merge mapped file

    • mem:memory-mapped file

    • mmap:memory-mapped device

    • pd:parent directory

    • rtd:root directory

    • tr:kernel trace file (OpenBSD)

    • v86:VP/ix mapped file

    • 0:表示标准输出

    • 1:表示标准输入

    • 2:表示标准错误

    • COMMAND:进程的名称

    • PID:进程标识符

    • TID:线程标识符

    • USER:进程所有者

    • FD:文件描述符,应用程序通过文件描述符识别该文件,一般有以下取值:

    • TYPE:文件类型,常见的文件类型有以下几种:

    • DEVICE:指定磁盘的名称

    • SIZE/OFF:文件的大小

    • NODE:索引节点(文件在磁盘上的标识)

    • NAME:打开文件的确切名称

  • 命令:lsof abc.txt
    说明:显示开启文件abc.txt的进程

  • 命令:lsof -i :80
    说明:列出80端口目前打开的文件列表
    输出:

  1. COMMAND     PID  USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME

  2. nginx      8838  root    8u  IPv4 114512623      0t0  TCP *:http (LISTEN)

  3. nginx     12886 jelly    8u  IPv4 114512623      0t0  TCP *:http (LISTEN)

  4. nginx     12887 jelly    8u  IPv4 114512623      0t0  TCP *:http (LISTEN)

命令:lsof -i
说明:列出所有的网络连接
输出:

  1. COMMAND     PID  USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME

  2. ntpd        856   ntp   16u  IPv4     13105      0t0  UDP *:ntp

  3. ntpd        856   ntp   17u  IPv6     13106      0t0  UDP *:ntp

  4. ntpd        856   ntp   18u  IPv4     13210      0t0  UDP localhost:ntp

  5. ntpd        856   ntp   19u  IPv4     13211      0t0  UDP jellythink:ntp

  6. vsftpd     1613  root    3u  IPv6     17867      0t0  TCP *:ftp (LISTEN)

  7. php-fpm    4037 jelly    0u  IPv4  60908335      0t0  TCP localhost:cslistener (LISTEN)

  8. sshd       8503  root    3u  IPv4    197060      0t0  TCP *:50022 (LISTEN)

  9. nginx      8838  root    8u  IPv4 114512623      0t0  TCP *:http (LISTEN)

  10. nginx      8838  root    9u  IPv4 114512624      0t0  TCP *:https (LISTEN)

  11. php-fpm    9059 jelly    0u  IPv4  60908335      0t0  TCP localhost:cslistener (LISTEN)

  12. php-fpm    9137 jelly    0u  IPv4  60908335      0t0  TCP localhost:cslistener (LISTEN)

  • 命令:lsof -i tcp
    说明:列出所有的TCP网络连接信息

  • 命令:lsof -i udp
    说明:列出所有的UDP网络连接信息

  • 命令:lsof -i tcp:80
    说明:列出80端口TCP协议的所有连接信息

  • 命令:lsof -i udp:25
    说明:列出25端口UDP协议的所有连接信息

  • 命令:lsof -c ngin
    说明:列出以ngin开头的进程打开的文件列表

  • 命令:lsof -p 20711
    说明:列出指定进程打开的文件列表

  • 命令:lsof -u uasp
    说明:列出指定用户打开的文件列表

  • 命令:lsof -u uasp -i tcp
    说明:将所有的TCP网络连接信息和指定用户打开的文件列表信息一起输出

  • 命令:lsof -a -u uasp -i tcp
    说明:将指定用户打开的文件列表信息,同时是TCP网络连接信息的一起输出;注意和上一条命令进行对比

  • 命令:lsof +d /usr/local/
    说明:列出目录下被进程打开的文件列表

  • 命令:lsof +D /usr/local/
    说明:递归搜索目录下被进程打开的文件列表

  • 命令:lsof -i @peida.linux:20,21,22,25,53,80 -r 3
    说明:列出目前连接到主机peida.linux上端口为20,21,22,25,53,80相关的所有文件信息,且每隔3秒不断的执行lsof指令


guiyun affiliate

标签: Linux

作者头像
南宫俊逸创始人

君子好学,自强不息~

上一篇:Linux pidstat命令详解
下一篇:Linux ip命令详解

发表评论

腾讯-云服务器2核4G,首年70元