Answers:
这在很大程度上取决于ls
实施。在GNU / Linux系统上找到的这4个中:
$ touch a; touch c; touch b; stat -c %y a c b
2018-01-10 12:52:21.367640342 +0000
2018-01-10 12:52:21.371640148 +0000
2018-01-10 12:52:21.375639952 +0000
GNUls
,来自GNU项目(来自GNU coreutils集合)。这是在Debian(Linux或kFreeBSD内核),Cygwin或Fedora等GNU系统上通常可以找到的那种。
$ gnu-ls -rt
a c b
在ls
从传家宝工具箱中的工具的OpenSolaris端口:
$ heirloom-ls -rt
a b c
在ls
从AT&T的开源集合,有可能建在ksh93
。另一个带有很多奇特的扩展名:
$ ast-ls -rt
a c b
$ PATH=/opt/ast/bin:$PATH ksh93 -c 'type ls; ls -rt'
ls is a shell builtin version of /opt/ast/bin/ls
a c b
busybox(在大多数(通常为嵌入式)基于Linux的系统上找到(或发现):
$ busybox ls -rt
c b a
因此,其中的GNU和ast ls
考虑了分数的第二部分。其他文件则退回到词法比较中,以便在同一秒内最后修改文件。只有busybox才能兑现那里的ls
荣誉-r
。
在我的测试中,FreeBSD ls
还支持亚秒级精度(前提是它们已在VFS级别启用,请参见vfs.timestamp_precision
sysctl)。
zsh
的om
glob (使用glob限定符对修改时间Om
进行排序,以反向顺序进行)也占用了全部时间:
$ echo *(Om)
a c b
关于GNU的ls
实现,运行ls -l
将以字母顺序对文件进行排序,并ls -lt
以修改时间的顺序对文件进行排序(从最新到最新),以底层文件系统支持的最大准确性。您可以使用--full-time
选项进行检查。
因此,要回答您的问题,是的,它可以最大程度地扩展,但仅当您使用时-t
(否则,它将默认为字母),并且正在使用支持该问题的实现(有关更多详细信息,请参阅
Stéphane的回答)。例如,在ext4
足够大的inode可以存储所需的时间戳数据的情况下,可以支持纳秒精度。
是的,它会的。
要测试,请创建两个时差很小的文件:
$ touch aa; sleep 0.2; touch bb
检查修改时间:
$ stat -c %y bb aa
2018-01-07 20:51:19.364248042 0000
2018-01-07 20:51:19.072248226 0000
该列表将使用以下差异:
$ ls -lt aa bb
-rw-r--r-- 1 user user 0 Jan 7 20:51 bb
-rw-r--r-- 1 user user 0 Jan 7 20:51 aa
有了--full-time
差别就清楚了。
$ ls -lt --full-time aa bb
-rw-r--r-- 1 user user 0 2018-01-07 20:51:19.364248042 0000 bb
-rw-r--r-- 1 user user 0 2018-01-07 20:51:19.072248226 0000 aa
bb
和aa
落后。