Website-Suche

Warum das Aliasing des rm-Befehls eine schlechte Praxis in Linux ist


Ein Alias in Unix/Linux ist eine Abkürzung, die es Ihnen ermöglicht, benutzerdefinierte Befehle zu erstellen oder das Verhalten vorhandener Befehle zu ändern. Durch die Verwendung des alias-Befehls können Sie einen langen Befehl abkürzen oder standardmäßig Optionen zu Befehlen hinzufügen, wodurch deren Nutzung einfacher oder sicherer wird.

Sie müssen jedoch vorsichtig sein, wenn Sie Aliase verwenden, insbesondere wenn sie das Verhalten mächtiger Befehle wie rm ändern, um zu vermeiden, dass Sie schlechte Gewohnheiten entwickeln oder unerwartete Verhaltensweisen auf verschiedenen Systemen erleben.

In diesem kurzen Tutorial werden wir lernen, warum es eine schlechte Praxis ist, rm auf rm -i alias zu setzen, anhand eines praktischen Beispiels. Wir werden auch die besten Praktiken und sichereren Alternativen kennenlernen, um den rm-Befehl in Linux zu aliasen.

Warum manche Leute rm auf rm -i aliasen

Wenn Sie den Befehl rm auf einem Unix/Linux-System verwenden, werden Dateien sofort und dauerhaft gelöscht. Es ist ein mächtiger Befehl, der vorsichtig verwendet werden muss, um das versehentliche Löschen wichtiger Dateien zu vermeiden.

Manche Leute erstellen ein Alias für rm, wie alias rm="rm -i", um es sicherer zu machen. Dieses Alias ändert den rm-Befehl so, dass immer nach einer Bestätigung gefragt wird, bevor etwas gelöscht wird.

Lass mich dir ein Beispiel zeigen, damit du es besser verstehen kannst.

Beispiel für rm ohne Alias:

$ rm important-file.txt

Dieser Befehl wird important-file.txt sofort löschen, ohne zu fragen, ob Sie sicher sind. Es ist schnell, aber riskant, wenn Sie einen Tippfehler machen oder Ihre Meinung ändern.

Beispiel für rm mit Alias (rm -i):

$ rm important-file.txt

Mit dem Alias fragt dieser Befehl nun: „Reguläre Datei 'important-file.txt' entfernen?“ Sie müssen y (ja) eingeben, um sie zu löschen, oder n (nein), um abzubrechen. Es fühlt sich sicherer an, weil ein Schritt hinzugefügt wird, um Ihre Entscheidung doppelt zu überprüfen.

Warum das Aliasing des rm-Befehls eine schlechte Praxis ist

Das Alias rm='rm -i' ist sehr gefährlich, weil;

Grund 1 - Schlechte Gewohnheiten

Wenn Sie sich daran gewöhnen, dass der Befehl rm immer nach einer Bestätigung fragt, könnten Sie weniger sorgfältig darin werden, genau zu überprüfen, welche Dateien Sie löschen.

Eines Tages, wenn Sie ein Benutzerkonto ohne dieses Alias eingerichtet verwenden, könnte rm Dateien sofort löschen. Bis Sie merken, was passiert, könnte es zu spät sein.

Diese Gewohnheit kann auch auf Systemen ohne dieses Alias gefährlich sein, da rm Dateien sofort löscht, ohne nach einer Bestätigung zu fragen.

Grund 2 - Inkonsistentes Verhalten

Wenn Sie verschiedene Computer oder Systeme (wie einen Bürocomputer, einen Server oder das Laptop eines Freundes) verwenden, könnte der rm-Befehl nicht denselben Alias haben.

Diese Inkonsistenz kann zu Fehlern führen, bei denen Sie erwarten, um Bestätigung gebeten zu werden, es aber nicht werden, und versehentlich etwas Wichtiges löschen.

Grund 3 - Probleme mit Skripting und Automatisierung

