連載
» 2016年05月23日 05時00分 UPDATE

Linux基本コマンドTips(14):【 chmod 】コマンド――ファイル/ディレクトリのパーミッション(許可属性)を変更する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「chmod」コマンドです。

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、ファイルのパーミッション(許可属性)を変更するための「chmod」コマンドです。

chmodコマンドとは?

 ファイルやディレクトリにアクセスできるかどうかは、ファイルの「パーミッション(許可属性)」によって決まります。このパーミッションを変更するコマンドが「chmod」です。

 なお、現在ファイルやディレクトリに設定されているパーミッションは、「ls -l」コマンドや「stat」コマンドで確認できます([参考]“応用力”をつけるためのLinux再入門 第9回:「ls -l」コマンドの表示からファイルの属性を理解しよう)。


chmodコマンドの書式

chmod [オプション] モード ファイル1 ファイル2 ファイル3……

(指定したモードに従ってファイルのパーミッションを変更する)

※[ ]は省略可能な引数を示しています



chmodコマンドの主なオプション

 chmodコマンドの主なオプションは次の通りです。

短いオプション 長いオプション 意味
-R --recursive ファイルとディレクトリを再帰的に変更する
--preserve-root 「/」に対する再帰的な操作は行わない
--no-preserve-root 「/」を特別扱いしない(デフォルト)
--reference=参照ファイル 参照ファイルと同じパーミッションにする
-v --verbose 処理した内容を出力する
-c --changes 変更が行われた場合のみ処理内容を出力する
-f --silent、--quiet ほとんどのエラーメッセージを出力しない


パーミッションを表すアルファベットと数値の意味

 ファイルやディレクトリのパーミッションは、「r(読み出し可能)」「w(書き込み可能)」「x(実行可能)」の3つのアルファベットで表します。

 パーミッションを与える対象は、「所有者」「所有グループ」「それ以外(他人)」の3つに分かれています。「ls -l」コマンドで確認すると、「rw-rw-r--」のように9文字のアルファベットで表示されます。

 「ls -l」コマンドで表示される内容の先頭文字はファイルの種類で、ディレクトリは「d」、シンボリックリンクは「l」、通常のファイルは「-」が表示されます。通常のデータファイルであれば、「-rw-rw-r--」のように表示されます。

 パーミッションを数値で表す場合は、「読み出し可能(r)=4」「書き込み可能(w)=2」「実行可能(x)=1」となります。

パーミッション 数値 意味
r 4 読み出し可能(ディレクトリの場合は、ファイル一覧の表示の許可)
w 2 書き込み可能(ディレクトリの場合は、ファイルの追加/削除の許可)
x 1 実行可能(ディレクトリの場合は、cdコマンドでそのディレクトリに入れるか)
- 0 許可がない
パーミッションと数値の対応

 例えば、読み出しと書き込みが可能な場合は「6」(=4+2)、全ての操作が可能であれば「7」(=4+2+1)、全ての許可がない場合は「0」となります。また、「rw-rw-r--」「rwxr-xr-x」は、それぞれ以下のように「664」「755」と表すことができます。

パーミッションを数値で表すと……

rw-(6)rw-(6)r--(4)= 664

rwx(7)r-x(5)r-x(5)= 755


 実際には、これらとは別の特別な属性も存在するので、statコマンドでは「0644」「0755」のように4桁で表示されます。



パーミッションを変更する

 chmodは、パーミッション(許可属性)を変更するコマンドです。読み出し可能を「r」、書き込み可能を「w」、実行可能を「x」で表現し、権限を追加したい場合は「+」、禁止したい場合は「-」で指定します。追加や削除ではなく、値を指定したい場合は「=」で指定します。

コマンド実行例

chmod +x myscript

(myscriptというファイルに実行可能属性を追加する)

chmod =rx myscript

(myscriptというファイルに読み出し可能と実行可能だけを設定する(元のファイルに書き込み権限があった場合は削除される))

chmod 755 myscript

(myscriptというファイルのパーミッションを755[rwxr-xr-x]に設定する)


 なお、パーミッションは、ファイルやディレクトリの所有者またはスーパーユーザーしか変更することができません。



