Linux 基本工具(lsof)
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
本地域 socketsock
未知域 socketunix
UNIX 域 socket