概要
Linuxの標準的なファイルシステム(ext2/ext3/ext4など)において、通常のパーミッション(rwx)とは別の「特殊属性(拡張属性)」を確認するためのコマンドです。
「root権限があっても削除できないファイル」や「追記しかできないログファイル」など、chattr コマンドによって設定された特殊な制御状態を確認するために使用されます。セキュリティ対策やシステムの堅牢化設定を監査する際に重要となります。
仕様(引数・オプション)
構文
lsattr [オプション] [ファイル名またはディレクトリ名]
主な引数・オプション
| オプション | 説明 |
-R | ディレクトリ内のファイルやサブディレクトリも含めて再帰的に表示します(Recursive)。 |
-a | 隠しファイル(ドットで始まるファイル)も含めて、ディレクトリ内のすべてのファイルを表示します(all)。 |
-d | ディレクトリの中身ではなく、ディレクトリそのものの属性を表示します(directory)。 |
-v | ファイルのバージョン(世代番号)を表示します。 |
基本の使い方
オプションなしで実行すると、カレントディレクトリにあるファイルの属性を一覧表示します。
コマンド
# 現在のディレクトリのファイル属性を表示
lsattr
実行結果
左側のハイフンや文字が属性の状態を表し、右側に対象ファイル名が表示されます。通常は e(extent format)属性が付与されています。
--------------e------- ./config.txt
----i---------e------- ./important_backup.tar.gz
--------------e------- ./script.sh
※ 上記の例では important_backup.tar.gz に「不変(immutable)」を示す i 属性が付与されています。
実践コマンド
ディレクトリ自体の属性を確認する
デフォルトではディレクトリの中身が表示されてしまいますが、-d を使うことでディレクトリそのものに属性が付いているかを確認できます。
# /var/log ディレクトリ自体の属性を表示
lsattr -d /var/log
--------------e------- /var/log
再帰的にすべてのファイルを確認する
特定のディレクトリ配下にある全ファイルの属性を調査します。システムファイルの改ざん検知などで役立ちます。
# /etc 以下の属性を再帰的に表示(エラー抑制のためsudo推奨の場合あり)
lsattr -R /etc/nginx/
--------------e------- /etc/nginx/nginx.conf
--------------e------- /etc/nginx/mime.types
----i---------e------- /etc/nginx/conf.d/default.conf
バージョン情報(世代番号)を表示する
-v オプションを使用すると、ファイルシステムが管理しているファイルの世代番号(作成・再作成のたびに変化する数値)を確認できます。通常の管理業務で使うことは稀ですが、NFSや特定のバックアップツールで利用されることがあります。
# 属性と世代番号を表示
lsattr -v sample.txt
1234567890 --------------e------- sample.txt
カスタムポイント
- 対象の指定: ファイル名を指定しなければカレントディレクトリが対象になりますが、
lsattr /boot/*のようにワイルドカードを使って指定することも一般的です。 - 属性の意味: 表示される主な属性の意味は以下の通りです。
i(Immutable): 変更・削除・リネーム・リンク作成が一切禁止。a(Append Only): 追記のみ可能で、上書きや削除は禁止。e(Extents): エクステント形式でブロックをマッピングしている(近年のext4では標準)。
注意点
- ファイルシステム依存:lsattr は主に ext2/ext3/ext4 ファイルシステム向けに設計されています。XFSなど他のファイルシステムでも一部サポートされていますが、全ての環境で使用できるとは限りません。
- ls -l との違い:ls -l で表示される書き込み権限(w)があっても、lsattr で i 属性が付いている場合は削除も編集もできません。「権限があるのに削除できない」というトラブル時はこのコマンドを確認してください。
- sudoの必要性:属性を表示するだけなら通常は一般ユーザーでも可能ですが、読み取り権限のないディレクトリの中を見る場合などは sudo が必要です。
応用
不変属性(i)が設定されているファイルだけを抽出する
システム内で「変更不可」に設定されている重要なファイルを検索する場合の組み合わせ例です。
# カレントディレクトリ以下で 'i' 属性が付いているファイルを検索
lsattr -R | grep "\-i\-"
----i---------e------- ./system_lock_file
----i---------e------- ./security_policy.conf
まとめ
lsattrコマンドは、通常のパーミッション設定の裏側に隠れている「ファイルシステムの特殊属性」を可視化するためのツールです。特に、rootユーザーですら操作を受け付けない「i属性(不変)」や、ログの改ざんを防ぐ「a属性(追記のみ)」が設定されているかを確認する際、このコマンドが唯一の確認手段となります。サーバーのセキュリティ診断や、原因不明の「Permission denied」エラーの調査において、ls -lとセットで確認する習慣をつけることが推奨されます。
