1

У меня есть папка с некоторым содержимым (три файла и папка), которые выглядят так:

-rwxr-xr-x 1 max max 14504 2011-05-31 16:55 main.css
-rwxr-xr-x 1 max max  2504 2011-05-31 16:55 reset.css
-rwxr-xr-x 1 max max   916 2011-05-31 16:55 scaffold.css
drwxrwxr-x 3 max max  4096 2011-05-31 16:55 ui-lightness

Я хочу добавить групповую запись ко всем из них и удалить статус исполняемого файла для всех пользователей. Я делаю файлы в первую очередь:

$ chmod g+w main.css reset.css scaffold.css 
$ chmod a-x main.css reset.css scaffold.css 
$ ls -l
total 28
-rw-rw-r-- 1 max max 14504 2011-05-31 16:55 main.css
-rw-rw-r-- 1 max max  2504 2011-05-31 16:55 reset.css
-rw-rw-r-- 1 max max   916 2011-05-31 16:55 scaffold.css
drwxrwxr-x 3 max max  4096 2011-05-31 16:55 ui-lightness

Все идет нормально. Теперь в папке ui-lightness уже есть запись группы, поэтому я просто хочу удалить из нее статус exe и все файлы и подпапки внутри.

$ ls -l ui-lightness/
total 40
drwxrwxr-x 2 max max  4096 2011-05-31 16:55 images
-rwxrwxr-x 1 max max 34146 2011-05-31 16:55 jquery-ui-1.8.11.custom.css

$ chmod -R a-x ui-lightness/
chmod: cannot access `ui-lightness/jquery-ui-1.8.11.custom.css': Permission denied
chmod: cannot access `ui-lightness/images': Permission denied

$ ls -l ui-lightness/
ls: cannot access ui-lightness/jquery-ui-1.8.11.custom.css: Permission denied
ls: cannot access ui-lightness/images: Permission denied
total 0
d????????? ? ? ? ?                ? images
-????????? ? ? ? ?                ? jquery-ui-1.8.11.custom.css
$ 

Мой первый инстинкт - немного паниковать. Но добавление статуса x обратно исправляет это!

$ chmod -R a+x ui-lightness/

$ ls -l ui-lightness/
total 40
drwxrwxr-x 2 max max  4096 2011-05-31 16:55 images
-rwxrwxr-x 1 max max 34146 2011-05-31 16:55 jquery-ui-1.8.11.custom.css

Кто-нибудь может объяснить, что здесь происходит? И как я могу удалить статус исполняемого файла, не путая все? Это в Ubuntu 9.10 на случай, если это актуально.

ура, макс

2 ответа2

9

Чтобы удалить статус исполняемого файла только для файлов, используйте:

$ chmod -R a-x+X ui-lightness/

Опция +X определена (см. man chmod) для:

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

Таким образом, опция -x в нижнем регистре сначала удаляет состояние исполняемого файла из всех файлов (и, конечно, каталогов), а затем опция +X в верхнем регистре устанавливает его только для каталогов.

У него есть один незначительный недостаток: он устанавливает статус исполняемого файла для всех подкаталогов, даже для тех, которые не были установлены до вызова chmod . Если это не то, что вы хотите, просто используйте решение find Кита.

8

Первый параметр вашего рекурсивного chmod - это сам каталог. Вы удалили бит x в каталоге, сделав его недоступным для поиска (это то, что бит x делает для каталога). Тогда программа chmod больше не сможет искать внутри этого каталога, и вы получите ошибки прав доступа. попробуйте следующее.

chmod -R a-x ui-lightness/*

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .