Eu tenho um diretório assim:
$ 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
E eu quero removê-lo usando rm -r
.
Porém, estou com medo rm -r
de seguir o link simbólico e deletar tudo nesse diretório (o que é muito ruim).
Não consigo encontrar nada sobre isso nas páginas de manual. Qual seria o comportamento exato de executar rm -rf
a partir de um diretório acima deste?
Responder1
Exemplo 1: Excluindo um diretório que contém um link virtual para outro diretório.
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$
Então, vemos que o alvo do soft-link sobrevive.
Exemplo 2: Excluindo um link simbólico para um diretório
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$
Somente o link virtual é excluído. O alvo do soft-link sobrevive.
Exemplo 3: Tentativa de excluir o alvo de um 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
O arquivo no destino do link simbólico não sobrevive.
Os experimentos acima foram feitos em um sistema Debian GNU/Linux 9.0 (stretch).
Responder2
Seu diretório /home/me/msg estará seguro se você rm -rf o diretório a partir do qual executou ls. Apenas o link simbólico será removido, não o diretório para o qual ele aponta.
A única coisa que eu teria cuidado seria se você chamasse algo como "rm -rf msg/" (com a barra final). Não faça isso porque isso removerá o diretório para o qual a msg aponta, em vez do link simbólico da msg em si.
Responder3
rm
deve remover arquivos e diretórios. Se o arquivo for um link simbólico, o link será removido, não o destino. Não interpretará um link simbólico. Por exemplo, qual deve ser o comportamento ao excluir 'links quebrados' - rm sai com 0 e não diferente de zero para indicar falha