"ลำดับไดเรกทอรี" ของไฟล์ในไดเรกทอรีคืออะไร (ใช้โดย `ls -U`)?


19

ตามหน้า man สำหรับ ls ls -Uหมายถึง:

อย่าเรียงลำดับ; รายการรายการในลำดับไดเรกทอรี

"ลำดับของไดเรกทอรี" หมายถึงอะไรและมีการกำหนดอย่างไร

การทดสอบต่อไปนี้ (ดำเนินการในระบบไฟล์ ext3) แสดงให้เห็นว่าไม่ใช่ลำดับที่สร้างไฟล์:

root@sv1010vm0007:/tmp# mkdir test
root@sv1010vm0007:/tmp# touch test/2
root@sv1010vm0007:/tmp# touch test/1
root@sv1010vm0007:/tmp# touch test/3
root@sv1010vm0007:/tmp# ls -U test
2  3  1

คำตอบ:


14

มันขึ้นอยู่กับระบบไฟล์ สำหรับระบบไฟล์บางระบบ (ext3 ในหมู่พวกเขา) ไดเรกทอรีจริง ๆ แล้วเป็นไฟล์ที่มีรูปแบบที่รู้จักกันดีและบิต 'd' ตั้งอยู่ในสิทธิ์หรือโหมดของมัน ในกรณีดังกล่าวประวัติความเป็นมาของชื่อไฟล์ที่สร้างและลบความยาวอาจมีความสำคัญ เคอร์เนลจะกรอกข้อมูลในรายการแรกในไฟล์ไดเรกทอรีที่มีพื้นที่เพียงพอที่จะเก็บชื่อไฟล์ใหม่ ดูhttp://e2fsprogs.sourceforge.net/ext2intro.htmlเพื่อดูรายละเอียดเพิ่มเติมส่วนที่ชื่อ "คำอธิบายทางกายภาพ"

สำหรับบางระบบไฟล์อื่น ๆ Reiserfs ในหมู่พวกเขาไดเรกทอรีจริง ๆ แล้วเป็นเพียงบางรายการในต้นไม้ B +ที่มองไม่เห็นในระบบไฟล์ดังนั้นlsไดเรกทอรีธรรมดาในระบบไฟล์ Reiserfs อยู่ในลำดับคำศัพท์


@ บรูซ: ดังนั้นเนื้อหาของไฟล์ "ไดเรกทอรี" นี้คืออะไร?
Faheem Mitha

ตามเนื้อผ้ามีอะไรบางอย่างที่เหมือนกับ struct dirent ซึ่งฉันพบว่ากำหนดไว้ใน /usr/include/bits/dirent.h บนกล่อง RHEL และในกล่อง Slackware 11.0 เครื่องทั้งสองเครื่องปฏิเสธที่จะเปิด () ไดเรกทอรีโดยตรง ฉันรู้ว่าฉันเคยทำสิ่งต่าง ๆ เช่น "cat.> dot.as.file" เพื่อแปลงไดเรกทอรีเป็นไฟล์ปกติครั้งสุดท้ายที่ฉันทำอย่างแน่นอนคือ Solaris 8 ฉันคิดว่า โดยพื้นฐานแล้วโครงสร้าง dirent มี inode (ตัวเลข), ความยาวของเรคคอร์ด, ความยาวชื่อและสตริงที่ฉันจำได้ว่าอาจสิ้นสุดหรือไม่อาจเป็น ASCII-Nul
Bruce Ediger

@ Bruce: ตกลง และโครงสร้าง C นี้จัดการเพื่อรับข้อมูลทั้งหมดเกี่ยวกับไฟล์และไดเรกทอรีย่อยที่มีในฟิลด์เหล่านั้นหรือไม่
Faheem Mitha

