気の向くままに辿るIT/ICT/IoT
UNIX/Linux

UNIX/Linuxコマンド umask/chmod/chown/chgrp

ホーム前へ次へ
umask、chmod、chown、chgrpとは?

UNIX/Linuxコマンド umask/chmod/chown/chgrp

umask/chmod/chown/chgrp

 UNIX/Linux及びシェルにおいてディレクトリやファイル(UNIX/Linuxでは何れもファイルタイプの1つ)のパーミッションモードを設定するコマンドにはumaskとchmodがあり、ディレクトリやファイルの所有権を変更するコマンドとしてユーザー変更にはchown、グループ変更にはchgrpがあります。

umask/chmod

 umaskはディレクトリファイルを新規作成する際のデフォルト(既定)の許可モードの設定をする為のコマンドです。

 chmod(change modeの略)はモードを変更するという意味合いで既存のディレクトリやファイルの許可モードの設定をする為のコマンドです。

umaskによるデフォルトパーミッションモードの設定と設定値

 umask値は、8進数3ケタで[r,w,x,-]を設定しますが、その設定値は、パーミッションビットとその増減値において(umask値7の時のファイルを除き)相対的な関係にあります。

 また、同じumask値でもディレクトリとファイルではその意味が異なります。

umaskディレクトリファイル
076
165 6
254
343 4
432
521 2
610
700

 umask値は、新規作成時の既定のパーミッションモードを設定しますが、ファイルの場合、umaskで実行権限を付与することができないことになっているのでファイルについては7がなくディレクトリとファイルの値はちょうど一段ずれた位置と一致し(umask値6と7ではファイルパーミッションモードは0になり)ます[ 2014/01/18 訂正: ]実行パーミッションにあたる1は、あり得ないことからumask値1,3,5,7の時のファイルビットは便宜的にディレクトリのビットと同じとなるようになっています

 例えば umask 022とあれば、umaskを縦方向に0,2,2と見た時それぞれ横方向のビットを見ていくとパーミッションモードはディレクトリが755、ファイルが644、これらの設定状態の意味するところや8進数モードとシンボリックモードの関係についてはファイルパーミッションビットに記述の通りです。

umask設定のタイミングと場所

 bashの場合、umask値は、一般にbashの各種設定ファイルの内、[/etc/profile]や[/etc/bashrc]に全ユーザー共通のumask値が設定されていると思います。

 もちろんホームディレクトリ内で一貫して変更したい場合には[~/.profile]やサブシェルで必ず読み込まれる(事を利用してログイン時に一度だけ読み込まれる[~/.bash_profile]で読み込んでおけばbash起動時に必ず読み込まれることになるので存在すれば読み込むと設定されていることが一般的な)[~/.bashrc]に記述することもできますし、必要があればそのスコープ内で完結するスクリプトなどの中で一時的に設定をすることもできます。

 一方、ディレクトリと異なりファイル作成時には実行ビットをセットできないのでシェルスクリプトなど実行権限が必要なファイルを作成した場合には実行前に実行権限を許可しなければなりません。

 そんな時に利用されるコマンドがchmodです。

chmodによるモード変更

 chmodによるモード変更方法には、シンボリックモードと8進数モードがあります。

chmodの設定

 シンボリックモードでは、下記の組み合わせによりパーミッションモードの設定をします。

 userは[u]、groupは[g]、otherは[o]、allは[a]または[ugo]か[省略] 

 許可は[+]、許可取り消しは[-]、設定は[=] 

 それぞれの権限はシンボリック値 [r]、[w]、[x] 

 例えばファイル所有者[u]に実行権限を許可[+]するには

$ chmod u+x hoge 

とするのも1つの方法で環境変数PATHにコマンドパスが適切にセットされていれば、shやbashなどシェル含む、awksed、perl、python、rubyなどのインタプリタ言語のスクリプトやC言語やJavaなどのコンパイル言語の実行ファイル(ls -Fによる一覧でファイル名末尾に*がついたファイル)に至るまで

$ hoge 

 または、カレントディレクトリを表す[ ./ ](ドット・スラッシュ)を付加して

$ ./hoge 

とすれば実行できます。

 groupに読み取り権限を許可[+]するには、

$ chmod g+r foo 

 全てから書き込み権限の許可を取り消す[-]には

$ chmod ugo-w bar 

$ chmod a-w bar 

としますが、ちなみに

$ chmod -w bar 

とすると全てではなくuserのみ適用されます。

 8進数モードでは、

 user / group / other の順にそれぞれ0~7の値 

$ chmod 700 foo.sh 

のように設定します。

ディレクトリ・ファイル所有権の変更

 ファイル所有権の変更には、所有ユーザーと所有グループの変更を行うchown(change own)コマンドと所有グループの変更を行うchgrp(change group)コマンドがあります。

$ chown [option] foo_user file_name 

$ chgrp [option] bar_group file_name 

LINK

ホーム前へ次へ