Shell脚本完成用户磁盘空间监测报告

Shell脚本完成用户磁盘空间监测报告,第1张

    笔者在文章-四种方法查看树莓派CPU温度中,用python查看树莓派温度和状态的程序,其中有一段python程序读取磁盘空间ospopen("df -h /") ,df -h /读取整个磁盘的使用情况。

    这一次笔者在书籍上看到一个脚本,颇具意义。脚本完成磁盘检查,并打印出使用量位居前十位,生成报告rpt。命令 du -hs /root  可以查看目录的整体使用情况,du -hs /root/可以查看目录一级的整体使用情况,输出统计信息,快速定位问题根源。

    同时关于df与du,df是显示磁盘分区上可以使用的磁盘空间,du是显示已经使用的空间。

    为了找出占用磁盘空间最多的目录,可以使用sort命令来排序,-r是允许数字排序,-n是逆序排序。    

     du -hs /root/ | sort -rn

       sed编辑器可以对输出内容进行赛选,只选择前四行内容,并添加行号。最后使用gawk格式化输出。

du -hs /root/ | sort -rn | sed '{5,$D; =}' | sed 'N; s/\n/ /' | awk '{printf $1 ":" "\t" $2 "\t" $3 "\n"}'

    现在来看看脚本big_userssh,脚本循环检测CHECK_DIRECTORIES中的目录,然后执行  du -S $DIR_CHECK 打印格式化输出磁盘使用情况。exec命令是打开文件outfilename作为stdout,即输出重定向。

#!/bin/bash

#

# Big_Users - Find big disk space users in various directories

###############################################################

# Parameters for Script

#

CHECK_DIRECTORIES=" /var  /root"  #Directories to check

#

############## Main Script #################################

#

DATE=$(date '+%m%d%y')              #Date for report file

#

exec > disk_space_$DATErpt          #Make report file STDOUT

#

echo "Top Ten Disk Space Usage"      #Report header

echo "for $CHECK_DIRECTORIES Directories"

#

for DIR_CHECK in $CHECK_DIRECTORIES  #Loop to du directories

do

  echo ""

  echo "The $DIR_CHECK Directory:"  #Directory header

#

# Create a listing of top ten disk space users in this dir

  du -S $DIR_CHECK 2>/dev/null |

  sort -rn |

  sed '{11,$D; =}' |

  sed 'N; s/\n/ /' |

  gawk '{printf $1 ":" "\t" $2  "\t" $3 "\n"}'

#

done                                #End of loop

#

exit

运行 /big_userssh后生成的报告:

system(执行shell命令)相关函数fork,execve,waitpid,popen表头文件#include定义函数intsystem(constcharstring);函数说明system()会调用fork()产生子进程,由子进程来调用/bin/sh-cstring来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD信号会被暂时搁置,SIGINT和SIGQUIT信号则会被忽略。返回值如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值。如果system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为system()调用/bin/sh失败所返回的127,因此最好能再检查errno来确认执行成功。附加说明在编写具有SUID/SGID权限的程序时请勿使用system(),system()会继承环境变量,通过环境变量可能会造成系统安全的问题。

1 crontab -e

##编辑文件格式如下

0 6 ~/checksh

2编辑checksh 内容如下:

#!/bin/bash

mail=your_email@domaincom # 你的e_mail

code=`df | grep -c -E \(9[1-9]\%\)\|\(100\%\)` # 判断磁盘的占用有没有超过90%

if [ $code -gt 0 ]

then

df | mail -v -s "subject" $mail - ## 如果有,就发邮件,邮件内容为df 命令的输出(即:磁盘使用统计)

fi

#######################################################chechsh 文件结束

3 将checksh移动到当前用户的home目录下

#######################################################

把你的邮件设置好,就能发了

4 chmod +x checksh ## 设为可执行

5 /etc/initd/crond restart ## 重起crond服务

以上就是关于Shell脚本完成用户磁盘空间监测报告全部的内容,包括:Shell脚本完成用户磁盘空间监测报告、Linux下如何用C语言获取硬盘使用情况、Linux下每天自动执行查看磁盘剩余空间的shell文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10640787.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存