Linux 系统管理命令 - lsof - 查看进程打开的文件

命令详解

重要星级:

        ★★★★★

功能说明:

         全名为 list open files,也就是列举系统中已经被打开的文件,通过 lsof 命令,就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。

语法格式:

    lsof [option]
    lsof [选项]

说明:

        在 lsof 命令及后面的选项里,每个元素之间都至少要有一个空格。

选项说明:

-c <进程名>: 显示指定的进程名所打开的文件

-p <进程号>: 显示指定的进程号所打开的文件

-i :通过监听指定的协议、端口和主机等信息,显示符合条件的进程信息

-u:显示指定用户使用的文件

-U:显示所有 socket 文件 

使用范例:

显示使用文件的进程 ( lsof 文件名 ):

[root@localhost :~]# lsof /var/log/messages
COMMAND PID USER FD TYPE DEVICE SIZE
/OFF NODE NAME rsyslogd 1034 root 6w REG 253,0 170555 53630778 /var/log/messages

        如果想知道某个特定的文件是由哪个进程在使用,就可以通过   lsof 文件名  的方式来得到。从上面的输出可以得知,/var/log/messages 文件是由 rsyslogd进程在使用。

输出中每列的含义具体如下:

command :命令,进程的名称

pid :进程号

user :进程的所有者

fd :
    0 :标准输出。
    1 :标准输入。
    2 :标准错误。
    u :该文件被打开并处于 "读取/写入" 模式。
    r :该文件被打开并处于 "只读" 模式。
    w :该文件被打开并处于 "写入" 模式。

type :文件类型,REG (regular) 为普通文件。

device :指定磁盘的名称。

size/off :文件的大小

node :索引节点

name :文件名称

 显示指定进程所打开的文件 ( lsof -c rsyslog ):

[root@localhost :~]# lsof -c rsyslog

COMMAND   PID USER   FD      TYPE             DEVICE SIZE/OFF     NODE NAME
rsyslogd 1030 root  cwd       DIR              253,0      224       64 /
rsyslogd 1030 root  rtd       DIR              253,0      224       64 /
rsyslogd 1030 root  txt       REG              253,0   663960   201811 /usr/sbin/rsyslogd

显示指定进程号所打开的文件 ( lsof -p 1030 ):

[root@localhost :~]# lsof -p 1030

COMMAND   PID USER   FD      TYPE             DEVICE SIZE/OFF     NODE NAME
rsyslogd 1030 root  cwd       DIR              253,0      224       64 /
rsyslogd 1030 root  rtd       DIR              253,0      224       64 /
rsyslogd 1030 root  txt       REG              253,0   663960   201811 /usr/sbin/rsyslogd

监听指定的协议、端口和主机等信息,显示符合条件的进程信息:

        语法格式:   lsof -i [4,6] [protocol] [@hostname] [:service|port]  

        含义如下:

4, 6 :4代表 IPv4,6代表 IPv6。

protocol :传输协议,可以是 TCP 或 UDP。

hostname :主机名称或者 IP 地址。

service :进程的服务名,例如 NFS、SSH 或 FTP 等。

port :系统中与服务对应的端口号。例如 HTTP 服务默认对应的端口号为80,SSH 服务默认对应的端口号为22。

        使用范例:

[root@localhost :~]# lsof -i               # 查看所有进程
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
chronyd   667 chrony    1u  IPv4  17205      0t0  UDP localhost:323 
chronyd   667 chrony    2u  IPv6  17206      0t0  UDP localhost:323 
dhclient  836   root    6u  IPv4  19452      0t0  UDP *:bootpc 
sshd     1029   root    3u  IPv4  19989      0t0  TCP *:ssh (LISTEN)
sshd     1029   root    4u  IPv6  19991      0t0  TCP *:ssh (LISTEN)
master   1205   root   13u  IPv4  20341      0t0  TCP localhost:smtp (LISTEN)
master   1205   root   14u  IPv6  20342      0t0  TCP localhost:smtp (LISTEN)
sshd     1314   root    3u  IPv4  21642      0t0  TCP localhost.localdomain:ssh->192.168.61.1:43834 (ESTABLISHED)


[root@localhost :~]# lsof -i tcp        # 显示所有 tcp 网络连接的进程信息
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1029 root    3u  IPv4  19989      0t0  TCP *:ssh (LISTEN)
sshd    1029 root    4u  IPv6  19991      0t0  TCP *:ssh (LISTEN)
master  1205 root   13u  IPv4  20341      0t0  TCP localhost:smtp (LISTEN)
master  1205 root   14u  IPv6  20342      0t0  TCP localhost:smtp (LISTEN)
sshd    1314 root    3u  IPv4  21642      0t0  TCP localhost.localdomain:ssh->192.168.61.1:43834 (ESTABLISHED)


