Linuxでファイルの属性を確認する方法とその応用例を現在の環境で使うなら「基本metadataはstat、filesystem attributeはlsattr、ACLはgetfacl、extended attributeはgetfattrで分けて読みます。一つのls表示だけで権限や保護状態を断定しません。」が基本方針です。対象はmode bit、filesystem attribute、ACL、extended attributeは別layerで、filesystemとtool availabilityに依存するケースです。最初の確認を読み取りだけに限定し、変更後に何を照合し、どの証跡から戻すかまで明記します。 確認ポイント:stat、lsattr、ACL、xattrは異なるmetadata層を示すため、一つの出力だけで属性全体を断定しません。
pathとsymlink追跡方針を先に固定する
作業開始前に戻し先、maintenance条件、外部への影響を確認します。表示だけの操作と設定を書き換える操作を同じblockに入れず、承認点を明確にします。
- 対象pathとsymbolic linkの扱いを決める
- filesystem typeとmount optionを確認する
- mode、ACL、xattr、inode flagの必要範囲を決める
- 読み取り権限とtool availabilityを確認する
metadata取得前後の時刻を記録する
今回は読み取りに限定し、chattr、setfacl、setfattrで変更しません。security labelやcapabilityを不用意に共有しないよう証跡を保護します。変更が必要なら事前dump、対象一件、rollback command、access testを別の承認手順にします。
復旧を担当者の記憶に頼らず、保存先、世代、承認者、確認commandを作業票へ記載します。
filesystemと利用可能toolを確認する
- ls -lだけで全access controlを判断する
- symbolic linkと参照先を混同する
- ACL maskによるeffective権限を見落とす
- filesystem未対応flagを共通仕様と思う
- xattrをcopy/backupが必ず保持すると仮定する
戻し作業中に新しい修正を加えず、まず既知の元状態へ復元します。
stat・lsattr・getfacl・getfattrを層別実行する
基本metadataを表示
stat -- ./document.txt
size、inode、mode、owner、timestampsを一度に確認します。
machine-readableな列を出す
stat --format='%n|%F|%s|%U|%G|%a|%i' -- ./document.txt
delimiterがfile名へ含まれる可能性も記録します。
filesystem attributeを読む
lsattr -d -- ./document.txt
表示可能なflagはfilesystemとkernelの対応に依存します。
ACLを確認
getfacl --absolute-names -- ./document.txt
mode bitに加えてnamed user/groupとmaskを確認します。
extended attributeを確認
getfattr -d -m- -- ./document.txt
security labelやuser namespace等が含まれ得るため共有範囲を制限します。
mode・inode・attributeの列を固定する
statはinode metadata、lsattrはfilesystem固有flag、getfaclはPOSIX ACL、getfattrはextended attributeを表示します。これらは重なる部分があっても同じ意味ではありません。symbolic link自身と参照先、container内とhost側でも見える値が変わります。
結果を後続commandへ渡す前に一意性と型をassertし、暗黙変換へ依存しません。
読取commandで対象が変わっていないか照合する
regular file、directory、symbolic link、ACL付き、xattr付きのsampleで各commandを実行します。backup/restore testではmode、owner、ACL、xattr、hashを再取得し、保持されなかったlayerを記録します。
最終確認は別の読み取り手段でも照合し、変更操作をもう一度実行して確認しません。
未対応filesystemと権限errorを保留へ分ける
Linux fileの属性確認の開始記録には「対象pathとsymbolic linkの扱いを決める」を最初に置きます。続けて「filesystem typeとmount optionを確認する」を確認すると、対象違いと環境違いを作業前に分けられます。
対象範囲を確定する段階では「mode、ACL、xattr、inode flagの必要範囲を決める」が判断材料になります。また「読み取り権限とtool availabilityを確認する」を満たさない場合は、技術的に実行できても運用上の準備不足です。
実例のうち「基本metadataを表示」はbaselineを得る用途、「machine-readableな列を出す」は対象をさらに具体化する用途として使い分けます。両方の出力を同じ形式へ無理に整形せず、元の型と件数を保持したまま比較します。期待値は画面の見た目ではなく、対象ID、path、時刻など再照合できる列で定義します。
属性確認では lsattr、所有者・mode、必要なら getfacl を同じ対象で記録し、それぞれ別の情報だと区別します。拡張属性の対応可否はfilesystemやmount条件で異なり、表示されないことを「属性なし」と即断できません。変更を計画する場合は直前に再取得し、管理者や自動処理による更新がないことを確かめてから、元の値を復元できる記録を残します。
拡張属性はLinuxでは getfattr -d -- 対象 などで確認できますが、toolの導入状況、namespace、filesystem対応に左右されます。lsattr のinode flag、POSIX ACL、security label、ユーザー拡張属性は別の仕組みです。取得不能と属性なしを同一視せず、エラー出力と終了値を残し、読み取り確認だけの工程では setfattr や chattr を実行しません。
再試行の前に、ls -l だけで全access controlを判断していないか、symbolic linkと参照先を混同していないか確認します。ACLではmaskがeffective権限を制限するため、個別entryだけを見て結論にしません。inode flagとxattrも別の層です。
読み取り確認では stat、lsattr、getfacl、getfattr を使い、chmod、chattr、setfacl、setfattr は実行しません。ACLやsecurity labelは機密情報になり得るため、取得結果を広い共有先へ置かないでください。
再現記録にはfilesystemとmount option、対象がlinkか参照先か、stat・lsattr・getfacl・getfattrの終了値を含めます。未導入tool、filesystem未対応、権限不足、属性なしを別々に記録します。変更をしていない読み取り工程にはrollbackはありません。
完了条件は、所有者・mode、ACLとmask、inode flag、xattrを別々に説明できることです。symbolic linkの扱い、copyやbackupで保持される属性の範囲も対象手順に合わせて確認し、unsupportedを「属性なし」と誤認しません。

コメント