linux 如何知道哪些进程访问了文件?

xxhby3vn  于 2022-12-11  发布在  Linux
关注(0)|答案(3)|浏览(247)

我的操作系统是Linux。
我有一个位于/etc的文件,
其完整路径如/etc/AAA。
任何工具或命令都可以告诉我在一段时间内哪些进程访问了该文件。例如,1:10 AM,进程A write /etc/AAA 3:50 AM,进程B read /etc/AAA
我需要知道访问/et/AAA的所有进程ID

  • 谢谢-谢谢
bxgwgixi

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,但是要谨慎使用,因为如果日志过于笼统,可能会很快淹没日志。

rjee0c15

rjee0c152#

要查看哪个进程当前打开了一个文件,可以使用fuserlsof
要获得更改的历史记录,你需要运行一个进程来监视文件系统的更改。你可以使用inotify service来构建它。
相关:

ui7jx7zq

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

相关问题