Skripte, die rm verwenden, werden ebenfalls von dem Alias betroffen sein. Wenn ein Skript erwartet, Dateien ohne Bestätigung zu löschen, kann der Alias dazu führen, dass es darauf wartet, eine Antwort zu erhalten. Dies kann die Automatisierung unterbrechen und Verwirrung stiften.

Die richtigen Gewohnheiten lernen

Anstatt sich zur Sicherheit auf ein Alias zu verlassen, ist es besser, den sorgfältigen Umgang mit Befehlen zu üben. Hier sind einige Tipps:

  • Überprüfen Sie immer den Befehl und die Dateien, die er betreffen wird, bevor Sie die Eingabetaste drücken.
  • Verwenden Sie den ls-Befehl, um Dateien aufzulisten, und stellen Sie sicher, dass Sie sich im richtigen Verzeichnis befinden.
  • Für kritische Löschungen geben Sie manuell rm -i ein, um nur für diesen Fall eine Bestätigungsabfrage zu erhalten, anstatt dies als Standardverhalten festzulegen.
  • Üben Sie die Verwendung von rm in einer sicheren Umgebung, wie z. B. einem Ordner mit unwichtigen Testdateien, um Vertrauen und gute Gewohnheiten zu entwickeln.

Sichere Alternativen zum Aliasing des rm-Befehls

Anstatt den Standardbefehl rm auf rm -i zu aliasen, können Sie eine der folgenden sichereren Alternativen verwenden:

  1. Verwendung eines benutzerdefinierten Alias mit einem anderen Befehlsnamen
  2. Erstellen Sie ein sichereres Löschskript, das die gelöschten Daten in ein Papierkorbverzeichnis verschiebt
  3. Verwenden Sie das trash-cli-Tool
  4. Verwenden Sie Filesystem-Snapshots

1. Erstellen Sie ein benutzerdefiniertes Alias

Wenn Sie ein benutzerdefiniertes Alias für den rm-Befehl erstellen möchten, verwenden Sie einen völlig anderen Namen, zum Beispiel rmi oder rmcli oder myrm usw.

Zum Beispiel werde ich ein Alias namens rmi erstellen.

$ nano ~/.bashrc

Fügen Sie die folgende Zeile am Ende hinzu:

alias rmi='rm -i'

Speichern Sie die Datei und schließen Sie sie.

Von jetzt an sollten Sie den Befehl rmi zum Löschen von Dateien verwenden, statt des standardmäßigen 'rm'.

$ rmi somefile.txt

Sie werden gefragt, ob Sie die Datei wirklich löschen möchten.

rm: remove regular file 'somefile.txt'?

Drücken Sie 'y', um das Löschen der Datei zu bestätigen, oder drücken Sie 'n', um es zu überspringen.

Das Erstellen eines separaten Alias wie alias rmi='rm -i' ist tatsächlich ein sichererer und effektiverer Ansatz, als das Standardverhalten des rm-Befehls zu überschreiben.

Diese Methode ermöglicht es Ihnen, eine interaktive Löschoption zu haben, ohne das grundlegende Verhalten von rm zu verändern, wodurch das Risiko versehentlicher Löschungen aufgrund übermäßiger Abhängigkeit vom Alias verringert wird.

Vorteile der Verwendung von alias rmi='rm -i':

Hier ist der Grund, warum diese Alternative für eine sicherere Dateilöschung vorteilhaft ist:

  1. Klare Unterscheidung: Es hält eine klare Unterscheidung zwischen dem Standard-rm-Befehl und seiner interaktiven Version aufrecht, wodurch die Wahrscheinlichkeit verringert wird, rm reflexartig zu verwenden und eine Bestätigungsaufforderung zu erwarten.
  2. Reduziertes Risiko bei unbekannten Systemen: Wenn Sie an einem System arbeiten, das Ihre personalisierten Aliase nicht hat, ist es weniger wahrscheinlich, dass Sie versehentlich Dateien löschen, da Sie nicht daran gewöhnt sind, dass rm um Bestätigung fragt.
  3. Flexibilität: Sie können wählen, wann Sie rmi für sichereres Löschen und rm für schnelleres, nicht interaktives Löschen verwenden, je nach Situation und Ihrem Grad an Gewissheit.

