फ़ाइल पर सब कुछ अनुमति देने के लिए 777 को चामोद को क्यों सौंपा गया है?


54

मुझे एक साक्षात्कार में पूछा गया कि ऐसा क्यों है कि एक फाइल के लिए सभी अनुमतियाँ लेने के लिए 777 निर्धारित है। 555 क्यों नहीं? उन्होंने कहा कि हर चीज का कारण है। तो, 777 का कारण क्या है? कोई अन्य संख्या क्यों नहीं? क्या इस संख्या में कोई महत्व है?



2
@ अविनाशराज की लिंक टिप्पणी देखें और इसे उदाहरण पर लागू करें। सवाल "क्यों?" यह किस उदाहरण पर और किस उद्देश्य से कार्य करता है, इस पर निर्भर करता है ... :)
अज़मेर

1
क्या वह संख्या 7 बनाम 5 के महत्व के बारे में पूछ रहा है या वे इसके बजाय संख्याएं क्यों कहते हैं, अक्षर?
ब्रिअम

4
यह एक महान साक्षात्कार प्रश्न है; मुझे इसे चुराना पड़ सकता है।
डिजिटल क्रिस

5
कड़ाई से बोलते हुए, यह 777 नहीं है, लेकिन 0777 है।
रुस्लान

जवाबों:


129

मैं अंतर्निहित कारण को संबोधित करने की कोशिश करूंगा कि यह आआआ, या 999 के बजाय 777 क्यों है।

याद रखें कि अनुमतियाँ निम्नलिखित प्रारूप में आती हैं:

 u   g   o
rwx rwx rwx

जहां u = उपयोगकर्ता, जी = समूह, ओ = अन्य।

अब, कल्पना करें कि आप इनमें से प्रत्येक समूह को बाइनरी के रूप में दर्शा रहे हैं। १ सत्य है, ० मिथ्या है।

यदि आप सभी को पूर्ण पहुँच देना चाहते हैं, तो आप बाइनरी में निम्नलिखित अनुमतियाँ निर्दिष्ट करेंगे:

 u   g   o
rwx rwx rwx
111 111 111

अब, यदि आप द्विआधारी जानते हैं, तो आप महसूस करेंगे कि जब आप 111द्विआधारी से दशमलव में परिवर्तित करते हैं , तो आप प्राप्त करते हैं 7

इस प्रकार, आप के रूप में पूर्ण पहुँच का प्रतिनिधित्व कर सकते हैं 777

नोट: हम वास्तव में बाइनरी से ऑक्टल में परिवर्तित कर रहे हैं। नीचे संपादित देखें।

यह अन्य सभी एक्सेस मोड के लिए भी काम करता है।

उदाहरण के लिए, हम आसानी से 555प्रत्येक 5बाइनरी में कनवर्ट करके और इसे उपरोक्त प्रारूप में लिखकर क्या मतलब निकाल सकते हैं । 5बाइनरी में है 101, इसलिए हमारे पास निम्नलिखित अनुमतियाँ हैं:

 u   g   o
r-x r-x r-x
101 101 101
 5   5   5

इसी तरह, यदि हम उपयोगकर्ता को सभी अनुमति देना चाहते हैं, लेकिन केवल अन्य लोगों को पढ़ने की अनुमति देते हैं, तो हम एक संख्या प्रतिनिधित्व पा सकते हैं।

 u   g   o
rwx r-- r--
111 100 100
 7   4   4

अब, हम जानते हैं कि 111बाइनरी 7दशमलव में है, और 100बाइनरी 4दशमलव में है। इस प्रकार, अनुमति होगी 744

संपादित करें:

तकनीकी रूप से, जैसा कि @ LưuVPnhPhúc और @Braiam द्वारा हाइलाइट किया गया है, हम नीचे वर्णित के अनुसार, बाइनरी से ऑक्टल में परिवर्तित कर रहे हैं। हालांकि, संख्या <8 का दशमलव और अष्टक निरूपण समान हैं, इसलिए 3 अंकों या उससे कम के साथ द्विआधारी संख्याओं के लिए, दशमलव और अष्टक प्रतिनिधित्व दोनों समान हैं।

