GNU/Linux >> Linux Esercitazione >  >> Linux

Impedisci all'utente di digitare spazi accidentali tra rm e caratteri jolly

Non c'è modo per un sistema totalmente a prova di proiettile. E aggiungendo "Sei sicuro?" suggerimenti alle cose è controproducente e porta a "Certo che ne sono sicuro". reazioni istintive.

Un trucco che ho imparato da un libro negli anni passati è fare prima ls -R blah* quindi, esegui rm -fr blah* se e solo se l'elenco che è apparso ha colpito quello che volevo colpire.

È abbastanza facile eseguire il ls comando prima, poi , elimina il ls -R e sostituisci con rm -fr .

L'ultima domanda è:"Se l'informazione è stata preziosa per te, dov'è il tuo backup?"


Un DEBUG trap potrebbe essere scritto per annullare i comandi che sembrano sospetti. Il codice seguente, o un codice simile, può essere aggiunto al tuo ~/.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

Regola la logica a piacere.

(In realtà non mi aspetto che questo approccio sia utile -- troppi modi per rovinare un comando in modo distruttivo per trovarli testati uno per uno -- ma fornisce una risposta letterale alla domanda).


Puoi allenarti a usare, ad esempio, rmrf al posto di rm -rf ?

In tal caso, questa funzione bash ti darà la possibilità di vedere cosa accadrebbe effettivamente prima di confermare il comando:

rmrf() { echo rm -rf "[email protected]"; read -p "Proceed (y/N)? "; [ "${REPLY,,}" = y ] && rm -rf "[email protected]"; }

Per rendere permanente questa funzione, aggiungi questa riga al ~/.bashrc file su ogni computer che utilizzi.

Confronto con il comune rm pseudonimo

È comune definire un alias:

alias rm='rm -i'

Questo ha due limitazioni:

  1. Se arrivi a dipendere da questo alias, subirai uno shock quando ti trovi su una macchina o in un ambiente che non lo possiede. Al contrario, provando a eseguire rmrf su una macchina senza quella funzione restituirà un innocuo command not found .

  2. Questo alias non è di aiuto nel tuo caso perché -f l'opzione fornita sulla riga di comando sovrascrive -i opzione nell'alias.


Linux
  1. Differenza tra "e" sulla riga di comando (bash)??

  2. È consentito lo spazio tra #! E /bin/bash a Shebang?

  3. Linux:differenza tra spazio utente e spazio kernel?

  4. Differenza tra utente Sudo e utente root?

  5. Come bloccare e sbloccare l'utente in Linux

Comprendere la differenza tra il comando sudo e su su Linux

Comando Linux id - Stampa le informazioni sull'ID utente e sull'ID gruppo

Differenza tra i comandi "su" e "su -" in Linux

Qual è la differenza tra il comando apt e apt-get?

Differenza tra '{}' e {} nel comando find?

Qual è la differenza tra spazio utente e spazio kernel?