Folgt rm -rf symbolischen Links?

Folgt rm -rf symbolischen Links?

Ich habe ein Verzeichnis wie dieses:

$ ls -l
total 899166
drwxr-xr-x 12 me scicomp       324 Jan 24 13:47 data
-rw-r--r--  1 me scicomp     84188 Jan 24 13:47 lod-thin-1.000000-0.010000-0.030000.rda
drwxr-xr-x  2 me scicomp       808 Jan 24 13:47 log
lrwxrwxrwx  1 me scicomp        17 Jan 25 09:41 msg -> /home/me/msg

Und ich möchte es mithilfe von entfernen rm -r.

Ich habe jedoch Angst, rm -rdass ich dem symbolischen Link folge und alles in diesem Verzeichnis lösche (was sehr schlecht ist).

Ich kann in den Manpages nichts dazu finden. Wie würde das genaue Verhalten aussehen, wenn es rm -rfaus einem Verzeichnis über diesem ausgeführt wird?

Antwort1

Beispiel 1: Löschen eines Verzeichnisses, das einen Softlink zu einem anderen Verzeichnis enthält.

susam@nifty:~/so$ mkdir foo bar
susam@nifty:~/so$ touch bar/a.txt
susam@nifty:~/so$ ln -s /home/susam/so/bar/ foo/baz
susam@nifty:~/so$ tree
.
├── bar
│   └── a.txt
└── foo
    └── baz -> /home/susam/so/bar/

3 directories, 1 file
susam@nifty:~/so$ rm -r foo
susam@nifty:~/so$ tree
.
└── bar
    └── a.txt

1 directory, 1 file
susam@nifty:~/so$

Wir sehen also, dass das Ziel des Softlinks überlebt.

Beispiel 2: Löschen eines Softlinks zu einem Verzeichnis

susam@nifty:~/so$ ln -s /home/susam/so/bar baz
susam@nifty:~/so$ tree
.
├── bar
│   └── a.txt
└── baz -> /home/susam/so/bar

2 directories, 1 file
susam@nifty:~/so$ rm -r baz
susam@nifty:~/so$ tree
.
└── bar
    └── a.txt

1 directory, 1 file
susam@nifty:~/so$

Lediglich der Softlink wird gelöscht. Das Ziel des Softlinks bleibt erhalten.

Beispiel 3: Versuch, das Ziel eines Softlinks zu löschen

susam@nifty:~/so$ ln -s /home/susam/so/bar baz
susam@nifty:~/so$ tree
.
├── bar
│   └── a.txt
└── baz -> /home/susam/so/bar

2 directories, 1 file
susam@nifty:~/so$ rm -r baz/
rm: cannot remove 'baz/': Not a directory
susam@nifty:~/so$ tree
.
├── bar
└── baz -> /home/susam/so/bar

2 directories, 0 files

Die Datei im Ziel des symbolischen Links bleibt nicht erhalten.

Die obigen Experimente wurden auf einem Debian GNU/Linux 9.0-System (Stretch) durchgeführt.

Antwort2

Ihr /home/me/msg-Verzeichnis ist sicher, wenn Sie das Verzeichnis, aus dem Sie ls ausgeführt haben, mit rm -rf löschen. Nur der symbolische Link selbst wird entfernt, nicht das Verzeichnis, auf das er verweist.

Das Einzige, worauf ich achten müsste, wäre, wenn Sie etwas wie „rm -rf msg/“ (mit dem abschließenden Schrägstrich) aufrufen würden. Tun Sie das nicht, weil dadurch das Verzeichnis entfernt wird, auf das msg verweist, und nicht der symbolische Link msg selbst.

Antwort3

rmsollte Dateien und Verzeichnisse entfernen. Wenn die Datei ein symbolischer Link ist, wird der Link entfernt, nicht das Ziel. Ein symbolischer Link wird nicht interpretiert. Wie sollte beispielsweise das Verhalten beim Löschen von „defekten Links“ sein? RM wird mit 0 beendet, nicht mit einem Wert ungleich 0, um einen Fehler anzuzeigen.

verwandte Informationen