¿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?


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.


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


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

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.


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.