【shell脚本实战】脚本#35 分析每个用户使用的磁盘空间大小
#!/bin/bash #设置 一个变量代表临界值,看看是否能超过这个值,单位是MB MAXDISKUSAGE=20000 #cut -d: -f1,3 /etc/passwd | awk -F: '$2 >99 {print $1} 代表的含义是:cut命令以 :为分隔符获取第1个字符 #和第三个字符组成新的字符串(还是以:连接的), #然后 awk 以 :为分隔符 取出 判断条件是$2 大于 99 打印 $1 的数值 接下来进行for循环 for name in $(cut -d: -f1,3 /etc/passwd | awk -F: '$2 >99 {print $1}) do /bin/echo -n "User $name exceeds disk quota.disk usage is:" # find -xdev 表示:Don't descend directories on other filesystems. -xdev 确保find不会去遍历所有的 #文件系统,排除系统区域,只读源目录,可移动设备、/proc运行目录(linux系统)等类似位置。 #-ls 代表 list current file in ls -dils format on standard output. #ls -dils -d:显示目录信息,而不是目录下的文件信息, -i:列出文件或者目录的索引节点号 -l:显示详细信息 #-s:以块大小为单位列出所有文件大小 find / /usr /var /home -xdev -user $name -type f -ls | \ awk '{ sum += $7} END {print sum / (1024*1024) "Mbytes"}' #awk "\$9 > $MAXDISKUSAGE { print \$0 } 这句话应该跟for循环连着看, 他们直接是以 | 连接的, #而for 循环的输出语句应该是 User $name exceeds disk quota.disk usage is: sum Mbytes #所以$9 代表的是sum值 ,只有大于20000的sum值才允许打印出来。$0 打印整个语句。 #$9 和 $0 前面的 \ 引号的意思还是转义,因为他的awk 后面接的语句用的是双引号,所以要想识别变量 #需要使用转义符识别。 done | awk "\$9 > $MAXDISKUSAGE { print \$0 }" exit 0
------------恢复内容结束------------