Lsof 备忘清单

这个快速参考备忘单提供了使用 lsof 命令的各种方法。

入门

介绍

lsof 表示 List Open Files 用于查找哪个进程打开了哪些文件

$ lsof
$ sudo lsof -u root

特定于端口

$ lsof -i :8080
$ lsof -i :80 -i :22
$ lsof -i TCP:22
$ lsof -i TCP:1-1024
$ lsof -i UDP
$ lsof -i @192.168.1.5

特定于进程

$ lsof -c mysql
$ lsof -c java
$ lsof -c ssh
$ lsof -c nginx
$ lsof -c ssh -c httpd

特定于用户

$ lsof -u www-data
$ lsof -u www-data -u ubuntu
$ lsof -i -u ^root # 特定用户除外

特定于网络

$ lsof -i 4   # 仅 IPv4
$ lsof -i 6   # 仅 IPv6

特定的PID

$ lsof -p 1753
$ lsof -p ^3  # 除了某些pid

特定文件名

$ lsof /var/log/messages
$ lsof /etc/passwd

特定目录

$ lsof +D /var/log # 在目录内

Kill

$ kill -9 `lsof -t -u apache`
$ kill -9 $(lsof -t -i :8080)

参数

-a        # 列出打开文件存在的进程;
-c<进程名> # 列出指定进程所打开的文件;
-g        # 列出GID号进程详情;
-d<文件号> # 列出占用该文件号的进程;
+d<目录>   # 列出目录下被打开的文件;
+D<目录>   # 递归列出目录下被打开的文件;
-n<目录>   # 列出使用NFS的文件;
-i<条件>   # 列出符合条件的进程(协议,:端口,@ip)
-p<进程号> # 列出指定进程号所打开的文件;
-u        # 列出UID号进程详情;
-h        # 显示帮助信息;
-v        # 显示版本信息

列出指定进程号所打开的文件

lsof -p $pid

获取端口对应的进程 ID=>pid

lsof -i:9981 -P -t -sTCP:LISTEN

列出打开文件的进程

lsof $filename

示例

示例

$ lsof
command     PID USER   FD      type      DEVICE     SIZE       NODE NAME
init          1 root  cwd       DIR         8,2     4096          2 /
init          1 root  rtd       DIR         8,2     4096          2 /
init          1 root  txt       REG         8,2    43496    6121706 /sbin/init
init          1 root  mem       REG         8,2   143600    7823908 /lib64/ld-2.5.so
init          1 root  mem       REG         8,2  1722304    7823915 /lib64/libc-2.5.so
init          1 root  mem       REG         8,2    23360    7823919 /lib64/libdl-2.5.so
init          1 root  mem       REG         8,2    95464    7824116 /lib64/libselinux.so.1
init          1 root  mem       REG         8,2   247496    7823947 /lib64/libsepol.so.1
init          1 root   10u     FIFO        0,17                1233 /dev/initctl
migration     2 root  cwd       DIR         8,2     4096          2 /
migration     2 root  rtd       DIR         8,2     4096          2 /
migration     2 root  txt   unknown                                 /proc/2/exe

文件描述符列表(FD)

:- :-
cwd 表示当前工作目录,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改
txt 该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序
lnn 库引用 (AIX);
er FD 信息错误(参见名称栏)
jld jail 目录 (FreeBSD);
ltx 共享库文本(代码和数据)
mxx 十六进制内存映射类型编号xx
m86 DOS合并映射文件
mem 内存映射文件
mmap 内存映射设备
pd 父目录
rtd 根目录
tr 内核跟踪文件 (OpenBSD)
v86 VP/ix 映射文件
0 表示标准输出
1 表示标准输入
2 表示标准错误

示例列信息

:- :-
COMMAND 进程的名称
PID 进程标识符
PPID 父进程标识符(需要指定-R参数)
USER 进程所有者
PGID 进程所属组
FD 文件描述符,应用程序通过它识别该文件

标准输出/输入/错误文件状态模式(FD)

:- :-
u 表示该文件被打开并处于读取/写入模式
r 表示该文件被打开并处于只读模式
w 表示该文件被打开并处于写入模式
空格 表示该文件的状态模式为 unknow,且没有锁定
- 表示该文件的状态模式为 unknow,且被锁定

一般在标准输出/输入/错误后还跟着文件状态模式

文件状态模锁 (FD)

:- :-
N 对于未知类型的Solaris NFS锁
r 用于部分文件的读取锁定
R 对整个文件进行读取锁定
w 对文件的一部分进行写锁定(文件的部分写锁)
W 对整个文件进行写锁定(整个文件的写锁)
u 用于任何长度的读写锁
U 对于未知类型的锁
x 对于文件部分的SCO OpenServer Xenix锁
X 对于整个文件的SCO OpenServer Xenix锁
space 如果没有锁

文件状态模式后面,还跟着相关的锁

文件类型

标识 说明
DIR 表示目录
CHR 表示字符类型
BLK 块设备类型
UNIX UNIX 域套接字
FIFO 先进先出 (FIFO) 队列
IPv4 网际协议 (IP) 套接字
DEVICE 指定磁盘的名称
SIZE 文件的大小
NODE 索引节点(文件在磁盘上的标识)
NAME 打开文件的确切名称
REG 常规文件

另见