ls -lแสดงการประทับเวลาการปรับเปลี่ยนของไฟล์ไม่เกินวินาทีเท่านั้น หากไฟล์สองไฟล์มีการประทับเวลาเท่ากันเป็นวินาที แต่ถูกแก้ไขในเวลาเดียวกันจะls -ltเรียงลำดับไฟล์ตามลำดับของ mtimes ที่ถูกต้องหรือเพียงแค่ mtimes โดยประมาณสูงสุดวินาที พล)?
ls -lแสดงการประทับเวลาการปรับเปลี่ยนของไฟล์ไม่เกินวินาทีเท่านั้น หากไฟล์สองไฟล์มีการประทับเวลาเท่ากันเป็นวินาที แต่ถูกแก้ไขในเวลาเดียวกันจะls -ltเรียงลำดับไฟล์ตามลำดับของ mtimes ที่ถูกต้องหรือเพียงแค่ mtimes โดยประมาณสูงสุดวินาที พล)?
คำตอบ:
นั่นขึ้นอยู่กับการ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 ]ที่ได้รับการสนับสนุนโดยทั่วไปยังสนับสนุนเมล็ดย่อยที่สอง
ในส่วนที่เกี่ยวกับlsการนำไปใช้ของ GNU การรันls -lจะเรียงลำดับไฟล์ตามลำดับตัวอักษรและls -ltจะเรียงลำดับไฟล์ตามลำดับเวลาการแก้ไขใหม่ล่าสุดก่อนเพื่อความแม่นยำสูงสุดที่รองรับโดยระบบไฟล์พื้นฐาน คุณสามารถตรวจสอบได้โดยใช้--full-timeตัวเลือก
ดังนั้นเพื่อตอบคำถามของคุณใช่ให้ขยายได้มากที่สุด แต่เมื่อคุณใช้เท่านั้น-t(มิฉะนั้นจะเป็นค่าเริ่มต้นเป็นตัวอักษร) และใช้การใช้งานที่รองรับ (ดู
คำตอบของStéphaneสำหรับรายละเอียดเพิ่มเติม) ตัวอย่างเช่นext4สามารถรองรับความแม่นยำระดับนาโนวินาทีซึ่งให้ inodes ใหญ่พอที่จะเก็บข้อมูลการประทับเวลาที่ต้องการ
คุณสามารถตรวจสอบว่าถ้าคุณเปรียบเทียบผลลัพธ์ของ
ls -lat
และ
ls -lat --full-time
ไม่มีอะไรเกี่ยวกับการเรียงลำดับโดยพลการ
ใช่! ฉันจะ.
หากต้องการทดสอบให้สร้างไฟล์สองไฟล์ที่มีเวลาต่างกันเล็กน้อย
$ 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ถอยหลัง