سؤال لماذا "كل شيء هو ملف" فريد لأنظمة التشغيل يونيكس؟


كثيرا ما أسمع الناس يقولون "فلسفة يونكس الفريدة هي أنه يعامل كل شيء كملف" أو "في يونكس ، كل شيء هو ملف". لكنني لم اسمع ابدا اي شخص يشرح لماذا هو فريد من نوعه ليونيكس.

لذا ، لماذا هذا فريد ليونيكس؟ هل لا تعمل أنظمة التشغيل الأخرى مثل Windows و Mac على الملفات؟

وهل هي فريدة بالمقارنة مع أنظمة التشغيل الأخرى؟


70
2017-12-03 05:12


الأصل


sidenote: تدير macosx ontop من unix. - akira
fwiw ، بينما لا تستخدم الملفات ذات المستوى الأعلى ملفات (مثل dbus أو X في * nix) يتم إنشاء Windows ذو المستوى المنخفض حول المقابض. يمكنك القيام بالكثير من نفس الشيء مع الملفات التي يمكنك عملها على * nix (فتح ، إغلاق ، تحكم ، وإرسال / استقبال عادةً) ، ولكنك تحتاج إلى أن تكون مبرمجًا لرؤية هذه الواجهة. ما إذا كان هذا أمر جيد هو مسألة تفضيل. - Mark
كل شيء هو ملف ، باستثناء واجهات الشبكة. - alvin
akira - OSX معتمد من Unix ولا يعمل "فوق". - Rob
akira ليس على قمة يونيكس. OSX هو واحد من نظام التشغيل UNIX المعتمد. - Let_Me_Be


الأجوبة:


لذا ، لماذا هذا فريد ليونيكس؟

نظم التشغيل النموذجية ، قبل يونيكس ، تعامل الملفات بطريقة واحدة وتعامل كل جهاز طرفي وفقا لخصائص ذلك الجهاز. بمعنى ، إذا تمت كتابة إخراج أحد البرامج إلى ملف موجود على القرص ، فهذا هو المكان الوحيد الذي يمكن أن يذهب إليه الإخراج ؛ لا يمكنك إرسالها إلى الطابعة أو محرك الشريط. يجب أن يكون كل برنامج على دراية بكل جهاز يستخدم للإدخال والإخراج ، ولديه خيارات أوامر للتعامل مع أجهزة الإدخال / الإخراج البديلة.

تعامل يونكس جميع الأجهزة كملفات ، ولكن مع سمات خاصة. لتبسيط البرامج ، المدخلات القياسية و الإخراج القياسي هي أجهزة الإدخال والإخراج الافتراضية للبرنامج. لذلك ، يمكن أن يذهب إخراج البرنامج المعتاد لشاشة وحدة التحكم إلى أي مكان ، إلى ملف قرص أو طابعة أو منفذ تسلسلي. هذا يسمي I / O إعادة توجيه.

هل لا تعمل أنظمة التشغيل الأخرى مثل Windows و Mac على الملفات؟

بالطبع جميع أنظمة التشغيل الحديثة تدعم أنظمة الملفات المختلفة ويمكن أن "تعمل على الملفات" ، ولكن التمييز هو كيف يتم التعامل مع الأجهزة؟ لا أعرف عن Mac ، ولكن Windows يوفر بعض إعادة توجيه الإدخال / الإخراج.

وبالمقارنة مع غيرها من أنظمة التشغيل الأخرى فهي فريدة من نوعها؟

ليس حقا أكثر من ذلك. لينكس لديه نفس الميزة. بالطبع ، إذا كان نظام التشغيل يعتمد إعادة توجيه الإدخال / الإخراج ، فإنه يميل إلى استخدام ميزات Unix الأخرى وينتهي بتشغيل Unix-like في النهاية.


53
2017-12-03 05:30



OS X أساسا هو يونكس ، لذلك ليس هناك فرق كبير. - slhck
يوجد اكثر قليلا إلى كل شيء نموذج الملف. - artistoex
الفقرة الافتتاحية ببساطة ليست صحيحة. كانت هناك أنظمة تشغيل قبل Unix ، وتمتلك ميزات لاحقًا في Unix ، بما في ذلك إعادة توجيه الإدخال / الإخراج. - Patrick Seymour
الخطة 9 لها نفس المفهوم. كل شيء هو مفهوم الملف وحتى أنه أطلق عليه "أكثر يونيكس ثم يونيكس" - William
نوافذ (منذ NT) يذهب قليلا قليلا. هناك الكثير من الأجهزة التي تتصرف مثل الملفات ، مثل المنافذ التسلسلية والأنابيب المسماة. يمكنك الكتابة للجميع باستخدام WriteFile. ولكن بالإضافة إلى ذلك ، هناك فئة أكبر من "كائنات المزامنة" التي لا تشمل فقط الملفات بل هي أيضًا كائنات متماثلة. - MSalters


