Reporting Disk Hogs

#!/bin/sh
# diskhogs – Disk quota analysis tool for Unix; assumes all user
# accounts are >= UID 100. Emails message to each violating user
# and reports a summary to the screen.MAXDISKUSAGE=20
violators=”/tmp/diskhogs0.$$”

trap “/bin/rm -f $violators” 0

for name in $(cut -d: -f1,3 /etc/passwd | awk -F: ‘$2 > 99 { print $1 }’)
do
echo -n “$name ”
# You might need to modify the following list of directories to match
# the layout of your disk. Most likely change: /Users to /home
find / /usr /var /Users -user $name -xdev -type f -ls | \
awk ‘{ sum += $7 } END { print sum / (1024*1024) }’

done | awk “\$2 > $MAXDISKUSAGE { print \$0 }” > $violators

if [ ! -s $violators ] ; then
echo “No users exceed the disk quota of ${MAXDISKUSAGE}MB”
cat $violators
exit 0
fi

while read account usage ; do

cat << EOF | fmt | mail -s “Warning: $account Exceeds Quota” $account
Your disk usage is ${usage}MB, but you have been allocated only
${MAXDISKUSAGE}MB. This means that you need to either delete some of
your files, compress your files (see ‘gzip’ or ‘bzip2’ for powerful and
easy-to-use compression programs), or talk with us about increasing
your disk allocation.

Thanks for your cooperation in this matter.

Dave Taylor @ x554
EOF
echo “Account $account has $usage MB of disk space. User notified.”

done < $violators

exit 0

This script has no starting arguments and should be run as root for accurate results. This can most safely be accomplished by using the sudo command.

$ sudo diskhogs
Account linda has 39.7 MB of disk space. User notified.
Account taylor has 21799.5 MB of disk space. User notified.

If we now peek into the linda account mailbox, we’ll see that a message from the script has been delivered:

Subject: Warning: linda Exceeds Quota

Your disk usage is 39.7MB, but you have been allocated only 20MB. This means
that you need to either delete some of your files, compress your files (see
‘gzip’ or ‘bzip2’ for powerful and easy-to-use compression programs), or talk
with us about increasing your disk allocation.

Thanks for your cooperation on this matter.

Dave Taylor @ x554