Linux の chattr コマンドと lsattr コマンド:ファイル属性ガイド

はじめに

Linux では、特定のファイルやディレクトリの属性は、特定のコマンドを使ってのみアクセスまたは変更できます。これらの属性により、root ユーザーであっても、削除や変更を防ぐなど、ファイル操作を制限できます。この機能は、重要なファイルやディレクトリを保護するのに特に役立ちます。

このガイドでは、2 つの重要なコマンドを取り上げます。

  • chattr:ファイル属性を設定または解除するために使用します。
  • lsattr:ファイル属性を表示するために使用します。

これらのコマンドは、 ext2、 ext3、 ext4 ファイルシステムで一般的に使用され、システム管理者にとって重要なツールです。


「 chattr 」コマンドとは?

「 chattr 」コマンドを使うと、Linux ファイルシステム上のファイル属性を変更できます。シンボリックモードを使って、特定の属性を追加、削除、設定します。これらの属性により、ファイルを不変にしたり、追加のみにしたりするなど、ファイルの動作を制御できます。

「 chattr」の主な機能:

  • ファイルを誤った削除や変更から保護します。
  • root ユーザーに対してもファイル操作を制限します。
  • 高度なファイル管理とセキュリティを有効にします。

公式ドキュメント: chattr

詳細については、公式の chattr ドキュメントを参照してください。
Linux Man Pages – chattr


「 lsattr 」コマンドとは?

「 lsattr 」コマンドは、 ext2、 ext3、または ext4 ファイルシステム上のファイルとディレクトリの属性を一覧表示します。ファイルアクセスの問題に遭遇したときのトラブルシューティングに特に役立ちます。

「 lsattr」の主な機能:

  • ファイル属性を読みやすい形式で表示します。
  • ファイル属性が原因のアクセスや変更の問題をトラブルシューティングします。

公式ドキュメント: lsattr

詳細については、公式の lsattr ドキュメントを参照してください。
Linux Man Pages – lsattr


コマンドの構文

chattr コマンドの構文

chattr [ -RVf ] [ -v version ] [ -p project ] [ + | - | = [attributes] ] files...

説明:

  • -R:ディレクトリとその内容の属性を再帰的に変更します。
  • -V:詳細な出力とプログラムのバージョンを表示します。
  • -f:ほとんどのエラーメッセージを表示しません。
  • -v version:ファイルのバージョン/世代番号を設定します。
  • -p project:ファイルのプロジェクト番号を設定します。
  • +:指定した属性を追加します。
  • -:指定した属性を削除します。
  • =:属性を指定どおりに正確に設定します。
  • attributes:属性フラグの組み合わせ(例: i、 aなど)。
  • files...:対象のファイルまたはディレクトリ。

例:

  • 不変属性を追加する:chattr +i filename
  • 追加のみ属性を削除する:chattr -a filename
  • 属性を正確に設定する(例:不変と追加のみ):chattr =ia filename

lsattr コマンドの構文

lsattr [ -RVadlpv ] [ files... ]

説明:

  • -R:ディレクトリとその内容の属性を再帰的に一覧表示します。
  • -V:プログラムのバージョンを表示します。
  • -a:隠しファイルを含むすべてのファイルを一覧表示します( .で始まるもの)。
  • -d:内容を一覧表示するのではなく、ディレクトリを通常のファイルのように一覧表示します。
  • -l:1 文字の略語ではなく、長い名前を使ってオプションを出力します。
  • -p:ファイルのプロジェクト番号を一覧表示します。
  • -v:ファイルのバージョン/世代番号を一覧表示します。
  • files...:対象のファイルまたはディレクトリ。

例:

  • ファイルの属性を表示する:lsattr filename
  • ディレクトリ内のすべてのファイルの属性を表示する:lsattr /path/to/directory

一般的なファイル属性とそのフラグ

次の表は、最も一般的なファイル属性とその意味をまとめたものです。

属性フラグ説明
追加のみaファイルは書き込みのために追加モードでのみ開くことができます。
不変iファイルを変更、削除、名前変更することはできません。
atime なしAファイルのアクセス時刻(atime)は、ディスク I/O を減らすために更新されません。
ダンプなしdファイルは、 dump プログラムを使ったバックアップから除外されます。
データジャーナリングjファイルデータは、ファイル自体に書き込まれる前にジャーナルに書き込まれます。
同期的更新Sファイルへの更新は、ディスクに同期的に書き込まれます。
削除不可uファイルが削除されると、そのデータは回復の可能性のために保存されます。

属性の完全なリストについては、 chattr の man ページを参照してください。
Linux Man Pages – chattr


次のコマンドによるトラブルシューティング: chattr と lsattr

問題:ファイルを修正または削除できない

次のようなエラーに遭遇した場合:

E212: Can't open file for writing

次の手順に従います。

  1. ファイルの権限を確認する
    次のコマンドを使ってファイルの権限を確認します。ls -l filename
  2. ファイルの属性を確認する
    コマンド lsattr を使って、変更を制限する可能性のある属性があるかどうかを確認します。lsattr filename
  3. 制限的な属性を削除する
    ファイルに i 属性(不変)または a 属性(追加のみ)がある場合は、 chattr コマンドで削除します。chattr -i filename chattr -a filename
  4. 変更を確認する
    コマンド lsattr を再実行して、属性が削除されたことを確認します。lsattr filename

実践例: a 属性

シナリオ:

修正または名前変更できないファイル: /etc/ssh/known_hostsです。

解決手順:

  1. ファイルの属性を確認します。lsattr /etc/ssh/known_hosts
  2. 次の a 属性が設定されている場合は、削除します。chattr -a /etc/ssh/known_hosts
  3. 属性が削除されたことを確認します。lsattr /etc/ssh/known_hosts
  4. これでファイルを保存または名前変更できるはずです。

まとめ

「 chattr と lsattr 」コマンドは、Linux でファイル属性を管理するための非常に貴重なツールです。重要なファイルやディレクトリにさらなる保護層を提供し、システム管理者にとって不可欠です。設定ファイルを保護する場合でも、ファイルアクセスの問題をトラブルシューティングする場合でも、これらのコマンドを習得することで Linux の専門知識が向上します。

コメントを残す