网站搜索

我使用了一个简单的 Linux 命令来实时观察应用程序对我的文件所做的操作


当我设置 Linux 时,它通常会按预期运行。在后台的某个地方,它会创建文件、更新配置并构建缓存。然而,如果没有出现问题,我很少会查看这些过程的具体情况。

有一次,我想尝试不同的做法。我决定在后台实时观察一切发生的情况。所以,我使用了inotifywait命令来监控实时活动。我对这个命令的强大感到惊讶。它显示了即使是最简单的操作也会产生多个后台操作。

跟踪一切的 Linux 功能

文件活动比你想象的更容易监控

Inotify 是一个内核级子系统,于 Linux 2.6.13 版本中添加。这个功能捕捉实时的文件系统事件,并在事件发生时报告它们。它只是内核通知你文件的变化。

它会持续跟踪文件的创建、修改、删除、访问以及移动,以报告这些事件。我喜欢使用inotify的一点是,它在日常使用中只增加了最小的开销。这是因为它只是报告内核已经生成的信号;它并没有运行后台扫描程序。

你无法直接与inotify交互,这就是为什么你需要inotify-tools。它提供了两个用户空间的工具,使内核功能可以从终端使用。

组件

它的作用

inotify

生成文件系统事件的内核子系统

inotifywait

将这些事件实时传输到你的终端

inotifywatch

计算每种事件类型在设定时间段内出现的次数

在这些组件中,inotifywait 是允许访问实时监控的选项。

让你实时观看应用的一个命令

从零到实时文件跟踪,仅需几秒

要开始,你只需要一个命令来安装 inotify-tools,因为 inotify 已经在内核中。

发行版

命令

Ubuntu/德比安

sudo apt 安装 inotify-tools

费多拉

sudo dnf 安装 inotify-tools

Arch Linux

sudo pacman -S inotify-tools

openSUSE

sudo zypper 安装 inotify-tools

安装完成后,你可以通过运行 inotifywait --version 来确认它是否可以使用,然后运行 inotifywait -m ~/Documents。重要的是要包含 -m 标志,这样命令运行时,在第一次事件发生后不会退出。你会立即看到该目录的变化,在本例中是“Documents”目录。你看到的事件格式如下:被监视的目录/事件类型/触发事件的文件。例如,你可能会看到 /home/user/Documents/ MODIFY notes.txt。

一旦你有了一个事件,你可以使用一些标志来使报告更有用。

旗

目的

-m

持续运行而不是在一个事件后退出

-r

递归地查看所有子目录

-e

筛选特定事件类型,例如,-e create,modify,delete

--格式

控制输出结构以便于可读性或记录

--timefmt

为每个事件添加时间戳

这些是你将要使用的基本命令;你只需要把它们指向某个真实的东西。

当我在真实应用上使用它时实际看到的情况

你通常不会注意到的文件行为






为了查看我的电脑上会发生什么,我像平常一样使用应用程序,同时将 inotifywait 指向特定的目录。真正让我惊讶的并不是它显示的内容,而是大量的后台活动。

我从一个文本编辑器开始。当我监控我的“文档”文件夹时,我保存了一个文件。我本以为只会收到一个事件的通知,但收到的却是一连串事件。它显示了一个临时文件被创建,然后是moved_from和moved_to事件。在这一切过程中,我的文本编辑器从未直接修改原始文件。当我创建文件时,它会先写入一个临时文件,然后再替换进去。这样,即使在写入过程中发生问题,原始文件也能保持完整。

然后,我切换到 ~/.mozilla/firefox/ 目录,在那里监控 Firefox。一启动浏览器,就立即出现大量写入。几秒钟内,我就获得了用于书签和浏览历史的 places.sqlite ,以及用于打开标签页的 sessionstore.jsonlz4 。然而,我发现有趣的是,即使浏览器处于空闲状态,也会不断进行写入。这似乎是正常的浏览器行为。我在 Chrome 中也注意到了类似的空闲写入。Firefox 中大量的后台活动很重要,因为它会持续将会话数据刷新到磁盘,从而确保在崩溃后可以恢复标签页。

然而,在所有这些中,软件包安装引起的噪音最大。我在观察 /var/lib/dpkg/ 时运行了 apt install,我看到首先出现了一个 lock-frontend 文件。这是一个重要的机制,用来确保软件包操作不会同时进行。之后,在整个软件包数据库中发生了大量的写入操作。

我观察的三个目录中一致的是,从来没有单一的干净文件操作。它们都有层次。

当这在现实生活中变得真正有用时

这最初是一个实验,但只过了几次操作,inotifywait 就成为了我自然会使用的工具。它是调试配置问题的重要工具。实时监控配置目录并记录被覆盖的文件,可以在某个设置不断重置自己时给你一些清晰的认识。

当我必须评估不熟悉的软件时,我也会去使用它。我不再需要猜测软件将数据存储在哪里,因为我现在可以观察它触碰了什么。这是一种轻松的方法来发现哪些应用程序在它们预期的目录之外写入数据。

然而,如果你使用 inotifywait,要准备好应对非常多的输出。第二个限制是,虽然它显示了发生了什么变化,但并没有解释原因。话虽如此,它已经成为我管理 Linux 时使用的最有用的命令之一。

相关文章