Linux中的lsof命令在其输出信息中显示有关进程打开的文件的信息。在本文中,我们将使用10个易于理解的示例来讨论该工具。请注意,本教程中提到的所有示例都在Ubuntu 18.04LTS上进行了测试。
关于lsof
如果你想快速查看特定进程(或所有进程)打开的文件名,lsof命令允许你这样做。打开的文件可以是常规文件、目录、库、块特殊文件、字符特殊文件、正在执行的文本引用,甚至是流或网络文件。
1、如何列出所有打开文件
要列出所有打开的文件,请在不带任何参数的情况下运行lsof命令:
lsof
例如,下面是在我的系统上生成的上述命令的一部分输出的屏幕抓取:
不带参数的lsof命令输出结果
第一列表示进程,而最后一列包含文件名。有关所有列的详细信息,请参考lsof命令的man手册页。
2、如何列出属于特定用户的进程打开的文件
该工具还允许你列出由属于特定用户的进程打开的文件。使用-u命令行选项可以访问此功能。
lsof -u [user-name]
例如
lsof -u howtoforge
lsof -u howtoforge输出结果
3、如何根据 Internet地址列出文件
该工具允许你根据文件的Internet地址列出文件。这可以使用-i命令行选项来完成。例如,如果需要,可以单独显示IPv4和IPv6文件。对于IPv4,运行以下命令:
lsof -i 4
例如
4、如何列出一个特定进程的打开文件
该工具还允许你根据进程标识(PID)编号显示打开的文件。这可以通过使用-p命令行选项来完成。
lsof -p [PID]
例如,
lsof -p 2066
接下来,你还可以通过在输出中添加^符号来排除输出中的特定PID。要排除特定的PID,可以运行以下命令:
lsof -p [^PID]
例如
lsof -p ^1
从上图中可以看到,id为1的进程打开文件排除了。
5、如何列出已打开特定文件的进程的ID
该工具允许你列出已打开特定文件的进程的ID。这可以通过使用-t命令行选项来完成。
$ lsof -t [file-name]
例如,
$ lsof -t /lib/i386-linux-gnu/libaudit.so.1.0.0
6、如何将lsof限制为特定目录
如果需要,还可以让lsof搜索特定目录的所有打开实例(包括它包含的所有文件和目录)。可以使用+D命令行选项访问此功能。
$ lsof +D [directory-path]
例如
$ lsof +D /usr/lib/locale
7、如何列出所有Internet和X.25(HP-UX)网络文件
这可以通过使用前面描述的-i命令行选项来实现。只要不加任何选项即可。
$ lsof -i
8、如何根据端口范围列出打开的文件
该实用程序还允许你根据特定端口或端口范围列出打开的文件。例如,要显示端口1-1024的打开文件,请使用以下命令:
$ lsof -i :1-1024
9、如何根据连接类型(TCP或UDP)列出打开的文件
该工具允许你根据连接类型列出文件。例如,对于特定于UDP的文件,请使用以下命令:
$ lsof -i udp
同样,你可以使lsof显示特定于TCP的文件。
10、如何使lsof列出父进程ID
还有一个选项可以强制lsof在输出中列出父进程标识(ppid)号。解决方法是使用选项-R。
$ lsof -R
结束语
尽管lsof提供了大量的选项,但是我们在这里讨论的选项应该足以让你开始。
领取专属 10元无门槛券
私享最新 技术干货