Лекция №9 - umask, дополнительные атрибуты, lsattr, chattr.

На прошлой лекции мы рассмотрели основные права объектов и команды, которые позволяют управлять этими правами. Прежде чем пойдем дальше, хочу показать одно применение команды chmod, для раздачи прав для каталогов и файлов. Например, у нас есть каталог с большим количеством музыкальных файлов. Необходимо, чтобы для всех каталогов свойство x было установлено (так как необходимо в эти каталоги заходить), а на файлах не установлено (так как музыкальные файлы не должны интерпретироваться как исполняемые).Эта задача решается всего двумя командами chmod:

igor@adm-ubuntu:~$ sudo chmod -R 644 ./Музыка/
igor@adm-ubuntu:~$ sudo chmod -R a+X ./Музыка/

Команды необходимо обязательно выполнять от имени администратора, так как забрав право x у каталога команда не сможет зайти в него, чтобы изменить свойства для подкаталога и файлов. Первая команда забирает право x для всех объектов внутри каталога (для этого используется ключ R), аналог команды в мнемоническом исполнении sudo chmod -R a-x ./Музыка/ . Во второй команде выражение a+X (”икс большое”), установит права только для объектов типа каталог. Как видите все просто. И еще один пример если необходимо скопировать права файла и назначить их другому файлу, то для этого существует ключ reference:

igor@adm-ubuntu:~/linux$ chmod –reference=file.txt file1.txt

В результате файл file1.txt будет иметь такие же права как и file.txt.

Давайте теперь поговорим о правах вновь созданных объектов. Если вы создаете объект, то ему присваиваются определенные права заданные по умолчанию. Задаются они при помощи числового шаблона. По умолчанию шаблон равен 0022. Изменить шаблон можно командой umask. Наберите эту команду без параметров, чтобы увидеть текущий шаблон:

igor@adm-ubuntu:~/linux$ umask
0022

Как видим сейчас шаблон равен 0022. Числа соответствуют трем триадам прав. Выполнив команду umask 0127 вы измените шаблон на указанный. Но как применяется данный шаблон? Здесь нужно запомнить два правила:

Если вы создаете файл то значение маски отнимается от значения 0666, а если создаете каталог, то значение маски отнимается от значения 0777. Если быть точным то выполняется операция не вычитания, а XOR. Технические специалисты меня должны понять, для остальных рекомендую придерживаться схемы вычитания: 0666 отнять 0022 будет 0644 (rw-r–r–). Именно такие права будут назначены вновь созданному файлу. Или 0777 отнять 0022 будет 0755 (rwxr-xr-x) для каталога. Также рекомендую запомнить правило, что цифра 7 в шаблоне запрещает все права для своей триады прав объекта. То есть если вы установите umask в 0777, то никакие права не будут установлены:

igor@adm-ubuntu:~/linux$ umask 0777
igor@adm-ubuntu:~/linux$ touch file3.txt
igor@adm-ubuntu:~/linux$ ls -l
итого 20
———- 1 igor igor    0 2009-10-23 12:48 file3.txt

Самый простой способ освоить этот механизм это потренироваться в установке разных значений шаблона при помощи команды umask и посмотреть какие права будут выдаваться вновь создаваемым файлам или каталогам. Тем более, что каждый пользователь может сам устанавливать свой собственный шаблон. То есть шаблон храниться для каждого пользователя отдельно. По умолчанию он равен 0022, но если один пользователь изменит его на другое значение, то у второго пользователя шаблон не изменится. Это тоже нужно понимать и учитывать. О команде umask все, перейдем к следующему вопросу.

Поговорим о дополнительных правах объектов в родной файловой системе Linux - ext2/ext3. Права rwxrwxrwx, о которых мы говорили раньше назначаются всем объектам всех поддерживаемых файловых систем в Linux. Если файловая система не поддерживает такие права (например та же FAT), то они устанавливаются искусственно. Для родной файловой системы Linux - ext2/ext3 определены дополнительные атрибуты (биты) для объектов. Хочу сразу отметить, что в подавляющем большинстве случаев вам не придется с ними работать, но знать о том, что они есть нужно. Коротко опишем некоторые из них.

A - не обновлять время доступа к объекту. Теоретически установка этого атрибута должна повысить производительность файловой системы и соответственно системы в целом.

а - указывает, что в файл можно добавлять информацию, но нельзя удалять.

d - указывает на то, что не нужно делать резервные копии файла. Файл будет проигнорирован командой dump.

i - указывает на то, что файл нельзя удалять и модифицировать.

s - указывает, что при удалении файла место где был размещен файл будет перезаписано нулями.

u - указывает на то, что при удалении файла его нужно куда-то сохранить.

Существуют и другие атрибуты. О них вы можете прочесть в справке. Там же вы можете увидеть, что атрибуты s и u пока не реализованы в ext2/ext3. Возможно они поддерживаются в ext4.

Для просмотра дополнительных атрибутов существует команда lsattr. Если вы выполните команду lsattr /, то увидите дополнительные права для файловых систем ext2/ext3 и увидите сообщение об ошибке для других файловых систем. Изменять дополнительные атрибуты можно командой chattr. Принцип работы схож с командой chmod. Например, chattr +A file.txt добавит атрибут А к файлу file.txt.

Прочесть о дополнительных атрибутах вы можете по команде man chattr.

В качестве домашнего задания попробуйте найти где задается значение umask.

Читать другие лекции по курсу Администратор ПК с Linux

Статьи и новости схожей тематики:

Комментариев: 6

  1. andrew:

    Первая команда забирает право x для всех объектов внутри каталога (для этого используется ключ R) - если -R забирает право - то и добавляет - а этот ключ используется в обоих случаях:
    igor@adm-ubuntu:~$ sudo chmod -R 644 ./Музыка/
    igor@adm-ubuntu:~$ sudo chmod -R a+X ./Музыка/

    Ответить

    Igorka Reply:

    Ключ R используется чтобы команда chmod была выполнена рекурсивно для всех объектов внутри каталога.

    Ответить

  2. andrew:

    igor@adm-ubuntu:~$ sudo chmod -R a+X ./Музыка/
    данная строка снова добавит всем объектам право X - или я не прав?

    Ответить

    Igorka Reply:

    Во второй команде выражение a+X (”икс большое”), установит права только для объектов типа каталог. Файлы останутся без права x.

    Ответить

  3. IgorNix:

    andrew прав
    ключ -R обозначает что действия будут произведены для ВСЕХ типов обектов каталога.
    Этими строками:
    igor@adm-ubuntu:~$ sudo chmod -R 644 ./Музыка/
    igor@adm-ubuntu:~$ sudo chmod -R a+X ./Музыка/

    …сначала убераешь всем обектам право х, а потом второй строкой снова же всем даёшь право х и каталогам и муз файлам!!! Думаю во второй строке ключь -R лишний.

    Ответить

    Igorka Reply:

    Нет, andrew не прав. Я ему объяснил почему.
    И вы тоже ошибаетесь насчет “всем даёшь право х и каталогам и муз файлам!!!” и “Думаю во второй строке ключь -R лишний” . Между x и X (икс большое, я не зря написал это словами) есть разница, о которой я упомянул выше.

    Ответить

Оставьте свой отзыв