วิธีรับขนาดของไดเร็กทอรีใน Linux

How Get Size Directory Linux



การรู้ขนาดของไดเร็กทอรีใน Linux นั้นไม่ง่ายอย่างที่คิด คำสั่ง ls -s จะแสดงรายการไฟล์และไดเร็กทอรีย่อยตามขนาด อย่างไรก็ตาม ขนาด (ประมาณ 4096 ไบต์) ที่กำหนดให้กับไดเร็กทอรีไม่ใช่การใช้ดิสก์ ขนาดที่เห็นสำหรับไดเร็กทอรีคือขนาดของข้อมูลเมตาของไดเร็กทอรี

ข้อมูลเมตาคือข้อมูลเกี่ยวกับข้อมูล ขนาดที่ปรากฏคือขนาดของข้อมูลที่มีความสำคัญต่อผู้ใช้คอมพิวเตอร์ทั่วไป เนื้อหา (ข้อความ) ของจดหมาย รูปภาพ วิดีโอ ฯลฯ ของผู้ใช้ ประกอบขึ้นจากขนาดที่เห็นได้ชัดเจน ข้อมูลนี้ไม่ได้ถูกเก็บไว้ในคอมพิวเตอร์โดยพลการ ข้อมูลที่มีขนาดชัดเจนต้องถูกเก็บไว้ในรูปแบบการควบคุม มันจะต้องสามารถระบุได้ มันจะต้องสมบูรณ์ มีข้อกำหนดอื่น ๆ สำหรับมัน จำเป็นต้องใช้ข้อมูลพิเศษบางอย่างเพื่อให้เป็นไปตามข้อกำหนดเพิ่มเติมเหล่านี้ และข้อมูลพิเศษนี้คือข้อมูลเมตา







โปรดจำไว้ว่า มีเพียงหนึ่งไดเร็กทอรีในโวลุ่ม ส่วนที่เหลือเป็นไดเรกทอรีย่อย ไดเร็กทอรีรากทำให้เกิดไดเร็กทอรีย่อย ซึ่งก่อให้เกิดไดเร็กทอรีย่อยอื่นๆ ที่ล่ม อย่างไรก็ตาม ไดเร็กทอรีย่อยมักจะเรียกง่ายๆ ว่าไดเร็กทอรี ดังนั้นจึงมีแผนผังไดเร็กทอรีเพียงรายการเดียวเท่านั้น



ดังนั้น ls -s จึงไม่มีประโยชน์ในการรับขนาดของไดเร็กทอรี คำสั่งใดมีประโยชน์? - คำสั่ง du du ย่อมาจาก Disk Usage มันพิมพ์การใช้ดิสก์ของไดเร็กทอรี



บทความนี้จะอธิบายคุณลักษณะต่างๆ ของคำสั่ง du ใน Linux ซึ่งให้วิธีการต่างๆ ของโปรแกรมเมอร์ในการทราบขนาดของไดเร็กทอรีและไดเร็กทอรีย่อย Bash เป็นเชลล์ที่ใช้สำหรับตัวอย่างโค้ดของบทความนี้





เนื้อหาบทความ

du ไม่มีตัวเลือกหรืออาร์กิวเมนต์

ไดเร็กทอรีการทำงานปัจจุบันคือไดเร็กทอรีที่ผู้ใช้กำลังทำงานอยู่ โดยปกติพรอมต์จะแสดงไดเร็กทอรีการทำงานปัจจุบัน พิมพ์ du โดยไม่มีตัวเลือกและอาร์กิวเมนต์ เช่น:



ของ

จากนั้นกดปุ่ม Enter จะแสดงการใช้ดิสก์สำหรับไดเร็กทอรีย่อยทั้งหมดของไดเร็กทอรีการทำงานปัจจุบัน มันจะแสดงข้อมูลนี้สำหรับแผนผังย่อยของไดเร็กทอรีการทำงานปัจจุบัน จุดบนจอแสดงผลแสดงถึงไดเร็กทอรีการทำงานปัจจุบัน

