システム・プログラム
電子・情報工学系
新城 靖
<yas@is.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/syspro-2000/2000-05-01
/process-umask.html
あるいは、次のページから手繰っていくこともできます。
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/
http://www.is.tsukuba.ac.jp/~yas/index-j.html
umask コマンドコマンドを使う。
YHM_umask コマンドは、シェルの 内部コマンドである。マスクは、プロセスの属性の1つで、 子プロセス、孫プロセスと代々受け 継がれていきく。現在のシェルのマスクを見れば、 シェルから実行されるプロセスのマスクがわかる。---------------------------------------------------------------------- % umask22 %
----------------------------------------------------------------------
umask を操作するシステム・コールは、umask(コマンドと同じ名前)である。
マスクは、モードと同じく8進数で考える。たとえば、022 は、次のように 読む。
----------------------------------------------------------------------
--- 000 新しいファイルは、自分自身は、読み書き自由。
-w- 020 同じグループの人は、ファイルの書込みを禁止する。
+) -w- 002 その他の人も、ファイルの書込みを禁止する。
----------------
022
----------------------------------------------------------------------
このように、モードの逆になる。
マスクを変えるには、umask コマンドに、引数を与えて実行します。
この例では、シェルのマスクを 022 から 066 へ変更しています。---------------------------------------------------------------------- % umask22 % % umask 066
% umask
66 %
----------------------------------------------------------------------
umask コマンドによるマスクの設定は、
普通、~/.cshrc や ~/.login に入れる。
rsh コマンド時も実行さ
れるように、~/.cshrc に入れて置くのが無難である。
rw-rw-rw-)になることが多い。これは、ファイルを作るプロ
グラム(cp, mule などで)で、次のようにファイルを作っていることに由来す
る。
open("file1",O_CREAT|O_TRUNC,0666);
すると、UNIXオペレーティング・システムのカーネルは、システム・コールの
引数とマスクを保持している変数 mask を使って
mode = 0666 & ~mask ;というモードのファイルを作る。「
&」
は、ビットごとのAND、「~」は、ビット反
転である。この場合、繰り下がりがないので、
mode = 0666 - mask ;と考えてもよい。結果として、マスクの部分のビットが落ちたモード を持つファイルが作られる。
たとえば、マスクが 022 の時、作
成されるファイルのモードは、666からマスクの022を引くので、次のように
644 (rw-r--r--) になる。
マスクを 0 にして、同じことをすると、モードが 666 になる。---------------------------------------------------------------------- % umask22 % echo "This is file1" > file1
% ls -l file1
-rw-r--r-- 1 yas 14 Sep 14 17:25 file1 %
----------------------------------------------------------------------
---------------------------------------------------------------------- % umask 000% umask
0 % rm file1
% echo "This is file1" > file1
% ls -l file1
-rw-rw-rw- 1 yas 14 Sep 14 17:29 file1 %
----------------------------------------------------------------------
マスクは、新しくファイルを作る時にのみ有効である。すでに、ファイルが存 在する場合、ファイルに書込みをしても、モードは変わらない。たとえば、
新しくディレクトリを作る時、そのモードは、最大 777 (---------------------------------------------------------------------- % chmod 777 file1% ls -l file1
-rwxrwxrwx 1 yas 14 Jan 23 16:28 file1 % umask 022
% echo "a" > file1
% ls -l file1
-rwxrwxrwx 1 yas 2 Jan 23 18:05 file1 %
----------------------------------------------------------------------
rwxrwxrwx)になることが多い。これは、ディレクトリを作る
プログラムが、
mkdir("dir1",0777 );
となっているからである。この結果、ファイルと同様に
mode = 0777 & ~maskというモードを持つディレクトリが作られる。
たとえば、マスクが 022 の時、作成されるディレクトリのモードは、777から
マスクの022を引くので、次のように 755 (rwxr-xr-x) に
なる。
マスクを 0 にして、同じことをすると、---------------------------------------------------------------------- % umask22 % mkdir dir1
% ls -ld dir1
drwxr-xr-x 2 yas 512 Jan 23 18:09 dir1 %
----------------------------------------------------------------------
新しく YHM_mkdir() コマンドで作ったディレクトリの モードが 777 になる。---------------------------------------------------------------------- % umask 0% rmdir dir1
% mkdir dir1
% ls -ld dir1
drwxrwxrwx 2 yas 512 Jan 23 18:09 dir1 %
----------------------------------------------------------------------