Почему umask 555 устанавливает модификации файла на “222” вместо “111”?

Я знаю что:

  1. Модификация значения по умолчанию файла 666
  2. umask значение будет удалено из модификаций по умолчанию.

Итак, почему, когда я установил "umask" на 555 это не устанавливает, недавно создал полномочия файла к 111? вместо этого это устанавливает их на 222

1
задан 13 August 2017 в 08:47

2 ответа

Краткий ответ:

Потому что с помощью 5 вы удаляете бит read (4) и executable (1), поэтому в итоге вы получите только write (2).


Объяснение:

С помощью 555 вы не устанавливаете исполняемый бит по умолчанию.

It's wrong          =>          (6 - 5 = 1)

Мы получили эти моды:

  • 4 = Чтение
  • 2 = Запись
  • 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.

3
ответ дан 3 December 2019 в 06:38

Результатом 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 () устанавливает маску создания режима файла обработки вызовов (umask) на маску и 0777 (т.е. только биты полномочий файла маски используются), и возвращает предыдущее значение маски.

2
ответ дан 3 December 2019 в 06:38

Другие вопросы по тегам:

Похожие вопросы: