скрипт bash для анализа вывода du -s * и предупреждения пользователей, которые превышают определенный лимит памяти - PullRequest
1 голос
/ 05 апреля 2011

Я пытаюсь написать скрипт для проверки использования диска в домашних папках и предупреждать пользователей, когда они превышают xxGB, по электронной почте

Я выгружаю вывод du -s * во временный файл, читаю его построчно, и когда я пытаюсь прочитать размер и имя папки из вывода du, он работает неправильно, просто echo $ file. Я получаю каждую строку в виде двух строк, я пытался развернуть, чтобы заменить табуляцию пробелами, но также не работал, и я не уверен, как сделать comaprison на основе размера.

#!/bin/bash

#echo "Disk usage report for /homes on `hostname`"

EMAIL="helpdesk@xy.com"

##########################
# check staff
#########################

cd /homes/staff/
file1="/root/scripts/temp_check"
file2="/root/scripts/temp_check2"
du -s * | sort -rn | head -15  |awk '{print}' > $file1
expand $file1 > $file2

for line in $(cat $file2)

do

echo $line

# echo $line | awk '{ print $2 }'

mail -s "Disk usage report for your homefolder" $EMAIL

done

Ответы [ 4 ]

3 голосов
/ 05 апреля 2011

Почему бы просто не внедрить дисковые квоты?Почти все системы Unix / Linux могут делать это.

Однако, если вы действительно хотите сделать это таким образом, зачем все махинации?

du - s * будет производить два столбцавывод с использованием используемого дискового пространства и имени пользователя.Используйте цикл while вместо того, чтобы помещать все во временные файлы.

cd /home   #Or where ever all the user's home directories are stored
du -s | while read space user
do
    if [ $space -gt 10000000 ]
    then
        mailx -s"You're using a lot of diskspace!" $user <<MAIL
Dear $user:

We notice that you are now using $space in your home directory.
are you storing there? The total amount of diskspace allowed
is 15,000,000. We highly suggest you trim down your diskspace, or
we'll do it for you.

Sincerely,

Your Kindly System Administrator
MAIL
  fi
done   
1 голос
/ 05 апреля 2011

Цикл for токенизирует ваш ввод на основе пробелов.Таким образом, каждое слово становится строкой $.

Вместо цикла for вы можете использовать цикл while для правильной записи ввода, например:

cat $file2 | while read line; do echo $line; done

(Вы можете добавить set -x к вашему сценарию временно, чтобы увидеть, что происходит)

1 голос
/ 05 апреля 2011

Посмотрите на durep

Установить durep в Ubuntu

Используйте следующую команду для установки durep

sudo aptitude install durep

Использование durep

Синтаксис примерно равен durep [OPTION]… [DIRECTORY]

  • «durep -w ~ / durepweb -td 2 ″

    Это выведет дерево каталогов, начиная стекущий каталог на глубину 2 до консоли, а также создание веб-страниц в каталоге ~ / durepweb (этот каталог должен существовать).

0 голосов
/ 05 апреля 2011

Если вы попросите

 du -s /home/joe/* 

вы получаете сводку для всех файлов (кроме скрытых) и каталогов один за другим, потому что * расширяется оболочкой.

 du -s /home/joe

даст вам одну строку, все суммировано, включая скрытые файлы.

 du -s . 

будет также суммировать весь каталог - и будет включать скрытые файлы (только что проверил).

Поскольку это будет только одна строка, вся строка сворачивается от

 du -s * | sort -rn | head -15  |awk '{print}' > $file1

до

 du -s . >$file1 

потому что вам не нужно сортировать одну строку, уменьшите ее до 15 строк и повторите с оператором awk.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...