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 の代わりに使うことができる。ディレクトリについては現在のパーミッションに関係なく実行パーミッションを付与するが、ファイルについては(クラスに関係なく)現在のパーミッションで実行パーミッションが設定されている場合のみ実行パーミッションを付与する。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 のコンバーター(フリーウェア)