ขนาดของไดเรกทอรีหมายถึงอะไรในเอาต์พุตของคำสั่ง 'ls -l'


คำตอบ:


45

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


3
และเมื่อไดเรกทอรีมีไฟล์หลายพันไฟล์ขนาดของไดเรกทอรีนั้นสามารถเป็น> 10KB ได้อย่างง่ายดาย
glenn jackman

1
@txwikinger ฉันคิดว่าไดเรกทอรีมีรายการ inodes ไม่ใช่ชื่อไฟล์จริง
ЯрославРахматуллин

6
@ ЯрославРахматуллин รายการไดเรกทอรีประกอบด้วยหมายเลข inode และชื่อไฟล์
200_success

2
ดังนั้น "ขนาด" ของ dir นั้นเกี่ยวข้องกับจำนวนไฟล์ภายในเท่านั้นไม่ใช่ขนาดของไฟล์?
Lee

1
@Lee: ใช่ถูกต้องแล้ว
แมว

14

"ขนาดของไดเรกทอรี" พิมพ์ด้วยls -lคือ (เช่นเดียวกับไฟล์ประเภทใด ๆ ) ค่าที่รายงานโดยการโทรในstat()statbuf.st_size

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

  • ในระบบไฟล์ UNIX ที่มีประวัติในปัจจุบันมักจะตั้งชื่อv7-fsไดเรกทอรีถูกทำซ้ำ 16 รายการไบต์ที่มีหมายเลข inode 16 บิตและชื่อไฟล์ 14 ไบต์ "ขนาด" ของไดเรกทอรีมีความหมายเมื่อเทียบกับการread(2)ดำเนินการและเติบโตหรืออยู่ในสภาพที่เป็นอยู่เสมอ .และ..รายการที่ถูกสร้างขึ้นโดยตนเองยากเชื่อมโยงพวกเขากับปัจจุบันและไดเรกทอรีระดับดังกล่าวข้างต้น ลิงก์นับสำหรับไดเรกทอรีหญิงสาวที่มีสติว่างคือ 2

  • ในระบบไฟล์ BSD-4.2 ที่เรียกว่าตั้งแต่ปี 1989 (SVr4) ufsไดเร็กทอรีคือชุดของเร็กคอร์ดความยาวผันแปรที่ใช้รูปแบบที่ไม่ได้รับอนุญาตให้มีความเสถียรดังนั้นคำสั่งพื้นที่ผู้ใช้จะไม่ได้รับอนุญาตให้อ่านรูปแบบนี้ รายงาน "ขนาด" มีขนาดเป็นไบต์เช่นเดียวกับใน v7-fs ขนาดมักจะโตขึ้นหรือคงอยู่ แต่ระบบไฟล์เวอร์ชันที่ใหม่กว่าอาจหดขนาดภายใต้เงื่อนไขบางประการ - แต่ไม่เสมอไปเมื่อคุณคาดหวังสิ่งนี้ นับลิงค์ที่รายงานสำหรับ directory ว่างคือ 2 v7-fsเช่นเดียวกับ

  • ในWOFSระบบไฟล์ที่ฉันออกแบบและดำเนินการในช่วงฤดูร้อนปี 1988 ถึงเดือนพฤษภาคม 2534 ไดเรกทอรีต่างๆจะรายงาน "ขนาด" 0 และไม่เคยมีเนื้อหาประเภทใดประเภทหนึ่งที่สามารถอ่านได้โดยใช้การread(2)โทร นี่เป็นเพราะWOFSเป็นระบบไฟล์ Copy-on-Write ระบบแรกและเนื่องจากในWOFSไฟล์รายงานไดเรกทอรีที่อยู่ในนั้นแทนที่จะอยู่ในรายการในไดเรกทอรี ถ้าคุณอ่านWOFSไดเรกทอรีใช้readdir()คุณจะได้รับข้อมูลสำหรับรายการที่ตั้งใจไว้ แต่ไม่เคยและ. ..จำนวนลิงก์ของไดเร็กทอรีว่างบนWOFSคือ 1 และพฤติกรรมทั้งหมดสอดคล้องกับ POSIX อย่างสมบูรณ์

  • ในZFSที่ถูกนำมาใช้หลังจากอ่านWOFSเอกสาร เป็นระบบแฟ้มสำเนาเมื่อเขียนและผู้เขียนไม่ปฏิเสธว่าพวกเขาคัดลอกแนวคิดจากZFS WOFSไดเร็กทอรีบน ZFS รายงานnumber of directory entriesin st_sizeดังนั้น "ขนาด" ที่รายงานจึงไม่มีความหมายที่แท้จริงเกี่ยวกับพื้นที่ว่างบนดิสก์จากข้อมูลไดเรกทอรี ไม่มี.และ..รายการในไดเร็กทอรี ZFS แต่ถ้าคุณโทรreaddir()รายการเหล่านี้จะปลอมและส่งคืนสำหรับการดำเนินการสองครั้งแรก ZFS เป็น FS เดียวในรายการที่ไม่สนับสนุนไดเรกทอรีฮาร์ดไดรฟ์ แต่จำนวนลิงก์ที่รายงานสำหรับไดเรกทอรีอยู่เสมอ 2 ความผิดปกติทั้งสองนี้ใน ZFS ถูกนำมาใช้เพื่อลดความสับสนในโปรแกรมที่ไม่ใช่ POSIX

  • คล้ายกับ ZFS, WAFL บางฉบับ WOFSแต่ไม่คิดทั้งหมดจาก Netapp WAFLถูกเขียนเมื่อ 3 ปีหลังจากที่WOFSตีพิมพ์บทความ WAFL เป็น copy-on-write แต่ดูเหมือนว่า WAFL จะรายงานค่า "ขนาด" ที่อาจเป็น "ขนาดไดเรกทอรีจริง" ภายใต้สมมติฐานที่ว่าไดเรกทอรีมีเนื้อหา


