İzinleri daha iyi anlamaya çalışıyorum, bu yüzden bazı "alıştırmalar" yapıyorum. İşte kendi çıktı ile kullandığım bir komut sırası:
$ 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
Yani, biz varsayılan dosya izinleri olduğunu biliyorum çünkü mantıklı 666
( rw-rw-rw-
) ve dizinleri varsayılan izinler şunlardır 777
( rwxrwxrwx
). Ben var bu varsayılan izinleri umask'ı değerini çıkarmak durumunda
666-022=644
, rw-r--r--
için file1
, önceki çıkışı ile 's Tutarlı yüzden;
777-022=755
,, rwx-r-x-r-x
için dir1
de tutarlı.
Ben den izin maskesini değiştirmek Ama eğer 022
için 021
kendisine daha fazla değildir.
İşte dosya örneği:
$ umask 0021
$ touch file2
$ ls -l file2
-rw-r--rw- user group 0 Mar 16 13:33 file2
-rw-r--rw-
olduğunu 646
ama olmalı 666-021=645
. Yani önceki hesaplamaya göre çalışmaz.
Dizine örnek:
$ touch dir2
$ ls -ld dir2
drwxr-xrw- 2 user group 4096 Mar 16 13:35 dir2
drwxr-xrw-
olduğunu 756
, 777-021=756
. Bu durumda sonuç, önceki hesaplama ile tutarlıdır.
Adamı okudum ama bu davranış hakkında hiçbir şey bulamadım.
Birisi nedenini açıklayabilir mi?
AÇIKLAMA
Yanıtlarda belirtildiği gibi: umask
değeri, varsayılan dizinden ve dosyanın izinlerinden matematiksel olarak çıkarılmaz .
Etkin bir şekilde dahil edilen işlem, AND (&) ve NOT (!) Boole operatörlerinin bir kombinasyonudur. Verilen:
R = sonuçta elde edilen izinler
D = varsayılan izinler
U = geçerli umask
R = D &! U
Örneğin:
666 &! 0053 = 110110110 & ! 000101011 110110110 ve 111 010 100 = 1101010 100 = 624 = rw - wr--
777 &! 0022 = 111111 111 & ! 000 010 010 1111111111 ve 11110110110 = 111101101 = 755 = rwxr - xr-x
İPUCU
Ortaya çıkan izinleri hızlı bir şekilde bilmenin kolay bir yolu (en azından bana yardımcı oldu) sadece 3 ondalık değer kullanabileceğimizi düşünmektir:
r = 100 = 4
w = 010 = 2
x = 001 = 1
İzinler bu 3 değerin birleşimi olacaktır.
" "
göreli izin verilmediğini belirtmek için kullanılır.
666 = 4+2+" " 4+2+" " 4+2+" " = rw rw rw
Bu yüzden şu anki umask'ım gruptan yazma ve yürütme iznini 0053
kaldırdığımı ve diğer sonuçlardan (4+1)
(2+1)
4+2 " "+2+" " 4+" "+" " = 624 = rw--w-r--
(grup ve diğerlerinin zaten yürütme izni yoktu)