1

ホームフォルダーのディスク使用量を確認し、ユーザーが xxGB を超えた場合に電子メールで警告するスクリプトを作成しようとしています。

du -s * の出力を一時ファイルにダンプし、1 行ずつ読み取ります。du の出力からフォルダーのサイズと名前を読み取ろうとすると、正しく機能せず、echo $ を実行するだけです。ファイルの各行が 2 行としてダンプされます。展開してタブをスペースに置き換えようとしましたが、機能しませんでした。また、サイズに基づいて比較を行う方法もわかりません。

#!/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

4 に答える 4

3

単純にディスク クォータを実装しないのはなぜですか? ほとんどすべての Unix/Linux システムでそれが可能です。

しかし、本当にこの方法でやりたいのなら、なぜすべての策略を行うのでしょうか?

du - s *、使用されたディスク容量とユーザー名を含む 2 列の出力を生成します。すべてを一時ファイルに入れる代わりに、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   
于 2011-04-05T15:48:18.920 に答える
1

for ループは、スペースに基づいて入力をトークン化しています。したがって、各単語は $line になります。

for ループの代わりに、while ループを使用して入力を正しくキャプチャできます。

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

( set -xを一時的にスクリプトに追加して、何が起こっているかを確認できます)

于 2011-04-05T15:17:37.837 に答える
1

durepを見てください

Ubuntu に durep をインストールする

次のコマンドを使用して durep をインストールします。

sudo aptitude install durep

durepの使用

構文は大まかにdurep [OPTION]… [DIRECTORY]

  • 「durep -w ~/durepweb -td 2」</p>

    これにより、現在のディレクトリから深さ 2 までのディレクトリ ツリーがコンソールに出力され、ディレクトリ ~/durepweb (このディレクトリが存在する必要があります) に Web ページが作成されます。

于 2011-04-05T15:01:30.150 に答える
0

頼めば

 du -s /home/joe/* 

* はシェルによって展開されるため、すべてのファイル (隠しファイルを除く) とディレクトリの概要が 1 つずつ表示されます。

 du -s /home/joe

隠しファイルを含め、すべてが要約された1行が表示されます。

 du -s . 

ディレクトリ全体も要約します-隠しファイルが含まれます(テストしたばかりです)。

1行だけになるので、そこから行全体が崩れていきます

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

 du -s . >$file1 

1 行を並べ替える必要がないため、15 行に減らし、awk ステートメントで繰り返します。

于 2011-04-05T15:29:58.940 に答える