Linux命令分析:lsof

用途:列出已打开的文件

说明:lsof是一个列出系统当前已打开的文件的工具,在Linux环境中,一切皆文件,包括普通文件,目录,NFS文件,块文件,字符文件,共享库,管道,符号链接,socket等等,这样通过列举程序所操作的文件,可以清楚了解程序的运行情况

在缺省任何选项的情况下,lsof会列出所有活动进程打开的文件

用法:lsof   选项   [绝对路径的进程文件]

显示结果


COMMAND   进程名

PID   进程标识符

USER   进程所有者

FD   文件描述符

TYPE   文件类型,如DIR,REG等

DEVICE   所属设备(主设备号,次设备号)

SIZE/OFF   文件大小

NODE   文件的inode号

NAME   打开的文件名称


选项:

-a   后面要接多个其他选项,表示这些选项之间是and与关系,即必须同时满足;不加-a则为默认的或关系

-c c   列出指定进程所打开的文件,多个指定进程并列时每个前面加-c

以^开头的进程名将被忽略

/c/中间的变量将被视为正则表达式,其中的shell元字符要加引号

+d s   列出目录s下所有被打开的文件,且只列出该目录下面一层,不遍历目录树,默认不跟踪符号链接

-d s   列出s指定的文件描述符的文件,比如   “cwd,1,3”   或者   “^6,^2”

+D D   列出目录D及其子目录中所有被打开的文件,默认不跟踪符号链接,也不进入子目录上的文件系统挂载点

+/-e s   排除指定路径上的文件系统以防止调用内核功能造成block,+e选项排除stat(2),lstat(2)和大多数readlink(2)内核功能调用,-e选项只排除stat(2)和lstat(2)调用

+/-f [cfgGn]   f后各参数指定要显示的kernel file struture information,+是显示,-是不显示。-f后不加参数时,所有的路径名参数都将被简单对待,不区分文件系统,例如“-f --/”将搜索所有路径名以/开头的文件,而不仅仅是/根目录下的文件系统

-g [s]   列出指定PGID号的进程打开的文件

-i [i]   列出符合指定网络参数(ipv4,ipv6,协议,端口,ip等)的进程文件,形式有如下几种

46   ipv4或ipv6

protocal   网络协议,如TCP,UDP等

@hostname   主机名

@hostaddr   主机ip地址

service   在/etc/services文件内存在的服务名,比如smtp之类的

port   端口号

常用形式有:   lsof   -i6   #只显示ipv6有关文件

lsof   -i  TCP:25   #跟TCP25号端口有关的文件

lsof   -i   @192.168.1.1   #ipv4地址为192.168.1.1

lsof   -i   UDP:who   #使用UDP端口的某个服务

lsof   -i   TCP@myhost.local:80   #主机名为myhost.local,使用80端口和TCP协议的文件

lsof   -i   TCP@foo:1-10,smtp,99   


lsof   -i   tcp@bar:1-smtp   

-k k   指定kernel name list文件,取代/vmunix,/mach等

-l   不把UID转换成用户名

+/-L [l]   用于指定是否列出文件连接数,+是开启,-是关闭;对socket和大部分FIFO及pipe文件无效;+L后面不接数字时,默认会列出所有连接数,接数字则会列出小于指定连接数的文件

-n   不进行ip地址到主机名的转换,让lsof程序跑得快点

-N   列出打开的NFS文件

-o   将列出文件偏移地址(file offset),取代原来的SIZE/OFF列

-p s   列出指定PID进程所打开的文件

-P   对于网络文件,不进行port number到port name的转换

+|-r t   重复执行lsof命令,缺省是15s刷新,-r是重复执行直到收到中断信号,+r是重复执行到没有打开的文件,t指定刷新时间

-R   加一列用来显示其父进程的PPID

-u s   列出指定用户名或UID所打开的文件

-U   列出Unix域套接字文件

-x   与-d和+D合用时,跟踪符号链接和文件系统挂载点


典型用法:

1.列出目录下所有打开的文件

lsof   目录路径   

lsof   -D   目录路径   #递归的列出该目录下所有的子目录中被打开的文件

lsof   -d   txt   #查找所有被打开的txt文件


2.查找谁在使用某个文件

lsof   文件路径


3.列出某用户打开的所有文件

lsof   -u   用户名/UID


4.查找某个程序打开的所有文件

lsof   -c   进程名   #进程名可以只输入开头字母,会自动列出以此开头的所有进程

lsof   -p   PID   #列出某个PID对应进程打开的文件

lsof   -p   ^1000   #列出除了PID为1000的进程外所有进程打开的文件


5.列出所有由某个用户或某个进程打开的文件

lsof   -u   用户名   -c   进程名


6.列出某个用户的某个进程打开的文件

lsof   -a   -u   root   -c   crond   #列出root用户的crond命令打开的文件,-a代表后面的各选项要同时成立


7.列出网络连接

lsof   -i   #列出所有i网络连接

lsof   -i   TCP   #列出所有TCP连接

lsof   -i   :22   #列出所有使用22端口的网络连接

lsof   -i   :ssh   #列出所有使用ssh的网络连接

lsof   -i   TCP:80

lsof   -a   -u   用户名   -i   #列出某个用户使用的所有网络连接

lsof   -i   @192.168.1.1   #列出远程主机打开的文件


8.列出某个进程组里的所有进程打开的文件

lsof   -g   1234   #PGID为1234的所有进程









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值