Я только что заметил, что после бега
chmod 777 *
в каталоге, который имеет подкаталоги, делает то, что вы ожидаете. Он устанавливает разрешения для всего, включая подкаталоги, на 777. Однако, если вы затем решили, что не хотите этого делать, и запустите
chmod 644 *
Теперь для содержимого подкаталогов устанавливаются неизвестные разрешения, и вы не можете изменить их обратно.
Почему так происходит? Это ожидаемое поведение или ошибка? Есть ли способ восстановить права доступа к файлу?
Поскольку файлы у меня были в zip-файле в другом месте, я просто удалил весь каталог и снова распаковал zip-файл, но мне хотелось бы узнать причины этой «проблемы» и способы ее устранения.
Дополнительная информация: я запускаю эти команды на удаленной машине через SSH.
решение1
Вероятно, для таких целей лучше всего использовать find.
Каталоги должны иметь доступ x, файлы — нет, поэтому набор разрешений разный.
# Files
find . -type f -exec chmod 644 '{}' \;
# Directories
find . -type d -exec chmod 755 '{}' \;
решение2
Способ интерпретации битов разрешений отличается для файлов и каталогов. Читайте info coreutils 'File permissions'
и man 2 chmod
для подробностей. Зачем кому-то может понадобиться сделать все доступным для чтения, записи и исполнения для владельца, группы и всего мира?
Поскольку доказательств больше нет, я могу только предположить, что после вашего chmod
, вы потеряли доступ на запись в .
, текущий каталог. Это можно исправить следующим образом:
chmod u+w $PWD
Затем вы можете изменить режим (разрешения) файлов в$PWD
Выполнив chmod 644 *
, вы также удалиливыполнятьразрешение от любого из файлов, у которых оно было, поэтому они больше не могут быть выполнены ни владельцем, ни группой, ни всем остальным.
решение3
Если вы хотите установить разрешения для каталогов и подкаталогов, вам следует использовать:
chmod -R
-R, --recursive рекурсивно изменять файлы и каталоги
решение4
Я нашел решение своей проблемы.
Прежде всего, спасибо всем, кто написал, ваши ответы действительно были полезны.
Проблема в том, что назначение разрешения 664 всем файлам в текущем каталоге:
chmod 644 *
удаляет разрешения на выполнение для каталогов, которым для корректной работы нужны разрешения на выполнение. Решение довольно простое. Нам просто нужно изменить разрешения для каталогов следующим образом:
chmod 744 dir_name
Где dir_name — это, конечно, имя нашего каталога. Как только мы это сделаем, все вернется на круги своя.