パーミッションを与える対象を指定する

 パーミッションを変更する対象を限定したい場合は、所有者なら「u」、グループなら「g」、それ以外の“他人”なら「o」を組み合わせて指定します。

 例えば、所有者にだけ実行許可を与えるには「chmod u+x ファイル名」、他人には読み書き実行の全てを許可しないようにするには「chmod o-rwx ファイル名」と指定して実行します。

コマンド実行例

chmod u+x myscript

(myscriptというファイルに対し所有者にだけ実行可能属性を追加する)

chmod o-rwx mysccript

(所有者、所有ユーザー以外のユーザーに対して読み出し/書き込み/実行を禁止する)


 全てのユーザーを対象とする場合は「a」で指定します。なお、対象を指定しなかった場合も全てのユーザーが対象となりますが、この場合は後述する「マスク値(umask)」の影響を受けることになります。



パーミッションのマスク値(umask)とは?

 ファイルやディレクトリを作成する際のデフォルトのパーミッションは、「umask」コマンドで設定します。

コマンド実行例

umask

(現在の設定値を表示する)

umask 022

(マスク値を「022」にセットする)


 CentOSの場合、umaskの設定値は「002」となっています(※)。これが、ファイルやディレクトリを作成する際のデフォルトのパーミッションの「マスク値」となります。

※実際には4桁で「0002」と表示されます。1桁目は通常のパーミッションとは異なる意味を持つ値で、umaskでは「0」で固定されていると考えて問題ありません。本稿では、3桁の数値のみに着目して解説しています。



 パーミッションは、2進数で見たときにどのビットが立っているか(「1」になっているかどうか)で管理されています。「4」「2」「1」を2進数で表現するとそれぞれ「100」「010」「001」となり、「6」(=4+2)ならば「110」、「7」(=4+2+1)ならば「111」となります。

 「7(111)」に対し「2(010)」でマスクすると、「5(101)」となります。また、「4(100)」に対し「2(010)」でマスクした場合は、「0」の部分は「0」のままなので結果は「4(100)」となります(図1)。

図1 図1 “マスク”はどう働くか

 umaskが設定されていない場合、ファイルやフォルダを作成する際のパーミッションは「666(読み書きを許可)」、ディレクトリは「777(全てを許可)」になります。これらの値から、umaskで設定された値を除いた(マスクした)値でファイルやディレクトリが作成されます(図2)。

図2 図2 デフォルトのパーミッションとumaskの関係


パーミッションの変更内容を確認するには?

 chmodコマンドで「-v」オプションを指定すると、コマンドの実行内容が分かるようになります。パーミッションが変更されなかった場合も、現状がどのようになっているかが分かるように表示されます(画面1)。

画面1 画面1 「chmod -v」コマンドでパーミッションの操作内容を確認する

※大量のファイルを一括で変更する場合など、“変更があった場合だけ表示したい”という場合は、「-v」オプションの代わりに「-c」オプションを使います。



 参考までに、以下は画面1で表示されているumaskコマンド、chmodコマンドの実行結果の詳細説明になります。

$ umask
0002
umaskコマンドの実行結果。現在のumask設定は「0002」
$ chmod -v +x myscript
`myscript' のモードを 0664 (rw-rw-r--) から 0775 (rwxrwxr-x) へ変更しました
「+x」で全員に実行権限を追加。実行権限(数値1)はマスクされていないので所有者、所有グループ、他人全てに「x」が追加されていることが分かる
$ chmod -v +w myscript
`myscript' のモードは 0775 (rwxrwxr-x) として保留されました
「+w」で全員に書き込み権限を追加。他人の書き込み権限(数値2)はマスクされているので、所有者と所有グループにだけ「w」が追加される(もともと付加されているので変更なしで保留)
$ chmod -v a+w myscript
`myscript' のモードを 0775 (rwxrwxr-x) から 0777 (rwxrwxrwx) へ変更しました
「a+w」で全員に書き込み権限を追加。対象を指定しているのでumaskの影響は受けない

筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。