chmod: la suppression récursive de l'autorisation “x” borks totalement les autorisations


1

J'ai un dossier avec un contenu (trois fichiers et un dossier) qui ressemble à ceci:

-rwxr-xr-x 1 max max 14504 2011-05-31 16:55 main.css
-rwxr-xr-x 1 max max  2504 2011-05-31 16:55 reset.css
-rwxr-xr-x 1 max max   916 2011-05-31 16:55 scaffold.css
drwxrwxr-x 3 max max  4096 2011-05-31 16:55 ui-lightness

Je veux ajouter un groupe d'écriture à tous et supprimer le statut d'exécutable pour tous les utilisateurs. Je fais les fichiers d'abord:

$ chmod g+w main.css reset.css scaffold.css 
$ chmod a-x main.css reset.css scaffold.css 
$ ls -l
total 28
-rw-rw-r-- 1 max max 14504 2011-05-31 16:55 main.css
-rw-rw-r-- 1 max max  2504 2011-05-31 16:55 reset.css
-rw-rw-r-- 1 max max   916 2011-05-31 16:55 scaffold.css
drwxrwxr-x 3 max max  4096 2011-05-31 16:55 ui-lightness

Jusqu'ici tout va bien. Maintenant, le dossier ui-lightness a déjà écrit en groupe, je veux donc simplement supprimer le statut exe de celui-ci et de tous les fichiers et sous-dossiers qu'il contient.

$ ls -l ui-lightness/
total 40
drwxrwxr-x 2 max max  4096 2011-05-31 16:55 images
-rwxrwxr-x 1 max max 34146 2011-05-31 16:55 jquery-ui-1.8.11.custom.css

$ chmod -R a-x ui-lightness/
chmod: cannot access `ui-lightness/jquery-ui-1.8.11.custom.css': Permission denied
chmod: cannot access `ui-lightness/images': Permission denied

$ ls -l ui-lightness/
ls: cannot access ui-lightness/jquery-ui-1.8.11.custom.css: Permission denied
ls: cannot access ui-lightness/images: Permission denied
total 0
d????????? ? ? ? ?                ? images
-????????? ? ? ? ?                ? jquery-ui-1.8.11.custom.css
$ 

Mon premier instinct est de paniquer un peu. Mais, rajouter le statut x le corrige!

$ chmod -R a+x ui-lightness/

$ ls -l ui-lightness/
total 40
drwxrwxr-x 2 max max  4096 2011-05-31 16:55 images
-rwxrwxr-x 1 max max 34146 2011-05-31 16:55 jquery-ui-1.8.11.custom.css

Quelqu'un peut-il expliquer ce qui se passe ici? Et comment je supprime le statut de l'exécutable sans tout casser? Ceci est dans Ubuntu 9.10 au cas où cela serait pertinent.

à la vôtre, max

Réponses:


8

Le premier paramètre de votre chmod récursif est le répertoire lui-même. Vous avez supprimé le bit x du répertoire, ce qui le rend impossible à rechercher (c'est ce que fait le bit x pour un répertoire). Ensuite, le programme chmod ne peut plus rechercher dans ce répertoire et vous obtenez les erreurs d'autorisations. essayez plutôt ce qui suit.

chmod -R a-x ui-lightness/*

ahhh - les répertoires doivent donc avoir la propriété x alors? Je ne le savais pas. Merci!
— Max Williams

Mais alors, si je le fais chmod -R a-x ui-lightness/*, et il y a un autre sous-répertoire à l'intérieur de cela, alors cette subdir va se faire cogner, non?
— Max Williams

5
Oui. Vous devriez vraiment utiliser find . -type f -exec chmod -x {} \; sélectionner uniquement les fichiers normaux.
— Keith

8

Pour supprimer le statut de l'exécutable uniquement pour les fichiers, utilisez:

$ chmod -R a-x+X ui-lightness/

le +X l'option est définie (voir man chmod ) à:

  • définir l'autorisation d'exécution uniquement si le fichier est un répertoire ou s'il dispose déjà d'une autorisation d'exécution pour un utilisateur

Donc, les minuscules -x Cette option supprime d’abord le statut de l’exécutable de tous les fichiers (et des répertoires, bien sûr), puis de la majuscule. +X L'option la réinitialise uniquement pour les répertoires.

Il a un inconvénient mineur: il définit le statut de l’exécutable sur tout sous-répertoires, même à ceux qui ne l’avaient pas défini avant la chmod invocation. Si ce n'est pas ce que vous voulez, utilisez simplement Keith find Solution.


cela fonctionne parfaitement avec les répertoires imbriqués!
— Hugo Dozois
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.