初学者 Linux lsof 命令教程(15 个示例)
在此页
- 关于 lsof 命令
- 安装 Linux lsof 命令
- 1。如何列出所有打开的文件
- 2。如何列出属于特定用户的进程打开的文件
- 4。如何按应用程序名称列出所有文件
- 5。如何列出特定于进程的文件
- 6。如何列出已打开特定文件的进程的 ID
- 7.如何列出目录中所有打开的文件
- 8.如何列出所有 Internet 和 x.25 (HP-UX) 网络文件 <李>9。找出哪个程序正在使用端口
- 10。如何根据端口范围列出打开的文件
- 11。如何根据连接类型(TCP 或 UDP)列出打开的文件
- 12。如何使 lsof 列出进程的父 PID
- 13。如何按用户查找网络活动
- 14。列出所有内存映射文件
- 15。列出所有 NFS 文件
- 结论
Linux lsof 命令在其输出信息中显示有关进程打开的文件的信息。在本文中,我们将使用 15 个易于理解的示例来讨论 Linux lsof 工具。请注意,本教程中提到的所有示例都已在 Ubuntu 22.04 LTS 上进行了测试,但它们也适用于其他 Linux 发行版,如 Debian、Fedora 和 CentOS。
关于 lsof 命令
如果您想快速查看特定进程(或所有进程)打开的文件的名称,lsof 命令可以让您做到这一点。打开的文件可以是常规文件或目录、库、特殊文件或块设备、字符特殊文件、执行文本引用,甚至是流或网络文件。您还可以按端口号列出进程。如果您没有以 root 用户身份登录,那么您可能必须在命令前添加 sudo。
安装 Linux lsof 命令
大多数 Linux 发行版都预装了 lsof。如果您的系统上尚未安装它,请使用以下命令安装 lsof:
在 Ubuntu 和 Debian 上:
$ sudo apt install lsof
Ond CentOS 和 Fedora:
$ dnf install lsof
1.如何列出所有打开的文件
要列出所有打开的文件,请运行不带任何参数的 lsof 命令:
lsof
例如,这是在我的系统上生成的上述命令的部分输出的屏幕抓图:

第一列代表进程,而最后一列包含文件名。有关所有列的详细信息,请参阅命令手册页。
2.如何列出属于特定用户的进程打开的文件
该工具还允许您列出属于特定用户的进程打开的文件。可以使用 -u 命令行选项访问此功能。
lsof -u [用户名]
例如:
lsof -u 管理员

3. 如何根据互联网地址列出文件
该工具可让您根据 Internet 地址列出文件。这可以使用 -i 命令行选项来完成。例如,如果需要,您可以分别显示 IPv4 和 IPv6 文件。对于 IPv4,运行以下命令:
lsof -i 4
例如:

同样,对于 IPv6,运行以下命令:
lsof -i 6
例如:
lsof -i 6

4.如何按应用程序名称列出所有文件
-c 命令行选项允许您获取按程序名称打开的所有文件。
$ lsof -c apache
您不必使用完整的程序名称,因为会显示所有以单词 apache 开头的程序。所以在我们的例子中,它将列出 apache2 应用程序的所有进程。

-c 选项基本上只是两个命令的快捷方式:
$ lsof | grep apache
5.如何列出特定于进程的文件
该工具还允许您根据进程标识 (PID) 编号显示打开的文件。这可以通过使用 -p 命令行选项来完成。
lsof -p [PID]
例如:
lsof -p 856

继续,您还可以通过在输出前添加 ^符号来排除输出中的特定 PID。要排除特定的 PID,您可以运行以下命令:
lsof -p [^PID]
例如:
lsof -p ^1

正如您在上面的屏幕截图中看到的,id 为 1 的进程被排除在列表之外。
6. 如何列出已打开特定文件的进程 ID
该工具允许您列出已打开特定文件的进程的 ID。这可以通过使用 -t 命令行选项来完成。
$ lsof -t [file-name]
例如:
$ lsof -t /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.9.0

7. 如何列出目录中所有打开的文件
如果需要,您还可以让 lsof 搜索目录的所有打开实例(包括它包含的所有文件和目录)。可以使用 +D 命令行选项访问此功能。
$lsof +D [目录路径]
例如:
$lsof +D /usr/lib/locale

8. 如何列出所有 Internet 和 x.25 (HP-UX) 网络文件
这可以通过使用我们之前描述的 -i 命令行选项来实现。只是您必须在没有任何参数的情况下使用它。
$lsof -i

9.找出哪个程序正在使用端口
该命令的 -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

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

11. 如何根据连接类型(TCP 或 UDP)列出打开的文件
该工具允许您根据连接类型列出文件。例如,对于 UDP 特定文件,使用以下命令:
$lsof -i udp

同样,您可以使 lsof 显示特定于 TCP 的文件。
12. 如何使 lsof 列出进程的父 PID
还有一个选项可以强制 lsof 在输出中列出父进程标识 (PPID) 编号。有问题的选项是-R。
$ lsof -R
要获取特定 PID 的 PPID 信息,您可以运行以下命令:
$ lsof -p [PID] -R
例如:
$ lsof -p 3 -R

13. 如何按用户查找网络活动
通过结合使用 -i 和 -u 命令行选项,我们可以搜索 Linux 用户的所有网络连接。如果您检查可能已被黑客入侵的系统,这会很有帮助。在此示例中,我们检查用户 www-data 的所有网络活动:
$ lsof -a -i -u www-data

14.列出所有内存映射文件
此命令列出 Linux 上的所有内存映射文件。
$ lsof -d mem

15.列出所有NFS文件
-N 选项显示所有 NFS(网络文件系统)文件的列表。
$lsof -N
结论
尽管 lsof 提供了过多的选项,但我们在这里讨论的选项应该足以让您入门。完成这些练习后,请前往工具手册页了解更多信息。哦,如果您有任何疑问和疑问,请在下面发表评论。