जब तीनों के समूहों में विभाजित होने और प्रत्येक समूह पर दशमलव रूपांतरण में द्विआधारी रूपांतरण करने के बजाय अष्टक संख्याओं के रूप में प्रतिनिधित्व किया जाता है, तो आप वास्तव में सभी तीन समूहों को एक ही बाइनरी संख्या के रूप में ले सकते हैं, और अष्टक में बदल सकते हैं।

उदाहरण के लिए, यहाँ अष्टांगिक रूपांतरण के लिए कुछ द्विआधारी हैं:

0b111111111 == 0o777
0b101101101 == 0o555
0b111100100 == 0o744

ध्यान दें कि मैं "0b" और "0o" को द्विआधारी और अष्टाधारी संख्याओं के बीच भेद करने के लिए तैयार कर रहा हूं।

यदि आप इसके साथ खेलना चाहते हैं, pythonतो एक टर्मिनल खोलें, चलाएं और फिर निम्नलिखित कमांड के साथ खेलें।

oct(0b111111111)
bin(0o555)

संख्या को "0b" या "0o" के रूप में प्रस्तुत करने के लिए याद रखें, ताकि कंप्यूटर को यह पता चल सके कि आप किस आधार में रुचि रखते हैं (यदि आप नहीं करते हैं, तो यह आधार 10. मान लेगा)


17
पूर्णता के लिए, संख्याओं के प्रारूप को अष्टक कहा जाता है जिसका शाब्दिक अर्थ है 8 का आधार (क्योंकि वे 0 से शुरू होते हैं 7 + 1 = 8)।
ब्रिअम

3
डेवी: ऑक्टल आसान है क्योंकि यह वास्तव में तीन बिट्स को समूह बनाता है, जैसे हेक्साडेसिमल समूह चार। दशमलव 2 की शक्ति नहीं है, इसलिए यह बिट के रूप में समूह नहीं करता है।
कोनरक

2
ठीक है, आपको दोनों ही मामलों में समान संख्या मिलती है। मुझे लगता है कि यह अधिक संभावना है कि कोई व्यक्ति बाइनरी से दशमलव रूपांतरण को बाइनरी से अष्टक रूपांतरण तक समझेगा। इसके अलावा, मैंने स्पष्ट करने के लिए एक खंड जोड़ा है कि संख्या वास्तव में अष्टाधारी हैं, दशमलव नहीं।
daviewales

3
7दशमलव और अष्टक में समान है - हालाँकि, 777नहीं है। जब आप फ़्लिपिंग बिट्स के बारे में बात कर रहे हैं, तो इससे फर्क पड़ता है।
सैम ड्यूफेल

2
बस तुच्छ खातिर 7 को भगवान का नंबर और रूट उपयोगकर्ता के रूप में 777संदर्भित किया जाता है , जिनकी डिफ़ॉल्ट अनुमति कभी-कभी भगवान के रूप में संदर्भित होती है।
eyoung100

16

फ़ाइल अनुमति का मतलब पढ़ना, फ़ाइल अनुमति का मतलब 4लिखना 2और फ़ाइल अनुमति का निष्पादन करना 1

तो इस का कुल योग है 7

अब 777 क्या है: पहला 7फाइल ओनर के लिए है, जिसका मतलब है कि फाइल ओनर ने रीड, राइट और एक्जीक्यूट की अनुमति दी है।

2 वें 7उस समूह के लिए है जिसके पास फ़ाइल है, इसका मतलब है कि समूह में सभी पढ़ने, लिखने और अनुमति को निष्पादित करने के लिए भी है।

और तीसरा 7दूसरों की अनुमति के लिए है

यदि आप फ़ाइल की अनुमति देते हैं 555तो फ़ाइल के owner, group and othersपास केवल अनुमति है readऔर executeअनुमति not writeहै क्योंकि रीड अनुमति का मतलब 4 है और निष्पादित का अर्थ है 1 तो कुल प्राप्त होता है5


समूह क्या है और वे अन्य अनुमतियाँ क्या हैं? प्रतिक्रिया के लिए धन्यवाद।
नरकोदय

