lsof(list open files)是一个查看进程打开的文件的工具。

在 linux 系统中,一切皆文件。通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以 lsof 命令不仅可以查看进程打开的文件、目录,还可以查看进程监听的端口等 socket 相关的信息...

在 linux 系统中,一切皆文件。通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以 lsof 命令不仅可以查看进程打开的文件、目录,还可以查看进程监听的端口等 socket 相关的信息。本文将介绍 lsof 命令的基本用法,本文中 demo 的演示环境为 ubuntu 18.04。

常用选项

-a指示其它选项之间为与的关系

-c<进程名> 输出指定进程所打开的文件

-d<文件描述符> 列出占用该文件号的进程

+d<目录> 输出目录及目录下被打开的文件和目录(不递归)

+D<目录> 递归输出及目录下被打开的文件和目录

-i<条件> 输出符合条件与网络相关的文件

-n不解析主机名

-p<进程号> 输出指定 PID 的进程所打开的文件

-P不解析端口号

-t只输出 PID

-u输出指定用户打开的文件

-U输出打开的 UNIX domain socket 文件

-h显示帮助信息

-v显示版本信息

基本输出

如果不带任何选项执行 lsof 命令,会输出系统中所有 active 进程打开的所有文件,结果就是我们被输出的信息所淹没,这没有任何的意义。我们先让 lsof 命令输出当前 Bash 进程打开的文件,并截取其中的一部分结果来介绍输出内容中都包含哪些信息:

11.webp

COMMAND:程序的名称  PID:进程标识符  USER:进程所有者  FD:文件描述符,应用程序通过文件描述符识别该文件  NAME:打开文件的确切名称

TYPE:文件类型,如 DIR、REG等  DEVICE:以逗号分隔设备编号  SIZE:文件的大小(bytes)  NODE:索引节点(文件在磁盘上的标识)

下面简单介绍一下 FD 列和 TYPE 列中的常见内容。

FD 列中的常见内容有 cwd、rtd、txt、mem 和一些数字等等。其中 cwd 表示当前的工作目录;rtd 表示根目录;txt 表示程序的可执行文件;mem 表示内存映射文件:

22.webp

还有一部分 FD 是以数字表示的,比如标准输入输出文件:
33.webp\

数字后面的字母表示进程对该文件的读写模式,比如上图中的 u 表示该文件被打开并处于读取/写入模式。除了 u,还有 r 表示只读模式,w 表示只写模式,还可以同时应用 W 表示该进程拥有对文件写操作的锁。下图是截取的 docker daemon 进程打开的文件列表,其中显示了 FD 的不同模式:

44.webp
TYPE 列中常见的 REG 和 DIR 分别表示普通文件和目录。而 CHR 和 BLK 则分别表示字符和块设备,unix、fifo 和 IPv4/IPv6 分别表示 UNIX domain套接字、先进先出(FIFO)队列和 IPv4/IPv6 套接字。

  • 发表于 2025-08-05 19:28
  • 阅读 ( 16 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
shitian
shitian

662 篇文章

作家榜 »

  1. shitian 662 文章
  2. 石天 437 文章
  3. 每天惠23 33 文章
  4. 小A 29 文章