Bewährte Methoden, um den Befehl rm zu aliasen und sicherer zu machen

21

Vor einiger Zeit habe ich fälschlicherweise meinen Home-Ordner gelöscht, weil ich ein rm -rf *falsches Terminal verwendet habe, dessen Arbeitsverzeichnis der Home-Ordner war!

Ich wünschte, ich hätte einen Alias ​​für den rmBefehl, aber das war nicht der Fall.

Jetzt plane ich, ein Skript als Alias ​​für zu erstellen rm.

Haben Sie eine bewährte Methode, die Sie vorschlagen können?

Vielen Dank.

Vincenzo Pii
quelle
7
Nicht, dass ich kein Mitgefühl hätte, aber ich denke nicht, dass rmes ein gefährlicher Befehl ist, der einen Alias ​​für die Sicherheit erfordert. Indem Sie die rund f-Optionen verwenden, sagen Sie der Shell, dass dies gefährlich ist, und ich habe mir genau überlegt, und es ist wirklich das, was ich tun möchte . Wenn Sie diese Optionen nicht verwenden, können Sie damit nicht Ihren gesamten privaten Ordner löschen.
user26512
Enthält diese Frage dieselben Informationen wie stackoverflow.com/questions/373156/… ?
David Harris
1
@grossvogel nix für ungut :)! Das Aliasing dieses Befehls ist jedoch gängige Praxis. Viele Benutzer verwenden die Option -f, um zu vermeiden, dass jeder Löschvorgang bestätigt wird.
23
Beachten Sie, dass Sie sich an diesen Alias rmgewöhnen , wenn Sie einen Alias ​​für verwenden. Dann werden Sie eines Tages auf einem System sein, auf dem der Alias ​​nicht existiert, und Sie werden das Falsche tun, wenn Sie es am wenigsten erwarten. Und es wird wahrscheinlich nicht Ihr System sein.
Stefan Lasiewski
2
@puller Nur auf Systemen wie RHEL, die sich dummerweise rmzu rm -i.
Daniel Beck

Antworten:

30

Wenn Sie eine maßgeschneiderte wollen rm, nennen Sie es nicht , rmaber einen Namen von Ihnen, myrm, deleteoder was auch immer.

Der rm='rm -i'Alias ​​ist ein Horror, da Sie nach einer Weile erwartet werden rm, dass Sie vor dem Entfernen von Dateien dazu aufgefordert werden. Eines Tages wird es natürlich mit einem Konto ausgeführt, für das dieser Alias ​​nicht festgelegt wurde, und bevor Sie verstehen, was los ist, ist es zu spät.

In jedem Fall ist eine gute Möglichkeit, auf Dateiverluste oder -beschädigungen vorbereitet zu sein, das Erstellen von Sicherungen.

Eine schnelle Alternative, die Sie vor versehentlichem Löschen oder Überschreiben von Dateien schützt, ist die Verwendung eines Dateisystems, das unbegrenzte Momentaufnahmen wie ZFS unterstützt. Wenn häufige Snapshots automatisch erstellt werden, können Sie die Dateien in dem Zustand wiederherstellen, in dem sie sich beim letzten Snapshot vor dem Vorfall befanden.  

jlliagre
quelle
3
Ich habe diese Horrorgeschichte persönlich von einem derjenigen gehört, die darunter gelitten haben.
Dan D.
Ich stimme zu, aber die meisten Menschen können nicht auf ein völlig anderes Dateisystem wechseln.
Peon
In der Tat ist das der Grund, warum ich zuerst vorschlage, Backups zu machen, eine Funktion, die kein Dateisystem verbietet.
Juli
12

Wenn Sie speichern Aliase möchten, wollen aber nicht zu Risiko für die Befehle Gewöhnung anders auf Ihrem System arbeiten , als auf andere, können Sie zu deaktivieren , rmwie dies

alias rm='echo "rm is disabled, use remove or trash or /bin/rm instead."'

Dann können Sie Ihren eigenen sicheren Alias ​​erstellen, z

alias remove='/bin/rm -irv'

oder verwenden Sie trashstattdessen.

Dario Seidl
quelle
2
Beachten Sie, dass Sie (zumindest in einigen Versionen) die Aliase in der anderen Reihenfolge definieren müssen. Wenn Sie dies in der angegebenen Reihenfolge tun, wird dies removeals definiert echo "rm is disabled, use trash or /bin/rm instead." -irv. Und möchten Sie nicht, wie es allgemein üblich ist, dass sich die Nachricht von rmauf Ihren sicheren removeBefehl bezieht ?
Scott
Du hast recht, ich werde die Antwort entsprechend aktualisieren.
Dario Seidl
5

Sie könnten es trashstattdessen mit versuchen . Denken Sie daran, es von Zeit zu Zeit zu leeren ...

l0b0
quelle
3

Ohne das Profil jedes Benutzers ändern zu müssen, können Sie die Datei -i im Verzeichnis ablegen.

