В этой статье мы рассмотрим, как рекурсивно изменять права доступа к файлам и каталогам.
Для наглядного примера, создадим каталог 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.