1. lsof简介
lsof是遵从Unix哲学的典范,它只做一件事情,并且做的相当完美。以列出某个进程打开的所有文件信息。打开的文件可能是普通的文件,目录,NFS文件,块文件,字符文件,共享库,常规管道,符号链接,Socket流,网络Socket,UNIX域Socket,以及其它。
2. lsof语法
常用参数解释:
lsof filename 显示打开指定文件的所有进程
lsof -a 表示两个参数都必须满足时才显示结果
lsof -c string 显示COMMAND列中包含指定字符的进程所有打开的文件
lsof -u username 显示所属user进程打开的文件,逗号分隔指定多个用户
lsof -g gid 显示归属gid的进程情况
lsof +d /DIR/ 显示目录下被进程打开的文件
lsof +D /DIR/ 同上,但是会搜索目录下的所有目录,时间相对较长
lsof -d FD 显示指定文件描述符的进程
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
lsof -L, 作用: 列出打开文件的连接数
lsof -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中的 servicename (可以不只一个)
port –> 端口号 (可以不只一个)
3. 组合用法
[oracle@xml-ora1~]$ lsof -u oracle -cmysql
由用户oracle打开的进程的文件,或者由mysql进程打开的文件。注意这里是或者
[oracle@xml-ora1 ~]$ lsof -a -u oracle -c mysql
由用户oracle打开的进程的文件同时又是有进程mysql打开的文件。这里是并且的关系。
3.1 输出信息及各字段含义
- lsof | head -n 10
COMMAND PID USER FD TYPE DEVICE SIZE/OFF 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 150352 2345458 /sbin/init - lsof输出各列信息的意义如下:
lsof输出各列信息的意义如下:
COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
TYPE:文件类型,如DIR、REG等
-
Type文件类型:
文件和目录分别称为 REG 和 DIR。
CHR 和 BLK,分别表示字符和块设备。
UNIX、FIFO 和 IPv4,分别表示 UNIX 域套接字、先进先出(FIFO) 队列和网际协议 (IP) 套接字。
DEVICE:指定磁盘的名称
SIZE:文件的大小,单位byte
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
3.2 查找打开某个文件的应用程序
- lsof /app/oracle/product/10.2/db_1/network/log/listener.log
3.3 查看22端口运行的情况
- lsof -i:22
3.4 查看所属root用户进程所打开的文件类型为txt的文件
- lsof -a -u root -d txt