Was ist ein Großbuchstabe X in posix / chmod?


10

Ich weiß , was ugoa (Eigentümer, Gruppe, andere, alle) oder rwx (Lesen / rechts / execute) oder 4,2,1 oder -, f, d, l, und ich versuchte , in zu lesen , man chmodzu verstehen , was eine Hauptstadt ist Xin , chmodaber es war nicht ein Eintrag dafür. Ich habe dann in diesem Artikel in posix / chmod gelesen , steckte aber in dieser Passage fest:

Setzen Sie das ausführbare Bit nur, wenn das Ziel a) ein Verzeichnis ist. B) bereits mindestens ein ausführbares Bit für einen Benutzer, eine Gruppe oder andere gesetzt hat.

Ich habe auch in diesem Artikel gelesen , der dieses Codebeispiel enthält:

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

Ich verstehe, dass es eine rekursive Erlaubnis testdir/für den Eigentümer (u), die Gruppe (g) und andere (o) gibt, aber ich gebe zu, dass ich die Absicht der Hauptstadt X immer noch vermisse.

Vielleicht könnte eine didaktische Formulierung hier etwas Licht ins Dunkel bringen (der Hauptgrund, warum ich dies hier veröffentliche, ist, dass ich keine SE-Sitzung dazu gefunden habe).

Aktualisieren

Tut mir leid, das habe ich bei dem Mann verpasst. Ich habe mir nicht vorgestellt, dass das X vor der Liste der Argumente erscheinen würde, und ich dachte, die Suche gibt x statt X zurück, mein schlechtes.

Antworten:


19

Die Manpage sagt:

Ausführen / Suchen nur, wenn die Datei ein Verzeichnis ist oder bereits die Ausführungsberechtigung für einen Benutzer hat ( X)

POSIX sagt:

Das Perm- Symbol X soll den Ausführungs- / Suchteil der Dateimodusbits darstellen, wenn die Datei ein Verzeichnis ist oder wenn für die aktuellen (nicht geänderten) Dateimodusbits mindestens eines der Ausführungsbits (S_IXUSR, S_IXGRP oder S_IXOTH) gesetzt ist. Es wird ignoriert, wenn die Datei kein Verzeichnis ist und keines der Ausführungsbits in den aktuellen Dateimodusbits gesetzt ist.

Dies ist ein bedingtes Berechtigungsflag: chmodZeigt an, was gerade verarbeitet wird, und wenn es sich um ein Verzeichnis handelt oder wenn in seinen aktuellen Berechtigungen (Eigentümer, Gruppe oder andere) ein Ausführungsbit gesetzt ist, verhält es sich so, als ob die angeforderte Berechtigung wäre x. sonst ignoriert es es. Die Bedingung wird zu dem Zeitpunkt überprüft, zu dem chmoddie spezifische XAnweisung angewendet wird, sodass Sie Ausführungsbits im selben Lauf löschen können, um a-x,a=rwXnur das ausführbare Bit in Verzeichnissen zu setzen.

Sie können sehen, ob für eine Datei ein Ausführungsbit gesetzt ist, indem Sie sich den Zugriffsteil der statAusgabe oder die erste Spalte von ansehen ls -l. Ausführungsbits werden durch dargestellt x. -rwxr-xr-xist für ausführbare Dateien üblich und gibt an, dass das ausführbare Bit für den Eigentümer, die Gruppe und andere Benutzer gesetzt ist. -rw-r--r--ist für andere Dateien üblich und zeigt an, dass das ausführbare Bit nicht gesetzt ist (aber das Lesebit ist für alle und das Schreibbit für den Eigentümer gesetzt). Weitere Informationen finden Sie unter Grundlegendes zu UNIX-Berechtigungen und ihren Attributen .

Legt daher in Ihrem Beispiel u=rwXdie Eigentümerberechtigungen zum Lesen und Schreiben in allen Fällen fest und führt für Verzeichnisse und ausführbare Dateien Folgendes aus. Ebenso für group ( g=rX) und other ( o=rX) lesen und für Verzeichnisse und ausführbare Dateien ausführen.

Mit diesem Operator soll dem Benutzer ermöglicht werden, chmodeine Vielzahl von Dateien und Verzeichnissen anzugeben und die richtigen Ausführungsberechtigungen zu erhalten (vorausgesetzt, für keine der Dateien wurde ein ungültiges Ausführungsbit gesetzt). Es wird vermieden, zwischen Dateien und Verzeichnissen unterscheiden zu müssen (wie bei herkömmlichen Befehlen find . -type f -exec chmod 644 {} +und find . -type d -exec chmod 755 {} +Befehlen), und es wird versucht, mit ausführbaren Dateien auf vernünftige Weise umzugehen.

