问题是我无法跟踪我的所有文件,而且我也厌倦了不告诉哪些文件是重要的,哪些是临时文件,一些随机程序员认为它作为隐藏文件看起来不错文件在我的主文件夹中。
我保留副本并整理驱动器,但有时会发生混乱。
为此,我认为每次文件更改或创建时帮助我创建和修改 xattrs 的东西会非常有帮助。
我尝试创建一个基于 inotify 的服务,但问题是它的低级描述没有多大帮助,我需要更多的开发来确保它是可能的,但我怀疑它不是。
这个想法是记录哪个应用程序创建了 foo,何时,为什么,在哪里,何时从哪里移动到哪里,何时从哪里复制到哪里,它有多少副本,它们在哪里,删除了哪些文件从它的目录等
可能我对文件系统的要求太多了,但是你能给我一些想法吗?
答案1
这个想法是记录哪个应用程序创建了 foo,何时,为什么,在哪里,何时从哪里移动到哪里,何时从哪里复制到哪里,它有多少副本,它们在哪里,删除了哪些文件从它的目录等
“哪个应用程序创建了
foo
”:传统上类 Unix 系统仅跟踪哪个应用程序用户拥有该文件(最初与创建该文件的用户相同,但系统管理员操作可能会改变这一点),并且应用程序在这个意义上被视为用户意愿的扩展。“when [created]”:为此,您需要一个具有创建时间支持的文件系统,就像
crtime
受特定 Linux 文件系统支持一样。并非所有类 Unix 文件系统都具有:三个经典时间戳ctime
= 文件元数据上次更改的时间,mtime
= 文件内容上次修改的时间,以及atime
= 文件上次访问的时间。与这三个不同,crtime
它在用户空间工具中的支持非常有限。“为什么[创建]”:哦,你也想要一些目的论吗?这是一个棘手的问题。本质上,您需要有一个与文件关联的元数据字段,并且所有应用程序在创建文件时都必须用有意义的信息填充它。操作系统不能只知道为什么应用程序想要创建一个特定的文件,除非以某种方式告诉它,并且应用程序无法知道为什么用户想要创建一个文件,除非它询问用户。但我想您可能只希望将其作为一种广泛的类别,例如“临时文件”,“应用程序配置文件”,“用户文档文件”等。即便如此,您可能需要更新整个操作系统和所有应用程序来全面落实这一举措。
“where”:嗯,知道文件在哪里是文件系统的一个非常基本的属性。但您似乎需要某种审核日志。
“当它从哪里移动到哪里时”:请注意,移动只能被识别为这样在单个文件系统内。文件系统之间的移动本质上是复制+删除操作,正如您所发现的,就操作系统而言,本质上是“从文件 A 读取;写入文件 B;删除文件 A”。除非您信任应用程序执行此操作并且知道其目的专门是复制/移动内容,否则应用程序可能会在读取和写入操作之间以某种方式修改数据,而操作系统不知道该修改。
为了完全实现您的目标,您可能需要编写一个全新的操作系统,其中所有相关的文件管理 API 都经过重新设计,以跟踪每个文件的祖先和目的。
如果您认真对待这一点,您可能想首先看一下 SELinux 和/或其他强制访问控制系统,并了解贝尔-拉帕杜拉模型。这些旨在跟踪文件的安全状态,而不是其祖先和目的论,但您可能会从它们那里得到一些关于如何实现此类跟踪的想法。