筑波大学 システム情報工学研究科 コンピュータサイエンス専攻, 電子・情報工学系 新城 靖 <yas@is.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~syspro/2007/No8_files/umask.html
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~syspro/2007/
http://www.coins.tsukuba.ac.jp/~yas/
umask
コマンドコマンドを使う。
% umask22 %
![]()
umask
コマンドは、シェル(csh, tcsh)の内部コマンドである。マスク
は、プロセスの属性の1つで、子プロセス、孫プロセスと代々受け継がれてい
きく。現在のシェルのマスクを見れば、シェルから実行されるプロセスのマス
クがわかる。
umask を操作するシステム・コールは、umask(コマンドと同じ名前)である。
マスクは、モードと同じく8進数で考える。たとえば、022 は、次のように 読む。
--- 000 新しいファイルは、自分自身は、読み書き自由。 -w- 020 同じグループの人は、ファイルの書込みを禁止する。 +) -w- 002 その他の人も、ファイルの書込みを禁止する。 ---------------- 022このように、モードの逆になる。
% umaskこの例では、シェルのマスクを 022 から 066 へ変更している。22 % umask 066
% umask
66 %
![]()
umask コマンドによるマスクの設定は、
普通、~/.cshrc
や ~/.login
に入れる。
ssh
でリモートログインした時にも実行さ
れるように、~/.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--
) になる。
% ls -l file1マスクを 0 にして、同じことをすると、モードが 666 になる。ls: file1: No such file or directory % umask
22 % echo "This is file1" > file1
% ls -l file1
-rw-r--r-- 1 yas lab 14 Jun 17 00:06 file1 %
![]()
% rm file1% umask 000
% umask
0 % echo "This is file1" > file1
% ls -l file1
-rw-rw-rw- 1 yas lab 14 Jun 17 00:07 file1 %
![]()
マスクは、新しくファイルを作る時にのみ有効である。すでに、ファイルが存 在する場合、ファイルに書込みをしても、モードは変わらない。たとえば、
% ls -l file1-rw-rw-rw- 1 yas lab 14 Jun 17 00:07 file1 % chmod 777 file1
% ls -l file1
-rwxrwxrwx 1 yas lab 14 Jun 17 00:07 file1 % umask 022
% echo a > file1
% ls -l file1
-rwxrwxrwx 1 yas lab 2 Jun 17 00:08 file1 %
![]()
rwxrwxrwx
)になることが多い。これは、ディレクトリを作る
プログラムが、
mkdir("dir1",0777 );となっているからである。この結果、ファイルと同様に
mode = 0777 & ~maskというモードを持つディレクトリが作られる。
たとえば、マスクが 022 の時、作成されるディレクトリのモードは、777から
マスクの022を引くので、次のように 755 (rwxr-xr-x
) に
なる。
% umaskマスクを 0 にして、同じことをすると、22 % mkdir dir1
% ls -ld dir1
drwxr-xr-x 2 yas lab 6 Jun 17 00:08 dir1 %
![]()
% ls -ld dir1新しくls: dir1: No such file or directory % umask
0 % mkdir dir1
% ls -ld dir1
drwxrwxrwx 2 yas lab 1024 Jun 17 00:10 dir1 %
![]()
mkdir
コマンドで作ったディレクトリのモードが 777 になる。
上の結果は、/tmp で試したものである。 情報学類の計算機の場合、ホーム・ディレクトリ(実体は、ファイル・サーバ 上にある)で実験すると、モードが 777 にはならない。
% rmdir dir1% ls -ld dir1
ls: dir1: No such file or directory % umask
0 % mkdir dir1
% ls -ld dir1
drwxr-xr-x 2 yas lab 6 Jun 17 00:14 dir1 %
![]()