यूनिक्स ऑपरेटिंग सिस्टम के लिए "सब कुछ एक फाइल क्यों है" अद्वितीय है?


70

मैंने अक्सर लोगों को यह कहते सुना है कि "यूनिक्स का अद्वितीय दर्शन यह है कि यह सब कुछ एक फाइल के रूप में मानता है" या "यूनिक्स में, सब कुछ एक फाइल है"। लेकिन मैंने कभी किसी को यह बताते हुए नहीं सुना कि यह यूनिक्स के लिए अद्वितीय क्यों है।

तो, यूनिक्स के लिए यह अनूठा क्यों है? क्या विंडोज और मैक जैसे अन्य ऑपरेटिंग सिस्टम फाइलों पर काम नहीं करते हैं?

और, क्या यह अन्य ऑपरेटिंग सिस्टम की तुलना में अद्वितीय है?


26
sidenote: macosx एक यूनिक्स के ऊपर चलता है।
अकीरा

2
fwiw, जबकि उच्च-स्तरीय सामान फ़ाइलों का उपयोग नहीं करता है (ठीक उसी तरह जैसे dbus या X * nix में) निम्न-स्तर का Windows हैंडल के आसपास बनाया गया है। आप उनके साथ बहुत कुछ कर सकते हैं जैसा कि आप * निक्स (ओपन, क्लोज़, कंट्रोल, और आमतौर पर भेज / प्राप्त) पर फाइल कर सकते हैं, लेकिन आपको उस इंटरफ़ेस को देखने के लिए एक प्रोग्रामर होने की आवश्यकता है। चाहे वह अच्छी बात हो, पसंद की बात है।
मार्क

1
नेटवर्क इंटरफेस को छोड़कर सब कुछ एक फाइल है।
एल्विन

8
@akira - OSX को यूनिक्स प्रमाणित किया गया है और यह "इसके ऊपर" नहीं चलता है।
रोब

1
@akira यूनिक्स के शीर्ष पर नहीं है। OSX कुछ प्रमाणित UNIX OS में से एक है।
Let_Me_Be

जवाबों:


53

तो, यूनिक्स के लिए यह अनूठा क्यों है?

विशिष्ट ऑपरेटिंग सिस्टम, यूनिक्स से पहले, एक तरह से फाइलों का इलाज करते थे और उस डिवाइस की विशेषताओं के अनुसार प्रत्येक परिधीय डिवाइस का इलाज करते थे। यही है, अगर प्रोग्राम का आउटपुट डिस्क पर एक फ़ाइल को लिखा गया था, तो केवल वही जगह थी जहां आउटपुट जा सकता था; आप इसे प्रिंटर या टेप ड्राइव पर नहीं भेज सकते। प्रत्येक प्रोग्राम को इनपुट और आउटपुट के लिए उपयोग किए जाने वाले प्रत्येक डिवाइस के बारे में पता होना चाहिए, और वैकल्पिक I / O उपकरणों से निपटने के लिए कमांड विकल्प हैं।

यूनिक्स सभी उपकरणों को फाइलों के रूप में मानता है, लेकिन विशेष विशेषताओं के साथ। कार्यक्रमों को सरल बनाने के लिए, मानक इनपुट और मानक आउटपुट प्रोग्राम के डिफ़ॉल्ट इनपुट और आउटपुट डिवाइस हैं। इसलिए कंसोल स्क्रीन के लिए प्रोग्राम आउटपुट आमतौर पर डिस्क फ़ाइल या प्रिंटर या सीरियल पोर्ट तक जा सकता है। इसे I / O पुनर्निर्देशन कहा जाता है ।

क्या विंडोज और मैक जैसे अन्य ऑपरेटिंग सिस्टम फाइलों पर काम नहीं करते हैं?

