9.6. Выполнение массовых операций командой chown

Проблема

Необходимо изменить владельца каталога и всего его содержимого, лишь содержимого или отдельных файлов из списка. Также может возникнуть потребность в передаче права владения файла от одного пользователя к другому. Эти задачи часто встречаются при администрировании систем Linux, особенно когда требуется изменить права доступа к большому числу файлов после переноса данных или при изменении структуры пользователей.

Решение

Для выполнения массовых операций удобно использовать команду chown. Она поддерживает возможность рекурсивной обработки каталогов и может менять владельца на основе имени пользователя или UID. Также, для более сложных случаев, можно использовать команду find, которая позволяет искать файлы по определённым критериям, таким как владелец или UID, и выполнять действия, например, передачу права владения. В сочетании с метасимволами командной строки, это даёт мощные инструменты для работы с файловыми правами.

Для смены владельца сразу нескольких файлов, перечислите их, разделяя пробелами:

# chown carlas file.txt file2.txt file3.txt

Также можно использовать метасимволы командной строки, что значительно упрощает работу с группами файлов:

# chown carlas *.txt

Когда необходимо передать все файлы от одного пользователя другому, воспользуйтесь следующей командой. Она меняет владельца всех файлов, принадлежащих valh, на пользователя piglet, и делает это рекурсивно для всего каталога:

# chown -R -v --from valh piglet /shared/scripts

Для выполнения аналогичной операции с использованием команды find, которая может оказаться полезной, если требуется найти файлы по определённым критериям, например, UID:

# find / -user valh -exec chown -v piglet {} \;

Команда find также позволяет находить файлы по их коду UID, что может быть полезно, если нужно сменить владельца на основе UID, а не имени пользователя:

# find / -uid 1050 -exec chown -v 1200 {} \;

Для смены владельца каталога вместе со всеми подкаталогами и файлами рекурсивно, с подробным выводом каждого изменения:

# chown -R -v piglet /shared/scripts
changed ownership of 'scripts/backups.tgz' to piglet
changed ownership of 'scripts/fake-spec-rpm' to piglet

В этой команде можно использовать как имя пользователя, так и UID. Это особенно полезно, если учетная запись пользователя была удалена, и в системе остались файлы без владельца. В этом случае их можно найти и обработать, используя UID, который продолжает существовать в системе даже после удаления пользователя.

Массовые операции с файлами и каталогами при помощи chown и find позволяют эффективно управлять правами доступа, особенно когда речь идёт о крупных проектах или серверных системах с множеством пользователей. Возможность работы с UID позволяет избежать проблем, связанных с отсутствием пользовательских учётных записей. Использование команды chown с параметром -R (рекурсивно) даёт возможность оперативно изменить права на целые каталоги и их содержимое, что экономит значительное количество времени для системных администраторов.

См. также

info chown; раздел 8.