Нет никакой реальной несогласованности, так как связь между umask
и chmod
может быть записана только с помощью уравнений. По-видимому, umask
устанавливает противоположность chmod
, он был создан вот так в прежние времена.
Пример: 022
(по умолчанию обычный umask
) создает 755
. Вот как это работает:
7 - 0 = 7
становится на первые байты
7 - 2 = 5
становятся вторым и третьим байты
Используя этот пример, umask 777
создает файл с chmod 000
, umask 112
будет равен chmod 664
. Насколько мне известно, это произошло потому, что изначально была создана команда umask
, чтобы указать, какие биты разрешения будут иметь файл NOT после создания (отсюда и инверсия).
Хотя это может быть раздражающим, на самом деле нетрудно привыкнуть к нему. Подумайте, как бы вы делали chmod
свои файлы и вычитали байт из 7
, и вы получите значение umask
. Или, когда вы находитесь в среде IDE, написав свой код, не используйте umask
, а скорее создайте файл (по умолчанию, конечно, umask
), а затем используйте вместо этого в Python os.chmod()
.
Это «маска» - это то, что слово означает в этом контексте; то, что позволяет пропускать только незавершенные биты (подумайте о масках, используемых для рисования, чиппинга и т. п.). Если бы он не работал таким образом, это называлось бы чем-то другим. –