Разрешения установлены на неизвестно после chmod 777

Разрешения установлены на неизвестно после chmod 777

Я только что заметил, что после бега

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 — это, конечно, имя нашего каталога. Как только мы это сделаем, все вернется на круги своя.

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