# touch -- -i
# ll
total 0
-rw-r--r-- 1 root users  0 Jan 26 19:24 files
drwxr-xr-x 2 root users 40 Jan 26 19:24 folder_of_power
-rw-r--r-- 1 root root   0 Jan 26 19:25 -i
-rw-r--r-- 1 root users  0 Jan 26 19:24 important
-rw-r--r-- 1 root users  0 Jan 26 19:24 very
# rm -rf *
rm: remove regular empty file `files'? 
Dunkles Herz
quelle
Funktioniert nicht, wenn der Benutzer * verwendet. * statt nur *. Aber immer noch ein ordentlicher Trick.
Peon
1
afaik rm -rf. noch rm -rf .. kann nicht erfolgreich sein, weil Sie derzeit im Verzeichnis sind.
Peon
@Peon: Ich glaube das meinst du .* *eher als * .*(was ich für üblicher halte ) oder * . *(was du gesagt hast). ……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………… . Aber ich stimme zu, es ist ein ordentlicher Trick.
Scott
1

Ich benutze das folgende Skript.

#!/bin/sh

trash=$HOME/tmp
mv "$@" $trash
nohup find "$trash" -type f -atime +7 -exec /bin/rm '{}' \; 2>&1 &

Wenn Sie eine Datei versehentlich löschen, stellen Sie sie von der wiederher $HOME/tmp.

Das Skript verschiebt gelöschte Dateien in ein tmpVerzeichnis und löscht sie beim nächsten Ausführen des Löschskripts, wenn die Zugriffszeit 7 Tage später liegt (halbautomatische Bereinigung des $HOME/tmpVerzeichnisses).

user580224
quelle
-2

In Ihrem Profil

alias rm="rm -i"

quelle
3
Aliasing rm ist meiner Meinung nach ein ziemlich schlechter Rat und es wird in Pullers Fall sowieso nicht helfen.
Juli
rm -Igibt das Beste aus beiden Welten, @jlliagre.
Tamara Wijsman
@ Tom Wijsman, teilweise in der Tat. Das Ändern des Verhaltens eines kritischen Unix-Standardbefehls ist hier immer noch ein potenzielles Risiko. Wenn Sie möchten, dass es interaktiv ist, geben Sie dem Alias ​​einen anderen Namen.
07.05 Uhr
@jlliagre: Hmm, meinst du damit, dass Skripte diese Änderung abfangen?
Tamara Wijsman
Bitte lesen Sie meine Antwort unter superuser.com/a/382498/19279 , um meine Meinung zu erfahren.
jlliagre
-2

Ein Skript dmit Inhalt mv $* /tmp.

edit: Das ist eine schlechte Idee; siehe unten. Ich habe derzeit alias d='mv -t /tmp'in meinem .profilestatt.

Beefus
quelle
2
Dieser Vorschlag ist gefährlich und könnte a) bereits verworfene Dateien mit demselben Namen überschreiben oder b) die völlig falschen Dateien d "foo bar"löschen ( löscht die Dateien foound bar). Etwas sichereres ist wahrscheinlich #!/bin/bash TRASH="$( mktemp -d -t trashed.XXX )"; echo "Moving to trash $TRASH"; mv -v -- "$@" "$TRASH"( mktempund die mvSyntax hängt von Ihrem System ab, dieses funktioniert unter Linux).
Daniel Beck
2
Danke für die Erklärung. Ich bin in Ordnung mit Problem a), aber Problem b) ist ein großes Problem. Ich habe mein dKommando alias d='mv -t /tmp'in geändert .profile. Ich denke, das ist die einfache Lösung, nach der ich gesucht habe.
Beefus
-2

Dieser Bash-Code fügt die Funktion rmIhrer ~/.bash_profileKonfigurationsdatei hinzu. Wenn Sie danach schreiben rm file, verschieben Sie diese Datei nach/tmp

cat << EOF >> ~/.bash_profile
rm () {
  mv $1 /tmp
}
EOF
Vicente Gonzalez
quelle
1
Was macht dieses Skript / Code? Bitte erläutern Sie, damit weniger technische Benutzer Ihre Antwort verstehen können.
Vylix
2
Während dies die Frage beantworten mag, wäre es eine bessere Antwort, wenn Sie eine Erklärung dafür liefern könnten .
DavidPostill
1
Dies ist eine Antwort auf die Frage, aber es ist eine sehr schlechte. Zwei bessere Versionen dieser Antwort wurden bereits veröffentlicht.
Scott
Dieser Bash-Code fügt die Funktion rmIhrer ~/.bash_profileKonfigurationsdatei hinzu. Wenn Sie nach dem Ausführen dieser Datei schreiben rm file, verschieben Sie diese Datei in das /tmp.
Vicente Gonzalez
Danke fürs Erklären. Könnten Sie bitte Ihre Antwort so bearbeiten , dass sie in den Beitrag selbst aufgenommen wird?
Ben N