วิธีการแปลงกิโลไบต์เป็นเมกะไบต์หรือกิกะไบต์ผ่านเทอร์มินัล


16

ฉันพยายามหาขนาดของดิสก์ดังนั้นฉันจึงรันคำสั่งด้านล่าง

$ sudo fdisk -s /dev/sda
976762584

มันแสดงให้เห็นว่าข้างต้น ฉันคิดว่าขนาด ( 976762584) ของดิสก์จะแสดงเป็นกิโลไบต์ ฉันจะแปลงค่าเป็นเมกะไบต์หรือกิกะไบต์ผ่านเทอร์มินัลเพื่อความเข้าใจที่ดีขึ้นได้อย่างไร


1
นี่จะเป็นการหลอกลวง: df -h /. แสดงขนาด/ใน-hรูปแบบที่สามารถอ่านได้
blade19899

fdisk -s เลิกใช้แล้วดังนั้นน่าจะดีกว่าการใช้blockdev --getsize64
bac0n

@ blade19899 ที่จะได้รับขนาดของพาร์ติชันไม่ใช่ดิสก์ทั้งหมด
bac0n

คำตอบ:


10

เชลล์ทำการคำนวณเลขจำนวนเต็มความกว้างคงที่โดยไม่มีการตรวจสอบการล้น ดังนั้นเมื่อทำการคำนวณที่อาจเกี่ยวข้องกับจำนวนมากหรือเศษส่วนbcเป็นตัวเลือกที่ดี วิธีรับเมกะไบต์:

$ echo "scale=2; $(sudo fdisk -s /dev/sda6) / 1024" | bc
13641.75

ในการรับกิกะไบต์:

$ echo "scale=2; $(sudo fdisk -s /dev/sda6) / 1024^2" | bc
12.70

การบ้านscale=2บอกbcให้แสดงทศนิยมสองตำแหน่ง


ฉันชอบใช้ herestrings สำหรับกรณีเช่นนี้:bc <<<"scale=2; $(sudo fdisk -s /dev/sda6) / 1024^2"
dimo414

8

numfmt(ส่วนหนึ่งของCoreUtils GNU ) สามารถใช้ที่นี่:

$ sudo fdisk -s /dev/sda | numfmt --to=iec-i --suffix=B --format="%.2f"
931.52MiB

1
การรวมเอาท์พุทจากคำสั่งในคำตอบของคุณจะทำให้สมบูรณ์ยิ่งขึ้น
WinEunuuchs2Unix

4

ใน awk

เพื่อหาขนาดของดิสก์ในหน่วยเมกะไบต์

$ sudo fdisk -s /dev/sda | awk '{$1=$1/1024; print $1,"MB";}'
953870 MB

เพื่อหาขนาดของดิสก์ในหน่วยกิกะไบต์

$ sudo fdisk -s /dev/sda | awk '{$1=$1/(1024^2); print $1,"GB";}'
931.513 GB

แทนการsudo fdisk -s /dev/sdaใช้งานได้df | grep ^\/dev.*/\$
Dean Rather

@DeanRather sudo fdiskเป็นขอบเขตโครงการที่กำหนดไว้ในคำถาม
WinEunuuchs2Unix

3

หากกำหนดขนาดเป็นกิโลไบต์คุณจะต้องคำนวณผ่านนิพจน์ในตัวของ Bash สมมติว่าขนาดบล็อก = 512B คุณต้องพิมพ์:

echo $((`fdisk -s /dev/sda`*512/1024))

นี่จะแสดงขนาดดิสก์เป็น KiB หากต้องการดำเนินการต่อไปเพียงเพิ่ม/1024ในส่วนท้ายของนิพจน์:

echo $((`fdisk -s /dev/sda`*512/1024/1024))

นี่จะแสดงขนาดดิสก์ใน MiB และอื่น ๆ


2
ทำได้ดีมาก ในฐานะที่เป็นโน้ตเล็กน้อย$[...]รูปแบบได้ถูกคัดค้านและตามที่man bashกล่าวว่า "จะถูกลบในเวอร์ชันที่กำลังจะมาถึง" $((...))รูปแบบที่แนะนำในขณะนี้สำหรับเลขคณิตเปลือก
John1024

@ John1024 ขอบคุณสำหรับการบันทึก ไม่ได้คาดเดาว่าไวยากรณ์ของวงเล็บปีกกาคู่นั้นเหมาะสมหรือไม่
Danatela

การคัดลอกและการวางสองคำสั่งสร้างข้อผิดพลาดเนื่องจากsudoไม่มี หน่วยวัดก็ไม่ได้พิมพ์ออกมา
WinEunuuchs2Unix

การวัดผิด
bac0n

แต่คุณสามารถทำได้echo $((($(cat /sys/block/sda/size)*512)/1024**3))GB
bac0n

1

คุณสามารถทำได้โดยกำเนิดด้วยหมายเลข Bash และ pseudo-floating กำหนดฟังก์ชั่นนี้ในของคุณ~/.bashrcและเปิดเครื่องอีกครั้ง:

function BytesToHuman() {

    # /unix/44040/a-standard-tool-to-convert-a-byte-count-into-human-kib-mib-etc-like-du-ls1/259254#259254

    read StdIn

    b=${StdIn:-0}; d=''; s=0; S=(Bytes {K,M,G,T,E,P,Y,Z}iB)
    while ((b > 1024)); do
        d="$(printf ".%02d" $((b % 1024 * 100 / 1024)))"
        b=$((b / 1024))
        let s++
    done
    echo "$b$d ${S[$s]}"

} # BytesToHuman ()

ตอนนี้ทดสอบ:

$ sudo fdisk -s /dev/sda
976762584

$ sudo fdisk -s /dev/sda | BytesToHuman
931.51 MiB

1

มีเครื่องมือที่เรียกว่าหน่วยซึ่งสามารถใช้สำหรับการแปลงหน่วย:

$ units -o "%.0f" -t "4 gibibytes" "mebibytes"
4096

apt install unitsมันสามารถใช้ได้เป็นแพคเกจผ่าน

เป็นเครื่องมือมาตรฐานที่สามารถพบได้โดยค่าเริ่มต้นในระบบที่คล้ายกับ UNIX อื่น ๆ (เช่นFreeBSD ) โปรดทราบว่าไวยากรณ์หน่วย (1) อาจแตกต่างกันไปตามการใช้งานที่มีอยู่ในระบบปฏิบัติการต่างๆ นี่คือการแปลงที่เหมือนกัน แต่คราวนี้มีหน่วย FreeBSD (1) :

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