แต่ละเส้นทางของแผนผังย่อยจะแสดงเป็นบรรทัดที่หน้าจอ แต่ละบรรทัดเริ่มต้นด้วยขนาดของไดเร็กทอรี (ซึ่งเป็นนามสกุลในพาธ) จอแสดงผลอาจมีลักษณะดังนี้:

8./dir1/dir2/dir3/dir4

12./dir1/dir2/dir3

16./dir1/dir2

ยี่สิบ./dir1

โปรดทราบว่าไม่ชัดเจนว่าขนาดเป็นไบต์หรือกิโลไบต์หรือเมกะไบต์หรือกิกะไบต์ กิโลไบต์ของสัญลักษณ์ K หมายถึง 1024 ไบต์; เมกะไบต์ของสัญลักษณ์ M หมายถึง 1,048,576 ไบต์; กิกะไบต์ของสัญลักษณ์ G หมายถึง 1,073,741,824 ไบต์ สำหรับการระบุทวีคูณ ควรใช้ตัวเลือก -h (สวิตช์) ดังนี้:

ของ -ชม

จอแสดงผลจะมีลักษณะดังนี้:

8.0K ./dir1/dir2/dir3/dir4

12K ./dir1/dir2/dir3

16K ./dir1/dir2

20K ./dir1

เมื่อใช้อ็อพชัน -h ขนาดจะถูกระบุว่าอยู่ในรูปแบบที่อ่านได้

หมายเหตุ: ด้วยตัวเลือก –all คำสั่ง du จะให้การใช้งานดิสก์สำหรับไฟล์ อย่างไรก็ตาม บทความนี้จะไม่กล่าวถึงการใช้ดิสก์สำหรับไฟล์

ขนาดของไดเร็กทอรีอื่นๆ

เส้นทางสัมบูรณ์ทั่วไปสำหรับโวลุ่ม Linux มีดังนี้:

/บ้าน/จอห์น/พูด/dirTwo/dirThree/dirFour

อันแรก / คือไดเร็กทอรีรูท ไดเร็กทอรีนี้มีไดเร็กทอรีย่อยทันที รวมถึงโฮมไดเร็กทอรี โฮมไดเร็กทอรีมีไดเร็กทอรีของผู้ใช้ หากชื่อผู้ใช้คือ John ก็สามารถตั้งชื่อไดเร็กทอรีของผู้ใช้ว่า john ไดเร็กทอรีของผู้ใช้ถูกระบุโดย ~ ดังนั้น ผู้ใช้สามารถใช้คำสั่ง cd ~ เพื่อเข้าถึงไดเร็กทอรีของเขาจากไดเร็กทอรีใดก็ได้ dirOne เป็นไดเร็กทอรีที่สร้างโดยผู้ใช้ ผู้ใช้ยังสามารถสร้างไดเร็กทอรีอื่นในระดับนี้ dirTwo, dirThree และ dirFour เป็นไดเร็กทอรีย่อยของไดเร็กทอรีก่อนหน้า ซึ่งสร้างโดยผู้ใช้

ผู้ใช้สามารถทราบขนาดของไดเร็กทอรีอื่นและไดเร็กทอรีย่อย (แผนผังย่อย) จากไดเร็กทอรีใดๆ โดยข้ามพาธสัมบูรณ์เป็นอาร์กิวเมนต์ ตัวอย่างเช่น หากจำเป็นต้องใช้ดิสก์

/บ้าน/จอห์น/พูด/dirTwo

จากนั้นคำสั่งจะเป็น:

ของ -ชม /บ้าน/จอห์น/พูด/dirTwo

หรือ

ของ -ชม~/พูด/dirTwo

โดยที่ ~ หมายถึงไดเร็กทอรีของผู้ใช้

ในการใช้พาธสัมพัทธ์ ผู้ใช้ต้องอยู่ในไดเร็กทอรีหลักที่สอดคล้องกัน ตัวอย่างเช่น หากพรอมต์แสดงขึ้น

จอห์น@โฮสต์:~/พูด $

หมายความว่าผู้ใช้อยู่ที่ไดเร็กทอรี /home/john/dirOne จากนั้นคำสั่งต่อไปนี้จะให้ผลลัพธ์เหมือนกับคำสั่งด้านบน:

