Когда я собираюсь изменить разрешение файла таким образом
$ 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, можно использовать флаг
R
inchmod
, чтобы он рекурсивно обходил дерево, изменяя разрешения всего, что находится под вашей текущей точкой. То есть, используйте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
).