就在刚才迷迷糊糊的就把 /usr 给 rm -rf 了,当时身上冷汗都冒出来了。好在只是工作和学习的云主机上边的内容并不重要,于是就重新做系统了。这些都不是重点重点是怎么能避免下一次再犯这样的低级错误,下面我给大家提供了一个解决方案。
1.添加一个垃圾桶
在根目录下创建一个trash目录,并将目录权限修改为755。
# cd /
# mkdir trash
# chmod 755 trash
2.编写safe_rm.sh
#!/bin/bash
# 安全的rm脚本
dir=$(date "+%y_%m_%d")
dir="/trash/$dir"
#echo $dir
if [ ! -d $dir ];then
mkdir -p $dir
fi
is_f=false
args=""
function f_remove() {
for i in ${args}; do
if [ -d "$i" -o -f "$i" ];then
name=`basename $i`
if [ -d "$dir/$name" -o -f "$dir/$name" ];then
new_name="$dir/${name}_$(date '+%T')"
mv $i $new_name && echo "$i deleted,you can see in $new_name"
else
mv $i $dir && echo "$i deleted,you can see in $dir/$i"
fi
else
echo "参数错误"
fi
done
}
function remove() {
for j in ${args}; do
if [ -d "$j" -o -f "$j" ];then
name=`basename $j`
read -p "Remove $name?[y/n]" bool
if [ $bool == "n" ];then
exit
elif [ $bool == "y" ];then
if [ -d "$dir/$name" -o -f "$dir/$name" ];then
new_name="$dir/${name}_$(date '+%T')"
mv $j $new_name && echo "$j deleted,you can see in $new_name"
else
mv $j $dir && echo "$j deleted,you can see in $dir/$j"
fi
fi
else
echo "参数错误"
fi
done
}
while [ "$1" ]; do
case "$1" in
-fr|-rf)
is_f=true
shift
;;
-i)
is_f=false
shift
;;
*)
args="$1 $args"
shift
;;
esac
done
if [[ $is_f = true ]];then
f_remove
else
remove
fi
3.设置别名
将上边的脚本保存到/usr/bin/下面,赋予执行权限,然后设置别名。
# cp safe_rm.sh /usr/bin/safe_rm.sh
# chmod 755 /usr/bin/safe_rm.sh
# vim /etc/bashrc
在bashrc中添加下面的一行
alias rm=/usr/bin/safe_rm.sh
现在使用rm删除的文件都会在/transh中找到。
当你想使用真正的rm命令时你只需要在rm前面加一个\就行
# \rm -rf test.txt