ENGLISH | KOI | WIN | ALT | ISO
Мои программы

Как поменять...

Владельца и группу.

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

Безусловно, это может сделать root.
Поменять владельца файла не может никто, кроме root'а.
А вот группу для файла может, также, поменять сам владелец файла, но только в том случае, если он сам является членом этой (новой) группы.

Для изменения владельца файла служит команда chown ("change owner"). С ее помощью можно заодно заменить и группу, хотя для изменения этого атрибута есть специальная команда chgrp ("change group").

Подробно об этих командах можно прочитать в соответствующих man'уалах (man chown и man chgrp). Поэтому, рассмотрим только их краткое описание.

Команда chown

Команда chown выглядит очень просто

chown "новый владелец" "имя файла"

если же вы хотите поменять не только владелец, но и группу, то

chown "новый владелец":"новая группа" "имя файла"

Кстати, никто не мешает указать в команде "старого" владельца, тогда изменится только группа.

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

Если же вы хотите, чтобы аналогичная операция была проделана не только в текущей директории, но и во всех "нижележащих" поддиректориях, вам поможет ключ -R (recursively).

Например, команда

chown -R vasia:users *

заменит владельца на vasia, а группу на users для всех файлов и поддиректорий, находящихся в текущей директории и "ниже", то есть в самих поддиректориях.

Команда chgrp

Команда chgrp очень похожа не предыдущую, толко в качестве первого аргумента ей нужно указать название новой группы для файла (или файлов).

chgrp "новая группа" "имя файла"

Естественно, все что было сказано о команде chown относительно выполнения ее над несколькими файлами и о ключе -R, также относится и к команде chgrp.

Права доступа (permissions)

Права доступа, кроме root'а может поменять также и владелец этого файла (директории). Кстати, обратите внимание, что хозяин файла может нечаянно установить такие биты доступа, что сам не сможет пользоваться этим файлом по назначению. Правда, никто не помешает ему же и исправить собственную ошибку.

Итак, для изменения прав доступа (permissions) служит команда chmod ("change mode"). В целом эта команда выглядит как и предыдущие (которые меняют владельца и группу)

chmod "что сделать" "имя файла"

Но, в отличии от предыдущих команд, второй аргумент ("что сделать") имеет несколько более сложный вид.
В нем можно выделить три части

"категория юзеров" "операция" "биты прав доступа"
u (user) владелец
g (group) группа
o (other) все остальные
a (all) все три категории
-
+
=
r
w
x
s или t

Как понятно из таблицы, первой задается категория юзеров (владелец, группа или "все остальные"). Причем, можно поставить сразу несколько букв, обозначив тем самым сразу несколько категорий. Например, go будет означать, что права меняются сразу и для группы и для "всех остальных". Если надо изменить права сразу для трех категорий, можно написать три буквы - ugo или одну букву a (все три категории).

Следом указывается "операция" (добавить права или наоборот - убрать). И, наконец, после "операции" один или несколько битов доступа, которые требуется изменить. Значение этих битов подробно рассматривалось выше, поэтому здесь не будем на них останавливаться.

Некоторых пояснений, наверное, требует "операция". Как можно догадаться, знаки "-" и "+" означают "убрать" или "поставить" соответствующие права.

А знак "=" означает сразу и то и другое. Дело в том, что если вы укажете, например o+x это будет означать - добавить бит x для категории "остальные", но никак не повлияет на биты r и w для этой же категории. А указав действие как o=rx, вы тем самым скажете системе - "установить биты r и x, и убрать бит w, если он там был".

Бит s имеет разный смысл (suid или sgid) в зависимости от того, в какой части permissions он находится. Поэтому, если вы хотите поставить именно suid бит, то "что сделать" должно выглядеть как u+s, а если вам нужен sgid, то - g+s. Sticky бит ставится командой chmod a+t ... .

Как видите, синтаксис этой команды достаточно гибкий (хотя и несколько сложноватый). Кроме того, второй аргумент ("что сделать") может состоять из нескольких "действий" перечисленных через запятую.

Например, можно задать команду

chmod a=rx,u+w mydir

это будет означать - "для всех категорий права r-x, а для владельца еще и w (право записи)".

Кроме того, команда chmod (точнее - ее первый аргумент) имеет еще одну форму.

Поскольку, все биты доступа это действительно двоичные биты из одной ячейки, "продвинутый" пользователь может указать сразу число (в восьмеричном виде) которое должно получится после изменения прав.

Восьмеричное представление выбрано потому, что при переводе в него двоичного числа, каждая группа из трех бит "сворачивается" в одну цифру. Таким образом, вам надо просто указать три цифры, каждая из которых описывает отдельную категорию юзеров (точнее - права для этой категории). Например, permissions rwxr-xr-x можно представить в восьмеричном виде как 755. И, следовательно, такие права могут быть выставлены командой

chmod 755 myfile

Что касается выполнения этой операций над несколькими файлами или "рекурсивного" обхода всех поддиректорий, здесь все так же, как для команд chown, chgrp. В качестве имени файла может быть задан "шаблон", а для обхода всех поддиректорий используйте ключ -R.

И, конечно, я советую все таки прочитать man chmod.

Флаги.

Кто может менять флаги (и какие) подробно описывалось в разделе о флагах.

Команда, которая их ставит/убирает - chflags ("change flags"). Формат ее достаточно простой

chflags "флаги" "имя файла"

Аргумент "флаги" - это название флага или нескольких флагов через запятую. Названия флагов описаны в разделе о флагах. Кроме того, эта команда понимает и сокращенные названия.

  • sappend - sappnd
  • uappend - uappnd
  • sunlink - sunlnk
  • uunlink - uunlnk
  • simmutable - schange или schg
  • uimmutable - uchange или uchg
  • arcived - arch
  • (флаг nodump не сокращается :-)

Для того, чтобы убрать флаг, надо указать его название с префиксом no - nosappnd, nosunlnk, noschg и т.п.

Исключение составляет флаг nodump. Чтобы его убрать нужно сказать не nonodump, а просто dump. :-)

Естественно, как и предыдущие команды chflags может применяться к нескольким файлам и "рекурсивно" обходить поддиректории (ключ тот же - -R).