rm rekursion funktioniert nur abwärts richtig?
rm -r x ylöscht xund yund alles in ihnen (wenn sie Verzeichnisse sind), aber nicht ihre Eltern oder irgendetwas außerhalb von ihnen.
sudo rm -R *.QTFSWird ausgeführt : Löscht alle * .QTFS-Dateien im aktuellen Verzeichnis und seinen untergeordneten Dateien, richtig?
Nein. Es werden alle genannten Dateien *.QTFS, alle Dateien, die sich rekursiv in den genannten Verzeichnissen befinden*.QTFS , und diese Verzeichnisse selbst gelöscht . Wenn Sie dieses andere Löschverhalten wünschen, verwenden Sie find -delete.
aktuelles Verzeichnis durch angezeigt , wie ls -lhaauch enthält .und ..Links für den Mangel eines besseren Wortes, also warum Rekursion diese nach oben im Verzeichnisbaum nicht folgen? Gibt es eine künstliche Grenze für rm App oder .und ..sind nicht wirklich Dinge?
Es ist eine künstliche Grenze von rm.
Es ist jedoch nicht wirklich künstlich - es ist die einzige Möglichkeit, wie es jemals funktionieren könnte. Wenn Sie rmden übergeordneten ..Links folgen , werden rm -ralle Dateien auf dem System entfernt, indem Sie allen ..Links bis zum nächsten Schritt folgen /. rmsieht die ..und .-Einträge in jedem Verzeichnis, wenn es den Inhalt auflistet , und ignoriert sie aus diesem Grund explizit.
Sie können das sogar selbst ausprobieren. Run rm -r .und die meisten rmImplementierungen werden sich weigern zu handeln und einen Fehler explizit melden:
$ rm -r .
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘.’
(Diese Nachricht stammt von GNUrm ; andere sind ähnlich). Wenn diese Einträge implizit und nicht als explizite Argumente erkannt werden, werden sie einfach ignoriert und fortgesetzt. Dieses Verhalten wird von POSIX benötigt . In GNU rmund vielen BSDs wird es automatisch von der fts_readFamilie der hierarchietraversalen Funktionen bereitgestellt .
oder .und ..sind keine realen dinge
.und ..sind in der Regel echte Verzeichniseinträge, obwohl dies dateisystemspezifisch ist. Sie werden fast immer so dargestellt, als wären sie echte Eingaben in den gesamten Benutzercode, unabhängig davon. Viele Software-Teile sind (nicht nur rm) Sonderfälle ihres Verhaltens, um Ausreißer oder unerwünschte Rekursionen abzufangen oder zu verhindern.