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 que rm -r
suive le lien symbolique et supprime tout ce qui se trouve dans ce répertoire (ce qui est très mauvais).
Je ne trouve rien à ce sujet dans les pages de manuel. Quel serait le comportement exact de l'exécution de rm -rf
à partir d'un répertoire situé au-dessus de celui-ci?
Exemple 1: suppression d'un répertoire contenant un lien symbolique 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$
Nous voyons donc que la cible du lien virtuel survit.
Exemple 2: suppression d'un lien symbolique 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 symbolique est supprimé. La cible du lien virtuel survit.
Exemple 3: tentative d'effacement de la cible d'un lien symbolique
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é effectuées sur un système Debian GNU/Linux 9.0 (stretch).
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 finale). Ne le faites pas car cela supprimera le répertoire vers lequel msg pointe, plutôt que le symlink msg lui-même.
rm
devrait supprimer les fichiers et les répertoires. Si le fichier est un lien symbolique, le lien est supprimé et non la cible. Cela n'interprétera pas un lien symbolique. Par exemple, quel devrait être le comportement lors de la suppression de 'liens rompus' - la sortie de la mémoire ferme avec 0 et non différente de zéro pour indiquer un échec