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 -r
de 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 -rf
desde 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
rm
deberí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