我的操作系统是Linux。我有一个位于/etc的文件,其完整路径如/etc/AAA。任何工具或命令都可以告诉我在一段时间内哪些进程访问了该文件。例如,1:10 AM,进程A write /etc/AAA 3:50 AM,进程B read /etc/AAA我需要知道访问/et/AAA的所有进程ID
bxgwgixi1#
linux审计系统可以帮助您,并将提供详细信息:这里是Redhat网站上的一些documentation,但应该可以适应其他linux变体。大多数发行版都有审计系统,但可能是可选安装。(也可以参见下面命令的手册页)假设审计子系统已经在运行,您可以添加一个规则来监视对示例文件的读访问,如下所示:
auditctl -w /etc/AAA -p r -k mywatch
(-w指定要监视的文件,-p指定要监视的活动[在本例中为read],-k是一个任意键,可用于以后查找记录)然后,您可以使用以下命令查看结果:
ausearch -k mywatch
或查看audit.log文件(在某些系统上位于/var/log/audit中)限制条件:请注意,文件系统监视(使用-p)仅记录文件的打开(具有读或写权限),而不是单个读/写调用的时间。例如,阅读/写一个大文件,否则会生成太多的日志消息,并占用日志文件空间,所以它不会这样做,它只是记录文件的打开。所以,理论上,一个长时间运行的守护程序,在启动时可以打开文件进行写入(这将被记录),但在几天后才写入(不会被记录)。不过,它对于观察对文件进行快速更改的短期程序应该是有用的。如果您确实想观察单个调用,可以使用-S选项来观察syscalls,但是要谨慎使用,因为如果日志过于笼统,可能会很快淹没日志。
rjee0c152#
要查看哪个进程当前打开了一个文件,可以使用fuser和lsof。要获得更改的历史记录,你需要运行一个进程来监视文件系统的更改。你可以使用inotify service来构建它。相关:
fuser
lsof
ui7jx7zq3#
统计可以提供一些信息;
$ stat test.txt File: `test.txt' Size: 166 Blocks: 1 IO Block: 65536 regular file Device: 6a81ccb1h/1786891441d Inode: 6755399442667785 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ PC_01) Gid: ( 513/ None) Access: 2014-07-16 16:03:18.208462800 +0200 Modify: 2014-07-16 16:03:18.209462900 +0200 Change: 2014-07-16 16:03:18.209462900 +0200 Birth: 2014-07-16 16:03:18.208462800 +0200
3条答案
按热度按时间bxgwgixi1#
linux审计系统可以帮助您,并将提供详细信息:
这里是Redhat网站上的一些documentation,但应该可以适应其他linux变体。大多数发行版都有审计系统,但可能是可选安装。(也可以参见下面命令的手册页)
假设审计子系统已经在运行,您可以添加一个规则来监视对示例文件的读访问,如下所示:
(-w指定要监视的文件,-p指定要监视的活动[在本例中为read],-k是一个任意键,可用于以后查找记录)
然后,您可以使用以下命令查看结果:
或查看audit.log文件(在某些系统上位于/var/log/audit中)
限制条件:请注意,文件系统监视(使用-p)仅记录文件的打开(具有读或写权限),而不是单个读/写调用的时间。例如,阅读/写一个大文件,否则会生成太多的日志消息,并占用日志文件空间,所以它不会这样做,它只是记录文件的打开。所以,理论上,一个长时间运行的守护程序,在启动时可以打开文件进行写入(这将被记录),但在几天后才写入(不会被记录)。不过,它对于观察对文件进行快速更改的短期程序应该是有用的。如果您确实想观察单个调用,可以使用-S选项来观察syscalls,但是要谨慎使用,因为如果日志过于笼统,可能会很快淹没日志。
rjee0c152#
要查看哪个进程当前打开了一个文件,可以使用
fuser
和lsof
。要获得更改的历史记录,你需要运行一个进程来监视文件系统的更改。你可以使用inotify service来构建它。
相关:
ui7jx7zq3#
统计可以提供一些信息;