msnshow 发表于 2010-7-8 10:20:26

lsof列举系统中已经被打开的文件

lsof全名list openedfiles,也就是列举系统中已经被打开的文件。我们都知道,linux环境中,任何事物都是文件,设备是文件,目录是文件,甚至sockets也是文件。所以,用好lsof命令,对日常的linux管理非常有帮助。以下的说明,大部分内容来自lsof的manual文档。我所做的只是在中文翻译的基础上,进行简单的分类说明,并列举最常用的参数。<BR>一、输出说明<BR>&nbsp;&nbsp; lsof是linux最常用的命令之一,通常的输出格式为:<BR>引用<BR>COMMAND&nbsp;&nbsp;&nbsp;&nbsp; PID&nbsp;&nbsp; USER&nbsp;&nbsp; FD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TYPE&nbsp;&nbsp;&nbsp;&nbsp; DEVICE&nbsp;&nbsp;&nbsp;&nbsp; SIZE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NODE NAME<BR>常见包括如下几个字段:更多的可见manual。<BR>1、COMMAND<BR>默认以9个字符长度显示的命令名称。可使用+c参数指定显示的宽度,若+c后跟的参数为零,则显示命令的全名<BR>2、PID:进程的ID号<BR>3、PPID<BR>父进程的IP号,默认不显示,当使用-R参数可打开。<BR>4、PGID<BR>进程组的ID编号,默认也不会显示,当使用-g参数时可打开。<BR>5、USER<BR>命令的执行UID或系统中登陆的用户名称。默认显示为用户名,当使用-l参数时,可显示UID。<BR>6、FD<BR>是文件的File Descriptor number,或者如下的内容:<BR>(这里很难翻译对应的意思,保留英文)<BR>引用<BR>cwd&nbsp; current working directory;<BR>Lnn&nbsp; library references (AIX);<BR>jld&nbsp; jail directory (FreeBSD);<BR>ltx&nbsp; shared library text (code and data);<BR>Mxx&nbsp; hex memory-mapped type number xx.<BR>m86&nbsp; DOS Merge mapped file;<BR>mem&nbsp; memory-mapped file;<BR>mmap memory-mapped device;<BR>pd&nbsp;&nbsp; parent directory;<BR>rtd&nbsp; root directory;<BR>tr&nbsp;&nbsp; kernel trace file (OpenBSD);<BR>txt&nbsp; program text (code and data);<BR>v86&nbsp; VP/ix mapped file;<BR>文件的File Descriptor number显示模式有:<BR>引用<BR>r for read access;<BR>w for write access;<BR>u for read and write access;<BR>N for a Solaris NFS lock of unknown type;<BR>r for read lock on part of the file;<BR>R for a read lock on the entire file;<BR>w for a write lock on part of the file;<BR>W for a write lock on the entire file;<BR>u for a read and write lock of any length;<BR>U for a lock of unknown type;<BR>x for an SCO OpenServer Xenix lock on part&nbsp; of the file;<BR>X&nbsp; for an SCO OpenServer Xenix lock on the entire file;<BR>space if there is no lock.<BR>7、TYPE<BR>引用<BR>IPv4 IPv4的包;<BR>IPv6 使用IPv6格式的包,即使地址是IPv4的,也会显示为IPv6,而映射到IPv6的地址;<BR>DIR 目录<BR>LINK 链接文件<BR>详情请看manual中更多的注释。<BR>8、DEVICE<BR>使用character special、block special表示的设备号<BR>9、SIZE<BR>文件的大小,如果不能用大小表示的,会留空。使用-s参数控制。<BR>10、NODE<BR>本地文件的node码,或者协议,如TCP等<BR>11、NAME<BR>挂载点和文件的全路径(链接会被解析为实际路径),或者连接双方的地址和端口、状态等<BR>二、参数<BR>1、不带额外参数运行<BR>lsof path/filename<BR>显示已打开该目录或文件的所有进程信息<BR>lsof `which httpd`<BR>显示指定命令的信息<BR>2、参见参数<BR>-c w 显示以w开头命令的已打开文件的信息<BR>lsof -c sshd<BR>-p PID 显示指定PID已打开文件的信息<BR>lsof -p 4401<BR>+d dir 依照文件夹dir来搜寻,但不会打开子目录<BR>lsof +d /root<BR>+D dir 打开dir文件夹以及其子目录搜寻<BR>lsof +D /root/<BR>-d s 以FD列的信息进行匹配,可使用3-10,表示范围,3,10表示某些值<BR>lsof -d 3-10<BR>-u 显示某用户的已经打开的文件(或该用户执行程序已经打开的文件)<BR>lsof -u root<BR>lsof -u 0<BR>◎可配合正规表达式使用<BR>表示不包括root用户的信息:<BR>lsof -u ^root<BR>-i 监听指定的协议、端口、主机等的网络信息,格式为:<BR>引用<BR>[@host|addr][:svc_list|port_list]<BR>例如:<BR>lsof -i&nbsp;&nbsp; &lt;!-- var prefix = 'ma' + 'il' + 'to'; var path = 'hr' + 'ef' + '='; var addy67108 = 'tcp' + '@'; addy67108 = addy67108 + '192' + '.' + '168' + '.' + '228' + '.' + '244'; var addy_text67108 = 'tcp' + '@' + '192' + '.' + '168' + '.' + '228' + '.' + '244'; document.write( '&lt;a ' + path + '\'' + prefix + ':' + addy67108 + '\'&gt;' ); document.write( addy_text67108 ); document.write( '&lt;\/a&gt;' ); //--&gt;\n tcp@192.168.228.244 &lt;!-- document.write( '&lt;span style=\'display: none;\'&gt;' ); //--&gt; 为防备电子邮件地址收集器,这个 E-mail 地址被隐藏,你的浏览器必须支持 Javascript. 才可看到这个邮件地址&nbsp;&nbsp;&lt;!-- document.write( '&lt;/' ); document.write( 'span&gt;' ); //--&gt; <BR>lsof -i:22<BR>还可以使用一些参数控制显示结果:<BR>引用<BR>-l 禁止将userID转换为登陆名称,即显示UID<BR>-n 禁止将IP地址转换为hostname主机文件<BR>-P 不显示端口名称<BR>-g s 从PGID列进行匹配<BR>lsof -g 3-10<BR><BR>3、其他参数<BR>+f 所有路径参数都必须是文件系统,否则不能执行<BR>-f 所有路径参数都将作为普通的文件,例如:"-f -- /"中的/,只会匹配单个/路径,而不会是根目录中的所有文件<BR>+f和-f后都应加上“--”表终结符:<BR>lsof -f -- /<BR>+L/-L 打开或关闭文件的连结数计算,当+L没有指定时,所有的连结数都会显示(默认);若+L后指定数字,则只要连结数小于该数字的信息会显示;连结数会显示在NLINK列。<BR>例如:+L1将显示没有unlinked的文件信息;+aL1,则显示指定文件系统所有unlinked的文件信息<BR>-L 默认参数,其后不能跟数字,将不显示连结数信息<BR>lsof +L1<BR>-t 仅打印进程,方便shell脚本调用<BR>lsof -t -c sshd<BR>-F 指定输出那个列,可通过lsof -F?查看<BR>-r 不断执行lsof命令,默认每15秒间隔执行一次<BR>+r 也是不断执行lsof命令,但直到没有接受到文件信息,则停止
页: [1]
查看完整版本: lsof列举系统中已经被打开的文件