Was ist der Unterschied zwischen umask und chmod

13

Ich bin völlig verwirrt zwischen umask und chmod. Beide werden verwendet, um Berechtigungen für die Dateien zu erteilen. Aber wo genau ist der Unterschied und wann man sie benutzt.

Ich habe die Online-Dokumentation gelesen, aber beide sehen für mich gleich aus.

umask: Mit umask werden Standarddateiberechtigungen festgelegt. Diese Berechtigungen werden während ihrer Erstellung für alle nachfolgenden Dateien verwendet. chmod: Wird zum Ändern von Datei- und Verzeichnisberechtigungen verwendet.

Nach meinem Verständnis, wenn zum Beispiel die Datei test.doc erstellt wird.

Standardmäßig gibt Unix den Umask-Code der Datei 022 aus.

Wenn ich es jetzt in chmod 666 test.doc ändere, kann ich die Berechtigungsstufe dieser Datei ändern.

Was ist nun, wenn ich umask 666 für dieselbe Datei verwende ?

Was für ein Unterschied passiert es, wenn ich chmod 666 und umask 666 benutze

user548781
quelle
2
umaskLegt eine Umgebungsvariable fest, die automatisch Dateiberechtigungen für neu erstellte Dateien festlegt . chmodÄndert die Berechtigungen vorhandener Dateien .
DavidPostill
1
@ DavidPostill. Nein, umasksetzt nicht "eine Umgebungsvariable". Dadurch wird die Erstellungsmaske für den Dateimodus der aktuellen Shell-Ausführungsumgebung festgelegt.
fpmurphy
@ fpmurphy1 Danke für die Klarstellung :)
DavidPostill

Antworten:

11

Der Unterschied besteht darin, dass umasknur neue Dateien erforderlich sind . Wie Sie angegeben haben, legt umask die Standardberechtigungen fest, die eine Datei / ein Verzeichnis zur Erstellungszeit haben wird, umaskwirkt sich danach jedoch nicht mehr auf sie aus.

chmodDie Datei muss jedoch vor dem Ausführen erstellt werden.

Wenn Sie ausführen umask, hat dies daher keinerlei Auswirkungen auf vorhandene Dateien.

nKn
quelle
2
Sie können keine umaskDatei verwenden, sie hat kein fileArgument.
DavidPostill
Richtig, habe diesen Teil umgeschrieben.
nKn
4

umaskist eigentlich ganz anders als chmod.

  1. Ein wichtiger Unterschied wurde noch nicht erwähnt: chmodsetzt, umask löscht (beschränkt) Berechtigungsbits. Deshalb heißt es "Maske" (wie in "Bitmaske").

  2. Wie David schrieb , umaskhandelt es sich um eine Konfigurationseinstellung (auf Prozessebene), die nicht auf bestimmte Dateien angewendet wird (im Gegensatz zu chmod).

  3. Das bringt uns zu einem weiteren wichtigen Punkt: umaskist nicht auf Dateien beschränkt. Es wird auch beim Erstellen von Verzeichnissen angewendet. (Siehe auch zB diese Antwort .)

  4. Wichtig ist auch, dass der chmodBefehl selbst nicht von der aktuell konfigurierten beeinflusst wird umask.

Nun zu Ihrem Beispiel, was umask 666tun würde :

Dem aktuellen Prozess (z. B. Ihrer Shell) wird mitgeteilt, dass alle neuen Dateisystemobjekte mit den R+ WBits (4 + 2 = 6) erstellt werden sollen (aus den Berechtigungen, die beim Erstellen implizit oder explizit angefordert wurden). (666 ist also kein sehr praktischer Wert, da nur die X(Ausführungs-) Bits gesetzt werden können, aber nicht lesbare Dateien ...)

Z.B:

$ touch foo; ls -la foo
-rw-r--r-- ... foo   <-- default permissions

$ umask 666
$ touch bar; ls -la bar
---------- ... bar   <-- perms. after the new umask (restriction) is set
$ mkdir foodir; ls -la | grep foodir
d--x--x--x ... dir   <-- not very practical for dirs, either

$ chmod 777 bar; ls -la bar
-rwxrwxrwx .... bar* <-- chmod happily ignores the current umask

$ umask 022
$ touch bong; ls -la bong
-rw-r--r-- ... bong  <-- (so, it seems this was the default umask)

$ chmod 666 bong; ls -la bong
-rw-rw-rw- ... bong  <-- no surprise of any kind here
Gr.
quelle
0

UMASK = chmod 777 - Umask-Berechtigungen

umask 022 => 777 - 022 => chmod 755
umask 077 => 777 - 077 => chmod 700
umask 002 => 777 - 002 => chmod 775
umask 007 => 777 - 007 => chmod 770
umask 027 => 777 - 027 => chmod 750
umask 177 => 777 - 177 => chmod 600

So ähnlich.

PanPikuś
quelle
0

Die Standardberechtigung für Verzeichnisse / Dateien lautet umask 022, Verzeichnisse werden standardmäßig mit der Berechtigung 755 ( drwx-rw-rw) und Dateien mit 644 ( -rw-r--r--) festgelegt. Grundsätzlich subtrahieren Sie den Oktalwert der gewünschten Berechtigung von 777 für ein Verzeichnis und von 666 für eine Datei. Also aus dem obigen Beispiel:

(directory) umask 022 => 777 - 022 = 755

(file) umask 022 => 666 - 022 = 644

Sie können das Ergebnis des umask octalBefehls in der Quelle finden, wenn Sie umask verwenden , abhängig vom Oktal und davon, ob es sich um eine Datei oder ein Verzeichnis handelt.

Quelle

Allerdings , wenn Sie chmod 022 <file>für ein Verzeichnis, sollten Sie diese: d----w--w-was nicht viel Sinn machen würde.

Darunter finden Sie eine großartige Beschreibung des Oktalwerts, die Sie hier von Somnath Muluk mit großartigen Quellen abrufen können .

N   Description                      ls   binary    
0   No permissions at all            ---  000
1   Only execute                     --x  001
2   Only write                       -w-  010
3   Write and execute                -wx  011
4   Only read                        r--  100
5   Read and execute                 r-x  101
6   Read and write                   rw-  110
7   Read, write, and execute         rwx  111
R4zZ
quelle