검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 쉘 스크립트
참조 원문 : Unix: Tracking disk space usage

  특정 파일에 날짜와 df의 결과 중 사용률을 기록하는 스크립트로서 사실 스크립트의 결과물이 뛰어나거나 한 건 아닌데 처리 방법이 독특한 것 같아 기록합니다.

  먼저 스크립트를 작성한 곳의 파일시스템 상태는 아래와 같습니다.
$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                       34G   28G  4.7G  86% /
/dev/sda1              99M   16M   79M  17% /boot
/dev/sda2            11.0G  9.8G  1.2G  89% /home
tmpfs                 7.9G  200M  7.7G   3% /dev/shm
  첫 번째 파일시스템명이 너무 길어 두 줄로 나눠서 출력된 걸 볼 수 있습니다. 아래는 이를 염두하고 작성한 스크립트 내용입니다.
#!/bin/bash

dt=`date +%D`
log="/var/tmp/du.log"

df -h > /tmp/du$$

while read line
do
    fields=`echo $line | awk '{print NF}'`
    case $fields in
    1) echo -n "$dt $line " >> $log;;
    5) echo $line | awk '{print $4}' >> $log;;
    6) echo -n "$dt "
        echo $line | awk '{print $1,$5}' >> $log;;
    esac
done < /tmp/du$$

rm /tmp/du$$
  기록되는 내용은 아래와 같습니다.
09/15/13 /dev/mapper/VolGroup00-LogVol00 86%
09/15/13 /dev/sda1 17%
09/15/13 /dev/sda2 89%
09/15/13 tmpfs 3%
  원한다면 파일시스템명 대신 마운트 포인트를 기록할 수 있습니다. 이 경우 파일시스템명이 너무 길어서 두 줄로 나뉜 상황일 때 파일시스템명만 나온 줄은 무시하게 됩니다. 다만 정상적인 줄과는 필드의 개수가 다르므로 여전히 별도의 처리는 필요합니다.
#!/bin/bash

dt=`date +%D`
log="/var/tmp/du.log"

df -h > /tmp/du$$

while read line
do
    fields=`echo $line | awk '{print NF}'`
    case $fields in
    5) echo -n "$dt " >> $log
        echo $line | awk '{print $5,$4}' >> $log;;
    6) echo -n "$dt " >> $log
        echo $line | awk '{print $6,$5}' >> $log;;
    esac
done < /tmp/du$$

rm /tmp/du$$
  기록되는 내용은 아래와 같습니다.
09/15/13 / 86%
09/15/13 /boot 17%
09/15/13 /home 89%
09/15/13 /dev/shm 3%
2013/09/20 06:44 2013/09/20 06:44