在 Linux 中查找正在使用文件的进程
摘要
可能存在这样一种情况:尽管据您所知没有人尝试访问共享,但您无法卸载它。这种情况通常在挂载共享时出现。您可能遇到的潜在错误是"文件正忙",或者我们偶尔会在尝试访问文件时看到"文件正忙"的通知。这表明系统上有一个进程正在使用该文件,并使其保持打开状态以进行读写。有时,当这种情况发生时,我们需要找出哪个进程正在使用该文件。
本教程将识别使用文件的进程。
注意 − Linux 命令区分大小写。
查找进程的命令
有一些命令可以帮助我们定位使用文件的进程,所以我们将从这些命令开始。这些命令从 Linux 内核收集信息,因为它管理程序、文件系统等。
fuser 命令
Linux 命令 fuser 可用于确定哪个进程正在使用特定的文件、目录或套接字。此外,它还提供有关访问类型以及负责操作该进程的用户的详细信息。
也可以使用 -v 选项在详细模式下使用 fuser。要生成更多输出,以便用户了解 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
输出
所有进程均未使用 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 系统上正在使用的端口和目录。如果您尝试识别系统中可能正在运行的任何未知程序,这些命令将特别有用。 希望这些命令示例对您有所帮助。
相关文章
有用资源
linux 参考教程 - 该教程包含有关 linux 的更多信息:https://www.cainiaomax.com/linux/

