Кроме «общих» расширенных атрибутов, которые используются разными компонентами операционной системы, каждая файловая система зачастую имеет собственные атрибуты файлов, управляющие ее поведением и функциями при доступе к файлам.
Так, файловые системы ext2/ext3/ext4 управляются специальными атрибутами-флагами, например a (append only), i (immutable), s (secure deletion), S (synchronous updates) и np.
Флаг s заставляет файловую систему при удалении файла не только высвобождать принадлежащие ему блоки, но и обнулять их, а флаг S заставляет операции записи в файл выполняться синхронно (немедленно), минуя отложенную запись с использованием дискового кэша.
Флаг i делает файл «неприкасаемым» — его нельзя ни изменить, ни удалить никому, даже суперпользователю root. Флаг а делает файл «накопительным», т. е. никому не дает изменять имеющуюся в файле информацию или удалять файл, а позволяет только добавлять данные в его конец.
Устанавливать флаги файлов разрешено их владельцам, а установка отдельных флагов, например а или i, требует определенных привилегий процесса.
Для просмотра флагов файлов предназначена утилита lsattr, а для их изменения — утилита chattr, что иллюстрирует листинг ниже на примере флага i.
Листинг флаги файлов
john@ubuntu:/srv/klngdom/stash$ lsattr
—————e- ./README.mike
—————e- ./README
john@ubuntu:/srv/kingdom/stash$ chattr +i README.mike
chattr: Операция не позволяется while setting flags on README.mike
john@ubuntu:/srv/kingdom/stash$ sudo chattr +1 README.mike
john@ubuntu:/srv/klngdom/stash$ lsattr README.mike
—-i———e- README.mike
john@ubuntu: /srv/kingdom/stash$ date > README.mike
-bash: README.mike: Операция не позволяется
john@ubuntu:/srv/klngdom/stash$ rm README. mike
rm: невозможно удалить «README.mike»: Операция не позволяется
john@ubuntu: /srv/klngdom/stash$ sudo rm README.mike
rm: невозможно удалить «README.mike»: Операция не позволяется!
Всестороннее рассмотрение разнообразных файлов, их свойств, атрибутов и контекстов использования неизбежно должно приводить к выводу, что файл является универсальной сущностью, позволяющей организовать однородный доступ к информации, вне зависимости от свойств ее источника.
Специальные файлы устройств, именованные каналы и сокеты имеют файловую при
роду и могут обрабатываться совершенно «обычными» программами за счет идентичности их файлового программного интерфейса, наравне с файлами «обычных» (дисковых), сетевых, псевдофайловых и внеядерных файловых систем.
Подсистема управления процессами, в которой пойдет речь в следующей статье, тоже не обходится без файлов и использует механизм их отображения в память для организации виртуальной памяти и средств межпроцессного взаимодействия, таких как разделяемая память, очереди сообщений (в реализации POSIX, но, к сожалению, не в реализации SYSV) и семафоры. Даже сетевые сокеты, рассмотрение которых отложено до главы 6, тоже на поверку оказываются файлами.
Таким образом, понимание файла, как основополагающей компоненты операционной системы, дает ключ к пониманию многих других ее частей, а навыки мониторинга файлов или трассировки файлового интерфейса позволяют заглянуть в корень практически всех ее механизмов.