it-swarm.com.de

'chmod u + x' gegen 'chmod + x'

Was ist der Unterschied zwischen chmod u+x und nur chmod +x? Ich habe eine Menge Tutorials gesehen, die sagen, dass man u+x verwenden soll, um Skripte ausführbar zu machen. Das Weglassen von u scheint jedoch keine Auswirkung zu haben.

106
schwiz

Die Manpage von chmod behandelt das.

  • u steht für user.
  • g steht für Gruppe.
  • o steht für andere.
  • a steht für alle.

Das bedeutet, dass chmod u+x somefile nur dem Eigentümer dieser Datei Ausführungsberechtigungen gewährt, während chmod +x somefile dem chmod a+x somefile gleicht.

Die Manpage von chmod sagt:

Das Format eines symbolischen Modus ist [ugoa...][[+-=][rwxXstugo...]...][,...]. Es können mehrere symbolische Operationen angegeben werden, die durch Kommas getrennt sind.

Eine Kombination der Buchstaben 'ugoa' steuert, welche Benutzer auf die Datei zugreifen: der Benutzer, dem sie gehört (u), andere Benutzer in der Dateigruppe (g), andere Benutzer, die nicht zur Dateigruppe gehören (o), oder alle Benutzer (a). Wenn keine von diesen angegeben ist, ist der Effekt so, als ob 'a' angegeben wäre, aber die in der umask gesetzten Bits sind nicht betroffen.

144

Wenn Sie nur _+x_ ausführen, wird dies auf alle Flags angewendet: [u] ser, [g] roup, [o] thers.

Geben Sie man chmod ein, um weitere Informationen zu erhalten.

19
matpie

Bedarf

Zunächst empfehle ich Ihnen, diese Fragen und die unten verlinkten Antworten zu lesen:

Es hilft Ihnen, alle notwendigen Teile zu verstehen, die Sie wissen müssen.


Kurze Version

  • _chmod +x_ ist gleich _chmod ugo+x_ (Basierend auf umask Wert)
  • _chmod a+x_ ist gleich _chmod ugo+x_ (ohne Berücksichtigung des Werts umask)

Erläuterung

Das Ergebnis von _chmod a+x_ ist das Setzen des ausführbaren Bits für alle (Eigentümer, Gruppe, Andere), richtig?

Jedoch mit _chmod +x_ ist es ein bisschen knifflig, es heißt umask verwenden und basierend auf diesem Wert den x zu jedem hinzufügen, der erlaubt ist.

Also, wenn das umask meiner Umgebung _0002_ ist:

_$ umask
0002
$ umask -S
u=rwx,g=rwx,o=rx
_

Es wird x zu Benutzer (Eigentümer), Gruppe und anderen hinzugefügt. In dieser Situation (die für die meisten Systeme die Standardsituation ist) ist es genau wie _chmod ugo+x_ oder dasselbe wie _chmod a+x_. oder in einer ausführlicheren Form:

_chmod u+x,g+x,o+x
_

Können Sie die Verbindung zwischen _chmod u+x,g+x,o+x_ und der Ausgabe von _umask -S_ erkennen?

Ändern wir nun das umask der aktuellen Shell in _0003_:

_$ umask 0003
$ umask
0003
$ umask -S
u=rwx,g=rwx,o=r
_

Wie Sie jetzt sehen können, erhalten nur der Eigentümer und die Gruppe das ausführbare Bit und nicht die anderen. Es bedeutet, dass _chmod +x_ jetzt gleich _chmod u+x,g+x_ oder _chmod ug+x_ ist.


Fragestunde!

Was passiert, wenn ich _chmod +w_ für eine Datei ausführe, nachdem ich umask auf _0003_ gesetzt habe?

Wie zuvor betrifft es nur user und group der Datei, da 3 auch die Schreibberechtigung (2) entfernt.


Bonus

Dies hat den gleichen Effekt, wenn Sie ein bisschen wie _chmod -w_ entfernen:

_$ mkdir test
$ stat -c %A test
drwxrwxr-x
_
_$ umask
0002
_
_$ chmod +w test
$ stat -c %A test
drwxrwxr-x
_
_$ chmod a+w test
$ stat -c %A test
drwxrwxrwx
_
_$ chmod -w test
chmod: test/: new permissions are r-xr-xrwx, not r-xr-xr-x
_
_$ stat -c %A test
dr-xr-xrwx
_
14
Ravexina

chmod u+x macht die Datei für Ihren Benutzer ausführbar (es wird sie nur für Ihren Benutzer hinzugefügt, obwohl sie möglicherweise bereits vom Gruppeneigentümer oder "anderen" ausführbar ist).

chmod +x oder chmod a+x ('alles plus ausführbares Bit') macht die Datei für alle ausführbar.

Wenn Sie dies für ein Verzeichnis tun, wird das Verzeichnis stattdessen durchsuchbar. Sie können also den Inhalt eines Verzeichnisses auflisten, für das Sie die Berechtigung + x haben.

7
belacqua