Wie werden 6-stellige Dateiberechtigungen angezeigt?

Ich habe eine Anwendung, die sich über die Berechtigungen ihres Verzeichnisses innerhalb von /Applications beschwert. Es möchte auf 040775 eingestellt werden. Ich kann es beheben, indem ich ausführe chmod 040775, aber ich verstehe nicht, was die ersten beiden Ziffern bedeuten. Einfach laufen chmod 775geht nicht, also sind anscheinend diese ersten 2 Ziffern falsch. Was sind diese 2 Ziffern und wie kann ich sie in macOS anzeigen? Ich suche sowas wie ls -l. Ich arbeite mit High Sierra.

Ich glaube nicht, dass 040775es sich chmod 040775um gültige Berechtigungen handelt. MODESIch würde vorschlagen, dass Sie den Abschnitt der man pagefor lesen chmod. Sie möchten wahrscheinlich:chmod 4775
Ich habe die Manpage gelesen und es wurden nur 4 Ziffern beschrieben. Das hat mich auch überrascht, aber warum löst der von mir geschriebene Befehl das Problem?
Ohne zu wissen, was die Berechtigung war, bevor Sie den chmod Befehl ausgeführt haben , kann ich es nicht genau sagen, aber 04of 040775wird ignoriert und 0775setzt die Berechtigungen auf rwxrwxr-xund normale Anwendungspakete und normale ausführbare Dateien werden normalerweise auf gesetzt rwxr-xr-x.
Die ersten beiden Ziffern sind der Dateityp und die restlichen vier sind die Berechtigungsbits.

Antworten (1)

Die kurze Antwort ist stat und fragen Sie nach dem Berechtigungsfeld:

stat -f "%p" file

Diese Anwendung oder Anweisungen oder Speicher sind wahrscheinlich falsch. Auf der Handbuchseite gibt es 4 Ziffern in der oktalen Darstellung für Modi unter macOS:

 Modes may be absolute or symbolic.  An absolute mode is an octal number
 constructed from the sum of one or more of the following values:

       4000    (the set-user-ID-on-execution bit) Executable files with
               this bit set will run with effective uid set to the uid of
               the file owner.  Directories with the set-user-id bit set
               will force all files and sub-directories created in them to
               be owned by the directory owner and not by the uid of the
               creating process, if the underlying file system supports
               this feature: see chmod(2) and the suiddir option to
               mount(8).
       2000    (the set-group-ID-on-execution bit) Executable files with
               this bit set will run with effective gid set to the gid of
               the file owner.
       1000    (the sticky bit) See chmod(2) and sticky(8).
       0400    Allow read by owner.
       0200    Allow write by owner.
       0100    For files, allow execution by owner.  For directories,
               allow the owner to search in the directory.
       0040    Allow read by group members.
       0020    Allow write by group members.
       0010    For files, allow execution by group members.  For directo-
               ries, allow group members to search in the directory.
       0004    Allow read by others.
       0002    Allow write by others.
       0001    For files, allow execution by others.  For directories
               allow others to search in the directory.

 For example, the absolute mode that permits read, write and execute by
 the owner, read and execute by group members, read and execute by others,
 and no set-uid or set-gid behaviour is 755 (400+200+100+040+010+004+001).

Ich habe eine Datei mit dem praktischen Namen 040775 erstellt und Berechtigungen angewendet - Sie können sehen, dass 040 alle Sticky-Dateien löscht (da es auf den 0775-Teil ankommt), setUID- und setGID-Bits, sodass Sie 0775 erhalten, wenn Sie versuchen, 040775 zu setzen.

mac:foo me$ touch 040775
mac:foo me$ stat -f "%p" 040775 
100644
mac:foo me$ chmod 040775 040775
mac:foo me$ stat -f "%p" 040775 
100775
mac:foo me$ chmod 4775 040775 
mac:foo me$ ls -l
-rwsrwxr-x  1 me  wheel  0 May 10 20:30 040775
mac:foo me$ chmod 040775 040775
mac:foo me$ ls -l
-rwxrwxr-x  1 me  wheel  0 May 10 20:30 040775

Ich habe das Obige ein wenig bearbeitet und nicht alles getan, stataber lses sollte Ihnen helfen, in vorhandenen Dateien herumzustöbern und zu testen, ob meine Erfahrung, dass nur die letzten 4 Ziffern als oktale Bitmaske interpretiert werden, um Berechtigungen wie dokumentiert festzulegen in der chmod-Manpage.

Sie sagten: "Sie können sehen, dass 040 alles klebrig löscht ...", und ich glaube, Sie liegen mit dieser Aussage falsch, und tatsächlich ist es das , das 0alles 0775klebrig löscht. 04of 040775wird ignoriert, und ich sage das, denn wenn Sie zuerst eg setzen 4775und dann verwenden 010775, macht es dasselbe wie 040775does und 01of 010775wird genauso ignoriert wie 04of 040775wird ignoriert und es wird einfach wie in beiden Beispielen chmodverarbeitet .0775
Es kann erwähnenswert sein, dass dies Oktalzahlen sind (drei Bits/Ziffer mit einem Wert von 0-7). Wenn ich Dezimalzahlen für Dateiberechtigungen gesehen habe, denke ich, dass das Festplatten-Dienstprogramm dies tut, indem sie in Oktalwerte umgewandelt werden, was meiner Meinung nach angemessene Werte für die Berechtigung ergibt.
@ user3439894 Ich werde den Beitrag klären. Danke. Ich stimme zu und wollte darauf hinweisen, dass die ersten 0 und die ersten 4 verworfen werden. Es ist die 0 vor 775, die das Clearing durchführt. Im Nachhinein wäre die Verwendung von 1 besser als 4, um zu zeigen, dass 1 setzt und 0 klärt.
Es stellt sich heraus, dass die ersten beiden Ziffern der Dateimodus sind, der mit angezeigt werden kann stat -f %p filename. "04" bedeutet, dass es sich um ein Verzeichnis handelt. Vielleicht chmod 0775würde in diesem Fall die gleiche Wirkung haben. Aber chmod scheint sich dessen etwas bewusst zu sein, weil chmod 240775es einen Fehler gibt, während chmod 140775dies nicht der Fall ist. systutorials.com/docs/linux/man/2-stat
@Elliott: 240775generiert einen Fehler, da dieser Wert nicht in einer 16-Bit-Ganzzahl gespeichert werden kann, wo als 140775gespeichert werden kann.