`ls -lt`は正確なmtimesに従うのでしょうか、それとも秒単位までのおおよそのmtimesに従うのでしょうか?


10

ls -l2番目までのファイルの変更タイムスタンプのみを表示します。2つのファイルの秒までのタイムスタンプが同じであるが、正確に同時に変更されなかっls -ltた場合、ファイルは正確なmtimesの順序でファイルを並べ替えます。任意)?

回答:


17

それは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
    
  • 家宝Toolchest、OpenSolarisのツールのポート:ls

    $ heirloom-ls -rt
    a  b  c
    
  • AT&Tのオープンソースのコレクション、多分に建てられました。かなりの数の豪華な拡張機能を持つ別のもの:lsksh93

    $ 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は1秒未満の精度もサポートしています(VFSレベルで有効になっている場合、vfs.timestamp_precisionsysctlを参照)。

zshomグロブ(グロブ修飾子を使用して、変更時に順序付けOm、逆の順序で)にも全時間がかかります。

$ echo *(Om)
a c b

[ file1 -nt file2 ]、サポートされている場合は、一般に1秒未満の粒度もサポートされます。


1
非GNUツールはPOSIXに違反していますか、それともソートの丸めを指定していますか?
ケビン

2
ast-lsとは何ですか?
Random832

@ Random832、編集を参照してください。
ステファンChazelas

2
@Kevin、私の仕様の読み取りから、それらはその点で準拠していません。AFAICT、仕様ではサブセカンドの部分を無視できるものは何もありません。POSIXは正確なタイムスタンプを取得するための明確なAPIを提供します。
ステファンChazelas

1
@ikkachu、あなたは正しい。気づかなかった。編集を参照してください。それはastの結果を変えます。
ステファンChazelas

4

GNUのls実装に関しては、running ls -lはファイルをアルファベット順に並べ替え、ls -ltファイルを変更時刻順に、基本となるファイルシステムでサポートされる最大の精度で並べ替えます。--full-timeオプションを使用してこれを確認できます。

だから、あなたの質問に答えるには、はい、できる限り拡張しますが、-tそれを使用する場合(そうでない場合はデフォルトでアルファベット順)で、それをサポートする実装を使用している場合(詳細については、 ステファンの回答を参照)。たとえばext4、必要なタイムスタンプデータを格納するのに十分な大きさのiノードを指定すると、ナノ秒の精度をサポートできます。


2
あなたはそれがGNU lsについてのみ話しているというあなたの答えに加えるべきです。動作が異なる可能性のある実装は他にもたくさんあります。
Roland Illig

追加された@RolandIllig
Joe

1

の出力を比較すると、

ls -lat

そして

ls -lat --full-time

ソートについては恣意的なことは何もありません。


1

はい、そうです。

テストするには、わずかな時間差で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

最後のブロックで、私はあなたが持っているbbと信じていますaa
Alex
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.