有没有办法“查看”(或)“存储”文件历史记录(类似于浏览器历史记录)。例如,如果我有 10 个文件,并且我打开了其中 2 个,则以下 2 个详细信息应存储在一个文件中:
<name-of-file-opened> <date-and-time>
每当我打开文件时,这种情况都会发生。因此,当我打开该特定历史文件时,我可以看到我打开过的所有文件(不一定是编辑过的——只要我打开过就行)。
我知道lsof
是查看所有列表现在打开文件,但是有没有办法获取“历史记录”。如果没有内置命令,是否可以为同一目的创建自定义命令?
答案1
我也会提到inotifywait
这种可能性。它通常可以在inotify-tools
包中找到(例如在 Ubuntu 下sudo apt install inotify-tools
)。
我假设你想监视特定目录中的文件,因为监视一切会有点让人不知所措。Linux 会不断读取和写入文件,因此您很快就会有数百个条目。即使只是监控类似的东西也/etc
可能太多了,因为有太多进程需要读取那里的信息。
例如,假设您想要监视 中的所有内容$HOME/projects
。可以使用以下方法完成此操作:
inotifywait -d -o ~/projects-access.log --format "%w%f %T" --timefmt "%c" -e open "$HOME/projects"
这将运行inotifywait
:
- 在背景中(
-d
) - 输出至
~/projects-access.log
- 使用您在 Unix 和 Linux 问题中要求的格式(“”)
- 对于在以下位置访问(打开)的所有文件
~/projects
请man inotifywait
参阅详情。
警告:在 WSL 下,这仅适用于 ext4 文件系统中的文件。它不适用于 NTFS 驱动器上的文件(即 下的任何文件/mnt/c
等)。WSL2 目前不通过用于从 WSL 访问 Windows 驱动器的 9P 协议提供对 inotify 的支持。
我相信 harrymc 的回答也同样如此auditctl
,但我还没有测试过以确保。
答案2
Linux 不跟踪文件历史信息。
您将需要配置审计来跟踪特定文件的更改。
一些说明:
- 审计仅进行未来的变更
- 审计已删除的文件可能会导致守护进程出现问题。
寻找 审计控制。
一些随机参考(还可以找到更多):