2012-07-02 10 views
11

Nella maggior parte dei casi, le autorizzazioni sono definite come un numero ottale nel formato di 0777. Ma il comando umask di UNIX (quindi os.umask()) necessita di 0o000 per produrre i bit di autorizzazione di 0o777 e 0o022 equivale a 0o755 nella mia comprensione.Perché l'argomento di os.umask() è invertito? (umask 0o000 rende chmod 0o777)

Ho sentito che l'UNIX umask è invertito per qualche motivo e non capisco il motivo dietro esso. Qualcuno potrebbe spiegare questa inconsistenza?

+2

È una "maschera" - questo è ciò che significa la parola in questo contesto; qualcosa che lascia passare solo i bit non impostati (si pensi alle maschere utilizzate per dipingere, creare chip e simili). Se non funzionasse in questo modo, sarebbe chiamato qualcos'altro. –

risposta

11

Non c'è alcuna incoerenza reale, in quanto la relazione tra umask e chmod può essere semplicemente scritta con le equazioni. Apparentemente, umask imposta il contrario di chmod, è stato creato in questo modo ai vecchi tempi.

Esempio: 022 (il valore predefinito al solito umask) crea 755. Funziona in questo modo:

  • 7 - 0 = 7 diventa il primo byte
  • 7 - 2 = 5 diventa il secondo e il terzo byte

Utilizzando questo esempio, umask 777 crea un file con chmod 000, umask 112 sarà pari a chmod 664. Per quanto ne so, questo è successo perché il comando umask è stato originariamente creato per indicare quali bit di autorizzazione il file sarà NON dopo la sua creazione (da qui l'invertion).

Mentre potrebbe essere fastidioso, non è davvero difficile abituarsi. Pensa solo al modo in cui vuoi aggiungere i tuoi file a e sottrarre il byte desiderato da 7 e otterrai il valore umask. Oppure, quando si è all'IDE, scrivendo il proprio codice, non utilizzare umask, ma piuttosto creare il file (con il valore predefinito umask ovviamente) e quindi utilizzare, in Python, os.chmod().

+0

"Per quanto ne so, questo è successo perché il comando umask è stato originariamente creato per indicare quali bit di autorizzazione il file NON avrà dopo la sua creazione (da qui l'invertion)." Meravigliosa risposta! Ora posso vivere sereno! :) – ddinchev

+0

Una "maschera" è qualcosa che "maschera fuori" o "rimuovi". Ecco perché utilizziamo il bit AND ("&" in C) per "mascherare" le cose. – Fixee