脚本空间分区
⑴ Shell脚本完成用户磁盘空间监测报告
笔者在文章-四种方法查看树莓派CPU温度中,用python查看树莓派温度和状态的程序,其中有一段python程序读取磁盘空间os.popen("df -h /") ,df -h /读取整个磁盘的使用情况。
这一次笔者在书籍上看到一个脚本,颇具意义。脚本完成磁盘检查,并打印出使用量位居前十位,生成报告rpt。命令 -hs /root 可以查看目录的整体使用情况, -hs /root/*可以查看目录一级的整体使用情况,输出统计信息,快速定位问题根源。
同时关于df与,df是显示磁盘分区上可以使用的磁盘空间,是显示已经使用的空间。
为了找出占用磁盘空间最多的目录,可以使用sort命令来排序,-r是允许数字排序,-n是逆序排序。
-hs /root/* | sort -rn
sed编辑器可以对输出内容进行赛选,只选择前四行内容,并添加行号。最后使用gawk格式化输出。
-hs /root/* | sort -rn | sed '{5,$D; =}' | sed 'N; s/\n/ /' | awk '{printf $1 ":" "\t" $2 "\t" $3 "\n"}'
现在来看看脚本big_users.sh,脚本循环检测CHECK_DIRECTORIES中的目录,然后执行 -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_$DATE.rpt #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 directories
do
echo ""
echo "The $DIR_CHECK Directory:" #Directory header
#
# Create a listing of top ten disk space users in this dir
-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_users.sh后生成的报告:
⑵ 请问监控linux服务器磁盘容量的脚本怎么写
看看下面这个脚本(注意要用英文的标点符号):
#!/bin/bash
partion_list=( 'df -h | awk ‘NF>3&&NR>1{sub(/%/,””,$(NF-1));print $NF,$(NF-1)}’' )
critical=90
notification_email()
{
emailuser='[email protected]' “发送邮件地址”
emailpasswd='password' “成功开启POP3/SMTP服务,在第三方客户端登录时,密码框请输入的授权码”
emailsmtp='smtp.qq.com'
sendto='[email protected]' “接收邮箱地址”
title='Disk Space Alarm' “邮件标题”
/usr/local/bin/sendEmail -f $emailuser -t $sendto -s $emailsmtp -u $title -xu $emailuser -xp $emailpasswd -m $emailmessage
}
crit_info=””
for (( i=0;i<${#partition_list[@]};i+=2 ))
do
if [ “${partition_list[ ((i+1)) ]}” -lt “$critical” ];then
echo “ok! ${partition_list[i]} used ${partition_list[ ((i+1)) ]}%”
else
if [ “${partition_list[ ((i+1)) ]}” -gt “$critical” ];then
crit_info=$crit_info”Warning!!! ${partition_list[i]}
used ${partition_list[ ((i+1) ] }%\n”
fi
fi
done
if [ “$crit_info” != ”” ];then
echo -e $crit_info | notification_email
fi
上面脚本的功能是监控每个磁盘分区,当磁盘分区使用空间超过90%时,就通过sendEmail来发送邮件告警。sendEmail是个开源工具,可以从http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz下载;
解压后把sendEmail拷贝到/usr/local/bin下即可。
⑶ 请问怎么用脚本给Linux系统分区
代码如下:
#!/bin/bash
#Author: MOS
#Script name: funPart.sh
#Date & Time: 2012-10-10/12:20:53
#Version: 1.0.1
#Description:
# Disk_Mod(){
#使用if匹配模式,使用for循环判断是否存在,如果有,则取其绝对路径,跳出循环,如果不匹配或文件不存在,跳出函数,返回66
if [[ -n $1 && $1 =~ "/dev/sd[a-z]" ]];
then local Darray=(ls /dev/sd[a-z])
for i in ${Darray[*]};do
[[ "$i" == "$1" ]] && Sd=$i && break
done
else
return 66
fi
#当匹配成功,进入选择,告诉用户,是否继续,输错的话进入无限循环,当用户选择Y,则清空目标分区,且跳出while循环
while :;do
read -p "Warning!!!This operation will clean $Sd data. Next=y,Quit=n [y|n]: " Choice
case $Choice in
y)
dd if=/dev/zero of=$Sd bs=512 count=1 &> /dev/null && break || return 67 ;; n)
exit 88 ;;
*)
echo "Invalid choice,please choice again." ;;
esac
done
#使用echo传递给fdisk进行分区,如果此命令失败,则跳转出去,错误值68,需要注意的是,有时候这个返回值很诡异,笔者之前成功与否都是返回的1,后来重启之后,就好了,如果慎重的话,可以对创建的分区,进行判断,不过就需要使用其他工具截取相关字段了,虽有些小麻烦,但无大碍 echo -e "n\np\n1\n\n+100M\nn\np\n2\n\n+1024M\nw\n"|fdisk /dev/sdb &> /dev/null || return 68 #格式化之前,让内核重新读取磁盘分区表,值得注意的是,有的系统版本,使用partprobe无效,譬如笔者的环境是rhel5.8,而rhel6.0以后,这个命令就很危险了,而使用partx -a /dev/sdb则效果更好...此项需慎重,如果格式化失败,则告知把失败的分区定义成变量,且跳出函数,并带出错误值69
partprobe Part=fdisk -l /dev/$Sd|tail -2|cut -d" " -f1`
for M in ${Part[*]};do
! mke2fs -j $M &> /dev/null && ErrorPart=$M && return 69
done
return 0
}
#下面代码,调用函数,接收函数返回值,根据返回值进行判断哪里出错。
Disk_Mod $1
Res=$?
[ $Res -eq 0 ] && exit 0
[ $Res -eq 66 ] && echo "Error! Invalid input."
[ $Res -eq 67 ] && echo "Error! Command -> dd <- Faild."
[ $Res -eq 68 ] && echo "Error! Command -> fdisk <- Faild."
[ $Res -eq 69 ] && echo "Error! Command -> mke2fs <- Faild."
如果有什么不懂的话可以去看看《Linux就该这么学》这本书,非常适合新手学习Linux。
⑷ 求教,如何使用shell脚本实现自动分区
用fdisk 的脚本自动执行可以参考如下shell脚本:
#makepartition
ddif=/dev/zeroof=/dev/mmcblk1bs=1024count=1024
fdisk/dev/mmcblk1<<EOF
n
p
1
2048
+100M
n
p
2
t
1
c
a
1
w
EOF
⑸ 我打开分区助手后出现如下图的脚本错误,开始没有管后来分区后点提交重启后分区没有变化,怎么办求解!
你先把分区助手这个主程序挪到c盘这个分区里去执行,看看能不能用,我之前给c盘扩容也是这个问题,脚本错误的问题,很可能是你下的这个分区过助手和毛病换一个,网上有的是免安装绿色版的,不要下安装版的,
⑹ 求一个查看电脑磁盘分区的脚本
你用的是什么系统啊?
⑺ 自己写了个脚本,关于swap分区的,我的是安卓手机,但我写的这个脚本,每次开机都要创建一个swap
if [ -e FILE ];then
...
else
...
fi
⑻ 如何利用diskpart命令+脚本文件实现对分区的操作
脚本文件就是把我下面讲的diskpart的象“select disk 0","create partition primary”的命令按你要执行的操作编辑好保存在文本文件里就可以了!!!
删除分区的脚本:
select disk 0
select partition 编号n
delete partition
把上面的三行保存在文本里xx.txt 编号n是具体你要删除的分区
执行diskpart xx.txt 就可以了!!
必须启动到“带命令提示符的安全模式”下,输入Diskpart。不然没有有效的!!!
调整分区大小用diskpart好像办不到:)
下面是创建分区:
输入list disk显示已安装的硬盘,再输入“select disk 0”选择这个硬盘(也可称为为该硬盘设置焦点属性)。然后输入“create partition primary”创建主分区
create partition primary的语法是:
create partition primary [size=N] [offset=N] [ID={Byte | GUID}] [align=N] [noerr]
该分区不接收驱动器号。必须使用 assign 命令为该分区分配一个驱动器号。
删除分区:
输入“select partition 编号n”使分区n具有焦点属性,再输入"delete partition"即可删除该分区。
设置主分区:
先用“select partition 编号n”使其具有焦点属性再输入命令active即可。最后输入Exit,退出
Diskpart.exe 实用工具还包含磁盘管理管理单元支持的一组操作。不过,Diskpart.exe 操作与其他磁盘管理管理单元功能不同,不能禁止您在无意中执行可能导致数据丢失的操作,而是允许显式控制分区和卷。因此,建议您小心使用这些 Diskpart.exe 操作。
Diskpart.exe的所有的命令都可以保存到文本后执行脚本的操作
Diskpart.exe 脚本文件文件名
希望对你有帮助:)
⑼ linux下我有一个文件夹,或是一个软连接连接到一个磁盘分区下的文件夹,如何用脚本计算文件夹剩余空间
-sh
⑽ 怎么用shell脚本 对磁盘进行分区管理
用shell脚本基本无法实现。
首先,shell脚本方便管理的方面是比如监控磁盘使用情况,定期删除无用文件等这些工作。而你想要的是扩容,这基本和shell script的使用不怎么沾边。
其次,如果非要说用shell可以实现你想要的功能的话,那就是用script编写一个扩容工具,而直接扩容是有很大的危险性的,所以你写的script要很完善。
最后,综上述,干嘛不直接上网down一个扩容工具?