كيف تفهم هيكلية نظام الملفات في لنكس


نافذ عماد

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

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

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

linux-file-system.thumb.png.d5e1080ccf73

بعض الملاحظات المختصرة عن تاريخ هيكلية نظام الملفات في لينكس

يرث لينكس الكثير من المفاهيم لتنظيم الملفات من أسلافه من أنظمة Unix، الذي يعود إلى عام 1979، وقد وضع يونكس معاييرًا للتحكم في كيفية تنظيم ملفات المستخدمين.

معيار هيكلية نظام الملفات FHS هو معيار توجيهي تحتفظ به مؤسسة لينكس ويحدد هيكلية الملفات التي يجدر بمختلف توزيعات لينكس أن تتبعها، وذلك لتسهيل الإدارة والحفاظ على طريقة توزيع/تثبيت موحّدة وآمنة للتطبيقات على مختلف التوزيعات.

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

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

لمحة بسيطة

قبل الخوض في هيكلية نظام الملفات، تحتاج إلى معرفة بعض الأساسيات حول كيفية التعامل مع نظام الملفات والأوامر، ونحن سوف نغطي الحد الأدنى هنا لتستطيع البدء لوحدك.

ملاحظة: وجود علامة $ يعني أن هذا أمر يمكنك كتابته على سطر الأوامر، وما يتبعه من الأسطر الخالية من علامة $ هو ناتج الأمر السابق.

توجيه نفسك

أول شيء عليك القيام به هو معرفة التعامل مع نظام الملفات، هناك عدد قليل من الطرق للقيام بذلك، ومن أبسط الطرق هي طباعة مجلد العمل:

$ pwd
/root

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

انظر حولك

لمعرفة ما هي الملفات الموجودة في المجلد الحالي، يمكنك تطبيق الأمر ls، ,وهو اختصار قائمة "List":

$ ls

bin etc lib mnt root selinux tmp vmlinuz
boot home lost+found opt run srv usr
dev initrd.img media proc sbin sys var

هذا الأمر يوضّح كل الامتدادات والملفات في المجلد الحالي.

الأمر ls يمكن أن يأخد بعض الخيارات، وهذه الخيارات تُعدّل على سلوك الأمر الافتراضي إما لعملية أخرى أو عرض البيانات بطريقة مختلفة.

على سبيل المثال، إذا أردنا أن نفرق بسهولة بين الملفات والمجلدات، وذلك بإضافة "/"  بعد مخرجات المجلد، يمكنك تمرير الخيار F-:

$ ls –F

bin/ home/ media/ root/ srv/ var/
boot/ initrd.img@ mnt/ run/ sys/ vmlinuz@
dev/ lib/ opt/ sbin/ tmp/
etc/ lost+found/ proc/ selinux/ usr/

ومن أكثر الخيارات شيوعا هي l- وa-، فالأمر الأول يقوم بإخراج المعلومات الناتجة بشكل طويل ومفصل:

$ ls –l

total 76
drwxr-xr-x 2 root root 4096 Apr 26 2012 bin
drwxr-xr-x 3 root root 4096 Apr 26 2012 boot
drwxr-xr-x 13 root root 3900 Dec 4 18:03 dev
drwxr-xr-x 78 root root 4096 Dec 4 19:29 etc
drwxr-xr-x 3 root root 4096 Dec 4 19:28 home
lrwxrwxrwx 1 root root 33 Apr 26 2012 initrd.img -> /boot/initrd.img-3.2.0-24-virtual
drwxr-xr-x 16 root root 4096 Apr 26 2012 lib
...

ينتج سطر واحد لكل ملف واحد أو مجلد (الاسم في أقصى اليمين). ويكون لديه الكثير من المعلومات التي لانهتم بها في الوقت الحالي، جزء واحد مهتمون به حاليا هو الذي يوضح لنا ما هو نوع الملف. هناك 3 أنواع ملفات (الأكثر شيوعا):

  1. ملف عادي.
  2. ملف مجلد (ملف من صيغة محددة يحتوي ملفات أخرى).
  3. ملف ارتباط حقيقي أو وهمي (hard link, soft link وكلاهما اختصار لملف آخر على النظام).

أما الخيار a- يستعرض كل الملفات بما فيها الملفات المخفية، وفي لينكس، يتم إخفاء الملفات تلقائيا إذا بدأ الاسم بنقطة (.) dot:

