# Shell script to watch the disk space

**URL:** <https://forums.thehomestack.io/t/shell-script-to-watch-the-disk-space/270>\
**Category:** Linux - General\
**Created:** [June 2, 2007, 10:34am UTC](https://forums.thehomestack.io/t/shell-script-to-watch-the-disk-space/270 "2007-06-02T10:34:47Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![system](https://forums.thehomestack.io/uploads/default/original/1X/161426793bc0d8bdf0d1a6692b3e44446861cc72.jpeg) [@system](https://forums.thehomestack.io/u/system)\
**Post date:** [June 2, 2007, 10:34am UTC](https://forums.thehomestack.io/t/shell-script-to-watch-the-disk-space/270/1 "2007-06-02T10:34:47Z")

</div>

Filter out filesystem and find out the percentage of space using grep

Write a shell script

Step # 1: First get disk space:

```auto
$ df -H

```

Output:

```auto
Filesystem Size Used Avail Use% Mounted on
/dev/hdb1 20G 14G 5.5G 71% /
tmpfs 394M 4.1k 394M 1% /dev/shm
/dev/hdb5 29G 27G 654M 98% /nas/www

```

Step # 2: Next filter out filesystem and find out the percentage of space

```auto
$ df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }'

```

Output:

```auto
71% /dev/hdb1
98% /dev/hdb5

```

Step # 3: Write a shell script  
Above command displays field 5 and 1 of df command. Now all you need to do is write a script to see if the percentage of space is \>= 90%

```auto
#!/bin/sh
df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output;
do
  echo $output
  usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 )
  partition=$(echo $output | awk '{ print $2 }' )
  if [$usep -ge 90]; then
    echo "Running out of space \"$partition ($usep%)\" on $(hostname) as on $(date)" |
     mail -s "Alert: Almost out of disk space $usep%" you@somewhere.com
  fi

```

Setup Cron job  
Save and install script as cronjob. Copy script to /etc/cron.daily/

```auto
# cp diskAlert /etc/cron.daily/
# chmod +x /etc/cron.daily/diskAlert

```

OR install as cronjob:

```auto
crontab -e
Write cronjob as per your requirement
10 0 * * * /path/to/diskAlert

```

Updated script version  
You can exclude selected filesystem in case you don’t want monitor all filesystems.

```auto
#!/bin/sh
# set -x
# Shell script to monitor or watch the disk space
# It will send an email to $ADMIN, if the (free available) percentage of space is >= 90%.
# -------------------------------------------------------------------------
# Set admin email so that you can get email.
ADMIN="root"
# set alert level 90% is default
ALERT=90
# Exclude list of unwanted monitoring, if several partions then use "|" to separate the partitions.
# An example: EXCLUDE_LIST="/dev/hdd1|/dev/hdc5"
EXCLUDE_LIST="/auto/ripper"
#
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#
function main_prog() {
while read output;
do
#echo $output
  usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1)
  partition=$(echo $output | awk '{print $2}')
  if [$usep -ge $ALERT] ; then
     echo "Running out of space \"$partition ($usep%)\" on server $(hostname), $(date)" | 
     mail -s "Alert: Almost out of disk space $usep%" $ADMIN
  fi
done
}

if ["$EXCLUDE_LIST" != ""] ; then
  df -H | grep -vE "^Filesystem|tmpfs|cdrom|${EXCLUDE_LIST}" | awk '{print $5 " " $6}' | main_prog
else
  df -H | grep -vE "^Filesystem|tmpfs|cdrom" | awk '{print $5 " " $6}' | main_prog
fi

```
