小言_互联网的博客

每天学一个 Linux 命令(68):lsof

437人阅读  评论(0)

点击下方“民工哥技术之路”,选择“设为星标”

回复“1024”获取独家整理的学习资料!

推荐阅读:每天学一个 Linux 命令(67):nmap

命令简介

lsof 命令用于显示 Linux 系统当前已打开的所有文件列表。查看进程或系统打开的文件会给调试带来极大的帮助。下面简单地介绍 lsof 常使用的功能。

lsof (list open files)命令用于查看你进程打开的文件,打开文件的进程,进程打开的端口(TCP、UDP),还可以用于找回/恢复被删除的文件。lsof 命令需要访问核心内存和各种文件,所以需要具备 root 超级管理员权限的用户才能执行此命令。

语法格式

lsof [Options] 

选项说明


   
  1. -a         #显示打开文件的进程
  2. -c<进程名>  #显示指定进程所打开的文件
  3. -g         #显示GID号进程详情
  4. -d<文件号>  #显示占用该文件号的进程
  5. +d<目录>   #显示目录下被打开的文件
  6. +D<目录>   #递归列出目录下被打开的文件
  7. -n<目录>   #显示使用NFS的文件
  8. -l        #在输出显示用户ID而不是用户名
  9. -i<条件>   #输出符合条件的进程
  10. -p<进程号> #输出指定进程号所打开的文件
  11. -u   #显示指定UID号进程详情
  12. -h   #显示帮助信息
  13. -t   #仅获取进程ID
  14. -U   #获取UNIX套接口地址
  15. -F   #格式化输出结果
  16. -v   #显示版本信息

应用举例

显示所有连接


   
  1. [root@CentOS7 -1 ~]# lsof -i
  2. COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
  3. chronyd    629  chrony     5u  IPv4   16952       0t0  UDP localhost: 323 
  4. chronyd    629  chrony     6u  IPv6   16953       0t0  UDP localhost: 323 
  5. sshd       866    root     3u  IPv4   19638       0t0  TCP *:ssh (LISTEN)
  6. sshd       866    root     4u  IPv6   19647       0t0  TCP *:ssh (LISTEN)
  7. master     976    root    13u  IPv4   20415       0t0  TCP localhost:smtp (LISTEN)
  8. master     976    root    14u  IPv6   20416       0t0  TCP localhost:smtp (LISTEN)
  9. netdata  18325 netdata     4u  IPv4  114083       0t0  TCP *:dnp-sec (LISTEN)
  10. netdata  18325 netdata     5u  IPv6  114084       0t0  TCP *:dnp-sec (LISTEN)
  11. netdata  18325 netdata    36u  IPv6  114297       0t0  UDP localhost: 8125 
  12. netdata  18325 netdata    37u  IPv4  114298       0t0  UDP localhost: 8125 
  13. netdata  18325 netdata    38u  IPv6  114302       0t0  TCP localhost: 8125 (LISTEN)
  14. netdata  18325 netdata    39u  IPv4  114303       0t0  TCP localhost: 8125 (LISTEN)
  15. sshd     18968    root     3u  IPv4  118704       0t0  TCP CentOS7 -1:ssh-> 192.168 .1 .93: 62148 (ESTABLISHED)

只显示IPV6的连接信息


   
  1. [root@CentOS7 -1 ~]# lsof -i  6
  2. COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
  3. chronyd    629  chrony     6u  IPv6   16953       0t0  UDP localhost: 323 
  4. sshd       866    root     4u  IPv6   19647       0t0  TCP *:ssh (LISTEN)
  5. master     976    root    14u  IPv6   20416       0t0  TCP localhost:smtp (LISTEN)
  6. netdata  18325 netdata     5u  IPv6  114084       0t0  TCP *:dnp-sec (LISTEN)
  7. netdata  18325 netdata    36u  IPv6  114297       0t0  UDP localhost: 8125 
  8. netdata  18325 netdata    38u  IPv6  114302       0t0  TCP localhost: 8125 (LISTEN)

