Форум: Полезно
Тема: Що е то umask?
Автор: nikolavp

Мнение от nikolavp пуснато на Октомври 27 2007, 13:09
Много от вас сигурно са виждали umask=000 в /etc/fstab, или пък са Ви дали съвет да го сложите за вашия ntfs/vfat дял. Много хора не знаят - какво означават тези числа  ;), ако и вие сте от тях, значи статията е за Вас :).

Ще ви трябват и познания за правата в Линукс, които можете да си набавите от прекрасната статия на quintessence, която можете да прочетете < http://forums.linux-index.org/ikonboard.cgi?act=ST&f=24&t=594 >.

Както (вече) знаете с chmod можем да променяме правата на файл/директория, но за какво всъщност служи umask ? Umask е създадена разработчиците, за да можете да укажете на ядрото как да създава новите файлове във вашата файлова система. Ядрото по подразбиране създава файлове с права 0666, първата нула се маха и не ви интересува. Това 666 ще рече, че по подразбиране ядрото създава файловете с права
Цитат:

rw-rw-rw-
което означава писане и чете за притежателя, групата и всички други потребители на машината. Тук идва мястото на umask - стойността му казва кои права да премахне при създаването файл/директория.
Нека вземем един пример:
Сегашната маска можете да видите чрез командата
Код: 
umask
по подразбиране тя трябва да ви даде това
Код: 

nikolavp@Nikolavp ~ $ umask
0022
Сега правим проста сметка 0666 - 0022 и получаваме, че новосъздадените файлове/директории ще са с права 0644, което на чист български означава писане и четене за притежателя и само чете за групата и всички другите потребители. Това веднага може да проверим с тези команди
Код: 
nikolavp@Nikolavp ~ $ touch file
nikolavp@Nikolavp ~ $ ls -l file
-rw-r--r-- 1 nikolavp nikolavp 0 2007-10-27 16:02 file
Логично ако стойността на umask е 0000 да създаде всички файлове с права за четене и писане за притежателя, групата, всички други ;).



Мнение от _kernel_88 пуснато на Януари 09 2008, 15:42
Цитат:  (nikolavp @ Oct. 27 2007,13:09)

Много от вас сигурно са виждали umask=000 в /etc/fstab, или пък са Ви дали съвет да го сложите за вашия ntfs/vfat дял. Много хора не знаят - какво означават тези числа  ;), ако и вие сте от тях, значи статията е за Вас :).

Ще ви трябват и познания за правата в Линукс, които можете да си набавите от прекрасната статия на quintessence, която можете да прочетете < http://forums.linux-index.org/ikonboard.cgi?act=ST&f=24&t=594 >.

Както (вече) знаете с chmod можем да променяме правата на файл/директория, но за какво всъщност служи umask ? Umask е създадена разработчиците, за да можете да укажете на ядрото как да създава новите файлове във вашата файлова система. Ядрото по подразбиране създава файлове с права 0666, първата нула се маха и не ви интересува. Това 666 ще рече, че по подразбиране ядрото създава файловете с права
Цитат:

rw-rw-rw-
което означава писане и чете за притежателя, групата и всички други потребители на машината. Тук идва мястото на umask - стойността му казва кои права да премахне при създаването файл/директория.
Нека вземем един пример:
Сегашната маска можете да видите чрез командата
Код: 
umask
по подразбиране тя трябва да ви даде това
Код: 

nikolavp@Nikolavp ~ $ umask
0022
Сега правим проста сметка 0666 - 0022 и получаваме, че новосъздадените файлове/директории ще са с права 0644, което на чист български означава писане и четене за притежателя и само чете за групата и всички другите потребители. Това веднага може да проверим с тези команди
Код: 
nikolavp@Nikolavp ~ $ touch file
nikolavp@Nikolavp ~ $ ls -l file
-rw-r--r-- 1 nikolavp nikolavp 0 2007-10-27 16:02 file
Логично ако стойността на umask е 0000 да създаде всички файлове с права за четене и писане за притежателя, групата, всички други ;).

Как бихте изчислили правата на новосъздаден файл, ако маската е 0333 ? На моята система се получават права -r--r--r--
Мнение от stumps пуснато на Януари 09 2008, 17:38
Да, вярно е ... 0333 е еквивалетно на -r--r--r

Пример за изчисляване:

0123 --> 001-010-011 --> NOT (001-010-011) --> 110-101-100 --> -rw-r-x-r--


Следва част от таблицата на всички възможни състояния (за тези, на които не им се смята двоично):

