lsof命令

1. 简介

lsof(list open file)用于列出打开指定文件的进程,或进程打开的文件。 Linux下一切皆文件,这里的文件可以是:

  • 普通文件或目录,符号链接
  • 网络文件系统的文件,网络文件(NFS、Socket、unix域名Socket)
  • 字符或块设备
  • 共享库
  • 管道,命名管道
Option 描述 例子
-a 打开指定文件的进程 lsof -a logs/*.log
-p <进程号> 列出指定进程号所打开的文件 lsof -p 68661
-c <进程名> 列出进程名对应进程所打开的文件 lsof -c mysql
-g 列出GID号进程详情,线上进程组号 lsof -g
+d <目录> 列出目录下被打开的文件 lsof +d logs/
+D <目录> 递归列出目录下被打开的文件 lsof +D logs/
-i <条件> 列出符合条件的进程。(4、6、协议、:端口、 @ip ) lsof -i 4
lsof -i 6
lsof -i TCP
lsof -i :8080
lsof -i @192.168.36.92
-u 列出UID号进程详情 先根据id获取用户对应的uid
lsof -u 1005
-h 显示帮助信息
-v 显示版本信息
-d <文件号> 列出占用该文件号的进程 lsof -d
-n <目录> 列出使用NFS的文件
2. 实例
2.1 列出打开指定文件的进程
lsof -a logs/*

COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF        NODE NAME
java    68661 tomcat    1w   REG    8,4  4163932 12896179966 logs/catalina.out
java    68661 tomcat    2w   REG    8,4  4163932 12896179966 logs/catalina.out
java    68661 tomcat    9w   REG    8,4   124952 12958543250 logs/catalina.2020-05-08.log
java    68661 tomcat   10w   REG    8,4     1588 12899674820 logs/localhost.2020-05-08.log
java    68661 tomcat   11w   REG    8,4        0 12960986910 logs/manager.2020-05-08.log
java    68661 tomcat   12w   REG    8,4        0 12962162467 logs/host-manager.2020-05-08.log
java    68661 tomcat   53w   REG    8,4  9481508 13008365317 logs/localhost_access_log.2020-05-08.txt
2.2 列出指定用户(排除指定用户)打开的文件
lsof -u tomcat
lsof -u ^root  # 排除root,其他用户打开的文件
2.3 列出特定命令打开的文件
lsof -c mysql
2.4 列出指定PID打开的文件
lsof -p 137910
lsof -p 1,2,3  # 多个PID
lsof -p ^1     # 排除PID
2.5 列出所有的网络连接
lsof -i | head -10

COMMAND      PID   USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
java       19672 tomcat   47u  IPv4 2627111864      0t0  TCP *:58089 (LISTEN)
java       19672 tomcat   52u  IPv4 2627111868      0t0  TCP *:58019 (LISTEN)
java       19672 tomcat   60u  IPv4 2654162170      0t0  TCP qaserver1:18086->192.168.156.129:63085 (ESTABLISHED)
java       19672 tomcat   61u  IPv4 2627111876      0t0  TCP localhost:8109 (LISTEN)
java       19956 tomcat   46u  IPv4 1392272368      0t0  TCP *:17080 (LISTEN)
java       19956 tomcat   47u  IPv4 1392272369      0t0  TCP *:17009 (LISTEN)
java       19956 tomcat   48u  IPv4 2714881397      0t0  TCP qaserver1:63540->qaserver1:mysql (ESTABLISHED)
java       19956 tomcat   86u  IPv4 1392300038      0t0  TCP localhost:17005 (LISTEN)
java       25629 tomcat   46u  IPv4 1392295271      0t0  TCP *:48080 (LISTEN)
2.6 列出所有的TCP连接
lsof -i tcp 
2.7 列出所有连接指定端口的进程
lsof -i :8080
2.8 列出特定用户打开的所有网络端口
lsof -a -u tomcat -i 
2.9 进程ID:1234打开的所有IPv4连接
lsof -i 4 -a -p 1234
2.10 qaserver1上3306、80端口打开的进程,每隔3s重新执行
lsof -i @qaserver1:3306,80 -r 3
3. 字段说明
[root@localhost /data/apollo]#lsof | more

COMMAND     PID   TID       USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd       1             root  cwd       DIR              253,0      4096        128 /
systemd       1             root  rtd       DIR              253,0      4096        128 /
systemd       1             root  txt       REG              253,0   1523624   25890731 /usr/lib/systemd/systemd
systemd       1             root  mem       REG              253,0     20032   18349978 /usr/lib64/libuuid.so.1.3.0
systemd       1             root  mem       REG              253,0    252696   16979944 /usr/lib64/libblkid.so.1.1.0
systemd       1             root  mem       REG              253,0     90664   16850728 /usr/lib64/libz.so.1.2.7
systemd       1             root  mem       REG              253,0    153192   17282020 /usr/lib64/liblzma.so.5.0.99
systemd       1             root  mem       REG              253,0     19888   16850823 /usr/lib64/libattr.so.1.1.0
systemd       1             root  mem       REG              253,0     19776   16991745 /usr/lib64/libdl-2.17.so
systemd       1             root  mem       REG              253,0    402384   16829280 /usr/lib64/libpcre.so.1.2.0
systemd       1             root  mem       REG              253,0   2127336   16991739 /usr/lib64/libc-2.17.so

输出参数说明
---------------------------------------------------------------------------
COMMAND :进程的名称
PID     :进程标识符
PPID    :父进程标识符(需要指定-R参数)
USER    :进程所有者
PGID    :进程所属组
FD      :文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
         (1)cwd:表示current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改
         (2)txt :该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序
         (3)lnn:library references (AIX);
         (4)er:FD information error (see NAME column);
         (5)jld:jail directory (FreeBSD);
         (6)ltx:shared library text (code and data);
         (7)mxx :hex memory-mapped type number xx.
         (8)m86:DOS Merge mapped file;
         (9)mem:memory-mapped file;
         (10)mmap:memory-mapped device;
         (11)pd:parent directory;
         (12)rtd:root directory;
         (13)tr:kernel trace file (OpenBSD);
         (14)v86  VP/ix mapped file;
         (15)0:表示标准输出
         (16)1:表示标准输入
         (17)2:表示标准错误
                  一般在标准输出、标准错误、标准输入后还跟着文件状态模式:r、w、u等
                    (1)u:表示该文件被打开并处于读取/写入模式
                    (2)r:表示该文件被打开并处于只读模式
                    (3)w:表示该文件被打开并处于
                    (4)空格:表示该文件的状态模式为unknow,且没有锁定
                    (5)-:表示该文件的状态模式为unknow,且被锁定
                  时在文件状态模式后面,还跟着相关的锁
                    (1)N:for a Solaris NFS lock of unknown type;
                    (2)r:for read lock on part of the file;
                    (3)R:for a read lock on the entire file;
                    (4)w:for a write lock on part of the file;(文件的部分写锁)
                    (5)W:for a write lock on the entire file;(整个文件的写锁)
                    (6)u:for a read and write lock of any length;
                    (7)U:for a lock of unknown type;
                    (8)x:for an SCO OpenServer Xenix lock on part      of the file;
                    (9)X:for an SCO OpenServer Xenix lock on the      entire file;
                    (10)space:if there is no lock.
TYPE    :文件类型,如DIR、REG等,常见的文件类型
         (1)DIR:表示目录
         (2)CHR:表示字符类型
         (3)BLK:块设备类型
         (4)UNIX: UNIX 域套接字
         (5)FIFO先进先出 (FIFO) 队列
         (6)IPv4:网际协议 (IP) 套接字
DEVICE  :指定磁盘的名称
SIZE    :文件的大小
NODE    :索引节点(文件在磁盘上的标识)
NAME    :打开文件的确切名称

你可能感兴趣的:(探究bash,开发语言)