只显示IPV4的连接信息


   
  1. [root@CentOS7 -1 ~]# lsof -i  4
  2. COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
  3. chronyd    629  chrony     5u  IPv4   16952       0t0  UDP localhost: 323 
  4. sshd       866    root     3u  IPv4   19638       0t0  TCP *:ssh (LISTEN)
  5. master     976    root    13u  IPv4   20415       0t0  TCP localhost:smtp (LISTEN)
  6. netdata  18325 netdata     4u  IPv4  114083       0t0  TCP *:dnp-sec (LISTEN)
  7. netdata  18325 netdata    37u  IPv4  114298       0t0  UDP localhost: 8125 
  8. netdata  18325 netdata    39u  IPv4  114303       0t0  TCP localhost: 8125 (LISTEN)
  9. sshd     18968    root     3u  IPv4  118704       0t0  TCP CentOS7 -1:ssh-> 192.168 .1 .93: 62148 (ESTABLISHED)

仅显示TCP连接


   
  1. [root@CentOS7 -1 ~]# lsof -i tcp
  2. COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
  3. sshd       866    root     3u  IPv4   19638       0t0  TCP *:ssh (LISTEN)
  4. sshd       866    root     4u  IPv6   19647       0t0  TCP *:ssh (LISTEN)
  5. master     976    root    13u  IPv4   20415       0t0  TCP localhost:smtp (LISTEN)
  6. master     976    root    14u  IPv6   20416       0t0  TCP localhost:smtp (LISTEN)
  7. netdata  18325 netdata     4u  IPv4  114083       0t0  TCP *:dnp-sec (LISTEN)
  8. netdata  18325 netdata     5u  IPv6  114084       0t0  TCP *:dnp-sec (LISTEN)
  9. netdata  18325 netdata    38u  IPv6  114302       0t0  TCP localhost: 8125 (LISTEN)
  10. netdata  18325 netdata    39u  IPv4  114303       0t0  TCP localhost: 8125 (LISTEN)
  11. sshd     18968    root     3u  IPv4  118704       0t0  TCP CentOS7 -1:ssh-> 192.168 .1 .93: 62148 (ESTABLISHED)

仅显示UDP连接


   
  1. [root@CentOS7 -1 ~]# lsof -i udp
  2. COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
  3. chronyd    629  chrony     5u  IPv4   16952       0t0  UDP localhost: 323 
  4. chronyd    629  chrony     6u  IPv6   16953       0t0  UDP localhost: 323 
  5. netdata  18325 netdata    36u  IPv6  114297       0t0  UDP localhost: 8125 
  6. netdata  18325 netdata    37u  IPv4  114298       0t0  UDP localhost: 8125 

显示指定端口的连接信息


   
  1. [root@CentOS7 -1 ~]# lsof -i : 22
  2. COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
  3. sshd       866 root     3u  IPv4   19638       0t0  TCP *:ssh (LISTEN)
  4. sshd       866 root     4u  IPv6   19647       0t0  TCP *:ssh (LISTEN)
  5. sshd     18968 root     3u  IPv4  118704       0t0  TCP CentOS7 -1:ssh-> 192.168 .1 .93: 62148 (ESTABLISHED)
  6. [root@CentOS7 -1 ~]# lsof -i : 80
  7. [root@CentOS7 -1 ~]# lsof -i : 62148
  8. COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
  9. sshd     18968 root     3u  IPv4  118704       0t0  TCP CentOS7 -1:ssh-> 192.168 .1 .93: 62148 (ESTABLISHED)

列由某个用户打开的进程或文件


   
  1. [root@CentOS7 -1 ~]# lsof -u root | head  -5
  2. COMMAND     PID USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
  3. systemd        1 root  cwd       DIR               253, 0        262          64 /
  4. systemd        1 root  rtd       DIR               253, 0        262          64 /
  5. systemd        1 root  txt       REG               253, 0    1628608    16959493 /usr/lib/systemd/systemd
  6. systemd        1 root  mem       REG               253, 0      20064     1679454 /usr/lib64/libuuid.so .1 .3 .0
  7. #列出除了root以外用户打开的文件
  8. [root@CentOS7 -1 ~]# lsof -u ^root | head
  9. COMMAND     PID   TID    USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
  10. polkitd      618       polkitd  cwd       DIR               253, 0       262          64 /
  11. polkitd      618       polkitd  rtd       DIR               253, 0       262          64 /
  12. polkitd      618       polkitd  txt       REG               253, 0    120432    17108633 /usr/lib/polkit -1/polkitd
  13. polkitd      618       polkitd  mem       REG               253, 0     61560       18290 /usr/lib64/libnss_files -2.17.so
  14. polkitd      618       polkitd  mem       REG               253, 0     68192       40949 /usr/lib64/libbz2.so .1 .0 .6
  15. polkitd      618       polkitd  mem       REG               253, 0     99952      324334 /usr/lib64/libelf -0.176.so
  16. polkitd      618       polkitd  mem       REG               253, 0     19896       46144 /usr/lib64/libattr.so .1 .1 .0
  17. polkitd      618       polkitd  mem       REG               253, 0     20064     1679454 /usr/lib64/libuuid.so .1 .3 .0
  18. polkitd      618       polkitd  mem       REG               253, 0    265576       20649 /usr/lib64/libblkid.so .1 .1 .0

