Linux系统之lsof命令的基本使用

简介: 【10月更文挑战第14天】Linux系统之lsof命令的基本使用

在这里插入图片描述

一、lsof命令的基本使用

lsof(list open files)命令是用于查看系统中打开文件的工具,可以列出当前系统打开的所有文件(包括文件、文件夹、网络连接等),可以帮助我们查找一些占用磁盘空间或者占用网络带宽的进程。

二、lsof命令的使用帮助

2.1 lsof命令的help帮助信息

查看lsof命令的help帮助信息

[root@jeven ~]# lsof --help
lsof: illegal option character: -
lsof: -e not followed by a file system path: "lp"
lsof 4.87
 latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
 latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
 latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
 usage: [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]] [+|-e s]
 [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s]
[+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
Defaults in parentheses; comma-separated set (s) items; dash-separated ranges.
  -?|-h list help          -a AND selections (OR)     -b avoid kernel blocks
  -c c  cmd c ^c /c/[bix]  +c w  COMMAND width (9)    +d s  dir s files
  -d s  select by FD set   +D D  dir D tree *SLOW?*   +|-e s  exempt s *RISKY*
  -i select IPv[46] files  -K list tasKs (threads)    -l list UID numbers
  -n no host names         -N select NFS files        -o list file offset
  -O no overhead *RISKY*   -P no port names           -R list paRent PID
  -s list file size        -t terse listing           -T disable TCP/TPI info
  -U select Unix socket    -v list version info       -V verbose search
  +|-w  Warnings (+)       -X skip TCP&UDP* files     -Z Z  context [Z]
  -- end option scan
  +f|-f  +filesystem or -file names     +|-f[gG] flaGs
  -F [f] select fields; -F? for help
  +|-L [l] list (+) suppress (-) link counts < l (0 = all; default = 0)
                                        +m [m] use|create mount supplement
  +|-M   portMap registration (-)       -o o   o 0t offset digits (8)
  -p s   exclude(^)|select PIDs         -S [t] t second stat timeout (15)
  -T qs TCP/TPI Q,St (s) info
  -g [s] exclude(^)|select and print process group IDs
  -i i   select by IPv[46] address: [46][proto][@host|addr][:svc_list|port_list]
  +|-r [t[m<fmt>]] repeat every t seconds (15);  + until no files, - forever.
       An optional suffix to t is m<fmt>; m must separate t from <fmt> and
      <fmt> is an strftime(3) format for the marker line.
  -s p:s  exclude(^)|select protocol (p = TCP|UDP) states by name(s).
  -u s   exclude(^)|select login|UID set s
  -x [fl] cross over +d|+D File systems or symbolic Links
  names  select named files or files on named file systems
Anyone can list all files; /dev warnings disabled; kernel ID check disabled.

2.2 lsof命令帮助解释

  • 语法
lsof [选项] [文件、目录名或进程ID]
  • 选项
-a:列出打开文件存在的进程;
-c<进程名>:列出指定进程所打开的文件;
-g:列出GID号进程详情;
-d<文件号>:列出占用该文件号的进程;
+d<目录>:列出目录下被打开的文件;
+D<目录>:递归列出目录下被打开的文件;
-n<目录>:列出使用NFS的文件;
-i<条件>:列出符合条件的进程(协议、:端口、 @ip )
-p<进程号>:列出指定进程号所打开的文件;
-u:列出UID号进程详情;
-h:显示帮助信息;
-v:显示版本信息

三、lsof的基本使用

3.1 直接使用lsof命令

使用lsof命令可以列出当前系统中打开的所有文件和网络连接,包括哪些进程打开了哪些文件、哪些网络连接被哪些进程使用等等。

lsof
command     PID USER   FD      type             DEVICE     SIZE       NODE NAME

在这里插入图片描述

COMMAND列:打开文件的进程的名称。
PID列:打开文件的进程的标识符。
USER列:打开文件的进程的所有者。
FD列:打开文件的进程的文件描述符。
TYPE列:打开文件的类型,如REG(常规文件)、DIR(目录)、CHR(字符设备)、FIFO(管道)、SOCK(套接字)等。
DEVICE列:打开文件所在的设备的编号。
SIZE/OFF列:文件的大小或偏移量。
NODE列:打开文件的节点号码。
NAME列:打开文件的路径和文件名。

3.2 查看某个进程打开的所有文件

例如查询sshd服务进程的PID号

[root@jeven ~]# ps aux |grep ssh
root       9347  0.0  0.0 112756  4312 ?        Ss   06:22   0:00 /usr/sbin/sshd -D
root      30102  0.0  0.0 161316  6052 ?        Ss   17:14   0:00 sshd: root@pts/1
root      30109  0.0  0.0 161312  6040 ?        Ss   17:14   0:00 sshd: root@notty
root      30154  0.0  0.0  74176  2940 ?        Ss   17:14   0:00 /usr/libexec/openssh/sftp-server
root      31429  0.0  0.0 112712   968 pts/1    S+   18:57   0:00 grep --color=auto ssh

使用lsof查询该进程打开的所有文件

lsof -p 9347

在这里插入图片描述

3.3 查看某个用户打开的所有文件

查看某个用户打开的所有文件

[root@jeven ~]# lsof -u apache |head
COMMAND   PID   USER   FD      TYPE             DEVICE SIZE/OFF     NODE NAME
httpd   31674 apache  cwd       DIR              253,0      278       64 /
httpd   31674 apache  rtd       DIR              253,0      278       64 /
httpd   31674 apache  txt       REG              253,0   527736  8888916 /usr/sbin/httpd
httpd   31674 apache  mem       REG              253,0    37216  9300529 /usr/lib64/libnss_sss.so.2
httpd   31674 apache  mem       REG              253,0   105824  8467438 /usr/lib64/libresolv-2.17.so
httpd   31674 apache  mem       REG              253,0    31408  8467426 /usr/lib64/libnss_dns-2.17.so
httpd   31674 apache  mem       REG              253,0    61624  8467428 /usr/lib64/libnss_files-2.17.so
httpd   31674 apache  mem       REG              253,0    27720 51070491 /usr/lib64/httpd/modules/mod_cgi.so
httpd   31674 apache  mem       REG              253,0    68192  8541901 /usr/lib64/libbz2.so.1.0.6

3.4 查看某个文件被哪些进程打开

查看某个文件被哪些进程打开

[root@jeven ~]# lsof /usr/sbin/httpd
COMMAND   PID   USER  FD   TYPE DEVICE SIZE/OFF    NODE NAME
httpd   31673   root txt    REG  253,0   527736 8888916 /usr/sbin/httpd
httpd   31674 apache txt    REG  253,0   527736 8888916 /usr/sbin/httpd
httpd   31675 apache txt    REG  253,0   527736 8888916 /usr/sbin/httpd
httpd   31676 apache txt    REG  253,0   527736 8888916 /usr/sbin/httpd
httpd   31677 apache txt    REG  253,0   527736 8888916 /usr/sbin/httpd
httpd   31678 apache txt    REG  253,0   527736 8888916 /usr/sbin/httpd

3.5 查看某个端口被哪些进程占用

查看所有网络连接

lsof -i

查看某个端口被哪些进程占用

[root@jeven ~]# lsof  -i :22
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd     9347 root    3u  IPv4  59897      0t0  TCP *:ssh (LISTEN)
sshd     9347 root    4u  IPv6  59899      0t0  TCP *:ssh (LISTEN)
sshd    30102 root    3u  IPv4 259806      0t0  TCP jeven.dhcp-route:ssh->DESKTOP-R1B8FG7.dhcp-route:58104 (ESTABLISHED)
sshd    30109 root    3u  IPv4 258689      0t0  TCP jeven.dhcp-route:ssh->DESKTOP-R1B8FG7.dhcp-route:58107 (ESTABLISHED)

3.6 查看某个目录下被哪些进程打开的文件

查看某个目录下被哪些进程打开的文件

[root@jeven ~]# lsof +D /tmp
COMMAND     PID     USER   FD   TYPE             DEVICE SIZE/OFF      NODE NAME
fastgithu  8959     root  mem-R  REG              253,0     4096   1017250 /tmp/.dotnet/shm/global/FastGithub
fastgithu  8959     root    8u  unix 0xffff930eaf1e5800      0t0     52317 /tmp/dotnet-diagnostic-8959-1410-socket
fastgithu  8959     root  108r   DIR              253,0       20 219680441 /tmp/.dotnet/shm
fastgithu  8959     root  109uR  REG              253,0     4096   1017250 /tmp/.dotnet/shm/global/FastGithub
postmaste  9582 postgres    9u  unix 0xffff930d35c18800      0t0     66632 /tmp/.s.PGSQL.5432
X          9603     root    8u  unix 0xffff930d32916000      0t0     65977 /tmp/.X11-unix/X0
gnome-ses 12391      gdm   13u  unix 0xffff930d2c1e7c00      0t0     69454 /tmp/.ICE-unix/12391

3.7 查看打开某个类型文件的进程列表

查看打开某个类型文件的进程列表

[root@jeven ~]# lsof -t /usr/sbin/httpd
31673
31674
31675
31676
31677
31678

四、lsof使用注意事项

  • 需要root权限才能使用lsof命令。

  • lsof命令需要一定时间才能完成扫描,因此不应在生产环境下滥用。

  • 使用lsof命令时应确保使用的是最新版本,以防止出现已知的bug。

  • 使用时应仔细查看命令输出,尤其是对于打开套接字的程序及其连接,以避免意外暴露敏感信息。

  • lsof命令的扫描范围包括所有已打开的文件和网络套接字,因此执行时可能会对系统性能产生一定的影响,如果对性能敏感,应考虑使用其他更轻量级的工具。

  • 在使用lsof命令时,应确保已经对电脑进行了必要的安全保护,以避免受到黑客攻击或数据泄露。

相关文章
|
13天前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
99 6
|
14天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
53 3
|
14天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
44 2
|
8天前
|
Ubuntu Linux 网络安全
linux系统ubuntu中在命令行中打开图形界面的文件夹
在Ubuntu系统中,通过命令行打开图形界面的文件夹是一个高效且实用的操作。无论是使用Nautilus、Dolphin还是Thunar,都可以根据具体桌面环境选择合适的文件管理器。通过上述命令和方法,可以简化日常工作,提高效率。同时,解决权限问题和图形界面问题也能确保操作的顺利进行。掌握这些技巧,可以使Linux操作更加便捷和灵活。
14 3
|
8天前
|
运维 监控 网络协议
运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面
本文介绍了运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面,旨在帮助读者提高工作效率。从基本的文件查看与编辑,到高级的网络配置与安全管理,这些命令是运维工作中的必备工具。
38 3
|
14天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
50 3
|
17天前
|
安全 Linux 数据安全/隐私保护
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。本文介绍了使用 `ls -l` 和 `stat` 命令查找文件所有者的基本方法,以及通过文件路径、通配符和结合其他命令的高级技巧。还提供了实际案例分析和注意事项,帮助读者更好地掌握这一操作。
35 6
|
17天前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
50 6
|
17天前
|
缓存 网络协议 Linux
Linux ip命令常用操作
Linux的 `ip`命令是一个强大且灵活的网络管理工具,能够执行从基本的网络接口配置到高级的路由和VLAN管理等多种操作。通过熟练掌握这些常用操作,用户可以更加高效地管理和配置Linux系统的网络环境。无论是在日常管理还是故障排除中,`ip`命令都是必不可少的工具。
19 2
|
18天前
|
监控 网络协议 算法
Linux内核优化:提升系统性能与稳定性的策略####
本文深入探讨了Linux操作系统内核的优化策略,旨在通过一系列技术手段和最佳实践,显著提升系统的性能、响应速度及稳定性。文章首先概述了Linux内核的核心组件及其在系统中的作用,随后详细阐述了内存管理、进程调度、文件系统优化、网络栈调整及并发控制等关键领域的优化方法。通过实际案例分析,展示了这些优化措施如何有效减少延迟、提高吞吐量,并增强系统的整体健壮性。最终,文章强调了持续监控、定期更新及合理配置对于维持Linux系统长期高效运行的重要性。 ####