为了做技术验证,公司分配了一台个人专用的服务器,平时在上面部署了大量应用。前几天为了让另一个同事验证算法,把服务器借给出去了,没想到他直接向服务器上传了近1T的数据,直接把硬盘干到100%了。直到我现在原来部署的应用都访问失败了,才发现这个骚操作。
为了尽快的恢复应用,我是心里骂骂咧咧,嘴上耐心沟通,同事直接上手删除数据,从/var/log目录开始,一把就干掉了。然后趁服务器不注意直接把上一个命令的rm -rfv /var/log/* 命令改成了 rm -rfv /*,都没有仔细看,直接运行,然后就没有然后了,系统文件被删了。
还好,这只是我专用的技术验证的服务器,对其他人都没有影响。所以也就不打算去找回文件,直接新开了一台服务器,把以前的应用都迁移到新服务器上。还有大多数的应用都是docker运行的,并把数据都映射到了指定目录下,所以迁移起来还算容易。
为了以后不再发生类似情况,我也怕自己哪天干出这种事儿来,在新服务器上把rm命令默认改成mv命令的效果了,这个才是本文的重点(重点不是抱怨才怪)。现在的AI真算是写代码片段的好手,直接给我写出了如下脚本:
# 安全删除功能设置
alias rm=trash # 将 rm 命令别名为 trash 函数
alias rl='ls ~/.trash' # 使用 rl 命令快速查看回收站内容
alias ur=undelfile # 使用 ur 命令恢复文件(undelfile)
# 将文件移动到回收站
trash() {
for file in "$@"; do
if [ -e "$file" ]; then
mv --backup=numbered "$file" ~/.trash/
echo "已移动至回收站: $file"
else
echo "错误: 文件或目录 '$file' 不存在。"
fi
done
}
# 恢复回收站中的文件到当前目录
undelfile() {
if [ -e ~/.trash/"$1" ]; then
mv -i ~/.trash/"$1" ./
echo "已恢复文件: $1"
else
echo "错误: 回收站中不存在文件 '$1'"
fi
}
# 清空回收站(真正永久删除)
cleartrash() {
read -p "确定要清空回收站吗?此操作不可恢复![y/N] " confirm
if [ "$confirm" == "y" ] || [ "$confirm" == "Y" ]; then
/bin/rm -rf ~/.trash/* # 注意这里使用的是系统的绝对路径 /bin/rm
echo "回收站已清空。"
else
echo "操作已取消。"
fi
}
只需要把上面的脚本添加到 .bashrc 文件尾,再 source .bashrc 就可以生效了。
总结:
- 不要使用root账号,不要怕每次输入密码麻烦,也不要把root账号借给别人。
- 还是把
rm命令默认修改为mv比较好,免得出错。