Linux shell脚本编程练习题

《书籍上面的练习题》

问题:谁在霸占磁盘资源?

    如果您负责的Linux服务器上有许多用户,则经常需要解决的一个问题就是谁在使用所有磁盘空间。这是个老掉牙的问题有时比其他问题更难以弄清。

    不幸的是,虽然跟踪用户磁盘空间使用情况非常重要,但却没有一个Linux命令可以提供此信息。因此需要通过shell脚本将命令拼凑起来提取需要查找的信息。

效果如下:

Total Disk Usage by User
User    Space    Percent
--------------------------
user5    44     16.18%
user7    28     10.29%
user6    28     10.29%
user4    28     10.29%
user3    28     10.29%
user2    28     10.29%
user1    28     10.29%
neo      28     10.29%
user9    16      5.88%
user8    16      5.88%
--------------------------
Total    272

脚本如下:

#!/bin/bash
#calculate disk usage and report per user

Temp=`mktemp -t tmp.XXX`        #反引号,命令的执行结果
du -s /home/* | grep -v lost+found | sed 's/\/home\///g' | sort -g -r > $Temp
Total=`du -s /home | awk '{print $1}'`    #反引号,命令的执行结果
cat $Temp | awk -v n="$Total" '
BEGIN { 
        print "\033[31mTotal Disk Usage by User\033[0m";
        print "User\tSpace\tPercent";
        print "--------------------------"
}
{
        printf "%s\t%d\t%6.2f%\n",$2,$1,($1/n)*100            #printf格式化输出    #.#:第一个数字控制显示的宽度;第二个#表示小数点后的精度;
}
END {
        print "--------------------------";
        printf "Total\t%d\n",n
}'
rm -f $Temp

原创文章,作者:nice_neo_linux,如若转载,请注明出处:http://www.178linux.com/17959

(2)
nice_neo_linuxnice_neo_linux
上一篇 2016-06-09
下一篇 2016-06-09

相关推荐

  • test

    test the URL.

    Linux干货 2016-12-03
  • sed

    sed Stream EDitor, 行编辑器 sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非使用重定向存储输出。 Sed主要用来自动…

    Linux干货 2017-04-26
  • 超文本传输协议-HTTP

        超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。     设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或…

    Linux干货 2017-07-31
  • FHS文件系统下个各目录功能

    FHS文件系统下个各目录功能 FHS文件系统的建立是为了让开发者和用户可以预测软件安装文件和文件夹的位置。对整个linux的文件系统系统做了以下的规范:     /bin:命令二进制文件的存放目录;     /boot:系统启动时一些文件存放的目录,包含引导linux的重要文件,…

    Linux干货 2016-10-18
  • 简单的shell脚本第二版

    经过各位老板的指点我修改了部分内容使其更加完善        原文链接  http://www.178linux.com/70381 /bin/bash declare -i Inet declare -i Snet [[ $1 =~ ((2[0-4][0-9]|25[0-5]|1?[0-9]?[0…

    Linux干货 2017-03-19
  • N23-卡卡琦-第二周

    1、文件管理类命令 常规命令:copy、mv、rm (1).copy 文件复制 用法: 注意:复制文件只是复制文件的数据而不是元数据,但是可以保留元数据的信息。 单源复制:目录是否存在都可以 多源复制:目录必须是存在的 -i:提醒用户操作确认(交互式) -f:强行覆盖 -r:递归复制目录 -p:保留源数据 -a:用于实现归档,做备份 -d:不跟踪符号链接所指…

    Linux干货 2016-12-11