ของ -ชมdirTwo

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

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

รวมทั้งหมด

สามารถสร้างขนาดรวมทั้งหมดของไดเร็กทอรีทั้งหมดที่เกี่ยวข้องได้ สำหรับสถานการณ์ข้างต้น คำสั่งจะเป็น:

ของ -ชม --ทั้งหมด

ขนาดที่ชัดเจน

ขนาดที่ปรากฏมักจะเล็กกว่าการใช้ดิสก์ อย่างไรก็ตาม ในบางสถานการณ์ ขนาดที่ปรากฏจะใหญ่กว่าการใช้ดิสก์ เหตุผล - ดูในภายหลัง คำสั่งเพื่อให้ได้ขนาดที่ชัดเจนสำหรับพาธสัมพัทธ์ด้านบนจะเป็น:

ของ -ชม --appparent-sizedirTwo

ความลึกสูงสุด

ด้วย –max-depth=0, du พิมพ์เฉพาะขนาดไดเร็กทอรีการทำงานปัจจุบัน ด้วย du –max-depth=1 du พิมพ์ขนาดของไดเร็กทอรีการทำงานปัจจุบันและขนาดของไดเร็กทอรีย่อยระดับแรกทั้งหมด ด้วย –max-depth=2 du พิมพ์ขนาดของไดเร็กทอรีการทำงานปัจจุบันและขนาดของไดเร็กทอรีย่อยระดับแรกทั้งหมด และของไดเร็กทอรีย่อยระดับที่สองทั้งหมด ด้วย –max-depth=3 du พิมพ์ขนาดของไดเร็กทอรีการทำงานปัจจุบันและไดเร็กทอรีย่อยระดับแรกทั้งหมด และไดเร็กทอรีย่อยระดับที่สองทั้งหมด และของไดเร็กทอรีย่อยระดับที่สามทั้งหมด สิ่งนี้ยังคงดำเนินต่อไปด้วยค่าความลึกสูงสุดที่เพิ่มขึ้น ตัวอย่างการใช้งานคือ:

ของ -ชม --max-ความลึก=2

คำสั่ง sudo

หนึ่งในไดเร็กทอรีที่มีไดเร็กทอรีย่อยของตัวเองในไดเร็กทอรีรากคือ var. หากผู้ใช้พิมพ์

ของ -ชม /ที่ไหน

และกด Enter เขาจะรู้ว่าการอนุญาตถูกปฏิเสธสำหรับบางไดเร็กทอรี นั่นคือเขาไม่สามารถทราบขนาดของไดเร็กทอรีบางไดเร็กทอรีได้ การอนุญาตถูกปฏิเสธเนื่องจากผู้ใช้ไม่ใช่ superuser superuser มีสิทธิ์ดูขนาด (การใช้ดิสก์) ของไดเร็กทอรีเหล่านั้น ดังนั้นเพื่อให้ผู้ใช้ได้รับสิทธิ์นั้น เขาต้องใช้คำสั่ง sudo ดังนี้:

sudo ของ -ชม /ที่ไหน

หากเชลล์ขอรหัสผ่านจากผู้ใช้ ผู้ใช้ต้องพิมพ์รหัสผ่านและกด Enter ด้วยคำสั่ง sudo ผู้ใช้ทั่วไป (โปรแกรมเมอร์) สามารถดูขนาดของไดเร็กทอรีทั้งหมดในไดเร็กทอรี var และไดเร็กทอรีที่คล้ายกัน

ไม่รวมรายการตามขนาด

ตัวเลือก –threshold=SIZE จะไม่อนุญาตให้แสดงรายการไดเร็กทอรีที่มีขนาดน้อยกว่า SIZE สำหรับเส้นทางนั้น

/บ้าน/จอห์น/พูด/dirTwo/dirThree/dirFour

ด้วยข้อความแจ้งที่[ป้องกันอีเมล]:~$ แล้ว

ของ -ชม --เกณฑ์=12K dirOne

