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

16

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

$ sudo fdisk -s /dev/sda
976762584

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

Авинаш Радж
источник
1
Это бы сработало df -h /. Показать размер /в -hчитаемом формате.
blade19899
fdisk -s также не рекомендуется, так что, вероятно, лучше использоватьblockdev --getsize64
bac0n
@ blade19899, ​​который получит размер раздела, а не весь диск
bac0n

Ответы:

10

Оболочка выполняет целочисленную арифметику фиксированной ширины без проверки переполнения. Таким образом, при выполнении вычислений, которые могут включать большие числа или дроби, 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отображать два десятичных знака.

John1024
источник
Мне нравится использовать herestrings для таких случаев:bc <<<"scale=2; $(sudo fdisk -s /dev/sda6) / 1024^2"
dimo414
8

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

$ sudo fdisk -s /dev/sda | numfmt --to=iec-i --suffix=B --format="%.2f"
931.52MiB
Луис Бьянчин
источник
1
Включение вывода команды в ваш ответ сделает его более полным.
WinEunuuchs2Unix
4

В 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
Авинаш Радж
источник
вместо sudo fdisk -s /dev/sdaтебя можно использоватьdf | grep ^\/dev.*/\$
декан скорее
@DeanRather sudo fdiskбыл областью действия проекта, определенной в вопросе.
WinEunuuchs2Unix
3

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

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

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

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

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

Danatela
источник
2
Красиво сделано. Как незначительное примечание, $[...]формат устарел и, как man bashговорится, «будет удален в следующих версиях». В настоящее время предпочтительным форматом для арифметики оболочки является $((...)).
John1024
@ John1024 спасибо за примечание. Не догадывался, что синтаксис в двойных скобках подходит.
Данатела
Копирование и вставка двух команд приводит к ошибке, потому что sudoотсутствует. Также единица измерения не распечатывается.
WinEunuuchs2Unix
измерение неверно.
bac0n
но вы могли бы сделатьecho $((($(cat /sys/block/sda/size)*512)/1024**3))GB
bac0n
1

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

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

Теперь проверьте это:

$ sudo fdisk -s /dev/sda
976762584

$ sudo fdisk -s /dev/sda | BytesToHuman
931.51 MiB
WinEunuuchs2Unix
источник
1

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

$ 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
Матеуш Пиотровский
источник