5
2

chmodを理解する

Last updated at Posted at 2024-07-26

そもそもchmodとは

IBM Documentationでは、chmodコマンドについて次のように説明されています。

chmod コマンドは、指定されたファイルまたはディレクトリーのモード・ビットと拡張アクセス制御リスト (ACL) を変更します。

つまり、ファイルやディレクトリーの権限を設定するコマンドということです。

The chmod (CHange MODe) command is used to change permissions for a file or directory on a Unix machine.
(wikipedia)

chmodChange Modeの略です。ファイルやディレクトリーのモードを変更することを覚えるとわかりやすいです。

Linuxでは、ファイルやディレクトリーに対して「誰が何をできるのか」という権限を設定するために使用します。

この記事は、WikipediaとIBM Documentationの内容をもとに作成しています。

ファイルの権限を確認する

ls -l {ファイル名} と入力すると、以下のような内容が表示されます。内容を確認していきましょう!

$ ls -l findPhoneNumbers.sh
-rwxr-xr--  1 dgerman  staff  823 Dec 16 15:03 findPhoneNumbers.sh

先頭に表示される文字列の読み方

上記の例では、-rwxr-xr-- と謎の文字列が出力されました。この読み方を理解するには、Linuxのファイル権限について理解する必要があります。

3つの権限

Linuxには、3つの権限が存在します。

r w x
覚え方 Read Write eXecute
できること ファイルの読み取り ファイルの書き込み ファイルの実行

ディレクトリーがx(eXecute)できる場合は、そのディレクトリー内に入ることができるという意味です。

なので、前項で触れた-rwxr-xr--という文字列は、read write execute read execute read と言っていることが理解できると思います。なぜreadが3つの必要なのか、-とはどういった意味なのかは、Linuxの3つのユーザーについて知ると理解ができます。

3つのユーザー

3つのユーザーは下記のように分かれます。

u g o
覚え方 User Group Other
対象 ファイルの所有者 所有者の属するグループ それ以外の全てのユーザー

実は、先ほどの-rwxr-xr--という文字列は、このユーザーの権限が順番に表示されていました。

図にまとめると、このようになります。

meaning-of-ls-l-output.png

-は付与されていない権限を示すので、上記の図は、

  • Userに、Read Write eXecute 権限を付与し、
  • Groupに、Read eXecute権限を付与し、
  • Otherに、Read 権限を付与しています

なお、先頭の-の箇所はファイルの種類を示しています。今回の-は通常ファイルを意味しています。
その他にもdのディレクトリなどがありますが、この記事では割愛します。

これで、ファイル権限の読み方を理解していただけたと思います。
それではよく見るchmod 777などのコマンドがどういう意味か理解して行きましょう!

ファイルの実行権限を変更する

冒頭でもお話しした通り、ファイルの実行権限を変更するには、chmodコマンドを利用します。

chmodコマンドは、

  • シンボリックモード
  • オクタルモード

の2つの方法で使用できます。

シンボリックモード

シンボリックモードでは、権限を文字で表現します。
下記の例を見てみましょう。

chmod u+r file.txt
chmod g-w file.txt
chmod o=x file.txt

一見難しいように見えますが、これらはすでに紹介した内容と下記の内容を合わせると理解することができます。

+ - =
意味 モードの追加 モードの削除 モードの置き換え

+で既存のモードに、新たにモードを追加するため、

chmod u+r file.txt

では、UserReadモードを追加するという意味になります。

chmod g-w file.txt

では、GroupのモードからWriteモードを削除していて、

chmod o=x file.txt

では、OtherのモードをeXecuteのみに置き換えています。

シンボリックモードは、一度意味を理解するとわかりやすいですが、もっと簡単に設定する方法があります!

オクタルモード (Numerical Permission)

オクタルモードでは、各権限を数字で表現します。

  • 読み取り (r) = 4
  • 書き込み (w) = 2
  • 実行 (x) = 1

この数字の合計値は、必ず一意になるように設計されています。

chmod [uの値][gの値][oの値] file.txt

のように表現します。

例えば、chmod 756 file.txtのようなケースを考えてみましょう。

chmod-example-756.png

上記の図の通り左から、

  • ユーザー (7) = 読み取り (4) + 書き込み (2) + 実行 (1) = 7
  • グループ (5) = 読み取り (4) + 実行 (1) = 5
  • その他 (6) = 読み取り (4) + 書き込み (2) = 6

という読み方になります。

つまり、ファイルの所有者は全ての権限を持ち、グループは読み取りと実行権限を持ち、その他のユーザーは読み取りと実行権限のみを持つことになります。

そのほかのケースも考えてみましょう。

chmod-example-777.png

上記の通り、全てのユーザーに全ての権利を付与します。

chmod-example-000.png

逆に、全てのユーザーから全ての権限を削除する場合はこのように書きます。

このように、chmodコマンドを使うことで、Linuxのファイルやディレクトリーの権限を柔軟に設定・管理することができます。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2