lsof 含义为 list open files, 可以列出所有被进程所打开的文件列表.在Linux上,一切皆文件, 硬件设备,包括 USB 设备皆是通过文件描述, 网络 socket 也为文件,目录也被描述为特殊类型的文件.因此我们在诊断问题或者调试的过程中,找到对应打开的文件信息将对我们的工作过程很有帮助.

lsof 常用一些命令如下:

  • lsof -h 展示快捷帮助文档
  • lsof fpath 列出所有打开fpath的文件
  • lsof -i 列出所有与网络有关的被打开文件
  • lsof -u {USER} 列出所有用户下被打开的文件
  • lsof -p {PID} 列出对应进程打开的所有文件
  • lsof +d {DIR} 列出所有{DIR}下打开的文件
  • lsof +D {DIR} 递归的列出所有{DIR}下打开的文件
  • lsof -c cmd 列出 cmd 命令打开的所有文件列表
root@server:~# lsof -c bash
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
bash    1108 root  cwd    DIR    8,1     4096     19 /root
bash    1108 root  rtd    DIR    8,1     4096      2 /
bash    1108 root  txt    REG    8,1  1037528   1586 /bin/bash
bash    1108 root  mem    REG    8,1    47600    320 /lib/x86_64-linux-gnu/libnss_files-2.23.so
bash    1108 root  mem    REG    8,1    47648    311 /lib/x86_64-linux-gnu/libnss_nis-2.23.so
bash    1108 root  mem    REG    8,1    93128    318 /lib/x86_64-linux-gnu/libnsl-2.23.so
bash    1108 root  mem    REG    8,1    35688    325 /lib/x86_64-linux-gnu/libnss_compat-2.23.so
bash    1108 root  mem    REG    8,1  2981280 393873 /usr/lib/locale/locale-archive
bash    1108 root  mem    REG    8,1  1868984    323 /lib/x86_64-linux-gnu/libc-2.23.so
bash    1108 root  mem    REG    8,1    14608    305 /lib/x86_64-linux-gnu/libdl-2.23.so
bash    1108 root  mem    REG    8,1   167240    224 /lib/x86_64-linux-gnu/libtinfo.so.5.9
bash    1108 root  mem    REG    8,1   162632    306 /lib/x86_64-linux-gnu/ld-2.23.so
bash    1108 root  mem    REG    8,1    26258 391546 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache
bash    1108 root    0u   CHR    4,1      0t0     20 /dev/tty1
bash    1108 root    1u   CHR    4,1      0t0     20 /dev/tty1
bash    1108 root    2u   CHR    4,1      0t0     20 /dev/tty1
bash    1108 root  255u   CHR    4,1      0t0     20 /dev/tty1
bash    2264 root  cwd    DIR    8,1     4096     19 /root
bash    2264 root  rtd    DIR    8,1     4096      2 /
bash    2264 root  txt    REG    8,1  1037528   1586 /bin/bash
bash    2264 root  mem    REG    8,1    47600    320 /lib/x86_64-linux-gnu/libnss_files-2.23.so
bash    2264 root  mem    REG    8,1    47648    311 /lib/x86_64-linux-gnu/libnss_nis-2.23.so
bash    2264 root  mem    REG    8,1    93128    318 /lib/x86_64-linux-gnu/libnsl-2.23.so
bash    2264 root  mem    REG    8,1    35688    325 /lib/x86_64-linux-gnu/libnss_compat-2.23.so
bash    2264 root  mem    REG    8,1  2981280 393873 /usr/lib/locale/locale-archive
bash    2264 root  mem    REG    8,1  1868984    323 /lib/x86_64-linux-gnu/libc-2.23.so
bash    2264 root  mem    REG    8,1    14608    305 /lib/x86_64-linux-gnu/libdl-2.23.so
bash    2264 root  mem    REG    8,1   167240    224 /lib/x86_64-linux-gnu/libtinfo.so.5.9
bash    2264 root  mem    REG    8,1   162632    306 /lib/x86_64-linux-gnu/ld-2.23.so
bash    2264 root  mem    REG    8,1    26258 391546 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache
bash    2264 root    0u   CHR  136,0      0t0      3 /dev/pts/0
bash    2264 root    1u   CHR  136,0      0t0      3 /dev/pts/0
bash    2264 root    2u   CHR  136,0      0t0      3 /dev/pts/0
bash    2264 root  255u   CHR  136,0      0t0      3 /dev/pts/0

lsof显示的列表信息中, 有 FD TYPE两列, FD 原意为 file descriptor, 即文件描述符, 这里列一下常见的文件描述符:

  • cwd 当前工作目录
  • ltx 共享库
  • m86 DOS 合并映射文件
  • mem 内存映射文件
  • mmap 内存映射设备文件
  • pd 父目录
  • rtd 根目录
  • txt 可执行文件
  • {NUMBER} 数值描述符, 0 表示 标准输入(stdin), 1 表示 标准输出(stdout), 如果后面跟有 {r,w,u}等字符, 表示权限信息, u 表示可读可写, r 表示可读, w 可写.

TYPE 列则表示文件类型,常见的文件类型有:

  • REG 标准文件
  • LINK 链接文件
  • DIR 目录
  • BLK 块设备文件
  • CHR 字符设备文件
  • FIFO FIFO文件
  • PIPE 管道描述符
  • PMEM 内存镜像文件
  • iPv4 ipv4 socket 文件
  • iPv6 ipv6 socket 文件
  • inet 本地域 socket
  • sock 未知域 socket
  • unix UNIX 域 socket

【腾讯云】境外1核2G服务器低至2折,半价续费券限量免费领取!
https://cloud.tencent.com/act/cps/redirect?redirect=1068&cps_key=e4b50f6c64a4480367f8a8d16fd07c5a&from=console

标签: linux, lsof

添加新评论