linux Владельцы (пользователи и группы) папок и файлов -- как их узнать, менять и понять в терминале (консоли, рекурсивная смена)

Владельцы в Linux - кто они

В Linux у ресурса (файла или папки) есть как бы два "владельца":

  • владеющий пользователь
  • владеющая группа пользователей

Т.е. файлом может владеть (и всегда владеет какой-то) пользователь user1 и какая-то группа group22, при этом нужно понимать пользователь user1 в общем случае может и не состоять в группе group22.

Как узнать владельца файла или папки

Используйте команду ls c флагами -la, перейдете в папку с содержимым, для которого вы хотите узнать владельцев:

ls  -la

ответом может быть что-то вроде:

total 8
drwxrwxr-x 2 qwer qwer  4096 июн  2 19:23 .
drwxrwxr-x 6 qwer qwer  4096 июн  2 19:15 ..
-rw-rw-r-- 1 qwer games    0 июн  2 19:16 myfile1
-rw-rw-r-- 1 qwer qwer     0 июн  2 19:23 myfile2

-- в примере выше:

  • myfile1 имеет владельцев: юзера qwer и группу games
  • myfile2 имеет владельцев: юзера qwer и группу с тами же именем

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

ls -la  /path/to/file

например:

ls -la myfile1

ответ в моем случае:

-rw-rw-r-- 1 qwer games 0 июн  2 19:16 myfile1

Как сменить владельца

Сменить владельца можно с помощью команды chown, причем её формат такой:

chown [парараметры] имяпользователя:имягруппы путькресурсу

Например смена владельца-пользователя файла на user2:

 chown user2 myfile

Смена владеющей группы с текущей на games:

chown :games myfile

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

 chown user2:games myfile

Т.е. имя пользователя от имени группы, если они идут рядом отделяется в данном случае двоеточием.

ПРИМЕЧАНИЕ: есть ограничения логичные на смену владельцев, а именно:

  • 1) чтобы сменить владельца-пользователя на другого надо выполнять chown под суперпользователем (для этого служит команда sudo).
  • 2) чтобы сменить группу-владельца, надо, чтобы пользователь состоял и в текущей группе и в той, на которую надо сменить (т.е. в обеих), в противном случае опять же потребуются права суперпользователя.

Рекурсивная смена владельцев для всего содержимого папки

Делаем пользователя training владельцем для всего содержимого папки /usr/lib/hadoop-0.20-mapreduce/input такой комадой:

sudo chown -R training  /usr/lib/hadoop-0.20-mapreduce/input

а папки /usr/lib/hadoop так:

sudo chown -R training /usr/lib/hadoop

- как показывает практика флаг -R можно писать и имени пользователя и/или группы)