コンテンツにスキップ

「拡張属性」の版間の差分

提供: ArchWiki
削除された内容 追加された内容
AshMyzk (トーク | 投稿記録)
タグ: 新規リダイレクト
 
 
(2人の利用者による、間の12版が非表示)
1行目: 1行目:
#REDIRECT[[ファイルのパーミッョンと属性#拡張属性]]
[[Category:ファイルシステム]]
[[en:Extended attributes]]
[[ru:Extended attributes]]
{{Related articles start}}
{{Related|ファイルのパーミッションと属性}}
{{Related|ケイパビリティ}}
{{Related articles end}}

{{man|7|xattr}} から: "拡張属性は、ファイルやディレクトリと永続的に関連付けられた名前:値のペアです。" 拡張属性には4つのクラスがあります: security、system、trusted、そして user です。

{{Warning|デフォルトでは、拡張属性は [[cp]]、[[rsync]]、そして他の似たようなプログラムによって保持されません。[[#拡張属性を保持する]] を見てください。}}

拡張属性は、[[ケイパビリティ]]を設定する際にも用いられます。

== ユーザ拡張属性 ==

ユーザ拡張属性は、ファイルに関する任意の情報を保存するために使用できます。属性を作成するには:

$ setfattr --name=user.checksum --value="3baf9ebce4c664ca8d9e5f6314fb47fb" file.txt

拡張属性を表示するには getfattr を使用してください:

{{hc|1= $ getfattr --encoding=text --dump file.txt|2=
# file: file.txt
user.checksum="3baf9ebce4c664ca8d9e5f6314fb47fb"
}}

拡張属性を削除するには:

$ setfattr --remove=user.checksum file.txt

特定の拡張属性を持つファイルを見つけるには、{{AUR|rawhide}} を使ってください:

$ rh ''/path/to/dir'' '"''XATTR_REGEX''".reea'

一部のユーザ拡張属性には以下が含まれています:

* {{ic|user.mime_type}}: プログラムに mimetype を知らせ、推測しなくても良くします。
* {{ic|user.charset}}: Apache httpd モジュール [http://0pointer.de/lennart/projects/mod_mime_xattr mod_mime_xattr] によって使用されます。
* {{ic|user.creator}}: そのファイルを作成したアプリケーションの名前。

XDG は、プログラムによって使用される標準化された拡張属性のセットも提案しています:

* {{ic|user.xdg.comment}}: Dolphin などのファイルマネージャによってサポートされます。
* {{ic|user.xdg.origin.url}}: URL からダウンロードしたファイル用。
* {{ic|user.xdg.robots.index}}: ファイルがインデックスに含まれるならば "true"。さもなくば "false"。
* {{ic|user.xdg.robots.backup}}: ファイルがバックアップに含まれるならば "true"。さもなくば "false"。
* {{ic|user.xdg.language}}
* {{ic|user.xdg.creator}}
* {{ic|user.xdg.publisher}}
* {{ic|user.xdg.origin.email.subject}}
* {{ic|user.xdg.origin.email.from}}
* {{ic|user.xdg.origin.email.message-id}}

{{ic|user.xdg.tags}} は公式標準規格の一部ではありませんが、一部の人気なプログラムがこの属性のサポートを実装しているので「事実上」の標準となっています ([[#ソフトウェア]] 章を参照)。これは、各ファイルに対してユーザー定義のタグの [[w:ja:Comma-Separated Values|CSV]] リストとして実装されています。

== 拡張属性を保持する ==

{| class="wikitable"
! コマンド || デフォルトで保持するか/必要なフラグ
|-
| {{ic|cp}} || {{ic|--archive}}/{{ic|1=--preserve=all}}/{{ic|1=--preserve=xattr}}
|-
| {{ic|mv}} || {{Yes}}<sup>1</sup>
|-
| {{ic|tar}} || 作成時には {{ic|--xattrs}}、展開時には {{ic|1=--xattrs-include='*'}}
|-
| {{ic|bsdtar}} || 展開時に {{ic|-p}}
|-
| [[rsync]] || {{ic|-X, --xattrs}}
|-
| {{pkg|cpio}} || {{No}}
|-
| {{pkg|gzip}} || {{No}}
|-
| {{pkg|pax}} || {{No}}
|-
| [[syncthing]] || [https://docs.syncthing.net/advanced/folder-sync-xattrs syncXattrs] を有効化する必要あり
|}

# mv は、移動先のファイルシステムが拡張属性をサポートしていない場合、何も言わずに拡張属性を破棄します。

[[テキストエディタ]]で拡張属性を保持するには、保存時に {{man|2|rename}} を使わずファイルを切り詰める/拡張する (truncate) するように設定する必要があります。[https://unix.stackexchange.com/questions/45407]

失いたくないデータに対してバックアップを取るべきであるのと同様に、拡張属性に対しても定期的に[[システムメンテナンス#バックアップ|バックアップ]]を取るべきです。カレントディレクトリ内の全ファイルの拡張属性の完全なバックアップを (再帰的に) 取るには:

$ getfattr --dump --recursive . > backup.txt

バックアップから復元するには:

$ setfattr --restore=backup.txt

== サポート ==

=== ファイルシステム ===

[[Ext4]]、[[Btrfs]]、[[ZFS]]、[[XFS]] などの主要な Linux ファイルシステムの全てで拡張属性がサポートされています。カーネルは、拡張属性の名前は 255 バイトまで、値は 64 KiB まで許可しています。しかし、[[Ext4]] と [[Btrfs]] では、拡張属性を "ファイルシステムブロック" 内に収める必要があることから、より小さい制限が課されるかもしれません。

[[NTFS]] は代替データストリーム (Alternative Data Streams) を使って user を保存します。マウントオプションの {{ic|user_xattr}} か {{ic|1=streams_interface=xattr}} がデフォルトで使用されるはずです。しかし、マウントオプション {{ic|1=streams_interface=windows}} が使用されている場合は、拡張属性はサポートされないかもしれません。{{pkg|ntfs-3g}} は、FUSE 内での代替データストリームの拡張属性へのマッピングをサポートしています。

[https://www.phoronix.com/news/Linux-5.9-NFS-Server-User-Xattr Linux 5.9 から]、[[NFS]] は拡張属性をサポートしています。

=== ソフトウェア ===

{| class="wikitable"
! アプリケーション
! サポートされている拡張属性
! 備考
|-
| [[baloo]]
| {{bc|
user.xdg.tags
user.baloo.rating
}}
|
|-
| {{pkg|caja}}
| {{Yes}}
| 拡張機能 caja-xattr-tags と caja.eiciel によってサポートされています。
|-
| [[Chromium]]
| {{No|1=https://chromium.googlesource.com/chromium/src/+/a9b4fb70b4318b220deee0da7b1693d16b8ed071}}
| リファラと URL をサポートしていましたが、プライバシーとセキュリティの理由により無効化されました。[https://cve.circl.lu/cve/CVE-2018-20483 CVE-2018-20483] も参照してください。
|-
| {{AUR|brave}}
| {{No|1=https://github.com/brave/brave-browser/issues/2766}}
|
|-
| [[CURL]]
| {{bc|
user.xdg.origin.url
user.xdg.referrer.url
}}
| {{ic|--xattrs}} フラグで有効化されます。
|-
| [[Dolphin]]
| {{bc|
user.baloo.rating
user.xdg.comment
user.xdg.tags
}}
| Dolphin はファイルのタグ付けに対して包括的なサポートを提供しています (コンテキストメニューを使用してファイルにタグを追加したり、ファイルのタグで検索するなどの機能を含む)。タグは {{ic|user.xdg.tags}} 属性に CSV として保存されます。[[Dolphin#ファイルのタグ付け]] も参照。

[https://bugs.kde.org/show_bug.cgi?id=322922]、[https://bugs.kde.org/show_bug.cgi?id=116617]
|-
| [[Dropbox]]
| {{ic|user.com.dropbox.attributes}}
|
|-
| [[emacs|emacs-vm]]
| {{No}}
| mbox 拡張属性はリセットされます。
|-
| [[Epiphany]]
| {{No|1=https://gitlab.gnome.org/GNOME/epiphany/-/issues/2165}}
|
|-
| [[Exiftool]]
| {{No|1=https://exiftool.org/forum/index.php?topic=12762}}
|
|-
| {{pkg|fd}}
| {{No|1=https://github.com/sharkdp/fd/issues/830}}
|
|-
| {{pkg|findutils}}
| {{No|1=https://savannah.gnu.org/bugs/?64605}}
|
|-
| [[Firefox]]
| {{No|1=https://bugzilla.mozilla.org/show_bug.cgi?id=665531}}
|
|-
| {{AUR|gallery-dl}}
| {{No|1=https://github.com/mikf/gallery-dl/issues/4472}}
|
|-
| [[Gwenview]]
| {{ic|user.xdg.tags}}
|
|-
| {{pkg|kfind}}
| {{No|1=https://bugs.kde.org/show_bug.cgi?id=473864}}
|
|-
| {{pkg|konqueror}}
| {{No|1=https://bugs.kde.org/show_bug.cgi?id=473809}}
|
|-
| kio
| [https://bugs.kde.org/show_bug.cgi?id=116617]
|
|-
| [[Nautilus]]
| {{No|1=https://discourse.gnome.org/t/16892}}
| {{AUR|eiciel}} の Nautilus の拡張機能によってファイル拡張属性の完全なサポートを追加できます。
|-
| {{pkg|rclone}}
| {{No|1=https://forum.rclone.org/t/910}}
|-
| {{pkg|recoll}}
| {{ic|user.xdg.tags}}
|
|-
| {{AUR|tagspaces}}
| {{No|1=https://trello.com/c/iapsXZZe/64-option-to-store-tags-in-file-using-extended-attributes-xattr}}
|
|-
| {{AUR|tmsu}}
| {{No|1=https://github.com/oniony/TMSU/issues/10}}
|
|-
| [[Thunar]]
| {{No|1=https://gitlab.xfce.org/xfce/thunar/-/issues/1195}}
|
|-
| {{AUR|youtube-dl}}, [[yt-dlp]]
| {{bc|
user.xdg.referrer.url
user.dublincore.title
user.dublincore.date
user.dublincore.description
user.dublincore.contributor
user.dublincore.format
}}
| {{ic|--xattrs}} フラグで有効化されます。
|-
| [[Wget]]
| {{bc|
user.xdg.origin.url
user.xdg.referrer.url
}}
| {{ic|--xattrs}} フラグで有効化されます。
|-
| [[w:ja:Webkit]]
| {{No|1=https://bugs.webkit.org/show_bug.cgi?id=260778}}
|
|}

== 他のタグ付けシステム ==

ファイルシステムやソフトウェアによるサポート不足により、拡張属性が使えない場合もあります。そのような理由により多くのメディアフォーマットは、[[Exiftool]] などのプログラムや音声用の {{AUR|id3}} といったより固有のプログラムを使って読み取ることのできるファイル形式でメタデータを保存します。

* 全種類のファイル: [[Exiftool]]
* 音声: [[アプリケーション一覧/マルチメディア#オーディオタグエディタ|オーディオタグエディタ]]
* 動画: [[FFmpeg]] の {{man|1|ffprobe}}

=== gvfs ===

ファイルシステムに依らないもう一つの回避策は Gnome 仮想ファイルシステム {{pkg|gvfs}} です。これは、メタデータ (gvfsd メタデータ) を保存するために使用されます。例えば、Firefox はこの方法で[https://hg.mozilla.org/mozilla-central/file/tip/toolkit/components/downloads/DownloadPlatform.cpp メタデータを保存]しており、以下のコマンドで確認できます:

$ gio info --attributes=metadata:: ''downloaded.html''

このアプローチをとっている他のプログラムとしては以下があります:

* [[Thunar]]: ファイルのカラーハイライトを保存するために使用しています。

== 参照 ==

* [https://www.freedesktop.org/wiki/CommonExtendedAttributes XDG の拡張属性のガイドライン]
* [[Wikipedia:ja:拡張ファイル属性#Linux]]
* [https://www.lesbonscomptes.com/pages/extattrs.html Extended attributes: the good, the not so good, the bad.]

{{TranslationStatus|Extended attributes|2023-12-23|794864}}

2024年8月21日 (水) 18:49時点における最新版

xattr(7) から: "拡張属性は、ファイルやディレクトリと永続的に関連付けられた名前:値のペアです。" 拡張属性には4つのクラスがあります: security、system、trusted、そして user です。

警告 デフォルトでは、拡張属性は cprsync、そして他の似たようなプログラムによって保持されません。#拡張属性を保持する を見てください。

拡張属性は、ケイパビリティを設定する際にも用いられます。

ユーザ拡張属性

ユーザ拡張属性は、ファイルに関する任意の情報を保存するために使用できます。属性を作成するには:

$ 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.language
  • user.xdg.creator
  • user.xdg.publisher
  • user.xdg.origin.email.subject
  • user.xdg.origin.email.from
  • user.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 を有効化する必要あり
  1. mv は、移動先のファイルシステムが拡張属性をサポートしていない場合、何も言わずに拡張属性を破棄します。

テキストエディタで拡張属性を保持するには、保存時に rename(2) を使わずファイルを切り詰める/拡張する (truncate) するように設定する必要があります。[1]

失いたくないデータに対してバックアップを取るべきであるのと同様に、拡張属性に対しても定期的にバックアップを取るべきです。カレントディレクトリ内の全ファイルの拡張属性の完全なバックアップを (再帰的に) 取るには:

$ getfattr --dump --recursive . > backup.txt

バックアップから復元するには:

$ setfattr --restore=backup.txt

サポート

ファイルシステム

Ext4BtrfsZFSXFS などの主要な Linux ファイルシステムの全てで拡張属性がサポートされています。カーネルは、拡張属性の名前は 255 バイトまで、値は 64 KiB まで許可しています。しかし、Ext4Btrfs では、拡張属性を "ファイルシステムブロック" 内に収める必要があることから、より小さい制限が課されるかもしれません。

NTFS は代替データストリーム (Alternative Data Streams) を使って user を保存します。マウントオプションの user_xattrstreams_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#ファイルのタグ付け も参照。

[2][3]

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 といったより固有のプログラムを使って読み取ることのできるファイル形式でメタデータを保存します。

gvfs

ファイルシステムに依らないもう一つの回避策は Gnome 仮想ファイルシステム gvfs です。これは、メタデータ (gvfsd メタデータ) を保存するために使用されます。例えば、Firefox はこの方法でメタデータを保存しており、以下のコマンドで確認できます:

$ gio info --attributes=metadata:: downloaded.html

このアプローチをとっている他のプログラムとしては以下があります:

  • Thunar: ファイルのカラーハイライトを保存するために使用しています。

参照

翻訳ステータス: このページは en:Extended attributes の翻訳バージョンです。最後の翻訳日は 2023-12-23 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。