2. Erstellen Sie ein sichereres Skript zum Löschen von Dateien

Im vorherigen Beispiel haben wir einen benutzerdefinierten Befehl namens 'rmi' erstellt, der vor dem Löschen von Dateien eine Bestätigung anfordert. Alternativ könnten Sie ein kleines Skript schreiben, das Protokollierung enthält und Dateien in ein Papierkorbverzeichnis verschiebt, um sie später zu überprüfen oder wiederherzustellen.

2.1. Erstellen Sie das Skript

Erstellen Sie eine Textdatei mit dem Namen rmcli mit folgendem Inhalt:

#!/bin/bash
# rmcli: A safer file deletion script

TRASH_DIR="$HOME/.trash"
LOG_FILE="$HOME/.rmcli.log"

# Ensure trash directory exists
mkdir -p "$TRASH_DIR"

# Move files to trash instead of deleting
for file in "$@"; do
    timestamp=$(date +%Y-%m-%d_%H-%M-%S)
    trash_path="$TRASH_DIR/$(basename "$file")_$timestamp"
    mv -v "$file" "$trash_path"
    echo "[$timestamp] $file -> $trash_path" >> "$LOG_FILE"
done

Ändern Sie das Skript nach Belieben, entsprechend Ihren Bedürfnissen, zum Beispiel indem Sie den Speicherort des Papierkorbs oder das Format der Protokolldatei ändern. Speichern Sie die Datei und schließen Sie sie.

2.2. Machen Sie das Skript ausführbar:

Nachdem Sie das Skript gespeichert haben, müssen Sie es ausführbar machen. Dies ermöglicht es Ihnen, es als Befehl auszuführen. Dazu verwenden Sie den chmod-Befehl:

$ chmod +x rmcli

2.3. Verschieben Sie das Skript an einen Ort in Ihrem PATH:

Aus Bequemlichkeit sollten Sie das Skript an einen Ort im PATH Ihres Systems verschieben, damit Sie es von jedem Verzeichnis aus ausführen können. Ein üblicher Ort für persönliche Skripte ist /usr/local/bin:

$ sudo mv rmcli /usr/local/bin

2.4. Verwendung des Skripts:

Nun können Sie den Befehl rmcli genau wie rm verwenden, jedoch mit den Sicherheitsfunktionen Ihres Skripts.

Zum Beispiel:

$ rmcli somefile.txt

Dieser Befehl wird somefile.txt in das Verzeichnis trash verschieben, anstatt es dauerhaft zu löschen.

Beispielausgabe:

renamed 'somefile.txt' -> '/home/ostechnix/.trash/somefile.txt_2024-02-28_16-53-59'

Dateien in den Papierkorb verschieben

Sie können dies überprüfen, indem Sie den Inhalt des Verzeichnisses ~/.trash auflisten.

$ ls ~/.trash
Verzeichnisinhalt des Papierkorbs auflisten

2.5. Dateien wiederherstellen:

Um Dateien wiederherzustellen, navigieren Sie zum Papierkorb-Verzeichnis (~/.trash im Beispiel) und verschieben Sie die Dateien zurück an ihren ursprünglichen Speicherort oder an einen anderen Ort nach Bedarf.

$ cd ~/.trash
$ mv somefile.txt_2024-02-28_16-53-59 ~/somefile.txt

2.6. Protokollierung:

