La page de manuel indique:
exécuter / rechercher uniquement si le fichier est un répertoire ou dispose déjà de l'autorisation d'exécution pour un utilisateur ( X
)
POSIX dit:
Le symbole permanent X doit représenter la partie exécution / recherche des bits en mode fichier si le fichier est un répertoire ou si les bits en mode fichier en cours (non modifiés) ont au moins un des bits d'exécution (S_IXUSR, S_IXGRP ou S_IXOTH). Il doit être ignoré si le fichier n'est pas un répertoire et qu'aucun des bits d'exécution n'est défini dans les bits du mode fichier actuel.
Il s'agit d'un indicateur d'autorisation conditionnelle: chmod
regarde tout ce qu'il traite actuellement, et s'il s'agit d'un répertoire, ou s'il a un bit d'exécution défini dans ses autorisations actuelles (propriétaire, groupe ou autre), il agit comme si l'autorisation demandée était x
, sinon il l'ignore. La condition est vérifiée au moment de l' chmod
application de l' X
instruction spécifique , vous pouvez donc effacer les bits d'exécution dans la même exécution avec a-x,a=rwX
pour définir uniquement le bit exécutable sur les répertoires.
Vous pouvez voir si un fichier a un bit d'exécution défini en regardant la partie «accès» de stat
la sortie de, ou la première colonne de ls -l
. Les bits d'exécution sont représentés par x
. -rwxr-xr-x
est commun aux exécutables et indique que le bit exécutable est défini pour le propriétaire, le groupe et les autres utilisateurs; -rw-r--r--
est commun aux autres fichiers et indique que le bit exécutable n'est pas défini (mais le bit de lecture est défini pour tout le monde et le bit d'écriture pour le propriétaire). Voir Comprendre les autorisations UNIX et leurs attributs qui contient beaucoup plus de détails.
Ainsi, dans votre exemple, u=rwX
définit les autorisations du propriétaire pour lire et écrire dans tous les cas, et pour les répertoires et les fichiers exécutables, exécutez; de même pour group ( g=rX
) et other ( o=rX
), lisez et exécutez pour les répertoires et les fichiers exécutables.
Le but de cet opérateur est de permettre à l'utilisateur de fournir chmod
une variété de fichiers et de répertoires et d'obtenir les autorisations d'exécution correctes (en supposant qu'aucun des fichiers ne contienne un ensemble de bits d'exécution invalide). Il évite d'avoir à faire la distinction entre les fichiers et les répertoires (comme dans les commandes traditionnelles find . -type f -exec chmod 644 {} +
et find . -type d -exec chmod 755 {} +
), et tente de traiter les exécutables de manière sensée.
(Notez que macOSchmod
ne prend apparemment en charge X
que les +
opérations.)
---, ---, ---
un indoe sans "bit set"?---------
signifie qu'aucun bit n'est défini. Vous pourriez trouver cette question utile....,...,...
) ainsi que "invalide exécuter le jeu de bits" (je décrirais comme---,---,---
), au début de la réponse, pourrait aider à le rendre encore plus didactique et réduire les chances que quelqu'un rate ça; C'est là que je suis tombé à l'origine avec ça.chmod
indique qu'elle "modifie les bits de mode de fichier de chaque fichier donné", etc. les trois+x
autorisations (ugo) possibles. À mes yeux, "aucun bit défini" ne semble étrange, car il ne mentionne aucun contexte....,...,...
cela ne veut rien dire, ni "invalide exécuter le jeu de bits" (qu'est-ce qui n'est pas valable à ce sujet?).Du
man chmod
:(c'est moi qui souligne).
Mais cela ne le clarifie pas beaucoup. Cet article contient les deux règles qui clarifient ce qu'il fait:
Par exemple, nous émettons la commande chmod suivante sur un répertoire:
À l'aide du X majuscule, la commande ci-dessus définit l'attribut exécutable selon les deux règles suivantes:
Si le fichier est un répertoire, il définit l'attribut exécutable pour le propriétaire, le groupe et le monde, ce qui signifie qu'ils peuvent entrer dans ce répertoire.
Si le fichier est un fichier normal, il ajoutera l'attribut exécutable à ses autorisations, si le fichier a déjà un bit d'exécution défini. Si le fichier n'a pas de bit d'exécution défini, aucun ne sera ajouté.
En utilisant le x minuscule, il serait impossible d'obtenir ce résultat avec une seule commande.
L' espoir qui clarifient l' utilisation de X .
la source
S'il vous plaît, ne répondez pas à cette question C'est exactement ce que j'ai compris de la réponse de Stephen Kitt ci-dessus, que j'ai acceptée comme correcte.
1) Un X majuscule comme le
a=rwX
dit: Tous les répertoires trouvés obtiendront x et tous les fichiers normaux trouvés qui ont au moins 1 bit exécutable dans l'un des trois groupes d'autorisations obtiendront également x dans les trois groupes.2) Le combo de
a-x
(qui garantit que tous les fichiers perdent le bit d'exécution), et un suivanta=rwX
dit: Obtenez les bits de lecture et d'écriture partout, et un bit d'exécution uniquement sur les répertoires.la source