我需要跟踪在任何给定时刻生成文件的任何应用程序中的文件(特别是日志文件)。这些文件可以任意命名(不一定包含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)