令人困惑的 ls 命令:“ls -t”与“ls -u”

令人困惑的 ls 命令:“ls -t”与“ls -u”

在 Unix 中ls -l给我们提供了一长串文件和目录。 ls -lt此外排序按时间排列的文件,即最后更改或修改的文件。这与ls -lu提供长列表和访问时间并从 az 排序文件而不是按上次访问排序的文件不同 。我希望ls -lu按访问时间对文件进行排序,但为此我需要: ls -lut以长格式给出列表,打印访问时间,并按访问时间排序。

ERGO, -t必须表示按时间排序,修改时间或访问时间,而, -u仅表示列表访问时间。它并不意味着按访问时间进行列表和排序。那么没有任何进一步的争论,-t似乎意味着按修改时间列出并排序按修改时间。以上是否正确。如果不是,我哪里出错了?

答案1

ls手册页可以帮助澄清这些选项。

-l选项控制输出格式,生成“长”列表。

-t选项按修改时间排序。该值已经以长格式存在。

-u根据所使用的选项,该选项的行为有所不同。

  1. 就其本身而言, as ls -u,它按访问时间排序。
  2. 使用该-l选项,它会显示访问时间,但按名称排序。在这种情况下,它充当输出修饰符而不是排序选项。
  3. 使用-l-t,它显示访问时间并按其排序。

-c选项与 ctime 属性的工作方式相同。

复杂性来自于需要修改长列表格式。其他几个选项也以这种方式工作:-lo抑制组信息、-lG抑制所有者信息、-lh以人类可读的格式显示大小等等。


GNU 风格的选项来自ls手动的使这更容易理解。

-l--format=long

-t--sort=time

-u--time=atime

亦是如此。-lu--format=long --time=atime也就是说,显示长列表,但使用 atime 而不是默认的 mtime。

并且-ltu--format=long --sort=time --time=atime。在本例中,显示 atime 并按它排序。

答案2

您基本上是正确的,-t意味着“按时间排序”,-u意味着“使用 atime 时间戳”(当使用 排序-t或使用 显示时间戳时-l)。 POSIX-u选项并不意味着更改默认的排序顺序,除非-t还用于显式请求按时间戳排序。

POSIX 规范ls其中包含以下文本:

-u

使用上次访问时间(请参阅 XBD <sys/stat.h>)而不是上次修改文件进行排序 ( -t) 或写入 ( -l)。

ls -u然而,GNU 人认为让也方便种类by atime,否则ls -u和的输出之间不会有任何差异ls(两者都将按名称排序,并且不会显示时间戳)。这就是为什么 GNU 的ls工作方式不同于任何其他系统的ls.

lsGNU 系统的文档将其总结为

-u

with -lt:按访问时间排序并显示; with -l:显示访问时间并按名称排序;否则:按访问时间排序,最新的在前

这段简短的文字中没有提到的是,任何其他提供相似的输出格式为-l,例如-o-g和,也会像这样做一样从选项-n中删除排序效果。这些选项在 GNU 手册中都有文字“like but, ...” 。-u-l-lls

-cGNU 中的选项以ls类似的方式依赖于其他选项来对 ctime 时间戳进行排序/显示。

GNUls就是这样工作的自1999年以来或左右。

无论ls您使用哪种实现,要按时间戳对长格式输出进行排序,您都必须使用-t.用于-l -ut按 atime 排序、-l -ct按 ctime 排序或仅-l -t按 mtime 排序。

答案3

-t方法种类按时间——某个时间字段。

-u意味着使用访问时间而不是修改时间(用于显示和/或排序(如适用)。

所以你的理解是正确的;你只是让事情变得更复杂,让自己感到困惑。退后一步,深吸一口气,你会发现事情并没有那么复杂。

PS请注意-t 没有-l (或类似的选项,如-o-g)不会展示任何时间字段。

相关内容