मैं अनुमतियों को बेहतर ढंग से समझने की कोशिश कर रहा हूं, इसलिए मैं कुछ "अभ्यास" कर रहा हूं। यहां उन कमांड का एक क्रम है जो मैं उनके संबंधित आउटपुट के साथ उपयोग कर रहा हूं:
$ 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
आर = डी एंड यू
उदाहरण के लिए:
666 और! 0053 = 110 110 110 और ; 000 101 011 110 110 110 और 111 010 100 = 110 010 100 = 624 = आरडब्ल्यू - रे--
777 और! 0022 = 111 111 111 और ! 000 010 010 111 111 111 & 111 101 101 = 111 101 101 = 755 = आरएक्सएक्सआर - एक्सआर-एक्स
टिप
परिणामी अनुमतियों को जल्दी से जानने का एक आसान तरीका (कम से कम इससे मुझे मदद मिली) यह सोचना है कि हम सिर्फ 3 दशमलव मानों का उपयोग कर सकते हैं:
r = 100 = 4
w = 010 = 2
x = 001 = 1
अनुमतियाँ इन 3 मूल्यों का एक संयोजन होंगी।
" "
यह बताने के लिए प्रयोग किया जाता है कि सापेक्ष अनुमति नहीं दी गई है।
666 = 4+2+" " 4+2+" " 4+2+" " = rw rw rw
इसलिए अगर मेरा वर्तमान उमस्क है तो 0053
मुझे पता है कि मैं (4+1)
समूह से पढ़ने और निष्पादन की अनुमति को हटा रहा हूं और इसके (2+1)
परिणामस्वरूप अन्य लेखन और निष्पादन कर रहा हूं
4+2 " "+2+" " 4+" "+" " = 624 = rw--w-r--
(समूह और अन्य पहले से ही निष्पादन की अनुमति नहीं थी)