فكرة أن "كل شيء هو ملف" جاء من Multics. اعتمد مصممو Unix على الكثير من أعمالهم على أسلافهم ، وخاصة Multics. في الواقع ، هناك الكثير من الأشياء في الحوسبة تعتمد على الأسلاف.

يمكنك القراءة عن عمل الراحل دنيس ريتشي في تصميم يونكس للمزيد. وأشار إلى الأشياء التي "نسخوها" من Multics ، مثل نظام الملفات الشبيه بالأشجار ، وقشرة الأوامر ، وعدم تنظيم الملفات. أنا لا أقصد أن الناس يونكس سرق من الناس MultICS. لجميع النوايا والأغراض ، كان نفس الناس.


34
2017-12-03 05:30



هذا لا يجب أن يكون أعلى إجابة مصوتة ، فهو لا يجيب على السؤال ، إنه فقط يطرح على الناس طرح سؤال آخر: "لماذا" كل شيء هو ملف "في Multics؟" - Lie Ryan
@ LieRyan: في الواقع لا يجيب على السؤال لماذا هو فريد: ليس كذلك. - Goran Jovic
أخذ الناس Unix أفكارهم معهم فقط عندما تم إيقاف مشروع Multics وإعادة تسميته. يونكس مجرد اللعب على الكلمات - واحد VS كثيرة. - Fiasco Labs
Lie Ryan - كان السؤال ليس لماذا كل شيء ملف ، وهذا هو السبب في أنه فريد من نوعه. كما أوضحت غوران ، ليس الأمر كذلك. - Patrick Seymour
السؤال حقا يشير إلى "نظام التشغيل يونكسالصورة"، أي العائلة. هذه الأسرة تتضمن بشكل معقول مالتيكس ولينكس. - MSalters


فريد؟ لا. تعريف؟ إطلاقا.

وجود كل شيء كملف أو جهاز في تسلسل هرمي معروف يعني أنه يمكنك استخدام نفس مجموعة الأدوات لكل شيء. الخطة 9 من Bell Labs يأخذ هذا إلى أبعد من ذلك مع الأجهزة حتى الملفات.

الأهم من ذلك ، وهذا يسمح لمفهومين بسيطة جدا وقوية. الأدوات المساعدة الأساسية التي تعمل بطريقة One Thing Well (tm) ، والتي يمكن ربطها مع الأنابيب حسب الحاجة. تريد أن تجد شيئا في ملف نصي؟ استعمال cat لإظهارها ، تمر بها grep، وأنت تطبخ بالغاز. هذا القوة الحقيقية للطريقة "Unix" - وهي تطبيقات متخصصة تعمل معًا لكميات هائلة من المرونة.

يتبع نظام التشغيل Mac OS X أيضًا فلسفة Unix ، ولكنه مخفي بشكل أفضل (حزمة "تطبيق" هي في الحقيقة دليل مليء بالملفات) ، وفي الواقع ، نظام Unix معتمد ، وينحدر من التالىوالتي تستخدم أجزاء من فري.

مع Windows ، هناك بعض المكونات الثنائية مثل عارض الأحداث والتسجيل منذ ذلك الحين ، وهناك بعض مزايا السرعة هناك ، في هذا السيناريو بالتحديد.


28
2017-12-03 05:22



بالإضافة إلى 1 للإشارة إلى الخطة 9. يضع IMHO Fuse الخطة 9 أقرب إلى التنفيذ من خلال التكرار والتكرار. - Danny Staple
حسنًا ، الخطة 9 هي 9 ، إنها تعمل بالفعل. يسمح Fuse فقط لملفات filespace في توسيع نظام .. طرق مثيرة للاهتمام. أنا أحب واحد حيث يعامل IRC ك FS. - Journeyman Geek♦
حسنًا - أنت تعرف ، لقد كنت أعني البحث عنها للأعمار منذ اكتشافها من خلال كتاب إريك ريموند منذ سنوات ... كنت قد حصلت في النهاية على "الحدب إلى ذلك" ، لقد قمت بتنزيل ISO وتجربتها. - Danny Staple
أعتقد أن هناك إصدارًا أحدث أيضًا ، يدعى الجحيم - Journeyman Geek♦
+1 للإشارة إلى أن داروين OS X هو 'يونيكس الحقيقي' أيضا. - calum_b


