Qu'est-ce qu'un X majuscule en posix / chmod?

11

Je sais ce qui est ugoa (propriétaire, groupe, d' autres, tous) ou rwx (lecture / droit / exécuter) ou 4,2,1 ou -, f, d, l, et j'ai essayé de lire man chmodpour comprendre ce qui est capital Xdans , chmodmais il n'y avait pas une entrée pour elle. J'ai ensuite lu dans cet article en posix / chmod mais j'étais coincé dans ce passage:

Définissez le bit exécutable uniquement si la cible a) est un répertoire b) a déjà au moins un bit exécutable défini pour l'un des utilisateurs, groupes ou autres.

J'ai également lu dans cet article qui donne cet exemple de code:

chmod -R u=rwX,g=rX,o=rX testdir/

Je comprends qu'il existe une autorisation récursive sur le testdir/, en ce qui concerne le propriétaire (u), le groupe (g) et les autres (o) mais j'avoue que je manque toujours l'intention du X majuscule.

Peut-être qu'une formulation didactique ici pourrait apporter un éclairage sur ce point (la principale raison pour laquelle je publie ceci ici est parce que je n'ai pas trouvé de session SE à ce sujet).

Mise à jour

Désolé pour tout, j'ai manqué ça chez l'homme. Je n'imaginais pas que le X apparaîtrait avant la liste des arguments et je pensais que la recherche renvoie x à la place X, mon mauvais.

Arcticooling
la source

Réponses:

20

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: chmodregarde 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' chmodapplication de l' Xinstruction spécifique , vous pouvez donc effacer les bits d'exécution dans la même exécution avec a-x,a=rwXpour 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 statla sortie de, ou la première colonne de ls -l. Les bits d'exécution sont représentés par x. -rwxr-xr-xest 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=rwXdé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 chmodune 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 Xque les +opérations.)

Stephen Kitt
la source
Je l'ai donc vu et j'ai une mauvaise compréhension du terme "ensemble de bits". est un inode avec le propriétaire: root et group: root et les permissions ---, ---, ---un indoe sans "bit set"?
Arcticooling
Oui, ---------signifie qu'aucun bit n'est défini. Vous pourriez trouver cette question utile.
Stephen Kitt
Stephen, je pense que l'ajout d'une définition des termes "exécuter le jeu de bits" (je décrirais comme ...,...,...) 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.
Arcticooling
@Arcticooling, eh bien, les autorisations sont codées en bits, et par exemple, la page de manuel GNU chmodindique qu'elle "modifie les bits de mode de fichier de chaque fichier donné", etc. les trois +xautorisations (ugo) possibles. À mes yeux, "aucun bit défini" ne semble étrange, car il ne mentionne aucun contexte.
ilkkachu
@Arcticooling J'ai ajouté un paragraphe, ne serait-ce que pour clarifier votre compréhension - "exécuter le jeu de bits" car ...,...,...cela ne veut rien dire, ni "invalide exécuter le jeu de bits" (qu'est-ce qui n'est pas valable à ce sujet?).
Stephen Kitt
5

Du man chmod:

Les lettres rwxXst sélectionnent les bits du mode fichier pour les utilisateurs concernés: lecture (r), écriture (w), exécution (ou recherche de répertoires) (x), exécution / recherche uniquement si le fichier est un répertoire ou a déjà l'autorisation d'exécution pour certains utilisateur (X), définissez l'ID utilisateur ou de groupe sur les exécutions, l'indicateur de suppression restreint ou le bit collant (t).

(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:

# chmod -R u=rwX,g=rX,o=rX testdir/`  

À l'aide du X majuscule, la commande ci-dessus définit l'attribut exécutable selon les deux règles suivantes:

  1. 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.

  2. 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 .

Isaac
la source
1

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=rwXdit: 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 suivant a=rwXdit: Obtenez les bits de lecture et d'écriture partout, et un bit d'exécution uniquement sur les répertoires.

user9303970
la source