कृपया इस लिंक को समूह और अन्य अनुमतियों के लिए संदर्भित करें , इन्हें सर्वर पर किसी और पर लागू किया जाएगा जो या तो आपके समूह में है या नहीं
प्रकाश वी। होल्कर

7

शीर्ष उत्तर के रूप में इतने सारे शब्दों में नहीं:

प्रत्येक फ़ाइल में 3 अनुमतियाँ विकल्प होते हैं: पढ़ना, लिखना और निष्पादित करना। आप इनमें से कोई भी चुन सकते हैं, इनमें से एक, इनमें से दो या इनमें से कोई भी:

C (3,0) + C (3,1) + C (3,2) + C (3,3) = 8

1 + 3 + 3 + 1 = 8

तो, कुल मिलाकर, 8 संयोजन हैं; अनुमतियों के लिए 8 विकल्प। 0 से गिनती, अंतिम संख्या 7 (0 से 7 तक) है। इसलिए, संख्याओं द्वारा दर्शाया गया है, यहाँ सभी विकल्प हैं:

0 - nothing
1 - execute
2 - write
4 - read
3 - execute + write (1 + 2)
5 - execute + read (1 + 4)
6 - write + read (2 + 4)
7 - execute + write + read (1 + 2 + 4)

तीन नंबर हैं क्योंकि ऑर्डर चला जाता है [उपयोगकर्ता की अनुमति] [समूह की अनुमति] [दूसरों की अनुमति]

तो, 777 का मतलब है कि सभी तीन समूहों ने अनुमतियों को पढ़ा, लिखा और निष्पादित किया है।


इसके अलावा (अप्रत्यक्ष रूप से संबंधित इसलिए आपको इस भाग को पढ़ना जरूरी नहीं है), क्योंकि मुझे लगता है कि इसकी प्रासंगिकता महत्वपूर्ण है: नंबर 3 के बजाय नंबर 4 क्यों है read?

0 - nothing
1 - execute
2 - write
3 - read
4 - execute + read (1 + 3)
5 - write + read (2 + 3)
6 - execute + write + read (3 + 2 + 1)
7 - ????? no way to get this with the 3 basic options (and we are missing execute + write)

सभी संभावनाओं के लिए अद्वितीय संयोजन प्राप्त करने का एकमात्र तरीका मूल विकल्पों के लिए 2 की शक्तियों से जाना है। 2 0 = 1 (निष्पादित करें), 2 1 = 2 (लिखिए), 2 2 = 4 (पढ़ें), और यदि कोई 4 वाँ मूल विकल्प था तो उसे 2 3 = 8 गिना जाएगा । ध्यान दें कि writeसभी संयोजनों तक सूचीबद्ध नहीं है पिछले विकल्पों को सूचीबद्ध किया गया है (जो कि सिर्फ एक विकल्प है, क्योंकि यह सिर्फ है execute)। readतब तक सूचीबद्ध नहीं किया जाता है जब तक कि पिछले विकल्पों के सभी संयोजनों को सूचीबद्ध नहीं किया गया है (फिर से एक, क्योंकि दो विकल्पों के साथ केवल एक संयोजन है - execute+ write)। execute+ write+readतब तक सूचीबद्ध नहीं किया जाता है जब तक कि पिछले सभी संयोजनों को सूचीबद्ध नहीं किया जाता है, जो कि 3 है, क्योंकि अब तीन अनुमतियों में से दो विकल्प हैं। सूची इस तरह से जारी रहेगी, चाहे कितने भी बुनियादी विकल्प हों। उदाहरण के लिए, 4 मूल विकल्पों के साथ (ध्यान दें कि हम यह भी जानते हैं कि कुल 16 संयोजन होंगे क्योंकि 4 विकल्प और 2 4 = 16 हैं):

0 - nothing
1 - execute
2 - write
4 - read
3 - execute + write (1 + 2)
5 - execute + read (1 + 4)
6 - write + read (2 + 4)
7 - execute + write + read (1 + 2 + 4)
8 - love
9 - execute + love (1 + 8)
10 - write + love (2 + 8)
11 - execute + write + love (1 + 2 + 8)
12 - read + love (4 + 8)
13 - execute + read + love (1 + 4 + 8)
14 - write + read + love (2 + 4 + 8)
15 - execute + write + read + love (1 + 2 + 4 + 8)

