Ich versuche, Berechtigungen besser zu verstehen, also mache ich einige "Übungen". Hier ist eine Folge von Befehlen, die ich mit ihrer jeweiligen Ausgabe verwende:
$ umask
0022
$ touch file1
$ ls -l file1
-rw-r--r-- 1 user group 0 Mar 16 12:55 file1
$ mkdir dir1
$ ls -ld dir1
drwxr-xr-x 2 user group 4096 Mar 16 12:55 dir1
Dies ist sinnvoll, da wir wissen, dass die Standardberechtigungen für Dateien 666
( rw-rw-rw-
) und die Standardberechtigungen für Verzeichnisse 777
( rwxrwxrwx
) sind. Wenn ich den umask - Wert von diesen Standardberechtigungen subtrahiere ich habe
666-022=644
, rw-r--r--
für die file1
, so dass es im Einklang mit der vorherige Ausgabe;
777-022=755
, rwx-r-x-r-x
, Für die dir1
auch kohärent.
Aber wenn ich die Umask von 022
auf ändere , ist 021
es nicht mehr.
Hier ist das Beispiel für die Datei:
$ umask 0021
$ touch file2
$ ls -l file2
-rw-r--rw- user group 0 Mar 16 13:33 file2
-rw-r--rw-
ist 646
aber es sollte sein 666-021=645
. Es funktioniert also nicht gemäß der vorherigen Berechnung.
Hier ist das Beispiel für das Verzeichnis:
$ touch dir2
$ ls -ld dir2
drwxr-xrw- 2 user group 4096 Mar 16 13:35 dir2
drwxr-xrw-
ist 756
, 777-021=756
. In diesem Fall stimmt das Ergebnis mit der vorherigen Berechnung überein.
Ich habe den Mann gelesen, aber nichts über dieses Verhalten gefunden.
Kann jemand erklären warum?
ERLÄUTERUNG
Wie in den Antworten ausgeführt umask
, wird der Wert von 'nicht mathematisch von den Berechtigungen des Standardverzeichnisses und der Datei abgezogen .
Die effektiv beteiligte Operation ist eine Kombination aus UND (&) und NICHT (!) Booleschen Operatoren. Gegeben:
R = resultierende Berechtigungen
D = Standardberechtigungen
U = aktuelle Umask
R = D &! U.
Zum Beispiel:
666 &! 0053 = 110 110 110 & ! 000 101 011 110 110 110 & 111 010 100 = 110 010 100 = 624 = rw - wr--
777 &! 0022 = 111 111 111 & ! 000 010 010 111 111 111 & 111 101 101 = 111 101 101 = 755 = rwxr - xr-x
TRINKGELD
Eine einfache Möglichkeit, die resultierenden Berechtigungen schnell zu ermitteln (zumindest hat es mir geholfen), besteht darin, zu glauben, dass wir nur 3 Dezimalwerte verwenden können:
r = 100 = 4
w = 010 = 2
x = 001 = 1
Berechtigungen sind eine Kombination dieser 3 Werte.
" "
wird verwendet, um anzuzeigen, dass die relative Berechtigung nicht erteilt wurde.
666 = 4+2+" " 4+2+" " 4+2+" " = rw rw rw
Wenn meine aktuelle Umask lautet, 0053
weiß ich, dass ich Lese- und Ausführungsberechtigungen (4+1)
aus der Gruppe entferne und Schreib- und Ausführungsberechtigungen (2+1)
aus anderen Gruppen erhalte
4+2 " "+2+" " 4+" "+" " = 624 = rw--w-r--
(Gruppe und andere hatten bereits keine Ausführungserlaubnis)