在 Linux 中查找正在使用文件的进程

linuxoperating systemopen source更新于 2026/2/8 1:37:17

摘要

可能存在这样一种情况:尽管据您所知没有人尝试访问共享,但您无法卸载它。这种情况通常在挂载共享时出现。您可能遇到的潜在错误是"文件正忙",或者我们偶尔会在尝试访问文件时看到"文件正忙"的通知。这表明系统上有一个进程正在使用该文件,并使其保持打开状态以进行读写。有时,当这种情况发生时,我们需要找出哪个进程正在使用该文件。

本教程将识别使用文件的进程。

注意 − 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 系统上正在使用的端口和目录。如果您尝试识别系统中可能正在运行的任何未知程序,这些命令将特别有用。 希望这些命令示例对您有所帮助。


相关文章


有用资源