在Linux中lsof命令示例

losf含义是"列出打开的文件",用于找出哪些文件被哪个进程打开。我们都知道,Linux/Unix把一切看成文件(管道、套接字、目录、设备等)。使用lsof命令的其中一个原因是说文件正在被使用时不能卸载一个磁盘。在这个命令的帮助下,我们能够简单地识别哪些文件在用。

1、用lsof命令列出所有打开地文件

在以下示例中,它显示一个打开的文件的长列表,为了更好理解哪些显示如Command, PID, USER,FD, TYPE等的列,选取了其中一些打开文件。

[root@areadetector blctrl]# lsof
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.

COMMAND     PID   TID TASKCMD             USER   FD      TYPE             DEVICE    SIZE/OFF       NODE NAME
systemd       1                           root  cwd       DIR              253,0         224        128 /
systemd       1                           root  rtd       DIR              253,0         224        128 /
systemd       1                           root  txt       REG              253,0     1601320  805380087 /usr/lib/systemd/systemd
systemd       1                           root  mem       REG              253,0     1598808       1369 /usr/lib64/libm-2.28.so
systemd       1                           root  mem       REG              253,0      636712       5107 /usr/lib64/libudev.so.1.6.11
systemd       1                           root  mem       REG              253,0      735192       1426 /usr/lib64/libsepol.so.1
...
sssd       1550                           root    0r  a_inode               0,14           0      10650 inotify
sssd       1550                           root    1u     unix 0xffff8acfd1ec0d80         0t0      24315 type=STREAM
sssd       1550                           root    2u     unix 0xffff8acfd1ec0d80         0t0      24315 type=STREAM
sssd       1550                           root    3w      REG              253,0        2075  268710206 /var/log/sssd/sssd.log
sssd       1550                           root    4u  a_inode               0,14           0      10650 [eventpoll]
sssd       1550                           root    5r      REG              253,0     9253600     356601 /var/lib/sss/mc/passwd (deleted)

我们将更加准确地回顾FD和TYPE列。

FD:代表文件描述符并且可能见到以下某些值:

  • CWD:当前目录
  • rtd:根目录
  • txt:程序文本(代码和数据)
  • mem:内存映射文件

在FD列,像1u的数值是实际文件描述符并且后跟它的模式u,r,w,如:

  • r:对应读权限
  • w:对应写权限
  • u:对应读写权限

TYPE:文件的类型和它的标识符

  • DIR:目录
  • REG:常规文件
  • CHR:字符特殊文件
  • FIFO:先进先出

2、列出特定用户打开的文件

以下命令将显示用户blctrl的所有打开文件的列表。

[root@rockygu ~]# lsof -u blctrl
COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
caRepeate 37191 blctrl  cwd    DIR  253,1      257      128 /
caRepeate 37191 blctrl  rtd    DIR  253,1      257      128 /

3、查找运行在特定端口上的进程

要查找所有运行在特定端口上的Linux进程,只要使用带-i选项的以下命令。以下示例将列出所有端口22上的运行进程。

[root@areadetector blctrl]# lsof -i TCP:22
COMMAND   PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd     1813   root    5u  IPv4   32127      0t0  TCP *:ssh (LISTEN)
sshd     1813   root    7u  IPv6   32129      0t0  TCP *:ssh (LISTEN)
sshd    19240   root    5u  IPv4 1409034      0t0  TCP RockyLinux.blctrl.com:ssh->blctrl-KVM:58946 (ESTABLISHED)
sshd    19258 blctrl    5u  IPv4 1409034      0t0  TCP RockyLinux.blctrl.com:ssh->blctrl-KVM:58946 (ESTABLISHED)
sshd    82828   root    5u  IPv4 5346805      0t0  TCP RockyLinux.blctrl.com:ssh->LAPTOP-NE29DR6I:55206 (ESTABLISHED)
sshd    82832   root    5u  IPv4 5346846      0t0  TCP RockyLinux.blctrl.com:ssh->LAPTOP-NE29DR6I:55207 (ESTABLISHED)
sshd    82833 blctrl    5u  IPv4 5346805      0t0  TCP RockyLinux.blctrl.com:ssh->LAPTOP-NE29DR6I:55206 (ESTABLISHED)
sshd    82910 blctrl    5u  IPv4 5346846      0t0  TCP RockyLinux.blctrl.com:ssh->LAPTOP-NE29DR6I:55207 (ESTABLISHED)

4、只列出IPv4和IPv6打开文件

在以下示例中只显示用单独命令打开的IPv4和IPv6网络文件。

[root@areadetector blctrl]# lsof -i 4
COMMAND     PID    USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
systemd       1    root   41u  IPv4   25061      0t0  TCP *:sunrpc (LISTEN)
systemd       1    root   42u  IPv4   25062      0t0  UDP *:sunrpc
rpcbind    1520     rpc    4u  IPv4   25061      0t0  TCP *:sunrpc (LISTEN)
rpcbind    1520     rpc    5u  IPv4   25062      0t0  UDP *:sunrpc
avahi-dae  1570   avahi   15u  IPv4   41741      0t0  UDP *:mdns
avahi-dae  1570   avahi   17u  IPv4   41743      0t0  UDP *:35629
chronyd    1602  chrony    6u  IPv4   15883      0t0  UDP localhost:323
NetworkMa  1804    root   28u  IPv4   60220      0t0  UDP RockyLinux.blctrl.com:bootpc->RT-AC68U-9750:bootps
sshd       1813    root    5u  IPv4   32127      0t0  TCP *:ssh (LISTEN)
dnsmasq    2776 dnsmasq    3u  IPv4   66668      0t0  UDP *:bootps
dnsmasq    2776 dnsmasq    5u  IPv4   66671      0t0  UDP areadetector:domain
dnsmasq    2776 dnsmasq    6u  IPv4   66672      0t0  TCP areadetector:domain (LISTEN)
gnome-she  3321  blctrl   45u  IPv4 5474339      0t0  TCP RockyLinux.blctrl.com:60842->master1.openshift4.gnome.org:https (CLOSE_WAIT)
qemu-kvm   4799    qemu   13u  IPv4   88361      0t0  TCP localhost:rfb (LISTEN)
qemu-kvm   4877    qemu   13u  IPv4   42820      0t0  TCP localhost:5901 (LISTEN)
qemu-kvm   5011    qemu   29u  IPv4   30250      0t0  TCP localhost:5902 (LISTEN)
qemu-kvm   5083    qemu   12u  IPv4   30262      0t0  TCP localhost:5903 (LISTEN)

