Что такое заглавная буква X в posix / chmod?


11

Я знаю , что ugoa (владелец, группа, другие, все) или RWX (чтение / вправо / выполнение) или 4,2,1 или -, f, d, l, и я пытался читать , man chmodчтобы понять , что это капитал Xв , chmodно там не было запись для него. Затем я прочитал в этой статье в posix / chmod, но застрял в этом отрывке:

Устанавливайте исполняемый бит только в том случае, если целью a) является каталог b), уже установлен хотя бы один исполняемый бит для любого пользователя, группы, других.

Я также прочитал в этой статье, что дает этот пример кода:

chmod -R u=rwX,g=rX,o=rX testdir/

Я понимаю, что существует рекурсивное разрешение testdir/в отношении владельца (u), группы (g) и других (o), но я признаю, что все еще скучаю по намерению столицы X.

Возможно, дидактическая формулировка могла бы пролить некоторый свет на это (основная причина, по которой я публикую это здесь, заключается в том, что я не нашел сеанс SE по этому вопросу).

Обновить

Извините все, я пропустил это в человеке. Я не предполагал, что X появится перед списком аргументов, и я подумал, что поиск возвращает x вместо X, мой плохой.

Ответы:


20

На странице написано:

выполнять / искать, только если файл является каталогом или уже имеет разрешение на выполнение для некоторого пользователя ( X)

POSIX говорит:

Завивка символ X должен представлять выполнение / поиск часть битов режима файла , если файл является каталогом или , если ток (неизмененные) биты режима файла имеют по крайней мере один из битов выполнения (S_IXUSR, S_IXGRP или S_IXOTH) множество. Он должен игнорироваться, если файл не является каталогом, и ни один из битов выполнения не установлен в текущих битах режима файла.

Это флаг условного разрешения: chmodсмотрит на то, что он обрабатывает в данный момент, и если это каталог, или если у него установлен бит выполнения в текущих разрешениях (владелец, группа или другое), он действует так, как если бы запрошенное разрешение было x, в противном случае он игнорирует это. Условие проверяется в то время, когда chmodприменяется конкретная Xинструкция, поэтому вы можете очистить биты выполнения за один и тот же запуск, a-x,a=rwXчтобы установить только исполняемый бит для каталогов.

Вы можете увидеть, имеет ли файл установленный бит выполнения, посмотрев на часть «access» в statвыводе или в первом столбце ls -l. Биты выполнения представлены как x. -rwxr-xr-xявляется общим для исполняемых файлов и указывает, что исполняемый бит установлен для владельца, группы и других пользователей; -rw-r--r--является общим для других файлов и указывает, что исполняемый бит не установлен (но бит чтения установлен для всех, а бит записи для владельца). Посмотрите Понимание разрешений UNIX и их атрибутов, у которого есть намного больше деталей.

Таким образом, в вашем примере u=rwXзадает права владельца на чтение и запись во всех случаях, а для каталогов и исполняемых файлов - выполнение; аналогично для group ( g=rX) и other ( o=rX), чтение и выполнение для каталогов и исполняемых файлов.

Назначение этого оператора - дать пользователю возможность предоставлять chmodразличные файлы и каталоги и получать правильные разрешения на выполнение (при условии, что ни в одном из файлов не установлен недопустимый бит выполнения). Это позволяет избежать необходимости различать файлы и каталоги (как в традиционных find . -type f -exec chmod 644 {} +и find . -type d -exec chmod 755 {} +командах), и пытается разумно обращаться с исполняемыми файлами .

(Обратите внимание , что MacOSchmod поддерживает , очевидно , только Xдля +операций.)


Таким образом, я действительно видел это, и я получаю неправильное понимание термина "набор битов". такое индекс с владельцем: root и группой: root и разрешениями ---, ---, ---- индо без "набора битов"?
Arcticooling

Да, ---------означает, что биты не установлены. Вы можете найти этот вопрос полезным.
Стивен Китт

Стивен, я думаю, что добавление определения терминов «набор битов выполнения» (я бы описал как ...,...,...), а также «недопустимый набор битов выполнения» (я бы описал так ---,---,---) в начале ответа могло бы помочь сделать его еще более дидактичным и снизить вероятность того, что кто-то пропустил это; Это было, где я изначально упал с этим.
Arcticooling

@Arcticooling, ну, разрешения закодированы в битах, и, например, в справочной странице GNU chmodговорится, что он «изменяет биты режима файла каждого данного файла» и т. Д. Так что в контексте «исполняемые биты» ссылаются на три возможных (UGO) +xразрешения. На мой взгляд, «биты не установлены» звучит странно, поскольку в них не упоминается никакой контекст.
ilkkachu

@Arcticooling Я добавил параграф, хотя бы для того, чтобы, надеюсь, уточнить ваше понимание - «набор битов выполнения», так как на ...,...,...самом деле ничего не значит, и «недопустимый набор битов выполнения» (что в нем недействительного?).
Стивен Китт

5

Из man chmod:

Буквы rwxXst выбирают биты режима файла для затронутых пользователей: чтение (r), запись (w), выполнение (или поиск каталогов) (x), выполнение / поиск, только если файл является каталогом или уже имеет разрешение на выполнение для некоторых пользователь (X), установка идентификатора пользователя или группы при выполнении (ях), ограниченный флаг удаления или фиксированный бит (t).

(акцент мой).

Однако это не очень проясняет это. В этой статье есть два правила, которые разъясняют, что он делает:


Например, мы запускаем следующую команду chmod для каталога:

# chmod -R u=rwX,g=rX,o=rX testdir/`  

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

  1. Если файл является каталогом, то он устанавливает исполняемый атрибут для владельца, группы и мира, что означает, что они могут войти в этот каталог.

  2. Если файл является обычным файлом, то он добавит исполняемый атрибут к своим разрешениям, если в файле уже установлен некоторый бит выполнения. Если для файла не установлен бит выполнения, он не будет добавлен.

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


Надеюсь , что уточнить использование в X .


1

Пожалуйста, не листайте этот ответ. Это именно то, что я понял из ответа Стивена Китта выше, который я принял как правильный.


1) Заглавная буква X, как в a=rwXследующем: все найденные каталоги получат x, а все найденные обычные файлы, имеющие хотя бы 1 исполняемый бит в одной из трех групп разрешений, также получат x во всех трех группах.

2) Комбинация a-x(которая гарантирует, что все файлы теряют бит выполнения), и последующее a=rwXговорит: Получите биты чтения и записи везде, и бит выполнения только для каталогов.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.