lsof
显示Linux系统当前已打开的所有文件列表 lsof -p pid
补充说明
lsof命令 用于查看你进程打开的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。
在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。
语法
1 | lsof (选项) |
选项
1 | -a:列出打开文件存在的进程; |
实例
1 | lsof |
lsof输出各列信息的意义如下:
标识 | 说明 |
---|---|
COMMAND |
进程的名称 |
PID |
进程标识符 |
PPID |
父进程标识符(需要指定-R参数) |
USER |
进程所有者 |
PGID |
进程所属组 |
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 |
表示标准错误 |
一般在标准输出、标准错误、标准输入后还跟着文件状态模式:
标识 | 说明 |
---|---|
u |
表示该文件被打开并处于读取/写入模式 |
r |
表示该文件被打开并处于只读模式 |
w |
表示该文件被打开并处于写入模式 |
空格 |
表示该文件的状态模式为 unknow,且没有锁定 |
- |
表示该文件的状态模式为 unknow,且被锁定 |
同时在文件状态模式后面,还跟着相关的锁:
标识 | 说明 |
---|---|
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 |
常规文件 |
列出指定进程号所打开的文件:
1 | lsof -p $pid |
获取端口对应的进程ID=>pid
1 | lsof -i:9981 -P -t -sTCP:LISTEN |
列出打开文件的进程:
1 | lsof $filename |
查看端口占用
1 | lsof -i:$port |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ITCENT' Blog!