chmodコマンドとは
`chmod`(change mode)は、
UNIXおよび
UNIX系
オペレーティングシステムで、ファイルや
ディレクトリのアクセス権限(パーミッション)を変更するための
シェルコマンドです。このコマンドを使用することで、どのユーザーがファイルや
ディレクトリに対して読み取り、書き込み、実行の操作を行えるかを細かく制御できます。
歴史
`chmod`コマンドは、初期の
UNIXシステムである
AT&Tの
Research Unix V1にすでに存在していました。このコマンドは、
UNIX系OSの基本的なツールとして長年にわたり使用され続けています。
使用法
`chmod`コマンドの基本的な構文は以下の通りです。
bash
$ chmod [options] mode file1 ...
ここで`options`はコマンドの動作を調整するためのオプションであり、`mode`は変更するパーミッション設定、`file1 ...`は対象となるファイルや
ディレクトリです。
現在のパーミッション設定を確認するには、`ls -l`コマンドを使用します。
bash
$ ls -l
オプション
`chmod`コマンドには、いくつかの便利なオプションがあります。
`-R`:
ディレクトリとその配下のファイルや
ディレクトリに対して再帰的にパーミッションを変更します。
`-v`: コマンドが処理するファイル名を詳細に表示します。
モード指定
`chmod`コマンドでは、パーミッション設定を`mode`パラメータで指定します。モード指定には、主にシンボリックモードと八進数モードの2種類があります。
シンボリックモード
シンボリックモードは、3つの部分からなる文字列でパーミッションを指定する方法です。
bash
$ chmod [references][operator][modes] file1 ...
references: パーミッションを適用する対象(ユーザー、グループ、その他)を指定します。指定しない場合は、すべての対象が指定されます。
`u`: ユーザー(所有者)
`g`: グループ
`o`: その他
`a`: 全員(ユーザー、グループ、その他)
operator: どのようにパーミッションを変更するかを指定します。
`+`: パーミッションを追加
`-`: パーミッションを削除
`=`: パーミッションを設定
modes: 設定するパーミッションを指定します。
`r`: 読み取り権限
`w`: 書き込み権限
`x`: 実行権限
複数の変更を一度に行う場合は、カンマ`,`で区切って指定します。
八進数モード
八進数モードでは、3桁または4桁の八進数でパーミッションを指定します。各桁は、それぞれユーザー、グループ、その他のパーミッションを表し、4桁の場合は先頭桁が特殊モードを表します。
各パーミッションは以下の値で表されます。
`4`: 読み取り権限
`2`: 書き込み権限
`1`: 実行権限
これらの値を足し合わせることで、具体的なパーミッションを表現します。例えば、`6`は読み取り(4)と書き込み(2)の両方の権限を持つことを意味します。
特殊モード
`chmod`コマンドは、特殊モード(setuid、setgid、sticky bit)も変更できます。
`s`: setuidまたはsetgidを設定します。ファイルの場合、実行時に所有者またはグループの権限で実行されます。
ディレクトリの場合、その
ディレクトリに作成されるファイルやサブ
ディレクトリが親
ディレクトリのグループIDを継承します。
`t`: sticky bitを設定します。
ディレクトリの場合、その
ディレクトリ内のファイルは、ファイルの所有者、
ディレクトリの所有者、またはrootユーザーのみが削除できます。
シンボリックモードでは`s`と`t`で、八進数モードでは先頭の桁でこれらの特殊モードを指定します。
例
いくつかの`chmod`コマンドの例を示します。
`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`: 所有者には読み取り/書き込み/実行権限、グループとその他には読み取り/実行権限を付与します。最初の`0`は特殊モードを設定しないことを意味します。
`chmod 4755 file`: setuidを設定します。
`find path/ -type d -exec chmod a-x {} \;`: `path/`以下のすべての
ディレクトリから実行権限を削除します。
`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 のコンバーター(フリーウェア)