bash脚本解析du-s*输出并警告超过特定存储限制的用户

bash脚本解析du-s*输出并警告超过特定存储限制的用户,bash,for-loop,line,du,Bash,For Loop,Line,Du,我试图编写一个脚本来检查homefolders磁盘的使用情况,并在用户超过xxGB时通过电子邮件发出警告 我将du-s*的输出转储到一个临时文件中,逐行读取,当我试图从du的输出中读取文件夹的大小和名称时,它无法正常工作,只需执行一个echo$文件,我将每行转储为两行,我尝试展开以空格替换选项卡,但也无法正常工作,我也不知道如何根据尺寸来做comaprison #!/bin/bash #echo "Disk usage report for /homes on `hostname`" EMA

我试图编写一个脚本来检查homefolders磁盘的使用情况,并在用户超过xxGB时通过电子邮件发出警告

我将du-s*的输出转储到一个临时文件中,逐行读取,当我试图从du的输出中读取文件夹的大小和名称时,它无法正常工作,只需执行一个echo$文件,我将每行转储为两行,我尝试展开以空格替换选项卡,但也无法正常工作,我也不知道如何根据尺寸来做comaprison

#!/bin/bash

#echo "Disk usage report for /homes on `hostname`"

EMAIL="helpdesk@xy.com"

##########################
# check staff
#########################

cd /homes/staff/
file1="/root/scripts/temp_check"
file2="/root/scripts/temp_check2"
du -s * | sort -rn | head -15  |awk '{print}' > $file1
expand $file1 > $file2

for line in $(cat $file2)

do

echo $line

# echo $line | awk '{ print $2 }'

mail -s "Disk usage report for your homefolder" $EMAIL

done
看看

在Ubuntu中安装durep 使用以下命令安装durep

sudo aptitude install durep
使用durep 语法大致是
durep[OPTION]…[DIRECTORY]

  • “durep-w~/durepweb-td 2”

    这将把目录树从当前目录打印到控制台的深度2,并在~/durepweb目录中创建网页(该目录必须存在)

看一看

在Ubuntu中安装durep 使用以下命令安装durep

sudo aptitude install durep
使用durep 语法大致是
durep[OPTION]…[DIRECTORY]

  • “durep-w~/durepweb-td 2”

    这将把目录树从当前目录打印到控制台的深度2,并在~/durepweb目录中创建网页(该目录必须存在)


for循环基于空格标记您的输入。因此每个单词都成为一个$行

您可以使用while循环来正确捕获输入,而不是for循环,例如

cat $file2 | while read line; do echo $line; done

(您可以临时添加到脚本中以查看发生了什么)

for循环基于空格标记您的输入。因此每个单词都成为$line

您可以使用while循环来正确捕获输入,而不是for循环,例如

cat $file2 | while read line; do echo $line; done
(您可以临时添加到脚本中以查看发生了什么)

如果您要求

 du -s /home/joe/* 
您将逐个获得所有文件(隐藏文件除外)和目录的摘要,因为*由shell展开

 du -s /home/joe
将给你一行,一切总结,包括隐藏的文件

 du -s . 
也会对整个目录进行汇总,并包含隐藏文件(刚刚测试过)

因为只有一条线,所以整条线从

 du -s * | sort -rn | head -15  |awk '{print}' > $file1

因为您不需要对一行进行排序,所以可以将其减少到15行,并使用awk语句重复它。

如果需要

 du -s /home/joe/* 
您将逐个获得所有文件(隐藏文件除外)和目录的摘要,因为*由shell展开

 du -s /home/joe
将给你一行,一切总结,包括隐藏的文件

 du -s . 
也会对整个目录进行汇总,并包含隐藏文件(刚刚测试过)

因为只有一条线,所以整条线从

 du -s * | sort -rn | head -15  |awk '{print}' > $file1


因为您不需要对一行进行排序,所以将其减少到15行,并使用awk语句重复它。

为什么不简单地实现磁盘配额?几乎所有Unix/Linux系统都可以做到这一点

然而,如果你真的想这样做,为什么要进行所有的阴谋

du-s*
将生成一个两列输出,其中包含已使用的磁盘空间和用户名。使用while循环,而不是将所有内容都放在临时文件中

cd /home   #Or where ever all the user's home directories are stored
du -s | while read space user
do
    if [ $space -gt 10000000 ]
    then
        mailx -s"You're using a lot of diskspace!" $user <<MAIL
Dear $user:

We notice that you are now using $space in your home directory.
are you storing there? The total amount of diskspace allowed
is 15,000,000. We highly suggest you trim down your diskspace, or
we'll do it for you.

Sincerely,

Your Kindly System Administrator
MAIL
  fi
done   
cd/home#或存储所有用户主目录的位置
du-s |同时读取空间用户
做
如果[$space-gt 10000000]
然后

mailx-s“您正在使用大量磁盘空间!”$user为什么不简单地实现磁盘配额呢?几乎所有Unix/Linux系统都可以做到这一点

然而,如果你真的想这样做,为什么要进行所有的阴谋

du-s*
将生成一个两列输出,其中包含已使用的磁盘空间和用户名。使用while循环,而不是将所有内容都放在临时文件中

cd /home   #Or where ever all the user's home directories are stored
du -s | while read space user
do
    if [ $space -gt 10000000 ]
    then
        mailx -s"You're using a lot of diskspace!" $user <<MAIL
Dear $user:

We notice that you are now using $space in your home directory.
are you storing there? The total amount of diskspace allowed
is 15,000,000. We highly suggest you trim down your diskspace, or
we'll do it for you.

Sincerely,

Your Kindly System Administrator
MAIL
  fi
done   
cd/home#或存储所有用户主目录的位置
du-s |同时读取空间用户
做
如果[$space-gt 10000000]
然后

mailx-s“您正在使用大量磁盘空间!”$user为什么不实施配额?这非常昂贵,我们正在运行虚拟机,当我们实施配额时,每个用户登录时运行的du在服务器上的负载非常昂贵,因此我们实施了一个每周运行一次的简单脚本,但现在我们想增强它,为什么不实施配额?这非常昂贵e、 我们正在运行虚拟机,当我们实现配额时,每个用户登录时运行的du在服务器上的负载非常昂贵,因此我们实现了一个每周运行一次的简单脚本,但现在我们想要增强它,我已经在做这件事了,但现在当我尝试解析它时,如果文件列表如下所示:Hm.
du-s.>file1
du-s/home/joe>$file1
生成空文件?我已经在这样做了,但现在我尝试解析它,如果文件列表如下:Hm.
du-s.>$file1
du-s/home/joe>$file1
生成空文件?谢谢,这正是我们想要的,但是我得到了一个错误,语法错误,fileY意外结束您可以将“set-xv”添加到shell脚本的前面。这将打印出每一行和每个环境变量的值。这有助于调试类似的问题。问题可能是HEREIS文档(“谢谢,这正是我们想要的,但我遇到了一个错误,语法错误”“文件意外结束您可以添加”set-xv“到shell脚本的前面。这将打印出每一行和每个环境变量的值。这有助于调试类似的问题。问题可能是HEREIS文档(“虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能会无效。@Junuxx很好。我一定是忘记了。另外,我几天才开始这么做:)。添加了一些使用示例,这是一个很好的例子。”