allbery@ncoast.UUCP (06/18/87)
This script prints nice summaries of people's disk usage, as they change from day-to-day and week-to-week. The sample shown below is somewhat off, because I just ran the thing twice to get two reports. I lifted this from a source that would rather remain anonymous. I did some hacking to make it more efficient (e.g., the "eval" stuff). -rich $alz #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of shell archive." # Contents: diskuse.sh # Wrapped by rsalz@pineapple.bbn.com on Thu Jun 18 07:30:28 1987 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f diskuse.sh -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"diskuse.sh\" else echo shar: Extracting \"diskuse.sh\" \(2815 characters\) sed "s/^X//" >diskuse.sh <<'END_OF_diskuse.sh' X X#! /bin/sh X# Show report of disk usage. Should be run nightly from cron. The X# report looks like this: X# Thu Jun 18 01:12:26 EDT 1987 X# Filesystem kbytes used avail capacity Mounted on X# /dev/ra0h 87519 70147 8620 89% /usr/politics X# X# Today Yester Change Week Change Directory X# 21766 21766 0 +21766 bidden X# 12645 12645 0 +12645 donaldson X# 10632 10632 0 +10632 kemp X# 4493 4493 0 +4493 emacs X# 2810 2808 +2 +2810 pac X# 1932 1932 0 +1932 common-cause X# 1566 1566 0 +1566 guest X# 1213 1213 0 +1213 root X# 596 596 0 +596 reagan X# 594 594 0 +594 bush X# 349 349 0 +349 hart X# 248 248 0 +248 kennedy X# 51 51 0 +51 cuomo X# 28634 4 0 +4 lost+found X# Where the columns mean: X# Today Today's usage X# Yester What it was yesterday X# Change Difference over the two days X# Week What it was last week X# Change Difference from last week X# Directory Directory within this filesystem. X X# Our output goes to stderr; reports go to stdout Xexec >&2 X X# This is where the "raw" du reports go. XUSEDIR=/usr/adm/.du X# This is where the daily reports go. XOUTDIR=/usr/adm/disk_use X X# Build filesystem list into commands to set shell variables. XLIST=`awk -F: '{ printf "DEV=%s;FS=%s\n", $1, $2 }' </etc/fstab` X Xfor L in ${LIST} ; do X # Get filesystem and disk device; skip unwanted ones. X eval ${L} X if [ "${FS}" = "/" -o "${FS}" = "/tmp" ] ; then X continue; X fi X X # Get names for du and pretty reports. X I=`expr ${FS} : '.*/\(.*\)' '|' ${FS}` X USE=${USEDIR}/${I} X OUT=${OUTDIR}/${I} X X # Shift old du reports down... X for I in 6 5 4 3 2 1 0 ; do X touch ${USE}.${I} X mv -f ${USE}.${I} ${USE}.`expr ${I} + 1` X done X X # Get new du report. X cd ${FS} ; du -s * | sort +1 >${USE}.0 X# cd ${FS} ; du * | grep -v '\.*/.*' | sort +1 >${USE}.0 X X # Send output to report X touch ${OUT} X mv -f ${OUT} ${OUT}.BAK X exec >${OUT} X X # Prolog X date X df ${DEV} X echo X awk </dev/null 'BEGIN { X FMT="%6s %6s %6s %6s %6s %s\n" X printf FMT, \ X "Today", "Yester", "Change", "Week", "Change", "Directory" X }' X X # Compare today's usage with that of yesterday and a week ago. X join -j1 2 -j2 2 -a1 ${USE}.0 ${USE}.1 | join -j1 1 -j2 2 -a1 - ${USE}.7 \ X | awk '\ X BEGIN { X FMT="%6s %6s %6s %6s %6s %s\n" X } X { X day = $2 - $3 X if (day > 0) X dsign = "+" X else X dsign = "" X week = $2 - $4 X if (week > 0) X wsign = "+" X else X wsign = "" X printf FMT, $2, $3, dsign day, $4, wsign week, $1 X }' | sort -nr X X # Send our output back to stderr. X exec >&2 Xdone X END_OF_diskuse.sh if test 2815 -ne `wc -c <diskuse.sh`; then echo shar: \"diskuse.sh\" unpacked with wrong size! fi # end of overwriting check fi echo shar: End of shell archive. exit 0