chmodの使い方
「chmod」コマンドを使用することでファイルやディレクトリのパーミッション(アクセス権限)を変更することが出来ます。
パーミッションについての詳しい説明はこちらのページを参照願います。
コマンド書式
chmod オプション パーミッション ファイルまたはディレクトリ
使用例
パーミッションは数字で指定する方法と、シンボル(文字)で設定する方法があります。
$ chmod 777 test.txt (数値で設定する場合) $ chmod a=rwx test.txt (シンボルで設定する場合)
上記はどちらも「test.txt」ファイルのパーミッション「読み込み」「書き込み」「実行」を、すべてのユーザを対象に許可しています。
オプション
「chmod」コマンドで使用できるオプション一覧です。
オプション | 説明 |
---|---|
-R --recursive |
ディレクトリ内のデータもあわせてパーミッションの変更を行う |
-c --changes |
パーミッションに変更があった場合のみ変更内容を表示 |
-f --silent --quite |
エラーメッセージを表示しない |
-v --verbose |
パーミッションの変更内容を表示 |
--reference=参照データ | 指定したデータと同じパーミッションを設定 |
--no-preserve-root | 「/」ディレクトリのパーミッションを変更させない(初期設定) |
--preserve-root | 「/」ディレクトリのパーミッションを変更する場合に使用(ほぼ使用する機会はないでしょう) |
パーミッションの指定方法
「chmod」でパーミッションを指定する場合には「数値」を使用する方法と、「シンボル(文字)」を使用するという2種類の方法がありますので、それぞれの指定方法について説明をしていきます。
数値を使用
パーミッションを数値で指定する場合は、「所有ユーザ」「所有グループ」「その他のユーザ」ごとにパーミッションを指定する必要があるため、通常3桁の数値でパーミッションを指定することになります。
※「suid」「sgid」「sticky bit」などの特殊なパーミッションを設定する場合は4桁の数値で設定することになります。
パーミッションと数値の対応表
各パーミッションの値は下記の通りとなり、実際に指定する場合は有効とするパーミッションの数値を合計した値を指定します。
パーミッション | 数値 |
---|---|
読み込み許可 | 4 |
書き込み・変更(作成・削除)許可 | 2 |
実行許可 | 1 |
許可なし | 0 |
パーミッションの組み合わせ一覧
パーミッションの組み合わせは下記の8通りとなります。
パーミッション内容 | 数値 |
---|---|
「読み込み」「書き込み」「実行」のすべてを許可 | 7 (4 + 2 + 1) |
「読み込み」「書き込み」を許可 | 6 (4 + 2 + 0) |
「読み込み」「実行」を許可 | 5 (4 + 0 + 1) |
「読み込み」のみ許可 | 4 (4 + 0 + 0 ) |
「書き込み」「実行」を許可 | 3 (0 + 2 + 1) |
「書き込み」のみ許可 | 2 (0 + 2 + 0) |
「実行」のみ許可 | 1 (0 + 0 + 1) |
許可なし | 0 (0 + 0 + 0) |
設定例
パーミッションは左から「所有ユーザ」「所有グループ」「その他のユーザ」の設定となるので、それぞれに設定したい数値を指定していきます。
- 所有ユーザ 「読み込み」「書き込み」「実行」のすべてを許可 (7)
- 所有グループ 「読み込み」「実行」を許可 (5)
- その他のユーザ 「読み込み」「実行」を許可 (5)
といったパーミッションを「test.sh」というファイルに設定する場合は、下記のように設定を行います。
$ chmod 755 test.sh
シンボル(文字)を使用
シンボルを使用してパーミッションを設定する場合は、以下の項目に対応するシンボルを組わせて設定を行っていきます。
- 設定対象ユーザ (誰に)
- パーミッション (どのパーミッションを)
- 設定内容 (どのように設定するか)
設定対象ユーザ
パーミッションを設定する対象を「所有ユーザ」「所有グループ」「その他のユーザ」「全てのユーザ」から指定します。
対象とシンボルの対応表
設定対象とシンボルの対応は下記の通りとなります。
シンボル | 設定対象 |
---|---|
u | 所有ユーザ(user) |
g | 所有グループ(group) |
o | その他のユーザ(ohters) |
a | 全てが対象(all) |
設定なし | 何も設定指定しない場合は全てが対象となる |
パーミッション
「読み込み」「書き込み」「実行」のパーミッションとシンボルの対応は下記のとおりとなります。
シンボル | 設定対象 |
---|---|
r | 読み込み許可 |
w | 書き込み・変更許可 |
x | 実行許可 |
X | フォルダのみに実行許可を追加 |
設定内容
パーミッションをどのように設定するかを「追加」「削除」「指定」といった動作で指定します。
シンボル | 設定対象 |
---|---|
- | 削除 |
+ | 追加 |
= | 指定したパーミッションのみ有効 |
設定例
シンボルによるパーミッションの設定例をいくつかあげさせていただきます。
パーミッションの指定
「test.txt」というファイルの「所有ユーザ(u)」へ「読み込み(r)」「書き込み(w)」「実行(x)」の許可するというパーミッションを「指定(=)」してみます。
$ chmod u=rwx test.txt
「所有ユーザ」のパーミッションが「rwx」と設定されていることが確認できました。
$ ls -l test.txt -rwxrw-r-- 1 tamohiko tamohiko 0 Jul 24 17:09 test.txt
パーミッションの削除
「所属グループ(g)」から「書き込み(w)」許可のパーミッションを「削除(-)」してみます。
$ chmod g-w test.txt
「所有グループ」の「書き込み」権限が削除されていることが確認できました。
$ ls -l test.txt -rwxr--r-- 1 tamohiko tamohiko 0 Jul 24 17:09 test.txt
パーミッションの追加
「その他のユーザ(o)」に「実行(x)」許可のパーミッションを「追加(+)」してみます。
$ chmod o+x test.txt
「その他のユーザ」に「実行」権限が追加されていることが確認できました。
$ ls -l test.txt -rwxr--r-x 1 tamohiko tamohiko 0 Jul 24 17:09 test.txt
複数対象へのパーミッション設定
複数の対象へパーミッションを設定する場合は「,」(カンマ)で区切ることで、一度に複数の対象へパーミッションを設定することが出来ます。
「所有グループ(g)」と「その他のユーザ(o)」に対して「書き込み(w)」許可のパーミッションを「追加(+)」してみます。
$ chmod g+w,o+w test.txt
「所有グループ」と「その他のユーザ」のパーミッションに書き込み権限が追加されていることが確認できました。
$ ls -l test.txt -rwxrw-rwx 1 tamohiko tamohiko 0 Jul 24 17:09 test.txt
シンボルと数値のパーミッション対応表
シンボルと数値によるパーミッション組み合わせ一覧です。
シンボル | 数値 | パーミッションの内容 |
---|---|---|
rwx | 7 (4 + 2 + 1) | 「読み込み」「書き込み」「実行」のすべてを許可 |
rw- | 6 (4 + 2 + 0) | 「読み込み」「書き込み」を許可 |
r-x | 5 (4 + 0 + 1) | 「読み込み」「実行」を許可 |
r-- | 4 (4 + 0 + 0 ) | 「読み込み」のみ許可 |
-wx | 3 (0 + 2 + 1) | 「書き込み」「実行」を許可 |
-w- | 2 (0 + 2 + 0) | 「書き込み」のみ許可 |
--x | 1 (0 + 0 + 1) | 「実行」のみ許可 |
--- | 0 (0 + 0 + 0) | 許可なし |
オプションの使い方
「chmod」コマンドで使用できるオプションの使い方についてまとめてみました。
-R オプション
「-R」オプションを使用することで、ディレクトリ内に含まれているデータのパーミッションも変更することが出来ます
実行例
検証用に「test」フォルダを作成して、その中に「test01」「test02」「test03」というファイルを用意しておきます。
$ ls -l total 4 drwxrwxr-x 2 tamohiko tamohiko 4096 Jul 24 13:47 test $ ls -l test/ total 0 -rw-rw-r-- 1 tamohiko tamohiko 0 Jul 24 13:47 test01 -rw-rw-r-- 1 tamohiko tamohiko 0 Jul 24 13:47 test02 -rw-rw-r-- 1 tamohiko tamohiko 0 Jul 24 13:47 test03
-R オプション無しの場合
まずは「-R」オプションを指定せずに「test」ディレクトリのパーミッション「777」を変更してみます。
$ chmod 777 test
「test」ディレクトリとその中にあるファイルのパーミッションを確認すると、「test」ディレクトリのパーミッションだけが変更されていることが確認できました。
$ ls -l total 4 drwxrwxrwx 2 tamohiko tamohiko 4096 Jul 24 13:49 test $ ls -l test/ total 0 -rw-rw-r-- 1 tamohiko tamohiko 0 Jul 24 13:47 test01 -rw-rw-r-- 1 tamohiko tamohiko 0 Jul 24 13:47 test02 -rw-rw-r-- 1 tamohiko tamohiko 0 Jul 24 13:47 test03
-R オプションを指定した場合
次に「-R」オプションを指定して「test」ディレクトリのパーミッションを今度は「755」に設定してみます。
$ chmod -R 755 test
「test」ディレクトリとその中にあるファイルのパーミッションを確認すると、ディレクトリとその中のファイルのパーミッションが「755」に変更されていることが確認できました。
$ ls -l total 4 drwxr-xr-x 2 tamohiko tamohiko 4096 Jul 24 13:49 test $ ls -l test/ total 0 -rwxr-xr-x 1 tamohiko tamohiko 0 Jul 24 13:47 test01 -rwxr-xr-x 1 tamohiko tamohiko 0 Jul 24 13:47 test02 -rwxr-xr-x 1 tamohiko tamohiko 0 Jul 24 13:47 test03
-c オプション
「-c」オプションはパーミッションに変更があった場合のみ、メッセージを表示させたい場合に使用します。
使用例
まずは「test01」というファイルのパーミッションを確認してみます。
$ ls -l test01 -rwxr-xr-x 1 tamohiko tamohiko 0 Jul 24 13:47 test01
パーミッションが「755」に設定されているので、「-c」オプションを使用してパーミッションを現状とおなじ「755」で設定します。
$ chmod -c 755 test01
パーミッションに変更が無いため何もメッセージは表示されませんでした。
次にパーミッションを「777」に変更してみます。
$ chmod -c 777 test01 mode of ‘test01’ changed from 0755 (rwxr-xr-x) to 0777 (rwxrwxrwx)
パーミッションの変更があったので、「755」から「777」に変更されたというメッセージが表示されました。
-v オプション
「-v」オプションを使用するとパーミッションの変更がない場合でもメッセージを表示させることが出来ます。
使用例
$ ls -l test01 -rwxrwxrwx 1 tamohiko tamohiko 0 Jul 24 13:47 test01
パーミッションが「777」に設定されているファイルのパーミッションを、現状と同じ「777」と設定してみます。
「-c」オプションの場合と異なり、パーミッションの変更がなくてもメッセージが表示されます。
$ chmod -v 777 test01 mode of ‘test01’ retained as 0777 (rwxrwxrwx)
パーミッションを「755」に変更してみると、「777」から「755」に変更されたというメッセージが表示されました。
$ chmod -v 755 test01 mode of ‘test01’ changed from 0777 (rwxrwxrwx) to 0755 (rwxr-xr-x)
-f オプション
「-f」オプションを使用するとエラーメッセージを表示しなくなります。
使用例
「-f」オプションを使用しない場合
存在しないファイルのパーミッションを変更しようとした場合、「-f」オプションを使用しない場合はエラーメッセージが表示されます。
$ chmod 777 abc.txt chmod: cannot access ‘abc.txt’: No such file or directory
「-f」オプションを使用した場合
「-f」オプションを使用して存在しないファイルのパーミッションを変更した場合は、エラーメッセージが表示されなくなりました。
$ chmod -f 777 abc.txt
ちなみに「-f」と「-v」オプションとあわせて使用してみると、パーミッションの変更に失敗していることが分かります。
$ chmod -fv 777 abc.txt failed to change mode of ‘abc.txt’ from 0000 (---------) to 0000 (---------)
--refernece=参照データ オプション
「--refernece」オプションを使用することで、参照したデータに設定されているパーミッションと同じ内容を設定することが出来ます。
使用例
参照用のデータとして「model.txt」というファイルを用意します。
$ ls -l model.txt -rw-r--r-- 1 tamohiko tamohiko 21 Jul 24 18:36 model.txt
「test.txt」に「--reference」オプションを使用してパーミッションを設定します。
$ chmod --reference=model.txt test.txt
「model.txt」と同じパーミッションが設定されていることが確認できます。
$ ls -l test.txt -rw-r--r-- 1 tamohiko tamohiko 0 Jul 24 17:09 test.txt
コメント