私が正しく理解した場合、ファイル権限には読み取り/書き込み/実行権限を指定する3桁の連結番号があります。
umask の値は、デフォルトからデフォルトの「マスク」を引いたものです。では、umask値0022のデフォルト値777は755になりますか?
これは正しいですか?もしそうなら、umask値の最初の0は何ですか?
答え1
あなたの例では、最初の数字0は使用されません。 umask は右から左に読み込まれ、次のゼロは無視されます。ただし、以下のように特殊権限(たとえばsticky bit
)を設定するために使用できます。Set GUID
Set UID
0755 —- None of the special bits set
1755 —- Sticky bit set
2755 —- SGID bit set
4755 —- SUID bit set
そうですね。 umask 0022は、新しく作成されたディレクトリのデフォルトの777(ディレクトリ)権限を755にマスクします。
8進番号付けは、最初の3つのグループ(ユーザー、グループ、世界/その他)と同様に機能します。
読み取り/書き込み/実行rwx
値は8進形式で表され、その値は合計7つです。
4 - Read
2 - Write
1 - Execute
したがって、0755の場合:0は無視されます。 7(4+2+1)は、/ownerの読み取り、書き込み、実行と同じですuser
。 5(4+1)はペアの読み取りおよび実行権限と同じで、残りのgroup
5(4+1)はother
/worldの読み取りおよび実行権限も提供します。
答え2
前の0はC言語(8進構文)から来ており、他の意味はないと言いたいと思います。からman 2 umask
、つまり基本Cライブラリを呼び出す:
umask()は、呼び出しプロセスのファイルモード生成マスク(umask)をマスク&0777に設定し(つまり、マスクのファイル許可ビットのみを使用)、マスクの以前の値を返します。
Umaskは単なる減算ではなくビット単位で扱われます。 umask にセットされたビットは結果ファイルモードでクリアされます。