बेशक सभी आधुनिक ओएस विभिन्न फाइल सिस्टम का समर्थन करते हैं और "फाइलों पर काम कर सकते हैं", लेकिन अंतर यह है कि उपकरणों को कैसे संभाला जाता है? मैक के बारे में नहीं जानते, लेकिन विंडोज कुछ I / O पुनर्निर्देशन प्रदान करता है।

और, किस ऑपरेटिंग सिस्टम की तुलना में यह अद्वितीय है?

वास्तव में कोई और नहीं। लिनक्स में एक ही सुविधा है। बेशक, अगर कोई ओएस I / O रीडायरेक्शन को अपनाता है, तो यह अन्य यूनिक्स सुविधाओं का उपयोग करता है और अंत में यूनिक्स-जैसे को समाप्त करता है।


29
ओएस एक्स मूल रूप से यूनिक्स है, इसलिए इसमें बहुत अंतर नहीं है।
slhck

6
वहाँ सब कुछ एक फ़ाइल मॉडल के लिए थोड़ा और अधिक है।
आर्टिकोसेक्स

1
शुरुआती पैराग्राफ बस सच नहीं है। यूनिक्स से पहले ऑपरेटिंग सिस्टम थे, और उनकी विशेषताएं बाद में यूनिक्स में मिलीं, जिनमें आई / ओ पुनर्निर्देशन भी शामिल था।
पैट्रिक सीमोर

3
योजना 9 में एक ही अवधारणा है सब कुछ एक फ़ाइल अवधारणा है और यहां तक ​​कि "अधिक यूनिक्स तो यूनिक्स" कहा गया है
विलियम

2
विंडोज (NT के बाद से) थोड़ा वायदा हो जाता है। बहुत सारे डिवाइस हैं जो फाइलों की तरह व्यवहार करते हैं, जैसे कि सीरियल पोर्ट और नामित पाइप। आप सभी का उपयोग कर लिख सकते हैं WriteFile। लेकिन इसके अलावा, "सिंक्रनाइज़ेशन ऑब्जेक्ट" की एक और भी बड़ी श्रेणी है जिसमें न केवल फाइलें बल्कि म्यूटेक्स भी शामिल हैं।
MSalters

34

यह विचार कि "सब कुछ एक फाइल है" मल्टीिक्स से आया है। यूनिक्स के डिजाइनरों ने पूर्ववर्तियों, विशेष रूप से मल्टीिक्स पर अपने काम का एक बहुत कुछ आधारित किया। दरअसल, कंप्यूटिंग में बहुत सी चीजें पूर्ववर्तियों पर आधारित होती हैं।

आप अधिक के लिए यूनिक्स के डिजाइन में स्वर्गीय डेनिस रिची के काम पर पढ़ सकते हैं। उन्होंने उन चीज़ों का संदर्भ दिया, जो उन्होंने मल्टीिक्स से "कॉपी" की हैं, जैसे कि पेड़ जैसी फाइल सिस्टम, कमांड शेल और फाइलों की गैर-संरचना। मैं यह नहीं कह रहा हूँ कि यूनिक्स लोग मल्टीिक्स लोगों से चुराते हैं। सभी इरादों और उद्देश्यों के लिए, यह वही लोग थे।


6
यह सबसे अधिक मत दिया जाने वाला उत्तर नहीं होना चाहिए, यह सवाल का जवाब नहीं देता है, यह सिर्फ लोगों से एक और सवाल पूछने के लिए कहता है: "मल्टीिक्स में 'एवरीथिंग इज ए फाइल' क्यों है?"
रेयान

13
@ लाइरेन: दरअसल यह सवाल का जवाब देता है कि यह अद्वितीय क्यों है : यह नहीं है।
गोरान जोको डेसी 3'11

1
यूनिक्स लोगों ने सिर्फ उनके विचारों को अपने साथ लिया जब मल्टीिक्स परियोजना को बंद कर दिया गया और उसका नाम बदल दिया गया। यूनिक्स सिर्फ शब्दों पर एक नाटक है - एक वी.एस. कई।
फियास्को लैब्स

