Bagaimana cara mengubah Kilobyte menjadi Megabita atau gigabita melalui terminal?

15

Saya mencoba menemukan ukuran disk saya, jadi saya menjalankan perintah di bawah ini

$ sudo fdisk -s /dev/sda
976762584

Itu menunjukkan seperti di atas. Saya pikir ukuran ( 976762584) dari disk ditampilkan dalam kilobyte. Bagaimana cara mengonversi nilai menjadi megabita atau gigabita melalui terminal untuk pemahaman yang lebih baik?

Avinash Raj
sumber
1
Ini akan melakukan trik: df -h /. Tampilkan ukuran /dalam -hformat yang dapat dibaca uman.
blade19899
fdisk -s juga sudah usang sehingga mungkin lebih baik untuk digunakanblockdev --getsize64
bac0n
@ blade19899 yang akan mendapatkan ukuran partisi bukan keseluruhan disk
bac0n

Jawaban:

9

Shell melakukan aritmatika integer tetap-lebar tanpa memeriksa limpahan. Jadi, ketika melakukan perhitungan yang mungkin melibatkan sejumlah besar atau fraksi, bcadalah pilihan yang baik. Untuk mendapatkan megabita:

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

Untuk mendapatkan gigabyte:

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

Tugas scale=2memberitahu bcuntuk menampilkan dua tempat desimal.

John1024
sumber
Saya suka menggunakan herestrings untuk kasus-kasus seperti ini:bc <<<"scale=2; $(sudo fdisk -s /dev/sda6) / 1024^2"
dimo414
7

numfmt(bagian dari GNU Coreutils ) dapat digunakan di sini:

$ sudo fdisk -s /dev/sda | numfmt --to=iec-i --suffix=B --format="%.2f"
931.52MiB
Luís Bianchin
sumber
1
Termasuk output dari perintah dalam jawaban Anda akan membuatnya lebih lengkap.
WinEunuuchs2Unix
3

Dalam awk

Untuk menemukan ukuran disk dalam Megabita,

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

Untuk menemukan ukuran disk dalam Gigabytes,

$ sudo fdisk -s /dev/sda | awk '{$1=$1/(1024^2); print $1,"GB";}'
931.513 GB
Avinash Raj
sumber
bukannya sudo fdisk -s /dev/sdaAnda dapat menggunakandf | grep ^\/dev.*/\$
Dean Rather
@DeanRather sudo fdiskadalah ruang lingkup proyek yang ditentukan dalam pertanyaan.
WinEunuuchs2Unix
3

Jika ukuran diberikan dalam Kilobyte, Anda perlu menghitung melalui ekspresi bawaan Bash. Dengan asumsi ukuran blok = 512B, Anda harus mengetik:

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

Ini akan menunjukkan ukuran disk dalam KiB. Untuk melangkah lebih jauh, cukup tambahkan /1024ke akhir ekspresi:

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

Ini akan menunjukkan ukuran disk dalam MiB dan sebagainya.

Danatela
sumber
2
Bagus sekali. Sebagai catatan kecil, $[...]formatnya sudah usang dan, seperti man bashdikatakan, "akan dihapus dalam versi yang akan datang." Format yang saat ini disukai untuk aritmatika shell adalah $((...)).
John1024
@ John1024 terima kasih atas catatannya. Tidak menebak bahwa sintaks kurung ganda sesuai.
Danatela
Menyalin dan menempel dua perintah menghasilkan kesalahan karena sudotidak ada. Juga satuan ukuran tidak dicetak.
WinEunuuchs2Unix
pengukuran salah.
bac0n
tetapi Anda bisa melakukannyaecho $((($(cat /sys/block/sda/size)*512)/1024**3))GB
bac0n
1

Anda dapat melakukan ini secara native dengan Bash dan angka pseudo-floating point. Tentukan fungsi ini di Anda ~/.bashrcdan buka kembali terminal Anda:

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 ()

Sekarang ujilah:

$ sudo fdisk -s /dev/sda
976762584

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

Ada alat yang disebut unit, yang dapat digunakan untuk konversi satuan:

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

Ini tersedia sebagai paket via apt install units.

Ini adalah alat yang cukup standar, yang dapat ditemukan diinstal secara default pada berbagai sistem seperti UNIX lainnya (misalnya, FreeBSD ). Perlu diingat bahwa unit (1) sintaksis mungkin berbeda di seluruh implementasi yang tersedia di berbagai sistem operasi. Berikut konversi yang sama tetapi kali ini dengan unit FreeBSD (1) :

$ units -o "%0.f" -t "4 gigabytes" "megabytes"
4096
Mateusz Piotrowski
sumber