Як конвертувати кілобайти в мегабайти або гігабайти через термінал?


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відображати два знаки після коми.


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


4

У див

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

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

Це покаже розмір диска в KiB. Щоб піти далі, просто додайте /1024до кінця виразу:

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

Це покаже розмір диска в MiB тощо.


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

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.