Wie konvertiere ich Kilobyte über das Terminal in Megabyte oder Gigabyte?

15

Ich versuche, die Größe meiner Festplatte zu ermitteln, daher habe ich den folgenden Befehl ausgeführt

$ sudo fdisk -s /dev/sda
976762584

Es zeigt wie oben. Ich denke, die Größe ( 976762584) der Festplatte wird in Kilobyte angezeigt. Wie konvertiere ich den Wert zum besseren Verständnis über das Terminal in Megabyte oder Gigabyte?

Avinash Raj
quelle
1
Dies würde den Trick tun : df -h /. Zeigen Sie die Größe /in einem -human lesbaren Format an.
Blade19899
fdisk -s ist auch veraltet, also wahrscheinlich besser zu benutzenblockdev --getsize64
bac0n
@ Blade19899, ​​die die Größe der Partition nicht die gesamte Festplatte erhalten
bac0n

Antworten:

9

Die Shell führt eine Ganzzahlarithmetik mit fester Breite durch, ohne auf Überlauf zu prüfen. Wenn Sie also eine Berechnung durchführen, die entweder große Zahlen oder Brüche umfasst, bcist dies eine gute Wahl. So erhalten Sie Megabyte:

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

Um Gigabyte zu bekommen:

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

Die Zuweisung scale=2weist bcan, zwei Dezimalstellen anzuzeigen.

John1024
quelle
Ich mag es, Herestrings für Fälle wie diesen zu verwenden:bc <<<"scale=2; $(sudo fdisk -s /dev/sda6) / 1024^2"
dimo414
6

numfmt(Teil von GNU Coreutils ) kann hier verwendet werden:

$ sudo fdisk -s /dev/sda | numfmt --to=iec-i --suffix=B --format="%.2f"
931.52MiB
Luís Bianchin
quelle
1
Wenn Sie die Ausgabe des Befehls in Ihre Antwort aufnehmen, wird sie vollständiger.
WinEunuuchs2Unix
3

In awk

Um die Größe der Festplatte in Megabyte zu ermitteln,

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

Um die Größe der Festplatte in Gigabyte zu ermitteln,

$ sudo fdisk -s /dev/sda | awk '{$1=$1/(1024^2); print $1,"GB";}'
931.513 GB
Avinash Raj
quelle
stattdessen sudo fdisk -s /dev/sdakönnen Sie verwendendf | grep ^\/dev.*/\$
Dean Rather
@ DeanRather sudo fdiskwar der fragliche Projektumfang.
WinEunuuchs2Unix
3

Wenn die Größe in Kilobyte angegeben wird, müssen Sie die in Bash integrierten Ausdrücke berechnen. Angenommen, die Blockgröße = 512B, müssen Sie Folgendes eingeben:

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

Dies zeigt die Festplattengröße in KiB an. Um weiter zu gehen, fügen Sie einfach /1024am Ende des Ausdrucks Folgendes hinzu:

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

Dies zeigt die Festplattengröße in MiB usw. an.

Danatela
quelle
2
Schön gemacht. Als kleine Anmerkung wurde das $[...]Format veraltet und wird, wie man bashgesagt, "in kommenden Versionen entfernt". Das derzeit bevorzugte Format für die Shell-Arithmetik ist $((...)).
John1024
@ John1024 danke für den Hinweis. Ich habe nicht vermutet, dass die Syntax in doppelten Klammern angemessen ist.
Danatela
Das Kopieren und Einfügen von zwei Befehlen führt zu Fehlern, da diese sudofehlen. Auch die Maßeinheit wird nicht ausgedruckt.
WinEunuuchs2Unix
Messung ist falsch.
Bac0n
aber Sie könnten tunecho $((($(cat /sys/block/sda/size)*512)/1024**3))GB
bac0n
1

Sie können dies nativ mit Bash- und Pseudo-Gleitkommazahlen tun. Definieren Sie diese Funktion in Ihrem ~/.bashrcund öffnen Sie Ihr Terminal erneut:

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

Testen Sie es jetzt:

$ sudo fdisk -s /dev/sda
976762584

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

Es gibt ein Tool namens Einheiten, das für die Einheitenumrechnung verwendet werden kann:

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

Es ist als Paket über erhältlich apt install units.

Es ist ein ziemlich standardmäßiges Tool, das standardmäßig auf verschiedenen anderen UNIX-ähnlichen Systemen (z . B. FreeBSD ) installiert ist . Beachten Sie, dass die Syntax von Einheiten (1) je nach Implementierung auf verschiedenen Betriebssystemen unterschiedlich sein kann. Hier ist die gleiche Konvertierung, diesmal jedoch mit FreeBSD-Einheiten (1) :

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