Je reçois une autorisation refusée lorsque j'essaie de déplacer le dossier Music
via mv
bien que le propriétaire du répertoire soit défini sur mon utilisateur et que les autorisations utilisateur soient définies sur 7. Que se passe-t-il?
(Je sais que je pourrais utiliser sudo mais je veux découvrir ce qui ne va pas. Quelque chose sent le poisson ici). Ps: je suis sur Mac OS X El Capitan.
Réponses:
Notez que, lorsque vous êtes dans un dossier
a
, en vous déplaçantb
versc
, les autorisations de dossiera
déterminent ce que vous pouvez faire.Dans ce cas, les autorisations sur
.
seront les plus importantes.Notez que les autorisations sont plus complexes que simplement
rwx
. Votremusic
dossier a un@
à la fin, le.
dossier a un+
à la fin.xattr -h
pour déterminer les autorisations complexes pour le symbole @.getfacl
pour déterminer l'ACL pour le symbole +.la source
man xattr
pourrait être un bon point de départ.ls -la@e
. Très probablement ici, il y avait unedeny delete
ACL qui empêche également le changement de nom.J'utilisais le sous-système Windows pour Linux. J'ai eu le répertoire ouvert dans une autre instance bash. La fermeture m'a permis de déplacer le répertoire.
la source
On dirait qu'il y avait au moins 1 fichier quelque part au fond de ce répertoire qui n'avait pas les bonnes autorisations.
Donc, ce que j'ai fait, c'est:
Maintenant ça marche.
la source
chmod 755
les autorisations spéciales «@» aient été supprimées du dossier Musique?chmod -a 'everyone deny delete' Music
. Cela pourrait être différent à El Capitan.Le problème ici a probablement à voir avec la liste de contrôle d'accès (ACL) du dossier Musique. L'ACL est un système d'autorisation distinct de ceux POSIX réguliers qui sont normalement répertoriés par
ls -l
. Certains autres répertoires dans le dossier Accueil et ailleurs ont également des ACL.Pour voir les ACL dans le répertoire personnel, utilisez:
Vous verrez probablement une règle comme
0: group:everyone deny delete
pour le répertoire Musique. Comme vous l'avez noté, vous pouvez contourner le problème avecsudo
. Si vous ne voulez pas faire cela (ou ne pouvez pas), vous avez d'autres options, étant donné que vous êtes le propriétaire du fichier. Vous pouvez supprimer l'entrée incriminée de l'ACL du répertoire Music, en fonction de son index (0 dans l'exemple que j'ai donné ci-dessus):Ou vous pouvez supprimer toutes les entrées de l'ACL:
Vous pouvez maintenant déplacer le répertoire (sous réserve des autorisations POSIX normales). Si vous souhaitez remettre l'ACL après le déplacement, vous pouvez utiliser:
Et utilisez à
/bin/ls -le
nouveau pour confirmer que l'ACL est comme vous le souhaitez. Consultez les exemples ACLman chmod
pour plus d'informations. En particulier, cette introduction est utile:Commande ACL
Je ne pense pas que la page de manuel explique les règles de commande, mais cette page explique clairement les règles de commande des ACL. En particulier, une
deny
règle explicite sera appliquée avant uneallow
règle explicite . Ainsi, tant que l'group:everyone deny delete
entrée est en place, il n'est pas possible d'accorder à votre utilisateur la permission de supprimer avec uneallow
règle. En effet, l'autorisation est refusée aueveryone
groupe, qui vous inclut, et cette règle sera appliquée en premier.la source
everyone deny delete
entrée ACL sur les répertoires de départ par défaut de macOS est la raison réelle pour laquelle les répertoires ne peuvent être ni déplacés ni supprimés. (Notez également que le système d'exploitation peut les recréer à tout moment.)J'ai eu ce problème lorsqu'un ensemble de programmes s'exécutait dans un répertoire que j'essayais de supprimer. Afin de déplacer le répertoire, j'ai dû d'abord tuer tous les programmes en cours d'exécution à partir de ce répertoire.
Dans les commandes suivantes, soyez très prudent sur la façon dont vous sélectionnez le nom de votre programme. J'ai utilisé les commandes suivantes, pour référence:
La procédure générale est la suivante:
kill -9
avec beaucoup de prudence ) tous les programmes du répertoirela source
grep
et la vérification. Tout ce que vous y mettrez en premiergrep
choisira parmi le pool de tous les programmes en cours d'exécution etkill
avec des privilèges root ...Cela peut également se produire lorsque l'un des fichiers à l'intérieur est protégé en écriture. J'ai eu le cas de bord aujourd'hui quand
access.log
était protégé en écriture pour Apache, qui était déjà arrêté. Je viens de supprimer ce fichier, donc j'ai pu déplacer le répertoire parent.la source