chmod コマンドでパーミッションを設定

ファイルのアクセス権限 (パーミッション) は chmod コマンドで設定できます。

1. パーミッション設定の基本となる考え方

設定方法を説明する前に、ファイルのパーミッション設定の基本的な考え方を説明します。

パーミッションのフラグの考え方

ファイルのパーミッション (「ファイルモード」とも言います) は 3 ビットのフラグで設定します。

100 読取り (r)
ディレクトリの場合はディレクトリ内のファイル一覧読取り
010 書込み (w)
ディレクトリの場合は新規ファイル作成
001 実行 (x)
ディレクトリの場合はディレクトリ内に移動してファイルの書込み

2進数の100 は 10進数で 4、010 は 2、 001 は 1 です。読取りと書込みを設定するなら、2進数のビットでいうと 110 ですが、 10進数でいえば 4 + 2 = 6 になります。

ユーザー毎にフラグを設定

「ファイルオーナー」「グループ」「他のユーザー」の三種類に分けて設定します。

user (u) ファイルオーナー
group (g) グループ
other (o) その他のユーザー

macOS ではグループは複数属することが可能ですが、デフォルトではファイルオーナーのプライマリーグループが設定されます。

例えば、file1.txt というファイルに対して、ファイルオーナーは読取りと書込み権限を与え、 グループとその他のユーザーに読取り権限だけ与えるとしたら、次のようなフラグになります。

区分 ファイルオーナー グループ その他のユーザー
区分コード u g o
権限 読取り (r)
書込み(w)
読取り (r) 読取り (r)
フラグ 110 100 100
10進数表記 6 4 4

パーミッションの設定方法

chmod コマンドでパーミッションを設定するには、大きく分けて二つの設定方法があります。

  • 絶対モード (absolute mode)
  • シンボリックモード (symbolic mode)

絶対モードによるパーミッションの設定

絶対モード (absolute mode) というのは、パーミッションを数値で設定する方法です。

例えば file1.txt というファイルに、上でみたような 644 のパーミッションを設定するには次のようにします。

% chmod 644 file1.txt

パーミッション情報付きでファイルの情報を表示するには ls コマンドを -l オプション付きで実行します。

% ls -l
total 8
-rw-r--r--@ 1 keisukeo  staff  26 Dec  1 00:51 file1.txt

パーミッションの横に表示されている @ 記号は、拡張ファイル属性が設定されていることを示しています。 拡張ファイル属性については「拡張ファイル属性の表示と編集」をみてください。

シンボリックモードによるパーミッションの設定

シンボリックモードはユーザーやパーミッションを表す記号を使って設定する方法です。

オーナーユーザー (u)、グループ (g)、その他のユーザー (o) それぞれに対してパーミッション r, w または x を設定できます。

例えば dir1 というディレクトリに、オーナーに全権限(rwx)、グループとその他のユーザーにディレクトリの読取り(r)とディレクトリ内への移動(x)を設定するには、 次のコマンドを実行します。

% chmod u=rwx,g=rx,o=rx dir1

ここで g と o に対して設定するパーミッションが rx で同じなので、次のように g と o をまとめても良いです。

% chmod u=rwx,go=rx dir1

また、パーミッションの追加や削除+ または - 記号で実行できます。例えば、グループ g から x 権限を削除するには、次のようにします。

% ls -l                     
total 8
drwxr-xr-x  4 keisukeo  staff  128 Dec  1 15:11 dir1
% chmod g-x dir1
% ls -l
total 8
drwxr--r-x  4 keisukeo  staff  128 Dec  1 15:11 dir1

3. パーミッションの設定例

ひとつひとつのファイルやディレクトリを指定して、パーミッションを設定するには、 上で説明した通りコマンドを実行すれば OK です。ところが、まとめてパーミッションを設定したいときもあります。

chmod コマンドには -R オプションがあり、 これを使うことで再帰的にディレクトリツリーをたどってパーミッションを設定できることになっています。

ところが、このオプションにはディレクトリのみ、ファイルのみ、という区別がないので少々使いにくいです。

もし、現在のディレクトリ以下のディレクトリ全てに、755 を設定するなら、 次のように find コマンドを使えます。

% find . -type d -exec chmod 755 {} \;

また、-iname オプションなどでファイル名、ディレクトリ名などでフィルターすることも可能です。

ここではパーミッション (ファイルモード) の設定を行う chmod コマンドの使い方について説明しました。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Swift による iOS 開発入門