为什么按访问时间排序文件不起作用?


12

我尝试使用命令 ls --time=atime

它在一个目录中工作,但不在另一个目录中工作。我在vim,evince和其他应用程序中打开了某些文件,但是命令文件的访问时间没有改变。

当我键入时touch file.txt,访问时间会更改,但是当我键入时vim file.txt,访问时间不会更改。

怎么了


您正在运行什么操作系统?许多现代的Linux发行版都会关闭。在最新的Linux内核中,默认情况下处于关闭状态。
吉尔(Gilles)“所以,别再邪恶了”,

我正在运行Ubuntu 10.04。
xralf 2011年

跑步后你会做什么vim file.txt?您是通过:q还是退出vim :wq?如果您不写,vim则不会修改文件的访问时间-这是设计使然。
rozcietrzewiacz 2011年

现在目录中的文件较少,并且访问时间已通过vim更改,并且不需要编辑文件,但是当我打开.jpg扩展名为的文件时,它并没有更改。当我在图像查看器中打开它时,它也没有改变。每次应用程序读取文件时,我都需要更改访问时间。
xralf 2011年

Answers:


14

使用默认的安装选项,在Linux上以特殊方式处理访问时间:

relatime–如果文件系统挂载(在发生更新之前)早于修改时间,则使用此选项安装的文件系统将导致更新访问时间。这大大减少了因时间更新而引起的写入。

Linux内核2.6.30 relatimemount选项已成为默认选项。这就是不列出您期望的原因。ls --time=atime

解决方案:要在一段时间内使用严格的(旧版)行为,请使用strictatimemount选项(例如中的/etc/fstab)。

注意:要完全禁用即时更新,可以使用noatime


这有帮助。谢谢。系统将运行多慢strictatime
xralf 2011年

atime升级非常昂贵(每次访问文件内容时,都需要进行一次计划的磁盘访问来更新inode)。特别是,如果涉及许多小文件,则及时更新可能会使光盘负载增加一倍。在大多数情况下,依赖于访问时间的程序只想检查atime是否大于mtime。因此,新的默认选项relatime保留了这些程序的兼容性。实际上,很少有程序仍然依赖于此,并且通常可以安全使用noatime
斯特凡希门尼斯

我喜欢strictatime今天尝试使用的功能,但是,如果它会使系统变慢strictatime,则可能的话,我只想在某些目录中进行设置。
xralf

1
实际上,在高磁盘负载的服务器上,它最多慢1%或2%,可能最多5%。好吧,如果您真的很在意性能,则可以使用专用的fs挂载strictatime到该目录作为挂载点,从而限制对特定目录的实时更新。
斯特凡希门尼斯

2

您可以关闭某些文件系统访问时间记录(寻找noatime/etc/fstab)。要对此进行测试,您可以尝试touch -a file; ls -l --time=atime file,然后重复touch -a file; ls -l --time=atime file以查看它是否更改。

ls行为的解释如下man lsls -l --time=atime在日期/时间列中显示访问时间。要按此键排序,您也需要使用--sort=time

如果您用“时间没有改变”来表示它显示相同的结果,那是因为文件系统禁用了atime(请参阅参考资料/etc/fstab),或者是因为访问时间实际上与修改时间相同(很常见)。

请注意,列出文件并没有改变他们的访问时间-该文件不被访问ls,只有inode缓存


当我键入时ls -l --time=atime,时间没有改变(我假设带有时间的列是atime)并且排序顺序没有改变,last atime的文件应该在列表的开头或结尾(如果它们是最后访问的) )。
xralf 2011年

@xralf您是否同时重复 touchls?我编辑了答案以使其更明显。
rozcietrzewiacz 2011年

当我输入touch file.txt时,访问时间会更改,但是当我输入vim file.txt时,访问时间不会更改。
xralf 2011年

1

在像这样进行测试时,将--full-time标记添加到,ls这样您可能会看到几秒钟和几秒钟的时间,这样您就可以看到效果而不受分钟边界的限制,这也可能很有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.