Was ist der Unterschied zwischen "chmod + x" und "chmod 755"?

61

Wenn es darum geht, eine Datei ausführbar zu machen, was ist der Unterschied zwischen chmod 755und chmod +xund wann würde ich welche verwenden? Ich habe bisher nur benutzt chmod +xund ich habe gerade etwas gelesen und es benutzt chmod 755und ich konnte nicht sagen, ob es besser war, es zu benutzen chmod 755oder nicht chmod +x.

Darth4212
quelle
9
chmod +xSetzt das Flag "Alle ausführbaren Dateien", ohne andere Berechtigungen zu ändern. chmod 755setzt rwxr-xr-x
Ravery
5
@ravery: Hallo zusammen! Sie haben den Kommentarbereich gefunden, der sich der Kritik und der Bitte um Klärung widmet. Um eine Antwort / Lösung bereitzustellen, sollten Sie den Abschnitt "Antwort" unten verwenden (achten Sie auf die große rote Schaltfläche "Antwort veröffentlichen"). Ich hoffe, das hilft!
Leichtigkeit Rennen mit Monica

Antworten:

144

Kurzfassung:

Um sie vergleichen zu können, sollten wir sie aus der gleichen Perspektive betrachten, also:

  • chmod +xist gleich chmod ugo+x(Basierend auf umaskWert)
  • chmod 755 entspricht chmod u=rwx,go=rx

Erläuterung:

Erstens sollten Sie wissen, dass:

  1. + bedeutet, dass diese Berechtigung zu den anderen Berechtigungen hinzugefügt wird, über die die Datei bereits verfügt.
  2. = bedeutet, alle Berechtigungen zu ignorieren, sie genau so einzustellen, wie ich sie zur Verfügung stelle.

    • Daher werden alle "Lese-, Schreib-, Ausführungs-, Sticky-Bit-, Suid- und Guid-Befehle" ignoriert und nur die bereitgestellten gesetzt.
  3. read = 4, write = 2, execute = 1

    • Hier ist die Binärlogik dahinter (falls Sie interessiert sind):

      Symbolic:  r-- -w- --x  |  421
      Binary:    100 010 001  |  -------
      Decimal:    4   2   1   |  000 = 0
                              |  001 = 1
      Symbolic:  rwx r-x r-x  |  010 = 2
      Binary:    111 101 101  |  011 = 3
      Decimal:    7   5   5   |  100 = 4
                 /   /   /    |  101 = 5
      Owner  ---/   /   /     |  110 = 6
      Group  ------/   /      |  111 = 7
      Others ---------/       |  Binary to Octal chart
      

Mit +xsagen Sie, dass Sie +das ausführbare Bit ( x) dem Eigentümer, der Gruppe und anderen hinzufügen sollen .

  • es ist gleich ugo+xoderu+x,g+x,o+x
  • Wenn Sie nicht angeben, welcher der Eigentümer, die Gruppe oder andere Ihr Ziel ist, xwerden alle davon berücksichtigt. Und wie @Rinzwind betonte, basiert es auf dem umaskWert und fügt das hinzu, was es umaskerlaubt. erinnern , wenn Sie das Ziel angeben , wie o+rdann umaskkeine Wirkung mehr hat.
  • Es berührt nicht die anderen Mods (Berechtigungen).
  • Sie können auch verwenden u+x, um dem Eigentümer nur ausführbares Bit hinzuzufügen.

Mit 755spezifizieren Sie:

  • 7 -> u=rwx(4 + 2 + 1 für den Besitzer)
  • 5 -> g=rx(4 + 1 für Gruppe)
  • 5 -> o=rx(4 + 1 für andere)

Also chmod 755ist wie: chmod u=rwx,g=rx,o=rxoder chmod u=rwx,go=rx.

Bildbeschreibung hier eingeben

Ravexina
quelle
15
Ein sehr wichtiger Zusatz: Wenn chmod 755Sie diese Bits verwenden , setzen Sie UND Sie löschen auch alle suid / sgid / sticky-Bits (die möglicherweise vorhanden waren) (zum Beispiel: NIE chmod 755 /tmp). 755 sollte immer als 0755 betrachtet werden, dh die erste Oktalmenge von Bits wird ebenfalls auf 0 gesetzt.
Olivier Dulac,
1
fast perfekt, also eine vorzeitige +1 (yay hast du das Abzeichen von mir:)): Du hast umask vergessen;)
Rinzwind
@OlivierDulac Danke, ich wollte nicht zu viel auf Details eingehen, aber ich werde die Antwort aktualisieren ...
Ravexina
1
Ich glaube, ich habe gerade verstanden, wie Berechtigungen funktionieren, danke!
Fabich
37

chmod +x Fügt die Ausführungsberechtigung für alle Benutzer zu den vorhandenen Berechtigungen hinzu.

chmod 755Legt die 755Berechtigung für eine Datei fest.

755 bedeutet vollständige Berechtigungen für den Eigentümer und Lese- und Ausführungsberechtigungen für andere.

Pilot6
quelle
7

Ein anderer Weg , um es zu betrachten (was ich finde leichter zu verstehen) ist , dass chmod +xdie Berechtigungen setzt relativ , während chmod 755sie sie Einstellung absolut .

Nach chmod 755heißt lief auf eine Datei, die Berechtigungen werden 755 sein, oder rwxr-xr-x.

chmod +xübernimmt nur die vorhandenen Berechtigungen und fügt der Datei Ausführungsberechtigungen hinzu .

Baptiste Candellier
quelle
6

