Movendo arquivos não graváveis vs movendo diretórios não graváveis

1

Estou um pouco intrigado com o seguinte comportamento (Linux, Debian 8.3, sistema de arquivos ext2)

test@linux:~$ ls -ld directory/ file
drwxr-xr-x 2 root root 4096 Mar 10 18:51 directory/
-rw-r--r-- 1 root root    8 Mar 10 18:51 file
test@linux:~$ ls -ld target_directory/
drwxr-xr-x 2 test test 4096 Mar 10 18:47 target_directory/
test@linux:~$ mv file target_directory/
test@linux:~$ mv directory/ target_directory/
mv: cannot move ‘directory/’ to ‘target_directory/directory’: Permission denied

E esse é o caso mesmo se directory/ estiver vazio. Engraçado: rmdir directory/ funciona nesse caso.
Porquê? Seria bom saber por que o mv se comporta de maneira tão diferente para um arquivo e um diretório, que ambos não têm permissões de gravação.

Na verdade, na veia de "dar a um homem um peixe ...", não hesite em me apontar para um livro que explica isso e o sistema de permissões corretamente porque (mini-rant) eu constantemente vejo coisas assim (de um conhecido livro do Linux):

$ ls -ld ch3 test
-rw-rw-r-- 1 joe sales 4983 Jan 18 22:13 ch3
drwxr-xr-x 2 joe sales 1024 Jan 24 13:47 test

The first line shows that the ch3 file has read and write permission for the owner and the group. All other users have read permission, which means they can view the file but cannot change its contents or remove it.

    
por wolf-revo-cats 10.03.2016 / 20:23

1 resposta

1

Remover um diretório ou um arquivo tem apenas a ver com permissões no diretório que contém o arquivo / dir a ser removido. Permissões no arquivo / dir em si são irrelevantes. Daí porque você pode remover directory usando rmdir , mesmo que seja de root : você não o mostrou na sua saída, mas você claramente leu, escreveu e executou permissões no diretório que contém directory .

Eu escrevi mais em outro lugar em o que exatamente cada permissão individual em um diretório permite que você realize .

Por que você não pode mover directory para target_directory , não tenho certeza. Não consigo reproduzir isso na minha caixa. Há vários motivos que podem estar causando isso, variando de atributos estendidos sendo definidos em directory , até a possibilidade de que target_directory poderia ser um ponto de montagem para um sistema de arquivos separado daquele que contém directory . As permissões sozinhas não são o motivo, no entanto.

(P.S .: Da próxima vez escolha nomes de exemplo melhores; usando os nomes "diretório" e "arquivo", torne realmente irritante tentar descrever o que está acontecendo.)

    
por 11.03.2016 / 01:03