Как конвертировать килобайты в мегабайты или гигабайты через терминал?

Я пытаюсь определить размер моего диска, поэтому я запустил приведенную ниже команду

$ sudo fdisk -s /dev/sda
976762584

. Я думаю, что размер (976762584) диска показан в килобайтах. Как преобразовать значение в мегабайты или гигабайты через терминал для лучшего понимания?

12
задан 25 April 2014 в 07:38

6 ответов

Оболочка делает целочисленную арифметику фиксированной ширины без проверки на переполнение. Так, когда выполнение вычисления, которое могло бы включить или большие количества или части, bc, является хорошим выбором. Получить мегабайты:

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

Для получения гигабайтов:

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

присвоение scale=2 говорит bc отображать два десятичных разряда.

0
ответ дан 25 April 2014 в 07:38

Если размер дан в Килобайтах, необходимо вычислить через Bash встроенные выражения. Принимая размер блока = 512B, необходимо ввести:

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

Это покажет размер диска в кибибайте. Для движения далее просто добавьте /1024 до конца выражения:

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

Это покажет размер диска в мебибайт и так далее.

0
ответ дан 25 April 2014 в 07:38

В awk

, Чтобы найти, что размер диска в Мегабайтах,

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

находит размер диска в Гигабайтах,

$ sudo fdisk -s /dev/sda | awk '{$1=$1/(1024^2); print $1,"GB";}'
931.513 GB
0
ответ дан 25 April 2014 в 07:38

numfmt (часть GNU Coreutils), может использоваться здесь:

$ sudo fdisk -s /dev/sda | numfmt --to=iec-i --suffix=B --format="%.2f"
931.52MiB
3
ответ дан 23 November 2019 в 03:37

Можно сделать это исходно с Bash и псевдочислами с плавающей точкой. Определите эту функцию в Вашем ~/.bashrc и вновь откройте свой терминал:

function BytesToHuman() {

    # https://unix.stackexchange.com/questions/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 ()

Теперь протестируйте его:

$ sudo fdisk -s /dev/sda
976762584

$ sudo fdisk -s /dev/sda | BytesToHuman
931.51 MiB
1
ответ дан 23 November 2019 в 03:37

Есть инструмент под названием units, который можно использовать для преобразования единиц:

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

Он доступен в виде пакета через apt install units .

Это довольно стандартный инструмент, который можно найти установленным по умолчанию в различных других UNIX-подобных системах (например, FreeBSD ). Имейте в виду, что синтаксис модулей (1) может отличаться в разных реализациях, доступных в разных операционных системах. Вот то же преобразование, но на этот раз с модулями FreeBSD (1) :

$ units -o "%0.f" -t "4 gigabytes" "megabytes"
4096
3
ответ дан 17 March 2020 в 11:23

Другие вопросы по тегам:

Похожие вопросы: