Seguindo a pergunta de outro usuário, me deparei com uma peculiaridade das permissões do sistema de arquivos Linux que não consigo racionalizar facilmente:
sudo mkdir ~/foo ~/foo/bar
sudo touch ~/baz
mkdir ~/my_dir
chown 700 ~/my_dir
# this is fine
mv ~/baz ~/my_dir
# renaming is fine
mv ~/foo ~/bob
# Moving caused: Permission denied
mv ~/bob ~/my_dir/
Para maior clareza foo
foo/bar
baz
são de propriedade da raiz. my_dir
é de propriedade do meu próprio usuário e, claro, ~
é de propriedade do meu próprio usuário. Posso renomear e mover um arquivo pertencente a outro usuário. Posso renomear um diretório pertencente a outro usuário, mas não posso mover um diretório pertencente a outro usuário.
Isso parece uma restrição muito específica e não entendo contra qual perigo está sendo protegido ou qual mecanismo subjacente significa que só pode funcionar dessa maneira.
Por que os diretórios de outros usuários não podem ser movidos?
Esta é uma das situações documentadas para levar a
EACCES
:Você não pode escrever dentro
bob
de , o que significa que não pode atualizarbob/..
para apontar para seu novo valor,my_dir
.Mover arquivos não envolve escrever neles, mas mover diretórios sim.