`ls -lt` sẽ theo các mtimes chính xác hay chỉ các mtimes gần đúng đến thứ hai?


10

ls -lchỉ hiển thị dấu thời gian sửa đổi của tệp lên đến giây. Nếu hai tệp có cùng dấu thời gian lên đến giây, nhưng được sửa đổi không chính xác cùng một lúc, sẽ ls -ltsắp xếp các tệp theo thứ tự mtimes chính xác hoặc chỉ các mtimes gần đúng đến thứ hai (và do đó thứ tự giữa các tệp có thể Bất kỳ)?

Câu trả lời:


17

Điều đó rất nhiều phụ thuộc vào việc lsthực hiện. Trong số 4 cái được tìm thấy trên hệ thống GNU / Linux tại đây:

$ 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 , một trong dự án GNU (từ bộ sưu tập GNU coreutils ). Đó là cái thường thấy trên các hệ thống GNU như hạt nhân Debian (Linux hoặc kFreeBSD), Cygwin hoặc Fedora.

    $ gnu-ls -rt
    a  c  b
    
  • Các lstừ Heirloom Toolchest , một cổng của các công cụ OpenSolaris:

    $ heirloom-ls -rt
    a  b  c
    
  • Các lstừ bộ sưu tập của AT & T mã nguồn mở , có thể xây dựng trong ksh93. Một số khác có khá nhiều tiện ích mở rộng lạ mắt:

    $ 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 (như được tìm thấy (hoặc một dẫn xuất) trên hầu hết các hệ thống dựa trên Linux (thường được nhúng):

    $ busybox ls -rt
    c  b  a
    

Vì vậy, trong số đó, GNU và ast lsxem xét phần thứ hai. Những cái khác rơi vào so sánh từ vựng cho các tệp được sửa đổi lần cuối trong cùng một giây. Chỉ bận rộn lsdanh dự -rđó.

Trong các thử nghiệm của tôi, FreeBSD lscũng hỗ trợ độ chính xác dưới giây (miễn là chúng được bật ở cấp độ VFS, xem vfs.timestamp_precisionsysctl).

zshSự ảm đạm (với omvòng loại toàn cầu để sắp xếp thời gian sửa đổi, Omcho thứ tự ngược lại) cũng mất toàn thời gian:

$ echo *(Om)
a c b

[ file1 -nt file2 ], nơi được hỗ trợ cũng thường hỗ trợ mức độ chi tiết phụ thứ hai .


1
Các công cụ không phải GNU có vi phạm POSIX không, hay nó chỉ định làm tròn cho sắp xếp?
Kevin

2
Ast-ls là gì?
Random832

@ Random832, xem chỉnh sửa.
Stéphane Chazelas

2
@Kevin, từ việc tôi đọc thông số kỹ thuật, họ không tuân thủ về vấn đề đó. AFAICT, không có gì trong thông số kỹ thuật cho phép bỏ qua phần thứ hai và POSIX cung cấp API rõ ràng để truy xuất dấu thời gian chính xác.
Stéphane Chazelas

1
@ikkachu, bạn nói đúng. Tôi đã không nhận thấy điều đó. xem chỉnh sửa. Điều đó không thay đổi kết quả cho ast.
Stéphane Chazelas

4

Liên quan đến lsviệc triển khai GNU , việc chạy ls -lsẽ sắp xếp các tệp theo thứ tự bảng chữ cái và ls -ltsẽ sắp xếp các tệp theo thứ tự thời gian sửa đổi, mới nhất trước tiên, với độ chính xác cao nhất được hỗ trợ bởi hệ thống tệp cơ bản. Bạn có thể kiểm tra điều này bằng cách sử dụng --full-timetùy chọn.

Vì vậy, để trả lời câu hỏi của bạn, vâng, với phần mở rộng lớn nhất có thể, nhưng chỉ khi bạn sử dụng -t(nếu không, nó sẽ mặc định là chữ cái) và đang sử dụng một triển khai hỗ trợ nó (xem câu trả lời của Stéphane để biết thêm chi tiết). Ví dụ, ext4có thể hỗ trợ độ chính xác nano giây, được cung cấp các nút đủ lớn để lưu trữ dữ liệu dấu thời gian cần thiết.


2
Bạn nên thêm vào câu trả lời của mình rằng nó chỉ nói về GNU ls. Có nhiều triển khai khác có thể hành xử khác nhau.
Roland Illig

@RolandIllig đã thêm
Joe

1

bạn có thể kiểm tra xem nếu bạn so sánh đầu ra của

ls -lat

ls -lat --full-time

không có gì tùy tiện ở đó về sắp xếp.


1

Nó sẽ được thôi.

Để kiểm tra, tạo hai tệp có chênh lệch thời gian nhỏ:

$ touch aa; sleep 0.2; touch bb

Kiểm tra thời gian sửa đổi:

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

Danh sách sẽ sử dụng sự khác biệt như vậy:

$ 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

Với --full-timesự khác biệt sẽ rõ ràng.

$ 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

Trong khối cuối cùng, tôi tin rằng bạn có bbaangược lại.
Alex
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.