権限をよりよく理解しようとしているので、いくつかの「練習」をしています。以下は、私が使用した一連のコマンドとその出力です。
$ umask
0022
$ touch file1
$ ls -l file1
-rw-r--r-- 1 user group 0 Mar 16 12:55 file1
$ mkdir dir1
$ ls -ld dir1
drwxr-xr-x 2 user group 4096 Mar 16 12:55 dir1
これは、デフォルトのファイル権限が666
(rw-rw-rw-
)であり、ディレクトリのデフォルト権限が777
(rwxrwxrwx
)であることがわかっているため意味があります。これらのデフォルト権限からumask値を減算すると、があるため、
666-022=644
前のrw-r--r--
出力file1
とも
777-022=755
一致しrwx-r-x-r-x
ますdir1
。
しかし、umaskをからに変更すると、もはやそうでは022
あり021
ません。
以下はファイルの例です。
$ umask 0021
$ touch file2
$ ls -l file2
-rw-r--rw- user group 0 Mar 16 13:33 file2
-rw-r--rw-
はい646
、しかしそうです666-021=645
。したがって、以前の計算どおりに動作しません。
以下はディレクトリの例です。
$ touch dir2
$ ls -ld dir2
drwxr-xrw- 2 user group 4096 Mar 16 13:35 dir2
drwxr-xrw-
はい756
、777-021=756
。したがって、この場合、結果は前の計算と一致します。
私はこの人の記事を読みましたが、この行動について何も見つかりませんでした。
誰かが理由を説明できますか?
説明する
答えで指摘したように、umask
の価値は次のとおりです。数学的減算デフォルトのディレクトリとファイルの権限。
関連する有効な演算は、AND(&) および NOT(!) ブール演算子の組み合わせです。一方:
右=生成された権限
D=基本権限
ゆう=現在のumask
R = D&!U
たとえば、
第666話! 0053=110110110 ! 000101011 110110110 & 111010100 = 110010100 = 624 = 読み書き - 読み書き -
777&!0022=111111111& !000 010 010 111111111& 111101101 = 111101101 = 755 = rwxr--xr-x
ヒント
結果の権限をすばやく理解する簡単な方法(少なくとも私には役立ちます)は、小数点以下の3桁の値しか使用できないと考えることです。
r = 100 = 4
w = 010 = 2
x = 001 = 1
権限はこの3つの値の組み合わせです。
" "
相対権限が付与されていないことを示すために使用されます。
666 = 4+2+" " 4+2+" " 4+2+" " = rw rw rw
したがって、現在umaskがある場合は、グループから読み取りおよび実行権限を削除し、他のグループでは書き込みおよび実行権限を削除すること 0053
を知っています。(4+1)
(2+1)
4+2 " "+2+" " 4+" "+" " = 624 = rw--w-r--
(グループや他のユーザーには実行権限がありません)
ベストアンサー1
umask
はマスク、減算された値ではありません。したがって:
- パターン666、マスク022:結果は666&〜022、つまり666&755は644です。
- パターン666、マスク021:結果は666&〜021、つまり666&756、つまり646です。
関連部分を考えてみてください。パターンの 6 はビット 1 と 2 がセット、リード、ライトされることを示します。マスク マスクビット 1 の 2 は書き込みビットです。マスクの1は実行ビットであるマスクビット0です。
これを表現する別の方法は、権限をテキスト形式で表示することです。 666666 rw-rw-rw-
022はい----w--w-
021はい----w---x
。マスクはパターンから設定されたビットを削除するので、fromはマスクになり、rw-rw-rw-
fromはマスクになります。----w--w-
rw-r--r--
----w---x
rw-r--rw-