ИМЯ
ioctl_iflags -
операции ioctl()
для флагов
иноды
ОПИСАНИЕ
Различные
файловые
системы Linux
поддерживают
флаги
иноды —
атрибуты,
которые
изменяют
смысл
файлов и
каталогов.
Эти флаги
можно
запросить
и изменить
с помощью
двух
операций
ioctl(2):
int attr;
fd = open("pathname", ...);
ioctl(fd, FS_IOC_GETFLAGS, &attr); /* помещает текущие флаги
в 'attr' */
attr |= FS_NOATIME_FL; /* изменяет полученную битовую маску */
ioctl(fd, FS_IOC_SETFLAGS, &attr); /* обновляет флаги иноды,
на которую указывает 'fd' */
Команды
оболочки
lsattr(1) и chattr(1)
предоставляют
интерфейс
к этим двум
операциям,
позволяя
пользователю
просматривать
и изменять
флаги
иноды,
связанной
с файлом.
Поддерживаются
следующие
флаги
(показаны
вместе с
соответствующей
буквой,
которой
обозначается
флаг в lsattr(1) и
chattr(1)):
- FS_APPEND_FL
'a'
- Файл можно
открыть
только с
флагом O_APPEND
(это
ограничение
не обойти
даже
суперпользователю).
Только
привилегированный
процесс
(CAP_LINUX_IMMUTABLE) может
установить
или
сбросить
этот
атрибут.
- FS_COMPR_FL
'c'
- Хранить
файл на
диске в
сжатом
виде. Этот
флаг не
поддерживается
реализациями
большинства
основных
файловых
систем;
исключением
является
btrfs(5).
- FS_DIRSYNC_FL
'D' (начиная с Linux
2.6.0)
- Синхронно
записывать
изменения
каталога
на диск.
Этот флаг
предоставляет
эквивалент
параметра
MS_DIRSYNC вызова
mount(2), но для
каталога.
Этот флаг
применим
только для
каталогов.
- FS_IMMUTABLE_FL
'i'
- Файл
постоянный
(immutable): не
допускает
изменение
содержимого
и
метаданных
(прав,
меток
времени,
владельцев,
счётчика
ссылок и т.
п.) (это
ограничение
не обойти
даже
суперпользователю).
Только
привилегированный
процесс
(CAP_LINUX_IMMUTABLE) может
установить
или
сбросить
этот
атрибут.
- FS_JOURNAL_DATA_FL
'j'
- Включение
журналирования
данных
файла в
файловых
системах
ext3(5) и ext4(5). В
файловой
системе с
журналиванием
в режиме ordered
или writeback
привилегированный
(CAP_SYS_RESOURCE)
процесс
может
установить
этот флаг
для
включения
журналирования
изменения
данных
пофайлово.
- FS_NOATIME_FL
'A'
- Не
изменять
время
последнего
доступа к
файлу при
доступе.
Это может
увеличить
произвольность
ввода-вывода
в
приложениях,
которым не
нужна
точность
этой метки
времени.
Данный
флаг
предоставляет
функциональность
флага MS_NOATIME
вызова mount(2),
но
пофайлово.
- FS_NOCOW_FL
'C' (начиная с Linux
2.6.39)
- Файл не
будет
подвергаться
обновлениям
копирования-при-записи.
Этот флаг
работает
только в
файловых
системах с
поддержкой
копирования-при-записи,
таких как Btrfs.
Смотрите
chattr(1) и btrfs(5).
- FS_NODUMP_FL
'd'
- Не
включать
этот файл в
резервную
копию,
создаваемую
dump(8).
- FS_NOTAIL_FL
't'
- Этот флаг
поддерживается
только в Reiserfs.
Он
отключает
свойство Reiserfs
упаковки
хвостов,
которая
пытается
упаковывать
маленькие
файлы (и
конечные
фрагменты
больших
файлов) в в
дисковые
блоки
метаданных
файла.
- FS_PROJINHERIT_FL
'P' (начиная с Linux
4.5)
- Наследовать
ID квоты
проекта.
Файлы и
подкаталоги
будут
наследовать
ID проекта
каталога.
Этот флаг
можно
применять
только для
каталогов.
- FS_SECRM_FL
's'
- Помечать
файл для
безопасного
удаления.
Это
свойство
не
реализовано
во всех
файловых
системах,
так как
задача
безопасного
стирания
файла с
хранящего
носителя
на
удивление
сложна.
- FS_SYNC_FL
'S'
- Выполнять
обновления
файла
синхронно.
Для файлов,
это
приводит к
выполнению
синхронной
записи (как
если бы все
файлы
открывались
с флагом O_SYNC).
Для
каталогов,
это
приводит к
тому
эффекту
что и флаг
FS_DIRSYNC_FL.
- FS_TOPDIR_FL
'T'
- Пометить
каталог
для
специальной
обработки
по
стратегии
выделения
блоков
Орлова.
Подробности
смотрите в
chattr(1). Этот
флаг можно
применять
только к
каталогам
и он
действует
только в ext2, ext3
и ext4.
- FS_UNRM_FL
'u'
- Разрешить
файлу быть
не
удалённым,
если он
удалён. Это
свойство
реализовано
во всех
файловых
системах,
так как
возможно
реализовать
механизм
восстановления
файла вне
ядра.
В
большинстве
случаев,
когда
какой-либо
из флагов
установлен
на
каталоге,
этот флаг
наследуется
файлами и
подкаталогами,
созданными
внутри
каталога.
Исключением
является
FS_TOPDIR_FL,
который не
наследуется
и FS_DIRSYNC_FL,
который
наследуется
только
подкаталогами.
СООТВЕТСТВИЕ
СТАНДАРТАМ
Флаги
иноды
являются
нестандартным
расширением
Linux.
ЗАМЕЧАНИЯ
Для
изменения
флагов
иноды
файла
используется
операция
FS_IOC_SETFLAGS;
эффективный
идентификатор
пользователя
вызывающего
должен
совпадать
с
владельцем
файла или
вызывающий
должен
иметь
мандат CAP_FOWNER.