Linux lsof命令入门教程

lsof是一个强大的Linux命令,用于列出系统中打开的文件,包括进程、用户、文件描述符、类型等详细信息。它可以用来查看哪个进程打开了特定文件、哪些文件被特定用户使用、网络连接状态等。例如,`lsof -i`用于查看网络连接,`lsof +D`搜索目录下所有打开的文件,`lsof -t`列出文件的进程ID,而`lsof -u`则按用户显示打开的文件。lsof是系统管理员进行故障排查和性能优化的重要工具。

lsof Linux命令用于列出打开的文件。在Linux系统上,所有东西都被认为是一个文件。这意味着文件、目录、套接字、管道、设备等都是文件,因此如果其中任何一个正在使用,lsof命令将列出所有这些东西。

除了显示哪些文件正在使用之外,它还将提供关于哪个用户和进程正在使用该文件的详细信息。可以想象,在许多情况下,这是非常方便的,例如,当试图找出哪些连接正在连接到您的系统,或哪些进程占用了您试图卸载的磁盘时,等等。

直接运行lsof可以列出所有打开的文件:
在这里插入图片描述

lsof输出列说明:

并非所有列都适用于所有类型的打开文件。其中一些是空白的,这是正常的。

  • Command: 与打开该文件的进程相关联的命令的名称。
  • PID: 打开文件的进程id
  • TID: Task (thread)标识号。空白列意味着它不是任务;这是一个进程。
  • User: 进程所属的用户ID或用户名
  • FD: 显示文件的文件描述符。将在下面描述文件描述符。
  • Type: 与文件关联的节点类型,将在下面描述。
  • Device: 包含字符设备文件、块设备文件、常规文件、目录或NFS文件的设备号(用逗号分隔),或者标识文件的内核引用地址。它还可能显示Linux AX.25套接字设备的基地址或设备名。
  • Size/Off: 显示以字节为单位的文件大小或文件偏移量。
  • Node: 显示一个本地文件的节点号,或者一个NFS文件所在服务主机上的inode号,或者网络协议类型。它也可能显示流(stream)的STR或者IPQ,或者一个Linux AX.25 套接字设备的inode 号。
  • Name: 显示文件所在的挂载点和文件系统的名称

FD 列说明

FD列中的文件描述符可以是众多选项之一; lsof的man page列出了它的所有项。

FD列条目可以由三部分组成:文件描述符,模式字符,锁字符, 由于很多名词还是使用英文更好理解一点,这里直接列出了英文的描述。
下面是一些常见的文件描述符:

  • cwd: Current working directory.
  • err: FD information error (see NAME column).
  • ltx: Shared library text (code and data).
  • m86: DOS Merge mapped file.
  • mem: Memory-mapped file.
  • mmap: Memory-mapped device.
  • pd: Parent directory.
  • rtd: Root directory.
  • txt: Program text (code and data)
  • A number, representing a file descriptor.

模式字符可以是以下任意一种:

  • r: Read access.
  • w: Write access.
  • u: Read and Write access.
  • ‘ ‘: A space character, if the mode is unknown and there is no lock character.
  • –: Mode unknown and there is a lock character.

锁定字符可以是:

  • r: Read lock on part of the file.
  • R: Read lock on the entire file.
  • w: Write lock on part of the file.
  • W: Write lock on the entire file.
  • u: Read and write lock of any length.
  • U: Unknown lock type.
  • ‘ ‘: A space character. No lock.

TYPE列说明

TYPE列中可能出现70多个条目。下面列举一些常见的条目:

  • REG: Regular filesystem file.
  • DIR: Directory.
  • FIFO: First In First Out.
  • CHR: Character special file.
  • BLK: Block special file.
  • INET: Internet socket.
  • unix: UNIX domain socket

列出打开某个文件的进程

要查看已打开某个文件的进程,可以将文件的名称作为参数提供给lsof。例如,要查看打开kern.log文件的进程,可以使用以下命令:

lsof /var/log/kern.log

在这里插入图片描述

列出属于特定用户的进程打开的文件

该工具还允许您列出属于特定用户的进程打开的文件。可以使用-u命令行选项访问该特性。

lsof -u [user-name]

例如:

lsof -u administrator

在这里插入图片描述

列出基于网络地址打开的文件