โดยที่ 12K หมายถึง 12 กิโลไบต์ จะไม่แสดงบรรทัดสำหรับไดเร็กทอรีใด ๆ ที่มีการใช้ดิสก์น้อยกว่า 12K

–exclude=PATTERN

อ็อพชันและค่านี้สามารถละเว้นบรรทัดไดเร็กทอรีที่ผู้ใช้ไม่ต้องการในรายการ

หากต้องการข้ามบรรทัดสำหรับไดเร็กทอรีสุดท้าย dirFour ของ path

/บ้าน/จอห์น/พูด/dirTwo/dirThree/dirFour

คำสั่งควรเป็น:

ของ -ชม --ไม่รวม= พูด/dirTwo/dirThree/dirFour dirOne

ผลลัพธ์จะออกมาประมาณว่า

4.0K dirOne/dirTwo/dirThree

8.0K dirOne/dirTwo

12K dirOne

หมายเหตุ: ขนาดไม่ได้รวมขนาดของไดเร็กทอรีระดับสุดท้าย (dirFour) ของพาธ

หากต้องการมีเพียงขนาดของไดเร็กทอรีความลึกระดับบนและแผนผังย่อยของไดเร็กทอรี อย่ามีไดเร็กทอรีความลึกที่ต่ำกว่าในตัวเลือก ดังนั้นด้วยคำสั่ง

ของ -ชม --ไม่รวม= พูด/dirTwo/dirThree dirOne

ผลลัพธ์จะเป็นเช่น

4.0K dirOne/dirTwo

8K dirOne

หมายเหตุ: ขนาดได้ไม่รวมขนาดของไดเร็กทอรีคันโยกล่างของแผนผัง

พิจารณาอีกครั้ง การเชื่อมโยงแบบสัมบูรณ์

/บ้าน/จอห์น/พูด/dirTwo/dirThree/dirFour

คำสั่งต่อไปนี้จะได้รับการใช้งานดิสก์ของไดเร็กทอรี dirTwo เท่านั้น ซึ่งเป็นไดเร็กทอรีภายในพาธ คำสั่งคือ:

ของ -ชม --ไม่รวม=/บ้าน/จอห์น/พูด/dirTwo/ * /บ้าน/จอห์น/พูด/dirTwo

อาร์กิวเมนต์มีไดเร็กทอรีก่อนหน้าทั้งหมดลงไปถึงไดเร็กทอรีที่เป็นปัญหา ค่าของการยกเว้นมีไดเร็กทอรีก่อนหน้าทั้งหมดที่ลงท้ายด้วย * ต่อจากไดเร็กทอรีที่เป็นปัญหา * หมายถึงไดเร็กทอรีย่อยทั้งหมดในระดับนั้น (และแผนผังย่อย) ผลลัพธ์จะออกมาประมาณว่า

5.0K/บ้าน/จอห์น/พูด/dirTwo

บทสรุป

การพยายามทราบขนาดของไดเร็กทอรีด้วยคำสั่ง ls -s ทำให้เข้าใจผิด ด้วยข้อมูลนี้จะได้รับเฉพาะข้อมูลเมตาของไดเร็กทอรีเท่านั้น หากต้องการทราบการใช้ดิสก์ของไดเร็กทอรี ควรใช้คำสั่ง du เมื่อใช้กับตัวเลือก -h ขนาดของไดเร็กทอรีสามารถอ่านได้ สามารถรับขนาดที่ปรากฏได้โดยใช้ตัวเลือกขนาดปรากฏ หากไม่มีตัวเลือกและอาร์กิวเมนต์ คำสั่ง du จะแสดงขนาดของไดเร็กทอรีย่อยทั้งหมดของไดเร็กทอรีปัจจุบัน รวมถึงไดเร็กทอรีปัจจุบัน อาร์กิวเมนต์ du คือเส้นทาง ซึ่งอาจเริ่มต้นจากรูท ตัวเลือกและค่าบางส่วนเป็นตัวกำหนดว่าไดเร็กทอรีใดจะถูกระบุ คำสั่ง sudo ให้สิทธิ์ superuser ของผู้ใช้ทั่วไปตามค่าเริ่มต้น