На странице написано:
выполнять / искать, только если файл является каталогом или уже имеет разрешение на выполнение для некоторого пользователя ( 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
для +
операций.)
---, ---, ---
- индо без "набора битов"?---------
означает, что биты не установлены. Вы можете найти этот вопрос полезным....,...,...
), а также «недопустимый набор битов выполнения» (я бы описал так---,---,---
) в начале ответа могло бы помочь сделать его еще более дидактичным и снизить вероятность того, что кто-то пропустил это; Это было, где я изначально упал с этим.chmod
говорится, что он «изменяет биты режима файла каждого данного файла» и т. Д. Так что в контексте «исполняемые биты» ссылаются на три возможных (UGO)+x
разрешения. На мой взгляд, «биты не установлены» звучит странно, поскольку в них не упоминается никакой контекст....,...,...
самом деле ничего не значит, и «недопустимый набор битов выполнения» (что в нем недействительного?).Из
man chmod
:(акцент мой).
Однако это не очень проясняет это. В этой статье есть два правила, которые разъясняют, что он делает:
Например, мы запускаем следующую команду chmod для каталога:
Используя верхний регистр X, указанная выше команда устанавливает исполняемый атрибут в соответствии со следующими двумя правилами:
Если файл является каталогом, то он устанавливает исполняемый атрибут для владельца, группы и мира, что означает, что они могут войти в этот каталог.
Если файл является обычным файлом, то он добавит исполняемый атрибут к своим разрешениям, если в файле уже установлен некоторый бит выполнения. Если для файла не установлен бит выполнения, он не будет добавлен.
Используя строчную букву х, было бы невозможно достичь этого результата только одной командой.
Надеюсь , что уточнить использование в X .
источник
Пожалуйста, не листайте этот ответ. Это именно то, что я понял из ответа Стивена Китта выше, который я принял как правильный.
1) Заглавная буква X, как в
a=rwX
следующем: все найденные каталоги получат x, а все найденные обычные файлы, имеющие хотя бы 1 исполняемый бит в одной из трех групп разрешений, также получат x во всех трех группах.2) Комбинация
a-x
(которая гарантирует, что все файлы теряют бит выполнения), и последующееa=rwX
говорит: Получите биты чтения и записи везде, и бит выполнения только для каталогов.источник