بسبب الملفات الخاصة. عندما يقول الناس "كل شيء هو ملف في Unix" ، فإن الملفات والدلائل الشائعة ليست في ذهنهم. ملفات خاصة فريدة من نوعها إلى أنظمة تشغيل شبيهة Unix ، وهناك العديد منها. لذلك فهي ليست فريدة من نوعها ال يونكس.

الملفات الخاصة تخدم العديد من الأغراض. هناك على سبيل المثال أنابيب ومآخذ ، وأبرزها ، ملفات الجهاز. الأنابيب والمآخذ عبارة عن تدفقات اتصال بين العمليات. يتم توفير الكثير من وظائف الأنظمة الفرعية لمساحة المستخدم من خلال ملفات الجهاز.

أنابيب ومآخذ

تستخدم البرامج هذه البرامج تمامًا مثلما تستخدم الملفات العادية. في الحقيقة ، معظم الوقت لا يهتمون حتى بنوع الملفات التي يستخدمونها. هذا هو السبب في أن أوامر يونكس يمكن دمجها بشكل متجانس لتشكيل أنظمة جديدة قوية. (انظر إعادة توجيه الإدخال / الإخراج في إجابة نشارة الخشب)

ملفات الجهاز

كما ذكر سابقا هذه تتصرف مثل واجهات لمساحة المستخدم. على سبيل المثال ، من أجل إخراج درج الأقراص المضغوطة ، سيقوم المبرمج في البداية بفتح ملف الجهاز المقابل. مثال آخر: تريد برنامجك التبديل الطرفية الظاهري. افتح / dev / console أولاً.

ما يحدث بعد ذلك هو عدم إرسال مجرد رموز إلى تلك الملفات ، ولكن إصدار IOCTL ()الصورة على معهم. تعتمد وظيفة ioctl الفردية التي يمكنك إصدارها على الجهاز. مثلا تم توثيق وحدة التحكم في console_ioctl (4)


18
2017-12-04 11:59





ربما سوف أكون معادًا لقوله هذا ، لكنني أعتقد أن القول بأن كل شيء هو ملف في Unix ، هو في الواقع مغالطة طويلة الأمد. ما هو حقا شيئين.

  1. الملفات والأجهزة والكثير من الأشياء الأخرى هي كائنات يمكن نمذجتها بواسطة واجهة تشتمل على وظائف مفتوحة وقريبة وقراءة وكتابة وتحكم. حتى لا يبدأ الناس في كيفية عمل ioctl (لوظائف التحكم) هو حوض مطبخ غير مصنف. بالإضافة إلى ذلك ، فإن مقابض هذه الكائنات (fds) هي مرشحة لفئة شائعة من السلوك المتعلق بـ I / O ، مثل الحظر / عدم المنع ، والتزامن ، والإشارات وغيرها.
  2. مساحة الاسم لهذه الكائنات (الملفات ، الأجهزة ، الأشياء الأخرى) هي هرمية. يحدث التنفيذ ليتم تسميته بنظام الملفات ، لأن هذا هو الغالبية العظمى من الكائنات.

هناك ، بالطبع ، لا ضرر في مجرد استدعاء كل الملفات. لكن في الواقع ، الملفات هي كائنات أكثر عمومية ، مثل أشياء أخرى (مثل الأجهزة). من هذا المنظور ، هذه الفكرة ليست فريدة من نوعها على يونكس على الإطلاق. وهناك الكثير من أنظمة تشغيل أخرى تقوم بتنفيذ مثل هذه الكائنات ذات الواجهات المتشابهة.


11
2017-12-04 15:57



بالضبط! في كل شيء يونكس هو ملف واصف (ليس بالضرورة ملفًا!) ، بمعنى أن كل شيء (باستثناء الذاكرة) هو I / O ، وحتى الملفات. يجب الوصول إلى الملفات كما لو كانت تدفقات I / O (على الرغم من أنها قابلة للسعي ، لذا يمكن الوصول إليها بشكل عشوائي إلى حد ما ، ولكن التكلفة القصوى لمكالمات النظام الإضافية). (باستثناء ما يمكن القيام به مع القليل mmap()بالطبع بكل تأكيد....) - Greg A. Woods


عندما يقول الناس "في يونكس ، كل شيء هو ملف" ما يعنيه هو أن يتم التعامل مع الأشياء التي ليست ملفات كملفات.

