第一个脚本检测磁盘空间的top5
我们先看下du 命令统计:
[search@h1 ~]$ du -s hadoop/* 296 hadoop/bin 230156 hadoop/dddir 132 hadoop/etc 56 hadoop/include 4188 hadoop/lib 56 hadoop/libexec 472 hadoop/logs 47320 hadoop/nddir 120 hadoop/sbin 125724 hadoop/share 30336 hadoop/tmp [search@h1 ~]$
查看最大的几个:
[search@h1 ~]$ du -s hadoop/* | sort -nr 230156 hadoop/dddir 125724 hadoop/share 47320 hadoop/nddir 30336 hadoop/tmp 4188 hadoop/lib 472 hadoop/logs 296 hadoop/bin 132 hadoop/etc 120 hadoop/sbin 56 hadoop/libexec 56 hadoop/include [search@h1 ~]$
查看前5个,使用header命令
[search@h1 ~]$ du -s hadoop/* | sort -nr | head -5 230156 hadoop/dddir 125724 hadoop/share 47320 hadoop/nddir 30336 hadoop/tmp 4188 hadoop/lib [search@h1 ~]$
除此之外,我们在加个行号:
[search@h1 ~]$ du -s hadoop/* | sort -nr | head -5 | cat -n 1 230156 hadoop/dddir 2 125724 hadoop/share 3 47320 hadoop/nddir 4 30336 hadoop/tmp 5 4188 hadoop/lib [search@h1 ~]$
利用gawk再格式化一下:
[search@h1 ~]$ du -s hadoop/* | sort -nr | head -5 | cat -n | gawk '{ print $1 "\t" $2 "\t" $3 }' 1 230156 hadoop/dddir 2 125724 hadoop/share 3 47320 hadoop/nddir 4 30336 hadoop/tmp 5 4188 hadoop/lib [search@h1 ~]$
封装成脚本之后,把统计信息,写入一个文本里:
[search@h1 827]$ cat c.sh if [ $# -eq 0 ]; then echo "请输入一个统计路径" else d=`date +%Y%m%d%H%M%S` #echo $d exec > disk$d.txt du -s $1 | sort -nr | head -5 | cat -n | gawk '{ print $1 "\t" $2 "\t" $3 }' fi [search@h1 827]$ sh c.sh 请输入一个统计路径 [search@h1 827]$ sh c.sh /home/search/hadoop/\* [search@h1 827]$ ll 总用量 8 -rw-rw-r-- 1 search search 216 8月 28 04:28 c.sh -rw-rw-r-- 1 search search 167 8月 28 04:29 disk20140828042921.txt [search@h1 827]$ cat disk20140828042921.txt 1 230156 /home/search/hadoop/dddir 2 125724 /home/search/hadoop/share 3 47320 /home/search/hadoop/nddir 4 30336 /home/search/hadoop/tmp 5 4188 /home/search/hadoop/lib [search@h1 827]$
注意在脚本里面我们又使用了重定向符号,将所有的STDOUT定位到我们的一个日志文件里面,这样就方便我们查看了,每次运行都生成一个新的日志记录文件,注意在shell终端输入的*路径需要转义,否则会出现问题。
下面看下第二个有用的脚本,备份文件,散仙只作了简单的归档,按年,月,日,分钟,来进行压缩备份:
[search@h1 827]$ cat d.sh year=`date +%Y` day=`date +%d` month=`date +%m` time=`date +%M` dirpath="./$year/$month/$day/$time/" mkdir -p $dirpath tar -zcvf $dirpath/data.tar.gz ./ echo "归档完毕!" [search@h1 827]$ sh d.sh ./ ./dd/ ./dd/disk20140828042921.txt ./dd/disk20140828043101.txt ./dd/disk20140828043111.txt ./dd/c.sh ./dd/m.tar.gz ./disk20140828042921.txt ./disk20140828043101.txt ./disk20140828043111.txt ./c.sh ./m.tar.gz ./2014/ ./2014/08/ ./2014/08/28/ ./2014/08/28/49/ ./d.sh 归档完毕! [search@h1 827]$ ll 总用量 28 drwxrwxr-x 3 search search 4096 8月 28 04:49 2014 -rw-rw-r-- 1 search search 221 8月 28 04:34 c.sh drwxrwxr-x 2 search search 4096 8月 28 04:34 dd -rw-rw-r-- 1 search search 167 8月 28 04:29 disk20140828042921.txt -rw-rw-r-- 1 search search 0 8月 28 04:31 disk20140828043101.txt -rw-rw-r-- 1 search search 22 8月 28 04:31 disk20140828043111.txt -rw-rw-r-- 1 search search 192 8月 28 04:49 d.sh -rw-rw-r-- 1 search search 503 8月 28 04:38 m.tar.gz [search@h1 827]$ cd 2014/ [search@h1 2014]$ ll 总用量 4 drwxrwxr-x 3 search search 4096 8月 28 04:49 08 [search@h1 2014]$ cd 08/ [search@h1 08]$ ll 总用量 4 drwxrwxr-x 3 search search 4096 8月 28 04:49 28 [search@h1 08]$ cd 28/ [search@h1 28]$ ll 总用量 4 drwxrwxr-x 2 search search 4096 8月 28 04:49 49 [search@h1 28]$ cd 49/ [search@h1 49]$ ll 总用量 4 -rw-rw-r-- 1 search search 1439 8月 28 04:49 data.tar.gz [search@h1 49]$ tar -zxvf data.tar.gz ./ ./dd/ ./dd/disk20140828042921.txt ./dd/disk20140828043101.txt ./dd/disk20140828043111.txt ./dd/c.sh ./dd/m.tar.gz ./disk20140828042921.txt ./disk20140828043101.txt ./disk20140828043111.txt ./c.sh ./m.tar.gz ./2014/ ./2014/08/ ./2014/08/28/ ./2014/08/28/49/ ./d.sh [search@h1 49]$ ll 总用量 32 drwxrwxr-x 3 search search 4096 8月 28 04:49 2014 -rw-rw-r-- 1 search search 221 8月 28 04:34 c.sh -rw-rw-r-- 1 search search 1439 8月 28 04:49 data.tar.gz drwxrwxr-x 2 search search 4096 8月 28 04:34 dd -rw-rw-r-- 1 search search 167 8月 28 04:29 disk20140828042921.txt -rw-rw-r-- 1 search search 0 8月 28 04:31 disk20140828043101.txt -rw-rw-r-- 1 search search 22 8月 28 04:31 disk20140828043111.txt -rw-rw-r-- 1 search search 192 8月 28 04:49 d.sh -rw-rw-r-- 1 search search 503 8月 28 04:38 m.tar.gz [search@h1 49]$
下面看下如何获取指定磁盘的剩余空间,命令如下:
[search@h1 827]$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/vg_h1-lv_root 18134344 3925876 13287280 23% / tmpfs 624956 0 624956 0% /dev/shm /dev/sda1 495844 32670 437574 7% /boot [search@h1 827]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_h1-lv_root 18G 3.8G 13G 23% / tmpfs 611M 0 611M 0% /dev/shm /dev/sda1 485M 32M 428M 7% /boot [search@h1 827]$ df -h /dev/mapper/vg_h1-lv_root Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_h1-lv_root 18G 3.8G 13G 23% / [search@h1 827]$ df -h /dev/mapper/vg_h1-lv_root | sed -n '/% \//p' /dev/mapper/vg_h1-lv_root 18G 3.8G 13G 23% / [search@h1 827]$ df -h /dev/mapper/vg_h1-lv_root | sed -n '/% \//p' | gawk '{ print $5}' 23% [search@h1 827]$
最重要的是最后一条命令
查看系统运行时间:
[search@h1 827]$ uptime | sed -n '/,/s/,/ /gp' | gawk '{print "系统运行时间: "$3}' 系统运行时间: 1:49 [search@h1 827]$
查看系统空闲内存:
[search@h1 827]$ free -m | sed -n '2p' | gawk '{print $4"m"}' 1012m [search@h1 827]$
查看僵尸进程的命令:
[search@h1 827]$ ps -al | gawk '{print $2,$4}' | grep Z [search@h1 827]$ ps -al | gawk '{print $2,$4}' | grep S S PID S 1211 S 1212 S 2014 S 2015 [search@h1 827]$ ps -al | gawk '{print $2,$4}' | grep z [search@h1 827]$
下面看下,将这些系统信息,汇集到一起,查看整体情况:
[search@h1 827]$ cat q.sh echo -n "当前磁盘的剩余容量: " df -h /dev/mapper/vg_h1-lv_root | sed -n '/% \//p' | gawk '{ print $5}' echo -n "当前系统的运行时间:" uptime | sed -n '/,/s/,/ /gp' | gawk '{print "系统运行时间: "$3}' echo -n "当前系统的空闲内存: " free -m | sed -n '2p' | gawk '{print $4"m"}' echo -n "当前是否有僵尸进程存在:" r=`ps -al | gawk '{print $2,$4}' | grep z` if [ -z $r ] ; then echo "无僵尸进程存在!" else echo $r fi [search@h1 827]$ sh q.sh 当前磁盘的剩余容量: 23% 当前系统的运行时间:系统运行时间: 2:04 当前系统的空闲内存: 1012m 当前是否有僵尸进程存在:无僵尸进程存在! [search@h1 827]$
最后我们可以将系统信息,以文件形式,保存下来,或者保存到数据库里面,这样我们就可以轻松的通过数据库来查看,各个时间段的系统运行状况了。