$ ls -a
.  ..  bash_logout  .bashrc  .profile

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

جولة

الآن يمكنك معرفة أين أنت في نظام الملفات وترى ما يدور حولك، حان الوقت لمعرفة كيفية التعامل مع نظام الملفات.

للتغيير إلى مجلد مختلف، استخدم الأمر cd، (اختصار Change Directory) والذي يقوم بتغيير المجلد:

$ cd /bin

يمكنك التعامل مع الأمر بمسار كامل أو مسار نسبي. حيث:

  • المسار الكامل (Full path): هو مسار الملف الذي يحدد مكان وجود المجلد من على قمة شجرة المجلد الجذر (سنشرح ذلك لاحقا)، تبدأ المسارات الكاملة بـ "/"، كما ترون أعلاه.
  • المسار النسبي (Relative path): هو مسار الملف نسبةً إلى مجلد العمل الحالي، هذا يعني أنه بدلا من تحديد مكان من الجزء العلوي من المجلد، فإنه يمكن تحديد المكان بالنسبة لمجلد العمل المتواجد به أنت حاليا.

على سبيل المثال، إذا كنت ترغب في الانتقال إلى مجلد ضمن المجلد الحالي يدعى documents، يمكنك استخدام هذا الأمر:

$ cd documents

عدم وجود "/" من البداية تدفعك لاستخدام المجلد الحالي كأساس لتبحث عن مسار المجلد الهدف.

للانتقال إلى المجلد الأصل من المجلد الحالي الخاص بك، يمكنك كتابة، حيث -كما تم الإشارة إليه مسبقا- فـ ".." تعني المجلد الأب للمجلد الحالي:

$ cd ..

نظرة عامة على هيكلية نظام الملفات في اللنكس

أول شيء تحتاج إلى معرفته عند عرض نظام الملفات في لينكس هو أن نظام الملفات يحتوي على شجرة واحدة، بغض النظر عن عدد الأجهزة المرتبطة به.

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

"/" في لينكس، تعني أنه كل ملف أو جهاز على النظام موجود تحت " الجذر" (root)، فهو يرمز لنقطة بداية شجرة الملفات.

ملاحظة: هذا يختلف عن المستخدم الإداري الافتراضي، وهو ما يسمى أيضا "الجذر" (root). وهو يختلف أيضا من المجلد الرئيسي للمستخدم الإداري الافتراضي، والذي يقع في "root/".

وبالتالي، إذا كنا نريد أن نذهب إلى المستوى الأعلى من المجلد داخل نظام التشغيل ونرى ما هناك، يمكن أن نكتب:

$ cd /
$ ls

bin etc lib mnt root selinux tmp vmlinuz
boot home lost+found opt run srv usr
dev initrd.img media proc sbin sys var

كل ملف، جهاز، مجلد، أو تطبيق فهو يقع تحت مجلد واحد، ويمكننا أن نرى بداية بنية المجلد، سنذهب إلى المزيد من التفاصيل أدناه:

bin/

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

إذا كنت تبحث في هذا المجلد، وسوف تجد أن كل LS, pwd الموجودة هنا ، والأمر cd مبنى بداخل الشل (shell) التي نستخدم باش (bash)، كما أنها موجودة في هذا المجلد.

boot/

هذا المجلد يحتوي على الملفات الفعلية، والصور، والنواة(Kernel) اللازمة لتشغيل النظام، وعلى العناصر الأساسية التي تسمح فعليا للنظام بالإقلاع، في حين /bin يحتوي على الأساسيات.

إذا كنت بحاجة إلى تعديل ملف الإقلاع في النظام الخاص بك، أو إذا كنت ترغب في رؤية الملفات النواة (Kernel) و(ramdisk)، يمكنك العثور عليها هنا، يجب أن يصل هذا المجلد إلى النظام في وقت مبكر جداً.

dev/

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

على سبيل المثال، الجهاز الذي يمثل القرص الصلب /dev/sda تستطيع أن ترفعه من الملف الى مركز النظام وبالمقابل لوكان لديك ملف يمثل رابط الطابعة /dev/lpr فبإمكانك كتابته مباشرة ليرسل المعلومات الى الطابعة.

etc/