该工具允许您根据其Internet地址列出文件。这可以使用-i命令行选项来完成。例如,如果需要,可以分别显示IPv4和IPv6文件。对于IPv4协议,执行如下命令:

lsof -i 4

在这里插入图片描述
同样,对于 IPv6,运行以下命令:

lsof -i 6

在这里插入图片描述

按应用程序名称列出所有文件

命令行选项-c允许按程序名获取所有文件。

$ lsof -c apache

您不必使用完整的程序名,因为所有以“apache”开头的程序都会显示出来。所以在我们的例子中,它会列出’apache2’应用程序的所有进程。
在这里插入图片描述

列出某个特定进程打开的文件

该工具还允许根据进程标识(PID)号显示打开的文件。这可以通过使用-p命令行选项来完成。

lsof -p 856

在这里插入图片描述
接下来,您还可以通过在输出中添加^符号来排除特定的pid。如果需要排除指定的PID,可以执行如下命令:

lsof -p [^PID]

例如:

lsof -p ^1

在这里插入图片描述
正如您在上面的截图中看到的,id为1的进程被排除在列表之外。

列出已打开特定文件的进程id

该工具允许您列出已打开特定文件的进程的id。这可以通过使用-t命令行选项来完成。

$ lsof -t [file-name]

例如:

$ lsof -t /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.9.0

在这里插入图片描述

列出一个目录中所有打开的文件

如果愿意,还可以让lsof搜索一个目录的所有打开实例(包括它包含的所有文件和目录)。可以使用+D命令行选项访问该特性。

$ lsof +D [directory-path]

例如;

$ lsof +D  /usr/lib/locale

在这里插入图片描述

列出所有互联网和x.25(HP-UX)网络文件

这可以通过使用我们前面描述的**-i**命令行选项实现。只是你必须没有参数地使用它。

$ lsof -i

在这里插入图片描述

找出哪个程序正在使用一个端口

该命令的-i开关允许您查找侦听特定端口号的进程或应用程序。在下面的例子中,我检查了哪个程序正在使用80端口。

$ lsof -i :80

您可以使用/etc/services文件中列出的服务名称代替端口号。例如检查哪个应用程序监听HTTPS(443)端口。

$ lsof -i :https

在这里插入图片描述
上面的例子将同时检查TCP协议和UDP协议。如果你想只检查TCP或UDP,在前面加上’ TCP ‘或’ UDP '。例如,哪个应用程序正在使用端口25 TCP:

$ lsof -i tcp:25

或哪个应用程序使用UDP端口53:

$ lsof -i udp:53

在这里插入图片描述

列出基于端口范围打开的文件

该实用程序还允许您根据特定的端口或端口范围列出打开的文件。例如,显示端口1-1024打开的文件,使用如下命令:

$ lsof -i :1-1024

在这里插入图片描述

根据连接类型(TCP或UDP)列出打开的文件

该工具允许您根据连接类型列出文件。例如,对于UDP特定的文件,使用以下命令:

$ lsof -i udp

在这里插入图片描述

lsof列出每个进程的PID

还有一个选项强制lsof在输出中列出父进程标识(PPID)号。这个选项是-R。

$ lsof -R

要获取指定PID的PPID信息,可以执行以下命令:

$ lsof -p [PID] -R

例如

$ lsof -p 3 -R

在这里插入图片描述

如何根据用户查找网络活动

通过使用**-i-u**命令行选项的组合,我们可以搜索Linux用户的所有网络连接。如果您检查一个可能被黑客攻击的系统,这可能会很有帮助。在这个例子中,我们检查用户www-data的所有网络活动:

$ lsof -a -i -u www-data

在这里插入图片描述

注意上面的-a选项,是and的意思,不加-a是or的意思。

列出所有内存映射文件

-d选项提供了这个特性,使用FD来列出文件,这个命令列出了Linux上所有的内存映射文件。

$ lsof -d mem

在这里插入图片描述

列出所有NFS文件

-N选项显示所有NFS(网络文件系统)文件的列表。

$lsof -N

结论

虽然lsof提供了大量的选择,但我们在这里讨论的应该足以让您入门。一旦您完成了这些操作,请访问工具的man page以了解更多相关信息。哦,如果你有任何疑问和问题,请在下方评论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值