13

ไดเรกทอรีขอสงวน 4096 ไบต์ (อย่างน้อย) สำหรับ meta-data เกี่ยวกับตัวเองและเนื้อหา

นอกจากนี้ 4096 ไบต์เป็นหน่วยการจัดสรรเริ่มต้น (บล็อก) สำหรับระบบไฟล์ ext2 / ext3 / ext4 และดังนั้นไดเรกทอรีจะไม่สามารถมีขนาดเล็กลงได้

ในระบบไฟล์ที่แตกต่างกันคุณอาจพบไดเรกทอรีที่มีขนาดเริ่มต้นแตกต่างกันเนื่องจากขนาดบล็อกเริ่มต้นของระบบไฟล์

ขนาดไดเรกทอรียังสามารถเติบโตแบบไดนามิกตามที่ได้รับการเติม แต่เมื่อเติมเต็มพื้นที่ที่สงวนไว้สำหรับ meta-data ไม่สามารถจัดสรรใหม่ได้โดยไม่ต้องลบไดเรกทอรี


1
คุณหมายถึง meta-data ใด
Stéphane Chazelas

1
รายละเอียดขึ้นอยู่กับระบบไฟล์ แต่โดยทั่วไปจะมี meta-data เช่นชื่อไฟล์, หมายเลขไอโหนด, ประเภทไฟล์ (ไฟล์, dir, fifo, ซ็อกเก็ต, โหนดอุปกรณ์, symlink, ฯลฯ ) เจ้าของกลุ่มสิทธิ์สิทธิ์แอตทริบิวต์ ACLs เป้าหมาย symlink
cas

6
@CraigSanders ไดเรกทอรีมีชื่อวัตถุและหมายเลขไอโหนดที่สอดคล้องกันเท่านั้น inode มีประเภทของวัตถุ, เจ้าของ / กลุ่ม, สิทธิ์, การอ้างอิงถึงที่ใดก็ตามที่ ACLs และคุณลักษณะเพิ่มเติมถูกเก็บไว้, ... สิ่งอื่นใดที่จะทำให้เกิดการแตกอย่างรุนแรงของความหมายของระบบไฟล์ POSIX
vonbrand

UFS ของฉันสงวนเพียง 512 ไบต์สำหรับข้อมูลเมตาของตนเองต่อไดเรกทอรี
FUZxxl

4

ไดเรกทอรีเป็นเพียงไดเรกทอรีเช่นสมุดโทรศัพท์ มันเป็นเพียงไฟล์ที่มีรายการตัวเลขและชื่อถัดจากพวกเขา แต่ละหมายเลขอ้างอิงไฟล์ในระบบไฟล์ (หมายเลขไอโหนด) และชื่อคือชื่อไฟล์

คุณต้องการพื้นที่ดิสก์ในการบันทึกข้อมูลวิธีการจัดสรรและพัฒนาและหดตัวขึ้นอยู่กับระบบไฟล์


คุณสามารถรวมรายละเอียดที่แท้จริงของสิ่งที่เก็บข้อมูลเมตาและการพิจารณาการจัดสรรบล็อกที่เกี่ยวข้องกับการเติบโตของขนาด มันจะทำให้คำตอบที่แน่นอนมากขึ้นพร้อมกับสัญลักษณ์เปรียบเทียบที่ให้มาแล้ว :)
n611x007

3
@naxa, ขึ้นอยู่กับระบบไฟล์และแม้กระทั่งในระบบไฟล์ (เช่น ext4) ที่ขึ้นอยู่กับตัวเลือกที่คุณเปิดใช้งานดังนั้นฉันจึงควรปล่อยให้มันเป็น "มันขึ้นอยู่กับระบบไฟล์" แทนที่จะลองและหมดแรงซึ่งจะไม่มาก เกี่ยวข้องกับคำถามนี้
Stéphane Chazelas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.