`alias rm =" rm -i "` als schädlich eingestuft?

17

Ich habe vor einiger Zeit gelesen (kann die Referenz nicht finden), dass die Verwendung eines solchen Alias alias rm="rm -i"sehr schlecht war.

Gibt es historische Beweise oder eine vernünftige Erklärung für diese Tatsache?

Ich würde mir vorstellen, dass es eine schlechte Angewohnheit für einen Benutzer ist, sich auf die Bestätigungsaufforderung zu verlassen, um seinen Befehl zu überprüfen. Dies kann zu Katastrophen führen, wenn er dies in einem anderen Profil tut, das nicht über den Alias ​​verfügt.

Dunaril
quelle
Ich glaube, ich habe das von Ihnen erwähnte Thema gefunden.
Daniel Beck
1
@Daniel in der Tat die am besten bewertete Antwort dieses Threads erwähnt diese schlechte Praxis, aber es ist nicht wirklich das zentrale Thema der Frage.
Dunaril

Antworten:

36

Du hast recht.

Es ist schlimm, weil man sich daran gewöhnt. Wenn Sie sich auf einem System befinden, auf dem es nicht vorhanden ist, und Sie rm, wird es sofort gelöscht, und Sie fragen sich, was los ist.

Viele Benutzer sind es gewohnt, SSH in verschiedene Systeme zu integrieren. Daher ist die Verwendung vieler verschiedener Systeme, manchmal ohne eingerichtete personalisierte Benutzerkonten (einschließlich Aliase), eher üblich.

Verwenden Sie stattdessen zB alias rmi='rm -i'und lernen Sie, dieses zu verwenden. Wenn dies nicht auf einem anderen System eingerichtet ist, haben Sie nicht versehentlich Dateien gelöscht und können immer auf die Eingabe des vollständigen Befehls zurückgreifen.

Daniel Beck
quelle
4

Wie @Daniel sagte, ist es an und für sich nicht schädlich, außer Sie zu trainieren, damit zu rechnen, dass es da ist. Tatsächlich ist es die Standardeinstellung auf CentOS-Maschinen (und, wie ich vermute, RHEL, seit ich eine verwendet habe, ist es zu lange her), und es ist ein gewaltiger Schmerz für den Tuchus . Für den Rest meiner Zeit bei diesem Gig habe ich / bin / rm eingegeben, um das Setup "Linux für Leute, die keinen Root-Zugriff haben sollten" zu vermeiden.

Andrew Beals
quelle
3
RHEL hat dies standardmäßig, Sie haben Recht, zumindest die Systeme, die ich verwendet habe.
Daniel Beck
4

Ich denke, die große Gefahr ist, dass sich die Leute auf so etwas verlassen, um einen Glob zu filtern. Stellen Sie sich vor, Sie möchten einige Bilder aus einem Verzeichnis löschen, aber nicht alle:

rm -i pics/*.jpg

Sie könnten das verwenden, um den Glob manuell zu filtern, was völlig vernünftig wäre. Aber wenn Sie es als Alias ​​verwendet hätten rmund zufällig in einer Shell ohne diesen Alias gelandet wären und es ausprobiert hätten ... Sie haben einfach alle Ihre Bilder gelöscht, hoppla!

Persönlich empfinde ich diesen Alias ​​auch als blutdruckschädlich;). Aber das bin nur ich.

Fataler Fehler
quelle
Nettes Beispiel. Natürlich, wenn Sie Gefahr oder Glücksspiel
mögen
2

Zusätzlich zu dem, was Daniel Beck gesagt hat, habe ich versucht, das -fzu umgehen -i, was potenziell gefährlich ist, da es dazu führt, dass rm -fund rm -rfunnötig. Irgendwie verwandt: Eine Möglichkeit, rm -rfProbleme zu vermeiden , besteht darin, eine Datei mit dem Namen "-i" zu erstellen, wie in der Antwort auf die folgende Frage erläutert: Wie vermeide ich versehentliche rm -rf / *? .

Aber auch hier, wenn dieser Alias ​​nicht vorhanden wäre, würde ich -f nicht verwenden, und das Ganze wird kein Problem sein.

Lupincho
quelle
3
Sieht aus wie Sie einen Weg gefunden haben, um diese schlechte Praxis noch schlimmer zu machen :)
Dunaril
0

Dies ist weitaus weniger schädlich, da ich in der Vergangenheit mit Hunderten von Benutzern gearbeitet habe:

rm ()  # must be a function, must require single answer for all targets
{
    ls -FCsd "$@"
    local reply ; echo -n 'remove[ny]? ' ; read reply
    if [ "_$reply" = "_y" ] ; then
        /bin/rm -rf "$@" ; else echo '(cancelled)'
    fi
}
  • Benutzer werden darin geschult, Platzhalter richtig zu verwenden, nicht nur '*', und verlassen sich dann auf die y / n-Eingabeaufforderungen, um Dateien auszuwählen
  • Die Konditionierung, um korrekte Platzhalter zu verwenden, rettete häufig das Desaster, wenn sie rmin einem anderen Kontext verwendet wurden, in dem entweder diese Funktion oder der rm -iAlias fehlten .
  • Ich habe weniger Zeit damit verbracht, Dateien wiederherzustellen, bei denen der Benutzer zu oft 'y' eingegeben hat
  • Benutzer müssen nur einmal antworten und geben ein scharfes positives Feedback für ihre Verwendung
  • Control-c-Interrupts funktionieren und werden als nicht aktiv gemeldet
  • Kein Skript, daher rmbleibt der Real unberührt, und andere Programme bleiben unberührt.

Der Code-Stil ist größtenteils Sh-kompatibel (außer echo .... | tr -d '\012'für Pre-Bash-Shells). Sie können Ihren Code auch bash-spezifischer gestalten. Ich poste nicht, um den Code selbst freizugeben, sondern um die damit verbundene Änderung der Benutzererfahrung mitzuteilen .

Alex North-Keys
quelle
Kamil: Meine Antwort beinhaltet, dass in der rm -iVergangenheit (nach meiner Erfahrung mit Hunderten von Benutzern) das Löschen von Dateien fehlerhaft war und dass die darin enthaltene Funktion Benutzer darin geschult hat, korrekte Platzhalter zu verwenden, wodurch die Fehlerrate gesenkt wurde. Ich habe mich also mit den wichtigsten Problemen befasst rm -i und der Einfachheit halber eine Lösung bereitgestellt, und die bloße Tatsache, dass sich die Aufzählungszeichen unter der Funktion befinden, hindert sie nicht daran, von Belang zu sein.
Alex North-Keys