实时查找修改的文件?

实时查找修改的文件?

我需要跟踪在任何给定时刻生成文件的任何应用程序中的文件(特别是日志文件)。这些文件可以任意命名(不一定包含log在文件名或路径中)。

我想我会使用fswatch -r /然后 grep 来处理这样的事情:

fswatch -r / | egrep --line-buffered -iv "//run|//sys"

但我发现它并没有为我既定的目标提供任何明显的输出......只看到:

...
inotify_add_watch: No space left on device
inotify_add_watch: No space left on device
inotify_add_watch: No space left on device
/
/
/
/
^C
$

在这种情况下什么会起作用?我并没有真正致力于使用,fswatch所以我对任何想法或解决方案持开放态度,以找到在任何给定时刻修改此类文件的方法。

请注意,我也不太关心“spew”,因为一旦我看到它们出现在控制台中,我应该能够很快找到它们,但我只想了解 FS 上发生的任何事情,这样我就可以砍掉不重要的东西。

答案1

安装并配置incrontab

incron 是一个守护进程,它监视文件系统事件并执行系统和用户表中定义的命令。

在下面添加用户/etc/incron.allow(允许用户使用incrontab),用于incrontab -e编辑文件。

用法 :

path mask command

path= 文件路径

mask= 参见man inotify | less +/'inotify events'

command= 要执行的命令,在您的情况下,它可能只是一条消息,允许您过滤结果syslog以了解文件修改的确切时间。

e,g:要监视 a file,请使用:

/path/to/file IN_MODIFY "message: your file is accessed"

如果通过修改访问文件,您将在下面找到一条消息/var/log/syslog或键入jounalctl -xe

输出示例:

# grep "message: your" /var/log/syslog

Nov 22 10:05:04 hostname incrond[2263]: (USER) CMD ("message: your file is accessed")

编辑

可以监视特定文件夹下的所有文件。这是一条示例消息,允许您 列出正在更新的所有文件

path/to/folder IN_MODIFY echo "$$ $@ $# $% $&"

该命令可能包含以下通配符:

$$ - a dollar sign
$@ - the watched filesystem path (see above example)
$# - the event-related file name
$% - the event flags (textually)
$& - the event flags (numerically)

Archlinux:incron

如何使用 Incron 监控重要文件和文件夹

相关内容