GNU/Linux >> Tutoriales Linux >  >> Linux

Evite que el usuario escriba un espacio accidental entre rm y comodín

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:

  1. 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 inofensivo command not found .

  2. 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.


Linux
  1. Aprenda la diferencia entre los comandos "su" y "su -" en Linux

  2. Diferencia entre los comandos "su" y "su -" en Linux

  3. [Linux]:Cómo evitar la ejecución accidental del comando “rm -rf”

  4. Linux:¿diferencia entre el espacio del usuario y el espacio del kernel?

  5. ¿Diferencia entre '{}' y {} en el comando de búsqueda?

Comprender la diferencia entre los comandos sudo y su en Linux

Comando id de Linux - Imprimir información de ID de usuario e ID de grupo

¿Cuál es la diferencia entre el comando apt y apt-get?

Diferencia entre cp -r y cp -R (comando de copia)

¿Diferencia entre 'man ls' y 'ls --help'?

¿Cuál es la diferencia entre el espacio de usuario y el espacio del kernel?