Ich empfehle, die chmod- Manpage zu lesen , um alle Details zu erfahren. Sie sehen nur zwei verschiedene Betriebsmodi, die mit dem Befehl chmod verfügbar sind, um dieselbe Aufgabe zum Ändern von Berechtigungen auszuführen.

Der Oktalmodus verwendet Zahlen und legt die gesamten Berechtigungen der Datei fest. Der Zeichenmodus verwendet die Buchstaben und wird im Allgemeinen verwendet, um nur vorhandene Berechtigungen zu ändern.

chmod 755Legt fest, rwxr-xr-xwährend chmod +xBerechtigungen angepasst werden, sodass dem Eigentümer, der Gruppe und der Welt ausführbare Berechtigungen hinzugefügt werden. Unter der Annahme einer Standarddateiberechtigung rwxr--r--würde diese auf die gleichen Berechtigungen wie 755 von angepasst rwxr-xr-x.

TopHat
quelle
5

Der Unterschied besteht darin, welche Berechtigungen festgelegt werden und in welchem ​​Modus Sie sie festlegen.

Mit setzen chmod +xSie das ausführbare Bit für alle - den Eigentümer, die Eigentümergruppe und die anderen Benutzer. Dies wird als symbolischer Modus bezeichnet. Um das zu zitieren man chmod:

Der Operator + bewirkt, dass die ausgewählten Dateimodusbits zu den vorhandenen Dateimodusbits jeder Datei hinzugefügt werden. - bewirkt, dass sie entfernt werden; und = bewirkt, dass sie hinzugefügt und nicht erwähnte Bits entfernt werden, mit der Ausnahme, dass die nicht erwähnten Benutzer- und Gruppen-ID-Bits eines Verzeichnisses nicht betroffen sind.

Wenn chmod 755Sie Oktalzahlen verwenden, wird deren binäre Darstellung zum Festlegen bestimmter Berechtigungsbits verwendet. Die ersten drei Bits (links) entsprechen den Berechtigungen des Besitzers, die mittleren drei Bits den Gruppenberechtigungen und die letzten drei Bits (ganz rechts) den Berechtigungen aller anderen Benutzer. Die Reihenfolge der Bits ist immer gleich, read,write,executeoder rwx, genau weil die Reihenfolge gleich ist, setzt die einzelne Zahl bei der Konvertierung in die Binärdarstellung die Berechtigungsbits, für die das entsprechende Positionsbit in der Zahl 1 ist, und hebt die Einstellung auf, die 0 ist Speziell:

  • Die Oktalzahl 7ist im Binärformat 111, sodass Sie alle Lese-, Schreib- und Ausführungsbits für den Eigentümer festlegen. rwxgesetzt ist.
  • Die Oktalzahl 5ist 101 in Binär, Sie setzen also Lese- und Ausführungsberechtigungen, deaktivieren jedoch Schreibberechtigungen. Da die Oktalzahl 5 für Gruppen- und andere Benutzer ist, haben diese beiden Kategorien die gleichen Berechtigungen. Damit r-xist gesetzt.

Hier ist die kleine Demo:

    bash-4.3$ touch file1 file2
    bash-4.3$ chmod +x file1
    bash-4.3$ chmod 755 file2
    bash-4.3$ ls -l file1 file2
    -rwxrwxr-x 1 xieerqi xieerqi 0 7月   6 13:54 file1
    -rwxr-xr-x 1 xieerqi xieerqi 0 7月   6 13:54 file2
Sergiy Kolodyazhnyy
quelle
3

Ein wichtiger Unterschied ist, dass chmod + umask-Einschränkungen unterliegt und chmod <octal> nicht.

Betrachten Sie das folgende Beispiel:

$ ls -l foo bar
---------- 1 gowenfawr users 0 Jul  7 16:40 bar
---------- 1 gowenfawr users 0 Jul  7 16:39 foo
$ umask
0022
$ chmod +w bar
$ umask 0002
$ chmod +w foo
$ ls -l foo bar
--w------- 1 gowenfawr users 0 Jul  7 16:40 bar
--w--w---- 1 gowenfawr users 0 Jul  7 16:39 foo
$

Wenn Sie also eine Delta-Änderung an Berechtigungen vornehmen möchten, die Ihren umask-Einstellungen entspricht, verwenden Sie die '+' - Syntax. Wenn Sie es jedoch absolut unabhängig von umask festlegen möchten, verwenden Sie das Format <octal> und stellen Sie fest, dass Sie alle Bits und nicht nur ein Delta angeben müssen.

Gowenfawr
quelle
1

Neben diesen schönen Antworten möchte ich einen kleinen, aber wahrscheinlich wichtigen Unterschied erwähnen. Der Befehl chmod 755 fileist äquivalent zu chmod 0755 file. Wenn wir diesen Befehl für eine Datei ausführen, für die das SETUID-Bit oder das SETGID-Bit gesetzt ist, wird das SETUID / SETGID-Bit entfernt. chmod +x fileLässt das SETUID / SETGID-Bit unberührt. Wir können dies im folgenden Beispiel sehen:

~ $ touch test
~ $ chmod u + s Test
~ $ ll Test
-rwSrw-r-- 1 mook mook 0 Sep 14 00:49 test
~ $ chmod + x test
~ $ ll Test
-rwsrwxr-x 1 mook mook 0 Sep 14 00:49 test
~ $ chmod 755 Test
~ $ ll Test
-rwxr-xr-x 1 mook mook 0 Sep 14 00:49 test
mook765
quelle