akankah `ls -lt` mengikuti mtimes yang akurat atau hanya perkiraan mtimes hingga detik?

10

ls -lhanya menampilkan stempel waktu modifikasi file hingga detik. Jika dua file memiliki stempel waktu yang sama hingga detik, tetapi dimodifikasi tidak tepat pada waktu yang sama, akan ls -ltmemesan file dalam urutan mtimes yang akurat atau hanya perkiraan mtimes hingga detik (dan oleh karena itu urutan antara file dapat sewenang-wenang)?

Tim
sumber

Jawaban:

17

Itu sangat tergantung pada lsimplementasinya. Dari 4 yang ditemukan pada sistem GNU / Linux di sini:

$ 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 , yang dari proyek GNU (dari koleksi GNU coreutils ). Itu yang biasanya ditemukan pada sistem GNU seperti Debian (Linux atau kernel kFreeBSD), Cygwin atau Fedora.

    $ gnu-ls -rt
    a  c  b
    
  • Yang lsdari Heirloom Toolchest , port alat OpenSolaris:

    $ heirloom-ls -rt
    a  b  c
    
  • The lsdari koleksi AT & T Open Source , mungkin dibangun di ksh93. Satu lagi dengan beberapa ekstensi mewah:

    $ 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 (seperti yang ditemukan (atau turunan) pada sebagian besar sistem berbasis Linux (umumnya tertanam)):

    $ busybox ls -rt
    c  b  a
    

Jadi, dari mereka, GNU dan ast lsmenganggap bagian kedua fraksional. Yang lain kembali ke perbandingan leksikal untuk file yang terakhir dimodifikasi dalam detik yang sama. Hanya busybox yang lsmenghormati di -rsana.

Dalam pengujian saya, FreeBSD lsjuga mendukung ketepatan sub-detik (asalkan diaktifkan pada tingkat VFS, lihat vfs.timestamp_precisionsysctl).

zshGumpalan (dengan omkualifikasi glob untuk memesan pada waktu modifikasi, Omuntuk pesanan terbalik) juga mengambil waktu penuh:

$ echo *(Om)
a c b

[ file1 -nt file2 ], di mana didukung juga umumnya mendukung granularity sub-detik .

Stéphane Chazelas
sumber
1
Apakah alat non-GNU melanggar POSIX, atau apakah itu menentukan pembulatan untuk pengurutan?
Kevin
2
Apa itu ast-ls?
Random832
@ Random832, lihat edit.
Stéphane Chazelas
2
@ Kevin, dari membaca spek saya, mereka tidak patuh dalam hal itu. AFAICT, tidak ada dalam spesifikasi yang memungkinkan bagian subsecond untuk diabaikan dan POSIX menyediakan API yang jelas untuk mengambil cap waktu yang tepat.
Stéphane Chazelas
1
@ikkachu, kamu benar. Saya tidak memperhatikan itu. lihat edit. Itu memang mengubah hasil untuk ast.
Stéphane Chazelas
4

Berkenaan dengan lsimplementasi GNU , menjalankan ls -lakan memesan file dalam urutan abjad, dan ls -ltakan memesan file dalam urutan waktu modifikasi, terbaru terlebih dahulu, dengan akurasi terbesar yang didukung oleh sistem file yang mendasarinya. Anda dapat memeriksa ini menggunakan --full-timeopsi.

Jadi, untuk menjawab pertanyaan Anda, ya, sebisa mungkin, tetapi hanya ketika Anda menggunakan -t(jika tidak, standarnya adalah abjad), dan menggunakan implementasi yang mendukungnya (lihat jawaban Stéphane untuk lebih jelasnya). Misalnya, ext4dapat mendukung presisi nanodetik, mengingat inode yang cukup besar untuk menyimpan data cap waktu yang diperlukan.

Joe
sumber
2
Anda harus menambahkan ke jawaban Anda bahwa itu hanya berbicara tentang GNU ls. Ada banyak implementasi lain yang mungkin berperilaku berbeda.
Roland Illig
@RolandIllig menambahkan
Joe
1

Anda dapat memeriksa apakah Anda membandingkan output dari

ls -lat

dan

ls -lat --full-time

tidak ada yang sewenang-wenang di sana tentang penyortiran.

D'Arcy Nader
sumber
1

Ya, tentu saja.

Untuk menguji, buat dua file dengan perbedaan waktu yang kecil:

$ touch aa; sleep 0.2; touch bb

Periksa waktu modifikasi:

$ stat -c %y bb aa
2018-01-07 20:51:19.364248042 0000
2018-01-07 20:51:19.072248226 0000

Daftar akan menggunakan perbedaan seperti itu:

$ 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

Dengan --full-timeperbedaan akan menjadi jelas.

$ 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
Ishak
sumber
Di blok terakhir, saya yakin Anda memiliki bbdan aamundur.
Alex