GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verhindert, dass Benutzer versehentlich Leerzeichen zwischen rm und Wildcard eingeben

Es gibt keine Möglichkeit, ein System vollständig kugelsicher zu machen. Und das Hinzufügen von "Sind Sie sicher?" Aufforderungen zu Dingen ist sowohl kontraproduktiv als auch führt zu "Natürlich bin ich mir sicher." reflexartige Reaktionen.

Ein Trick, den ich in den vergangenen Jahren aus einem Buch aufgeschnappt habe, ist, zuerst ls -R blah* zu machen Führen Sie dann rm -fr blah* aus wenn und nur wenn die Auflistung, die auftauchte, das traf, was ich treffen wollte.

Es ist ganz einfach, ls auszuführen Befehl zuerst, dann , löschen Sie die ls -R und durch rm -fr ersetzen .

Die abschließende Frage lautet:„Wenn die Informationen für Sie wertvoll waren, wo ist Ihr Backup?“


Ein DEBUG trap könnte geschrieben werden, um Befehle abzubrechen, die verdächtig aussehen. Der folgende oder ähnlicher Code kann Ihrem ~/.bashrc hinzugefügt werden :

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

Passen Sie die Logik nach Belieben an.

(Ich erwarte nicht wirklich, dass dieser Ansatz nützlich ist – zu viele Möglichkeiten, einen Befehl destruktiv durcheinander zu bringen, um zu finden, dass sie einen nach dem anderen testen – aber er liefert eine wörtliche Antwort auf die Frage).


Können Sie sich selbst beibringen, beispielsweise rmrf zu verwenden anstelle von rm -rf ?

Wenn ja, bietet Ihnen diese Bash-Funktion die Möglichkeit zu sehen, was tatsächlich passieren würde, bevor Sie den Befehl bestätigen:

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

Um diese Funktion dauerhaft zu machen, fügen Sie diese Zeile zum ~/.bashrc hinzu Datei auf jedem Computer, den Sie verwenden.

Vergleich mit dem üblichen rm Pseudonym

Es ist üblich, einen Alias ​​zu definieren:

alias rm='rm -i'

Dies hat zwei Einschränkungen:

  1. Wenn Sie sich auf diesen Alias ​​verlassen, werden Sie einen Schock erleben, wenn Sie sich auf einer Maschine oder in einer Umgebung befinden, die ihn nicht hat. Im Gegensatz dazu versuchen Sie, rmrf auszuführen auf einer Maschine ohne diese Funktion wird ein harmloses command not found zurückgegeben .

  2. Dieser Alias ​​ist in Ihrem Fall keine Hilfe, da die -f Option, die Sie in der Befehlszeile angeben, überschreibt -i Option im Alias.


Linux
  1. Unterschied zwischen ' und ' in der Befehlszeile (bash)??

  2. So sperren und entsperren Sie Benutzer in Linux

  3. Was ist der Unterschied zwischen root und sudo?

  4. Unterschied zwischen '{}' und {} im Find-Befehl?

  5. Unterschied zwischen cp -r und cp -R (Kopierbefehl)

Verstehen des Unterschieds zwischen dem Befehl sudo und su unter Linux

Linux-Befehl id - Gibt Benutzer-ID- und Gruppen-ID-Informationen aus

Was ist der Unterschied zwischen apt und dem Befehl apt-get?

Bash - Datumsbefehl und Leerzeichen

Unterschied zwischen 'man ls' und 'ls --help'?

Was ist der Unterschied zwischen Benutzerbereich und Kernelbereich?