`ls -lt` จะติดตาม mtimes ที่ถูกต้องหรือเพียงแค่ประมาณ mtimes ถึงวินาที?


10

ls -lแสดงการประทับเวลาการปรับเปลี่ยนของไฟล์ไม่เกินวินาทีเท่านั้น หากไฟล์สองไฟล์มีการประทับเวลาเท่ากันเป็นวินาที แต่ถูกแก้ไขในเวลาเดียวกันจะls -ltเรียงลำดับไฟล์ตามลำดับของ mtimes ที่ถูกต้องหรือเพียงแค่ mtimes โดยประมาณสูงสุดวินาที พล)?

คำตอบ:


17

นั่นขึ้นอยู่กับการlsดำเนินการ ในบรรดา 4 ที่พบในระบบ GNU / Linux ที่นี่:

$ 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 (จากคอลเลกชั่นcoreutils GNU ) โดยทั่วไปแล้วจะพบได้ในระบบ GNU เช่น Debian (Linux หรือ kFreeBSD kernels), Cygwin หรือ Fedora

    $ gnu-ls -rt
    a  c  b
    
  • lsจากHeirloom Toolchestพอร์ตของเครื่องมือ 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_precisionsysctl)

zshglobs (ที่omมีคุณสมบัติ glob เพื่อสั่งซื้อในเวลาการปรับเปลี่ยนOmสำหรับการย้อนกลับ) ยังใช้เวลาเต็ม:

$ echo *(Om)
a c b

[ file1 -nt file2 ]ที่ได้รับการสนับสนุนโดยทั่วไปยังสนับสนุนเมล็ดย่อยที่สอง


1
เครื่องมือที่ไม่ใช่ของ GNU ละเมิด POSIX หรือไม่หรือเป็นการระบุการปัดเศษสำหรับการเรียงลำดับหรือไม่
Kevin

2
ast-ls คืออะไร
Random832

@ Random832 ดูการแก้ไข
Stéphane Chazelas

2
@ เควินจากการอ่านสเป็คของฉันพวกเขาไม่เข้ากันได้กับเรื่องนั้น AFAICT ไม่มีอะไรในสเป็คที่อนุญาตให้ส่วนย่อยที่สองถูกละเว้นและ POSIX ให้กับ API ที่ชัดเจนเพื่อดึงข้อมูลเวลาที่แม่นยำ
Stéphane Chazelas

1
@ikkachu คุณพูดถูก ฉันไม่ได้สังเกตว่า ดูการแก้ไข ที่จะเปลี่ยนผลลัพธ์สำหรับ ast
Stéphane Chazelas

4

ในส่วนที่เกี่ยวกับlsการนำไปใช้ของ GNU การรันls -lจะเรียงลำดับไฟล์ตามลำดับตัวอักษรและls -ltจะเรียงลำดับไฟล์ตามลำดับเวลาการแก้ไขใหม่ล่าสุดก่อนเพื่อความแม่นยำสูงสุดที่รองรับโดยระบบไฟล์พื้นฐาน คุณสามารถตรวจสอบได้โดยใช้--full-timeตัวเลือก

ดังนั้นเพื่อตอบคำถามของคุณใช่ให้ขยายได้มากที่สุด แต่เมื่อคุณใช้เท่านั้น-t(มิฉะนั้นจะเป็นค่าเริ่มต้นเป็นตัวอักษร) และใช้การใช้งานที่รองรับ (ดู คำตอบของStéphaneสำหรับรายละเอียดเพิ่มเติม) ตัวอย่างเช่นext4สามารถรองรับความแม่นยำระดับนาโนวินาทีซึ่งให้ inodes ใหญ่พอที่จะเก็บข้อมูลการประทับเวลาที่ต้องการ


2
คุณควรเพิ่มคำตอบของคุณที่พูดถึง GNU เท่านั้น มีการใช้งานอื่น ๆ อีกมากมายที่อาจทำงานแตกต่างกัน
Roland Illig

@RolandIllig เพิ่ม
Joe

1

คุณสามารถตรวจสอบว่าถ้าคุณเปรียบเทียบผลลัพธ์ของ

ls -lat

และ

ls -lat --full-time

ไม่มีอะไรเกี่ยวกับการเรียงลำดับโดยพลการ


1

ใช่! ฉันจะ.

หากต้องการทดสอบให้สร้างไฟล์สองไฟล์ที่มีเวลาต่างกันเล็กน้อย

$ 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.