Как распечатать процент дискового использования от 'df-hl'

Почти невозможно дать краткий ответ на то, что является Unix в эти дни. В первые годы BSD был распределением изменений в Unix, дополнительных функциях и портах на новые платформы. В конечном счете кто-то решил распределить полный пакет BSD (полученный из Unix) названный 386BSD. Вещи произошли, и NetBSD и FreeBSD родились. Затем судебный процесс AT&T мешал им продолжиться. Большинство (но не все) исходный код Unix было удалено и переписано людьми BSD в FreeBSD и NetBSD. Частями FreeBSD является истинный Unix в исходном смысле.

SysV Unix отличен также.. существует много современных вариантов Unix, полученных из него включая Солярис, SCO Unixware (раньше Microsoft Xenix), и т.д. Существуют также расхождения как МАХ с Mac OS X, бывшим основанным на NeXTSTEP/OpenSTEP. bsd родословная, включенная в FreeBSD, показывает большинство расхождений, но не включает всех их. (MirBSD, MidnightBSD...)

SCO утверждает, что владела UNIX, но суды постановили, что Novell имеет его. Novell продал товарный знак Open Group, и они продают набор тестов совместимости и сертификацию. Mac OS X, AIX и другие вещи, некоторые люди не рассматривают Unix, сертифицированы. Однажды Linux был сертифицирован с помощью комплекта Open Group IBM. Все же Linux считают клоном Unix.

Это становится вопросом о религии отсюда. Действительно ли это - источник, сертификация, история... вам решать.

12
15.02.2013, 01:23
3 ответа

Я думаю, что Вы хотели сумму обоих size и use%

 df -hl | grep 'sda2\|sda3' | awk 'BEGIN{print "Size","Use%"} {size+=$2;percent+=$5;} END{print size,percent}' | column -t
4
27.01.2020, 19:55
  • 1
    Так же, то же как выше. –  user32398 14.02.2013, 22:45
  • 2
    @user32398: существует чувак различий. –  pradeepchhetri 14.02.2013, 22:49
  • 3
    В конце моего ответа на этот вопрос я уточнил немного то, почему не использовать упрощенный awk-подход (просто size+=$1) к этому вопросу. Этот метод действительно не совместим с -h опция df. –  Johan E 19.02.2013, 05:16

Для 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_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 может перечислить использование диска на различном монтировании на сервере, если дали надлежащие пути. Однако это показывает ту же “Файловую систему “и “Смонтированный на “для всех путей, с тех пор (я верю), который является единственной точкой монтирования (касающийся этого 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 флаг и что вход к сценарию вычисления, вместо этого, нормализован (например, к байтам, блокам, KBS, или безотносительно) и делает ‘дисплей, масштабирующийся’ в конце. Это не к твердому, в большинстве языков сценариев и языков программирования, для добавления чего-то как:

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

где значение находится в байтах, и порог является значением на порядке 1 000. Результат этого метода - то, что можно легко настроить его для создания распечатанных значений (исключая префикс) в желаемом диапазоне и со многими значащими цифрами к выбору. По сравнению со случаем со стандартными утилитами с -h переключатели, где формат часто фиксируется.

Конечно, это вычисление может часто делаться более эффективным и/или изящным, но это - вопрос для определенного языка, в котором оно записано. Откровенно говоря, если это используется в пользовательском скрипте, который запущен только время от времени для интерактивного просмотра некоторой информации, эффективность не является действительно беспокойством.

11
27.01.2020, 19:55

Вы использовали бы инструмент как awk:

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

Где:

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

Можно найти некоторых полезными awk ссылки на Wiki Awk.info.

2
27.01.2020, 19:55
  • 1
    я думаю, что не достаточно суммировать %, но спасибо, я получаю идею. –  user32398 14.02.2013, 22:43

Теги

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