【 chmod 】コマンド――ファイル/ディレクトリのパーミッション(許可属性)を変更する:Linux基本コマンドTips(14)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「chmod」コマンドです。
本連載では、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)。
umaskが設定されていない場合、ファイルやフォルダを作成する際のパーミッションは「666(読み書きを許可)」、ディレクトリは「777(全てを許可)」になります。これらの値から、umaskで設定された値を除いた(マスクした)値でファイルやディレクトリが作成されます(図2)。
パーミッションの変更内容を確認するには?
chmodコマンドで「-v」オプションを指定すると、コマンドの実行内容が分かるようになります。パーミッションが変更されなかった場合も、現状がどのようになっているかが分かるように表示されます(画面1)。
※大量のファイルを一括で変更する場合など、“変更があった場合だけ表示したい”という場合は、「-v」オプションの代わりに「-c」オプションを使います。
参考までに、以下は画面1で表示されているumaskコマンド、chmodコマンドの実行結果の詳細説明になります。
$ umask 0002
$ chmod -v +x myscript `myscript' のモードを 0664 (rw-rw-r--) から 0775 (rwxrwxr-x) へ変更しました
$ chmod -v +w myscript `myscript' のモードは 0775 (rwxrwxr-x) として保留されました
$ chmod -v a+w myscript `myscript' のモードを 0775 (rwxrwxr-x) から 0777 (rwxrwxrwx) へ変更しました
筆者紹介
西村 めぐみ(にしむら めぐみ)
PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.