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

歴史

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

使用法

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

$ chmod [options] mode file1 ...

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

$ ls -l

オプション

主なオプションとして、次のものがある。

  • -R: 再帰的にディレクトリとその配下のファイル群のモードを変更する。
  • -v: Verbose(冗長)モード。処理中の全ファイル名をリスト表示する。

文字列によるモード指定

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

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

references はクラス(ユーザ、グループ、その他)を指定するのに使われる。references が指定されない場合、全クラスを意味する。以下の文字を使って指定する。

operator はモードの処理方法を指定する。

modes はモードを指定する。基本パーミッションに対応して3つの基本モードがある。

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

次の例は、sample という名前のファイルまたはディレクトリについて、ユーザクラスおよびグループクラスのリードパーミッションとライトパーミッションを付与するものである。

次の例は、全パーミッションを削除するもので、sample は読み出すことも書き込むことも実行することもできなくなる。

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

コマンド実行前の sample のパーミッション

八進数によるモード指定

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

$ chmod 0664 sample

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

$ chmod 664 sample

あるいは

$ chmod  r,-x,ug w sample

特殊モード

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

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

  • chmod r file – 全てのリードパーミッションを付与
  • chmod -x file – 全ての実行パーミッションを削除
  • chmod u=rw,go= file – 所有者にはリード/ライトパーミッションをセットし、グループおよびその他については全パーミッションを削除
  • chmod rw file – 全てのリード/ライトパーミッションを付与
  • chmod -R u w,go-w docs/ – ディレクトリ docs とその配下の全ファイルについて、ユーザ(所有者)にはライトパーミッションを付与し、それ以外からはライトパーミッションを削除するよう変更
  • chmod 666 file – 全てのリード/ライトパーミッションを付与
  • chmod 0755 file – u=rwx (4 2 1),go=rx (4 1 & 4 1) と等価。0 は特殊モードを指定しないことを意味する。
  • chmod 4755 file – 4 は setuid を意味する。
  • find path/ -type d -exec chmod a-x {} \; – path/ 配下の全ディレクトリについて、a-x を設定する(ファイルのみの場合は '-type f')
  • find path/ -type d -exec chmod 777 {} \; – path/ 配下の全ディレクトリについて、全パーミッションを付与する
  • chmod -R u rwX,g-rwx,o-rwx – 所有者パーミッションはディレクトリについては rwx、ファイルについては rw を設定し、それ以外のパーミッションは --- とする。]
  • chmod 777 file - すべての利用者にすべての権限を付与

脚注

関連項目

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

外部リンク

  • chmod(1) - Linux JM Project
  • chmod(1) - OpenBSD(英語)
  • chmod(1) - HMUGリファレンスマニュアル(英語)
  • chmod(1) - Debianリファレンスマニュアル(日本語)
  • GNU "Setting Permissions" manual
  • Solaris 9 chmod man page(英語)
  • Mac OS X chmod man page - アクセス制御リストもサポートしている。
  • CHMOD-Win 3.0 — Windows の ACL と CHMOD のコンバーター(フリーウェア)

Guide to Understanding chmod

chmod command in Linux with examples Linux command line tutorial

How to chmod files only on Linux

Chmod Tutorial — GeekScribes

chmod Meaning What is chmod Command in UNIX? Nexcess