Chmod

chmod（change mode、チェンジモード）は、UNIXおよびUNIX系オペレーティングシステムにおけるシェルコマンドの一種である。ファイルやディレクトリのファイルモード（ファイルパーミッションなど）を変更するのに使われる。

 歴史 
 コマンドは、AT&T の最初の UNIX（Research Unix V1）に既に備わっており、今も UNIX 系オペレーティングシステムで使われている。

 使用法 
 コマンドのオプション形式は次の通り。

 $ chmod [options] mode file1 ...

現在のパーミッション設定を見るには、次のように入力する。

 $ ls -l

 オプション 
主なオプションとして、次のものがある。
: 再帰的にディレクトリとその配下のファイル群のモードを変更する。
: Verbose（冗長）モード。処理中の全ファイル名をリスト表示する。

 文字列によるモード指定 
 では、全パーミッションと特殊モードを mode パラメータで表現する。ファイルやディレクトリのモードを指定する1つの方法としてシンボリックモードがある。シンボリックモードは、3つの部分からなる文字列で表される。

 $ chmod [references][operator][modes] file1 ...

references はクラス（ユーザ、グループ、その他）を指定するのに使われる。references が指定されない場合、全クラスを意味する。以下の文字を使って指定する。
 Reference  クラス   説明   ユーザ    ファイルの所有者  グループ  所有者が属するグループ  その他    グループ以外の全ユーザ  全て      上記3つ全て。ugo と指定するのと同じ

operator はモードの処理方法を指定する。
 Operator  説明  指定されたモードを指定されたクラスに追加する。  指定されたモードを指定されたクラスから削除する。  指定されたモードが指定されたクラスの正確な内容となる。つまり、指定されなかったモードは削除され、指定されたモードだけが付与される。

modes はモードを指定する。基本パーミッションに対応して3つの基本モードがある。
 Mode  名称  説明  リード   ファイルを読み出し可能、ディレクトリ内容を参照可能  ライト  ファイルやディレクトリに書き込み可能  実行  ファイルを実行可能、ディレクトリに移動可能X  特殊実行  パーミッション自体ではないが、x の代わりに使うことができる。ディレクトリについては現在のパーミッションに関係なく実行パーミッションを付与するが、ファイルについては（クラスに関係なく）現在のパーミッションで実行パーミッションが設定されている場合のみ実行パーミッションを付与する。operator が '+' で、-R オプションを使う場合のみ便利である。  setuid/gid  後述  sticky  後述

これら3要素で構成される文字列がシンボリックモードでのパーミッション指定として認識される。複数の変更があるときは、それらをカンマで連結して指定すればよい。

 例 
次の例は、 という名前のファイルまたはディレクトリについて、ユーザクラスおよびグループクラスのリードパーミッションとライトパーミッションを付与するものである。
$ chmod ug+rw sample
$ ls -ld sample
drw-rw----   2 unixguy  unixguy       96 Dec  8 12:53 sample

次の例は、全パーミッションを削除するもので、 は読み出すことも書き込むことも実行することもできなくなる。
$ chmod a-rwx sample
$ ls -l sample
----------   2 unixguy  unixguy       96 Dec  8 12:53 sample

次の例は、ユーザおよびグループのパーミッションをリードと実行だけに設定する（ライトは不可とする）。

 コマンド実行前の sample のパーミッション
$ ls -ld sample
drw-rw----   2 unixguy  unixguy       96 Dec  8 12:53 sample
$ chmod ug=rx sample
$ ls -ld sample
dr-xr-x---   2 unixguy  unixguy       96 Dec  8 12:53 sample

 八進数によるモード指定 
 コマンドは、三桁か四桁の八進数でモードを指定できる。これを絶対モード指定と呼ぶ。例えば、次のように指定する。

 $ chmod 0664 sample

sample というファイルの 、、 ビットが設定されていない場合、これは以下と等価である。

 $ chmod 664 sample

あるいは

 $ chmod +r,-x,ug+w sample

 特殊モード 
 コマンドは、ファイルやディレクトリの追加パーミッション（あるいは特殊モード）も変更可能である。シンボリックモードでは  が setuid と setgid モードを表し、 が sticky モードを表す。それぞれ、特定のクラスでのみ有効である。詳しくはファイルパーミッションを参照されたい。

多くのオペレーティングシステムでは絶対モードでの特殊モード指定が可能だが、一部では不可能なOSもあり、その場合はシンボリックモードでしか指定できない。

 例 
 – 全てのリードパーミッションを付与
 – 全ての実行パーミッションを削除
 – 所有者にはリード/ライトパーミッションをセットし、グループおよびその他については全パーミッションを削除
 – 全てのリード/ライトパーミッションを付与
 – ディレクトリ docs とその配下の全ファイルについて、ユーザ（所有者）にはライトパーミッションを付与し、それ以外からはライトパーミッションを削除するよう変更
 – 全てのリード/ライトパーミッションを付与
 –  と等価。 は特殊モードを指定しないことを意味する。
 –  は setuid を意味する。
 – path/ 配下の全ディレクトリについて、a-x を設定する（ファイルのみの場合は '-type f'）
 – path/ 配下の全ディレクトリについて、全パーミッションを付与する
 – 所有者パーミッションはディレクトリについては rwx、ファイルについては rw を設定し、それ以外のパーミッションは --- とする。]
 - すべての利用者にすべての権限を付与「パーミッションなどを設定する！chmodコマンドの詳細まとめ【Linuxコマンド集】」2023年6月6日閲覧。

 脚注 

 関連項目 
ファイルパーミッション
chown - ファイルやディレクトリの所有者（ユーザ）を変更するコマンド
chgrp - ファイルやディレクトリのグループを変更するコマンド
cacls - Microsoft Windows NTおよびその後継OSでの類似コマンド。アクセス制御リスト (ACL) の変更を行う。
ユーザー識別子とグループ識別子

 外部リンク 

GNU "Setting Permissions" manual
Solaris 9 chmod man page（英語）
Mac OS X chmod man page - アクセス制御リストもサポートしている。
CHMOD-Win 3.0 — Windows の ACL と CHMOD のコンバーター（フリーウェア）

Category:標準UNIXプログラム
Category:1969年のソフトウェア