Я знаю что:
666
umask
значение будет удалено из модификаций по умолчанию.Итак, почему, когда я установил "umask" на 555
это не устанавливает, недавно создал полномочия файла к 111
? вместо этого это устанавливает их на 222
Потому что с помощью 5
вы удаляете бит read (4)
и executable (1)
, поэтому в итоге вы получите только write (2)
.
С помощью 555
вы не устанавливаете исполняемый бит по умолчанию.
It's wrong => (6 - 5 = 1)
Мы получили эти моды:
Единственный способ, которым я могу создать 5
, из 4 + 1
, поэтому 5
фактически означает:
4 (Read) + 1 (Executable) = 5
Это означает «удалить» исполняемые и читаемые моды, если они установлены.
Другими словами, с помощью umask 555
вы удаляете бит read (4) и исполняемый (1) из файлового режима по умолчанию (6), что приводит нас к (2), потому что в 6 у нас есть только 4 и 2 для удаления (не любой 1):
6 = 4 + 2
Вы удаляете только эффекты 4, поэтому файл заканчивается на 222
.
Думайте об этом в двоичном виде:
1 -> 001
2 -> 010
3 -> 011
4 -> 100
5 -> 101
6 -> 110
7 -> 111
Режим по умолчанию для файла - 666 (110 110 110), а наше значение umask
- 555
(101 101) 101):
Decimal title -> 421 421 421
666 in binary -> 110 110 110
- 555 in binary -> - 101 101 101
_____________
010 010 010
2 2 2
-w- -w- -w-
Видите? мы дошли до -w-w-w- или 222
.
Результатом umask значение является маска, и 0777 (укусил мудрый и),
Когда маска 0555
Чем 0555 и 0777 результатов с 0222
nixCraft understanding-linux-unix-umask-value-usage
Задача: вычисление заключительного разрешения для ФАЙЛОВ
Можно просто вычесть umask из основных полномочий определить заключительное разрешение для файла следующим образом:
666 – 022 = 644 File base permissions : 666 umask value : 022 subtract to get permissions of new file (666-022) : 644 (rw-r–r–)
Задача: вычисление заключительного разрешения для КАТАЛОГОВ
Можно просто вычесть umask из основных полномочий определить заключительное разрешение для каталога следующим образом:
777 – 022 = 755 Directory base permissions : 777 umask value : 022 Subtract to get permissions of new directory (777-022) : 755 (rwxr-xr-x)
Источник различия между touch file
и mkdir dir
:
Примечание: как указывают в этом Unix Вопросы и ответы
как биты полномочий трудно кодируются в стандартные утилиты. Вот некоторые соответствующие строки из двух файлов в
coreutils
пакет, который содержит исходный код для обоихtouch(1)
иmkdir(1)
, среди других:
mkdir.c
:if (specified_mode) { struct mode_change *change = mode_compile (specified_mode); if (!change) error (EXIT_FAILURE, 0, _("invalid mode %s"), quote (specified_mode)); options.mode = mode_adjust (S_IRWXUGO, true, umask_value, change, &options.mode_bits); free (change); } else options.mode = S_IRWXUGO & ~umask_value; }
Другими словами, если режим не указан, установите его на
S_IRWXUGO
(читайте: 0777) измененныйumask_value
.
touch.c
еще более ясно:int default_permissions = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
Таким образом, дайте чтение и полномочия записи всем (чтение: 0666), который будет изменен процессом
umask
на создании файла, конечно.Вы можете обходить это программно только: т.е. при создании файлов или из программы C, где Вы делаете системные вызовы непосредственно или из языка, который позволяет Вам делать низкий уровень syscall (см., например, Perl
sysopen
подperldoc -f sysopen
).umask () устанавливает маску создания режима файла обработки вызовов (umask) на маску и 0777 (т.е. только биты полномочий файла маски используются), и возвращает предыдущее значение маски.