6
यह उत्तर पूरी तरह से बुरा है क्योंकि यह बाइनरी को पहचानने में विफल रहता है और अधिक महत्वपूर्ण बात यह है कि यूनिक्स फ़ाइल अनुमति बिट्स के स्रोत के रूप में ऑक्टल नंबर सिस्टम। (पर्याप्त रूप से, वे 3 या 4 नहीं हैं ... वे 6 हैं, हालांकि वर्तमान में पूर्ण 18 बिट का उपयोग नहीं किया जाता है।)
मिराबिलोस

1
आधार महत्वहीन है, क्योंकि 111 7 है; क्या मैं कहता हूं कि अनुमतियाँ 111 या 7 हैं, इससे कोई फर्क नहीं पड़ता, क्योंकि यह एक ही मूल्य है। मैंने गणित को शामिल करने के लिए उदाहरण की सरलता के लिए दशमलव का उपयोग किया। मैं बाइनरी इस्तेमाल कर सकता था, लेकिन गणित उतना सीधा नहीं लगता था। क्या फर्क पड़ता है जब एक दूसरे के बीच ठिकानों का अनुवाद किया जा सकता है।
डेनियल वार्ड

4

मुझे आश्चर्य है कि इसी तरह के कई उत्तर हैं जो निशान को पूरी तरह से याद करते हैं।

उन 3 कक्षाओं को निर्धारित करने के बाद जिन्हें पढ़ने, लिखने और निष्पादित करने की आवश्यकता थी। वे फ़ाइल सिस्टम के प्रबंधन के लिए आवश्यक स्थान को कम करने के लिए ऑक्टल (3 बिट्स) के साथ गए थे ।


3

किसी कारण से, UNIX डिजाइनरों ने फ़ाइल अनुमतियों के लिए OCTAL संख्याओं का उपयोग करने का निर्णय लिया । जैसा कि आप जानते हैं, एक-अंकों वाले ऑक्टल नंबर के लिए एक अधिकतम मूल्य है। 7. यह पता चला है कि उपयोगकर्ता एक्सेस के लिए एक ऑक्टल अंक, समूह एक्सेस के लिए एक और विश्व एक्सेस के लिए लगभग सभी चीज़ों के लिए पर्याप्त है। अधिकतम 3 डी ऑक्टिकल संख्या 777 है, और यह केवल समझ में आता है कि यह "हर किसी / हर चीज तक पहुंच" को दर्शाता है।


मुझे नहीं लगता कि यह एक अच्छी व्याख्या है। UNIX डिज़ाइनर की दशमलव संख्याएँ हो सकती हैं और फिर भी 9 के बजाय 7 (अधिकतम दशमलव अंक के रूप में) अधिकतम एक्सेस को 7 के साथ समाप्त कर सकते हैं । 7 चुन लिया जाता है नहीं "subtractively" क्या संख्या उच्चतम संभव एकल अंक पर शुरू संभव हो रहे हैं पर आधारित है, लेकिन "additively" पहुँच भी बाइनरी अंकों द्वारा अनुमति सब पर कोई अधिकार के लिए शून्य से शुरू होने पर आधारित है।
या मैपर

ध्यान दें कि मैंने "किसी कारण से" बहुत भिखारी के रूप में लिखा था ... - मैं ओएचई प्रश्न नहीं था, क्योंकि उन्होंने ओक्टल नंबरों को उठाया था, इसके बारे में गहन स्पष्टीकरण में नहीं जाना चाहता था। सवाल यह था कि 777 सभी अनुमति क्यों देता है।
देजनलिक

यह यहाँ अप्रासंगिक है कि उन्होंने अष्टक संख्या क्यों चुनी। मेरा कहना यह है कि संख्या are से अधिकतम अधिकारों का प्रतिनिधित्व होता है, इसका कारण यह नहीं है कि be अधिकतम अष्टक संख्या है।
या मैपर

2

आजकल, हम सभी जानते हैं कि एक बाइट 8 बिट्स है : यह दशकों से सार्वभौमिक रूप से सहमत है। लेकिन यह हमेशा ऐसा नहीं होता था, और यूनिक्स (जो कई मायनों में लिनक्स से प्रेरित था) उस समय के दौरान लिखा गया था जब इस पर अभी भी बहस चल रही थी। विशेष रूप से, यह उन प्रणालियों के लिए पोर्टेबल होना चाहिए जो 6-बिट बाइट्स या 8-बिट बाइट्स का उपयोग करते हैं। जिन लोगों ने इसे लिखा था उनमें से कुछ बहस के एक तरफ थे, और अन्य लोग दूसरी तरफ थे।

संबंधित नोट पर, बेस -2 (बाइनरी) मानों को लिखने के लिए बहुत सुविधाजनक संकेतन नहीं है। आजकल, अधिकांश प्रोग्रामर एक अधिक कॉम्पैक्ट नोटेशन लिखते हैं जो इसके बजाय बेस -16 (हेक्साडेसिमल) का उपयोग करता है। 16 बस एक आधार के लिए पर्याप्त बड़ा है जिसे आप चार बिट्स को एक हेक्स-अंक में पैक कर सकते हैं: उदाहरण के लिए, बाइनरी में "0000" हेक्साडेसिमल में 0x0 है (यह "0x" एक सामान्य तरीका है नोट करने के लिए कि आप के बारे में हैं हेक्साडेसिमल संख्या लिखें), जबकि "1111" 0xF (या दशमलव में 15) है। आप वास्तव में एक एकल हेक्स अंक का उपयोग करके चार बिट्स के किसी भी संभावित संयोजन को लिख सकते हैं, बस बाइनरी में गिनती करके, और जिस तरह से स्थिति अंकगणितीय कार्यों के कारण, आप इसे ढेर कर सकते हैं: दो हेक्स अंक आठ बिट्स के किसी भी संभावित संयोजन को सांकेतिक शब्दों में बदल सकते हैं, बस गिनती से, और इसी तरह। तो 8 बिट वालों को यह पसंद आया।

6-बिट लोगों के पास ऐसा करने का अपना तरीका था, लेकिन बेस -16 का उपयोग करने के बजाय, उन्होंने बेस -8 (ऑक्टल) का उपयोग किया। यह हेक्साडेसिमल के समान फायदे हैं: आप तीन बिट्स की किसी भी स्थिति को एक ऑक्टल-अंक में संग्रहीत कर सकते हैं, और आप एक समान तरीके से अंकों को ढेर कर सकते हैं। तो जैसे 8-बिट वाले लोगों ने बाइट के लिए दो हेक्स-डिजिट का इस्तेमाल किया, वैसे ही 6-बिट्स लोगों ने बाइट के लिए दो ऑक्टल-डिजिट का इस्तेमाल किया। आप ऑक्टल को बहुत अधिक नहीं देखते हैं, लेकिन यह आमतौर पर एक अग्रणी शून्य के साथ नोट किया गया था: उदाहरण के लिए, "111" ऑक्टल में 07 है।

अब, यूनिक्स अनुमतियों के साथ यह सब क्या करना है? जहां तक ​​यूनिक्स का संबंध था, एक फ़ाइल के साथ आप तीन चीजें कर सकते थे: आप इसे पढ़ सकते थे, आप इसे लिख सकते थे, या आप इसे एक कार्यक्रम के रूप में निष्पादित कर सकते थे। यदि आप उन अनुमतियों को प्रतिबंधित करने जा रहे हैं, तो आपको उनमें से प्रत्येक के लिए थोड़ा सा चाहिए: इसे उन चीजों के लिए चालू करें जो किसी को करने की अनुमति है, और इसे उन चीजों के लिए छोड़ दें जो किसी को करने की अनुमति नहीं है। चूंकि तीन चीजें ट्रैक की जा रही हैं, आपको तीन बिट्स की आवश्यकता है, और चूंकि यूनिक्स इसे तीन लाइनों (स्वामी, समूह और सभी) के साथ ट्रैक करता है, इसलिए आपको कुल नौ बिट्स की आवश्यकता है।

