Проверив Центр знаний IBM на предмет различий в необходимых командах, я думаю, что у меня это получилось. Доводим до вашего сведения , у меня нет возможности проверить это в AIX, поэтому он основан на том, что я могу узнать об отличиях AIX на указанном выше сайте. В стандартных инструментах GNU / Linux перед рассмотрением некоторых опций он тестируется как хорошо. YMMV.
Для начала мы можем получить список файловых систем и какой процент используется для каждой, а также размер файловой системы (которую мы не можем отключить) и точку монтирования, которая может нам понадобиться для более поздняя обработка. Использование df -F% z% m
возвращает что-то вроде / dev / sda1 1545476 78% / home
, что означает 78 процентов из 1545476 блоков на устройстве / dev / sda1
, установленные на / home
, используются.
Поскольку нам нужно знать только файловую систему и точку монтирования, чтобы проверить ее дальше и использованный процент, без знака «%», мы изменяем вывод с помощью sed
и awk
. Делая это, мы могли бы также поставить первым uasge и вторым именем, вырезать строки, которые не представляют настоящие файловые системы, и получить точку монтирования для каждой файловой системы. Это упростит обработку позже. Наконец, мы можем отсортировать его по убыванию используемого процента, чтобы самые важные были первыми. Это дает нам команду:
df -F %z %m | grep -e '^/dev/[sh]d' | sed 's/%//g' | awk '{print $3" "$1" \""$4"\""}' | sort -rn
Окончательный вывод для строки такой 78 / dev / sda1 / home
.
Теперь мы можем использовать это как входные данные для цикла, который считывает каждую строку и обрабатывает ее так, как мы хотим, на основе предустановки action_limit
, здесь установленной на 75. Сохраните его как сценарий оболочки с выполнять разрешения.
#!/bin/bash
action_limit=75;
df -F %z %m \
| grep -e '^/dev/[sh]d' \
| sed 's/%//g' \
| awk '{print $3" "$1" "$4}' \
| sort -r -n \
| while read -r pct dsk mnt; do
if test $action_limit -le $pct; then
echo "$mnt for $dsk is using ${pct}%";
fi;
done
Строку с echo
необходимо заменить на команду того, что вы хотите делать с этими файловыми системами, теперь, когда вы знаете, какие из них подходят. Команда echo
показывает, где должна быть вызвана другая команда, и показывает, какая информация доступна для передачи этому сценарию. Не все нужно использовать. Скорее всего, потребуется только точка монтирования $ mnt
. Обратите внимание, что $ mnt
содержит путь к каталогу, который может содержать пробелы или другие опасные символы оболочки, и должен быть заключен в кавычки при использовании в качестве параметра для другого сценария или команды.
Чтобы просто перечислить самые популярные файлы / каталоги по размеру в проверяемых файловых системах, нам не нужно создавать полностью новый скрипт для вызова. Мы можем просто добавить одну команду к приведенному выше, дав измененный сценарий оболочки:
#!/bin/bash
action_limit=75;
top_count=10;
df -F %z %m \
| grep -e '^/dev/[sh]d' \
| sed 's/%//g' \
| awk '{print $3" "$1" "$4}' \
| sort -r -n \
| while read -r pct dsk mnt; do
if test $action_limit -le $pct; then
echo "$mnt for $dsk is using $pct%";
du -s -x -m "$mnt"/* | sort -rn | head -$top_count| awk '{SZ=$1;$1="";print "\t"SZ"\t"$0}';
fi;
done
На выходе будут в порядке убывания файловые системы, которые соответствуют или превышают установленный предел, action_limit
, за которым следует файлы или каталоги, занимающие больше всего места в этой файловой системе. Количество перечисленных файлов или каталогов устанавливается новой переменной top_count
. Они имеют отступ под точками монтирования, чтобы все было аккуратно и читабельно, и включают в себя общий размер каждого файла или каталога в мегабайтах.( -m
управляет этим, и его можно изменить на -k
для килобайт или -g
для гигабайт. Мегабайты казались хорошим компромиссом.)
Наконец, вы использовали тег / bash
, поэтому все тесты проводились в bash
, и если используются какие-либо специфичные для bash тесты или синтаксис, я их не уловил. . Поэтому, если у вас есть другая оболочка, внимательно проверьте ее, прежде чем доверять ей.