¿Cómo convertir kilobytes a megabytes o gigabytes a través del terminal?

15

Intento encontrar el tamaño de mi disco, así que ejecuté el siguiente comando

$ sudo fdisk -s /dev/sda
976762584

Se muestra como arriba. Creo que el tamaño ( 976762584) del disco se muestra en kilobytes. ¿Cómo convierto el valor a megabytes o gigabytes a través de la terminal para una mejor comprensión?

Avinash Raj
fuente
1
Esto haría el truco: df -h /. Muestra el tamaño de /en un -hformato legible.
blade19899
fdisk -s también está en desuso, por lo que probablemente sea mejor usarloblockdev --getsize64
bac0n
@ blade19899 que obtendrá el tamaño de la partición, no todo el disco
bac0n

Respuestas:

9

El shell realiza aritmética de enteros de ancho fijo sin verificación de desbordamiento. Por lo tanto, al hacer un cálculo que podría involucrar grandes números o fracciones, bces una buena opción. Para obtener megabytes:

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

Para obtener gigabytes:

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

La asignación scale=2le indica bcque muestre dos decimales.

John1024
fuente
Me gusta usar herejes para casos como este:bc <<<"scale=2; $(sudo fdisk -s /dev/sda6) / 1024^2"
dimo414
7

numfmt(parte de GNU Coreutils ) se puede usar aquí:

$ sudo fdisk -s /dev/sda | numfmt --to=iec-i --suffix=B --format="%.2f"
931.52MiB
Luís Bianchin
fuente
1
Incluir el resultado del comando en su respuesta lo haría más completo.
WinEunuuchs2Unix
3

En awk

Para encontrar el tamaño del disco en megabytes,

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

Para encontrar el tamaño del disco en Gigabytes,

$ sudo fdisk -s /dev/sda | awk '{$1=$1/(1024^2); print $1,"GB";}'
931.513 GB
Avinash Raj
fuente
en lugar de sudo fdisk -s /dev/sdaque pueda usardf | grep ^\/dev.*/\$
Dean Rather
@DeanRather sudo fdiskfue el alcance del proyecto definido en cuestión.
WinEunuuchs2Unix
3

Si el tamaño se da en kilobytes, debe calcular mediante las expresiones integradas de Bash. Suponiendo que el tamaño del bloque = 512B, debe escribir:

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

Esto mostrará el tamaño del disco en KiB. Para ir más allá, solo agregue /1024al final de la expresión:

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

Esto mostrará el tamaño del disco en MiB y así sucesivamente.

Danatela
fuente
2
Bien hecho. Como nota menor, el $[...]formato ha quedado en desuso y, como man bashdice, "se eliminará en las próximas versiones". El formato preferido actualmente para la aritmética de shell es $((...)).
John1024
@ John1024 gracias por la nota. No adiviné que la sintaxis de doble paréntesis es apropiada.
Danatela el
Copiar y pegar dos comandos genera un error porque sudofalta. Además, la unidad de medida no se imprime.
WinEunuuchs2Unix
La medida es incorrecta.
Bac0n
pero podrías hacerloecho $((($(cat /sys/block/sda/size)*512)/1024**3))GB
bac0n
1

Puede hacer esto de forma nativa con Bash y números de punto seudo-flotante. Defina esta función en su ~/.bashrcy vuelva a abrir su 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 ()

Ahora pruébalo:

$ sudo fdisk -s /dev/sda
976762584

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

Hay una herramienta llamada unidades, que se puede usar para la conversión de unidades:

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

Está disponible como un paquete a través de apt install units.

Es una herramienta bastante estándar, que se puede encontrar instalada por defecto en otros sistemas similares a UNIX (por ejemplo, FreeBSD ). Tenga en cuenta que la sintaxis de las unidades (1) puede diferir entre las implementaciones disponibles en varios sistemas operativos. Aquí está la misma conversión, pero esta vez con unidades FreeBSD (1) :

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