阅读 50

Linux lsof 命令详解

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

lsof(list open files)是一个列出打开文件的工具。众所周知,在linux系统中,一切皆是文件,通过文件不仅可以访问常规数据,还可以访问网络连接和硬件。所以通过lsof命令,不仅可以查看打开的文件、目录信息,还可以查看网络相关的信息、管道等等。下面就来介绍一下lsof命令的用法。

lsof可以查看打开的文件有:

  • 普通文件
  • 目录
  • 网络文件系统的文件
  • 字符或设备文件
  • (函数) 共享库
  • 管道、命名管道
  • 符号链接
  • 网络相关文件(底层的socket字流,网络socket,unix域名socket)
  • 其它类型的文件等等

lsof命令语法详解

语法格式

lsof [选项]

常用选项如下:

  • -a:使用 AND 逻辑,合并选项的输出内容
  • -c <进程名>:列出名称以指定名称开头的进程打开的文件
  • -d <文件描述符>:列出打开指定文件描述的进程
  • +d <目录>:列出指定目录下被打开的文件
  • +D <目录>:递归列出目录下被打开的文件
  • -u <用户名>:列出指定用户打开的文件
  • -p <进程号>:列出指定进程号打开的文件
  • -i <条件>:列出符合条件的与网络相关的文件(:端口、 @ip等)

输出内容详解:

执行lsof输出如下:

COMMAND    PID  TID    USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd      1         root  cwd       DIR                8,1      4096          2 /
systemd      1         root  rtd       DIR                8,1      4096          2 /
systemd      1         root  txt       REG                8,1   1632744     790864 /usr/lib/systemd/systemd
systemd      1         root  mem       REG                8,1     20064     787793 /usr/lib64/libuuid.so.1.3.0
systemd      1         root  mem       REG                8,1    265576     789229 /usr/lib64/libblkid.so.1.1.0
systemd      1         root  mem       REG                8,1     90176     787777 /usr/lib64/libz.so.1.2.7
systemd      1         root  mem       REG                8,1    157424     787790 /usr/lib64/liblzma.so.5.2.2
systemd      1         root  mem       REG                8,1     23968     788002 /usr/lib64/libcap-ng.so.0.0.0
systemd      1         root  mem       REG                8,1     19896     788009 /usr/lib64/libattr.so.1.1.0
systemd      1         root  mem       REG                8,1     19248     787615 /usr/lib64/libdl-2.17.so
systemd      1         root  mem       REG                8,1    402384     787766 /usr/lib64/libpcre.so.1.2.0
systemd      1         root  mem       REG                8,1   2156352     787585 /usr/lib64/libc-2.17.so
systemd      1         root  mem       REG                8,1    142144     787611 /usr/lib64/libpthread-2.17.so
systemd      1         root  mem       REG                8,1     88720     793180 /usr/lib64/libgcc_s-4.8.5-20150702.so.1
···
···
复制代码
  • COMMAND:进程的名称

  • PID:进程标识符

  • TID:线程标识符

  • USER:进程所有者

  • FD:文件描述符,应用程序通过文件描述符识别该文件。

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

    • DIR:表示目录
    • CHR:表示字符类型
    • BLK:块设备类型
    • UNIX:UNIX 域套接字
    • FIFO:先进先出(FIFO)队列
    • IPv4:网际协议(IP)套接字
  • DEVICE:指定磁盘的名称

  • SIZE/OFF:文件的大小

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

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

常用操作

  • 命令lsof test.txt:显示使用test.txt文件的进程
  • 命令lsof -i:80:列出80端口目前打开的文件列表
  • 命令lsof -i:列出所有的网络连接
  • 命令lsof -i tcp:列出所有的 TCP 网络连接信息
  • 命令lsof -i udp:列出所有的 UDP 网络连接信息
  • 命令lsof -i tcp:8080:列出8080端口 TCP 协议的所有连接信息
  • 命令lsof -i udp:8080:列出8080端口 UDP 协议的所有连接信息
  • 命令lsof -c docker:列出以docker开头的进程打开的文件列表
  • 命令lsof -p 3669:列出指定进程打开的文件列表
  • 命令lsof -u root:列出指定用户打开的文件列表
  • 命令lsof -u root -i tcp:列出指定用户打开的文件列表信息和所有的 TCP 网络连接信息
  • 命令lsof -a -u root -i tcp:列出指定用户打开的文件列表信息,同时是 TCP 网络连接信息
  • 命令:lsof +d /usr/local/ 说明:列出指定目录下被进程打开的文件列表

原创不易,如果小伙伴们觉得有帮助,麻烦点个赞再走呗~

最后,感谢女朋友在工作和生活中的包容、理解与支持 !

文章分类
后端
文章标签