Eine Frage zur empfohlenen Verwendung von rm und--
Nehmen wir an, ich habe zwei Dateien erstellt -i
und xx
. Wenn ich versuche, sie zu entfernen mit
$ rm *
Ich bekomme:
rm: remove regular file `xx'? n
Und wie inWie entferne ich eine Datei in Linux, deren Name NUR aus einem Bindestrich besteht, wie beispielsweise "-"?und andere, dies kann folgendermaßen gelöst werden:
$ rm -- *
Offensichtlich könnten die Probleme durch Beschimpfungen -rf
oder ähnliches möglicherweise noch viel schlimmer sein.
Meine Frage ist also:
Sollten wir systematisch
--
In-rm
Befehle vor allem verwenden, was erweiterbar ist, um unangenehme Überraschungen oder Exploits zu vermeiden?
Der Grund, warum ich das frage, ist, dass ich diesen Trick vor einiger Zeit gelernt rm
und dann vergessen habe, bis ein Teamkollege ihn vor Kurzem wieder erwähnt hat. Ich habe jedoch noch nie Empfehlungen in dieser Hinsicht gesehen und da es so riskant ist, frage ich mich, ob wir es häufiger verwenden sollten. Sollte die Verwendung --
bei jeder Verwendung (und wahrscheinlich auch bei anderen Befehlen) eine Art Skript- und Konsolenmuster sein rm
?
Antwort1
In einer perfekten Welt sollten wir wohl systematisch verwenden --
. Aber wir haben alle gelernt, den rm
Befehl zu verwenden, ohne systematisch einzugeben --
, und das Eingeben kostet drei zusätzliche Tastenanschläge, also kann ich mir nicht vorstellen, dass das passiert. Außerdem --
hat die Konvention zum Beenden von Optionen nicht immer existiert (weshalb viele Leute nichts davon gelernt haben, als sie gelernt haben, wie man verwendet rm
).
Wenn Sie rm
(und andere Befehle) in Shell-Skripten verwenden, sollten Sie auf jeden Fall immer defensiv programmieren. Zum Beispiel:
rm "$1" # Remove the file named in the first command line argument
ist unsicher und sollte es rm -- "$1"
auch sein.
rm "/var/spool/foo/$thatfile"
ist sicher, da der Inhalt $thatfile
nicht zu rm
einer Fehlinterpretation der Argumente führen kann.
In Ihrem konkreten Beispiel ( rm *
) würde ich wahrscheinlich normalerweise rm ./*
als sichere Problemumgehung verwenden.