Linux命令学习之lsof
简介
lsof
是一个用于列出进程打开的文件
的命令。由于在Linux系统上“一切皆文件”,lsof不仅可以获取进程打开的普通文件的列表,还可以获取进程打开的目录、块特殊文件、字符特殊文件、套接字等各种信息。
lsof的安装
# 在ArchLinux上通过pacman安装。
sudo pacman -S lsof
lsof输出的信息
我们打开nano文本编辑器,然后执行lsof -c nano
,输出如下:
\COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nano 19027 lsh cwd DIR 259,9 60 134261379 /home/lsh/learn/c
nano 19027 lsh rtd DIR 259,8 224 128 /
nano 19027 lsh txt REG 259,8 352840 34708268 /usr/bin/nano
nano 19027 lsh mem REG 259,8 6198768 102247963 /usr/lib/locale/locale-archive
nano 19027 lsh mem REG 259,8 154040 100664178 /usr/lib/libpthread-2.33.so
nano 19027 lsh mem REG 259,8 100096 100665882 /usr/lib/libz.so.1.2.11
nano 19027 lsh mem REG 259,8 74448 100665990 /usr/lib/libbz2.so.1.0.8
nano 19027 lsh mem REG 259,8 157456 100665887 /usr/lib/liblzma.so.5.2.5
nano 19027 lsh mem REG 259,8 2150424 100664130 /usr/lib/libc-2.33.so
nano 19027 lsh mem REG 259,8 453688 100664712 /usr/lib/libncursesw.so.6.2
nano 19027 lsh mem REG 259,8 170080 100665234 /usr/lib/libmagic.so.1.0.0
nano 19027 lsh mem REG 259,8 54380 34753993 /usr/share/locale/zh_CN/LC_MESSAGES/nano.mo
nano 19027 lsh mem REG 259,8 221480 100664118 /usr/lib/ld-2.33.so
nano 19027 lsh 0u CHR 136,2 0t0 5 /dev/pts/2
nano 19027 lsh 1u CHR 136,2 0t0 5 /dev/pts/2
nano 19027 lsh 2u CHR 136,2 0t0 5 /dev/pts/2
nano 19146 lsh cwd DIR 259,8 8192 100663426 /etc
nano 19146 lsh rtd DIR 259,8 224 128 /
nano 19146 lsh txt REG 259,8 352840 34708268 /usr/bin/nano
nano 19146 lsh mem REG 259,8 6198768 102247963 /usr/lib/locale/locale-archive
nano 19146 lsh mem REG 259,8 154040 100664178 /usr/lib/libpthread-2.33.so
nano 19146 lsh mem REG 259,8 100096 100665882 /usr/lib/libz.so.1.2.11
nano 19146 lsh mem REG 259,8 74448 100665990 /usr/lib/libbz2.so.1.0.8
nano 19146 lsh mem REG 259,8 157456 100665887 /usr/lib/liblzma.so.5.2.5
nano 19146 lsh mem REG 259,8 2150424 100664130 /usr/lib/libc-2.33.so
nano 19146 lsh mem REG 259,8 453688 100664712 /usr/lib/libncursesw.so.6.2
nano 19146 lsh mem REG 259,8 170080 100665234 /usr/lib/libmagic.so.1.0.0
nano 19146 lsh mem REG 259,8 54380 34753993 /usr/share/locale/zh_CN/LC_MESSAGES/nano.mo
nano 19146 lsh mem REG 259,8 221480 100664118 /usr/lib/ld-2.33.so
nano 19146 lsh 0u CHR 136,2 0t0 5 /dev/pts/2
nano 19146 lsh 1u CHR 136,2 0t0 5 /dev/pts/2
nano 19146 lsh 2u CHR 136,2 0t0 5 /dev/pts/2
可以看到lsof输出许多列的信息,各列信息的含义如下:
COMMAND: 执行该进程的可执行文件的名称
PID: 进程的进程号
USER: 进程的所有者
FD: 文件的文件描述符,可能有以下取值:
txt: 该文件是程序代码
mem: 内存映射文件
rtd: 根目录
cwd: 当前工作目录
打开文件的文件描述符,r表示读取访问,w表示写访问,u表示读写访问。
TYPE: 文件的类型
DEVICE: 设备号
SIZE/OFF: 文件的大小或偏移量
NODE: 文件的i-node号
NAME: 文件的绝对路径
常用选项
选项 | 说明 |
---|---|
没有选项 | 如果lsof不加任何选项,将列出所有进程的打开文件 |
-h | 列出帮助信息 |
-c COMMAND | 显示进程名称以COMMAND开头的进程信息 |
-g GID | 列出组ID为GID的进程 |
-p PID | 列出进程号为PID的进程 |
-d FD | 列出文件描述符为FD的文件 |
+d DIR | 列出目录被打开的进程 |
+D DIR | 递归列出目录下被打开的文件 |
-u UID | 列出所有者ID为UID的进程 |