拡張属性
関連記事
xattr(7) から: "拡張属性は、ファイルやディレクトリと永続的に関連付けられた名前:値のペアです。" 拡張属性には4つのクラスがあります: security、system、trusted、そして user です。
拡張属性は、ケイパビリティを設定する際にも用いられます。
ユーザ拡張属性
ユーザ拡張属性は、ファイルに関する任意の情報を保存するために使用できます。属性を作成するには:
$ setfattr --name=user.checksum --value="3baf9ebce4c664ca8d9e5f6314fb47fb" file.txt
拡張属性を表示するには getfattr を使用してください:
$ getfattr --encoding=text --dump file.txt
# file: file.txt user.checksum="3baf9ebce4c664ca8d9e5f6314fb47fb"
拡張属性を削除するには:
$ setfattr --remove=user.checksum file.txt
特定の拡張属性を持つファイルを見つけるには、rawhideAUR を使ってください:
$ rh /path/to/dir '"XATTR_REGEX".reea'
一部のユーザ拡張属性には以下が含まれています:
user.mime_type: プログラムに mimetype を知らせ、推測しなくても良くします。user.charset: Apache httpd モジュール mod_mime_xattr によって使用されます。user.creator: そのファイルを作成したアプリケーションの名前。
XDG は、プログラムによって使用される標準化された拡張属性のセットも提案しています:
user.xdg.comment: Dolphin などのファイルマネージャによってサポートされます。user.xdg.origin.url: URL からダウンロードしたファイル用。user.xdg.robots.index: ファイルがインデックスに含まれるならば "true"。さもなくば "false"。user.xdg.robots.backup: ファイルがバックアップに含まれるならば "true"。さもなくば "false"。user.xdg.languageuser.xdg.creatoruser.xdg.publisheruser.xdg.origin.email.subjectuser.xdg.origin.email.fromuser.xdg.origin.email.message-id
user.xdg.tags は公式標準規格の一部ではありませんが、一部の人気なプログラムがこの属性のサポートを実装しているので「事実上」の標準となっています (#ソフトウェア 章を参照)。これは、各ファイルに対してユーザー定義のタグの CSV リストとして実装されています。
拡張属性を保持する
| コマンド | デフォルトで保持するか/必要なフラグ |
|---|---|
cp |
--archive/--preserve=all/--preserve=xattr
|
mv |
Yes1 |
tar |
作成時には --xattrs、展開時には --xattrs-include='*'
|
bsdtar |
展開時に -p
|
| rsync | -X, --xattrs
|
| cpio | No |
| gzip | No |
| pax | No |
| syncthing | syncXattrs を有効化する必要あり |
- mv は、移動先のファイルシステムが拡張属性をサポートしていない場合、何も言わずに拡張属性を破棄します。
テキストエディタで拡張属性を保持するには、保存時に rename(2) を使わずファイルを切り詰める/拡張する (truncate) するように設定する必要があります。[1]
失いたくないデータに対してバックアップを取るべきであるのと同様に、拡張属性に対しても定期的にバックアップを取るべきです。カレントディレクトリ内の全ファイルの拡張属性の完全なバックアップを (再帰的に) 取るには:
$ getfattr --dump --recursive . > backup.txt
バックアップから復元するには:
$ setfattr --restore=backup.txt
サポート
ファイルシステム
Ext4、Btrfs、ZFS、XFS などの主要な Linux ファイルシステムの全てで拡張属性がサポートされています。カーネルは、拡張属性の名前は 255 バイトまで、値は 64 KiB まで許可しています。しかし、Ext4 と Btrfs では、拡張属性を "ファイルシステムブロック" 内に収める必要があることから、より小さい制限が課されるかもしれません。
NTFS は代替データストリーム (Alternative Data Streams) を使って user を保存します。マウントオプションの user_xattr か streams_interface=xattr がデフォルトで使用されるはずです。しかし、マウントオプション streams_interface=windows が使用されている場合は、拡張属性はサポートされないかもしれません。ntfs-3g は、FUSE 内での代替データストリームの拡張属性へのマッピングをサポートしています。
Linux 5.9 から、NFS は拡張属性をサポートしています。
ソフトウェア
| アプリケーション | サポートされている拡張属性 | 備考 |
|---|---|---|
| baloo | user.xdg.tags user.baloo.rating |
|
| caja | Yes | 拡張機能 caja-xattr-tags と caja.eiciel によってサポートされています。 |
| Chromium | No | リファラと URL をサポートしていましたが、プライバシーとセキュリティの理由により無効化されました。CVE-2018-20483 も参照してください。 |
| braveAUR | No | |
| CURL | user.xdg.origin.url user.xdg.referrer.url |
--xattrs フラグで有効化されます。
|
| Dolphin | user.baloo.rating user.xdg.comment user.xdg.tags |
Dolphin はファイルのタグ付けに対して包括的なサポートを提供しています (コンテキストメニューを使用してファイルにタグを追加したり、ファイルのタグで検索するなどの機能を含む)。タグは user.xdg.tags 属性に CSV として保存されます。Dolphin#ファイルのタグ付け も参照。
|
| Dropbox | user.com.dropbox.attributes
|
|
| emacs-vm | No | mbox 拡張属性はリセットされます。 |
| Epiphany | No | |
| Exiftool | No | |
| fd | No | |
| findutils | No | |
| Firefox | No | |
| gallery-dlAUR | No | |
| Gwenview | user.xdg.tags
|
|
| kfind | No | |
| konqueror | No | |
| kio | [4] | |
| Nautilus | No | eicielAUR の Nautilus の拡張機能によってファイル拡張属性の完全なサポートを追加できます。 |
| rclone | No | |
| recoll | user.xdg.tags
|
|
| tagspacesAUR | No | |
| tmsuAUR | No | |
| Thunar | No | |
| youtube-dlAUR, yt-dlp | user.xdg.referrer.url user.dublincore.title user.dublincore.date user.dublincore.description user.dublincore.contributor user.dublincore.format |
--xattrs フラグで有効化されます。
|
| Wget | user.xdg.origin.url user.xdg.referrer.url |
--xattrs フラグで有効化されます。
|
| w:ja:Webkit | No |
他のタグ付けシステム
ファイルシステムやソフトウェアによるサポート不足により、拡張属性が使えない場合もあります。そのような理由により多くのメディアフォーマットは、Exiftool などのプログラムや音声用の id3AUR といったより固有のプログラムを使って読み取ることのできるファイル形式でメタデータを保存します。
- 全種類のファイル: Exiftool
- 音声: オーディオタグエディタ
- 動画: FFmpeg の ffprobe(1)
gvfs
ファイルシステムに依らないもう一つの回避策は Gnome 仮想ファイルシステム gvfs です。これは、メタデータ (gvfsd メタデータ) を保存するために使用されます。例えば、Firefox はこの方法でメタデータを保存しており、以下のコマンドで確認できます:
$ gio info --attributes=metadata:: downloaded.html
このアプローチをとっている他のプログラムとしては以下があります:
- Thunar: ファイルのカラーハイライトを保存するために使用しています。