上次打开文件

stu*_*ent 117 ls date files

是否可以获取上次打开文件的时间并按这些时间对目录中的所有文件进行排序?

mat*_*tdm 210

这完全取决于您所说的“打开”是什么意思,但总的来说,是的。通常记录三个时间戳:

  • mtime— 当文件内容改变时更新。在大多数情况下,这是“默认”文件时间。
  • ctime— 在文件或其元数据(所有者、权限)更改时更新
  • atime — 读取文件时更新

所以,一般来说,你想看到的是atime一个文件的。您可以使用stat或获得它ls。您可以使用它ls -lu来执行此操作,尽管我更喜欢使用ls -l --time=atime(几乎所有现代 Linux 发行版都应该支持),因为我不经常使用它,而且当我使用它时,我能更好地记住它。并排序按时间,将添加-t标志LS。所以你去。

不过,有一个很大的警告。每次读取文件时更新 atime 会导致大量通常不必要的 IO,从而减慢一切。因此,大多数 Linux 发行版现在默认使用noatime文件系统挂载选项,它基本上会杀死 atimes,或者 else relatime,它仅在超过限制(通常每天一次)或自上次读取后实际修改文件时才更新 atime。您可以通过运行mount命令来查看这些选项是否处于活动状态。

另请注意,访问时间是按 inode 计算的,而不是按文件名计算的,因此如果您有硬链接,则从其中读取将更新引用同一文件的所有名称。

并且,请注意c不是“创造”;Unix/Linux 文件系统不跟踪创建,这看起来很奇怪但实际上是有道理的,因为文件系统无法知道它是否是原始文件——也许文件是四十年前创建的并复制到这里。而且,事实上,许多文件编辑器通过复制原始文件来工作。如果您需要这些信息,最好使用像git.

  • 如果可以的话,我会给你超过+1,只是因为没有将 ctime 称为“创建时间”。 (11认同)
  • 根据 mount 手册页,*relatime* 与每日限制无关,但只查看 atime *relative* 到 mtime 和 ctime。如果 atime 早于 mtime 或 ctime,则更新 atime。如果 atime 比两者都新,那么它就不管了。这样做的目的是保留 atime 和 mtime / ctime 之间的*关系*,因为某些应用程序使用该信息,例如 mutt 来查看自上次更新以来它是否已读取您的邮箱。 (2认同)

Sha*_*off 22

ls -ltu 列出所有文件,按访问时间显示和排序。

来自man ls

-u     with -lt: sort by, and show, access time with -l: show access
       time and sort by name otherwise: sort by access time
Run Code Online (Sandbox Code Playgroud)