كل شيء هو ملف

everything-is-a-file

المجلدات، المستندات، الطابعات، البارتشنات، الـ Shell Scripts، المقابس (Sockets)، محركات اﻷقراص، الـ Serial Ports، هياكل بيانات النواة، الوسائط المنطقيّة (LVM) وغيرها…، لك أن تتخيّل أن كل هذه اﻷشياء المذكورة هي عبارة عن ملف (File)! نعم في نظام Unix واﻷنظمة الشبيهة به مثل Linux كل شيء عبارة عن ملف.

هذا اﻷمر هو واحد من المفاهيم الرائعة والغريبة في نظام UNIX واﻷنظمة الشبيهة به مثل Linux، هذا اﻷمر الذي يجعل كلًا من يونكس ولينكس أنظمة بسيطة في ظاهرها ولكن قويّة جدًا في صُلبها، هذه الميّزة تجعل تنفيذ المهام اﻹدارية الصعبة في النظام أكثر سهولة وقوّة، وفي هذا الموضوع سوف نخوض في تفاصيل هذا المفهوم…

ملاحظة: بعض المفاهيم التالية قد تكون للمتقدمين…

عمل نسخة احتياطية من سجل اﻹقلاع الرئيسي (MBR)

أول مثال نبدأ به لشرح هذا المفهوم، هو باستخدام MBR (وهو أحد جداول تقسيم اﻷقراص ومساند في عملية اﻹقلاع) حيث سوف نبرهن كيفية عمل نسخة احتياطية له في حال فقدانه كـ “ملف”، عوضًا عن استرداده من الصفر اﻷمر الذي يُعدّ صعبًا للغاية.

الاسترداد من “ملف” شيء سهل، ويأتي لينكس مع أداة قوية جدًا ومعروفة وهي اﻷمر dd والتي يمكنها التكفل بهذا اﻷمر وبمهامٍ أخرى أوسع…

dd اختصار لـ disk dumb ويسمى أيضًا disk destroyer؛ اﻷمر التالي سوف يقوم بعمل نسخ احتياطي لـ MBR خاصتك، وهو يقوم بإنشاء ملف اسمه myMBR.bak في المجلّد  /tmp وسيكون بحجم 512 بايت ويحتوي على كود اﻹقلاع وجدول التقسيم:

dd if=/dev/sda of=/tmp/myMBR.bak bs=512 count=1

bs تشير إلى حجم الكتلة (block size).

count هو عدد الكتل (block files) التي سيتم قراءتها من الملف المصدري (source fie).

إن هذا كله جزء من نظام الملفات أو ما نسميه قرص النظام (FileSystem)

كل شيء على لينكس قابل للوصول إليه على شكل ملف في حيّز قرص النظام (filesystem)، المقصد اﻷساسي من هذا اﻷمر هو أن لديك القدرة على استخدام العديد من اﻷدوات المشتركة على أشياء مختلفة.

فاﻷمر dd يمكن استخدامه لنسخ بارتشن كامل من القرص الصلب إلى ملف أو حتى إلى قرص صلب آخر! كما هو موضّح باﻷمرين أدناه، يقوم dd بنسخ البيانات إلى نهاية الـ input device ثم يتوقف، وينبغي التأكد من أن حجم الـ output device أكبر من حجم الـ input device:

dd if=/dev/sdf2 of=/dev/sdg3
dd if=/dev/sda of=/dev/sdg

أداة أخرى من أدوات الـ filesystem هو اﻷمر cat الذي يستخدم ﻹرسال محتوى أي ملف إلى Standard Output هذا يشمل البارتشنات واﻷقراص الصلب، ومن ثم إعادة توجيه المحتوى ليتم استخراجه كـ “ملف” ناتج.

cat /dev/sda1 > partition1.backup

واﻵن إليك تجربة مثيرة أخرى لتُثبت لك حقيقة أن كل شيء هو ملف، معظم توزيعات لينكس تأتي مع طرفيات متعددة (multiple virtual consoles)، ويتراوح عددها من واحد إلى سبعة، حيث يمكن استخدامها للدخول إلى جلسة طرفية محلية (local console session) مع واجهة شِل (shell interface)، وللوصول إلى هذه الطرفيات الوهميّة استخدم المفاتيح Ctrl-Alt-F1 وبالنسبة للطرفية الثانية Ctrl-Alt-F2، وهكذا على نفس المنوال بالنسبة للثالثة والرابعة إلخ… حتى السابعة.

نسمي هذه الطرفيات في لينكس بالاسم المشهور (tty)، كما يمكن كتابة مدخلات في طرفية محددة وإرسالها كمخرجات إلى طرفية أخرى، فمثلًا انتقل إلى (tty3) باستخدام المفاتيح Ctrl-Alt-F3 واكتب الأمر التالي:

echo "Hello world" > /dev/tty2

سوف يقوم هذا اﻷمر بإرسال السلسلة النصيّة إلى الطرفية الثانية (tty2) ويظهرها على الشاشة، عند الانتقال إلى tty2 باستعمال المفاتيح Ctrl-Alt-F2 سوف ترى السلسلة النصيّة Hello World ظاهرة على الشاشة.

تجربة أخرى جميلة وهي طباعة ملف مباشرة بالطابعة باستخدام اﻷمر cat، افرض أن جهاز الطابعة لديك هو /dev/usb/lp0 (سوف نتطرق إلى أمور dev وإدارة اﻷجهزة في تدوينة لاحقة)، اﻷمر التالي سوف يقوم بطباعة ملف PDF بشكل مباشر:

cat test.pdf > /dev/usb/lp0

كذلك يمكن استخدام الأمر dd للقيام بهذه المهمة، ولكن cat أفضل في هذا السياق.

تطبيقات أخرى على مفهوم “كل شيء هو ملف”

تأثيرات “Everything is a file” واسعة جدًا وبعيدة المدى وأكثر بكثير من مجرّد سردها في مقالة كهذه، لقد ناقشنا بعض اﻷمثلة، وهناك قائمة كبيرة يمكن تطبيقها باستخدام هذا المفهوم على سبيل المثال لا الحصر:

  • استنساخ محركات اﻷقراص
  • عمل نسخة احتياطية للبارتشنات
  • عمل نسخة احتياطية للـ MBR
  • تثبيت ملفات الـ ISO على USB Drives
  • التواصل مع المستخدمين المتواجدين على الطرفيات اﻷخرى
  • طباعة الملفات إلى الطابعة
  • تغيير محتويات الملفات
  • الكتابة فوق الملفات والبارتشنات ومحركات اﻷقراص
  • إعادة توجيه المخرجات غير المرغوبة إلى /dev/null حيث تختفي للأبد

وهذا غيّض من فيّض…

[opensource]

  • delphi17

    مقال جيد ورائع في انتضار مقال عن (سوف نتطرق إلى أمور dev وإدارة اﻷجهزة في تدوينة لاحقة)

  • Mohamed Ramad

    ما شاء الله فعلا شرح بسيط و موقع رائع الله يجعله بميزان حسناتكم الى يوم الدين

مشاركة