بالطبع معظم أنظمة التشغيل تعمل مع الملفات. ملفات نصية ، ملفات صور ، ملفات صوتية. لكن لا تعالج جميع أنظمة التشغيل الأجهزة كملفات. هذا فرق مهم. إذا قمت بإدراج محتويات ملفي / dev / folder في نظام التشغيل Ubuntu الخاص بي (والذي يعتمد على نظام Unix) ، فإنني أحصل على قائمة تضم أكثر من 200 جهاز. بعض هذه الأجهزة عبارة عن أجهزة ، ولكنها تظهر داخل مجلد. على سبيل المثال ، محركات الأقراص الصلبة ومنافذ USB والماوس ولوحة المفاتيح وأجهزة الصوت والطابعات وغيرها. بعض الأجهزة الافتراضية ، على سبيل المثال / dev / urandom ، والتي تتصرف كملف لانهائي الكامل للأرقام العشوائية. انها ليست ملف حقيقي على القرص الصلب.

كل هذه الأجهزة تعامل كملفات. يمكنني قراءة البيانات من و / أو كتابة البيانات في هذه الأجهزة. هنا هناك أمثلة نسخ البيانات من أجهزة مختلفة إلى جهاز الصوت. هذا ممكن لأنه يتم التعامل معها كملفات. النتيجة (العبقري) هي القدرة على استمع إلى محتوى محرك الأقراص الثابتة أو حركة الماوس أو ذاكرة الكمبيوتر أو وحدات البكسل الخاصة بالصورة. سيكون من الأصعب بكثير تحقيق ذلك إذا لم يتم التعامل مع الأجهزة كملفات ، لأن كل جهاز سيحتاج إلى طرق مختلفة لقراءة البيانات وكتابتها.

ما يقال ، ما يعني "كل شيء" يختلف من نظام إلى آخر. على سبيل المثال ، يستند OS X على نظام التشغيل Unix ، ولكن ليس لديه جهاز / dev / audio. ويستخدم نظام صوت الملكية يسمى CoreAudio. في هذه الحالة ، قد يقول المرء "كل شيء تقريبا هو ملف". ثم ، في أنظمة مثل Windows ، حيث "كل شيء ليس ملفًا" ، لا يزال بإمكانك فعل أشياء مثل نسخ محتوى ملف إلى منفذ الطابعة (كتابة شيء مثل copy mydocument.txt >lpt1:) ، وهو مشابه لنسخ مستند إلى جهاز الطابعة في أنظمة Unix.

هل تعمل أنظمة التشغيل الأخرى مثل Windows و OS X على الملفات؟ نعم يفعلون. يعمل نظاما التشغيل Windows و OS X على الملفات ، ولكن Windows لا يعامل الأجهزة كملفات ، وهذا جزء مما يعني "كل شيء هو ملف".


9
2017-12-03 16:29





أرى أن Multics مذكورًا كمصدر لـ "كل شيء هو ملف" ، ولكن أعتقد أنه يجب عليك أن تبدو أعمق قليلاً من ملفات الجهاز فقط ، والأنابيب المسماة ، والملفات العادية ، وما إلى ذلك. يجب عليك النظر إلى بناء أسماء الملفات. وهذا يحدث فرقًا كبيرًا حتى عند وجود "أسماء ملفات سحرية" AUX و CON و LP.

نرى "الاسم الهيدوي"يقتبس روب بايك. يقارن بناء جملة تسمية ملف يونكس مع اثنين من البنى الأخرى ، وعلى الأخص VMS. لاحظ أن أنظمة التشغيل المركزية في أواخر 60s / 70s في وقت مبكر ، عندما نشأت يونكس ، كان ما العقل الحديث سوف يعتبر ملف الروكوكو غير عادي لقد كانت سنوات منذ أن استخدمت VM / CMS ، أو NOS أو NOS / VE ، ولم أكن أتطلع إلا على كتف شخص ما يستخدم نظام تشغيل Univac ، ولكن يكفي القول إن عدد المراعي يفوق عدد مرات الانتظام.

أنا لم أرى أبدا حتى تشغيل Multics ، ولكن يمكنك أن ترى ورقة على نظام الملفات الخاص به. يبدو أن برنامج Unix الأصلي أخذ "كل شيء هو ملف" أبعد قليلاً من Multics ، لكن الأميال الخاصة بك قد تختلف.


8
2017-12-06 18:06



حسنا ، في Multics كل شيء هو الذاكرة ، باستثناء I / O (على الرغم من أنه يمكن وضعها على الذاكرة أيضا). في كل شيء يونيكس (باستثناء الذاكرة) هو ملف واصفبما في ذلك الملفات. أي. في يونكس كل شيء هو I / O. - Greg A. Woods
راجع للشغل ، والمحاكي موجود الآن من شأنها أن التمهيد وتشغيل Multics. - Greg A. Woods