拡張ファイル属性は、ファイルシステムが解釈しないメタデータをコンピュータファイルに関連付けることができるファイルシステム機能です。一方、通常の属性は、ファイルシステムによって厳密に定義された目的(アクセス許可や作成・変更時刻の記録など)を持ちます。通常、最大ファイルサイズまで大きくなるフォークとは異なり、拡張属性のサイズは通常、最大ファイルサイズよりもかなり小さい値に制限されます。一般的な用途としては、文書の作成者、プレーンテキスト文書の文字エンコーディング、チェックサム、暗号化ハッシュ、デジタル証明書、および任意アクセス制御情報の保存などが挙げられます。
AIXでは、JFS2 v2 ファイルシステムは拡張属性をサポートしており、geteaコマンドを使用してアクセスできます。[ 2 ] getea 、[ 3 ] setea、[ 4 ] listea、[ 5 ] statea、[ 6 ]およびremoveea [ 7 ] API は、拡張属性の取得、設定、一覧表示、情報の取得、および削除をサポートしています。
現在では廃止されたBeOSやHaikuなどの後継システムでは、拡張ファイル属性が基本プログラムやサードパーティ製プログラムで広く使用されています。Beファイルシステムは属性のインデックス作成とクエリを可能にし、実質的にファイルシステムにデータベースのような特性を与えています。Be ライクなシステムにおける拡張属性の使用法は多岐にわたります。たとえば、BeOS と Haiku のファイルマネージャであるTrackerとOpenTrackerは、どちらもファイルアイコンの場所を属性に格納しています。 [ 8 ] Haiku の「メール」サービスは、すべてのメッセージコンテンツとメタデータを拡張ファイル属性に格納しています。 [ 9 ]また、ファイルの MIME タイプも属性に格納されています。拡張ファイル属性は、ファイルマネージャ (多くの場合 Tracker またはその派生版) を介して Be ライクなシステムの GUI で表示および編集できます。
FreeBSD 5.0 以降では、 UFS1、UFS2、および ZFS ファイルシステムは、extattr_ [ 10 ]ファミリーのシステムコールを使用して拡張属性をサポートしています。通常のファイルには、拡張属性のリストを含めることができます。各属性は、名前と関連付けられたデータで構成されます。名前はヌル終端文字列である必要があり、小さな整数の名前空間識別子で識別される名前空間に存在します。現在、user と system の 2 つの名前空間が存在します。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 の 4 つの名前空間が存在します。user 名前空間には、名前や内容に関する制限はありません。trusted 名前空間は、root ユーザーなど、CAP_SYS_ADMIN 権限を持つプロセスのみがアクセスできます。system 名前空間は、主にカーネルがアクセス制御リストに使用します。security 名前空間は、 SELinuxなどで使用されます。
1997 年に撤回されたPOSIX.1e ドラフト[ 12 ]の拡張属性コンセプトのサポートが、2002 年頃に Linux に追加されました。[ 13 ] [ 14 ] 2016 年現在、ユーザー空間の Linux プログラムではまだ広く使用されていませんが、Beagle、OpenStack Swift、Dropbox、KDEのセマンティックメタデータフレームワーク (Baloo)、Chromium、Wget、cURL、Snapcraftで使用されています。
Linuxカーネルでは、拡張属性の名前は最大255バイト、値は最大64 KiBまで許容されます[ 15 ]。XFSやReiserFS も同様ですが、ext2 / 3 / 4やbtrfsでは制限がはるかに小さく、1つのファイルのすべての属性(名前と値)が1つの「ファイルシステムブロック」(通常4 KiB)に収まる必要があります。POSIX.1eによれば、名前はsecurity、system、trusted、userのいずれかにピリオドを付けて開始する必要があります。これにより、拡張属性の4つの名前空間が定義されます[ 16 ] 。
getfattr拡張属性は、ほとんどのディストリビューションのパッケージのコマンドとsetfattrコマンドを使用してアクセスおよび変更できますattr。[ 17 ] APIは、getxattrおよびと呼ばれますsetxattr。
Mac OS X 10.4以降では、 HFS+ファイルシステムの属性ファイルB*-ツリー機能を利用して拡張属性がサポートされています。この機能は名前付きフォークを可能にします。HFS+の名前付きフォークはエクステントを通じて任意の量のデータをサポートしますが、OSの拡張属性サポートはインライン属性のみをサポートし、そのサイズは単一のB*-ツリーノード内に収まるサイズに制限されます。通常のファイルには、拡張属性のリストを含めることができます。HFS+は任意の数の名前付きフォークをサポートしますが、 macOSが拡張属性の数に制限を設けているかどうかは不明です。
各属性は、名前と関連データで構成されます。名前はヌル終端のUnicode文字列です。名前空間の制限はなく(オープンな拡張属性システムです)、属性名には逆引きDNS文字列( Uniform Type Identifiersと同様)を使用するのが慣例です。
macOS は、Linux ライクな API を使用して、ファイルまたはディレクトリの拡張属性のリスト表示[ 18 ]、取得[ 19 ] 、設定[ 20 ] 、および削除[ 21 ]をサポートしています。コマンドラインからは、これらの機能はxattrユーティリティを通じて利用できます。[ 22 ]
macOS 10.5 以降、ワールド ワイド ウェブからダウンロードされたファイルは、拡張ファイル属性によってマークされますcom.apple.quarantine。[ 23 ] macOS の一部の古いバージョン ( Mac OS X 10.6など) では、一般的なCocoaアプリケーション (TextEdit、Preview など)で保存する際に、ユーザー スペースの拡張属性が保持されませんでした。
アクセス制御リストへの関心の低さから、拡張ファイル属性のサポートは2005年にOpenBSDのソースコードから削除されました。[ 24 ]
OS/2バージョン 1.2 以降では、高性能ファイルシステムは拡張属性を念頭に置いて設計されましたが、 DOS のFATファイルシステムにも拡張属性のサポートが後付けされました。FAT パーティションを使用する他のオペレーティングシステムとの互換性のために、OS/2 属性はルート ディレクトリにある単一のファイル " に格納されますEA DATA. SF。このファイルは通常、拡張属性をサポートするオペレーティングシステムがディスクを管理しているときはアクセスできませんが、たとえば DOS では自由に操作できます。拡張属性を持つファイルとディレクトリは、このファイル内の 1 つ以上のクラスタを使用します。最初に使用されるクラスタの論理クラスタ番号は、所有するファイルまたはディレクトリのディレクトリ エントリに格納されます。[ 25 ]これらの 2 バイトは FAT32 ファイルシステムで他の目的に使用されるため、OS/2 拡張属性はこのファイルシステムに格納できません。
OS/2 バージョン 2.0 以降の一部の機能、例えばワークプレイス シェルなどは、ファイルの種類、コメント、コンピュータ アイコン、ファイルに関するキーワードなどを識別するために、いくつかの標準化された拡張属性 ( EAとも呼ばれる)を使用します。インタプリタ型言語Rexxで記述されたプログラムは、実行速度を向上させるために、既に解析済みのコードを拡張属性として格納します。
Solarisバージョン 9 以降では、ファイルに「拡張属性」を持たせることができます。これは実際にはフォークです。「拡張属性」の最大サイズはファイルの最大サイズと同じで、ファイルと同じように読み書きされます。内部的には、通常のファイルと同じように保存およびアクセスされるため、名前に「/」文字を含めることはできません[ 26 ]。また、所有権とパーミッションは親ファイルと異なる場合があります。
ネットワークファイルシステムのバージョン4は、Solarisとほぼ同じように拡張属性をサポートしています。
Windows NTでは、最大 255 ASCII文字の名前と最大 65535 バイトの値を持つ拡張属性がFAT、[ 25 ] HPFS、およびNTFSでサポートされていますが、Win32 APIを介したサポートはありません。これはOS/2 サブシステムの一部として実装されました。特に、 Unix ライクなパーミッションを実装するためにInterix POSIX サブシステムのNFSサーバーで使用されています。Windows 10 Anniversary Updateで追加されたWindows Subsystem for Linuxは、同様の目的でこれらを使用し、Linux ファイル モード、所有者、デバイス ID (該当する場合)、およびファイル タイムを拡張属性に格納します。[ 27 ]
さらに、NTFS は、フォークの一種である代替データ ストリーム(ADS)の形式で任意の長さの拡張属性を保存できます。ファイル マネージャーTotal CommanderのプラグインであるNTFS DescriptionsやQuickSearch eXtendedなどは、ADS に含まれるメタデータによるファイル リストのフィルタリングや検索をサポートしています。[ 28 ] [ 29 ] NTFS-3G は、 FUSEで ADS を拡張属性にマッピングすることをサポートしており、ファイル属性も同様にマッピングします。[ 30 ]
ファイルシステムで EA (拡張属性) および ACL (アクセス制御リスト) 機能が利用可能になりました。さらに、NFS で ACL 機能が利用可能になりました。