本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、ファイルの拡張属性の表示や設定を行う「attr」コマンドです。
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回はファイルの拡張属性を表示したり、設定したりする「attr」コマンドです。
「attr」(attribute)は、指定した1つのファイルの拡張属性を表示したり、設定したりするコマンドです。
ファイルには、所有者やタイムスタンプ、パーミッションなどの属性があります。Linuxに限らず、さまざまなファイルシステムが共通に備える属性です。
これに対し、ユーザーが自由に追加できる属性を拡張属性(extended attribute)と呼びます。Linux環境で最もなじみ深い拡張属性は恐らくSELinuxのセキュリティコンテキストでしょう(※1)。
なお、拡張属性の表示だけを行う「getfattr」コマンド(連載第229回)や、設定だけを行う「setfattr」コマンド(第230回)があります。attrと同様、getfattrやsetfattrも、attrパッケージに収録されています(※2)。
※1 SELinux(Security-Enhanced Linux)とは、強制アクセス制御(Mandatory Access Control)を加えたLinuxのカーネルモジュールとその機能をいう。SELinuxを有効にすると、通常のファイルシステムよりも高度なアクセス制御機能を使用できる。lsコマンドでSELinuxのセキュリティコンテキストを表示するには「-Z」オプションを使用する。
※2 Ubuntu 18.04 LTSのようにattrパッケージをデフォルトで含んでいない場合は、aptコマンド(第139回)を用いて「sudo apt install attr」としてパッケージを導入する。
attr [-V以外のオプション] 操作オプション [-V 値] ファイル名
※操作オプションは4種類(-s、-g、-r、-l)から1つを選択。[ ]は省略可能な引数を示しています
短いオプション | 意味 |
---|---|
-s 属性名 | 拡張属性を設定(set)する(※3) |
-g 属性名 | 拡張属性の値を表示(get)する |
-r 属性名 | 拡張属性を削除(remove)する |
-l | 複数の拡張属性を一覧表示(list)する |
短いオプション | 意味 |
---|---|
-L | シンボリックリンクのリンク先を使用する(無指定時はシンボリックリンクファイルそのものを使用する) |
-R | trusted名前空間を使用する(root権限が必要) |
-S | security名前空間を使用する(参照のみ、設定や削除にはroot権限が必要) |
-q | メッセージを表示しない(※4) |
-V 値 | 拡張属性の値を指定(「-s」とともに使用) |
※3 値は標準入力から読み込む。オプションで値も併せて設定する場合は「-V」を併用する(本文を参照)。
※4 -gと一緒に使うと値のみを表示、-lと一緒に使うと拡張属性のみを表示する。
Linuxでは拡張属性の管理のために名前空間を使っています。それぞれの名前空間を区別する名前を名前空間識別子と呼び、以下のような名前空間識別子があります。
名前空間識別子 | 用途 |
---|---|
system | カーネルが使用 |
security | 主にSELinuxが使用 |
trusted | 信頼されるプロセスが使用 |
user | ユーザー用(自由に定義して使用できる) |
拡張属性を設定するには、「attr -s 属性名 -V 値 ファイル名」とします。デフォルトで使用する名前空間は「user」で、「attr -s 属性名 ……」で拡張属性を設定した場合、「user.属性名」となります。
拡張属性の値は「attr -g 属性名 ファイル名」で表示します。この場合も「user.属性名」の値を表示します。
画面1では、attrコマンドで「myattr1」という拡張属性を設定、表示した後に、getfattrコマンド(第229回)を使って拡張属性を表示しています。getfattrコマンドの「-d」(--dump)は属性名と値を出力するというオプションです。attrコマンドで設定した「myattr1」という属性は名前空間「user」で設定されていることが分かります。
attr -s 属性名 -V 値 ファイル名
(ファイルに拡張属性を設定する)
attr -s myattr1 -V value test1.txt
(test1.txtにuser.myattr1=valueという拡張属性を設定する)(画面1)
attr -g 属性名 ファイル名
(ファイルから拡張属性を削除する)
attr -g myattr1 test1.txt
(test1.txt1のuser.myattr1という拡張属性を削除する)(画面1)
拡張属性を設定する際、「attr -s 属性名 -V 値 ファイル名」以外の方法もあります。「-V」で値を設定しなかった場合、拡張属性の値を標準入力から読み込ませます。入力の終わりは[CTRL]+[D]で指定します。
このとき、値を入れて改行してから[CTRL]+[D]を入力すると、値に改行コードが入ります(画面2)。
改行コードを入れたくない場合は、値の後に[CTRL]+[D]を2回入力してください(画面3)。
設定済みの複数の拡張属性を一覧表示するには、「attr -l ファイル名」とします。「-l」では拡張属性の値を表示しないため、値を確認したい場合は、別に「-g」を使って属性名を指定します。
属性名と値を一覧表示したい場合は、getfattrコマンドを使用するとよいでしょう(※5)。
※5 画面4の「getfattr -d -m - test1.txt」というコマンドラインにある「-m -」は全てのパターンに該当するものを表示する、というオプション。
なお、「-l」はuser名前空間だけではなく、security名前空間も一覧表示の対象になっています。例えば画面4で参照したtest1.txtは、SELinuxが有効な環境で作成したファイルなので、「security.selinux」拡張属性(selinux)が表示されています。
「-g」でsecurity名前空間の拡張属性を参照したい場合は、「-S」オプションが必要です。
attr -l ファイル名
(ファイルの拡張属性を一覧表示する)
attr -l test1.txt
(test1.txtの拡張属性を一覧表示する)
attrコマンドのデフォルトであるuser名前空間以外を利用するには、専用のオプションを使います。「trusted名前空間」であれば「-R」オプションを利用します(画面5)。「R」oot用の名前空間という意味です。表示、設定ともにroot権限が必要です。
root権限で実行すると、「-l」で「trusted」名前空間の値も表示対象となります。
「security名前空間」に拡張属性を設定するには先ほどのように「-S」を使います。設定にはroot権限が必要です。
attr -R -s 属性名 -V 値 ファイル名
(trusted名前空間に拡張属性を設定する)
attr -R -s myattrR -V value test1.txt
(trusted.myattrR=valueを設定する)(画面5)
attr -S -s 属性名 -V 値 ファイル名
(security名前属性に拡張属性を設定する)
attr -S -s myattrS -V value test1.txt
(security.myattrS=valueを設定する)(画面5)
拡張属性を削除するには「attr -r 属性名 ファイル名」とします(画面6)。trusted名前空間の拡張属性の場合は「-R」、security名前空間の拡張属性の場合は「-S」を併用します。
attr -r 名前 ファイル名
(ファイルから拡張属性を削除する)
attr -r myattr1 test1.txt
(test1.txtから拡張属性「user.myattr1」を削除する)(画面6)
西村 めぐみ(にしむら めぐみ)
PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.