¿rm -rf sigue enlaces simbólicos?

¿rm -rf sigue enlaces simbólicos?

Tengo un directorio como este:

$ 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

Y quiero eliminarlo usando rm -r.

Sin embargo, tengo miedo rm -rde seguir el enlace simbólico y eliminar todo lo que hay en ese directorio (lo cual es muy malo).

No puedo encontrar nada sobre esto en las páginas de manual. ¿Cuál sería el comportamiento exacto de ejecutar rm -rfdesde un directorio superior a este?

Respuesta1

Ejemplo 1: Eliminar un directorio que contiene un enlace suave a otro directorio.

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$

Entonces, vemos que el objetivo del enlace suave sobrevive.

Ejemplo 2: eliminar un enlace suave a un directorio

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$

Sólo que se elimina el enlace suave. El objetivo del enlace suave sobrevive.

Ejemplo 3: intentar eliminar el destino de un vínculo suave

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

El archivo en el destino del enlace simbólico no sobrevive.

Los experimentos anteriores se realizaron en un sistema Debian GNU/Linux 9.0 (stretch).

Respuesta2

Su directorio /home/me/msg estará seguro si rm -rf el directorio desde el que ejecutó ls. Sólo se eliminará el enlace simbólico, no el directorio al que apunta.

Lo único de lo que sería cauteloso sería si llamaras algo como "rm -rf msg/" (con la barra diagonal final). No lo hagas porque eliminará el directorio al que apunta el mensaje, en lugar del enlace simbólico del mensaje. sí mismo.

Respuesta3

rmdebería eliminar archivos y directorios. Si el archivo es un enlace simbólico, se elimina el enlace, no el destino. No interpretará un enlace simbólico. Por ejemplo, ¿cuál debería ser el comportamiento al eliminar 'enlaces rotos'? rm sale con 0 y no con un valor distinto de cero para indicar falla

información relacionada