No hay forma de un sistema totalmente a prueba de balas. Y añadiendo "¿Estás seguro?" indicaciones a las cosas es contraproducente y conduce a "Por supuesto que estoy seguro". reacciones instintivas.
Un truco que aprendí de un libro hace años es hacer primero ls -R blah*
luego, haz rm -fr blah*
si y sólo si la lista que aparece da en el blanco que yo quería.
Es bastante fácil hacer el ls
comando primero, luego ↑ , elimine el ls -R
y reemplazar con rm -fr
.
La pregunta final es:"Si la información fue valiosa para usted, ¿dónde está su copia de seguridad?"
Un DEBUG
trap podría escribirse para cancelar comandos que parecen sospechosos. Se puede agregar lo siguiente, o un código similar, a su ~/.bashrc
:
shopt -s extdebug
checkcommand() {
if [[ $BASH_COMMAND = 'rm -r'*' *' ]]; then
echo "Suppressing rm -r command ending in a wildcard" >&2
return 1
fi
# check for other commands here, if you like
return 0
}
trap checkcommand DEBUG
Ajusta la lógica al gusto.
(En realidad, no espero que este enfoque sea útil, demasiadas formas de estropear un comando destructivamente para encontrarlas probando una por una, pero proporciona una respuesta literal a la pregunta).
¿Puedes entrenarte para usar, digamos, rmrf
en lugar de rm -rf
?
Si es así, esta función bash le brindará la oportunidad de ver lo que realmente sucedería antes de confirmar el comando:
rmrf() { echo rm -rf "[email protected]"; read -p "Proceed (y/N)? "; [ "${REPLY,,}" = y ] && rm -rf "[email protected]"; }
Para hacer que esta función sea permanente, agregue esta línea al ~/.bashrc
archivo en cada computadora que use.
Comparación con el común rm
alias
Es común definir un alias:
alias rm='rm -i'
Esto tiene dos limitaciones:
-
Si llega a depender de este alias, se sorprenderá cuando esté en una máquina o en un entorno que no lo tenga. Por el contrario, intentar ejecutar
rmrf
en una máquina sin esa función devolverá un inofensivocommand not found
. -
Este alias no es de ayuda en su caso porque el
-f
opción que proporciona en la línea de comando anula el-i
opción en el alias.