Chmod не работает как ожидалось

Chmod не работает как ожидалось

Когда я собираюсь изменить разрешение файла таким образом

 $ sudo chmod a+x *.* 

Эта ошибка появляется

 chmod: cannot access ‘*.*’: No such file or directory

И когда я хочу изменить права доступа к каждому файлу в каталоге с помощью

 $ sudo chmod a+x directory/* 

Та же ошибка появляется

 chmod: cannot access ‘directory/*’: No such file or directory

Когда я пробую ту же команду в другом каталоге, она работает, но в этом каталоге /var/www/html она не работает, но даже когда я изменяю права доступа к файлу file на a+x, когда я запускаю

 ls

Появляется ошибка разрешения

 ls: cannot open directory .: Permission denied

решение1

Расширение файла в Linux не является чем-то особенным, это просто часть имени файла. Файловая подстановка оболочки используется *для всех символов, поэтому вы можете просто использовать chmod a+x *вместо.

решение2

Проблема ls, похоже, заключается в том, что у вас недостаточно прав доступа к каталогу.https://stackoverflow.com/a/15800917/3501748утверждает: для просмотра содержимого каталогов необходимо иметь разрешение на выполнение.

cdвернитесь на уровень ниже и посмотрите, какие разрешения у каталога, из которого вы только что пришли. sudoне дает вам никаких прав на доступ к папке, если у root нет никаких прав на эту папку. Может быть, sudo -u <username>это поможет.

Если вам необходимо выполнить рекурсию по дереву каталогов ниже начальной точки, используйте chmod -R.

решение3

Во-первых, я хотел бы выразить признательность существующим ответам:

  • Как говорит UweBurger, один из них используется *для общего подстановочного знака в Ubuntu (или, как я полагаю, в Unix в целом). (Возможно ли, что directoryв вашем примере он пуст, что и приводит к ошибке chmod: cannot access ‘directory/*’: No such file or directory?)
  • Как предположил northern-bradley, можно использовать флаг Rin chmod, чтобы он рекурсивно обходил дерево, изменяя разрешения всего, что находится под вашей текущей точкой. То есть, используйте chmod -R directory, или если у вас недостаточно привилегий sudo chmod -R directory(однако, убедитесь, что вы непреднамеренно не измените разрешения на системные файлы при использованииsudoкchmod; у вашего пользователя просто нет привилегий сделать это, что делает первый вариант более безопасным).

Однако я хотел бы добавить, что вы, возможно, не захотите изменять права доступа к каталогам таким же образом, как вы это делаете с файлами. Как объясняется вофициальная документация, разрешение на чтение ( r) для каталогов означает возможность просмотра их содержимого (например, с помощью ls), разрешение на запись ( w) позволяет пользователю создавать/удалять файлы в нем, а xразрешение на выполнение ( ) — cdвнутри. Есть отличный ответздесьпредлагая метод для различения файлов и каталогов при применении новых разрешений рекурсивно. Вариант с xargsиспользованиемпредположительно быстрее. Вы можете добавить флаг r, чтобы xargsизбежать ошибки в случае, если findничего не возвращает, и если вам нужны rootпривилегии, вы должны использовать sudoдля обеих половин канала (опять же, будьте осторожны, когда chmodиспользуете root), так что это будет:

sudo find [путь/к/каталогу] -type d -print0 | sudo xargs -0r chmod [требуемые-права-каталога]

sudo find [путь/к/каталогу] -type f -print0 | sudo xargs -0r chmod [желаемые-права-для-файла]

где [desired-*-permissions]можно датьявно( 777) илииспользуя буквы(нравиться a+x).

Связанный контент