0000 е еквиваленто на -rwxrwxrwx
0111 е еквиваленто на -rw-rw-rw-
0222 е еквиваленто на -r-xr-xr-x
0333 е еквиваленто на -r--r--r--
0444 е еквиваленто на -wx-wx-wx
0555 е еквиваленто на --w--w--w-
0666 е еквиваленто на ---x--x--x
0777 е еквиваленто на ----------
0102 е еквиваленто на -rw-rwxr-x

и т.н.



Мнение от _kernel_88 пуснато на Януари 09 2008, 19:45
Цитат:  (stumps @ Jan. 09 2008,17:38)

Да, вярно е ... 0333 е еквивалетно на -r--r--r

Пример за изчисляване:

0123 --> 001-010-011 --> NOT (001-010-011) --> 110-101-100 --> -rw-r-x-r--


Следва част от таблицата на всички възможни състояния (за тези, на които не им се смята двоично):

0000 е еквиваленто на -rwxrwxrwx
0111 е еквиваленто на -rw-rw-rw-
0222 е еквиваленто на -r-xr-xr-x
0333 е еквиваленто на -r--r--r--
0444 е еквиваленто на -wx-wx-wx
0555 е еквиваленто на --w--w--w-
0666 е еквиваленто на ---x--x--x
0777 е еквиваленто на ----------
0102 е еквиваленто на -rw-rwxr-x

и т.н.

Благодаря ви ! Аз разбрах вашето двоично смятане, но ми направи впечатление, че вие не вадите от 0666 стойността на маската.Как ще се изчисли ако използвом метода с вадене от 0666.Защото ако извадя 0666-0333  получавям пак 0333, което е грешно.Как се вади всъщност при въпросната операция ?
Мнение от gosheto пуснато на Януари 09 2008, 21:46
umask се вади от 0777 :21;
Объркаването идва от това, че umask=0222 дава права за четене и изпълнение. Но като се създава файл с touch (и не само), не се вдига бита за изпълнение.

Мнение от _kernel_88 пуснато на Януари 09 2008, 22:11
Цитат:  (gosheto @ Jan. 09 2008,21:46)

umask се вади от 0777 :21;
Объркаването идва от това, че umask=0222 дава права за четене и изпълнение. Но като се създава файл с touch (и не само), не се вдига бита за изпълнение.

Ще вадим от 0777 само ако е директория.
Ако е файл вадим от 0666
Не е ли така ?

Мнение от gosheto пуснато на Януари 09 2008, 23:17
Цитат:  (_kernel_88 @ Януари 09 2008,22:11)

Ще вадим от 0777 само ако е директория.
Ако е файл вадим от 0666
Не е ли така ?

Не е така. Дали е директория или файл няма значение. Ето още веднъж статията на quintessence < http://forums.linux-index.org/ikonboard.cgi?act=ST&f=24&t=594 >, в която много добре е обяснено значението на всеки бит при задаване на права на файлове и директории



Мнение от _kernel_88 пуснато на Януари 10 2008, 13:14
Цитат:  (gosheto @ Jan. 09 2008,23:17)

Цитат:  (_kernel_88 @ Януари 09 2008,22:11)

Ще вадим от 0777 само ако е директория.
Ако е файл вадим от 0666
Не е ли така ?

Не е така. Дали е директория или файл няма значение. Ето още веднъж статията на quintessence < http://forums.linux-index.org/ikonboard.cgi?act=ST&f=24&t=594 >, в която много добре е обяснено значението на всеки бит при задаване на права на файлове и директории

Аз разбрах значението на отделните битове, но не разбрах кога вадим от 0666 и кога от 0777. В статията, която обеснява значението и смисъла на маската се казва, че се вади от 0666 и никъде не се казва, че се вади от 0777
Мнение от gosheto пуснато на Януари 10 2008, 13:34
Винаги се вади от 0777, но както ти казах по подразбиране при umask=0222 touch не вдига бита за изпълнение (създава празен текстов файл, който не е изпълним) :P
Ето един пример за директории от където ще ти стане по ясно:
Код: 
vasil@Install:~/proba$ umask
0222
vasil@Install:~/proba$ mkdir test-0222
vasil@Install:~/proba$ ls -l
total 0
dr-xr-xr-x 2 vasil vasil 48 2008-01-10 13:23 test-0222
vasil@Install:~/proba$ umask 0333
vasil@Install:~/proba$ mkdir test-0333
vasil@Install:~/proba$ ls -l
total 0
dr-xr-xr-x 2 vasil vasil 48 2008-01-10 13:23 test-0222
dr--r--r-- 2 vasil vasil 48 2008-01-10 13:24 test-0333