显示指定的连接信息


   
  1. #显示指定到指定主机的连接
  2. [root@CentOS7 -1 ~]# lsof -i@ 192.168 .1 .100
  3. COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
  4. sshd     18968 root     3u  IPv4  118704       0t0  TCP CentOS7 -1:ssh-> 192.168 .1 .93: 62148 (ESTABLISHED)
  5. #显示指定到指定主机端口的连接
  6. [root@CentOS7 -1 ~]# lsof -i@ 192.168 .1 .100: 22
  7. COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
  8. sshd     18968 root     3u  IPv4  118704       0t0  TCP CentOS7 -1:ssh-> 192.168 .1 .93: 62148 (ESTABLISHED)

显示某些状态的端口信息


   
  1. #找出处于监听状态的端口
  2. [root@CentOS7 -1 ~]# lsof -i -sTCP:LISTEN
  3. COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
  4. sshd       866    root     3u  IPv4   19638       0t0  TCP *:ssh (LISTEN)
  5. sshd       866    root     4u  IPv6   19647       0t0  TCP *:ssh (LISTEN)
  6. master     976    root    13u  IPv4   20415       0t0  TCP localhost:smtp (LISTEN)
  7. master     976    root    14u  IPv6   20416       0t0  TCP localhost:smtp (LISTEN)
  8. netdata  18325 netdata     4u  IPv4  114083       0t0  TCP *:dnp-sec (LISTEN)
  9. netdata  18325 netdata     5u  IPv6  114084       0t0  TCP *:dnp-sec (LISTEN)
  10. netdata  18325 netdata    38u  IPv6  114302       0t0  TCP localhost: 8125 (LISTEN)
  11. netdata  18325 netdata    39u  IPv4  114303       0t0  TCP localhost: 8125 (LISTEN)
  12. ##找出处于已连接状态的端口
  13. [root@CentOS7 -1 ~]# lsof -i -sTCP:ESTABLISHED
  14. COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
  15. sshd     18968 root     3u  IPv4  118704       0t0  TCP CentOS7 -1:ssh-> 192.168 .1 .93: 62148 (ESTABLISHED)

