GNU/Linux >> Tutoriels Linux >  >> Linux

Empêcher l'utilisateur de saisir un espace accidentel entre rm et le caractère générique

Il n'y a aucun moyen d'avoir un système totalement à l'épreuve des balles. Et en ajoutant "Êtes-vous sûr ?" les invites aux choses sont à la fois contre-productives et conduisent à "Bien sûr que je suis sûr." réactions instinctives.

Une astuce que j'ai trouvée dans un livre ces dernières années est de faire d'abord ls -R blah* puis, faites rm -fr blah* si et seulement si la liste qui s'affiche correspond à ce que je voulais.

C'est assez facile de faire le ls commande d'abord, puis , supprimez le ls -R et remplacer par rm -fr .

La dernière question est :"Si l'information était précieuse pour vous, où est votre sauvegarde ?"


Un DEBUG trap pourrait être écrit pour annuler les commandes qui semblent suspectes. Le code suivant, ou un code similaire, peut être ajouté à votre ~/.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

Ajustez la logique au goût.

(Je ne m'attends pas vraiment à ce que cette approche soit utile - trop de façons de gâcher une commande de manière destructive pour les trouver testant une par une - mais elle fournit une réponse littérale à la question).


Pouvez-vous vous entraîner à utiliser, disons, rmrf à la place de rm -rf ?

Si tel est le cas, cette fonction bash vous permettra de voir ce qui se passerait réellement avant de confirmer la commande :

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

Pour rendre cette fonction permanente, ajoutez cette ligne au ~/.bashrc fichier sur chaque ordinateur que vous utilisez.

Comparaison avec le rm commun alias

Il est courant de définir un alias :

alias rm='rm -i'

Cela a deux limites :

  1. Si vous finissez par dépendre de cet alias, vous serez choqué lorsque vous serez sur une machine ou dans un environnement qui ne l'a pas. En revanche, essayer d'exécuter rmrf sur une machine sans cette fonction renverra un command not found inoffensif .

  2. Cet alias n'est d'aucune aide dans votre cas car le -f l'option que vous fournissez sur la ligne de commande remplace le -i option dans l'alias.


Linux
  1. L'espace est-il autorisé entre # ! Et /bin/bash à Shebang ?

  2. Linux - Différence entre l'espace utilisateur et l'espace noyau ?

  3. Différence entre l'expansion de la tuyauterie et de la commande ?

  4. Comment verrouiller et déverrouiller l'utilisateur sous Linux

  5. pile du noyau et pile de l'espace utilisateur

Comprendre la différence entre les commandes sudo et su sous Linux

Commande Linux id - Imprimer les informations d'ID utilisateur et d'ID de groupe

Quelle est la différence entre la commande apt et apt-get ?

Différence entre cp -r et cp -R (commande de copie)

Différence entre 'man ls' et 'ls --help' ?

Quelle est la différence entre l'espace utilisateur et l'espace noyau ?