Още нещо от мен - ако за директория нямаш вдигнат бит за изпълнение в нея не можеш да влезнеш, за това се използва umask=0222, а не umask=0333
Код: 
vasil@Install:~/proba$ cd test-0333/
bash: cd: test-0333/: Permission denied



Мнение от _kernel_88 пуснато на Януари 10 2008, 14:24
Цитат:  (gosheto @ Jan. 10 2008,13:34)

Винаги се вади от 0777, но както ти казах по подразбиране при umask=0222 touch не вдига бита за изпълнение (създава празен текстов файл, който не е изпълним) :P
Ето един пример за директории от където ще ти стане по ясно:
Код: 
vasil@Install:~/proba$ umask
0222
vasil@Install:~/proba$ mkdir test-0222
vasil@Install:~/proba$ ls -l
total 0
dr-xr-xr-x 2 vasil vasil 48 2008-01-10 13:23 test-0222
vasil@Install:~/proba$ umask 0333
vasil@Install:~/proba$ mkdir test-0333
vasil@Install:~/proba$ ls -l
total 0
dr-xr-xr-x 2 vasil vasil 48 2008-01-10 13:23 test-0222
dr--r--r-- 2 vasil vasil 48 2008-01-10 13:24 test-0333


Още нещо от мен - ако за директория нямаш вдигнат бит за изпълнение в нея не можеш да влезнеш, за това се използва umask=0222, а не umask=0333
Код: 
vasil@Install:~/proba$ cd test-0333/
bash: cd: test-0333/: Permission denied

Ясно е, че при новосъздаден текстови няма смисъл да се вдига бита за изпълнение. Ясно е всичко, това което ми казваш.
Но като се вади винаги от 0777 защо въобще в сатията се споменава за вадене от 0666 ? Искаш да кажеш, че като не се вдигте бита за изпълнение а той е единица всъщност се получава 0666 и затова в статията говорят за вадене от 0666

Мнение от gosheto пуснато на Януари 10 2008, 17:29
Ето малко за размисъл:
Код: 
vasil@Install:~/proba$ umask 0222
vasil@Install:~/proba$ umask -S
u=rx,g=rx,o=rx
vasil@Install:~/proba$ umask 0333
vasil@Install:~/proba$ umask -S
u=r,g=r,o=r

ето и един пример както създадем файл, който е изпълним:
Код: 
vasil@Install:~/proba$ umask 0022
vasil@Install:~/proba$ gcc proba.c
vasil@Install:~/proba$ ls -l
total 12
-rwxr-xr-x 1 vasil vasil 6474 2008-01-10 17:18 a.out
-rw-rw-rw- 1 vasil vasil   67 2008-01-10 17:13 proba.c
vasil@Install:~/proba$ rm a.out
vasil@Install:~/proba$ umask 0033
vasil@Install:~/proba$ gcc proba.c
vasil@Install:~/proba$ ls -l
total 12
-rwxr--r-- 1 vasil vasil 6474 2008-01-10 17:19 a.out
-rw-rw-rw- 1 vasil vasil   67 2008-01-10 17:13 proba.c

proba.c e сорс на програма написана на C, a a.out e генерираният файл от gcc

p.s. Използвам umask=0022 и umask=0033 за да мога да дам права на потребителя да създаде файл, който е изпълним иначе дава грешка както сам се досещаш  :43;

Мнение от _kernel_88 пуснато на Януари 12 2008, 12:28
Цитат:  (gosheto @ Jan. 09 2008,23:17)

Цитат:  (_kernel_88 @ Януари 09 2008,22:11)

Ще вадим от 0777 само ако е директория.
Ако е файл вадим от 0666
Не е ли така ?

Не е така. Дали е директория или файл няма значение. Ето още веднъж статията на quintessence < http://forums.linux-index.org/ikonboard.cgi?act=ST&f=24&t=594 >, в която много добре е обяснено значението на всеки бит при задаване на права на файлове и директории
umask (abbreviated from user file creation mode mask) is a function in POSIX environments which affects the default file system mode for newly created files and directories of the current process. The permissions of a file created under a given umask value are calculated using the following bitwise operation (note that umasks are generally specified in octal):

   bitwise AND of the unary complement of the argument (using bitwise NOT) and the full access mode.

The full access mode is 666 in the case of files, and 777 in the case of directories. Most Unix shells provide a umask command that affects all child processes executed in this shell.

