lsof命令的用法和示例

时间:2020-03-21 11:46:13  来源:igfitidea点击:

我们需要记住Linux/Unix行业中最重要的事实,即; “一切都是文件”。
甚至设备,套接字,都是文件。

现在lsof代表“列出打开的文件”,像unix这样的系统使用它来显示所有打开的文件和打开它们的进程。

不带任何选项的命令将通过不同的过程为我们提供系统中所有打开的文件。

那么如果我们愿意,我们可以使用该端口杀死所有PID。

现在,如果要使用lsof来查看命令打开的所有文件,该怎么办。
例如下面的命令

lsof -c httpd

从上面的示例中可以看到,httpd进程使用这些pid访问了access_log。

现在,有时在按以下方式安装驱动器时可能会遇到问题。

挂载:设备忙
Mount: device is busy

在这种情况下,我们需要检查哪个进程正在使用该设备文件,就像我们检查/var/log/httpd/access_log一样,如下所示:

lsof /dev/sdb

并杀死所有使用它们的PID,然后尝试卸载。

我们还可以通过以下命令检查在特定目录下打开了哪些文件。

lsof +D /var/log/

lsof也可以通过以下方式用于列出用户打开的文件。

#lsof -u <username>

给定用户除外的打开文件列表。

lsof -u ^<username>

我们还可以将PID编号作为参数传递给lsof,以列出该进程ID打开的所有文件,如下所示:

lsof -p <pid>

现在想象一下一种情况,计算机由于特定用户运行的进程而承担了很多负担……如果我们想杀死该用户运行的所有进程,我们可以通过以下命令轻松实现。

kill -9 `lsof -t -u <username>`

假设我们知道某个进程正在承受负载,并且想要列出该进程打开的所有网络套接字和文件,然后使用以下命令进行操作。

lsof -i -a -p <PID>