Come convertire Kilobyte in Megabyte o gigabyte tramite terminale?


16

Provo a trovare la dimensione del mio disco, quindi ho eseguito il comando seguente

$ sudo fdisk -s /dev/sda
976762584

Mostra come sopra. Penso che la dimensione ( 976762584) del disco sia mostrata in kilobyte. Come posso convertire il valore in megabyte o gigabyte tramite il terminale per una migliore comprensione?


1
Ciò farebbe il trucco: df -h /. Visualizza le dimensioni di /in un -hformato leggibile dall'uomo.
blade19899,

fdisk -s è anche deprecato, quindi probabilmente è meglio usarloblockdev --getsize64
bac0n

@ blade19899 che otterrà la dimensione della partizione non l'intero disco
bac0n

Risposte:


10

La shell esegue l'aritmetica di numeri interi a larghezza fissa senza controllo di overflow. Quindi, quando si esegue un calcolo che potrebbe comportare numeri o frazioni di grandi dimensioni, bcè una buona scelta. Per ottenere megabyte:

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

Per ottenere gigabyte:

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

L'assegnazione scale=2indica bcdi visualizzare due cifre decimali.


Mi piace usare i herestring per casi come questo:bc <<<"scale=2; $(sudo fdisk -s /dev/sda6) / 1024^2"
dimo414


4

In awk

Per trovare la dimensione del disco in Megabyte,

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

Per trovare la dimensione del disco in Gigabyte,

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

invece di sudo fdisk -s /dev/sdate puoi usaredf | grep ^\/dev.*/\$
Dean Rather il

@DeanRather sudo fdiskera l'ambito del progetto definito in questione.
WinEunuuchs2Unix

3

Se la dimensione è indicata in Kilobyte, è necessario calcolare tramite espressioni incorporate di Bash. Supponendo che la dimensione del blocco = 512 B, devi digitare:

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

Questo mostrerà le dimensioni del disco in KiB. Per andare oltre, basta aggiungere /1024alla fine dell'espressione:

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

Questo mostrerà le dimensioni del disco in MiB e così via.


2
Ben fatto. Come nota minore, il $[...]formato è stato deprecato e, come man bashdetto, "verrà rimosso nelle prossime versioni". Il formato attualmente preferito per l'aritmetica della shell è $((...)).
Giovanni 1024,

@ John1024 grazie per la nota. Non immaginavo che la sintassi delle doppie parentesi fosse appropriata.
Danatela,

Copia e incolla due comandi generano errori perché sudomanca. Inoltre l'unità di misura non viene stampata.
WinEunuuchs2Unix

la misurazione è sbagliata.
bac0n

ma potresti farloecho $((($(cat /sys/block/sda/size)*512)/1024**3))GB
bac0n

1

Puoi farlo nativamente con i numeri di Bash e pseudo-virgola mobile. Definisci questa funzione nel tuo ~/.bashrce riapri il tuo terminale:

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

Ora provalo:

$ sudo fdisk -s /dev/sda
976762584

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

1

C'è uno strumento chiamato unità, che può essere utilizzato per la conversione delle unità:

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

È disponibile come pacchetto tramite apt install units.

È uno strumento abbastanza standard, che può essere trovato installato di default su vari altri sistemi simili a UNIX (es. FreeBSD ). Tieni presente che la sintassi delle unità (1) può variare a seconda delle implementazioni disponibili su vari sistemi operativi. Ecco la stessa conversione ma questa volta con le unità FreeBSD (1) :

$ units -o "%0.f" -t "4 gigabytes" "megabytes"
4096
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.