ls -l
は、秒までのファイルの変更タイムスタンプのみを表示します。 2つのファイルのタイムスタンプが2番目まで同じであるが、正確に同時に変更されていない場合、ls -lt
正確なmtimesの順序でファイルを順序付けますか、または最大で秒までのおよそmtimesだけです(したがって、ファイル間の順序は任意です)?
それは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
GNU ls
、GNUプロジェクトからのもの(GNUcoreutilsコレクション)これは、GNU Debian(LinuxまたはkFreeBSDカーネル)、Cygwin、Fedoraなどのシステムで一般的に見られるものです。
$ gnu-ls -rt
a c b
OpenSolarisツールの移植版である Heirloom Toolchest のls
:
$ heirloom-ls -rt
a b c
AT&Tオープンソースコレクション のls
は、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
は秒の小数部を考慮します。その他は、同じ秒以内に最後に変更されたファイルの字句比較にフォールバックします。busyboxls
は-r
を尊重します。
私のテストでは、FreeBSDのls
も1秒未満の精度をサポートしています(VFSレベルで有効になっている場合、vfs.timestamp_precision
sysctlを参照)。
zsh
のグロブ(変更時間に順序付けするom
グロブ修飾子、逆の順序にOm
を使用)にも全時間がかかります。
$ echo *(Om)
a c b
GNUのls
実装に関しては、ls -l
を実行するとファイルがアルファベット順に並べ替えられ、ls -lt
を使用するとファイルが変更時刻順に新しい順に並べられ、基礎となるファイルシステム。これは、--full-time
オプションを使用して確認できます。
したがって、あなたの質問に答えるために、はい、最大限に拡張できますが、-t
を使用する場合(そうでない場合は、デフォルトでアルファベット順になります)で、それをサポートする実装を使用している場合のみ (詳細についてはステファンの答え )。たとえば、ext4
は、必要なタイムスタンプデータを格納するのに十分な大きさのiノードがある場合、ナノ秒の精度をサポートできます。
の出力を比較すると、
ls -lat
そして
ls -lat --full-time
ソートについては恣意的なことは何もありません。
はい、そうです。
テストするには、わずかな時間差で2つのファイルを作成します。
$ 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