lsof
工具介绍<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
lsof
,它
对应于
“list open files”
(列出打开的文件)。
挺不错的一个工具,
通过查看打开的文件,了解更多关于系统的信息。了解应用程序打开了哪些文件或者哪个应用程序打开了特定的文件,作为系统管理员,这将使得您能够作出更好的决策。
lsof
(
lsof
的全称是
list open files
),此工具可以用来查看正在运行中的进程打开了哪些文件、目录和套接字;是系统监测工具之一。在服务器管理中,我们还是常用到这个工具的。
lsof
的示例输出
[root@localhost /]# lsof | more
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 27036 160856 /sbin/init
init 1 root mem REG 8,2 103044 160173 /lib/ld-2.3.2.so
init 1 root mem REG 8,2 1531064 176174 /lib/tls/libc-2.3.2.so
init 1 root 10u FIFO 8,2 71826 /dev/initctl
。。。。。。
每行显示一个打开的文件,除非另外指定,否则将显示所有进程打开的所有文件。
COMMAND
表示进程的名称
PID
进程标识符
(PID)
USER
所有者名称
Device
、
SIZE/OFF
、
Node
和
Name
列涉及到文件本身的信息
FD
和
Type
列的含义最为模糊,它们提供了关于文件如何使用的更多信息。
FD
FD
列表示文件描述符,应用程序通过文件描述符识别该文件
FD
有
三种不同的值。
cwd
值表示应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改。
txt
类型的文件是程序代码,如应用程序二进制文件本身或共享库,再比如本示例的列表中显示的
init
程序。最后,数值表示应用程序的文件描述符,这是打开该文件时返回的一个整数。
TYPE
Type
列提供了关于文件格式的更多描述
Type
列则比较直观。根据具体操作系统的不同,您会发现将文件和目录称为
REG
和
DIR
(在
Solaris
中,称为
VREG
和
VDIR
)。其他可能的取值为
CHR
和
BLK
,分别表示字符和块设备;或者
UNIX
、
FIFO
和
IPv4
,分别表示
UNIX
域套接字、先进先出
(FIFO)
队列和网际协议
(IP)
套接字。
DEVICE
表示指定磁盘的名称
SIZE
文件的大小
NODE
索引节点(文件在磁盘上的标识)
NAME
该文件的确切名称
|
/proc 目录
/proc
是一个目录,其中包含了反映内核和进程树的各种文件。这些文件和目录并不存在于磁盘中,因此当您对这些文件进行读取和写入时,实际上是在从操作系统本身获取相关信息。大多数与
lsof
相关的信息都存储于以进程的
PID
命名的目录中,所以
/proc/1234
中包含的是
PID
为
1234
的进程的信息。
在
/proc
目录的每个进程目录中存在着各种文件,它们可以使得应用程序简单地了解进程的内存空间、文件描述符列表、指向磁盘上的文件的符号链接和其他系统信息。
lsof
实用程序使用该信息和其他关于内核内部状态的信息来产生其输出。
Lsof用法列表:
1) lsof abc.txt
显示开启文件
abc.txt
的进程
2) lsof -i :22
知道
22
端口现在运行什么程序
3) lsof -c nsd
显示
nsd
进程现在打开的文件
4) lsof -g gid
显示归属
gid
的进程情况
5) lsof +d /usr/local/
显示
/usr/local
目录下被进程开启的文件
6) lsof +D /usr/local/
同上,但是会搜索目录下的目录,时间较长
7) lsof -d 4
显示使用
fd
为
4
的进程
8) lsof -i [i]
用以显示符合条件的进程情况
语法
: lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 --> IPv4 or IPv6
protocol --> TCP or UDP
hostname --> Internet host name
hostaddr --> IPv4
位置
service --> /etc/service
中的
service name (
可以不只一个
)
port -->
端口号
(
可以不只一个
)
例子
: TCP:25 - TCP and port 25
@1.2.3.4 - Internet IPv4 host address 1.2.3.4
[email]tcp@ohaha.ks.edu.tw[/email]:ftp - TCP protocol host:ohaha.ks.edu.tw service name:ftp
9) lsof -n
不将
IP
转换为
hostname
,缺省是不加上
-n
参数
例子
: lsof -i [email]tcp@ohaha.ks.edu.tw[/email]:ftp -n
10) lsof -p 12
看进程号为
12
的进程打开了哪些文件
11) lsof +|-r [t]
控制
lsof
不断重复执行,缺省是
15s
刷新
-r
,
lsof
会永远不断的执行,直到收到中断信号
+r
,
lsof
会一直执行,直到没有档案被显示
例子:不断查看目前
ftp
连接的情况:
lsof -i [email]tcp@ohaha.ks.edu.tw[/email]:ftp -r
12) lsof -s
列出打开文件的大小,如果没有大小,则留下空白
13) lsof -u username
以
UID
,列出打开的文件
-a
它表示当所有的参数都为真时,才显示这个文件
-p
它限制仅输出
PID
为多少的进程
常用的用法解释:
查看某个文件被哪些进程在读写
lsof
文件名
查看某个进程打开了哪些文件
lsof
–
c
进程名
lsof
–
p
进程号
Lsof 文件系统名称
查找打开,但是不能连接的文件
一个进程打开一个文件, 然后将其设为 unlinked 状态, 则此文件资源仍能被进程使用, 但是其访问路径已经被删除了. 因此, 使用ls不能将其列出. 只有当进程结束时, 才能释放文件占用的资源;查找unlinked 文件, 选项 +L,
列出打开文件的连接数
lsof +L
指定连接数的上限
$lsof +L1
同时指定文件系统, 则需要使用 -a(AND) 选项
lsof -a +L1 /home
查看谁令mount的分区无法卸载
lsof <file_system_name>
查看网络服务
lsof –i
查看某个网络连接
lsof [email]-i@aaa.bbb.ccc[/email]
lsof [email]-iTCP@aaa.bbb.ccc[/email]:ftp-data *指定协议*
lsof -i4 *指定IP版本*
lsof -i6
查找针对某个命令打开的文件
使用命令的PID
lsof -p <PID>
使用命令名称
lsof -c <first_characters_of_command_name_that_interest_you>
lsof -c sendmail
查看谁在使用设备文件
lsof /dev/hda6
查看某个用户的操作
lsof -u UID号
lsof -u 用户名
lsof -u ^用户名 ^取反的意思
转载于:https://blog.51cto.com/13233/82556