11.1 lsof:查看进程打开的文件
11.1.1 命令详解
【命令星级】 ★★★★★
【功能说明】
lsof全名为list open files,也就是列举系统中已经被打开的文件,通过lsof命令,就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。
【语法格式】
lsof [option]
lsof [选项]
**说明:**在lsof命令及后面的选项里,每个元素之间都至少要有一个空格。
【选项说明】
表11-1针对该命令的参数选项进行了说明。
表11-1 lsof命令的参数选项及说明
11.1.2 使用范例
**范例11-1:**显示使用文件的进程。
[root@centos7 ~]# lsof /var/log/messages
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
abrt-watc 928 root 4r REG 8,3 407602 16881451 /var/log/messages
rsyslogd 1390 root 7w REG 8,3 407602 16881451 /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:文件名称。
**范例11-2:**显示指定进程所打开的文件。
[root@centos7 ~]# lsof -c rsyslog #使用-c选项显示指定进程所打开的文件。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsyslogd 1390 root cwd DIR 8,3 224 64 /
rsyslogd 1390 root rtd DIR 8,3 224 64 /
rsyslogd 1390 root txt REG 8,3 664024 3521 /usr/sbin/rsyslogd
rsyslogd 1390 root mem REG 0,20 6373376 9224 /run/log/journal/718bcb547ced43efa48829fbb5b967ea/system.journal
rsyslogd 1390 root mem REG 8,3 402384 88056 /usr/lib64/libpcre.so.1.2.0
rsyslogd 1390 root mem REG 8,3 19384 117115 /usr/lib64/libgpg-error.so.0.10.0
rsyslogd 1390 root mem REG 8,3 535064 117118 /usr/lib64/libgcrypt.so.11.8.2
rsyslogd 1390 root mem REG 8,3 85968 172639 /usr/lib64/liblz4.so.1.7.5
rsyslogd 1390 root mem REG 8,3 155744 117058 /usr/lib64/libselinux.so.1
rsyslogd 1390 root mem REG 8,3 203688 14100 /usr/lib64/libsystemd.so.0.6.0
rsyslogd 1390 root mem REG 8,3 25024 34856463 /usr/lib64/rsyslog/imjournal.so
rsyslogd 1390 root mem REG 8,3 38048 34856471 /usr/lib64/rsyslog/imuxsock.so
rsyslogd 1390 root mem REG 8,3 68192 117078 /usr/lib64/libbz2.so.1.0.6
rsyslogd 1390 root mem REG 8,3 157424 117069 /usr/lib64/liblzma.so.5.2.2
rsyslogd 1390 root mem REG 8,3 99952 117072 /usr/lib64/libelf-0.176.so
rsyslogd 1390 root mem REG 8,3 19896 124712 /usr/lib64/libattr.so.1.1.0
rsyslogd 1390 root mem REG 8,3 338672 737373 /usr/lib64/libdw-0.176.so
rsyslogd 1390 root mem REG 8,3 1136944 73075 /usr/lib64/libm-2.17.so
rsyslogd 1390 root mem REG 8,3 20048 124716 /usr/lib64/libcap.so.2.22
rsyslogd 1390 root mem REG 8,3 86464 14084 /usr/lib64/libnss_myhostname.so.2
rsyslogd 1390 root mem REG 8,3 109976 84231 /usr/lib64/libresolv-2.17.so
rsyslogd 1390 root mem REG 8,3 31344 73083 /usr/lib64/libnss_dns-2.17.so
rsyslogd 1390 root mem REG 8,3 61560 73085 /usr/lib64/libnss_files-2.17.so
rsyslogd 1390 root mem REG 8,3 24432 33575387 /usr/lib64/rsyslog/lmnet.so
rsyslogd 1390 root mem REG 8,3 2156240 73067 /usr/lib64/libc-2.17.so
rsyslogd 1390 root mem REG 8,3 88776 84 /usr/lib64/libgcc_s-4.8.5-20150702.so.1
rsyslogd 1390 root mem REG 8,3 20064 117089 /usr/lib64/libuuid.so.1.3.0
rsyslogd 1390 root mem REG 8,3 40896 718789 /usr/lib64/libfastjson.so.4.0.0
rsyslogd 1390 root mem REG 8,3 15424 718800 /usr/lib64/libestr.so.0.0.0
rsyslogd 1390 root mem REG 8,3 43712 84233 /usr/lib64/librt-2.17.so
rsyslogd 1390 root mem REG 8,3 19248 73073 /usr/lib64/libdl-2.17.so
rsyslogd 1390 root mem REG 8,3 142144 84229 /usr/lib64/libpthread-2.17.so
rsyslogd 1390 root mem REG 8,3 90248 117061 /usr/lib64/libz.so.1.2.7
rsyslogd 1390 root mem REG 8,3 163312 73060 /usr/lib64/ld-2.17.so
rsyslogd 1390 root 0r CHR 1,3 0t0 6513 /dev/null
rsyslogd 1390 root 1w CHR 1,3 0t0 6513 /dev/null
rsyslogd 1390 root 2w CHR 1,3 0t0 6513 /dev/null
rsyslogd 1390 root 3r a_inode 0,10 0 6509 inotify
rsyslogd 1390 root 4u unix 0xffff8e1679a3ee80 0t0 22659 socket
rsyslogd 1390 root 5r REG 0,20 6373376 9224 /run/log/journal/718bcb547ced43efa48829fbb5b967ea/system.journal
rsyslogd 1390 root 6w REG 8,3 11331 16881448 /var/log/cron
rsyslogd 1390 root 7w REG 8,3 407668 16881451 /var/log/messages
rsyslogd 1390 root 8w REG 8,3 6281 16881452 /var/log/secure
rsyslogd 1390 root 9w REG 8,3 4058 16881449 /var/log/maillog
**范例11-3:**显示指定进程号所打开的文件。
[root@centos7 ~]# lsof -p 1390 #使用-p选项显示指定进程号所打开的文件。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsyslogd 1390 root cwd DIR 8,3 224 64 /
rsyslogd 1390 root rtd DIR 8,3 224 64 /
rsyslogd 1390 root txt REG 8,3 664024 3521 /usr/sbin/rsyslogd
rsyslogd 1390 root mem REG 0,20 6373376 9224 /run/log/journal/718bcb547ced43efa48829fbb5b967ea/system.journal
rsyslogd 1390 root mem REG 8,3 402384 88056 /usr/lib64/libpcre.so.1.2.0
rsyslogd 1390 root mem REG 8,3 19384 117115 /usr/lib64/libgpg-error.so.0.10.0
rsyslogd 1390 root mem REG 8,3 535064 117118 /usr/lib64/libgcrypt.so.11.8.2
rsyslogd 1390 root mem REG 8,3 85968 172639 /usr/lib64/liblz4.so.1.7.5
rsyslogd 1390 root mem REG 8,3 155744 117058 /usr/lib64/libselinux.so.1
rsyslogd 1390 root mem REG 8,3 203688 14100 /usr/lib64/libsystemd.so.0.6.0
rsyslogd 1390 root mem REG 8,3 25024 34856463 /usr/lib64/rsyslog/imjournal.so
rsyslogd 1390 root mem REG 8,3 38048 34856471 /usr/lib64/rsyslog/imuxsock.so
rsyslogd 1390 root mem REG 8,3 68192 117078 /usr/lib64/libbz2.so.1.0.6
rsyslogd 1390 root mem REG 8,3 157424 117069 /usr/lib64/liblzma.so.5.2.2
rsyslogd 1390 root mem REG 8,3 99952 117072 /usr/lib64/libelf-0.176.so
rsyslogd 1390 root mem REG 8,3 19896 124712 /usr/lib64/libattr.so.1.1.0
rsyslogd 1390 root mem REG 8,3 338672 737373 /usr/lib64/libdw-0.176.so
rsyslogd 1390 root mem REG 8,3 1136944 73075 /usr/lib64/libm-2.17.so
rsyslogd 1390 root mem REG 8,3 20048 124716 /usr/lib64/libcap.so.2.22
rsyslogd 1390 root mem REG 8,3 86464 14084 /usr/lib64/libnss_myhostname.so.2
rsyslogd 1390 root mem REG 8,3 109976 84231 /usr/lib64/libresolv-2.17.so
rsyslogd 1390 root mem REG 8,3 31344 73083 /usr/lib64/libnss_dns-2.17.so
rsyslogd 1390 root mem REG 8,3 61560 73085 /usr/lib64/libnss_files-2.17.so
rsyslogd 1390 root mem REG 8,3 24432 33575387 /usr/lib64/rsyslog/lmnet.so
rsyslogd 1390 root mem REG 8,3 2156240 73067 /usr/lib64/libc-2.17.so
rsyslogd 1390 root mem REG 8,3 88776 84 /usr/lib64/libgcc_s-4.8.5-20150702.so.1
rsyslogd 1390 root mem REG 8,3 20064 117089 /usr/lib64/libuuid.so.1.3.0
rsyslogd 1390 root mem REG 8,3 40896 718789 /usr/lib64/libfastjson.so.4.0.0
rsyslogd 1390 root mem REG 8,3 15424 718800 /usr/lib64/libestr.so.0.0.0
rsyslogd 1390 root mem REG 8,3 43712 84233 /usr/lib64/librt-2.17.so
rsyslogd 1390 root mem REG 8,3 19248 73073 /usr/lib64/libdl-2.17.so
rsyslogd 1390 root mem REG 8,3 142144 84229 /usr/lib64/libpthread-2.17.so
rsyslogd 1390 root mem REG 8,3 90248 117061 /usr/lib64/libz.so.1.2.7
rsyslogd 1390 root mem REG 8,3 163312 73060 /usr/lib64/ld-2.17.so
rsyslogd 1390 root 0r CHR 1,3 0t0 6513 /dev/null
rsyslogd 1390 root 1w CHR 1,3 0t0 6513 /dev/null
rsyslogd 1390 root 2w CHR 1,3 0t0 6513 /dev/null
rsyslogd 1390 root 3r a_inode 0,10 0 6509 inotify
rsyslogd 1390 root 4u unix 0xffff8e1679a3ee80 0t0 22659 socket
rsyslogd 1390 root 5r REG 0,20 6373376 9224 /run/log/journal/718bcb547ced43efa48829fbb5b967ea/system.journal
rsyslogd 1390 root 6w REG 8,3 11331 16881448 /var/log/cron
rsyslogd 1390 root 7w REG 8,3 407668 16881451 /var/log/messages
rsyslogd 1390 root 8w REG 8,3 6281 16881452 /var/log/secure
rsyslogd 1390 root 9w REG 8,3 4058 16881449 /var/log/maillog
**范例11-4:**监听指定的协议、端口和主机等信息,显示符合条件的进程信息。
在讲解范例之前,我们先来看看相应的语法格式:
lsof -i [46] [protocol] [@hostname] [:service|port]
其中各项的含义如下:
- 46:4代表IPv4,6代表IPv6。
- protocol:传输协议,可以是TCP或UDP。
- hostname:主机名称或者IP地址。
- service:进程的服务名,例如NFS、SSH和FTP等。
- port:系统中与服务对应的端口号。例如HTTP服务默认对应的端口号为80,SSH服务默认对应的端口号为22。
了解了语法格式之后,再来看看范例的解答。
[root@centos7 ~]# lsof -i #查看所有进程。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1389 root 3u IPv4 22479 0t0 TCP *:ssh (LISTEN)
sshd 1389 root 4u IPv6 22488 0t0 TCP *:ssh (LISTEN)
master 1483 root 13u IPv4 23037 0t0 TCP localhost:smtp (LISTEN)
master 1483 root 14u IPv6 23038 0t0 TCP localhost:smtp (LISTEN)
sshd 1632 root 3u IPv4 23267 0t0 TCP centos7:ssh->10.0.0.1:50515 (ESTABLISHED)
sshd 2538 root 3u IPv4 52664 0t0 TCP centos7:ssh->10.0.0.1:58912 (ESTABLISHED)
[root@centos7 ~]# lsof -i tcp #显示所有TCP网络连接的进程信息。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1389 root 3u IPv4 22479 0t0 TCP *:ssh (LISTEN)
sshd 1389 root 4u IPv6 22488 0t0 TCP *:ssh (LISTEN)
master 1483 root 13u IPv4 23037 0t0 TCP localhost:smtp (LISTEN)
master 1483 root 14u IPv6 23038 0t0 TCP localhost:smtp (LISTEN)
sshd 1632 root 3u IPv4 23267 0t0 TCP centos7:ssh->10.0.0.1:50515 (ESTABLISHED)
sshd 2538 root 3u IPv4 52664 0t0 TCP centos7:ssh->10.0.0.1:58912 (ESTABLISHED)
[root@centos7 ~]# lsof -i :22 #显示端口为22的进程,这条命令很常用。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1389 root 3u IPv4 22479 0t0 TCP *:ssh (LISTEN)
sshd 1389 root 4u IPv6 22488 0t0 TCP *:ssh (LISTEN)
sshd 1632 root 3u IPv4 23267 0t0 TCP centos7:ssh->10.0.0.1:50515 (ESTABLISHED)
sshd 2538 root 3u IPv4 52664 0t0 TCP centos7:ssh->10.0.0.1:58912 (ESTABLISHED)
[root@centos7 ~]# lsof -i tcp:22 #心事同时满足TCP和端口号为22的进程。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1389 root 3u IPv4 22479 0t0 TCP *:ssh (LISTEN)
sshd 1389 root 4u IPv6 22488 0t0 TCP *:ssh (LISTEN)
sshd 1632 root 3u IPv4 23267 0t0 TCP centos7:ssh->10.0.0.1:50515 (ESTABLISHED)
sshd 2538 root 3u IPv4 52664 0t0 TCP centos7:ssh->10.0.0.1:58912 (ESTABLISHED)
**范例11-5:**显示指定用户使用的文件。
[root@centos7 ~]# lsof -u root #使用-u选项显示root用户使用的文件。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 8,3 224 64 /
systemd 1 root rtd DIR 8,3 224 64 /
systemd 1 root txt REG 8,3 1628608 16936312 /usr/lib/systemd/systemd
systemd 1 root mem REG 8,3 20064 117089 /usr/lib64/libuuid.so.1.3.0
systemd 1 root mem REG 8,3 265576 663557 /usr/lib64/libblkid.so.1.1.0
systemd 1 root mem REG 8,3 90248 117061 /usr/lib64/libz.so.1.2.7
systemd 1 root mem REG 8,3 157424 117069 /usr/lib64/liblzma.so.5.2.2
systemd 1 root mem REG 8,3 23968 134486 /usr/lib64/libcap-ng.so.0.0.0
systemd 1 root mem REG 8,3 19896 124712 /usr/lib64/libattr.so.1.1.0
...
lsof 2808 root mem REG 8,3 155744 117058 /usr/lib64/libselinux.so.1
lsof 2808 root mem REG 8,3 163312 73060 /usr/lib64/ld-2.17.so
lsof 2808 root 4r FIFO 0,9 0t0 68365 pipe
lsof 2808 root 7w FIFO 0,9 0t0 68366 pipe
**范例11-6:**显示所有socket文件。
[root@centos7 ~]# lsof -U #使用-U选项显示所有socket文件。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root 12u unix 0xffff8e167b5c5940 0t0 13269 /run/systemd/private
systemd 1 root 15u unix 0xffff8e1679622ec0 0t0 19830 /run/systemd/journal/stdout
systemd 1 root 16u unix 0xffff8e1679a3e600 0t0 22153 /run/systemd/journal/stdout
systemd 1 root 21u unix 0xffff8e167b5c5500 0t0 13398 /run/udev/control
systemd 1 root 22u unix 0xffff8e167b5c1dc0 0t0 13408 /run/systemd/shutdownd
systemd 1 root 23u unix 0xffff8e167b5c0440 0t0 8965 /run/systemd/notify
systemd 1 root 24u unix 0xffff8e167b5c0880 0t0 8967 /run/systemd/cgroups-agent
systemd 1 root 28u unix 0xffff8e167b5c1100 0t0 8975 /run/systemd/journal/stdout
systemd 1 root 29u unix 0xffff8e167b5c1540 0t0 8978 /run/systemd/journal/socket
systemd 1 root 30u unix 0xffff8e167b5c1980 0t0 8980 /dev/log
systemd 1 root 32u unix 0xffff8e1679a39dc0 0t0 13896 socket
systemd 1 root 33u unix 0xffff8e1679a38880 0t0 14155 /run/systemd/journal/stdout
systemd 1 root 35u unix 0xffff8e1679a3c400 0t0 18390 /run/dbus/system_bus_socket
systemd 1 root 36u unix 0xffff8e1679a3fb40 0t0 18810 socket
systemd 1 root 37u unix 0xffff8e1679a3c840 0t0 18440 /run/systemd/journal/stdout
...
sshd 2538 root 4u unix 0xffff8e16401cbfc0 0t0 52760 socket
pickup 2671 postfix 5u unix 0xffff8e1679624400 0t0 23043 socket
pickup 2671 postfix 6u unix 0xffff8e1679a38440 0t0 23041 public/pickup
pickup 2671 postfix 7u unix 0xffff8e16401c8cc0 0t0 60578 socket
11.2 uptime:显示系统的运行时间及负载
11.2.1 命令详解
【命令星级】 ★★★☆☆
【功能说明】
uptime命令可以输出当前系统时间、系统开机到现在的运行世界、目前有多少用户在线和系统平均负载等信息。
【语法格式】
uptime
**说明:**直接执行uptime命令即可。
11.2.2 使用范例
**范例11-7:**显示系统的运行时间及负载信息。
[root@centos7 ~]# uptime
19:52:31 up 6:04, 2 users, load average: 0.00, 0.01, 0.05
系统时间 运行时长 登录用户数 平均负载 1min 5min 15min
uptime命令可以从下面2个文件中读取信息。
从/var/run/uptime中读取用户登录信息。
从/proc中读取进程信息。