วิธีรับขนาดฟิสิคัลของไฟล์ใน Linux?


12

ฉันสามารถใช้ls -lเพื่อรับขนาดแบบลอจิคัลของไฟล์ แต่มีวิธีการรับขนาดทางกายภาพของไฟล์หรือไม่?


โปรดกำหนดความหมายของขนาด "กายภาพ"
Jörg W Mittag

คำตอบ:


28

ls -lจะให้ขนาดที่ชัดเจนของไฟล์ซึ่งเป็นจำนวนไบต์ที่โปรแกรมอ่านถ้ามันอ่านไฟล์ตั้งแต่ต้นจนจบ duจะให้ขนาดของไฟล์ "บนดิสก์"

โดยค่าเริ่มต้นduจะให้ขนาดของไฟล์เป็นจำนวนบล็อกดิสก์ แต่คุณสามารถใช้-hเพื่อรับหน่วยที่มนุษย์สามารถอ่านได้แทน ดูคู่มือสำหรับduระบบของคุณ

โปรดทราบว่าด้วย GNU coreutil ของdu(ซึ่งอาจเป็นสิ่งที่คุณมีบน Linux) -bเพื่อรับ bytes หมายถึง--apparent-sizeตัวเลือก นี่ไม่ใช่สิ่งที่คุณต้องการใช้เพื่อรับจำนวนไบต์ที่ใช้จริงบนดิสก์ แต่การใช้งานหรือ--block-size=1-B 1

ด้วย GNU lsคุณสามารถทำได้ls -s --block-size=1ด้วยไฟล์ นี่จะให้หมายเลขเดียวdu -B 1กับไฟล์


ตัวอย่าง:

$ ls -l file
-rw-r--r--  1 myself wheel  536870912 Apr  8 11:44 file

$ ls -lh file
-rw-r--r--  1 myself wheel   512M Apr  8 11:44 file

$ du -h file
24K    file

$ du -B 1 file
24576   file

$ ls -s --block-size=1 file
24576 file

นี่หมายความว่าเป็นไฟล์ 512 MB ที่ใช้เวลาประมาณ 24 KB บนดิสก์ มันเป็นไฟล์กระจัดกระจาย (ส่วนใหญ่เป็นศูนย์ที่ไม่ได้เขียนลงดิสก์ แต่แสดงเป็น "หลุม" ตรรกะในไฟล์) ไฟล์กระจัดกระจายเป็นเรื่องปกติเมื่อทำงานกับไฟล์ขนาดใหญ่ที่จัดสรรล่วงหน้าเช่นอิมเมจดิสก์สำหรับเครื่องเสมือนหรือไฟล์สว็อปเป็นต้นการสร้างไฟล์แบบเบาบางนั้นรวดเร็วในขณะที่การเติมด้วยเลขศูนย์จะช้า (และไม่จำเป็น)

ดูคู่มือสำหรับfallocateระบบ Linux ของคุณ


ในกรณีนี้ความแตกต่างนี้สำคัญหรือไม่ คุณสามารถทำเป็นตัวอย่างจริงได้หรือไม่? ขอบคุณล่วงหน้า.
D'Arcy Nader

1
@ D'ArcyNader ดูคำตอบที่ปรับปรุงแล้ว
Kusalananda

แก้ไขให้ถูกต้องหากฉันเข้าใจผิดบางอย่าง แต่ดูเหมือนว่าประโยคแรกเป็นอีกทางหนึ่ง: stackoverflow.com/a/31437673/3701431 duจะแสดงจำนวนข้อมูลที่สามารถอ่านได้จริงในขณะที่lsแสดงขอบเขตการจัดสรรดิสก์
Sergiy Kolodyazhnyy

2
@SergiyKolodyazhnyy (ขออภัยที่จะตอบช้า) ไม่duแสดงจำนวนดิสก์ที่ใช้งานจริงโดยไฟล์ในขณะที่ขนาดชัดเจน (ขนาดตรรกะ) ที่แสดงโดยlsจำนวนไบต์ที่โปรแกรมสามารถอ่านได้ หากไฟล์มีขนาดเล็กบางส่วนของไบต์ที่อ่านจะเป็นศูนย์ แต่จะยังคงถูกส่งไปยังโปรแกรมที่อ่าน (ไม่ใช่จากดิสก์)
Kusalananda

นี่เป็นคำตอบที่ดีจริงๆ
Lizardx

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