qual'è la differenza tra umask e chmod


13

Sono completamente confuso tra umask e chmod. Entrambi vengono utilizzati per concedere le autorizzazioni ai file. Ma dov'è esattamente la differenza e quando usarli.

Ho letto la documentazione online ma entrambi mi sembrano uguali.

umask: umask viene utilizzato per impostare le autorizzazioni di file predefinite. Queste autorizzazioni verranno utilizzate per tutti i file successivi durante la loro creazione. chmod: utilizzato per modificare le autorizzazioni di file e directory.

Secondo la mia comprensione, se ad esempio viene creato il file test.doc.

Di default unix fornisce al file 022 il codice umask.

Ora quando lo cambio in chmod 666 test.doc posso cambiare il livello di autorizzazione di questo file.

Ora cosa succede se uso umask 666 per lo stesso file.

Che differenza succede quando uso chmod 666 e umask 666


2
umaskimposta una variabile di ambiente che imposta automaticamente le autorizzazioni per i file appena creati . chmodcambia le autorizzazioni dei file esistenti .
David Post

1
@DavidPostill. No, umasknon imposta "una variabile di ambiente" Ciò che fa è impostare la maschera di creazione della modalità file dell'ambiente di esecuzione della shell corrente.
fpmurphy

@ fpmurphy1 Grazie per il chiarimento :)
DavidPostill

Risposte:


11

La differenza è che umaskcomporta solo nuovi file . Come hai detto, umask imposta le autorizzazioni predefinite che un file / directory avrà al momento della creazione, ma in seguito umasknon le influenzano più.

chmod, tuttavia, deve essere creato il file prima di essere eseguito.

Pertanto, se si esegue umask, non avrà alcun effetto sui file esistenti.


2
Non puoi usarlo umasksu un file, non ha un fileargomento.
David Post

Bene, riscrivi quella parte.
nn

4

umaskè molto diverso da chmod, in realtà.

  1. Una differenza importante non è stata ancora menzionata: chmodimposta, ma umask cancella (limita) i bit di autorizzazione. Ecco perché si chiama "maschera" (come in "maschera di bit").

  2. Come ha scritto David , umaskè un'impostazione di configurazione (a livello di processo), quindi non viene applicata su alcun file specifico (al contrario di chmod).

  3. Il che ci porta ad un altro punto importante: umasknon si limita ai file. Si applica anche durante la creazione di directory. (Vedi anche ad esempio questa risposta .)

  4. Inoltre, è importante che il chmodcomando stesso non sia influenzato da quello attualmente configurato umask.

Ora, al tuo esempio di cosa farebbe umask 666:

Dirà al processo corrente (ad esempio la shell) che tutti i nuovi oggetti del filesystem devono essere creati con i bit R+ W(4 + 2 = 6) rimossi (da qualsiasi autorizzazione implicitamente o esplicitamente richiesta al momento della creazione). (Quindi, 666 non è un valore molto pratico, poiché consente Xdi impostare solo i bit (di esecuzione), ma per i file illeggibili ...)

Per esempio:

$ 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

0

UMASK = chmod 777 - autorizzazioni umask

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

Qualcosa del genere.


0

L'autorizzazione predefinita per directory / file è umask 022, quindi le directory sono impostate per impostazione predefinita con l'autorizzazione 755 ( drwx-rw-rw) e i file sono impostati con 644 ( -rw-r--r--). Fondamentalmente, sottrai il valore ottale dell'autorizzazione desiderata da 777 per una directory e da 666 per un file. Quindi, dall'esempio sopra:

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

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

Puoi trovare il risultato del umask octalcomando nel sorgente quando usi umask , a seconda dell'ottale e se si tratta di un file o di una directory.

fonte

Tuttavia , se chmod 022 <file>per una directory, dovresti ottenere questo: d----w--w-che non avrebbe molto senso.

Sotto troverai una grande descrizione del valore ottale che puoi recuperare qui da Somnath Muluk con ottime fonti.

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.