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.