2
@ ली रयान - सवाल यह नहीं था कि सब कुछ एक फाइल क्यों है, यह अद्वितीय क्यों है। जैसा कि गोरन और मैंने बताया, यह नहीं है।
पैट्रिक सेमुर

1
सवाल वास्तव में "यूनिक्स ऑपरेटिंग सिस्टम एस ", अर्थात परिवार को संदर्भित करता है । उस परिवार में बहुधा और लिनक्स शामिल हैं।
MSalters

28

अद्वितीय? नहीं परिभाषित? पूर्ण रूप से।

एक ज्ञात पदानुक्रम में फ़ाइल या डिवाइस के रूप में सब कुछ होने का मतलब है कि आप हर चीज के लिए एक ही सेट का उपयोग कर सकते हैं। बेल लैब्स की योजना 9 फाइलों के रूप में हार्डवेयर उपकरणों के साथ इसे और आगे ले जाती है।

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

मैक ओएस एक्स भी यूनिक्स दर्शन का अनुसरण करता है, लेकिन यह बेहतर छिपा हुआ है (एक 'एप्लीकेशन' बंडल वास्तव में फाइलों से भरा एक निर्देशिका है), और वास्तव में एक उचित, प्रमाणित यूनिक्स है, जो कि NeXT से उतरा है , जो FreeBSD के बिट्स का उपयोग करता है

विंडोज के साथ, कुछ बाइनरी घटक हैं जैसे कि इवेंट व्यूअर और रजिस्ट्री, और उस विशेष परिदृश्य में, वहां कुछ गति लाभ हैं।


1
प्लस 1 योजना का उल्लेख करने के लिए 9. आईएमएचओ फ्यूज योजना 9 को तदर्थ और पुनरावृत्ति के माध्यम से कार्यान्वयन के करीब लाता है।
डैनी स्टेपल

2
खैर, योजना 9 की योजना 9 है, यह पहले से ही काम करता है। फ़्यूज़ सिर्फ उपयोगकर्तास्पेस फाइल सिस्टम के विस्तार की अनुमति देता है .. दिलचस्प तरीके। मुझे वह पसंद है जहां आईआरसी को एफएस के रूप में माना जाता है।
जर्नीमैन गीक

हम्म - आप जानते हैं, मैं वर्षों से एरिक रेमंड पुस्तक के माध्यम से यह पता लगाने के लिए युगों से देख रहा हूं। आप वास्तव में मुझे "हाउ टू राउंड टू ओवर" कूबड़ मिला है, मैंने डाउनलोड किया है आईएसओ और यह कोशिश कर रहा।
डैनी स्टेपल

2
मेरा मानना ​​है कि एक नया संस्करण भी है, जिसे नरक कहा जाता है
यात्राकर्ता Geek

1
+1 ध्यान दें कि OS X का डार्विन एक 'वास्तविक यूनिक्स' भी है।
calum_b

18

विशेष फाइलों की वजह से। जब लोग कहते हैं कि "सब कुछ यूनिक्स में एक फाइल है", आम फाइलें और निर्देशिका वे नहीं हैं जो उनके दिमाग में हैं। विशेष फाइलें यूनिक्स जैसे OSes के लिए अद्वितीय हैं, जिनमें से कई हैं। तो यह करने के लिए अद्वितीय नहीं है यूनिक्स।

विशेष फाइलें कई उद्देश्यों की पूर्ति करती हैं। उदाहरण के लिए पाइप, सॉकेट और, विशेष रूप से, डिवाइस फाइलें हैं। पाइप और सॉकेट प्रक्रियाओं के बीच संचार धाराएं हैं। सबसिस्टम की अधिकांश कार्यक्षमता डिवाइस फ़ाइलों के माध्यम से उपयोगकर्ता स्थान के लिए उपलब्ध कराई गई है।

