ฉันสามารถใช้ls -l
เพื่อรับขนาดแบบลอจิคัลของไฟล์ แต่มีวิธีการรับขนาดทางกายภาพของไฟล์หรือไม่?
ฉันสามารถใช้ls -l
เพื่อรับขนาดแบบลอจิคัลของไฟล์ แต่มีวิธีการรับขนาดทางกายภาพของไฟล์หรือไม่?
คำตอบ:
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 ของคุณ
du
จะแสดงจำนวนข้อมูลที่สามารถอ่านได้จริงในขณะที่ls
แสดงขอบเขตการจัดสรรดิสก์
du
แสดงจำนวนดิสก์ที่ใช้งานจริงโดยไฟล์ในขณะที่ขนาดชัดเจน (ขนาดตรรกะ) ที่แสดงโดยls
จำนวนไบต์ที่โปรแกรมสามารถอ่านได้ หากไฟล์มีขนาดเล็กบางส่วนของไบต์ที่อ่านจะเป็นศูนย์ แต่จะยังคงถูกส่งไปยังโปรแกรมที่อ่าน (ไม่ใช่จากดิสก์)
ฉันได้ขนาดไฟล์เป็นไบต์เช่นนี้:
actualsize=$(du -b "${file}" | cut -f 1)