使用的inotify来跟踪所有文件的一个系统(Using inotify to keep track

2019-09-17 03:29发布

题:

可以inotify可以用于在[Linux的]系统可靠地记录文件?

细节:

我试图用inotifywait用户的运动跟踪(目前使用bash,但它已建议我迁移到一个脚本语言)。 最后,我想在创建新的文件添加到数据库( createmoved_from在后的文件修改(数据库),更新现有的行modifyattribmove_to ),最后在删除文件删除行( delete )。 我,但是,当运行到许多问题,甚至看似简单的保存动作,产生许多inotifywait消息。 注意下面的命令和它们的输出(注意,使用/home/user/纯粹是为了举例):

例子:

例1:倾听文件创建:

$ inotifywait -mr /home/user/ -e create  --format %w:%f:%e:%T --timefmt %T

触摸:

$touch test.txt
/home/user/:test.txt:CREATE:21:35:30

打开一个新的文件,然后VIM问题:w命令:

$vim test2.txt
/home/user/:test2.txt:CREATE:21:35:30

与当时VIM问题打开现有的文件:w命令:

$vim test2.txt
/home/user/:4913:CREATE:21:35:30
/home/user/:test2.txt:CREATE:21:35:30

用gedit打开一个新的文件,然后点击保存:

$gedit test3.txt
/home/user/:test3.txt~:CREATE:21:35:30

用gedit打开现有的文件,然后点击保存:

$gedit test3.txt
/home/user/:.goutputstream-HN3ZDW:CREATE:21:35:30
/home/user/:test3.txt~:CREATE:21:35:30

需要注意的是,不仅是显示为具有本创建(两个新文件4913.goutputstream-HN3ZDW ),而且还正在创建的唯一文件是test3.txt~不是 test3.txt即使文件, test3.txt创建当与所检查的ls命令。 为了完整起见,这里是上面的例子,但有一些更多的选择。

实施例1:监听文件的创建,修改,deltion,和运动:

$ inotifywait -mr /home/user/ -e create -e modify -e delete -e moved_to -e moved_from --format %w:%f:%e:%T --timefmt %T

触摸:

$touch test.txt
/home/user/:test.txt:CREATE:21:35:30

开一个新的文件,然后VIM问题:w命令:

$vim test2.txt
/home/user/:test2.txt:CREATE:22:12:32

与当时VIM问题打开现有的文件:w命令:

$vim test2.txt
/home/user/:4913:CREATE:22:04:35
/home/user/:4913:DELETE:22:04:35
/home/user/:test2.txt:MOVED_FROM:22:04:35
/home/user/:test2.txt~:MOVED_TO:22:04:35
/home/user/:test2.txt:CREATE:22:04:35
/home/user/:test2.txt~:DELETE:22:04:35

用gedit打开一个新的文件,然后点击保存:

$gedit test3.txt
/home/user/:test3.txt~:CREATE:21:35:30

用gedit打开现有的文件,然后点击保存:

$gedit test3.txt
/home/user/:.goutputstream-0WQ2DW:CREATE:22:06:34
/home/user/:test3.txt~:CREATE:22:06:34
/home/user/:.goutputstream-0WQ2DW:MOVED_FROM:22:06:34
/home/user/:test3.txt:MOVED_TO:22:06:34

基本上,我的问题是“是否有可能使用inotify来更新数据库中的文件”? 例如,如果用户编辑文件并保存它,我想这反映在数据库中更新该文件,而不是一个全新的文件替换一个完全不同的文件。 任何帮助将不胜感激,哪怕是我指点的方向不同的建议。

Answer 1:

inotify告诉你会发生什么样的它发生。

gedit中,最喜欢的编辑器,通过写一个临时文件,然后将该文件移动到的地方保存。 这避免了与覆盖的情况下,编辑或整个系统崩溃半书面版本的文件,而该文件被写入。 Vim中采用不同的方法(这是可以配置的,我就不赘述了-见,例如为什么当我们在“六”编辑器中编辑的inode值变化? ):它首先创建一个临时备份文件,然后写入新文件。

如果您希望这些被记录为单张编辑的事件,你必须在偶数登录执行一些模式识别。 创建一个写-移动序列替换现有文件和创建 - 移动 - 创建删除序列像vim的将是自己的原始模式。 请注意,模式可能与其他事件交错。

我有一个怀疑,有一个更好的方法做你想做的事,但我不明白你想要做什么。 如果你想记录用户的操作,你已经找到了一种方法,但也有更简单的方法: loggedfs或审计子系统 。 如果您想保留所有文件版本的备份,无论是挂钩的编辑器,版本控制系统(这可以让用户控制哪些获取备份),或使用一个版本的文件系统 ,如copyfs 。 你甚至可以直接存储在数据库中的文件,通过使用类似文件系统mysqlfs或postgresqlfs (诚然既不项目看起来保持)。



文章来源: Using inotify to keep track of all files in a system