lsof使用

lsof输出信息含义

在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。

| COMMAND | PID | USER | FD | TYPE | DEVICE | SIZE | NODE | NAME | | --- | ---- | ---- | ---| ---| ---| ----| ---| ---| ----| | init | 1 | root | cwd | DIR | 3,3 | 1024 | 2 | / | | init | 1 | root | rtd | DIR | 3,3 | 1024 | 2 | / | | init | 1 | root | txt | REG | 3,3 | 38432 | 1763452 | /sbin/init | init | 1 | root | mem | REG | 3,3 | 106114 | 1091620 | /lib/libdl-2.6.so | init | 1 | root | mem | REG | 3,3 | 7560696 | 1091614 | /lib/libc-2.6.so | init | 1 | root | mem | REG | 3,3 | 79460 | 1091669 | /lib/libselinux.so.1 | init | 1 | root | mem | REG | 3,3 | 223280 | 1091668 | /lib/libsepol.so.1 | init | 1 | root | mem | REG | 3,3 | 564136 | 1091607 | /lib/ld-2.6.so | init | 1 | root | 10u | FIFO | 0,15 | | 1309 |/dev/initctl

每行显示一个打开的文件,若不指定条件默认将显示所有进程打开的所有文件。

lsof输出各列信息的意义如下:

COMMAND:进程的名称 \ PID:进程标识符 \ USER:进程所有者 \ FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等 \ TYPE:文件类型,如DIR、REG等 \ DEVICE:指定磁盘的名称 \ SIZE:文件的大小 \ NODE:索引节点(文件在磁盘上的标识) \ NAME:打开文件的确切名称

  1. 其中FD 列中的文件描述符

    1. cwd 值表示应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改。

    2. txt 类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序。其次数值表示应用

    3. 10u 打开该文件时返回的一个整数。如上的最后一行文件/dev/initctl,其文件描述符为 10u 表示该文件被打开并处于读取/写入模式,而不是只读 ®只写 (w) 模式。同时还有大写 的W 表示该应用程序具有对整个文件的写锁。 该文件描述符用于确保每次只能打开一个应用程序实例。

    初始打开每个应用程序时,都具有三个文件描述符,从 02,分别表示标准输入、输出和错误流。所以大多数应用程序所打开的文件的 FD 都是从 3 开始。

  2. 与 FD 列相比,Type 列则比较直观。

    1. 文件和目录分别称为 REGDIR
    2. CHRBLK,分别表示字符和块设备;
    3. 或者 UNIXFIFOIPv4,分别表示 UNIX 域套接字、先进先出 (FIFO) 队列和网际协议 (IP) 套接字。