Comment convertir des kilo-octets en mégaoctets ou gigaoctets via un terminal?

15

J'essaie de trouver la taille de mon disque, j'ai donc exécuté la commande ci-dessous

$ sudo fdisk -s /dev/sda
976762584

Il montre comme ci-dessus. Je pense que la taille ( 976762584) du disque est indiquée en kilo-octets. Comment convertir la valeur en mégaoctets ou gigaoctets via le terminal pour une meilleure compréhension?

Avinash Raj
la source
1
Cela ferait l'affaire: df -h /. Affiche la taille de /dans un -hformat lisible par uman.
blade19899
fdisk -s est également déconseillé, donc probablement mieux à utiliserblockdev --getsize64
bac0n
@ blade19899 qui obtiendra la taille de la partition et non le disque entier
bac0n

Réponses:

9

L'interpréteur de commandes utilise une arithmétique d'entier à largeur fixe sans vérification de dépassement. Ainsi, lorsque vous effectuez un calcul qui peut impliquer de grands nombres ou des fractions, bcest un bon choix. Pour obtenir des mégaoctets:

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

Pour obtenir des gigaoctets:

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

L'affectation scale=2indique bcd'afficher deux décimales.

John1024
la source
J'aime utiliser les hérestrings pour des cas comme celui-ci:bc <<<"scale=2; $(sudo fdisk -s /dev/sda6) / 1024^2"
dimo414
7

numfmt(partie de GNU Coreutils ) peut être utilisé ici:

$ sudo fdisk -s /dev/sda | numfmt --to=iec-i --suffix=B --format="%.2f"
931.52MiB
Luís Bianchin
la source
1
Inclure la sortie de la commande dans votre réponse la rendrait plus complète.
WinEunuuchs2Unix
3

Dans awk

Pour trouver la taille du disque en mégaoctets,

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

Pour trouver la taille du disque en gigaoctets,

$ sudo fdisk -s /dev/sda | awk '{$1=$1/(1024^2); print $1,"GB";}'
931.513 GB
Avinash Raj
la source
au lieu de sudo fdisk -s /dev/sdavous pouvez utiliserdf | grep ^\/dev.*/\$
Dean Rather
@DeanRather sudo fdiskétait la portée du projet définie en question.
WinEunuuchs2Unix
3

Si la taille est indiquée en kilo-octets, vous devez effectuer le calcul via les expressions intégrées Bash. En supposant que la taille du bloc = 512B, vous devez taper:

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

Cela montrera la taille du disque en Ko. Pour aller plus loin, il suffit d'ajouter /1024à la fin de l'expression:

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

Cela montrera la taille du disque en MiB et ainsi de suite.

Danatela
la source
2
Bien fait. À titre mineur, le $[...]format a été déconseillé et, comme il est man bashdit, "sera supprimé dans les prochaines versions". Le format actuellement préféré pour l'arithmétique du shell est $((...)).
John1024
@ John1024 merci pour la note. Je n'ai pas deviné que la syntaxe des crochets doubles était appropriée.
Danatela
Copier et coller deux commandes génère une erreur car il sudomanque. De plus, l'unité de mesure ne s'imprime pas.
WinEunuuchs2Unix
la mesure est fausse.
bac0n
mais vous pourriez le faireecho $((($(cat /sys/block/sda/size)*512)/1024**3))GB
bac0n
1

Vous pouvez le faire en mode natif avec Bash et les nombres à virgule flottante. Définissez cette fonction dans votre ~/.bashrcet rouvrez votre 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 ()

Maintenant testez-le:

$ sudo fdisk -s /dev/sda
976762584

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

Il existe un outil appelé unités, qui peut être utilisé pour la conversion des unités:

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

Il est disponible sous forme de package via apt install units.

Il s'agit d'un outil assez standard, qui peut être trouvé installé par défaut sur divers autres systèmes de type UNIX (par exemple, FreeBSD ). Gardez à l'esprit que la syntaxe d'unités (1) peut différer selon les implémentations disponibles sur différents systèmes d'exploitation. Voici la même conversion mais cette fois avec les unités FreeBSD (1) :

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