私は許可をよりよく理解しようとしているので、いくつかの「練習」をしています。以下は、それぞれの出力で使用している一連のコマンドです。
$ 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(!)のブール演算子の組み合わせが効果的に含まれる操作です。与えられた:
R =結果の権限
D =デフォルトの権限
U =現在のumask
R = D&!U
例えば:
666&!0053 = 110110110&
!000 101 011
110 110 110&
111 010 100
= 110 010 100 = 624 = rw--wr--
777&!0022 = 111 111 111&
!000 010 010
111 111 111&
111 101 101
= 111 101 101 = 755 = rwxr--xr-x
ヒント
結果のアクセス許可をすばやく確認する簡単な方法(少なくともそれは私に役立ちました)は、3つの10進数値しか使用できないと考えることです。
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--
(グループおよびその他には実行権限がありません)