查找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 系统上正在使用的端口和目录的示例。如果您试图识别可能在您的系统上运行的任何未知程序,这些命令会特别有用。我希望您能发现这些命令示例有用。

更新于:2023年3月23日

22K+ 次浏览

开启您的职业生涯

通过完成课程获得认证

开始学习
广告