Die aktuellen Dateiberechtigungen sehen folgendermaßen aus:
$ ls -l file
-rwxrwxr-x 1 chiranjitd chiranjitd 0 Oct 30 14:52 file
Jetzt versuche ich, Schreibberechtigungen zu erteilen mit chmod
:
$ chmod +x+r+w file
Danach sehen die Dateiberechtigungen immer noch so aus:
$ ls -l file
-rwxrwxr-x 1 chiranjitd chiranjitd 0 Oct 30 14:52 file
Den anderen wird die Schreibberechtigung nicht erteilt. Warum ist das so?
Antwort1
Wenn du rennst chmod +x+r+w file
,alle Bits sind gesetzt, außer denen, die von Ihremumask
. umask
Sie maskieren vermutlich (zumindest) das Schreibbit anderer Benutzer, sodass der +w
Teil für sie letztendlich ignoriert wird.
Bei einem typischen umask
022-Befehl führt jeder chmod
Befehl, der nicht angibt, für wen die Berechtigungen festgelegt werden sollen, dazu, dass alle angegebenen Änderungen an den Schreibbits der Gruppe und anderer ignoriert werden.
Um alle Bits zu setzen und dabei zu ignorieren umask
, müssen Sie angebenWHOSie möchten sie festlegen für:
chmod a+rwx file
oder genauer gesagt,
chmod ugo+rwx file
(oder eine beliebige Teilmenge davon ugo
, je nach Bedarf für den Benutzer, die Gruppe und/oder andere).
Es ist auch möglich, numerische Berechtigungen anstelle von symbolischen Berechtigungen anzugeben; sieheGrundlegendes zu UNIX-Berechtigungen und Dateitypenfür Details.
Beachten Sie, dass das umask
Maskierungsverhalten auch gilt, wennClearingBits, was zu überraschenden Ergebnissen führen kann: chmod -w file
Es werden nur Schreibbits gelöscht, die von gesetzt würden chmod +w file
! Wenn wir mit einem typischen Wert umask
von 022 fortfahren, bedeutet dies, dass chmod -w
die Schreibbits der Gruppe oder anderer nicht berührt werden und gesetzt bleiben, wenn sie bereits gesetzt sind. (GNU coreutils
' chmod
warnt hilfreicherweise davor.)