Eu me permissão negada ao tentar mover a pasta Music
via mv
embora proprietário do diretório está definido para meus usuários e usuários permissões são definidas a 7. O que está acontecendo?
(Eu sei que eu poderia usar o sudo, mas quero descobrir o que há de errado. Algo cheira a peixe aqui). Ps: Estou no Mac OS X El Capitan.
Respostas:
Observe que, quando estiver na pasta
a
, movendob
- se parac
, as permissões da pastaa
determinam o que você pode fazer.Nesse caso, as permissões
.
ativadas serão mais importantes.Observe que as permissões são mais complexas do que simples
rwx
. Suamusic
pasta tem um@
no final, a.
pasta tem um+
no final.xattr -h
para determinar as permissões complexas para o símbolo @.getfacl
para determinar a ACL para o símbolo +.fonte
man xattr
pode ser um bom ponto de partida.ls -la@e
. Provavelmente aqui, houvedeny delete
ACLs que também impedem a renomeação.Eu estava usando o Windows Subsystem para Linux. Eu tive o diretório aberto em uma instância diferente do bash. Fechando, deixe-me mover o diretório.
fonte
Parece que havia pelo menos 1 arquivo em algum lugar profundo naquele diretório que não tinha as permissões corretas.
Então, o que eu fiz foi:
Agora funciona.
fonte
chmod 755
removido as permissões especiais '@' na pasta Música?chmod -a 'everyone deny delete' Music
disso. Pode ser diferente em El Capitan.O problema aqui provavelmente está relacionado à lista de controle de acesso (ACL) da pasta Música. A ACL é um sistema de permissão separado dos POSIX regulares, normalmente listados por
ls -l
. Alguns outros diretórios na pasta Home e em outros lugares também têm ACLs.Para ver as ACLs no diretório inicial, use:
Você provavelmente verá uma regra como
0: group:everyone deny delete
para o diretório Música. Como você observou, você pode substituir o problema comsudo
. Se você não quiser fazer isso (ou não puder), terá outras opções, pois é o proprietário do arquivo. Você pode retirar a entrada incorreta da ACL do diretório Música, com base em seu índice (0 no exemplo que forneci acima):Ou você pode remover todas as entradas na ACL:
Agora você pode mover o diretório (sujeito às permissões POSIX regulares). Se você deseja devolver a ACL após a mudança, use:
E use
/bin/ls -le
novamente para confirmar que a ACL está como você deseja. Confira os exemplos da ACLman chmod
para mais informações. Em particular, esta introdução é útil:Pedido ACL
Não acho que a página de manual explique as regras sobre pedidos, mas esta página explica claramente as regras de pedidos para ACLs. Em particular, uma
deny
regra explícita será aplicada antes de umaallow
regra explícita . Portanto, enquanto agroup:everyone deny delete
entrada estiver em vigor, não é possível conceder ao usuário permissão para excluir com umaallow
regra. Isso ocorre porque a permissão é negada aoeveryone
grupo, que inclui você, e essa regra será aplicada primeiro.fonte
everyone deny delete
entrada ACL nos diretórios pessoais padrão do macOS é a verdadeira razão pela qual os diretórios não podem ser movidos nem excluídos. (Além disso, observe que o sistema operacional pode recriá-los a qualquer momento).Eu tive esse problema quando um conjunto de programas estava sendo executado em um diretório que estava tentando remover. Para mover o diretório, primeiro tive que matar todos os programas em execução nesse diretório.
Nos comandos a seguir, tenha muito cuidado com a maneira como você seleciona o nome do seu programa. Eu usei os seguintes comandos, para referência:
O procedimento geral é:
kill -9
com muita cautela ) de todos os programas do diretóriofonte
grep
e verificá-los. Tudo o que você está colocando-se para que o primeirogrep
vai escolher entre a piscina de todos os programas em execução ekill
com privilégios de root ...Isso também pode acontecer quando um dos arquivos internos está protegido contra gravação. Hoje tive o caso de ponta quando
access.log
estava protegido contra gravação no Apache, que já estava parado. Acabei de remover este arquivo, para poder mover o diretório pai.fonte