有没有办法在生产服务器中rm
使用单个服务器进行阻止*
?这将有助于防止以下事故:
rm test *
代替
rm test*
答案1
使用 zsh --- 它会自动询问您是否要删除目录中的所有文件。
server:~/dir/processing> rm *
zsh: sure you want to delete all the files in /home/wheel/dja/dir/processing [yn]?
(我认为这是一个默认功能 --- 我找不到任何设置为打开它的配置选项,但我没有写我的 .zshrc)
答案2
这是一个可以从 .bashrc 中获取的 bash 函数,当您使用带有 2 个以上参数的 rm 时会添加警告:
unalias rm 2>/dev/null
real_rm=/bin/rm
rm_opts=""
function confirm {
echo -n "Do you want to continue (Y/N)? "
read v
v=$(echo $v|tr '[a-z]' '[A-Z]')
if [[ "$v" == "Y" ]]; then
return 0
elif [[ "$v" == "N" ]]; then
return 1
else
confirm
fi
}
function rm {
if [ $# -gt 2 ]; then
echo "WARNING: You have passed a list of files and directories that is $# entries long! Is this what you intended?"
echo "Here is the list of files:"
echo "$@"
confirm
if [ $? -eq 0 ]; then
$real_rm $rm_opts $@
fi
else
$real_rm $rm_opts $@
fi
}
答案3
不更换外壳rm
就不行。甚至不看因为*
shell 在将适当的文件名传递给 之前会先将它们组合起来rm
。
答案4
您还可以提供一个特殊的别名,让您担心会犯此错误的用户可以改用它。例如
alias rm-test="rm test*"
再次,这更像是一种解决方法,但一般来说,*nix 假定您知道自己在做什么,并且会按照您说的去做。