Почему umask - это маска $ perms AND NOT $, а не просто маска $ perms AND $?
Другими словами, почему там НЕ? почему он не был реализован как маска и?
Например, 666 и 700, чтобы дать 600?
Ключ в том, что umask ("маска пользователя") предназначен для предотвращения создания процессами файлов с битами разрешений, которые они не должны использовать. Если вы посмотрите на это с этой точки зрения, концепция umask может иметь больше смысла; в частности, общая umask 022 не позволяет процессам создавать файлы, которые доступны для записи для группы или мира, что обычно и требуется.
Входное значение является восьмеричным, поэтому для правильного анализа может потребоваться начальный 0. Поскольку маска владельца почти всегда равна 0, маску можно вводить с помощью трех цифр. В качестве маски И его необходимо ввести как 0755 или 0750.
Определение его как операции И НЕ делает более безопасным, если в маске пропущены символы. Если umask был и операция И umask 5
позволит только ограниченный доступ к миру и umask 0
было бы еще хуже. umasq 75
анализируется как десятичное значение, будет эффективно umask 113
который не позволяет читать доступ.
РЕДАКТИРОВАТЬ: С другой стороны, маска - это список битов, которые вы хотите замаскировать. Поэтому вам нужны маски вроде 026
скорее, чем 0751
. Внутреннее представительство вполне может быть 07751
или то, что подходит для AND. В противном случае преобразование относительно тривиально, и по большому счету маска применяется не так часто.