我尝试使用命令
ls --time=atime
它在一个目录中工作,但在另一目录中不起作用。我在 vim、evince 和其他应用程序中打开了某些文件,但在命令之后文件访问时间没有改变。
当我键入时,touch file.txt
访问时间会更改,但当我键入时,vim file.txt
访问时间不会更改。
这里有什么问题吗?
答案1
使用默认挂载选项,访问时间在 Linux 上以特殊方式处理:
relatime
– 如果访问时间(在更新发生之前)早于修改时间,则使用此选项挂载的文件系统会导致访问时间被更新。这显着减少了 atime 更新引起的写入。
这relatime
mount 选项已设为默认选项自从Linux 内核 2.6.30。这就是ls --time=atime
没有列出您期望的内容的原因。
解决方案:要对 atime 使用严格(传统)行为,请使用strictatime
安装选项(例如在 中/etc/fstab
)。
笔记:要完全禁用 atime 更新,可以使用noatime
。
答案2
您可以关闭某些文件系统的访问时间记录(noatime
在 中查找/etc/fstab
)。要测试这一点,您可以尝试touch -a file; ls -l --time=atime file
,然后重复touch -a file; ls -l --time=atime file
查看它是否发生变化。
该ls
行为的解释如下man ls
:ls -l --time=atime
在日期/时间列中显示访问时间。要按此键排序,您--sort=time
还需要使用。
如果您所说的“时间未更改”意味着它显示相同的结果,那是因为文件系统禁用了 atime(请参阅 参考资料/etc/fstab
),或者因为访问时间实际上与修改时间相同(很常见)。
注意清单文件确实不是更改其访问时间 - 文件不会被 访问ls
,只有索引节点缓存。
答案3
在像这样的测试中添加标志也可能很有用--full-time
,ls
这样您就可以看到秒和亚秒,这样您就可以看到效果而不受分钟边界的限制。