手動でファイルとディレクトリのアクセス許可を変更するのに疲れましたか?ファイルとディレクトリのアクセス許可をより速く、効率的に変更する方法をお探しですか?もしそうなら、正しい場所に来たことをお知らせします。この記事では、chmod
コマンドを使用してファイルとディレクトリのアクセス許可を再帰的に変更する方法を学びます。
続けて読んで、詳細を学んでください!
前提条件
この説明に従うためには、Linuxデバイスと、アクセス許可の変更を練習するために利用可能なファイルとサブディレクトリを持つディレクトリが必要です。
Linuxのユーザーとグループについて学ぶ
所有者とグループは、Linuxでファイルとディレクトリを安全に管理するために重要です。所有者は、ファイルやディレクトリが割り当てられるユーザーであり、デフォルトでは作成者です。Linuxでは、ファイルとディレクトリはグループにも属しています。ユーザーとグループの両方は、chown
コマンドを使用して設定されます。
以下のスクリーンショットでは、緑でハイライトされた部分がファイルやディレクトリの所有者であり、この例ではmihail
です。青でハイライトされた部分は、ファイルやディレクトリが属しているグループを示しており、この例ではstaff
グループが所有しています。

Linuxのファイルとディレクトリのアクセス許可の理解
許可は、ユーザーまたはグループが特定のファイルまたはディレクトリで実行できる操作を設定します。許可は文字列表現で示され、数値値も割り当てられます。
- 読み取り(
r
または4
):ユーザーまたはグループがファイルまたはディレクトリの内容を読み取ることができるかどうかを示します。読み取り許可は、すべての新しく作成されたファイルとディレクトリに対して、すべての当事者に対してデフォルトで付与されます。 - 書き込み(
w
または2
):ユーザーまたはグループがオブジェクトの内容を編集できるかどうかを示します。この許可は、デフォルトではファイルまたはディレクトリの所有者にのみ付与されます。 - 実行(
x
または1
):ユーザーまたはグループがファイルを実行するか、ディレクトリ内でコマンドを実行することができるかどうかを示します。実行許可は、ディレクトリにのみデフォルトで付与されますが、ファイルには付与されません。
ディレクトリにユーザー(
u
)に実行許可を与えない場合、ユーザーはディレクトリ内でコマンドを実行できないため、内容をリスト表示することができません!
以下に例を示します。コマンドls -l
の出力は、異なる許可タイプを示しています。 d
の値に先行するこれらの許可は、ディレクトリを示します。

なぜ、それぞれのオブジェクトに seemingly 三つの許可セットがあるのでしょうか?許可の詳細な制御は、下記にリストされたセクション(このチュートリアルでは当事者として参照されます)に許可を分割することによって達成されます。
- ユーザー(
u
): ファイルやディレクトリの所有者、青で強調表示されます。 - グループ(
g
): ファイルやディレクトリが所属するグループのメンバー、緑で強調表示されます。 - その他(
o
): 明示的に割り当てられていない他のユーザーやグループ全体、赤で強調表示されます。

chmod recursive コマンドを使用してファイルのパーミッションを変更する
適切な Linux のパーミッションの理解がある場合は、以下の例を参照してファイルのパーミッションを変更する方法を学びます。
1. まず、ls -l
コマンドで現在のパーミッションを確認します。ここでは、my_dir/index.js ファイルが表示されています。

2. chmod
コマンドを実行し、パーティ(a
、すべて)とパーミッション(rwx
、読み取り/書き込み/実行)を指定します。完全なコマンドは次のようになります:chmod a=rwx index.js
。

3. chmod
recursive を実行しても出力が表示されません。パーミッションが変更されたことを確認するには、再度 ls -l
コマンドを実行します。

数値を使用してファイルのパーミッションを設定する
読み取りや書き込みなどのパーミッションに関連付けられた数値を覚えていますか? 文字値を指定する代わりに、数値を使用して特定のパーミッションを指定することができます。値を追加することで、書き込み(2
)と読み取り(4
)のパーミッションを組み合わせた 6
のような特定のパーミッションを作成します。
以下の例では、main.pyファイルのパーミッションをchmod 664 main.py
コマンドを使用して設定します。数値は以下のように分解されます。
- ユーザー: 読み取りと書き込み (
6
)。 - グループ: 読み取りと書き込み (
6
)。 - その他: 読み取り (
4
)。

パーミッションが変更されたら、ls -l
コマンドを使用してmain.pyファイルの新しいパーミッションを確認します。

ファイルのパーミッションの削除と追加
これまで実行した非数値コマンドでは、chmod
再帰を使用して明示的なパーミッションを設定するために割り当てパラメーター (=
) を使用しました。代わりに、既存のパーミッションセットに対してパーミッションを削除 (-
) または追加 (+
) することができます。
1. 最初に、README.mdファイルの既存のパーミッションをls -l README.md
コマンドでリストします。

2. 次に、README.mdに対して、ユーザーパーティ (u
) に実行 (x
) パーミッションを追加 (+
) し、その他パーティ (o
) から読み取り (r
) パーミッションを削除 (-
) するには、次のコマンドを使用します:chmod u+x,o-r README.md
。異なるパーティのパーミッションはコンマ (,
) で区切られます。