पाइप और सॉकेट

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

डिवाइस फ़ाइलें

जैसा कि पहले बताया गया है कि ये एक्ट यूजर स्पेस के लिए इंटरफेस की तरह हैं। उदाहरण के लिए, सीडी ट्रे को बेदखल करने के लिए, एक प्रोग्रामर सबसे पहले संबंधित डिवाइस फाइल को खोलेगा। एक और उदाहरण: आप चाहते हैं कि आपका प्रोग्राम वर्चुअल टर्मिनल स्विच करे। ओपन / देव / कंसोल पहले।

आगे क्या होता है मात्र वर्ण नहीं भेज रहा है करने के लिए उन फ़ाइलों, लेकिन जारी करने ioctl () की पर उन्हें। व्यक्तिगत ioctl की आप डिवाइस पर निर्भर कर सकते हैं। उदाहरण के लिए कंसोल में प्रलेखित है सांत्वना_ओक्टल (4)


12

मैं शायद यह कहने के लिए पुन: प्राप्त करने जा रहा हूं, लेकिन मुझे लगता है कि यह कहना कि सब कुछ यूनिक्स में एक फाइल है वास्तव में एक गिरावट है। यह वास्तव में दो चीजें हैं।

  1. फ़ाइलें और उपकरण (और बहुत से अन्य सामान) ऐसी वस्तुएं हैं जिन्हें एक इंटरफ़ेस द्वारा मॉडलिंग की जा सकती है जिसमें खुले, बंद, पढ़ने, लिखने और नियंत्रण (ioctl) फ़ंक्शन शामिल हैं।
  2. इन वस्तुओं के लिए नाम स्थान पदानुक्रम है अर्थात इन वस्तुओं को एक पदानुक्रम में व्यवस्थित किया जाता है।

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

सिर्फ सबकुछ फाइल करने में कोई बुराई नहीं है। लेकिन वास्तव में, वे ये अधिक सामान्य वस्तुएं हैं (एक फ़ाइल एक ऐसी वस्तु है)। इस दृष्टिकोण से, यह विचार यूनिक्स के लिए बिल्कुल भी अनूठा नहीं है। बहुत सारे अन्य ओएस पॉलीमॉर्फिक ऑब्जेक्ट्स के ऐसे पदानुक्रमों को लागू करते हैं।


ठीक ठीक! यूनिक्स में सब कुछ एक फाइल डिस्क्रिप्टर (जरूरी नहीं कि एक फाइल हो!), यानी सब कुछ (मेमोरी को छोड़कर) I / O है, यहां तक ​​कि फाइल भी। फ़ाइलों को एक्सेस किया जाना चाहिए जैसे कि वे I / O स्ट्रीम हैं (हालांकि वे तलाश में सक्षम हैं, इसलिए कुछ बेतरतीब ढंग से सुलभ हैं, लेकिन अतिरिक्त सिस्टम कॉल की अत्यधिक लागत)। ( mmap()पाठ्यक्रम के साथ जो कुछ किया जा सकता है उसके अपवाद के साथ ....)
ग्रेग ए। वुड्स

9

जब लोग कहते हैं "यूनिक्स में, सब कुछ एक फाइल है" तो उनका मतलब यह है कि वे चीजें भी हैं जो फाइलें नहीं हैं उन्हें फाइलों के रूप में माना जाता है।

