Tuesday, June 12, 2012

Как се смята umask

Umask е механизъм по който може да се задава новосъздадените файлове в Unix/Linux системи с какви права да са.

Стандартно файловете се създават с 666 права (rw-rw-rw) а директориите с 777 (rwxrwxrwx). Тук идва и функцията на umask. Ето как става:

1. създава се файл с права за достъп 666.
2. взема се текущата umask от обкръжението (примерно umask е 022).
3. прави се логически NOT на umask.
4. след това се прави логически AND между първоначалните права на файла (666 или ако е дир 777) и инверсната umask.
5. получената стойност са правата за достъп на файла.

пример:
umask 023
file с права за достъп - 666

Обръщаме всичко от осмична в двоична система.

110 110 110 (666)
000 010 011 (023)

Инвертираме umask:

110 110 110 (666)
111 101 100 (!023)

След това правим логически AND между 2те стойности (получава се 1 когато и двете стойности са 1)


110 110 110 (666)
AND
111 101 100 (!023)
--------------------
110 100 100 (644)

(дано не съм объркал нещо, защото това го писах една сутрин докато се събуждах с кафето)