检查目录大小并将权限更改为只读

检查目录大小并将权限更改为只读

我需要编写一个脚本来检查目录大小,并在超过阈值时将权限更改为只读,并将所有权更改为 root。

  • 我有多个用户的主目录位于 /sasdata2

  • 我想检查 /sasdata2 处用户的每个文件夹并将所有权更改为 root 并将权限更改为只读每个文件夹超过 100gb...

  • 该脚本将定期运行,例如每天一次......

另外,当发生任何更改时,将向用户和管理员发送电子邮件。对于某些用户来说,限制会更高,例如 200 GB,或者对于一个用户,我认为是 1 TB,因此这取决于每个用户的策略,即 100 GB 或全部。

提前致谢。

感谢大家的回答,不过我已经整理出解决方案如下:

获取了 3 个名为 100gb.txt、200gb.txt 和 1tb.txt 的文件,将各自的用户添加到文件中。然后运行下面的脚本:

#!/bin/bash
for i in `more /sasdata2/SAS-USERS/100gb.txt`
do
uses=$(du -s /sasdata2/SAS-USERS/$i | awk '{print $1}')
uses_mb=`expr $uses / 1024`

if [ $uses -ge 104857600 ]; then
chown root:root /sasdata2/SAS-USERS/$i
echo "Your disk space usage is now $uses_mb MB. You are denied to write data at your home directory" | mail -s "Disk Space Uses" "$i"@mail.com,[email protected]

elif [ $uses -lt 104857600 ]; then
chown $i:$i /sasdata2/SAS-USERS/$i
fi
done

重复 200 GB 和 1 TB 的行,调用相应的文本文件。

答案1

有一个名为 的工具quota,您可以在其中指定用户和/或组的磁盘存储限制。

我宁愿用它来工作

https://www.howtoforge.com/tutorial/linux-quota-ubuntu-debian/

而不是编写类似的脚本

MB_USEd=$(du -shm /home/foo)
if [ $MB_USEd -ge 102400 ]; then
    chown root:root /home/foo
fi

这可能不是按预期工作。

相关内容