巧用shell脚本统计磁盘使用情况

在系统环境中存在大量的文件时,统计磁盘空间的工作变得尤为重要。
首先是传统的文件统计,通常使用-s选项,但是只能得到一个概要的信息,如果想定位哪些文件消耗的空间较大还是比较麻烦的。
[ora11g@rac1 new_test]$ du -s .
1296    .
[ora11g@rac1 new_test]$ du -sh .
1.3M    .
[ora11g@rac1 new_test]$ du -s .
1296    .
这个时候,勉强可以使用-s ./*的形式得到所有的文件夹的大小情况。但是还是不够直观。
[ora11g@rac1 new_test]$ du -s ./*
80      ./append
32      ./append_fix
60      ./COL_LIST
24      ./compare
56      ./DESC_LIST
4       ./DUMP
80      ./DUMP_LIST
44      ./extract
48      ./full_append
92      ./init
48      ./loading
8       ./monitor
20      ./net_extract
108     ./parallel
88      ./parfile
248     ./partition_append
76      ./partition_extract
128     ./prepare
40      ./split_loading
8       ./tab_parall.lst

这个时候可以考虑使用-S选项,得到的列表会统计文件夹及其目录的大小。定位问题相对比较轻松。
[ora11g@rac1 new_test]$ du -S .
80      ./append
20      ./net_extract
80      ./DUMP_LIST
8       ./append_fix/ERRTAB_LIST
24      ./append_fix
48      ./loading
8       ./monitor
44      ./extract
248     ./partition_append
48      ./full_append
24      ./init/sqls/target
20      ./init/sqls/source
8       ./init/sqls
40      ./init
56      ./DESC_LIST
108     ./parallel
4       ./compare/logs
4       ./compare/sqls
16      ./compare
4       ./DUMP
28      ./prepare/post
28      ./prepare/pre
72      ./prepare
60      ./COL_LIST
76      ./partition_extract
88      ./parfile
4       ./split_loading/sqls
36      ./split_loading
12      .

但是如果文件目录下有很多的文件和文件夹,查出来的结果就会比较凌乱。我们可以得到最占用空间的10个目录,这样定位问题就比较有针对性。
下面的命令可以得到前10位的占用空间较大的目录。通过sed直接过滤了前10位之后的信息。
[ora11g@rac1 test]$ du -S .|sort -rn|sed '{11,$D;}'
130668  .
552     ./ext_datapump/split_loading
500     ./parallel
460     ./ext_datapump_14_jul/DUMP
444     ./ext_datapump/split_loading/log_bak
324     ./ext_datapump/DUMP_LIST
316     ./ext_datapump/ext_datapump/DUMP_LIST
316     ./ext_datapump_14_jul/ext_datapump/DUMP_LIST
304     ./ext_datapump/DESC_LIST
300     ./ext_datapump/COL_LIST

这样看起来还可以,但是如果输出的结果中显示空间的占用情况排名就好了。比如 
1   x xxx
2   xxxxxx
我们可以输出行号,然后换行
先输出行号
[ora11g@rac1 test]$ du -S .|sort -rn|sed '{11,$D;=}'
1
130668  .
2
552     ./ext_datapump/split_loading
3
500     ./parallel
4
460     ./ext_datapump_14_jul/DUMP
5
444     ./ext_datapump/split_loading/log_bak
6
324     ./ext_datapump/DUMP_LIST
7
316     ./ext_datapump/ext_datapump/DUMP_LIST
8
316     ./ext_datapump_14_jul/ext_datapump/DUMP_LIST
9
304     ./ext_datapump/DESC_LIST
10
300     ./ext_datapump/COL_LIST
[ora11g@rac1 test]$ 

然后换行
[ora11g@rac1 test]$ du -S .|sort -rn|sed '{11,$D;=}'|sed 'N;s/\n/ /'
1 130668        .
2 552   ./ext_datapump/split_loading
3 500   ./parallel
4 460   ./ext_datapump_14_jul/DUMP
5 444   ./ext_datapump/split_loading/log_bak
6 324   ./ext_datapump/DUMP_LIST
7 316   ./ext_datapump/ext_datapump/DUMP_LIST
8 316   ./ext_datapump_14_jul/ext_datapump/DUMP_LIST
9 304   ./ext_datapump/DESC_LIST
10 300  ./ext_datapump/COL_LIST

这个时候大部分工作都完成了,剩下的就是结果集的格式化了。可以简单格式化一下。
[ora11g@rac1 test]$ du -S .|sort -rn|sed '{11,$D;=}'|sed 'N;s/\n/ /'|awk '{print $1 ":" "\t" $2 "\t" $3 "\n"}'
1:      130668  .

2:      552     ./ext_datapump/split_loading

3:      500     ./parallel

4:      460     ./ext_datapump_14_jul/DUMP

5:      444     ./ext_datapump/split_loading/log_bak

6:      324     ./ext_datapump/DUMP_LIST

7:      316     ./ext_datapump/ext_datapump/DUMP_LIST

8:      316     ./ext_datapump_14_jul/ext_datapump/DUMP_LIST

9:      304     ./ext_datapump/DESC_LIST

10:     300     ./ext_datapump/COL_LIST

最后可以把错误日志做一个简单的处理。
[ora11g@rac1 test]$ du -S . 2>/dev/null|sort -rn|sed '{11,$D;=}'|sed 'N;s/\n/ /'|awk '{print $1 ":" "\t" $2 "\t" $3 "\n"}'
1:      130668  .

2:      552     ./ext_datapump/split_loading

3:      500     ./parallel

4:      460     ./ext_datapump_14_jul/DUMP

5:      444     ./ext_datapump/split_loading/log_bak

6:      324     ./ext_datapump/DUMP_LIST

7:      316     ./ext_datapump/ext_datapump/DUMP_LIST

8:      316     ./ext_datapump_14_jul/ext_datapump/DUMP_LIST

9:      304     ./ext_datapump/DESC_LIST

10:     300     ./ext_datapump/COL_LIST
在这个基础上可以发挥更多的功能,可以使用各种监控指标进行更进一步的扩展。

时间: 2025-01-29 20:19:13

巧用shell脚本统计磁盘使用情况的相关文章

使用shell脚本查看数据库负载情况(第二篇)

在之前写了一个shell脚本,能够得到一个基于时间点的数据库负载报告. 使用shell脚本查看数据库负载情况 http://blog.itpub.net/23718752/viewspace-1168027/ 在生产环境中快照的生成频率可能10分钟或者半个小时就会生成,频率要快些,使用原先的脚本执行起来会有一定的延时. 想查看在快照的时间间隔内数据库的负载情况.这样能够更高效的定位某个问题.比如10点到11点,每10分钟生成一次快照.可能问题发生在10:40~10:50,如果通过一个小时的快照就

Linux/Unix shell 脚本监控磁盘可用空间

    Linux下监控磁盘的空闲空间的shell脚本,对于系统管理员或DBA来说,必不可少.下面是给出的一个监控磁盘空间空间shell脚本的样本,供大家参考.   1.监控磁盘的空闲空间shell脚本 robin@SZDB:~/dba_scripts/custom/bin> more ck_fs_space.sh #!/bin/bash # -----------------------------------------------------------------------------

Shell脚本统计当前目录下目录和文件的数量_linux shell

Linux下如何统计当前目录下文件有多少个,目录又有多少个呢? 下面用shell写一个脚本,放置在当前目录下,执行即可. 复制代码 代码如下:   #!/bin/bash   #脚本名称 dir #定义一个函数fun_directory   fun_directory() {        let "filenum=0"   let "dirnum=0"   for i in $( ls ) do    if [ -d $i ]    then       let

使用shell脚本检测数据库连接访问情况

    最近要迁移几套环境,涉及的数据库有Oracle,MySQL,数量还不少,能够达到的目标就是整合后的服务器缩减幅度达到70%,这样一种迁移场景,就涉及到很多的网络连接情况,如果本身业务优先级高,涵盖的是全局业务,那么这个影响就会无限放大.所以对于网络连接情况的监控也尤为重要.     其实对于这方面的内容,严格来说,DBA能够根据防火墙信息列表筛查到对应的应用服务器IP,然后交由负责的专人来负责跟进就可以了,但是这个时候因为重重原因,我要ipositive一些.这件事情就希望我能够有自己的

使用shell脚本查看数据库负载情况

平时在查看数据库的问题时,会有种迷茫的感觉,如果没有任何人反馈问题,基本上没有主动查找问题的方向,awr,ash都是在得知问题发生的时间段或者一些时间戳来从历史记录中查找相关的信息,个人整理了如下的脚本,能够显示当天的时间段内数据库的负载信息,能够很好掌握数据库的忙闲情况. 来看一个简单的例子,比如我要查看早上6点到中午12点数据库的负载情况 脚本 showdbtime.sh 显示的是在制定的时间段内的 数据库负载的一个综合值.比如6点到7点个小时(60分钟),dbtime如果是120分钟,那么

巧用shell脚本分析数据库用户

在数据库维护中,可能对于一个陌生的schema,需要了解它的一些情况,可以使用如下的脚本来很快得到一个报告,里面包含了详尽的信息. 用户占用的空间,权限,角色和基本配置信息. NAME=`echo $1|cut -d. -f1` if [ -z "$NAME" ]  then   echo -e "User must be provided: \c"; read NAME fi sqlplus -s $DB_CONN_STR@$SH_DB_SID clear buf

linux中使用shell脚本检测内存使用情况

 公司服务器最近两天老是因为内存被使用满而造成死机,实在是受不了老叫机房的人去帮忙重启,专门写了个脚本来释放下内存,当然这台服务器不是太重要,我粗鲁的处理方式估计不会适合大多数服务器,请大家使用之前先考虑清楚,不然造成数据丢失就不关我的事了. 脚本内容: cat check-mem.sh #!/bin/bash mem_total=`free -m | awk 'NR==2' | awk '{print $2}'` mem_free=`free -m | awk 'NR==3' | awk '{

Shell脚本统计文件行数的8种方法_linux shell

获取单个文件行数 文件:test1.sh 行数:20 方法一 复制代码 代码如下: awk '{print NR}' test1.sh|tail -n1 如图所示: 方法二 复制代码 代码如下: awk 'END{print NR}' test1.sh 如图所示: 方法三 复制代码 代码如下: grep -n "" test1.sh|awk -F: '{print '}|tail -n1 如图所示: 方法四 复制代码 代码如下: sed -n '$=' test1.sh 如图所示: 方

linux中shell脚本统计apache日志中页面访问量

需求:在程序中有两个页面,用于某种用途,现需要统计这两个页面在每分钟内的访问量,包括总访问次数,成功次数(状态码200),失败次数.然后写入到mysql中. mysql字段:id(自增长).time(实际统计时间).year.month.day.hour.visit(总访问量).success.fail.target(目标) #!/bin/bash #Desc       : analysis apache log for witch pages with one minutes #instal