Русский

Инструменты разработчика · Калькулятор Chmod

Почему chmod использует восьмеричную форму: сокращение base-8 и откуда оно взялось

· Фон

chmod Юникс контроль доступа

восьмеричная группировка, показанная в виде отдельной диаграммы битов разрешения Unix
Оригинальная векторная иллюстрация ToolAcre

Восьмеричное число выглядит произвольным, пока вы не заметите, что одна цифра содержит ровно три бита. В этом посте объясняется соответствие между базой 8 и rwx, привычкой эпохи DEC, которая сделала восьмеричную систему естественной, и соглашением о ведущих нулях.

Почему 755, а не 493 — один и тот же десятичный режим никому ничего не значит, и есть причина, по которой восьмеричный формат победил

Десятичное значение 493 и восьмеричное 755 могут представлять одно и то же целое число, но 755 напрямую предоставляет группу разрешений. Каждая отображаемая цифра соответствует одному классу, и каждый класс содержит ровно три двоичных варианта выбора. Калькулятор работает на основе этой арифметической подгонки; не нужна историческая история, чтобы показать, почему восьмеричное число читается в режимах rwx.

Введите 755, и результат станет rwxr-xr-x. Владелец получает 7, группу 5 и другие 5. Преобразование того же целого числа в несгруппированную десятичную метку скроет границы классов. Это объясняет полезность нотации внутри реализованной модели, не объясняя, почему каждая внешняя команда или платформа приняли ее.

Три бита на цифру — как основание 8 группирует двоичные числа в тройки, которые точно совпадают с r, w и x

Восьмеричная цифра охватывает значения от нуля до семи, то есть сумму, доступную для трех независимых битов со взвешиванием 4, 2 и 1. Комбинации четко сопоставляются: 0 — ---, 1 — --x, 2 — -w-, 3 — -wx, 4 — r--, 5 — это rx, 6 — это rw-, а 7 — это rwx.

Таким образом, три обычные цифры соответствуют владельцу, группе и другим. Для 640 двоичными тройками являются 110, 100 и 000, что дает rw-r-----. Матрица флажков делает ту же группировку видимой, не требуя двоичной записи. Изменение одного разрешения изменяет только соответствующий итог класса и связанную с ним символическую позицию.

Аппаратная привычка — машины DEC, на которых работал ранний Unix, были документированы в восьмеричном формате, поэтому программисты уже думали в нем.

Источники репозитория не устанавливают аппаратную линию восьмеричной записи. Они содержат битовые маски JavaScript, правила синтаксического анализа, тесты и элементы управления пользовательского интерфейса, а не документацию для более ранних процессоров или сред разработки. Любое утверждение о том, что конкретная машинная культура стала причиной усыновления, потребует исторических доказательств, выходящих за рамки файлов, разрешенных для этой статьи.

Вместо этого объяснение, подкрепленное источником, является арифметическим. Три бита имеют восемь возможных комбинаций, поэтому одна восьмеричная цифра захватывает одну тройку rwx, не пересекая границу класса. Эту взаимосвязь можно продемонстрировать в каждом результате калькулятора. Это остается актуальным независимо от того, будет ли в конечном итоге более широкий исторический отчет предоставлен из первоисточников.

История оборудования не устанавливается источниками репозитория

Анализатор принимает от одной до четырех восьмеричных цифр и удаляет необязательный префикс 0o. Следовательно, 644, 0644 и 0o644 разрешаются в одно и то же значение. Цифры 8 и 9 отклоняются с конкретным объяснением, поскольку ни одна из них не принадлежит восьмеричной системе счисления, а искаженный текст не угадывается в допустимом режиме.

Ведущая значащая цифра содержит специальные биты, а не другой обычный класс. Его веса 4, 2 и 1 представляют setuid, setgid и Sticky, а конечные цифры сохраняют владельца, группу и другие. Модуль форматирования показывает три цифры, если специальный бит не установлен, и четыре, если он требуется, если только четырехзначный вывод не запрошен явным образом.

Принимаемые ведущие формы и цифра специального бита в этом парсере

Преобразование 0644 тройками дает 6, 4 и 4. В двоичном формате это 110, 100 и 100, поэтому символический результат — rw-r--r--. Владелец может читать и писать, а группа и другие — только читать. Каждое представление получено из одного и того же целого числа, что позволяет осуществлять прямую проверку согласованности.

Обращение процесса приводит к тому же результату. Начните с rw-r--r--, добавьте 4 и 2 для владельца, возьмите 4 для группы и возьмите 4 для остальных. Цифры: 644. Необязательный начальный ноль, принимаемый синтаксическим анализатором, не добавляет специальный бит; он оставляет числовое значение неизменным.

Почему шестнадцатеричная система так и не взяла верх: две шестнадцатеричные цифры не разделяются четко на три класса

Шестнадцатеричное число может кодировать целое число, но его границы четырехбитных цифр не совпадают с трехбитными классами разрешений. Это арифметическое сравнение, а не свидетельство того, какую систему обозначений исторически предпочитали люди. Калькулятор не принимает шестнадцатеричные входные данные, а его выходные данные формируются на основе восьмеричных цифр, символьных позиций и именованных логических элементов управления.

Например, обычные разрешения занимают девять битов, которые обычно отображаются как три восьмеричные группы. Группирование одних и тех же битов в четырехбитные фрагменты разделило бы класс rwx по границам цифр. Это делает шестнадцатеричный формат менее прозрачным для целей отображения, но из этого наблюдения не следует никаких заявлений о принятии, стандартах или истории командной строки.

Шестнадцатеричное сравнение - это арифметика, а не свидетельство исторического принятия.

Именованные константы из других языков или системных интерфейсов находятся за пределами реализации JavaScript. Репозиторий использует свои собственные описательные свойства, такие как OwnerRead, GroupWrite, OtherExecute, setuid, setgid и Sticky. Эти имена делают внутреннюю битовую арифметику читаемой без утверждения эквивалентности определенному внешнему заголовку или API.

Оставайтесь в пределах того, что может проверить инструмент: числового значения предоставленного режима, его логических значений класса, символьного рендеринга, объяснений и сгенерированного текста команды. Страница браузера не проверяет целевую платформу и не компилирует собственные константы. Любой, кто переводит результат в другой программный интерфейс, должен отдельно обратиться к авторитетной документации этого интерфейса.

Именованные константы C находятся за пределами реализации JavaScript.

Восьмеричное число подходит для этого калькулятора, поскольку каждый класс разрешений представляет собой трехбитовую величину, а каждая восьмеричная цифра содержит ровно три бита. Соответствие видимое, обратимое и легко проверяемое. Специальные биты используют четвертую цифру с тем же шаблоном 4, 2 и 1, в то время как символические s, S, t и T сохраняют детали своей позиции выполнения.

Используйте обозначения как вспомогательное средство для повторения, а не как заклинание. Разбейте значение на владельца, группу, другое и любой специальный префикс; проверить буквы и коробки; затем примите решение о пригодности на основании фактического владения и данных о рабочей нагрузке. Арифметика полностью объясняет группировку без необоснованных утверждений об истории оборудования, стандартах или универсальной политике.