3. ls -l README.md
コマンドを実行して、パーミッションが変更されたことを確認します。

ファイルとディレクトリのパーミッションを再帰的に変更する
進歩は見られますが、1つのファイルずつしか操作していません。もし多数のファイルのパーミッションを変更する必要がある場合はどうでしょうか?さらなる進化を遂げ、複数のファイルのパーミッションを変更する方法を学びましょう。
複数のファイルのパーミッションを変更するオプションの1つは、chmod
を再帰的に実行することです。再帰的なオプション-R
を使用すると、指定したパス内のすべてのファイル(およびサブディレクトリ内のファイルも含めて)のパーミッションを変更することができます。
1. 次のコマンドを考えてみましょう:chmod -R a=r,u=rwx my_dir
。ほとんどのオプションは既に見たことがあるものです。
このコマンドは、ディレクトリmy_dirおよびそのサブディレクトリ内のすべてのファイルのパーミッションを再帰的に変更します(-R
オプション)。ファイルのパーミッションは、すべてのユーザー(a
)に対して読み取り可能(r
)に設定され、現在のユーザー(u
)には読み取り、書き込み、実行の完全な権限が設定されます。
以下のスクリーンショットでは、コマンドを実行した後のパーミッションの結果が表示されていますが、出力はありません。

2. 同じディレクトリmy_dirに対して、chmod -R a=rwx my_dir
というコマンドを実行したとします。再び、my_dirおよびそのサブディレクトリ内のすべてのファイルのパーミッションが変更され、すべてのユーザー(a
)に対して読み取り、書き込み、実行の完全な権限が与えられます。このコマンドの結果は、chmod
の再帰的な実行では出力されないため、次のようになります。

3. 数値メソッドはどうですか?以下に示すように、再帰的なメソッドも数値パーミッションで機能します、chmod -R 770 my_dir
。ここではユーザーとグループに完全なパーミッションを与え、他のパーティにはパーミッションを与えていません。

4. ls -l
を実行して、my_dirのファイルとサブディレクトリのパーミッションが数値メソッドで設定されているかを確認します。

特殊パーミッションを使用してファイルとフォルダの動作を定義する
特殊パーミッションには、標準的なパーミッションセットとは異なるいくつかの追加特権があります。特殊パーミッションは3つあります。これらの特殊パーミッションの働き方と、ファイルやディレクトリにそれらを追加する方法について説明します。
SUID(ユーザー+ S)パーミッションの設定
一般的にはSUIDとして知られており、これはユーザーに対する特殊なパーミッションです。 SUIDには単一の機能があります:ファイルにSUIDが設定されている場合、ファイルは常にそのファイルの所有者として実行されます。実行している人物に関係なく、です。
たとえば、index.jsを考えてみましょう。追加のSUIDパーミッションを与えるには、chmod u+s index.js
を実行します。
今、ls -l index.js
を実行すると、ユーザーのパーミッションにsが表示され、xではありません。

SGID(グループ+ S)パーミッションの設定
一般的にはSGIDとして知られているこの特殊パーミッションには2つの機能があります:
- ファイルに設定されている場合、ファイルは実行されている人物に関係なく、そのファイルを所有するグループとして実行されます。
- ディレクトリに設定された場合、ディレクトリ内で作成されたファイルの「グループ」所有権がディレクトリの所有者に設定されます。
index.phpファイルで実践してみましょう。このファイルに「SGID」パーミッションを追加するには、次のコマンドを実行します:chmod g+s index.php
。
これで、ls -l index.php
を実行すると、「グループ」のパーミッションに「s」が表示されます。

次にディレクトリに移動します:my_dir。次のコマンドを使用してこのディレクトリに「SGID」パーミッションを追加できます:chmod g+s my_dir
。このディレクトリ内で作成されたファイルの「グループ」所有権がディレクトリの所有者に設定されます。ディレクトリの新しいパーミッションは、ls -ld my_dir
で確認できます(d
パラメータはディレクトリのみの出力を制限します)。

スティッキービットのパーミッションを変更します。
最後の特殊なパーミッションは「スティッキービット」とも呼ばれます。このパーミッションは個々のファイルには影響しませんが、ディレクトリレベルではファイルの削除を制限します。そのディレクトリの「所有者」のみがそのディレクトリ内のファイルを削除できます。
古くからおなじみのmy_dirディレクトリにスティッキービットを追加します。次のコマンドを実行します:chmod +t my_dir
。
スティッキービットを追加する際に、
+t
の前に「その他」グループ(o)を示す必要はありません。
my_dirの新しいパーミッションを確認すると、以下のスクリーンショットに示されているように、「その他」のパーミッションに大文字のTが表示されます。

結論
おめでとうございます!あなたはchmod
再帰について多くのトピックをカバーしました。あなたは今や、万能なchmod
ツールで発生する厄介な許可の問題に対処する準備ができています。さらに、再帰(-R
)オプションの力を活用する方法も学びました。
次回ファイルやディレクトリのパーミッションを管理する必要がある場合、どのようにchmod
の多機能性を利用する予定ですか?