ไดเร็กทอรีในระบบไฟล์เช่น ext2 หรือ BSD FFS หรือระบบไฟล์ Unix ดั้งเดิมมีเพียงรายการหมายเลข inode และชื่อไฟล์ที่เกี่ยวข้อง การเรียกใช้ "ls" โดยไม่มีอาร์กิวเมนต์ทำให้คุณได้รับรายชื่อไฟล์ หากคุณทำ "ls -l", "ls" ตัวเองจะค้นหาชื่อไฟล์ทุกชื่อด้วยการเรียกใช้ระบบ stat (2) ในชื่อไฟล์และจาก stat ของโครงสร้างรับสิทธิ์ขนาด "ประเภทไฟล์" ฯลฯ ดังนั้นไม่ไฟล์ไดเรกทอรีไม่มีข้อมูลทั้งหมดเพียงรายชื่อ
Bruce Ediger

2
ext2.sourceforge.net/2005-ols/paper-html/node3.htmlอธิบายว่าคุณสมบัติ dir_index แฮชชื่อไฟล์และไฟล์ลับเฉพาะระบบไฟล์ dump2efs รวม dir_index ในบรรทัดคุณสมบัติของระบบไฟล์หากเปิดใช้งานคุณสมบัตินี้
Martin Dorey

3

แน่นอนไม่มีคำสั่งที่เฉพาะเจาะจงที่จะคาดหวัง มันขึ้นอยู่กับการใช้งานระบบปฏิบัติการและระบบไฟล์เพื่อจัดเรียงรายการตามที่ชอบ เป้าหมายหนึ่งของตัวเลือกนี้คือการทำให้รายการเร็วขึ้นซึ่งอาจเป็นปัจจัยสำคัญกับไดเรกทอรีที่มีขนาดใหญ่มาก


มีอัลกอริทึมการกำหนดเวลา / แคชในเคอร์เนลและไดรเวอร์ระบบไฟล์ที่มีอิทธิพลต่อเมื่อข้อมูลถูกเขียนลงดิสก์อย่างแน่นอน สิ่งนี้ทำเพื่อเพิ่มประสิทธิภาพ เนื่องจากการเพิ่มประสิทธิภาพนี้คุณไม่สามารถบอกได้อย่างแน่นอนว่าเมื่อใดจะมีการเขียน นอกจากนี้ไอโหนดเก่าในระบบไฟล์อาจถูกนำมาใช้ซ้ำเพื่อให้ไฟล์ใหม่สามารถปรากฏในช่องไดเรกทอรีที่ไฟล์เก่าเป็น ลำดับของการสร้างจึงไม่จำเป็นต้องมี "ลำดับไดเรกทอรี"
LawrenceC

@ultrasawblade: ไม่แน่ใจว่าทำไมคุณถึงเขียนความเห็นในคำตอบของฉันเองแทนที่จะตอบเองหรืออะไรก็ตาม
jlliagre

@ultrasawblade: พูดอย่างเคร่งครัดว่า "inodes เก่า [ถูก] นำกลับมาใช้ใหม่" ไม่มีส่วนเกี่ยวข้องกับการใช้สล็อตไดเรกทอรีเก่าอีก สิ่งนี้สามารถเกิดขึ้นได้เมื่อใดก็ตามที่ไม่ได้เชื่อมโยงรายการไดเรกทอรีเก่า หากพวกเขาเป็นลิงค์ยากทั้งหมดนี้ไม่จำเป็นต้องส่งผลให้ inodes ถูกจัดสรรคืน
G-Man กล่าวว่า 'Reinstate Monica'

2

มันเป็นลำดับที่รายการจะถูกเก็บไว้ภายในในระบบไฟล์ สิ่งนี้จะแตกต่างจากระบบไฟล์ไปยังระบบไฟล์ ยกตัวอย่างเช่น entires อาจจะเก็บไว้ในชนิดของต้นไม้ที่สมดุลบางอย่างเช่นต้นไม้แดงดำ อาจมีการปรับให้เหมาะสมเพิ่มเติมสำหรับไดเรกทอรีที่มีรายการจำนวนน้อยหรือเพื่อจัดการอย่างมีประสิทธิภาพด้วยการเพิ่มและลบออก


-1

ไดเรกทอรีเป็นเพียงไฟล์อื่นซึ่งแสดงรายการข้อมูลเมตาของไฟล์จริง "ls -U" เพียงแค่รายการรายการในลำดับเดียวกันในไฟล์ไดเรกทอรี

ลำดับจะถูกกำหนดโดยระบบปฏิบัติการและการใช้งานระบบไฟล์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.