![令人困惑的 ls 命令:“ls -t”与“ls -u”](https://linux22.com/image/195132/%E4%BB%A4%E4%BA%BA%E5%9B%B0%E6%83%91%E7%9A%84%20ls%20%E5%91%BD%E4%BB%A4%EF%BC%9A%E2%80%9Cls%20-t%E2%80%9D%E4%B8%8E%E2%80%9Cls%20-u%E2%80%9D.png)
在 Unix 中ls -l
给我们提供了一长串文件和目录。
ls -lt
此外排序按时间排列的文件,即最后更改或修改的文件。这与ls -lu
提供长列表和访问时间并从 az 排序文件而不是按上次访问排序的文件不同 。我希望ls -lu
按访问时间对文件进行排序,但为此我需要:
ls -lut
以长格式给出列表,打印访问时间,并按访问时间排序。
ERGO,
-t
必须表示按时间排序,修改时间或访问时间,而,
-u
仅表示列表访问时间。它并不意味着按访问时间进行列表和排序。那么没有任何进一步的争论,-t
似乎意味着按修改时间列出并排序按修改时间。以上是否正确。如果不是,我哪里出错了?
答案1
这ls
手册页可以帮助澄清这些选项。
该-l
选项控制输出格式,生成“长”列表。
该-t
选项按修改时间排序。该值已经以长格式存在。
-u
根据所使用的选项,该选项的行为有所不同。
- 就其本身而言, as
ls -u
,它按访问时间排序。 - 使用该
-l
选项,它会显示访问时间,但按名称排序。在这种情况下,它充当输出修饰符而不是排序选项。 - 使用
-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
.
ls
GNU 系统的文档将其总结为
-u
with
-lt
:按访问时间排序并显示; with-l
:显示访问时间并按名称排序;否则:按访问时间排序,最新的在前
这段简短的文字中没有提到的是,任何其他提供相似的输出格式为-l
,例如-o
,-g
和,也会像这样做一样从选项-n
中删除排序效果。这些选项在 GNU 手册中都有文字“like but, ...” 。-u
-l
-l
ls
-c
GNU 中的选项以ls
类似的方式依赖于其他选项来对 ctime 时间戳进行排序/显示。
GNUls
就是这样工作的自1999年以来或左右。
无论ls
您使用哪种实现,要按时间戳对长格式输出进行排序,您都必须使用-t
.用于-l -ut
按 atime 排序、-l -ct
按 ctime 排序或仅-l -t
按 mtime 排序。
答案3
-t
方法种类按时间——某个时间字段。
-u
意味着使用访问时间而不是修改时间(用于显示和/或排序(如适用)。
所以你的理解是正确的;你只是让事情变得更复杂,让自己感到困惑。退后一步,深吸一口气,你会发现事情并没有那么复杂。
PS请注意-t
没有-l
(或类似的选项,如-o
或-g
)不会展示任何时间字段。