[root@areadetector blctrl]# lsof -i 6
COMMAND     PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
systemd       1   root   43u  IPv6   25063      0t0  TCP *:sunrpc (LISTEN)
systemd       1   root   44u  IPv6   25064      0t0  UDP *:sunrpc
rpcbind    1520    rpc    6u  IPv6   25063      0t0  TCP *:sunrpc (LISTEN)
rpcbind    1520    rpc    7u  IPv6   25064      0t0  UDP *:sunrpc
avahi-dae  1570  avahi   16u  IPv6   41742      0t0  UDP *:mdns
avahi-dae  1570  avahi   18u  IPv6   41744      0t0  UDP *:50763
chronyd    1602 chrony    7u  IPv6   15884      0t0  UDP localhost:323
sshd       1813   root    7u  IPv6   32129      0t0  TCP *:ssh (LISTEN)
mysqld     1903  mysql   22u  IPv6   16054      0t0  TCP *:mysqlx (LISTEN)
mysqld     1903  mysql   24u  IPv6   41830      0t0  TCP *:mysql (LISTEN)
sshd      82833 blctrl   14u  IPv6 5368953      0t0  TCP localhost:x11-ssh-offset (LISTEN)

5、列出范围1-1024的TCP端口打开文件

要列出所有运行进程TCP端口范围从1-1024的打开文件。

[root@rockygu ~]# lsof -i TCP:1-1024
COMMAND      PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
systemd        1 root   87u  IPv6  190030      0t0  TCP *:telnet (LISTEN)
sshd        1137 root    5u  IPv4   24940      0t0  TCP *:ssh (LISTEN)
AliYunDun 128280 root   17u  IPv4 1680017      0t0  TCP rockygu:48102->100.100.30.25:http (ESTABLISHED)
sshd      213769 root    5u  IPv4 1688592      0t0  TCP rockygu:ssh->xxx.226.222.208:63161 (ESTABLISHED)
sshd      213771 root    5u  IPv4 1688592      0t0  TCP rockygu:ssh->xxx.226.222.208:63161 (ESTABLISHED)
sshd      213772 root    5u  IPv4 1688683      0t0  TCP rockygu:ssh->xxx.226.222.208:63162 (ESTABLISHED)
sshd      213815 root    5u  IPv4 1688683      0t0  TCP rockygu:ssh->xxx.226.222.208:63162 (ESTABLISHED)

6、用'^'字符排除用户

我们已经排除了root用户。你可以按如下所示对这个命令使用'^'排除一个特定用户。

[root@rockygu ~]# lsof -i -u^root
COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
chronyd     741 chrony    6u  IPv4  20754      0t0  UDP localhost:323
chronyd     741 chrony    7u  IPv6  20755      0t0  UDP localhost:323
caRepeate 37191 blctrl    3u  IPv4 126660      0t0  UDP *:ca-2
caRepeate 37191 blctrl    5u  IPv4 126990      0t0  UDP rockygu:33347

7、查明谁正在看什么文件和命令

以下示例显示用户

[blctrl@rockygu ~]$ lsof -i -u blctrl

8、列出所有网络连接

这个命令用"-i"选项显示所有网络连接'LISTENING & ESTABLISHED'的列表。

[blctrl@rockygu ~]$ lsof -i
COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
caRepeate 37191 blctrl    3u  IPv4 126660      0t0  UDP *:ca-2
caRepeate 37191 blctrl    5u  IPv4 126990      0t0  UDP rockygu:33347

9、通告PID搜索

以下示例只显示其PID是1。

[root@rockygu blctrl]# lsof -p 1
COMMAND PID USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
systemd   1 root  cwd       DIR              253,1      257        128 /
systemd   1 root  rtd       DIR              253,1      257        128 /
systemd   1 root  txt       REG              253,1  1601376   17117621 /usr/lib/systemd/systemd
systemd   1 root  DEL       REG              253,1            50332896 /usr/lib64/libm-2.28.so
systemd   1 root  mem       REG              253,1   637264   50956295 /usr/lib64/libudev.so.1.6.11
...

10、杀死特定用户的所有活动进程

列出特定用户运行的进程:

[blctrl@rockygu ~]$ lsof -t -u blctrl
214165
214177
214256
214257

有时你必须杀死一个特定用户的所有进程。以下命令将杀死blctrl用户的所有进程。

[root@rockygu blctrl]# kill -9 `lsof -t -u blctrl`

Remote side unexpectedly closed network connection

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Session stopped
    - Press <return> to exit tab
    - Press R to restart session
    - Press S to save terminal output to file
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值