Почему umask 555 устанавливает файловые моды в & ldquo; 222 & rdquo; вместо & ldquo; 111 & rdquo ;?

Вы можете отправить escape-последовательность на терминал (любой, совместимый с POSIX, я думаю), используя текущий символ курсора, используя tput:

tput civis    # invisible
tput cnorm    # normal       (usually an underscore)
tput cvvis    # very visible (usually a rectangle)

Просто поставьте все, что вы предпочитаете в локальном скрипте runcom : ~/.zshrc, ~/.bashrc - независимо от вашего яда - или в глобальном в /etc, если вы хотите, чтобы он запускался для всех пользователей.

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

6 ответов

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

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

[ ! d2]

Объяснение:

С 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), потому что в a 6 мы имеем только 4 и 2 для удаления (не 1):

6  =  4   +   2

Вы удаляете только эффекты 4, поэтому

В двоичном

Подумайте об этом в двоичном формате:

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.

2
ответ дан 22 May 2018 в 19:31

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

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

[ ! d2]

Объяснение:

С 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), потому что в a 6 мы имеем только 4 и 2 для удаления (не 1):

6 = 4 + 2

Вы удаляете только эффекты 4, поэтому

В двоичном

Подумайте об этом в двоичном формате:

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.

2
ответ дан 18 July 2018 в 08:36

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

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

[ ! d2]

Объяснение:

С 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), потому что в a 6 мы имеем только 4 и 2 для удаления (не 1):

6 = 4 + 2

Вы удаляете только эффекты 4, поэтому

В двоичном

Подумайте об этом в двоичном формате:

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.

2
ответ дан 24 July 2018 в 19:07

Значение umask результата - маска & amp; 0777 (бит мудрый и)

Когда маска 0555 Чем маска & amp; 0777 результат с 0222

nixCraft understanding-linux-unix-umask-value-usage Задача: Вычисление окончательного разрешения на FILES Вы можете просто вычесть 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:

nixCraft understanding-linux-unix-umask-value-usage

как биты разрешения жестко закодированы в стандартные утилиты. Ниже приведены некоторые соответствующие строки из двух файлов в пакете coreutils, который содержит исходный код для touch(1) и mkdir(1), среди прочих:

Задача: вычисление окончательного разрешения для FILES

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.

Вы можете просто вычесть umask из базовых разрешений, чтобы определить окончательное разрешение для файла следующим образом:

int default_permissions =
  S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
То есть дать разрешения на чтение и запись всем (читай: 0666), которые будут изменены по способу umask по созданию файла, конечно.

Задача: вычисление окончательного разрешения для ДИРЕКТОРИЙ

man umask

Вы можете просто вычесть umask из базовых разрешений, чтобы определить окончательное разрешение для каталога следующим образом:

1
ответ дан 22 May 2018 в 19:31
  • 1
    Для файлов это не 777, это 666 ... strace touch a |& grep open выходов: open("a", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3, а для каталогов: strace mkdir a1 |& grep 777 & gt; mkdir("a1", 0777). – Ravexina 13 August 2017 в 09:00
  • 2
    @Ravexina - как упоминалось в Unix & Linux Q & amp; A, который я добавил к моему ответу, touch использует маску по умолчанию 0666, добавленную в bit wise and с umask_value. В то время как mkdir использует маску по умолчанию 0777, добавленную в bit wise and с umask_value. – Yaron 13 August 2017 в 09:38
  • 3
    Да, мода по умолчанию зависит от программы, а сам umask может быть проигнорирован такими программами, как компиляторы, chmod и т. Д. – Ravexina 13 August 2017 в 09:40

Значение umask результата - маска & amp; 0777 (бит мудрый и)

Когда маска 0555 Чем маска & amp; 0777 результат с 0222

nixCraft understanding-linux-unix-umask-value-usage Задача: Вычисление окончательного разрешения на FILES Вы можете просто вычесть 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:

nixCraft understanding-linux-unix-umask-value-usage

как биты разрешения жестко закодированы в стандартные утилиты. Ниже приведены некоторые соответствующие строки из двух файлов в пакете coreutils, который содержит исходный код для touch(1) и mkdir(1), среди прочих:

Задача: вычисление окончательного разрешения для FILES

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.

Вы можете просто вычесть umask из базовых разрешений, чтобы определить окончательное разрешение для файла следующим образом:

int default_permissions = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH; То есть дать разрешения на чтение и запись всем (читай: 0666), которые будут изменены по способу umask по созданию файла, конечно.

Задача: вычисление окончательного разрешения для ДИРЕКТОРИЙ

man umask

Вы можете просто вычесть umask из базовых разрешений, чтобы определить окончательное разрешение для каталога следующим образом:

1
ответ дан 18 July 2018 в 08:36

Значение umask результата - маска & amp; 0777 (бит мудрый и)

Когда маска 0555 Чем маска & amp; 0777 результат с 0222

nixCraft understanding-linux-unix-umask-value-usage Задача: Вычисление окончательного разрешения на FILES Вы можете просто вычесть 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:

nixCraft understanding-linux-unix-umask-value-usage

как биты разрешения жестко закодированы в стандартные утилиты. Ниже приведены некоторые соответствующие строки из двух файлов в пакете coreutils, который содержит исходный код для touch(1) и mkdir(1), среди прочих:

Задача: вычисление окончательного разрешения для FILES

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.

Вы можете просто вычесть umask из базовых разрешений, чтобы определить окончательное разрешение для файла следующим образом:

int default_permissions = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH; То есть дать разрешения на чтение и запись всем (читай: 0666), которые будут изменены по способу umask по созданию файла, конечно.

Задача: вычисление окончательного разрешения для ДИРЕКТОРИЙ

man umask

Вы можете просто вычесть umask из базовых разрешений, чтобы определить окончательное разрешение для каталога следующим образом:

1
ответ дан 24 July 2018 в 19:07
  • 1
    Для файлов это не 777, это 666 ... strace touch a |& grep open выходов: open("a", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3, а для каталогов: strace mkdir a1 |& grep 777 & gt; mkdir("a1", 0777). – Ravexina 13 August 2017 в 09:00
  • 2
    @Ravexina - как упоминалось в Unix & Linux Q & amp; A, который я добавил к моему ответу, touch использует маску по умолчанию 0666, добавленную в bit wise and с umask_value. В то время как mkdir использует маску по умолчанию 0777, добавленную в bit wise and с umask_value. – Yaron 13 August 2017 в 09:38
  • 3
    Да, мода по умолчанию зависит от программы, а сам umask может быть проигнорирован такими программами, как компиляторы, chmod и т. Д. – Ravexina 13 August 2017 в 09:40

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

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