रेखा के साथ किसी बिंदु पर, 6-बिट शिविर में किसी-किसी ने- "अरे, हम इसके लिए अष्टक-अंकों का उपयोग कर सकते हैं" । और यह एक बहुत ही सुविधाजनक अंकन निकला: तीन ऑक्टल-अंक बिट क्षेत्रों के हर संभव संयोजन को एन्कोड करने के लिए बस पर्याप्त है। एक बार जब उन्होंने ऐसा करने का फैसला किया, तो 777 के भाग्य (और 000) को सील कर दिया गया, क्योंकि वे संख्याएं समान होंगी, चाहे वे बिट्स की व्यवस्था कैसे करें, लेकिन अन्य सभी संख्याओं के लिए आदेश दिया गया था, इसलिए उन्होंने ऐसा करने के बारे में निर्धारित किया।

उन्होंने अनुमतियों को तीन-बिट फ़ील्ड में व्यवस्थित किया: प्रारंभ में पढ़ा, बीच में लिखें, और अंत में निष्पादित करें। फिर उन्होंने खुद खेतों की व्यवस्था की: शुरू में मालिक, बीच में समूह, और अंत में अन्य। एक बार जब वे ऐसा कर लेते हैं, तो उन्हें बाकी सभी नंबरों की गिनती करने के लिए करना पड़ता है।

क्योंकि वे 3-बिट फ़ील्ड हैं, आप कह सकते हैं कि प्रत्येक ऑक्टल-अंक फ़ील्ड में से एक को नियंत्रित करता है : पहला अंक मालिक की अनुमतियों को नियंत्रित करता है, दूसरा अंक समूह की अनुमतियों को नियंत्रित करता है, और तीसरा अंक अन्य अनुमतियों को नियंत्रित करता है। इस प्रकार, 777 (111 111 111) सभी के लिए सभी अनुमतियाँ हैं, जबकि 700 (111 000 000) केवल स्वामी के लिए सभी अनुमतियाँ हैं। अन्य संयोजन भी आम हैं: 666 (110 110 110) सभी के लिए पढ़ा / लिखा जाता है लेकिन निष्पादित नहीं होता है), जबकि 555 (101 101 101) हर किसी के लिए पढ़ा / निष्पादित होता है, लेकिन लिखता नहीं है, और 400 (100 000 000) पढ़ा जाता है- केवल मालिक के लिए और किसी और के लिए कोई पहुँच नहीं।

और इसीलिए 777 का मतलब है सभी परमिशन। इन दिनों, यह शायद लोगों के लिए सबसे लोकप्रिय अष्टाध्यायी का उपयोग करने का सबसे लोकप्रिय कारण है, हालांकि यूनिक्स और इसके वंशजों के पास अभी भी इसके कुछ अन्य संस्करण हैं। उदाहरण के लिए, odया ऑक्टल डंप, ऑक्टल रूप में फ़ाइल के बाइनरी डंप को प्राप्त करने का एक तरीका है (इसमें हेक्साडेसिमल चचेरा भाई है, जिसे कहा जाता है xxd, लेकिन यह उतना प्रसिद्ध नहीं है और हर जगह उपलब्ध नहीं है)। यह भी है कि आपको कुछ प्रोग्रामिंग भाषाओं में अग्रणी शून्य के साथ सावधान रहने की आवश्यकता है, क्योंकि वे सोच सकते हैं कि आप ऑक्टल में नंबर लिखने का इरादा रखते हैं जब कि वास्तव में आपका इरादा नहीं है।


सबसे पहले जब linux बनाया गया था (लगभग 1992) 8-bit 6-bit बहस WAY खत्म हो गई थी। दूसरा कारण यह नहीं है कि ऐसा क्यों किया गया
अहमद मसूद

1
मैंने ऐतिहासिक संदर्भ के लिए 8-बिट / 6-बिट सामान प्रदान किया। लिनक्स उस बहस के समाप्त होने के काफी समय बाद बनाया गया था, यह सच है, लेकिन क्योंकि इसने यूनिक्स से इसकी बहुत प्रेरणा ली थी, यह इस तरह से उस बहस से प्रभावित था। यही कारण है कि मुझे लगा कि ऐतिहासिक संदर्भ को पेश करना एक अच्छा विचार होगा।
1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.