बेशक अधिकांश ऑपरेटिंग सिस्टम फाइलों के साथ काम करते हैं। पाठ फ़ाइलें, छवि फ़ाइलें, ध्वनि फ़ाइलें। लेकिन सभी ऑपरेटिंग सिस्टम फाइलों के रूप में उपकरणों का इलाज नहीं करते हैं। यह एक महत्वपूर्ण अंतर है। यदि मैं अपने Ubuntu ऑपरेटिंग सिस्टम (जो यूनिक्स आधारित है) में अपने / देव / फ़ोल्डर की सामग्री को सूचीबद्ध करता हूं, तो मुझे 200 से अधिक उपकरणों की सूची मिलती है। उन उपकरणों में से कुछ हार्डवेयर हैं, लेकिन एक फ़ोल्डर के अंदर दिखाए जाते हैं। उदाहरण के लिए हार्ड ड्राइव, यूएसबी पोर्ट, माउस और कीबोर्ड, ऑडियो डिवाइस और प्रिंटर अन्य। कुछ उपकरण आभासी हैं, उदाहरण के लिए / dev / urandom, जो एक अनन्त फ़ाइल के रूप में व्यवहार करता है जो यादृच्छिक संख्याओं से भरा होता है। यह मेरी हार्ड ड्राइव पर एक वास्तविक फ़ाइल नहीं है।

उन सभी उपकरणों को फ़ाइलों के रूप में माना जाता है। मैं उन उपकरणों से डेटा पढ़ सकता हूं और / या डेटा लिख ​​सकता हूं। यहां विभिन्न उपकरणों के डेटा को ऑडियो डिवाइस में कॉपी करने के उदाहरण हैं । यह संभव है क्योंकि उन्हें फ़ाइलों के रूप में माना जाता है। (Geeky) परिणाम हार्ड ड्राइव की सामग्री, माउस गति, कंप्यूटर मेमोरी या किसी छवि के पिक्सेल को सुनने की क्षमता है । यह प्राप्त करने के लिए बहुत कठिन होगा यदि उपकरणों को फ़ाइलों के रूप में नहीं माना जाता है, क्योंकि प्रत्येक डिवाइस को डेटा पढ़ने और लिखने के लिए अलग-अलग तरीकों की आवश्यकता होगी।

कहा जा रहा है कि, "सब कुछ" का अर्थ सिस्टम से सिस्टम में भिन्न होता है। उदाहरण के लिए, OS X यूनिक्स पर आधारित है, लेकिन इसमें / dev / ऑडियो डिवाइस नहीं है। यह CoreAudio नामक एक स्वामित्व ऑडियो सिस्टम का उपयोग करता है। तो इस मामले में कोई कह सकता है "लगभग सब कुछ एक फ़ाइल है"। फिर, विंडोज जैसे सिस्टम में, जहां "सब कुछ एक फ़ाइल नहीं है", आप अभी भी प्रिंटर पोर्ट में फ़ाइल की सामग्री की प्रतिलिपि बनाने जैसी चीज़ कर सकते हैं (कुछ ऐसा टाइप कर रहे हैं copy mydocument.txt >lpt1:), जो यूनिक्स में प्रिंटर डिवाइस पर दस्तावेज़ की प्रतिलिपि बनाने के समान है सिस्टम।

क्या अन्य ऑपरेटिंग सिस्टम जैसे विंडोज और ओएस एक्स फाइलों पर काम नहीं करते हैं? हाँ, वो करते हैं। विंडोज और ओएस एक्स फाइलों पर काम करते हैं, लेकिन विंडोज उपकरणों को फाइलों के रूप में नहीं मानता है, जो "सब कुछ एक फाइल है" का हिस्सा है।


8

मैं देख रहा हूँ कि Multics को "सब कुछ एक फ़ाइल है" के स्रोत के रूप में उद्धृत किया गया है, लेकिन मुझे लगता है कि आपको बस डिवाइस फ़ाइलों, नामित पाइपों, नियमित फ़ाइलों, आदि आदि की तुलना में थोड़ा गहरा दिखना होगा। आपको फ़ाइल नामकरण सिंटैक्स को देखना होगा। औक्स, कॉन और एलपी "मैजिक फाइल नेम" मौजूद होने पर भी बड़ा बदलाव आता है।