[edit] Examples

Assuming the umask has the value 174, any new file will be created with the permissions 602 and any new directory will have permissions 603 because:

6668 AND NOT(1748) = 6028

while

7778  AND NOT(1748) = 6038

7778 = (111 111 111)2
174 8 = (001 111 100)2
NOT(001 111 100)2 = (110 000 011)2
(111 111 111)2 AND (110 000 011)2 = (110 000 011)2
    7778           NOT (174)8          (603)8


Toва е от < http://en.wikipedia.org/wiki/Umask >
Явно има значение дали  е файл или директория.
Знам, че в Линукс всичко е файл, но  в случая явно се прави разлика. Обърнете внимание на това, което съм направил получерно.



Мнение от _kernel_88 пуснато на Януари 12 2008, 13:19
Number File      Dir
0           rw-      rwx
1           rw-      rw-
2           r--       r-x
3           r--       r--
4          -w-      -wx
5          -w-      -w-
6          ---       --x
7          ---       ---

Източник : Unix in a Nutshell 3rd ed 1999



Мнение от gosheto пуснато на Януари 12 2008, 14:16
Аз мога да ти намеря много статии, в кой пише, че за файлове се вади от 666, а за директории от 777.  Това е така, защото повечето програми създават файлове, които не са изпълними (бита за изпълнение не се вдига).
Но истината е една: в общия случай се вади от 777 независимо дали е файл или директория.
Май не ми четеш постовете защо  :14;
Погледни примера, който ти показах малко по нагоре и ми отговори на въпроса: С какви права трябва да се създаде файл при umask=033 ?


Отг. По твойта логика вадиме от 666 (нали е файл), така че файлът трябва да е с права 633, но файлът е с 744  :8;

Мнение от _kernel_88 пуснато на Януари 13 2008, 19:39
Цитат:  (gosheto @ Jan. 12 2008,14:16)

Аз мога да ти намеря много статии, в кой пише, че за файлове се вади от 666, а за директории от 777.  Това е така, защото повечето програми създават файлове, които не са изпълними (бита за изпълнение не се вдига).
Но истината е една: в общия случай се вади от 777 независимо дали е файл или директория.
Май не ми четеш постовете защо  :14;
Погледни примера, който ти показах малко по нагоре и ми отговори на въпроса: С какви права трябва да се създаде файл при umask=033 ?




Отг. По твойта логика вадиме от 666 (нали е файл), така че файлът трябва да е с права 633, но файлът е с 744  :8;

magmind[~]$ umask
0022
magmind[~]$ umask 0033
magmind[~]$ umask
0033
magmind[~]$ touch testfile
magmind[~]$ ls -l testfile
-rw-r--r-- 1 magmind users 0 2008-01-13 19:31 testfile
magmind[~]$ mkdir testdir
magmind[~]$ ls -ld testdir
drwxr--r-- 2 magmind users 4096 2008-01-13 19:32 testdir


Това е моят отговор. Вижда се че файлът има права
-rw-r--r-- тоест 644, а не 744, както ти пишеш.Но всъщност точно това потвърждава нещо друго, което казваш - че за файлове не се вдига бита за изпълнение
Директорията си е 744.

Разбрах твоята логика- вадим си от 777 и винаги си имаме едно наум, че бита за изпълнение си е свален.

Объркването ми идваше от там, че тук пише вадете от 666 там пише вадете от 777 и накрая и аз накрая не можех да си обесня.Та дори  в статията в линукс-индекс и дума не се казваше за вадене от 777.

Сега всичко ми е ясно. Водих тоя мини -дебат с теб на тая тема  само с едничката цел да си обесня нещата.Никога, за да се изтъкна, че съм по прав от тоя или ония. Затова искам да ти благодаря, че отговаряше на моите въпроси.



Мнение от gosheto пуснато на Януари 13 2008, 22:28
Радвам се, че си си изяснил нещата.
Този форум и самият Li проект e за това - да си помагаме и нещата около линукс да са по ясни  :33;

p.s. Може би аз не можаш от самото начало да ти обясня нещата. umask просто казва кои битове са позволени да се вдигат, а от програмта (командата) зависи дали те ще се вдигнат (най - вече бита за изпълнение).

Мнение от altoas пуснато на Февруари 25 2008, 16:59
мен ме интересува не 0ХХХ стойности, тях ги знам. интересува ме проклетата 0 за какво е. какви стойности заема и за какво има смисъл да се променя.
Powered by ikonforums 1.0.0 © 2006 ikonforums