Як надрукувати відсоток використання диска з `df -hl`


12

Я знаю, що df -hlвиводить список усіх моїх розділів з його розміром, використанням у відсотках та наявним простором.

Якщо я хотів вивести лише розмір та використання у відсотках, sda2і sda3, наприклад, як я можу сказати Linux (Ubuntu) перевірити їх, підсумувати їх та показати мені?


1
Відповіді нижче можна спростити, змінивши команду df, яку вони використовують для розміщення дисків у командному рядку df, а не для розбору всіх дисків. тобто df -hl / dev / sda [23]
mdpc

Відповіді:


11

Для dfобчислення підсумків скористайтеся --totalsопцією. Якщо ви хочете підсумовувати лише деякі обрані диски, вкажіть їх як аргументи.

Приклади (і вихід з мого комп'ютера)

Це загальна сума для всіх місцевих кріплень:

$ df --total -hl
Filesystem            Size  Used Avail Use% Mounted on
/dev/sdb1              14G   12G  2,1G  85% /
none                  490M  660K  489M   1% /dev
none                  497M  1,5M  495M   1% /dev/shm
none                  497M  260K  496M   1% /var/run
none                  497M     0  497M   0% /var/lock
/dev/sda1             3,7G  418M  3,3G  12% /fastdisk
total                  19G   12G  7,3G  62%

Обмеження до декількох дисків (зауважте, що якщо вказаний шлях не є точною точкою кріплення, використовується найближча точка, яка містить [див. Примітку в кінці] ):

$ df -hl --total /home /fastdisk
Filesystem            Size  Used Avail Use% Mounted on
/dev/sdb1              14G   12G  2,1G  85% /
/dev/sda1             3,7G  418M  3,3G  12% /fastdisk
total                  17G   12G  5,3G  69%

або використовуючи devімена:

$ df -hl --total /dev/sda1 /dev/sdb1
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             3,7G  418M  3,3G  12% /fastdisk
/dev/sdb1              14G   12G  2,1G  85% /
total                  17G   12G  5,3G  69%

Подальше налаштування

Якщо ви хочете перерахувати всі кріплення, крім «спеціальних», ви можете скористатися -xопцією для виключення за типом розділу. (Використовуйте -Tопцію для відображення типів.)

Особисто для інтерактивного використання я використовую наступні псевдоніми bash (додані до ~/.bash_aliases), щоб виключити "нефізичні" кріплення.

alias df='df -h -x devtmpfs -x tmpfs -x debugfs'

Примітка

Визначення шляхів у точках кріплення може колись давати результати різної форми із зазначенням точного шляху до точки кріплення. Наприклад, на своєму ноутбуці я використовую sshfsдля монтажу свого (локального) файлового сервера.

df -h ~/.server-root/ ~/.server-root/disks/A ~/.server-root/disks/B
Filesystem            Size  Used Avail Use% Mounted on
johan@server:/        185G   58G  118G  33% /home/johan/.server-root
johan@server:/        1,9T  637G  1,2T  35% /home/johan/.server-root
johan@server:/        1,8T  1,1T  757G  59% /home/johan/.server-root

Корінь сервера ( /) встановлений на ~/.server-root. Однак на сервері встановлені диски, на /disks/*яких df(на ноутбуці) нічого не відомо.

Очевидно dfможна перелічити використання диска на різних кріпленнях на сервері, якщо вони задані належними шляхами. Однак він показує однакові «Filesystem» і «Mountsed on» для всіх контурів, оскільки (я вважаю) це єдина точка монтажу (що стосується цієї sshfsверсії) в локальній таблиці кріплення ядра.


Інша річ: насправді не пов’язана з питанням, але пов'язана з попередньою відповіддю на питання.

Додавання номерів до awkсценарію (або подібного), як це роблять деякі раніше розміщені відповіді, не є хорошою ідеєю при використанні -hпрапора. Це тому, що потрібне спеціальне поводження. Ви не можете просто зробити size+=$2;для поля, що знаходиться 418Mна одному ряду та 12Gна іншому, і отримати з нього щось корисне…

Для прикладу з awkдодаванням 500Mдо 10.2Gврожайності

$ echo -e '500M\n10.2G' | awk '{size+=$1;} END{print size;}'
510.2

510.2 що?

Тут явно є проблема. Отже, як порада пам’ятати , коли робите (автоматизований) обчислення на виході df (та інших, які можуть використовувати «читабельні людиною» числа) . Переконайтеся, що ви не використовуєте -hпрапор і що вхід до сценарію обчислення замість цього нормалізується (наприклад, в байти, блоки, KB або інше) і виконайте "масштабування відображення" в кінці. У більшості мов сценарію та програмування не важко додати щось на кшталт:

If value < threshold Then
  print (value),"B"
Else If value < 1024*threshold Then
  print (value/1024),"kB"
Else If value < 1024*1024*threshold Then
  print (value/1024/1024),"MB"
(and so on...)

де значення в байтах, а поріг - значення на порядок 1000. Підсумок цього методу полягає в тому, що ви можете легко налаштувати його для отримання друкованих значень (без префікса) у потрібному діапазоні та з кількома значущими цифрами до вашого вибір. У порівнянні з випадком зі стандартними утилітами з -hперемикачами, де формат часто фіксується.

Звичайно, цей розрахунок часто можна зробити більш ефективним та / або елегантним, але це питання до конкретної мови, на якій він написаний. Чесно кажучи, якщо він використовується в сценарії користувача, який запускається лише зараз і потім для інтерактивного перегляду деяка інформація, ефективність насправді не викликає занепокоєння.


4

Я думаю, ви хотіли суму sizeіuse%

 df -hl | grep 'sda2\|sda3' | awk 'BEGIN{print "Size","Use%"} {size+=$2;percent+=$5;} END{print size,percent}' | column -t

Дітто, те саме, що вище.
користувач32398

@ user32398: Є чужі відмінності.
pradeepchhetri

Наприкінці своєї відповіді на це запитання я трохи детальніше зупинився на тому, чому б не використати спрощений підхід (просто size+=$1) до цього питання. Цей метод дійсно не сумісний з -hможливістю df.
Йоган Е

2

Ви б використовували такий інструмент, як awk:

df -hl | awk '/^\/dev\/sd[ab]/ { sum+=$5 } END { print sum }'

Де:

  • /^\/dev\/sd[ab]/є схемою для фільтрації лише тих рядків, які починаються з /dev/sdaабо/dev/sdb
  • { sum+=$5 } додайте п’яте поле для будь-яких збігів вищевказаного шаблону

Ви можете знайти кілька корисних awkпосилань на вікі Awk.info .


Я думаю, що не варто підсумовувати%, але дякую, я розумію.
користувач32398

1
sudo df -hl | grep 'mountdirname' | awk '{print $5}'

1
Він просив size, % usedі available. Не просто% використано. Також у @mdpc є кращий метод виділення накопичувача, але якщо ви хочете встановити схему відповідності awk, можете зробити це: df -hl | awk '/sda2/{print $2,$5,$4}'
jesse_b

0

Якщо ви хотіли це з попередженнями, я роблю це за допомогою IFTTT, Telegram та WebHooks (що все безкоштовно)

#!/bin/bash
diskusage=$(df -H | grep -vE '^Filesystem|tmpfs|cdrom|mmcblk0p1' | awk '{ print $5 " " $1 }'| cut -f1 -d '%')
hostname=$(hostname)
tolerance=(85)
date=$(date)

if [[ "$diskusage" -gt "$tolerance" ]]
        then
        echo ""
        echo total disk usage is $diskusage%
        echo ""
        curl -X POST -H "Content-Type: application/json" -d '{"value1":"--Alert--","value2":"Total disk usage is '$diskusage'% ","value3":"Host information: '$hostname' "}' https://maker.ifttt.com/trigger/{alert}/with/key/PutYourKeyHEre
fi
echo ''
echo Disk usage is $diskusage%. The tolerance is $tolerance%. No alert fired $date
echo Disk usage is $diskusage%. The tolerance is $tolerance%. No alert fired $date >> /var/log/IFTTT/checkdiskspace.log
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.