在Linux中如何查找文件是否被读取以及读取时间

在Linux中如何查找文件是否被读取以及读取时间

是否有工具或命令可以让我们查看文件是否被读取以及读取时间?我只会找到最后修改的。

答案1

statls -lu用于查找上次访问时间,其中包括上次读取或以其他方式访问的时间,包括使用catawksedgrepvimlesstailhead等工具。

如果通过读取,您指的是特定的东西,例如使用cat或文本编辑器,例如在标准输出中实际查看其全部内容,那么除了设置和检查审核日志vim之外,没有办法判断这是否已完成auditd如果你没有这个,请浏览所有曾经访问过它的 shell 历史记录,假设它甚至存在,这显然是不可行的。唯一可以确定的是访问时间。如果您考虑在任何时候读取文件,无论数量和方法如何,我给出的任何一个命令都可以做到这一点。

[nasir-rocky@rocky-linux ~]$ stat test
  File: test
  Size: 12              Blocks: 8          IO Block: 4096   regular file
Device: fd02h/64770d    Inode: 145         Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/nasir-rocky)   Gid: ( 1000/nasir-rocky)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2023-05-29 18:54:53.740411288 -0400
Modify: 2023-05-29 18:54:50.254416606 -0400
Change: 2023-05-29 18:54:50.254416606 -0400
Birth: 2023-02-09 17:38:42.636002933 -0500

这是ls -u(我用作ll -u别名,但它做了同样的事情)

[nasir-rocky@rocky-linux ~]$ ll -u test
-rw-r--r--. 1 nasir-rocky nasir-rocky 12 Sep 19 07:33 test

请注意它与仅显示修改时间的ll或有何不同ls -l

[nasir-rocky@rocky-linux ~]$ ll test
-rw-r--r--. 1 nasir-rocky nasir-rocky 12 May 29 18:54 test

答案2

大多数 Linux 文件系统不仅更新和存储修改时间属性,还记录文件访问时间 ( atime)。

笔记:atime 时间戳的精确程度,或者它是否可用/更新,这取决于所使用的文件系统和安装选项noatimestrictatime等等relatime

显示 atime 属性的方法有很多种,其中ls旗帜 -u和或--time=atime 或者例如stat命令。

stat .bashrc

  File: ‘.bashrc’
  Size: 231         Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d    Inode: 262277      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/  hbruijn)   Gid: ( 1000/  hbruijn)
Context: system_u:object_r:user_home_t:s0
Access: 2023-09-01 12:59:34.648395490 +0200
Modify: 2016-12-07 00:19:33.000000000 +0100
Change: 2017-09-25 14:15:35.152000000 +0200
 Birth: -

要查明谁访问了文件,通常需要使用auditd(提前)设置审核,以及获取每次访问文件的全面记录。

答案3

怎么找如果文件被读取,以及读取时间

审计

在该特定文件上设置监视规则/etc/audit/rules.d/audit.rules,例如

-w  /opt/something/somefile    -p r    -k ABC123
  • -k是一个将显示在 中的键名称/var/log/audit/audit.log,因此请使用可以轻松在其中进行文本搜索的唯一名称audit.log
  • -p权限标志,用于r读取;这里所有可以使用的选项都是rwxa用于读取、写入、执行、更改属性

可能还有其他方法可以执行审核规则来完成您所要求的任务,但是根据您特别要求的内容(仅在读取时),那么仅r监视类型的审核规则上的标志似乎是最好的方法。

audit.log该行条目中,具有唯一键名称(在我的示例中为 ABC123)将指示每一个该文件被读取/写入/执行/attributes_changed 的​​时间。并且还将包含由谁、进程 ID、一大堆 sh..info。

唯一的缺点是audit.log中的时间戳采用纪元格式{自1970年1月1日以来的秒数},因此您必须将其转换为人类格式。

相关内容