(Beachten Sie, dass macOSchmod unterstützt offenbar nur Xfür +Operationen.)


Also habe ich es gesehen und verstehe den Begriff "Bit gesetzt" falsch. ---, ---, ---Ist eine Inode mit Eigentümer: root und Gruppe: root und Berechtigungen eine Indoe ohne "Bit gesetzt"?
Arcticooling

Ja, ---------bedeutet , dass keine Bits gesetzt sind. Vielleicht finden Sie diese Frage nützlich.
Stephen Kitt

Stephen, ich denke, das Hinzufügen einer Definition der Begriffe "Bitsatz ausführen" (ich würde beschreiben als ...,...,...) sowie "ungültiger Bitsatz ausführen" (ich würde beschreiben als ---,---,---) am Anfang der Antwort könnte dazu beitragen, sie noch didaktischer zu gestalten und verringern Sie die Wahrscheinlichkeit, dass jemand das verpasst hat; Hier bin ich ursprünglich hingefallen.
Arcticooling

@Arcticooling, nun, die Berechtigungen sind in Bits codiert, und z. B. chmodsagt die GNU-Manpage für, dass sie "die Dateimodus-Bits jeder gegebenen Datei ändert" usw. Also beziehen sich im Kontext "Bits ausführen" auf " die drei möglichen (ugo) +xBerechtigungen. In meinen Augen klingt "no bit set" allerdings seltsam, da es keinen Kontext erwähnt.
Ilkkachu

@Arcticooling Ich habe einen Absatz hinzugefügt, um Ihr Verständnis hoffentlich zu verdeutlichen: "Bit-Set ausführen", da ...,...,...dies eigentlich nichts bedeutet, und "ungültiges Bit-Set ausführen" (was ist daran ungültig?).
Stephen Kitt

5

Aus dem man chmod:

Die Buchstaben rwxXst wählen Dateimodusbits für die betroffenen Benutzer aus: Lesen (r), Schreiben (w), Ausführen (oder Suchen nach Verzeichnissen) (x), Ausführen / Suchen nur, wenn die Datei ein Verzeichnis ist oder für einige bereits Ausführungsberechtigung hat Benutzer (X), Benutzer- oder Gruppen-ID bei Ausführung (en), eingeschränktem Löschflag oder Sticky-Bit (t) festlegen.

(Hervorhebung von mir).

Das klärt es jedoch nicht sehr. Dieser Artikel enthält zwei Regeln , die klarstellen, was er tut:


Beispielsweise geben wir den folgenden Befehl chmod für ein Verzeichnis aus:

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

Mit dem obigen Großbuchstaben X legt der obige Befehl das ausführbare Attribut gemäß den folgenden zwei Regeln fest:

  1. Wenn die Datei ein Verzeichnis ist, legt sie das ausführbare Attribut für den Eigentümer, die Gruppe und die Welt fest, was bedeutet, dass sie dieses Verzeichnis betreten können.

  2. Wenn es sich bei der Datei um eine reguläre Datei handelt, wird das ausführbare Attribut zu ihren Berechtigungen hinzugefügt, wenn für die Datei bereits ein Ausführungsbit gesetzt ist. Wenn für die Datei kein Ausführungsbit gesetzt ist, wird keines hinzugefügt.

Mit dem Kleinbuchstaben x wäre es unmöglich, dieses Ergebnis mit nur einem Befehl zu erzielen.


Hoffnung , dass die Klärung Verwendung von X .


1

Bitte fummeln Sie diese Antwort nicht auf. Es ist genau das, was ich aus Stephen Kitts Antwort oben verstanden habe, die ich als richtig akzeptiert habe.


1) Ein großes X wie in a=rwXsagt: Alle gefundenen Verzeichnisse erhalten x und alle gefundenen regulären Dateien, die mindestens 1 ausführbares Bit in einer der drei Berechtigungsgruppen haben, erhalten auch x in allen drei Gruppen.

2) Die Kombination von a-x(die sicherstellt, dass alle Dateien das Ausführungsbit verlieren) und eine nachfolgende a=rwXlautet: Holen Sie sich die Lese- und Schreibbits überall und ein Ausführungsbit nur in Verzeichnissen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.