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

112

Was ist der Unterschied zwischen chmod u+xund gerecht chmod +x? Ich habe eine Menge Tutorials gesehen, in denen es heißt u+x, Skripte ausführbar zu machen. Das Weglassen von uscheint jedoch keine Wirkung zu haben.

Nathan Schwermann
quelle

Antworten:

149

Die Manpage von chmoddeckt das ab.

  • u steht für user.
  • g steht für gruppe.
  • o steht für andere.
  • ein steht für alle.

Dies bedeutet, dass chmod u+x somefilenur der Eigentümer dieser Datei Ausführungsberechtigungen chmod +x somefileerhält, wohingegen dies dasselbe ist wie chmod a+x somefile.

Die chmod-Manpage 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.

Octavian Damiean
quelle
Ich habe eine kleine Frage, was ist der Unterschied zwischen a + x und lassen Sie uns 111 sagen. Es macht beide ausführbar
TheBro21
Das liegt daran, dass 1 die Oktalnotation ist, die für die Ausführungsberechtigung steht. 111 bedeutet ausführbar für Benutzer, Gruppe und andere.
Octavian Damiean
Große saubere Antwort
m4heshd
Der Umask-Effekt ist wichtig und chmod +x fileunterscheidet sich von chmod a+x file- siehe Ravexinas Antwort für Details.
Cinnam
19

Wenn Sie dies nur tun, +xwird dies auf alle Flags angewendet: [u] ser, [g] roup, [o] thers.

Geben Sie man chmodfür weitere Informationen.

Matpie
quelle
Ich verspreche, dass ich das Handbuch zuerst überprüft habe, es aber nicht gesehen habe, da ich die Beschreibung übersprungen habe und zu den Optionen gesprungen bin. Ich sehe sie jetzt allerdings :-)
Nathan Schwermann
14

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 +xist gleich chmod ugo+x(Basierend auf umaskWert)
  • chmod a+xist gleich chmod ugo+x(ohne Berücksichtigung des umaskWertes)

Erläuterung

Das Ergebnis von chmod a+xist, das ausführbare Bit für alle (Eigentümer, Gruppe, Andere) zu setzen, richtig?

Da chmod +xes jedoch ein bisschen knifflig ist, heißt es " umaskWert verwenden" und basierend auf diesem Wert addieren Sie das xzu jedem, der erlaubt ist.

Also, wenn das umaskmeiner Umgebung ist 0002:

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

Es wird zu xBenutzer (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+xoder genauso chmod a+xoder in einer ausführlicheren Form:

chmod u+x,g+x,o+x

Können Sie die Verbindung zwischen chmod u+x,g+x,o+xund die Ausgabe von erkennen umask -S?

Jetzt ändern wir umaskdie aktuelle Shell auf 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 chmod +xjetzt gleich chmod u+x,g+xoder chmod ug+x.


Fragestunde!

Was passiert , wenn ich laufe chmod +wauf eine Datei nach der Einstellung umaskzu 0003?

Wie zuvor betrifft es nur userund groupder Datei, da 3 auch die Schreibberechtigung (2) entfernt.


Bonus

Dies hat den gleichen Effekt, wenn Sie etwas entfernen wie chmod -w:

$ 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
Ravexina
quelle
7

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 +xoder chmod a+x('all plus executable bit') macht die Datei für alle ausführbar.

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

belacqua
quelle
Entschuldigung, aber dieses Ding hat auch bei mir nicht funktioniert. Ich habe es mit sudo ausprobiert und auf meinem Computer nicht funktioniert. askubuntu.com/questions/178231/how-to-set-permission-in-ubuntu
Anirudha Gupta
@ AnkitGupta Ich bin nicht sicher, was du sagst. Mein Kommentar war nicht dazu gedacht, ein Problem in einer anderen Frage und Antwort zu beheben. Bitten Sie stattdessen um Klärung der Antworten. Bearbeiten Sie Ihre Frage, um zu sagen, was Sie versucht haben. Ausgabe anzeigen.
Belacqua,
1
  • chmod u+x filebedeutet, dass Sie das ausführbare Bit zum Eigentümer der Datei hinzufügen, während Sie das ignorieren umask(Ihr Mod wird gesetzt, keine Frage).

  • chmod +x filebedeutet , dass das ausführbare Bit an den Eigentümer, Gruppe und andere hinzufügen , während die Berücksichtigung umask(Überprüfen Sie zunächst mit umaskdann gelten die Mods, könnte es unterschiedliche Auswirkungen auf umask Wert basierend haben).


Lassen Sie uns zwei Dateien erstellen:

$ touch file1 file2
$ ls -l file1 file2
-rw-rw-rw- 1 ravexina ravexina 0 Aug  5 01:45 file1
-rw-rw-rw- 1 ravexina ravexina 0 Aug  5 01:45 file2

Jetzt stelle ich die umaskauf „111“ ausführbare Bits zu entfernen: umask 111.

$ chmod u+x file1
$ chmod  +x file2
$ ls -l file1 file2
-rwxrw-rw- 1 ravexina ravexina 0 Aug  5 01:47 file1
-rw-rw-rw- 1 ravexina ravexina 0 Aug  5 01:47 file2

Wie Sie sehen können, hat das chmodignorierte umaskund das file1 ausführbare Bit für seinen Besitzer, das zweite hat jedoch nichts getan, da es den Wert von umask berücksichtigt.

Ravexina
quelle