Инструменты разработчика · Калькулятор Chmod
Объяснение символического режима chmod: u+x, g-w, o=r и a+rX
· Как это работает
chmod Юникс рабочий процесс разработчика
Символическая форма chmod — это крошечная грамматика: кто, оператор, какие биты. В этом посте все разбирается так, что u+x и go-rwx становятся очевидными, и показывается, когда символическое значение превосходит восьмеричное.
Сценарий развертывания, полный букв — chmod u+x,go-w deploy.sh работает, но никто из команды не может сказать, что он меняет.
Такая команда, как u+x, выглядит как символическое отображение калькулятора, но обе формы выполняют разные задачи. Редактируемое символическое поле допускает девять позиций разрешений, которым может предшествовать распознаваемый символ типа файла. Напротив, сгенерированный аргумент chmod определяет полные присваивания с предложениями u=, g= и o=, поэтому он представляет фиксированный режим, а не анализирует относительное изменение.
Ввод 750 делает различие более конкретным. Отображение — rwxr-x---, а сгенерированное присвоение — u=rwx,g=rx,o=. Оба описывают одного и того же владельца, группу и другие биты, но только второй форматируется как аргумент chmod. Страница никогда не запускает эту команду. Он предоставляет представление, поэтому предлагаемое значение можно просмотреть перед любым отдельным действием оболочки.
Калькулятор отделяет отображение в стиле ls от списка назначений, который он генерирует.
Буквы u, g и o появляются в созданном назначении, поскольку они обозначают владельца, группу и другое. Каждый вывод явно называет все три класса, включая пустое предложение, когда у класса нет разрешений. Калькулятор не анализирует опущенные грамматические символы или сокращения. Его ввод начинается с завершенного режима, а не с инструкций, результат которых зависит от существующей цели.
Эта коррекция предотвращает незначительное завышение. Матрица может точно показать, какой класс получает чтение, запись или выполнение, но она не может решить, что будет означать пропущенный селектор класса в другой реализации chmod. Вместо этого сравните три столбца матрицы с тремя предложениями присваивания. Их соглашение проверяет фиксированное значение, не полагаясь на правила относительных команд, которые этот интерфейс не реализует.
Какие буквы появляются в сгенерированных заданиях; относительное опущено — грамматика who не анализируется
Генератор присваиваний использует = для каждого обычного класса. Этот выбор точно перестраивает запрошенного владельца, группу и другие тройки, включая очистку класса путем выдачи пустой правой части. Хотя + и - относятся к символьным командам chmod, они не принимаются в качестве входных данных калькулятора. Таким образом, страница не моделирует дополнительные добавления или удаления из неизвестного начального режима.
Однобитовое сравнение показывает, что может доказать поддерживаемый рабочий процесс. Режим 750 отображает rwxr-x---; изменение цифры группы на 7 создает rwxrwx--- и меняет g=rx на g=rwx. Калькулятор идентифицирует выполненные режимы «до» и «после». Он не сравнивает g+w с живым файлом, поскольку в преобразовании не участвует текущий режим, путь, файловая система или выполнение команды.
Сгенерированный оператор =, а входная грамматика + и - остается за пределами инструмента.
Анализатор распознает r и w в их фиксированных позициях, а также x или - в обычных позициях выполнения. Он также принимает s, S, t и T, где эти позиции разделяют специальные биты. Заглавная буква X отличается от других: она принадлежит относительной грамматике chmod и здесь не поддерживается. Предоставление X отклоняется, а не молча интерпретируется как обычный бит выполнения.
Специальные строчные и прописные буквы введены намеренно. Setuid и setgid используют s, когда присутствует соответствующий бит выполнения, и S, когда он отсутствует; Sticky использует t или T по тому же правилу в позиции другого выполнения. Специальная строка и четырехзначная сводка сохраняют эти биты. Ничто из этого не добавляет поддержку условного выбора заглавной буквы X для файлов и каталогов.
Парсер принимает r, w, x, s, S, t и T; заглавная буква X не поддерживается
Выражения копирования класса, такие как g=u, не реализованы. Калькулятор никогда не считывает исходный класс из существующего объекта и не применяет биты одного класса к другому. Он получает полный восьмеричный режим или режим в стиле ls, преобразует это значение в именованные логические значения и выдает явные флаги для каждого класса. Любой скопированный результат должен быть рассчитан в другом месте, прежде чем эта страница сможет его проверить.
Предположим, что внешний шаг определяет, что владелец и группа должны иметь rwx, а у другого его нет. Ввод 770 дает rwxrwx--- и u=rwx,g=rwx,o=. Это подтверждает законченный результат, но не доказывает, как он был получен. Право собственности также остается неизвестным: конвертер помечает классы, не указывая реального владельца, группу или процесс, который может столкнуться с целью.
Копирование разрешений между классами не реализовано
Режим 0750 принимается с ведущим нулем и анализируется как то же значение, что и 750. Цифра владельца 7 активирует чтение, запись и выполнение; групповая цифра 5 активирует чтение и выполнение; другая цифра 0 ничего не активирует. Синхронизированное отображение становится rwxr-x---, а сводка, состоящая всегда из четырех цифр, сохраняет 0750 видимым как однозначное значение проверки.
Сгенерированное символическое присвоение для этого фиксированного режима имеет вид u=rwx,g=rx,o=. Три его предложения соответствуют непосредственно столбцам матрицы, а в восьмеричном предварительном просмотре команды используется 750, если только специальный бит не требует четвертой цифры. Указанный путь может быть указан в предварительном просмотре, но он никогда не открывается. В примере проверяется представление, а не право собственности, авторизация или успешное изменение разрешения.
Рабочий пример: 0750 как фиксированный режим и созданный список назначений.
Изменения на основе ссылок, обработка символических ссылок и операции ACL остаются за пределами этого преобразователя. На странице нет ввода ссылочного файла, обхода пути, модели записи ACL или запроса к файловой системе. Выбор рекурсии только добавляет отображаемый флаг -R. Следовательно, сгенерированная команда не может сообщить, какие объекты будут достигнуты или изменит ли другой уровень управления доступом эффективный результат.
Неверный ввод обеспечивает полезную проверку границ. Неверно расположенная буква разрешения, неподдерживаемый знак X, конечный маркер или неверная восьмеричная цифра отклоняются, а не исправляются. Исправление текста до поддерживаемого девятисимвольного дисплея приводит к созданию режима и синхронизированным представлениям. Такое признание доказывает лишь то, что строка соответствует реализованным двенадцати битам; он не проверяет внешнюю функцию chmod или целевую среду.
Операции ссылки, символической ссылки и ACL остаются за пределами этого конвертера.
Практическое различие заключается между отображением в стиле ls и сгенерированным фиксированным присвоением, а не между символьным вводом как относительным и восьмеричным вводом как абсолютным. Обе редактируемые формы представляют собой завершенный режим. Калькулятор преобразует любой из них в одно и то же целое число, матрицу, сводку, объяснение и предварительный просмотр, а затем выдает явные предложения u=, g= и o= для символьной формы команды.
Используйте эти синхронизированные представления, чтобы выявить арифметические ошибки. Если 750, rwxr-x--- и u=rwx,g=rx,o= появляются вместе, фиксированный режим внутренне согласован. Остановитесь на этом, если реальная система не предоставит больше доказательств. Страница не анализирует относительные операторы, пропущенные селекторы, копирование классов или заглавную букву X и не может определить, относится ли режим к реальной неудачной операции.