查找Linux系统中使用文件的进程
摘要
可能出现这种情况:即使您知道没有人尝试访问共享,您也无法卸载它。这通常在挂载共享时出现。您可能遇到的潜在错误是“文件繁忙”,或者我们有时在尝试访问文件时可能会看到“文件繁忙”的提示。这表示系统上有一个正在使用该文件的活动进程,并将其打开以进行读取或写入操作。有时,发生这种情况时,我们需要找出哪个进程正在使用该文件。
本教程将识别使用文件的进程。
注意 − Linux 命令区分大小写。
查找进程的命令
有一些命令可以帮助我们找到处理文件的进程,所以我们将从这里开始。这些命令从Linux内核收集信息,因为它管理程序和文件系统等等。
fuser命令
名为fuser的Linux命令可用于确定哪个进程正在使用特定的文件、目录或套接字。此外,它还提供有关访问类型和负责操作该进程的用户的信息。
fuser 也可以使用 -v 选项以详细模式使用。使用详细选项生成更多输出,以便用户可以看到 fuser 正在做什么。使用 -v 选项运行 fuser,
$ fuser -v scripts.txt
输出
USER PID ACCESS COMMAND /run/sripts.txt: student 64589 ..c.. less
fuser 命令中的 -k 标志也可用于停止或终止在特定端口上运行的进程。
$ fuser -k scripts.txt
输出
/run/sripts.txt: 52349
为了再次验证进程是否已被终止,我们将再次查找“scripts.txt”文件,
$ fuser -v scripts.txt
输出
none of the processes are using scripts.txt
再说一次,我遇到过一些情况,一些已删除的进程会继续锁定文件,直到它们的父进程或连接到该进程的应用程序运行完毕。您可能需要使用额外的选项(例如以下示例中的选项)来查看某些文件。
lsof命令
lsof 命令代表“列出打开的文件”,但它也可以用于其他目的。一个常见的误解是 Linux 中的一切都是文件。在许多方面这是正确的,因此识别打开文件的工具实际上非常有用。
要找出谁正在使用文件系统上的任何文件,请使用 lsof 命令。在 Linux 文件系统上运行 lsof 命令将产生以下结果,其中显示了使用该文件的任何进程的所有者和进程详细信息。
$ lsof /dev/run/files
输出
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1480 student 0r CHR 1,3 0t0 6 /dev/run/files sh 1501 student 0r CHR 1,3 0t0 6 /dev/run/files sh 1501 student 1w CHR 1,3 0t0 6 /dev/run/files dbus-daem 1530 student 0u CHR 1,3 0t0 6 /dev/run/files Xfce4-seb 1603 student 0r CHR 1,3 0t0 6 /dev/run/files xfce4-ses 1603 student 1w CHR 1,3 0t0 6 /dev/run/files at-spi-b 1604 student 0r CHR 1,3 0t 6 /dev/run/files dbus-daem 1609 student 0u CHR 1,3 0t0 6 /dev/run/files
运行以下命令,列出用户特定的打开文件
$ lsof -u student
输出
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1480 student cwd DIR 8,3 4096 2 / systemd 1480 student rtd DIR 8,3 4096 2 / systemd 1480 student txt REG 8,3 1595792 3147496
结论
在本教程中,我们学习了一些使用 fuser 和 lsof 命令监控 Linux 系统上正在使用的端口和目录的示例。如果您试图识别可能在您的系统上运行的任何未知程序,这些命令会特别有用。我希望您能发现这些命令示例有用。