Расширенные атрибуты файлов — это функции файловой системы , которые позволяют пользователям связывать компьютерные файлы с метаданными , не интерпретируемыми файловой системой, тогда как обычные атрибуты имеют строго определенную файловой системой цель (например, разрешения или записи о времени создания и изменения). В отличие от forks , которые обычно могут быть такими же большими, как максимальный размер файла, расширенные атрибуты обычно ограничены по размеру значением, значительно меньшим максимального размера файла. Типичные области применения включают хранение автора документа, кодировки символов текстового документа или контрольной суммы , криптографического хеша или цифрового сертификата , а также информации о дискреционном управлении доступом .
В Unix-подобных системах расширенные атрибуты обычно обозначаются аббревиатурой xattr . [1]
В AIX файловая система JFS2 v2 поддерживает расширенные атрибуты, доступ к которым осуществляется с помощью команды getea . [2] API-интерфейсы getea , [3] setea , [4] listea , [5] statea , [6] и removeea [7] поддерживают извлечение, установку, перечисление, получение информации и удаление расширенных атрибутов.
В ныне несуществующей BeOS и ее преемниках, таких как Haiku , расширенные атрибуты файлов широко используются в базовых и сторонних программах. Файловая система Be позволяет индексировать и запрашивать атрибуты, по сути, давая файловой системе характеристики, подобные базам данных . Использование расширенных атрибутов в системах Be-like разнообразно: например, Tracker и OpenTracker , файловые менеджеры BeOS и Haiku соответственно, оба хранят местоположения иконок файлов в атрибутах, [8] служба Haiku «Mail» хранит все содержимое сообщений и метаданные в расширенных атрибутах файлов, [9] а типы файлов MIME хранятся в их атрибутах. Расширенные атрибуты файлов можно просматривать и редактировать в графическом интерфейсе систем Be-like через файловый менеджер, часто Tracker или его производные.
В FreeBSD 5.0 и более поздних версиях файловые системы UFS1 , UFS2 и ZFS поддерживают расширенные атрибуты, используя семейство системных вызовов extattr_ [10] . Любой обычный файл может иметь список расширенных атрибутов. Каждый атрибут состоит из имени и связанных с ним данных. Имя должно быть строкой с нулевым завершением и существовать в пространстве имен, идентифицируемом идентификатором пространства имен из небольших целых чисел. В настоящее время существует два пространства имен: user и system. Пространство имен user не имеет ограничений относительно именования или содержимого. Пространство имен system в основном используется ядром для списков управления доступом и обязательного управления доступом .
В Linux файловые системы ext2, ext3, ext4, JFS, Squashfs, UBIFS, Yaffs2, ReiserFS, Reiser4, XFS, Btrfs, OrangeFS, Lustre, OCFS2 1.6, ZFS и F2FS [11] поддерживают расширенные атрибуты (сокращенно xattr ) , если они включены в конфигурации ядра . Любой обычный файл или каталог может иметь расширенные атрибуты , состоящие из имени и связанных данных . Имя должно быть строкой с завершающим нулем , предваряемой идентификатором пространства имен и символом точки. В настоящее время существует четыре пространства имен: user, trusted, security и system. Пространство имен user не имеет ограничений в отношении именования или содержимого. Пространство имен system в основном используется ядром для списков управления доступом . Пространство имен security используется , например, SELinux .
Поддержка концепции расширенных атрибутов из проекта POSIX.1e [ требуется ссылка ] , который был отозван [12] в 1997 году, была добавлена в Linux около 2002 года. [13] [14] По состоянию на 2016 год они еще не получили широкого распространения в программах Linux пользовательского пространства, но используются Beagle , OpenStack Swift , Dropbox , фреймворком семантических метаданных KDE (Baloo), Chromium , Wget и cURL .
Ядро Linux позволяет расширенным атрибутам иметь имена до 255 байт и значения до 64 КБ, [15] как это делают XFS и ReiserFS , но ext2 / 3 / 4 и btrfs накладывают гораздо меньшие ограничения, требуя, чтобы все атрибуты (имена и значения) одного файла помещались в один «блок файловой системы» (обычно 4 КБ). Согласно POSIX.1e, [ требуется цитата ] имена должны начинаться с одного из security , system , trusted и user плюс точка. Это определяет четыре пространства имен расширенных атрибутов. [16]
Доступ к расширенным атрибутам и их изменение возможны с помощью команд getfattr
и setfattr
из attr
пакета в большинстве дистрибутивов. [17] API называются getxattr
и setxattr
.
Mac OS X 10.4 и более поздние версии поддерживают расширенные атрибуты, используя функцию файловой системы HFS+ Attributes File B*-tree , которая допускает именованные вилки. Хотя именованные вилки в HFS+ поддерживают произвольно большие объемы данных через экстенты, поддержка расширенных атрибутов ОС поддерживает только встроенные атрибуты, ограничивая их размер тем, который может поместиться в один узел B*-tree. [ необходима цитата ] Любой обычный файл может иметь список расширенных атрибутов. HFS+ поддерживает произвольное количество именованных вилок, и неизвестно, накладывает ли macOS какие-либо ограничения на количество расширенных атрибутов.
Каждый атрибут состоит из имени и связанных с ним данных. Имя представляет собой строку Unicode с нулевым окончанием . Ограничений по пространству имен нет (что делает систему открытой xattr ), а соглашение заключается в использовании обратной строки DNS (аналогично Uniform Type Identifiers ) в качестве имени атрибута.
macOS поддерживает листинг, [18] получение, [19] установку, [20] и удаление [21] расширенных атрибутов из файлов или каталогов с использованием API, подобного Linux. Из командной строки эти возможности доступны через утилиту xattr . [22]
Начиная с macOS 10.5, файлы, полученные из Интернета, помечаются с com.apple.quarantine
помощью расширенных атрибутов файла. [23] В некоторых старых версиях macOS (например, Mac OS X 10.6 ) расширенные атрибуты пространства пользователя не сохранялись при сохранении в распространенных приложениях Cocoa (TextEdit, Preview и т. д.). [ необходима цитата ]
Поддержка расширенных атрибутов файлов была удалена из исходного кода OpenBSD в 2005 году из-за отсутствия интереса к спискам контроля доступа . [24]
В OS/2 версии 1.2 и более поздних версиях файловая система High Performance File System была разработана с учетом расширенных атрибутов, но их поддержка также была встроена в файловую систему FAT DOS. Для совместимости с другими операционными системами, использующими раздел FAT, атрибуты OS/2 хранятся в одном файле " EA DATA. SF
", расположенном в корневом каталоге. Этот файл обычно недоступен, когда операционная система, поддерживающая расширенные атрибуты, управляет диском, но им можно свободно манипулировать, например, в DOS. Файлы и каталоги с расширенными атрибутами используют один или несколько кластеров внутри этого файла. Логический номер кластера первого использованного кластера хранится внутри записи каталога владельца файла или каталога . [25] Эти два байта используются для других целей в файловой системе FAT32, и, следовательно, расширенные атрибуты OS/2 не могут храниться в этой файловой системе.
Части OS/2 версии 2.0 и более поздних версий, такие как Workplace Shell, используют несколько стандартизированных расширенных атрибутов (также называемых EA ) для таких целей, как идентификация типа файла, комментариев, компьютерных значков и ключевых слов о файле. Программы, написанные на интерпретируемом языке Rexx, хранят уже проанализированную версию кода в качестве расширенного атрибута, что позволяет ускорить выполнение.
Solaris версии 9 и более поздние версии позволяют файлам иметь «расширенные атрибуты», которые на самом деле являются форками ; максимальный размер «расширенного атрибута» совпадает с максимальным размером файла, и они читаются и записываются так же, как файлы. Внутри они фактически хранятся и доступны как обычные файлы, поэтому их имена не могут содержать символы «/» [26] , а их владелец и разрешения могут отличаться от родительского файла.
Версия 4 сетевой файловой системы поддерживает расширенные атрибуты во многом так же, как и Solaris.
В Windows NT расширенные атрибуты ограниченной длины поддерживаются FAT , [25] HPFS и NTFS . Это было реализовано как часть подсистемы OS/2 . Они в частности используются сервером NFS подсистемы Interix POSIX для реализации разрешений, подобных Unix. Подсистема Windows для Linux, добавленная в Windows 10 Anniversary Update , использует их для аналогичных целей, сохраняя режим файла Linux, владельца, идентификатор устройства (если применимо) и время файла в расширенных атрибутах. [27]
Кроме того, NTFS может хранить расширенные атрибуты произвольной длины в виде альтернативных потоков данных (ADS), типа ветви ресурсов . Плагины для файлового менеджера Total Commander , такие как NTFS Descriptions и QuickSearch eXtended, поддерживают фильтрацию списка файлов или поиск метаданных, содержащихся в ADS. [28] [29] NTFS-3G поддерживает сопоставление ADS с расширенными атрибутами в FUSE ; он также сопоставляет атрибуты файлов таким образом. [30]
Функциональность EA (Extended Attributes) и ACL (Access Control Lists) теперь доступна для файловых систем ext3. Кроме того, функциональность ACL доступна для NFS.