ฉันจะค้นหาจำนวนไฟล์ในระบบไฟล์ได้อย่างไร?


26

ฉันต้องการทราบจำนวนไฟล์ที่ฉันมีในระบบไฟล์ของฉัน ฉันรู้ว่าฉันสามารถทำสิ่งนี้:

find / -type f | wc -l

ดูเหมือนว่าจะไม่มีประสิทธิภาพสูง สิ่งที่ฉันต้องการทำคือค้นหาจำนวน inodes ที่ไม่ซ้ำกันทั้งหมดซึ่งถือเป็น 'ไฟล์'

มีวิธีที่ดีกว่า?

บันทึก:

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

คำตอบ:


34

ตัวเลือก - inode dfจะบอกให้คุณทราบจำนวนของ inodes ที่สงวนไว้สำหรับการใช้งาน ตัวอย่างเช่น:

$ df --inodes / /home
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1            3981312  641704 3339608   17% /
/dev/sda8            30588928  332207 30256721    2% /home
$ sudo find / -xdev -print | wc -l
642070
$ sudo find /home -print | wc -l
332158
$ sudo find /home -type f -print | wc -l
284204

โปรดสังเกตว่าจำนวนรายการที่ส่งคืนจากfindมีค่ามากกว่าIUsedระบบไฟล์รูท (/) แต่น้อยกว่าสำหรับ / home แต่ทั้งคู่อยู่ในช่วง 0.0005% สาเหตุของความคลาดเคลื่อนนั้นเกิดจากการเชื่อมโยงอย่างหนักและสถานการณ์ที่คล้ายคลึงกัน

จำไว้ว่าไดเรกทอรี, symlink, ซ็อกเก็ตโดเมน UNIX และไพพ์ที่มีชื่อเป็น 'ไฟล์' ทั้งหมดที่เกี่ยวข้องกับระบบไฟล์ ดังนั้นการใช้find -type fแฟล็กจึงไม่ถูกต้องอย่างรุนแรงจากมุมมองทางสถิติ


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

1
ไม่ได้โดยไม่ต้องตรวจสอบ inodes ของแต่ละไฟล์ในระบบไฟล์ซึ่งจะคล้ายกับการค้นหา
Arcege

df เข้าใจระบบไฟล์ส่วนใหญ่หรือไม่ (ext2-4, ntfs, fat, reiserfs และอื่น ๆ )?
beatgammit

มันจะเข้าใจระบบไฟล์ทุกประเภทที่สามารถติดตั้งได้ ระบบไฟล์บางชนิดไม่มี inodes (ตัวอย่างเช่น fat) dfจะแสดงจำนวน inode ทั้งหมดเป็น 0 ในระบบไฟล์เหล่านั้น ชนิดอื่น ๆ ควรแสดงสถานะไอโหนดของระบบไฟล์
Arcege

คุณจะต้องเปลี่ยนเส้นทางข้อผิดพลาดเพื่อ/dev/nullดูว่าคุณจะได้รับสายเตือนคุณว่าไฟล์ใน/proc"เสมือน"?
n0pe

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