1、每天一个linux命令51lsof命令每天一个linux命令(51):lsof命令lsof(listopenfiles)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议(TCP)和用户数据报协议(UDP)套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。1命
2、令格式:lsof参数文件2命令功能:用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监视工具,因为lsof需要访问核心内存和各种文件,所以需要root用户执行。lsof打开的文件可以是:1.普通文件2.目录3.网络文件系统的文件4.字符或设备文件5.(函数)共享库6.管道,命名管道7.符号链接8.网络文件(例如:NFSfile、网络socket,unix域名socket)9.还有其它类型的文件,等等3命令参数:-a列出打开文件存在的进程-c列出指定进程所打开的文件-g列出GID号进程详情-d列出占用该文件号的进程+d列出目录下被
3、打开的文件+D递归列出目录下被打开的文件-n列出使用NFS的文件-i列出符合条件的进程。(4、6、协议、:端口、ip)-p列出指定进程号所打开的文件-u列出UID号进程详情-h显示帮助信息-v显示版本信息4使用实例:实例1:无任何参数命令:lsof输出: rootlocalhost#lsofCOMMANDPIDUSERFDTYPEDEVICESIZENODENAMEinit1rootcwdDIR8,240962/init1rootrtdDIR8,240962/init1roottxtREG8,2434966121706/sbin/initinit1rootmemREG8,21436007823
4、908/lib64/ld-2.5.soinit1rootmemREG8,217223047823915/lib64/libc-2.5.soinit1rootmemREG8,2233607823919/lib64/libdl-2.5.soinit1rootmemREG8,2954647824116/lib64/libselinux.so.1init1rootmemREG8,22474967823947/lib64/libsepol.so.1init1root10uFIFO0,171233/dev/initctlmigration2rootcwdDIR8,240962/migration2root
5、rtdDIR8,240962/migration2roottxtunknown/proc/2/exeksoftirqd3rootcwdDIR8,240962/ksoftirqd3rootrtdDIR8,240962/ksoftirqd3roottxtunknown/proc/3/exemigration4rootcwdDIR8,240962/migration4rootrtdDIR8,240962/migration4roottxtunknown/proc/4/exeksoftirqd5rootcwdDIR8,240962/ksoftirqd5rootrtdDIR8,240962/ksofti
6、rqd5roottxtunknown/proc/5/exeevents/06rootcwdDIR8,240962/events/06rootrtdDIR8,240962/events/06roottxtunknown/proc/6/exeevents/17rootcwdDIR8,240962/说明:lsof输出各列信息的意义如下:COMMAND:进程的名称PID:进程标识符PPID:父进程标识符(需要指定-R参数)USER:进程所有者PGID:进程所属组FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等(1)cwd:表示currentworkdirctory,即:应用程序的
7、当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改(2)txt:该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的/sbin/init程序(3)lnn:libraryreferences(AIX);(4)er:FDinformationerror(seeNAMEcolumn);(5)jld:jaildirectory(FreeBSD);(6)ltx:sharedlibrarytext(codeanddata);(7)mxx:hexmemory-mappedtypenumberxx.(8)m86:DOSMergemappedfile;(9)mem:mem
8、ory-mappedfile;(10)mmap:memory-mappeddevice;(11)pd:parentdirectory;(12)rtd:rootdirectory;(13)tr:kerneltracefile(OpenBSD);(14)v86VP/ixmappedfile;(15)0:表示标准输出(16)1:表示标准输入(17)2:表示标准错误一般在标准输出、标准错误、标准输入后还跟着文件状态模式:r、w、u等(1)u:表示该文件被打开并处于读取/写入模式(2)r:表示该文件被打开并处于只读模式(3)w:表示该文件被打开并处于(4)空格:表示该文件的状态模式为unknow,且没有
9、锁定(5)-:表示该文件的状态模式为unknow,且被锁定同时在文件状态模式后面,还跟着相关的锁(1)N:foraSolarisNFSlockofunknowntype;(2)r:forreadlockonpartofthefile;(3)R:forareadlockontheentirefile;(4)w:forawritelockonpartofthefile;(文件的部分写锁)(5)W:forawritelockontheentirefile;(整个文件的写锁)(6)u:forareadandwritelockofanylength;(7)U:foralockofunknowntype;
10、(8)x:foranSCOOpenServerXenixlockonpartofthefile;(9)X:foranSCOOpenServerXenixlockontheentirefile;(10)space:ifthereisnolock.TYPE:文件类型,如DIR、REG等,常见的文件类型(1)DIR:表示目录(2)CHR:表示字符类型(3)BLK:块设备类型(4)UNIX:UNIX域套接字(5)FIFO:先进先出(FIFO)队列(6)IPv4:网际协议(IP)套接字DEVICE:指定磁盘的名称SIZE:文件的大小NODE:索引节点(文件在磁盘上的标识)NAME:打开文件的确切名称实例
11、2:查看谁正在使用某个文件,也就是说查找某个文件相关的进程命令:lsof/bin/bash输出:rootlocalhost#lsof/bin/bashCOMMANDPIDUSERFDTYPEDEVICESIZENODENAMEbash24159roottxtREG8,28015285368780/bin/bashbash24909roottxtREG8,28015285368780/bin/bashbash24941roottxtREG8,28015285368780/bin/bashrootlocalhost#说明:实例3:递归查看某个目录的文件信息命令:lsoftest/test3输出:r
12、ootlocalhost#cd/opt/soft/rootlocalhostsoft#lsoftest/test3COMMANDPIDUSERFDTYPEDEVICESIZENODENAMEbash24941rootcwdDIR8,240962258872test/test3vi24976rootcwdDIR8,240962258872test/test3rootlocalhostsoft#说明:使用了+D,对应目录下的所有子目录和文件都会被列出实例4:不使用+D选项,遍历查看某个目录的所有文件信息的方法命令:lsof|greptest/test3输出: rootlocalhostsoft#l
13、sof|greptest/test3bash24941rootcwdDIR8,240962258872/opt/soft/test/test3vi24976rootcwdDIR8,240962258872/opt/soft/test/test3vi24976root4uREG8,2122882258882/opt/soft/test/test3/.log2013.log.swprootlocalhostsoft#说明:实例5:列出某个用户打开的文件信息命令:lsof-uusername说明:-u选项,u其实是user的缩写实例6:列出某个程序进程所打开的文件信息命令:lsof-cmysql说明
14、:-c选项将会列出所有以mysql这个进程开头的程序的文件,其实你也可以写成lsof|grepmysql,但是第一种方法明显比第二种方法要少打几个字符了实例7:列出多个进程多个打开的文件信息命令:lsof-cmysql-capache实例8:列出某个用户以及某个进程所打开的文件信息命令:lsof-utest-cmysql说明:用户与进程可相关,也可以不相关实例9:列出除了某个用户外的被打开的文件信息命令:lsof-uroot说明:这个符号在用户名之前,将会把是root用户打开的进程不让显示实例10:通过某个进程号显示该进行打开的文件命令:lsof-p1实例11:列出多个进程号对应的文件信息命令
15、:lsof-p1,2,3实例12:列出除了某个进程号,其他进程号所打开的文件信息命令:lsof-p1实例13:列出所有的网络连接命令:lsof-i实例14:列出所有tcp网络连接信息命令:lsof-itcp实例15:列出所有udp网络连接信息命令:lsof-iudp实例16:列出谁在使用某个端口命令:lsof-i:3306实例17:列出谁在使用某个特定的udp端口命令:lsof-iudp:55或者:特定的tcp端口命令:lsof-itcp:80实例18:列出某个用户的所有活跃的网络端口命令:lsof-a-utest-i实例19:列出所有网络文件系统命令:lsof-N实例20:域名socket文
16、件命令:lsof-u实例21:某个用户组所打开的文件信息命令:lsof-g5555实例22:根据文件描述列出对应的文件信息命令:lsof-ddescription(like2)例如:lsof-dtxt例如:lsof-d1例如:lsof-d2说明:0表示标准输入,1表示标准输出,2表示标准错误,从而可知:所以大多数应用程序所打开的文件的FD都是从3开始实例23:根据文件描述范围列出文件信息命令:lsof-d2-3实例24:列出COMMAND列中包含字符串sshd,且文件描符的类型为txt的文件信息命令:lsof-csshd-a-dtxt输出:rootlocalhostsoft#lsof-cssh
17、d-a-dtxtCOMMANDPIDUSERFDTYPEDEVICESIZENODENAMEsshd2756roottxtREG8,24094881027867/usr/sbin/sshdsshd24155roottxtREG8,24094881027867/usr/sbin/sshdsshd24905roottxtREG8,24094881027867/usr/sbin/sshdsshd24937roottxtREG8,24094881027867/usr/sbin/sshdrootlocalhostsoft#rootlocalhostsoft#实例25:列出被进程号为1234的进程所打开的所有IPV4networkfiles命令:lsof-i4-a-p1234实例26:列出目前连接主机peida.linux上端口为:20,21,22,25,53,80相关的所有文件信息,且每隔3秒不断的执行lsof指令命令:lsof-ipeida.linux:20,21,22,25,53,80-r3
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1