Inconsistência no comportamento de 'rm' quando um volume montado está envolvido?

0

Se eu executar a seguinte sequência de comandos:

mkdir dir
ln -s dir link
rm -r link/

Eu recebo esta saída:

rm: cannot remove 'link': Not a directory

Recebo o aviso porque poderia simplesmente ter emitido rm -r link ou, melhor ainda, rm link . Independentemente disso, esse comando fez o trabalho (ou seja, removeu o arquivo chamado " link ").

As coisas são um pouco diferentes ao fazer uma coisa dessas em um volume montado, em que " dir " é substituído por algum tipo " / media / my_movies ". Nesse caso, todo o volume será apagado, não apenas o link simbólico como no exemplo anterior.

Por que é assim? Isso é algum bug em rm , ou isso é esperado? Por que a inconsistência?

UPDATE : Talvez eu estivesse tonto quando estava experimentando isso porque, quando tento agora, " dir " não está sendo excluído enquanto seu conteúdo está e, em ambos os casos (diretório montado e local). Estou usando o Linux 2.6.32 , e acho que estava usando 2.6.37 .

    
por Tshepang 29.01.2011 / 00:37

1 resposta

3

No meu sistema (Debian; Linux 2.6; rm --version reporta GNU coreutils 8.5), se dir é um ponto de montagem, o seguinte remove arquivo , mas não dir ou link , e me dá o mesmo erro que você viu:

# mkdir dir && touch dir/file && ln -s dir link
# rm -r link/
rm: cannot remove 'link': Not a directory
# ls
dir  link
# ls -l dir
total 0

# mount .../scratch_filesystem dir
# touch dir/file
# rm -r link/
rm: cannot remove 'link': Not a directory
# ls
dir  link
# ls -l dir
total 0

Se eu estou seguindo você corretamente, seu comando rm -r link/ não remove o arquivo , a menos que dir / seja um ponto de montagem. Se for esse o caso, acho que você está vendo um bug em rm . Não há uma boa razão para um ponto de montagem mudar seu comportamento assim.

Seria interessante saber qual versão de rm você está usando.

    
por 29.01.2011 / 08:42