ขนาดของไดเร็กทอรีไม่คุ้มกับความพยายามของเรา

นี่เป็นโพสต์เล็กๆ น้อยๆ ที่ไร้ประโยชน์และไม่จำเป็นในทางปฏิบัติ แต่เป็นโพสต์เล็กๆ น้อยๆ ที่ตลกเกี่ยวกับไดเร็กทอรีในระบบ *nix วันศุกร์แล้ว

ในระหว่างการสัมภาษณ์ คำถามที่น่าเบื่อมักเกิดขึ้นเกี่ยวกับ inodes หรือ everything-is-files ซึ่งน้อยคนนักที่จะตอบได้อย่างมีเหตุผล แต่หากเจาะลึกลงไปอีกนิดจะพบสิ่งที่น่าสนใจ

เพื่อทำความเข้าใจโพสต์ มีบางประเด็น:

  • ทุกอย่างเป็นไฟล์. ไดเร็กทอรีก็เป็นไฟล์เช่นกัน
  • ไอโหนดเก็บข้อมูลเมตาจากไฟล์ แต่ชื่อไฟล์ไม่ได้ถูกเก็บไว้ที่นั่น
  • ชื่อไฟล์จะถูกจัดเก็บไว้ในข้อมูลไดเร็กทอรี
  • ขนาดของไดเร็กทอรีซึ่งเป็นขนาดเดียวกับที่แสดงใน ls และเป็นค่าเริ่มต้นคือ 4Kb ขึ้นอยู่กับจำนวนไฟล์ในไดเร็กทอรีและความยาวของชื่อ
  • แน่นอนว่ายิ่งไฟล์มากเท่าใดขนาดไดเร็กทอรีก็จะใหญ่ขึ้นเท่านั้น

ต่อไปนี้เป็นส่วนที่น่าสนใจ: เราสร้างไดเร็กทอรีที่มีไฟล์นับล้านไฟล์ ตรวจสอบขนาดของไดเร็กทอรี จากนั้นลบไฟล์ทั้งหมดและดูขนาดของไดเร็กทอรี

$ mkdir niceDir && cd niceDir
# в зависимости от скорости носителя, следующая команда может занять 2-10 минут
$ for ((i=1;i<133700;i++)); do touch long_long_looong_man_sakeru_$i ; done
$ ls -lhd .
drwxr-xr-x 2 user user 8.1M Aug 2 13:37 .
$ find . -type f -delete
$ ls -l
total 0
$ ls -lhd .
drwxr-xr-x 2 user user 8.1M Aug  2 13:37 .

อย่างที่คุณเห็นขนาดไดเร็กทอรีไม่เปลี่ยนแปลงแม้ว่าจะดูเหมือน :)

คุณสามารถแก้ไขขนาดของไดเรกทอรีได้เท่านั้น (โดยไม่ต้องลบออก) โดยใช้ fsck (และตัวเลือก -D) ในสถานะที่ไม่ได้ต่อเชื่อม

แต่พอผมไปค้นหาว่าทำไมถึงเป็นเช่นนี้ ปรากฏว่า เมื่อ 10 ปีที่แล้วมีพฤติกรรมเช่นนั้นแล้ว กล่าวถึง ใน lkml และตามที่นักพัฒนาระบุว่าการแก้ไขนั้นไม่คุ้มกับความพยายามเลย

ที่มา: will.com

เพิ่มความคิดเห็น