Jak przekonwertować Kilobajty do Megabajtów lub Gigabajtów przez terminal?

16

Próbuję znaleźć rozmiar mojego dysku, więc uruchomiłem poniższe polecenie

$ sudo fdisk -s /dev/sda
976762584

Pokazuje jak wyżej. Myślę, że rozmiar ( 976762584) dysku jest pokazany w kilobajtach. Jak przekonwertować wartość na megabajty lub gigabajty przez terminal, aby lepiej zrozumieć?

Avinash Raj
źródło
1
To by rade: df -h /. Wyświetl rozmiar /w -hczytelnym formacie.
blade19899
fdisk -s jest również przestarzały, więc prawdopodobnie lepiej go używaćblockdev --getsize64
bac0n
@ blade19899, ​​który dostanie rozmiar partycji, a nie całego dysku
bac0n

Odpowiedzi:

10

Powłoka wykonuje arytmetykę liczb całkowitych o stałej szerokości bez sprawdzania przepełnienia. Tak więc, wykonując obliczenia, które mogą obejmować duże liczby lub ułamki, bcjest dobrym wyborem. Aby uzyskać megabajty:

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

Aby uzyskać gigabajty:

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

Zadanie scale=2mówi bco wyświetleniu dwóch miejsc po przecinku.

John1024
źródło
Lubię używać ciągów znaków w takich przypadkach:bc <<<"scale=2; $(sudo fdisk -s /dev/sda6) / 1024^2"
dimo414,
8

numfmt(część GNU Coreutils ) można użyć tutaj:

$ sudo fdisk -s /dev/sda | numfmt --to=iec-i --suffix=B --format="%.2f"
931.52MiB
Luís Bianchin
źródło
1
Uwzględnienie danych wyjściowych polecenia w odpowiedzi zwiększyłoby jego kompletność.
WinEunuuchs2Unix
4

W awk

Aby znaleźć rozmiar dysku w megabajtach,

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

Aby znaleźć rozmiar dysku w gigabajtach,

$ sudo fdisk -s /dev/sda | awk '{$1=$1/(1024^2); print $1,"GB";}'
931.513 GB
Avinash Raj
źródło
zamiast sudo fdisk -s /dev/sdaciebie możesz użyćdf | grep ^\/dev.*/\$
Dean Rather
@DeanRather sudo fdiskbył zdefiniowanym zakresem projektu.
WinEunuuchs2Unix
3

Jeśli rozmiar podano w kilobajtach, musisz obliczyć za pomocą wbudowanych wyrażeń Bash. Zakładając rozmiar bloku = 512B, musisz wpisać:

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

To pokaże rozmiar dysku w KiB. Aby przejść dalej, po prostu dodaj /1024na końcu wyrażenia:

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

To pokaże rozmiar dysku w MiB i tak dalej.

Danatela
źródło
2
Ładnie wykonane. Co ważne, $[...]format ten jest przestarzały i, jak man bashmówi, „zostanie usunięty w nadchodzących wersjach”. Obecnie preferowanym formatem arytmetyki powłoki jest $((...)).
John1024,
@ John1024 dzięki za notatkę. Nie zgadłem, że składnia podwójnych nawiasów jest odpowiednia.
Danatela
Kopiowanie i wklejanie dwóch poleceń generuje błąd, ponieważ sudobrakuje. Również jednostka miary nie jest drukowana.
WinEunuuchs2Unix
pomiar jest zły.
bac0n
ale można to zrobićecho $((($(cat /sys/block/sda/size)*512)/1024**3))GB
bac0n
1

Możesz to zrobić natywnie za pomocą liczb Bash i liczb pseudo zmiennoprzecinkowych. Zdefiniuj tę funkcję w swoim ~/.bashrci ponownie otwórz terminal:

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

Teraz przetestuj:

$ sudo fdisk -s /dev/sda
976762584

$ sudo fdisk -s /dev/sda | BytesToHuman
931.51 MiB
WinEunuuchs2Unix
źródło
1

Istnieje narzędzie o nazwie jednostki, które można wykorzystać do konwersji jednostek:

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

Jest dostępny jako pakiet przez apt install units.

Jest to dość standardowe narzędzie, które można domyślnie zainstalować na różnych innych systemach uniksowych (np. FreeBSD ). Należy pamiętać, że składnia jednostek (1) może się różnić w zależności od implementacji dostępnych w różnych systemach operacyjnych. Oto ta sama konwersja, ale tym razem z jednostkami FreeBSD (1) :

$ units -o "%0.f" -t "4 gigabytes" "megabytes"
4096
Mateusz Piotrowski
źródło