Linux & Shell

umask計算

マスクと作成プログラムの要求権限を入力し、ファイルとディレクトリの結果をビット単位で確認します。

umask計算

マスクと作成要求

権限の計算結果

マスク:消すビット
0022 · ----w--w-
許可権限(umask -S)
u=rwx,g=rx,o=rx

ファイル

0644 · rw-r--r--

実際に消えた権限: 0022 · ----w--w-

ビット計算を見る
要求ビット
0666 · 110 110 110
マスク:消すビット
0022 · 000 010 010
許可ビット(~mask & 0777)
0755 · 111 101 101
結果ビット
0644 · 110 100 100

要求があり、マスクされていないビットだけが残ります。

0666 & (~0022 & 0777) = 0644

ディレクトリ

0755 · rwxr-xr-x

実際に消えた権限: 0022 · ----w--w-

ビット計算を見る
要求ビット
0777 · 111 111 111
マスク:消すビット
0022 · 000 010 010
許可ビット(~mask & 0777)
0755 · 111 101 101
結果ビット
0755 · 111 101 101

要求があり、マスクされていないビットだけが残ります。

0777 & (~0022 & 0777) = 0755

ブラウザー内で計算し、入力は送信・保存しません。

例と入力形式

記号は許可ビットを表します。u=rwx,g=rx,o=rxは022と同じです。3区分すべて指定してください。

入力された要求だけを計算します。デフォルトACLや作成後の変更は再現しません。

権限を計算しました。

umask計算は、同じシェルで作ったファイルとディレクトリの権限が違う理由を確かめるときに役立ちます。初期値の0666と0777は、一般的な作成要求を表しています。

実際の要求値が分かる場合は入力を変更してください。マスクは既存のビットを落とすだけで、要求されていない実行権限を付け足すことはありません。

umask計算で違いを確かめる

同じマスクでも結果は別

umask計算で111を試すと、ファイルの要求666はそのまま残り、ディレクトリの要求777は666になります。最初からない実行ビットは削除できないため、単純な引き算では説明できません。

書類とフォルダーが同じフィルターを通り、それぞれの権限の枠を残す様子。

許可と要求を分ける

umask計算では、マスクが通す権限とプログラムの要求を別々に示します。ファイル要求を777にすると実行ビットを残せますが、666のままでは追加されません。

二つの権限レイヤーが重なり、両方にある枠だけが結果に残る様子。

要求値と記号の意味を確認

01

111の例で確認

例の一覧から111を選び、読み込みのプレビューを開きます。変更する項目数を確認して適用すると、ファイルは0666のままです。取り消しで入力と結果を一緒に戻せます。

02

記号の形式を使い分ける

マスク欄にはu=rwx,g=rx,o=rxのような完全なumask -S形式を入力します。要求欄にはrw-rw-rw-など9文字の権限を使います。同じ意味の表記ではありません。

03

手動で比較する

自動計算を切ると、複数の値をまとめて編集できます。変更中は出力できません。計算ボタンかCtrl/Cmd+Enterで更新し、ビット計算を開いてから結果を利用してください。

残るビットを追う

作成要求を個別に指定

デフォルトパーミッションの確認ではファイル0666、ディレクトリ0777から始めます。実行ファイルを作るプログラムなら0777、非公開ファイルなら0600など、実際の要求を指定できます。

8進数とシンボルモード

数字のマスクは消すビットを示します。u=、g=、o=で指定するシンボルモードは通過できるビットです。出力では4桁の8進数と所有者・グループ・その他のrwxを併記します。

消えたビットも表示

要求、マスク、その下位9ビットの反転、論理積の結果を順に確認できます。実際に消えたビットは別表示なので、要求に含まれないビットを消したと誤解せずに済みます。

計算対象と対象外

通常の9ビットのみ
数字は3桁、または先頭が0の4桁に対応します。要求には9文字のrwxも使えます。特殊ビット、ファイル種別文字、ACLの接尾辞は不可です。前後の空白は除き、各欄は128文字までです。
完全な許可指定のみ
u、g、oを一度ずつ書き、各項の権限はrwx順にします。空の権限や項の並べ替えは可能です。g+wの相対指定、a=の省略形、g=uの権限コピーには対応しません。
実際の環境は別途確認
親ディレクトリにデフォルトACLがあるLinux環境では、通常のマスク計算とは別の経路で権限が決まります。特殊ビットの継承、後からのchmod、マウント設定も再現しません。
逆算や設定変更はしない
0666から0640になるマスクは026だけでなく027もあります。唯一の値を逆算する機能はありません。既存ファイル、シェル設定には触れず、コマンド実行や入力の保存もしません。

umask計算のよくある質問

ファイルの権限が640になるumaskは、なぜ026でも027でもよいのでしょうか?

026と027の差は、その他のユーザーの実行ビットだけです。要求0666にはそのビットがないため、どちらも0640になります。8進数の引き算ではなく、反転マスクとのビットごとの論理積で考えます。

umaskを変えても新しいファイルに実行権限が付かないのはなぜですか?

一般的なファイル作成コマンドは実行ビットを含まない0666を要求します。umaskは権限を追加できません。ただし実行ファイルを作るプログラムは0777を要求でき、その場合はマスクに応じて実行権限が残ります。

umaskの0022という4桁の表示はどう読めばよいですか?

このツールでは0022と022は同じ値です。先頭の0は別のユーザー区分ではありません。4桁目が0でない1022などは特殊ビットを含むため拒否します。

umask -Sに表示される権限は何を意味しますか?

マスクが許可する権限です。u=rwx,g=rx,o=rxは許可値0755、マスク0022に相当します。0666を要求したファイルに実行権限が付くという意味ではありません。

デフォルトACLがある場合、umaskはどう適用されますか?

Linuxでは親のデフォルトACLを継承し、要求値にない権限をさらに落とします。その場合は通常のumask経路を使いません。このツールはACLを入力しないため、その継承結果は求められません。

結果について気になる点がありますか?

別の要求値で試す

umask計算で、要求された権限と残せる権限の関係を確かめましょう。実ファイルと比較するときは、作成プログラムの要求値と親のACLも確認してください。