Linux でファイルやディレクトリを操作する場合、chmod コマンドは重要なツールです。「Change Mode」の頭字語である chmod コマンドは、Linux ユーザーがファイルまたはディレクトリの権限を調整できるように設計されています。多用途に使用できるこのコマンドは、安全で効率的なファイル管理に不可欠です。chmod コマンドの詳細を詳しく調べ、実際にどのように使用できるかを見てみましょう。
Linux の chmod コマンドを理解する
chmod コマンドとは何ですか?
chmod コマンドは、ファイル システム モードを変更するための Linux コマンドライン ユーティリティです。このモードは、ユーザーとグループがファイルとディレクトリに対して持つ権限の種類を決定します。これらの権限は、指定されたファイルの読み取り、書き込み、実行を誰が実行できるかを制御します。
chmod コマンドを使用する理由
Linux では、ファイルとディレクトリは共有リソースです。これらのリソースを保護するには、アクセス権限を管理する必要があります。chmod コマンドを使用すると、これらの権限を制御し、システムのセキュリティを確保できます。機密データを保護するシステム管理者であっても、プロジェクトを設定する開発者であっても、chmod を理解することは不可欠です。
chmod コマンド構文の理解
chmod コマンドは以下の構文に従います。
chmod [OPTIONS] MODE[,MODE]... FILE...
OPTIONS は追加機能を提供するオプションのパラメータ、MODE は設定する権限を指定し、FILE は権限が変更されるファイルまたはディレクトリです。chmod には、権限を定義するための 2 つの主な方法、数値モードとシンボリック モードがあります。
chmod コマンドのさまざまなオプション
オプションなしの chmod コマンド
デフォルトでは、オプションを指定しないと、chmod はファイルの権限をユーザーが指定したモードに変更します。
chmod 755 filename
上記のコマンドは、「filename」の権限を変更し、所有者に読み取り、書き込み、実行権限(7)を与え、グループとその他のユーザーに読み取りと実行権限(5)を与えます。
オプション付き chmod コマンド
chmod では、機能を拡張するためにいくつかのオプションを使用できます。
- -R または –recursive: ファイルとディレクトリを再帰的に変更します。
- -f または –silent または –quiet: ほとんどのエラー メッセージを抑制します。
- -v または –verbose: 処理されたファイルごとに診断を出力します。
- –reference=RFILE: RFILE の権限と一致するよう権限を設定します。
chmod によるファイル権限の理解
Linux では、次の 3 つの文字が権限を表します。
- r (読み取り): ファイルの内容を読み取る権限。
- w (書き込み): ファイルを変更または削除する権限。
- x (実行): ファイルを実行する権限。
たとえば、ユーザーに対して rwx 権限が付与されたファイルは、ユーザーがそのファイルを読み取り、書き込み、実行できることを意味します。
chmod の数値モードと記号モード
chmod を使用して権限を変更するには、次の 2 つの方法があります。
- 数値モード: このモードでは、権限を表すために数字を使用します。読み取りは 4、書き込みは 2、実行は 1 です。これらの数字を加算して権限を設定します。たとえば、ユーザーに読み取り、書き込み、実行権限 (7) を与えるには、次のコマンドを使用します。
chmod 700 filename
- 数値モード: このモードでは、権限を表すために数字を使用します。読み取りは 4、書き込みは 2、実行は 1 です。これらの数字を加算して権限を設定します。たとえば、ユーザーに読み取り、書き込み、実行権限 (7) を与えるには、次のコマンドを使用します。
chmod u+x filename
一般的な chmod コマンドの例
権限と chmod コマンドの仕組みを理解した上で、実際の例をいくつか見てみましょう。
例 1: 数値モードを使用して権限を変更する
chmod 755 filename
このコマンドは、「filename」の権限を次のように変更します。
- ユーザー(所有者)には、読み取り(4)、書き込み(2)、実行(1)の権限があり、合計で7になります。
- グループと他のユーザーには読み取り権限(4)と実行権限(1)があり、合計5になります。
つまり、所有者は完全なアクセス権を持ちますが、グループのメンバーと他のユーザーはファイルを読み取って実行することはできますが、変更することはできません。
例 2: シンボリック モードを使用して権限を変更する
chmod u+x filename
このコマンドは、ユーザーに 'filename' の実行権限を追加します。詳細は次のとおりです。
- u: ユーザーを表します。
- +: 権限が追加されていることを示します。
- x: 実行権限を表します。
要約すると、このコマンドはシステムに「このファイル ('filename') に対するユーザー (u) の実行 (+) 権限 (x) を追加する」ことを指示します。
例3: 権限の削除
chmod go-w filename
このコマンドは、'filename' からグループとその他のユーザーの書き込み権限を削除します。詳細:
- go: グループなどを表します。
- -: 権限が削除されていることを示します。
- w: 書き込み権限を表します。
したがって、このコマンドはグループおよび他のユーザーからの書き込み権限を削除し、ファイルのセキュリティを強化します。
例4: すべての権限を設定する
chmod ugo+rwx filename
このコマンドは、すべてのユーザーに 'filename' に対するすべての権限を付与します。内訳は次のとおりです。
- ugo: ユーザー、グループ、その他を表します。
- +: 権限が追加されていることを示します。
- rwx: 読み取り、書き込み、実行の権限を表します。
このコマンドは事実上、「filename」をすべてのユーザーに公開しますが、セキュリティ上の影響を考慮して慎重に使用する必要があります。
例5: -Rオプション付きでchmodを使用する
chmod -R 755 directoryname
このコマンドは、「directoryname」内のすべてのファイルとディレクトリの権限を再帰的に変更します。
- -R: 「再帰的」の略で、ディレクトリ内のすべてのファイルとディレクトリの権限を変更する場合に使用します。
ここで、このコマンドは、所有者に完全な権限を付与し、グループとその他のユーザーに 'directoryname' とそのネストされたすべてのファイルとディレクトリに対する読み取りおよび実行権限を付与します。
例6: グループ権限の変更
chmod g-wx filename
このコマンドは、グループから 'filename' の書き込み権限と実行権限を削除します。説明は次のとおりです。
- g: グループを表します。
- -: 権限が削除されていることを示します。
- wx: 書き込みおよび実行権限を表します。
その結果、「filename」に関連付けられたグループ メンバーは、それを変更したり実行したりできなくなります。
例7: 複数の権限の変更
chmod u=rwx,g=rx,o=r filename
このコマンドは、異なるタイプのユーザーに異なる権限を設定します。その機能は次のとおりです。
- u=rwx: ユーザーの読み取り、書き込み、実行権限を設定します。
- g=rx: グループの読み取りおよび実行権限を設定します。
- o=r: 相手の権限を読み取り専用に設定します。
これにより、さまざまなタイプのユーザーのアクセス レベルを細かく制御できます。
例8: 権限のコピー
chmod --reference=filename1 filename2
このコマンドは、権限を 'filename1' から 'filename2' にコピーします。
- –reference=filename1: 'filename1' が権限のコピー元の参照ファイルであることを示します。
このコマンドは、複数のファイルに同じ権限をすばやく適用する場合に便利です。
例 9: スティッキー ビットを使用した権限の変更
chmod 1757 directoryname
このコマンドは、「directoryname」のスティッキー ビット (1) と権限 (757) を設定します。
- スティッキー ビット (1) により、ファイル所有者、ディレクトリ所有者、またはルート ユーザーだけがファイルを削除または名前変更できるようになります。
- 757: ユーザーの読み取り、書き込み、実行権限 (7) と、グループおよび他のユーザーの読み取り、書き込み、スティッキー ビット権限 (5、7) を設定します。
これは、/tmp のように複数のユーザーによって共有されるディレクトリで、ユーザーが互いのファイルを削除したり名前を変更したりするのを防ぐのに特に役立ちます。
例 10: chmod を Find コマンドで使用する
find . -type f -exec chmod 644 {} \;
このコマンドは、現在のディレクトリとそのサブディレクトリ内のすべての通常ファイルを検索し、その権限を 644 (所有者の場合は読み取り/書き込み、グループとその他のユーザーの場合は読み取り) に変更します。
- find . -type f: 現在のディレクトリとサブディレクトリ内のすべてのファイルを検索します。
- -exec chmod 644 {} \;: 見つかった各ファイルの権限を変更します。
このコマンドは、特定の基準に基づいて複数のファイルの権限を変更する場合に便利です。
高度な chmod コマンドの例
他の Linux コマンドと同様に、chmod には作業をさらに簡単にするいくつかのトリックがあります。これらの高度な例を見てみましょう。
高度な例 1: 権限を再帰的に変更する
chmod -R 755 directoryname
このコマンドは、ディレクトリとそのすべての内容の権限を再帰的に変更します。その動作は次のとおりです。
- -R: これは再帰オプションです。ディレクトリとそのディレクトリ内のファイルに変更を適用します。
- 755: これにより、ユーザーの読み取り、書き込み、実行の権限 (7) と、グループおよび他のユーザーの読み取りと実行の権限 (5) が設定されます。
これは、ディレクトリとその中のすべてのファイルおよびサブディレクトリの権限を変更する場合に特に便利です。
高度な例 2: Setuid、Setgid、スティッキー ビットの設定
chmod 4755 filename
chmod 2755 directoryname
chmod 1755 directoryname
これらのコマンドは、ファイルまたはディレクトリの setuid、setgid、およびスティッキー ビットを設定します。
- setuid ビット (4): ファイルにこのビットを設定すると、ユーザーはファイルの所有者の権限でファイルを実行できます。
- setgid ビット (2): ディレクトリに設定すると、そのディレクトリ内に作成された新しいファイルとサブディレクトリは、作成者のプライマリ グループではなく、そのグループを継承します。
- スティッキー ビット (1): ディレクトリ内のファイルの削除を保護します。設定されている場合、ファイルの所有者、ディレクトリの所有者、またはルート ユーザーのみがファイルを削除できます。
上級例3: ディレクトリのみの権限を変更する
find /path -type d -exec chmod 755 {} \;
このコマンドは、指定されたパスの下のディレクトリの権限のみを変更し、ファイルはそのままにします。
- find /path -type d: 指定されたパスの下にあるすべてのディレクトリを検索します。
- -exec chmod 755 {} \;: 見つかった各ディレクトリの権限を変更します。
このコマンドは、ファイルではなくディレクトリの権限のみを変更する場合に便利です。
上級例4: ファイルのみの権限を変更する
find /path -type f -exec chmod 644 {} \;
このコマンドは、指定されたパスの下にあるファイルの権限のみを変更し、ディレクトリはそのままにします。
- find /path -type f: 指定されたパスの下にあるすべてのファイルを検索します。
- -exec chmod 644 {} \;: 見つかった各ファイルの権限を変更します。
このコマンドは、ディレクトリではなくファイルの権限のみを変更する場合に便利です。
上級例 5: 誰でも実行できるスクリプトを作成する
chmod +x scriptname
このコマンドは、ユーザー、グループ、その他のユーザーに 'scriptname' の実行権限を追加します。
- +x: 実行権限を追加します。
これは、新しいスクリプトを作成し、それを実行可能にする場合によく行われる操作です。
結論
chmod コマンドは、Linux でファイル権限を管理するために不可欠なユーティリティです。基本的な使用法から、再帰的な変更や特殊ビットの設定などのより高度なテクニックまで、chmod を理解することは、Linux のファイルを効果的に管理するための鍵となります。ここで紹介した例を参考にすれば、ニーズに応じて自信を持って権限を設定し、Linux 環境での生産性を高めることができるはずです。