终止用户行为


   
  1. [root@CentOS7 -1 ~]# lsof -u mingongge
  2. COMMAND   PID      USER   FD   TYPE DEVICE  SIZE/OFF     NODE NAME
  3. bash     20369 mingongge  cwd    DIR   253, 0         82    462615 /home/mingongge
  4. bash     20369 mingongge  rtd    DIR   253, 0        262        64 /
  5. bash     20369 mingongge  txt    REG   253, 0     964536  50333070 /usr/bin/bash
  6. bash     20369 mingongge  mem    REG   253, 0  106172832  50333042 /usr/lib/locale/locale-archive
  7. bash     20369 mingongge  mem    REG   253, 0      61560     18290 /usr/lib64/libnss_files -2.17.so
  8. bash     20369 mingongge  mem    REG   253, 0    2156240     18266 /usr/lib64/libc -2.17.so
  9. bash     20369 mingongge  mem    REG   253, 0      19248     18273 /usr/lib64/libdl -2.17.so
  10. bash     20369 mingongge  mem    REG   253, 0     174576     20696 /usr/lib64/libtinfo.so .5 .9
  11. bash     20369 mingongge  mem    REG   253, 0     163312   1679434 /usr/lib64/ld -2.17.so
  12. bash     20369 mingongge  mem    REG   253, 0      26970  16806930 /usr/lib64/gconv/gconv-modules.cache
  13. bash     20369 mingongge     0u   CHR   136, 1        0t0         4 /dev/pts/ 1
  14. bash     20369 mingongge     1u   CHR   136, 1        0t0         4 /dev/pts/ 1
  15. bash     20369 mingongge     2u   CHR   136, 1        0t0         4 /dev/pts/ 1
  16. bash     20369 mingongge   255u   CHR   136, 1        0t0         4 /dev/pts/ 1
  17. vim      20391 mingongge  cwd    DIR   253, 0         82    462615 /home/mingongge
  18. vim      20391 mingongge  rtd    DIR   253, 0        262        64 /
  19. vim      20391 mingongge  txt    REG   253, 0    2337192  51061591 /usr/bin/vim
  20. vim      20391 mingongge  mem    REG   253, 0      61560     18290 /usr/lib64/libnss_files -2.17.so
  21. vim      20391 mingongge  mem    REG   253, 0  106172832  50333042 /usr/lib/locale/locale-archive
  22. vim      20391 mingongge  mem    REG   253, 0      11392      8814 /usr/lib64/libfreebl3.so
  23. vim      20391 mingongge  mem    REG   253, 0      14424   1679441 /usr/lib64/libutil -2.17.so
  24. vim      20391 mingongge  mem    REG   253, 0      40600     18271 /usr/lib64/libcrypt -2.17.so
  25. vim      20391 mingongge  mem    REG   253, 0     115816     18278 /usr/lib64/libnsl -2.17.so
  26. vim      20391 mingongge  mem    REG   253, 0     109976     18302 /usr/lib64/libresolv -2.17.so
  27. vim      20391 mingongge  mem    REG   253, 0      19896     46144 /usr/lib64/libattr.so .1 .1 .0
  28. vim      20391 mingongge  mem    REG   253, 0     402384     20698 /usr/lib64/libpcre.so .1 .2 .0
  29. vim      20391 mingongge  mem    REG   253, 0    2156240     18266 /usr/lib64/libc -2.17.so
  30. vim      20391 mingongge  mem    REG   253, 0     142144     18300 /usr/lib64/libpthread -2.17.so
  31. vim      20391 mingongge  mem    REG   253, 0    1647328    282389 /usr/lib64/perl5/CORE/libperl.so
  32. vim      20391 mingongge  mem    REG   253, 0      19248     18273 /usr/lib64/libdl -2.17.so
  33. vim      20391 mingongge  mem    REG   253, 0      27752       669 /usr/lib64/libgpm.so .2 .1 .0
  34. vim      20391 mingongge  mem    REG   253, 0      37064     18281 /usr/lib64/libacl.so .1 .1 .0
  35. vim      20391 mingongge  mem    REG   253, 0     174576     20696 /usr/lib64/libtinfo.so .5 .9
  36. vim      20391 mingongge  mem    REG   253, 0     155744   1679449 /usr/lib64/libselinux.so .1
  37. vim      20391 mingongge  mem    REG   253, 0    1136944     18275 /usr/lib64/libm -2.17.so
  38. vim      20391 mingongge  mem    REG   253, 0     163312   1679434 /usr/lib64/ld -2.17.so
  39. vim      20391 mingongge     0u   CHR   136, 1        0t0         4 /dev/pts/ 1
  40. vim      20391 mingongge     1u   CHR   136, 1        0t0         4 /dev/pts/ 1
  41. vim      20391 mingongge     2u   CHR   136, 1        0t0         4 /dev/pts/ 1
  42. vim      20391 mingongge     3u   REG   253, 0      12288    462619 /home/mingongge/.test.sh.swp
  43. 然后我们使用下面的命令来终止这个用户的这些操作行为
  44. [root@CentOS7 -1 ~]# kill  -9  `lsof -t -u mingongge`
  45. [root@CentOS7 -1 ~]# lsof -u mingongge
  46. #你会发现这个用户的所有操作都被终止了

这个命令组合,在日常使用环境下还可以用于检查服务器被攻击的行为,如果有行为异常的用户登录操作,可以使用管理员暂时将此用户的一切操作全部干掉,然后再找出解决方法。

每天学一个 Linux 命令(65):netstat

每天学一个 Linux 命令(66):ss

推荐阅读 点击标题可跳转

牛逼!用 GitLab 做 CI/CD 是什么感觉,太强了

彻夜怒肝!Docker 疑难杂症解决方案已撸完,快要裂开了

蚂蚁金服 CEO 突然辞职!去向很意外

再见 FTP/SFTP!下一代文件传输利器 Croc 来了!

MongoDB 日常运维实践总结

这 5 种常用运维监控工具都不会?你算啥运维人

超详细讲解!10 种常见的软件架构模式

搞懂这 9 步,DNS 访问原理就明明白白了

关于 Kubernetes 的这些原理,你一定要了解


转载:https://blog.csdn.net/mingongge/article/details/115018776
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场