Das Skript protokolliert jede "Löschung" mit einem Zeitstempel. Stellen Sie sicher, dass der im Skript angegebene Speicherort der Protokolldatei existiert oder beschreibbar ist. Sie können dieses Protokoll einsehen, um zu sehen, welche Dateien in den Papierkorb verschoben wurden.

$ cat $HOME/.rmcli.log
[2024-02-28_16-53-59] somefile.txt -> /home/ostechnix/.trash/somefile.txt_2024-02-28_16-53-59

3. Verwendung von trash-cli

Die andere sicherere Alternative zu rm ist die Verwendung eines Kommandozeilen-Mülltonnen-Dienstprogramms wie trash-cli, das Dateien in ein Papierkorb-Verzeichnis verschiebt, anstatt sie dauerhaft zu löschen. Dies ermöglicht die Wiederherstellung von Dateien, falls nötig.

Um zu wissen, wie man Trash-cli installiert und verwendet, überprüfen Sie bitte den folgenden Link:

Trash-cli: Ein Kommandozeilen-Mülleimer für Unix-ähnliche Systeme

4. Verwenden Sie Dateisysteme, die Snapshots unterstützen

Die Verwendung eines Dateisystems, das unbegrenzte Snapshots unterstützt, wie BTRFS (B-tree-Dateisystem) oder ZFS (Zettabyte-Dateisystem), ist eine ausgezeichnete Strategie, um sich gegen versehentliches Löschen oder Überschreiben von Dateien zu schützen.

Snapshots sind im Wesentlichen schreibgeschützte Kopien des Dateisystems zu einem bestimmten Zeitpunkt, aber sie sind sowohl in Bezug auf Speicherplatz als auch Zeit sehr effizient, da sie nur die Unterschiede zur vorherigen Snapshot speichern.

So erstellen und verwalten Sie Btrfs-Snapshots mit Snapper in openSUSE

5. Weitere sicherere Praktiken

  1. Ausführlicher Modus: Verwenden Sie die ausführliche Option (-v) mit rm oder Ihrem Alias, um eine detaillierte Ausgabe dessen zu erhalten, was gelöscht wird. Dies kann helfen, Fehler zu erkennen, bevor sie passieren. Zum Beispiel, alias rmi='rm -i -v'.
  2. Vorgescriptete Sicherheitsmaßnahmen: Für Benutzer, die häufig Dateien in großen Mengen oder über Skripte löschen, sollte in Betracht gezogen werden, ein Wrapper-Skript um rm zu schreiben, das das Löschen von Dateien protokolliert oder eine explizite Bestätigung für Löschungen über einem bestimmten Schwellenwert (z. B. Anzahl der Dateien, Dateigröße) verlangt.
  3. Bildung und Praxis: Bilden Sie sich regelmäßig selbst und andere über die Auswirkungen von Kommandozeilenoperationen weiter und üben Sie sichere Dateiverwaltungsgewohnheiten. Dies umfasst das doppelte Überprüfen des aktuellen Verzeichnisses (pwd), das Auflisten von Dateien (ls oder la) vor dem Löschen und das vorsichtige Verwenden absoluter Pfade.

Fazit

Obwohl das Alias rm zu rm -i als gute Sicherheitsmaßnahme erscheinen mag, kann es zu übermäßigem Vertrauen und Fehlern in Umgebungen führen, in denen das Alias nicht gesetzt ist.

Durch die Übernahme dieser Tipps und bewährten Vorgehensweisen können Sie die mit dem versehentlichen Löschen von Dateien mittels des rm-Befehls auf Unix-/Linux-Systemen verbundenen Risiken erheblich reduzieren.

Verwandte Lektüre:

  • Autotrash – Ein CLI-Tool zum automatischen Löschen alter Dateien aus dem Papierkorb unter Linux
  • Dateien löschen, die auf Linux seit einer bestimmten Zeit nicht mehr aufgerufen wurden
  • Eine einfache Möglichkeit, Dateien unter Linux vor versehentlichem Löschen zu schützen