Как вывести общий объем свободного и занятого дискового пространства?

Читаю документацию к df и du, не могу разобраться как можно вывести только число?
К примеру мне нужна такая строчка:
Всего занято: %Gb%
Всего свободно: %Gb%
А в командах выводится еще куча информации
  • Вопрос задан
  • 542 просмотра
Решения вопроса 1
xotkot
@xotkot
хорошо есть и хорошо весьма
есть замечательная утилита lsblk
например, вывести информацию по всем смонтированным FS(файловым системам) в виде - имя, доступный размер, используемый размер и процент от использования
$ lsblk -lo NAME,FSAVAIL,FSUSED,FSUSE\% | awk 'NF>1'
NAME      FSAVAIL FSUSED FSUSE%
nvme1n1p1    423M    88M    17%
nvme1n1p2  423,2G    29G     6%
nvme0n1p2  360,2G  73,3G    16%

awk здесь используется для отсечения не смонтированных ФС и самих дисков у которых естественно будет отсутствовать доступный размер.
Если нужен общий размер файловой системы то добавьте параметр FSSIZE

если нужно без шапки то используй ключ -n
$ lsblk -nlo NAME,FSAVAIL,FSUSED,FSUSE\% | awk 'NF>1'
nvme1n1p1    423M    88M    17%
nvme1n1p2  423,2G    29G     6%
nvme0n1p2  360,2G  73,3G    16%

если нужно по конкретной ФС то просто указываем её
$ lsblk -nlo NAME,FSAVAIL,FSUSED,FSUSE\% /dev/nvme1n1p2
nvme1n1p2  423,2G    29G     6%

если нужна конкретная цифра то оставляем тока нужный параметр
$ lsblk -no FSUSED /dev/nvme1n1p2
   29G

при желании можно получить данные через json и после нужным образом обработать, например:
$ lsblk -Jo FSUSED /dev/nvme1n1p2 | jq -r '.blockdevices[].fsused'
29G

если нужно в байтах, то используйте ключ -b
$ lsblk -Jbo FSUSED /dev/nvme1n1p2 | jq -r '.blockdevices[].fsused'
31178240000


еще как пример, для файловой системы nvme1n1p2 отобразим в форматированном виде информацию по свободному и занятому пространству:
$ lsblk -Jo FSAVAIL,FSUSED /dev/nvme1n1p2 | jq -r '.blockdevices[] | "Всего занято:\t\(.fsused)\nВсего свободно
:\t\(.fsavail)"'
Всего занято:	29G
Всего свободно:	423,2G


п.с.
если нужна обобщённая информация сразу по всему диску то наверное проще будет использовать smartctl
sudo smartctl -ja /dev/nvme0n1 | jq -r '.nvme_namespaces[] | "Всего занято:\t\(.utilization.bytes)\nВсего свободно:\t\(.capacity.bytes - .utilization.bytes)"'
Всего занято:	88322768896
Всего свободно:	411785093120

правда это скорее всего будет с учетом размера метаданных самих файловых систем расположенных на диске, что будет не так интересно, хотя для быстрой оценки диска сойдёт.
(здесь вывод json под nvme, для других видов дисков скорее всего нужно будет подправить)

и да, для преобразования размеров довольно удобно использовать утилиту numfmt
$ sudo smartctl -ja /dev/nvme0n1 | jq -r '.nvme_namespaces[] | "Всего занято: \(.utilization.bytes)\nВсего свободно: \(.capacity.bytes - .utilization.bytes)"' | numfmt --to=iec --field 3 --padding=1 --format %.1f
Всего занято: 82,3G
Всего свободно: 383,6G
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
Sanes
@Sanes
du -sk / |cut -f 1
Ответ написан
Комментировать
@SunTechnik
Добавьте пост-обработку через xargs/sed/awk
На выбор, что нравится...
df - показывает заполнение устройств (файловых систем)
du - показывает сколько занимает конкретный файл ( каталог)
Ответ написан
Комментировать
smorman
@smorman
When In Rome do as The Romans do...
А чем не устраивает:
df -h
?

Более, чем лаконично и всё на лицо без лишних циферок и буковок.
Ответ написан
Комментировать
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Направляете вывод df в grep, который отфильтровывает нужный диск, затем его вывод направляете во что-нибудь, оставляющее только нужные поля, например awk '{print $1, $2}':

df | grep | awk
Ответ написан
Комментировать
shambler81
@shambler81 Куратор тега Linux
Очень полезная утилитка
ncdu2-shared.png
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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