如何在 Linux 中检查打开的文件如何在 Linux 中检查打开的文件如何在 Linux 中检查打开的文件如何在 Linux 中检查打开的文件
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Linux 中检查打开的文件

您可能听说过这样一句话:“Linux 中一切皆文件。虽然这并不完全正确,但它确实包含了一系列真理。

在Linux和类Unix系统中,一切都像文件。这意味着 Unix 系统中的资源被分配一个文件描述符,包括存储设备、网络套接字、进程等。

文件描述符是标识文件和其他输入/输出设备的唯一编号。它描述了资源以及内核如何访问它们。将其视为通往内核抽象硬件资源的网关。

不幸的是,文件描述符的概念超出了本教程的范围;请考虑下面提供的链接以开始了解更多信息:

https://en.wikipedia.org/wiki/File_descriptor

这意味着 Unix 和类 Unix 系统(例如 Linux)大量使用此类文件。作为 Linux 高级用户,查看打开的文件、进程以及使用它们的用户非常有用。

本教程将重点介绍查看打开的文件的方法以及负责的进程或用户。

先决条件

在我们开始之前,请确保您拥有:

  • Linux系统

  • 具有 root 或 sudo 权限的用户

如果您有这些,让我们开始吧:

LSOF实用程序

List open files(列出打开的文件,简称 lsof)由 Victor A Abell 创建,是一个命令行实用程序,允许我们查看打开的文件以及打开它们的进程或用户。

lsof 实用程序在主要 Linux 发行版中可用;但是,您可能会发现它尚未安装,因此可能需要手动安装。

如何在 Debian/Ubuntu 上安装 lsof

要在 Debian 上安装它,请使用以下命令:

sudo apt-get update

sudo apt-get install lsof -y

如何在 REHL/CentOS 上安装

要在 REHL 和 CentOS 上安装,请使用以下命令:

sudo dnf update

sudo dnf install lsof

如何在 Arch 上安装

在 Arch 上,使用以下命令调用包管理器:

sudo pacman -Sy

sudo pacman -S lsof

如何在 Fedora 上安装

在 Fedora 上,使用以下命令:

sudo yum install lsof

一旦安装并更新了 lsof 实用程序,我们就可以开始使用它了。

基本 lsof 用法

要使用 lsof 工具,请输入命令:

sudo lsof

一旦执行上述命令,lsof将转储大量信息,如下所示:

上面的输出显示了进程打开的所有文件。输出具有多个列,每个列代表有关文件的特定信息。

  • 命令列 – 显示正在使用该文件的进程的名称。

  • PID – 显示使用该文件的进程的进程标识符。

  • TID – 显示进程的任务 ID(线程)。

  • TASKCMD – 表示任务命令的名称。

  • USER – 进程的所有者。

  • FD – 显示文件描述符编号。这就是进程使用文件的方式;此列输出中可用的选项包括:

  • cwd – 当前工作目录。

  • mem – 内存映射文件

  • pd – 父目录

  • jld – 监狱目录

  • ltx – 共享库文本

  • rtd – 根目录。

  • txt – 程序代码和数据

  • tr – 内核跟踪文件。

  • err – 文件描述符信息错误

  • mmp – 内存映射设备。

  • TYPE – 显示与文件关联的节点类型,例如:

  • Unix – 用于 Unix 域套接字。

  • DIR – 代表目录

  • REG – 代表常规文件

  • CHR – 代表特殊字符文件。

  • LINK – 符号链接文件

  • BLK – 阻止特殊文件

  • INET – 互联网域套接字

  • FIFO – 命名管道(先进先出文件)

  • PIPE – 用于管道

还有很多。

  • DEVICES – 按特殊字符文件、特殊块、常规、目录和 NFS 文件的顺序显示以逗号分隔的设备号。

  • SIZE/OFF – 显示文件或文件偏移量的大小(以字节为单位)。

  • NODE – 显示本地文件的节点号、互联网协议类型等。

  • NAME – 显示文件所在的挂载点和文件系统的名称。

注意:有关各列的详细信息,请参阅 lsof 手册。

如何显示打开文件的进程

Lsof 为我们提供了一些选项,帮助我们过滤输出以仅显示打开特定文件的进程。

例如,要查看打开文件 /bin/bash 的文件,请使用以下命令:

sudo lsof /bin/bash

这将为您提供如下所示的输出:

COMMAND   PID   USER  FD   TYPE DEVICE SIZE/OFF   NODE NAME

ksmtuned 1025   root txt    REG  253,0  1150704 428303 /usr/bin/bash

bash     2968 centos txt    REG  253,0  1150704 428303 /usr/bin/bash

bash     3075 centos txt    REG  253,0  1150704 428303 /usr/bin/bash

如何显示特定用户打开的文件

我们还可以过滤输出以显示特定用户打开的文件。我们通过使用 -u 标志后跟用户名来做到这一点,如下所示:

sudo lsof -u centos

这将为您提供如下所示的输出:

如何显示特定进程打开的文件

假设我们想查看某个特定进程打开的所有文件?为此,我们可以使用进程的 PID 来过滤输出。

例如,以下命令显示 bash 打开的文件。

sudo lsof -p 3075

这将只提供由 systemd 打开的文件,如下所示:

如何显示目录中打开的文件

要获取在特定目录中打开的文件,我们可以传递 +D 选项,后跟目录路径。

例如,列出 /etc 目录中打开的文件。

sudo lsof +D /etc

以下是此操作的输出:

如何显示网络连接

由于Linux中的一切都是文件,因此我们可以获取TCP文件或连接等网络文件。

我们可以使用命令:

sudo lsof -i TCP

这将为您提供系统中的 TCP 连接。

您还可以使用如下所示的命令按特定端口进行过滤:

sudo lsof -i :22

这将为您提供如下所示的输出:

如何连续显示文件

Lsof 为我们提供了一种每隔几秒循环输出一次的模式。这使您可以连续监视进程或用户打开的文件。

但是,此选项要求您手动终止该进程。

例如,下面的命令持续监控端口 22 上打开的文件:

sudo lsof -r  -i :22

正如您所看到的,在第三个循环中,lsof 捕获了通过 SSH 与服务器建立的连接。

结论

Lsof 是一个非常有用的实用程序。它允许您监视关键文件以及监视打开文件的用户和进程。在排除故障或查找对系统的恶意尝试时,这非常有用。

如本教程所示,通过各种示例和方法,您可以结合 lsof 工具提供的功能进行自定义监控。

感谢您的阅读和分享!我希望你学到了新东西!

©2015-2025 艾丽卡 support@alaica.com