87 votes

Est-ce que rm -rf suit les liens symboliques ?

J'ai un répertoire comme celui-ci :

$ 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

Et je veux l'enlever en utilisant rm -r .

Cependant, j'ai peur rm -r va suivre le lien symbolique et supprimer tout ce qui se trouve dans ce répertoire (ce qui est très mauvais).

Je ne trouve rien à ce sujet dans les pages du manuel. Quel serait le comportement exact de l'exécution de rm -rf à partir d'un répertoire situé au-dessus de celui-ci ?

68voto

Jamesz87 Points 1

Exemple 1 : Suppression d'un répertoire contenant un lien logiciel vers un autre répertoire.

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$

Donc, nous voyons que la cible de la liaison douce survit.

Exemple 2 : Suppression d'un lien logiciel vers un répertoire

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$

Seulement, le lien logiciel est supprimé. La cible de la liaison douce survit.

Exemple 3 : Tentative de suppression de la cible d'un soft-link

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

Le fichier dans la cible du lien symbolique ne survit pas.

Les expériences ci-dessus ont été réalisées sur un système Debian GNU/Linux 9.0 (stretch).

22voto

Votre répertoire /home/me/msg sera en sécurité si vous rm -rf le répertoire à partir duquel vous avez exécuté ls. Seul le lien symbolique lui-même sera supprimé, pas le répertoire vers lequel il pointe.

La seule chose dont je me méfierais serait si vous appeliez quelque chose comme "rm -rf msg/" (avec la barre oblique de fin de ligne). Ne faites pas cela car cela supprimera le répertoire vers lequel msg pointe, plutôt que le lien symbolique msg lui-même.

6voto

Charles Points 165

rm devrait supprimer les fichiers et les répertoires. Si le fichier est un lien symbolique, le lien est supprimé, pas la cible. Il n'interprétera pas un lien symbolique. Par exemple, quel devrait être le comportement lors de la suppression de "liens brisés" - rm sort avec 0 et non avec un chiffre différent de zéro pour indiquer l'échec.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X