Проверка процента жесткого использования скрипта

#bash

#bash

Вопрос:

Нужен скрипт, который выполняет du -m — суммирование по ряду каталогов для идентификации людей, который выводит информацию об определенных каталогах, таких как%, размер, без необходимости их cd и проверки вручную, как это:

 tmpfs                      7.8G  8.2M  7.8G   1% /dev/shm
tmpfs                      5.0M   12K  5.0M   1% /run/lock
tmpfs                      7.8G     0  7.8G   0% /sys/fs/cgroup
  

Использование должно быть ниже 90%. пока я получил

 #!/bin/bash
df -Ph | awk ' $5>=10 || $1=="Filesystem"' 
if df -Ph | awk ' $5<=10 || $1=="Filesystem" { if (  $5<=10) exit(1) ; else exit(0) }'
then du -h | sort -nr | head -10 
else  echo Fail usage is less from 10%
fi
  

не уверен, что это охватывает несколько каталогов

Комментарии:

1. Перейдите в каталог, в котором, как вы знаете, есть дочерние каталоги и другие дочерние каталоги, а затем запустите du -h без каких-либо |..... и убедитесь сами? Сравните это с выводом du -h * . Удачи.

2. Забыл о моем du тесте goto, используй du -sh * из родительского каталога. Это суммирует все дочерние каталоги ниже первого уровня, поэтому ./local/bin суммируется в значение для ./local , просто для примера. Не ясно, поможет ли это вам, но я предлагаю это на всякий случай. Удачи.

Ответ №1:

Первое, что я бы предложил, это уменьшить шум, создаваемый исходной командой df, и поэтому использовать:

 df --output=target,pcent
  

Это даст вам только целевую точку монтирования в первом столбце, а затем процент, используемый во втором.

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

Поэтому, если вы ищете данные du для точек монтирования более 10%, я бы написал решение следующим образом:

  df --output=target,pcent | awk ' $2 > 10 { system("du -h --max-depth=1 "$1) }  $2 <= 10 { print $1" - Usage less than 10%" }'
  

Для процентов более 10 ( 2 доллара) используйте системную функцию awk для выполнения команды du с максимальной глубиной 1 в точке монтирования (каталог) — 1 доллар. Во всех остальных случаях. выведите, что «использование составляет менее 10%»

Примечание — Поскольку команда du создается в awk, я бы всегда предлагал распечатать команду перед выполнением и поэтому запустить команду awk с помощью print вместо system, чтобы убедиться, что выполняемые команды верны перед фактическим выполнением с помощью системной функции и так далее:

 df --output=target,pcent | awk ' $2 > 10 { print "du -h --max-depth=1 "$1 }  $2 <= 10 { print $1" - Usage less than 10%" }'