我需要编写一个脚本来检查目录大小,并在超过阈值时将权限更改为只读,并将所有权更改为 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
这可能不是按预期工作。