تعتبر احدى مناطق نظام الملفات التي تستهلك الكثير من الوقت والعمل اذا استخدمتها كمدير للنظام.

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

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

home/

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

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

غالبا ما يوجد مجلدات ملفات مخفية داخل المجلد الرئيسي (ممثلة بنقطة البداية)، والتي تسمح للمستخدم بالقيام بإعدادات خاصة للقوائم

تستطيع غالبا انشاء نظام فرضيات في مجلد /etc يمكن أن يتجاوزها المستخدم في مجلده الرئيسي للضرورة.

lib/

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

lost+found/

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

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

media/

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

mnt/

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

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

opt/

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

على سبيل المثال، إذا كان التوزيع يوفر عادة حزم من خلال مدير الحزم، ولكن قمت بتثبيت برنامج X من المصدر، فإن هذا المجلد سيكون موقعا جيدا لهذا البرنامج، هناك خيار أكثر شيوعا لبرامج من هذا النوع موجود في المجلد المحلي /usr/local.

proc/

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

هذا يعني أننا نقوم بالتحقق وتعديل معلومات مختلفة من نواة اللنكس نفسها (Kernel)، على سبيل المثال، يمكنك الحصول على معلومات مفصلة حول استخدام الذاكرة عن طريق كتابة cat /proc/meminfo.

root/

هو المجلد الرئيسي للمستخدم المدير (ويسمى "الجذر"). وهو يعمل تماما مثل المجلدات الرئيسية العادية.

run/

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

sbin/

هذا المجلد هو اشبه ما يكون للمجلد /bin لأنه يحتوي على البرامج التي تعتبر أساسية لنظام التشغيل، وهو عادة يحتوي على الأوامر المتوفرة لمسؤول النظام، بينما مجلد آخر يحتوي على برامج لجميع المستخدمين للنظام.

selinux/

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

srv/

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

tmp/

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

usr/

هذا المجلد هو واحد من أكبر المجلدات على النظام، وتشمل في الأساس مجموعة من المجلدات التي تبدو مشابهة لتلك الموجودة في مجلد الجذر

مثل //usr,/bin ,/usr/,lib تستخدم هذا الموقع أساسا لتخزين كافة البرامج غير الضرورية والتوثيق والمكتبات، وغيرها من البيانات الخاصة بهم غير المطلوب من أجل استخدام الحد الأدنى من النظام.

هذا هو المكان الذي سيتم تخزين معظم الملفات على النظام، بعض المجلدات الفرعية الهامة هي /usr/local، وهو يعتبر بديل إلى المجلد /opt لتخزين البرامج المترجمة محليا، شيئ آخر مثير للاهتمام هو التحقق من /usr/share directory، والذي يحتوي على وثائق وملفات وملفات الاعدادت، وملفات أخرى مفيدة.

var/

يفترض في هذا المجلد احتواء البيانات المتغيرة، في الممارسة العملية، وهذا يعني أنه يستخدم لتخزين معلومات أو مجلدات والتي من المتوقع أن تنمو مع استخدام النظام.

على سبيل المثال، توجد سجلات النظام والنسخ الاحتياطي، وهناك استخدام شائع لهذا المجلد هو تخزين محتوى الويب إذا كنت تعمل على خادم للويب.

الخاتمة

على الرغم من أن التفاصيل التي تخزن فيها الأشياء تختلف من توزيعة إلى أخرى إلا أن المواقع التي تمت مناقشتها سترشدك إلى الاتجاه الصحيح.

وإن من افضل الطرق لاكتشاف نظام الملفات هي طريقة اجتياز الاتجاهات المتعددة من أجل محاولة معرفة وظيفة ما بداخل الملفات .

سيكون بإمكانك ربط المجلدات المختلفة بوظائف مختلفة وتستطيع أن تقرر أين ستذهب لإنجاز مهمة معينة.

اذا كنت تريد مرجعاً سريعاً يخبرك بوظيفة كل مجلد فيمكنك استخدام المجلد الداخلي اليدوي للصفحات وذلك بكتابة الأمر التالي :

man hier

هذا سيعطيك فكرة عامة عن نظام الملفات النموذجية والوظائف المتعلقة بكل موقع.

ترجمة -وبتصرّف- للمقال: How To Understand the Filesystem Layout in a Linux VPS.



2 اشخاص أعجبوا بهذا


تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن