В этой статье объясняется, как использовать команду chown в Linux для изменения владельца файла или каталога или группы.
Перед тем как начать, давайте посмотрим на вывод команды ls -l, которая предоставит нам информацию о правах доступа к файлам и каталогам.
ls -l
Как вы можете видеть, в домашнем каталоге пользователя с именем Linux есть файл с именем andreyexfile и каталог с именем andreyexdir. Как вы можете видеть во втором и третьем столбцах, владельцем и группой файла и каталога является linux.
Допустим, мы хотим изменить право собственности пользователя на пользователя linux и сделать пользователя с именем andreyex владельцем файла andreyexfile, оставив группу как linux.
Ниже показан правильный синтаксис, позволяющий изменить владельца файла, не затрагивая его группу.
chown <User> <File>
Этот второй пример показывает, как использовать команду chown для изменения прав собственности пользователя и группы на один и тот же файл ( andreyexfile ). Синтаксис аналогичен предыдущему примеру, с той разницей, что двоеточие, за которым следует имя группы, должно быть добавлено после имени пользователя, как показано ниже.
chown <User><:><Group> <File>
Если мы хотим изменить права собственности пользователя и группы на andreyexfile на пользователя root и группу root, поэтому мы вводим следующее:
chown root: root andreyexfile
Как вы теперь можете видеть, права собственности пользователя и группы были изменены на root.
Важно отметить, что вам действительно не нужно указывать группу, если вы хотите изменить владение и пользователя, и группы одному и тому же пользователю. В таком случае вам нужно только ввести пользователя с двоеточием без группы, и группа автоматически изменится на такую же, что и новый владелец. Это означает, что если вы наберете <User:> с последующим двоеточием и не укажете группу после этого, группа файла изменится на группу пользователя.
В приведенном ниже примере и пользователь, и группа должны измениться с root: root на andreyex: andreyex, даже если мы не ввели группу только потому, что мы добавили двоеточие после имени пользователя.
chown andreyex: andreyexfile
Как видите, права собственности и пользователя, и группы были изменены на andreyex.
Изменение владения каталогом требует того же синтаксиса и требует реализации флага, если вы хотите рекурсивно изменить владение, включая подкаталоги и файлы, содержащиеся в каталоге.
Давайте посмотрим на каталоги, подкаталоги и их текущее владение.
ls -Rl
Как видите, у нас есть каталог с именем andreyexdir, владельцем которого является пользователь linux, а группа – это группа linux. Внутри есть подкаталог andreyexsubdir, владельцем и группой которого является корень.
Прежде чем переходить к рекурсивным разрешениям, давайте посмотрим, что произойдет, если мы изменим владельца andreyexdir без флагов. В приведенном ниже примере мы изменим пользователя и группу, владеющую andreyexdir, с linux на andreyex.
chown andreyex: andreyexdir /
Как видите, владелец andreyexdir был успешно изменен на andreyex. Но пользователь и группа подкаталога andreyexsubdir остаются root.
Итак, как рекурсивно изменить владельца, включая подкаталоги и подфайлы?
Для этого вам нужно только добавить флаг -R (Рекурсивный).
В следующем примере показано, как рекурсивно изменить владельца для каталога andreyexdir, его файлов и подкаталогов. Как показано ранее, пользователь и группа основного каталога принадлежат andreyex, а пользователь и группа подкаталога принадлежат пользователю root.
Приведенная ниже команда рекурсивно меняет право владения пользователем на пользователя с именем linux и группу linuxlat.
chown -R linux:linuxlat andreyexdir/
Как вы теперь можете видеть, были изменены права собственности на каталог и его содержимое; это то, что делает флаг -R.
В следующем сценарии объясняется, как рекурсивно изменить владельца всех файлов и каталогов, принадлежащих определенному пользователю.
В этом новом сценарии, как вы можете видеть на следующем рисунке, у нас есть главный каталог andreyexdir, который принадлежит пользователю с именем linux, и группе linuxlat. Подкаталоги и файлы внутри принадлежат пользователям с именами linux, root и linuxlat, группам с именами linuxlat, linux и andreyex.
ls -Rl
Теперь предположим, что мы хотим изменить владельца и группу, владеющую только файлами/каталогами, принадлежащими определенному пользователю. В этом случае мы передадим основной каталог, а также все файлы и подкаталоги, принадлежащие пользователю с именем linux, пользователю с именем andreyex.
Для этого нам нужно реализовать описанный ранее флаг -R, потому что мы хотим изменять разрешения рекурсивно. Кроме того, нам необходимо реализовать параметр –from=, за которым следует имя пользователя текущего владельца (и/или группа, если необходимо), новый пользователь, которому будут принадлежать файлы и каталоги.
chown -R --from=linux andreyex: andreyexdir/
Как видите, все файлы, принадлежащие пользователю с именем linux, теперь принадлежат пользователю с именем andreyex. Таким образом, мы изменяем право собственности на множество файлов, принадлежащих конкретному пользователю, с помощью одной команды.
Заключение
Правильное управление правами на файлы и каталоги является обязательным условием для любого пользователя Linux, работающего с общими ресурсами. Как видите, команды довольно просты для изучения и применения.
Вы можете получить больше информации о chown на https://linux.die.net/man/1/chown. Кроме того, вам может быть интересно прочитать объяснения по Setuid, setgid и sticky bit.
Мы надеемся, что эта статья, объясняющее, как использовать команду chown в Linux, было полезно.