रोब पाइक द्वारा " द हिडेनस नेम " देखें । यह अन्य सिंटैक्स के एक जोड़े के साथ यूनिक्स फ़ाइल-नामकरण सिंटैक्स की तुलना करता है, सबसे विशेष रूप से वीएमएस। ध्यान दें कि 60 के दशक / 70 के दशक की शुरुआत में, जब यूनिक्स की शुरुआत हुई थी, तब मेनफ्रेम ओएस के पास आधुनिक रोकोको फ़ाइल नामकरण सिंटैक्स पर विचार होगा। यह वर्षों से है जब मैंने VM / CMS, या NOS या NOS / VE का उपयोग किया है, और मैंने केवल Univac OS का उपयोग करते हुए किसी के कंधे को देखा है, लेकिन यह कहना पर्याप्त है कि नियमितताओं को समाप्त कर दिया गया है।

मैंने कभी भी मल्टिक्स को नहीं देखा है, लेकिन आप इसके फाइल सिस्टम पर एक पेपर देख सकते हैं । ऐसा प्रतीत होता है कि मूल यूनिक्स ने "सब कुछ एक फाइल है" को मल्टीिक्स की तुलना में थोड़ा आगे ले लिया, लेकिन आपका माइलेज भिन्न हो सकता है।


1
ठीक है, मल्टिक्स में सब कुछ मेमोरी है, सिवाय I / O के (हालाँकि मेमोरी पर मैप भी किया जा सकता है)। यूनिक्स में सब कुछ (मेमोरी को छोड़कर) एक फाइल डिस्क्रिप्टर है , जिसमें फाइलें भी शामिल हैं। यानी यूनिक्स में सब कुछ I / O है।
ग्रेग ए। वुड्स

1
BTW, एक एमुलेटर अब मौजूद है जो बूटिक्स को चलाएगा और चलाएगा।
ग्रेग ए। वुड्स

3

कृपया ध्यान दें कि यहां तक ​​कि लिनुस टॉर्वाल्ड भी इस बात से असहमत हैं कि "सब कुछ एक फाइल है।" यदि आप खोजते हैं "

सब कुछ एक bytestream है

"आपको दिलचस्प दर्शन मिलेंगे कि कैसे हमारा मतलब है कि सब कुछ एक फ़ाइल नहीं है उदाहरण के लिए मेमोरी में एक सार डेटा संरचना या एक सूचक निश्चित रूप से एक फ़ाइल नहीं है, ठीक है निश्चित रूप से कुछ भी एक फ़ाइल के रूप में प्रतिनिधित्व किया जा सकता है लेकिन प्रतिनिधित्व करना और होना 2 अलग-अलग क्रियाएं हैं ।


1
आपने एक लिंक प्रदान नहीं किया। कुछ खोज पर, मैंने yarchive.net/comp/linux/everything_is_file.html को ईमेल थ्रेड में Torvald की प्रतिक्रियाओं को उद्धृत करते हुए पाया , जिसमें वह स्पष्ट रूप से पुष्टि करता है कि मॉडल को "सब कुछ एक फ़ाइल है।"
bgvaughan

1
वास्तव में @bgvaughan यह विपरीत है: yarchive.net/comp/linux/everything_is_file.html उद्धरण देता हैThe UNIX philosophy is often quoted as "everything is a file", but that really means "everything is a stream of bytes".
LIttle प्राचीन वन कामी

1
@LIttleAncientForestKami: और यूनिक्स परंपरागत रूप से फाइलों को बाइट्स की धाराओं के रूप में मानते हैं, सिस्टम के विपरीत जो रिकॉर्ड की धाराओं (या बाइट्स और धाराओं के दोनों धाराओं) के रूप में फाइलों का इलाज करते थे, धाराओं (या संसाधन कांटे) के संग्रह के रूप में, या था अधिक जटिल मॉडल, जहां कई अलग-अलग प्रकार की वस्तुओं तक पहुंचने के कई अलग-अलग तरीके थे।
नंजलज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.