В этой статье мы рассмотрим, как рекурсивно изменять права доступа к файлам и каталогам.

Для наглядного примера, создадим каталог test в каталоге /home. В каталоге /home/test создадим десять директорий и в каждой из этих директорий десять файлов с именами от A до J:

mkdir -p test/dir{00..09}
touch test/dir{00..09}/{A..J}

Как можно видеть из скриншота, по умолчанию для директорий применяются права доступа rwxr-xr-x или в числовом виде 755. Для файлов, по умолчанию установлены права доступа rw-r—r— или в числовом виде 644.

Chmod рекурсивно

Команда chmod позволяет вам изменять права доступа к файлам в символьном или числовом режиме.

Чтобы рекурсивно работать со всеми файлами и каталогами в данном каталоге, используйте команду chmod с параметром -R, ( —recursive). Общий синтаксис рекурсивного изменения прав доступа к файлу выглядит следующим образом:

chmod -R MODE DIRECTORY

Например, чтобы изменить разрешения для всех файлов и подкаталогов в директории /home/test на 777 вы должны использовать:

chmod -R 777 /home/test

Права доступа также можно указать с помощью символьного метода:

chmod -R u=rwx,go=rwx /home/test

Только пользователь root, владелец файла или пользователь с правами sudo могут изменять права доступа к файлу. Будьте особенно осторожны при рекурсивном изменении прав доступа к файлам.

Использование команды Find

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

Наиболее распространенный сценарий — рекурсивное изменение разрешений для файла веб-сайта 644 и разрешений для каталога 755.

Числовой метод:
find /home/test -type d -exec chmod 755 {} \;
find /home/test -type f -exec chmod 644 {} \;


Символьный метод:
find /home/test -type d -exec chmod u=rwx,go=rx {} \;
find /home/test -type f -exec chmod u=rw,go=r {} \;

Команда find ищет файлы или каталоги /home/test и передает каждый найденный файл или каталог команде chmod для установки разрешений.

При использовании команды find с -exec, команда chmod выполняется для каждой найденной записи. Чтобы ускорить операцию, используйте команду xargs, передав сразу несколько записей:

find /home/test -type d -print0 | xargs -0 chmod 755
find /home/test -type f -print0 | xargs -0 chmod 644

Команда chmod с параметрами -R позволяет рекурсивно изменять права доступа к файлу.

Чтобы рекурсивно установить разрешения для файлов в зависимости от их типа, используйте chmod в сочетании с командой find.