[root@localhost :~]# lsof -i :22        # 显示端口为22的进程。(这条命令很常用!)
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1029 root    3u  IPv4  19989      0t0  TCP *:ssh (LISTEN)
sshd    1029 root    4u  IPv6  19991      0t0  TCP *:ssh (LISTEN)
sshd    1314 root    3u  IPv4  21642      0t0  TCP localhost.localdomain:ssh->192.168.61.1:43834 (ESTABLISHED)


[root@localhost :~]# lsof -i tcp:22     # 显示同时满足 TCP 和端口为22的进程。
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1029 root    3u  IPv4  19989      0t0  TCP *:ssh (LISTEN)
sshd    1029 root    4u  IPv6  19991      0t0  TCP *:ssh (LISTEN)
sshd    1314 root    3u  IPv4  21642      0t0  TCP localhost.localdomain:ssh->192.168.61.1:43834 (ESTABLISHED)

 显示指定用户使用的文件:

[root@localhost :~]# lsof -u root        # 使用 -u 选项显示 root 用户使用的文件

COMMAND    PID USER   FD      TYPE         DEVICE  SIZE/OFF       NODE NAME
systemd      1 root  cwd       DIR          253,0       224         64 /
systemd      1 root  rtd       DIR          253,0       224         64 /
systemd      1 root  txt       REG          253,0   1612144     510318 /usr/lib/systemd/systemd
systemd      1 root  mem       REG          253,0     20112      96164 /usr/lib64/libuuid.so.1.3.0
systemd      1 root  mem       REG          253,0    261488      96173 /usr/lib64/libblkid.so.1.1.0
systemd      1 root  mem       REG          253,0     90664      51273 /usr/lib64/libz.so.1.2.7
systemd      1 root  mem       REG          253,0    157424      96153 /usr/lib64/liblzma.so.5.2.2
systemd      1 root  mem       REG          253,0     23968      96253 /usr/lib64/libcap-ng.so.0.0.0
systemd      1 root  mem       REG          253,0     19896      78793 /usr/lib64/libattr.so.1.1.0
systemd      1 root  mem       REG          253,0     19776      49344 /usr/lib64/libdl-2.17.so
systemd      1 root  mem       REG          253,0    402384      78806 /usr/lib64/libpcre.so.1.2.0
systemd      1 root  mem       REG          253,0   2173512      49338 /usr/lib64/libc-2.17.so
systemd      1 root  mem       REG          253,0    144792      49364 /usr/lib64/libpthread-2.17.so
...

显示所有 socket 文件:

[root@localhost :~]# lsof -U         # 使用 -U 选项显示所有 socket 文件
COMMAND    PID    USER   FD   TYPE             DEVICE SIZE/OFF  NODE NAME
systemd      1    root   12u  unix 0xffff8a5835d74800      0t0 13622 /run/systemd/private
systemd      1    root   23u  unix 0xffff8a583668e800      0t0  9294 /run/systemd/notify
systemd      1    root   24u  unix 0xffff8a5835d75000      0t0 13644 /run/systemd/shutdownd
systemd      1    root   25u  unix 0xffff8a583668f000      0t0  9296 /run/systemd/cgroups-agent
systemd      1    root   26u  unix 0xffff8a5835d70800      0t0 13653 /run/lvm/lvmpolld.socket
systemd      1    root   28u  unix 0xffff8a583668e400      0t0  9311 /run/systemd/journal/stdout
systemd      1    root   29u  unix 0xffff8a583668ec00      0t0  9314 /run/systemd/journal/socket
systemd      1    root   30u  unix 0xffff8a5836218000      0t0  9316 /dev/log
systemd      1    root   31u  unix 0xffff8a5835d72000      0t0 13770 /run/lvm/lvmetad.socket
systemd      1    root   35u  unix 0xffff8a5835d73000      0t0 13837 /run/udev/control
systemd      1    root   36u  unix 0xffff8a5835d70c00      0t0 13853 socket
systemd      1    root   37u  unix 0xffff8a5835dab000      0t0 16819 /run/dbus/system_bus_socket
systemd      1    root   38u  unix 0xffff8a5836116800      0t0 14433 /run/systemd/journal/stdout
systemd      1    root   39u  unix 0xffff8a5836113800      0t0 14435 /run/systemd/journal/stdout
systemd      1    root   40u  unix 0xffff8a5835e31000      0t0 17026 socket
systemd      1    root   41u  unix 0xffff8a583809d000      0t0 18626 /run/systemd/journal/stdout
systemd      1    root   43u  unix 0xffff8a583668f400      0t0 16260 /run/systemd/journal/stdout

 

posted @ 2018-12-23 16:54  焦国峰的随笔日记  阅读(1076)  评论(0编辑  收藏  举报
// ############################### // ##############################