المحتوى عن 'rhcsa'.



مزيد من الخيارات

  • ابحث بالكلمات المفتاحية

    أضف وسومًا وافصل بينها بفواصل ","
  • ابحث باسم الكاتب

نوع المُحتوى


التصنيفات

  • التخطيط وسير العمل
  • التمويل
  • فريق العمل
  • دراسة حالات
  • نصائح وإرشادات
  • التعامل مع العملاء
  • التعهيد الخارجي
  • التجارة الإلكترونية
  • مقالات عامة

التصنيفات

  • PHP
    • Laravel
    • ووردبريس
  • جافاسكريبت
    • Node.js
    • jQuery
    • AngularJS
    • Cordova
  • HTML5
  • CSS
    • Sass
    • إطار عمل Bootstrap
  • SQL
  • سي شارب #C
    • منصة Xamarin
  • بايثون
    • Flask
    • Django
  • لغة روبي
    • إطار العمل Ruby on Rails
  • لغة Go
  • لغة جافا
  • لغة Kotlin
  • برمجة أندرويد
  • لغة Swift
  • لغة R
  • سير العمل
    • Git
  • صناعة الألعاب
    • Unity3D
  • مقالات عامّة

التصنيفات

  • تجربة المستخدم
  • الرسوميات
    • إنكسكيب
    • أدوبي إليستريتور
    • كوريل درو
  • التصميم الجرافيكي
    • أدوبي فوتوشوب
    • أدوبي إن ديزاين
    • جيمب
  • التصميم ثلاثي الأبعاد
    • 3Ds Max
    • Blender
  • مقالات عامّة

التصنيفات

  • خواديم
    • الويب HTTP
    • قواعد البيانات
    • البريد الإلكتروني
    • DNS
    • Samba
  • الحوسبة السّحابية
    • Docker
  • إدارة الإعدادات والنّشر
    • Chef
    • Puppet
    • Ansible
  • لينكس
  • FreeBSD
  • حماية
    • الجدران النارية
    • VPN
    • SSH
  • مقالات عامة

التصنيفات

  • التسويق بالأداء
    • أدوات تحليل الزوار
  • تهيئة محركات البحث SEO
  • الشبكات الاجتماعية
  • التسويق بالبريد الالكتروني
  • التسويق الضمني
  • استسراع النمو
  • المبيعات

التصنيفات

  • إدارة مالية
  • الإنتاجية
  • تجارب
  • مشاريع جانبية
  • التعامل مع العملاء
  • الحفاظ على الصحة
  • التسويق الذاتي
  • مقالات عامة

التصنيفات

  • الإنتاجية وسير العمل
    • مايكروسوفت أوفيس
    • ليبر أوفيس
    • جوجل درايف
    • شيربوينت
    • Evernote
    • Trello
  • تطبيقات الويب
    • ووردبريس
    • ماجنتو
  • أندرويد
  • iOS
  • macOS
  • ويندوز

التصنيفات

  • شهادات سيسكو
    • CCNA
  • شهادات مايكروسوفت
  • شهادات Amazon Web Services
  • شهادات ريدهات
    • RHCSA
  • شهادات CompTIA
  • مقالات عامة

أسئلة وأجوبة

  • الأقسام
    • أسئلة ريادة الأعمال
    • أسئلة العمل الحر
    • أسئلة التسويق والمبيعات
    • أسئلة البرمجة
    • أسئلة التصميم
    • أسئلة DevOps
    • أسئلة البرامج والتطبيقات
    • أسئلة الشهادات المتخصصة

التصنيفات

  • ريادة الأعمال
  • العمل الحر
  • التسويق والمبيعات
  • البرمجة
  • التصميم
  • DevOps

تمّ العثور على 12 نتائج

  1. عرضنا في دروس سابقة من هذه السلسلة لوسيلتين من وسائل التحكّم في الوصول على Red Hat Enterprise Linux، وهما إدارة الأذونات وقوائم التحكّم في الوصول. هاتان الآليتان مهمتان وأساسيّتان؛ إلا أن لديهما نقاطَ قصور تأتي آليّة أخرى تُسمّى Security Enhanced Linux (التأمين المُعزَّز في لينكس، وتشتهر بـSELinux) للتغلّب عليها. تنبغي الإشارة هنا إلى أن SELinux ليست الآليّة الوحيدة المستخدمة في توزيعات لينكس للتغلّب على عوامل النّقص في الآليتين المُشار إليهما سابقا. توجد آليّة أخرى تُسمّى AppArmor تتبناها توزيعات مثل Suse وUbuntu. عند ما يُشغّل مستخدم برنامجا فإن العمليّة Process التي يُنفّذها تعمل بصلاحيّات هذا المستخدِم. يمكن في غياب آليّة مثل SELinux أن تنفّذ أي عمليّة الإجراءات التي تريد على الملفات التي يمكن للمستخدم الذي تعمل بصلاحياته الوصول إليها، مما قد يتسبّب الوصول غير المرخَّص إلى كامل النظام. بدأت وكالة الأمن القومي الأمريكية NSA بتصميم SELinux من أجل تقييد قدرة العمليّات على الوصول إلى الكائنات (مثل الملفات، المجلدات، منافذ الشبكة، ..إلخ) أو إجراء عمليّات عليها؛ وقصرها على الحدّ الأدنى. يمكن تعديل التقييدات التي يُطبّقها نظام SELinux حسب الحاجة. تُضمِّن توزيعة Red Hat Enterprise Linux 7 وحدة خاصّة بنظام SELinux في النواة وتُفعّل مبدئيا وضع Enforcing. سنشرح في هذا الدّرس المفاهيم الأساسيّة التي يعتمد عليها نظام SELinux في عمله. الأوضاع Modes في SELinux يعمل SELinux في أحد الأوضاع الثلاثة التالية: Enforcing: يمنع SELinux في هذه الحالة الوصول إلى الكائنات بناءً على مجموعة قواعد السياسة الأمنيّة المعرَّفة في النظام. Permissive: لا يمنع SELinux في هذا الوضع العمليّات من الوصول إلى الكائنات، ويكتفي بتسجيل الإجراءات التي كانت ستُمنَع لو كان الوضع Enforcing مستخدما. Disabled. نظام SELinux معطَّل. يُظهر الأمر getenforce الوضع الذي يعمل عليه SELinux حاليا؛ بينما يضبط الأمر setenforce وضع SELinux للجلسة الحاليّة، ويتلقّى أحد معطييْن: 1 لوضع Enforcing و0 لوضع Permissive. إن أردت أن يكون تغيير وضع عمل SELinux دائما ولا يقتصر على الجلسة الحاليّة فستحتاج لتحرير الملفّ etc/selinux/config/ وتعيين قيمة التعليمة SELINUX بالوضع الذي تريد: permissive، enforcing أو disabled: # getenforce Enforcing # setenforce 0 # getenforce Permissive # setenforce 1 # getenforce Enforcing # cat /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=enforcing # SELINUXTYPE= can take one of three two values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted يُستخدَم الأمر setenforce عادةً للانتقال بين وضعيْ Enforcing وPermissive أثناء البحث عن أسباب مشكل. مثلا؛ إن ظهر المشكال أثناء تفعيل الوضع Enforcing واختفى عند الانتقال إلى الوضع Permissive فهذا يعني أن المشكل يتعلّق بقاعدة في سياسة SELinux الأمنيّة. السيّاقات Contexts في SELinux السيّاقات هي بيئة تحكّم في الوصول تُتخَّذ فيها الإجراءات بناء على مستخدم SELinux، الدّور Role والنوع Type وبصيغة اختيارية المستوى Level: يُكمّل المستخدمون في SELinux المستخدمين العاديّن، إذ يربط SELinux حساب المستخدم العادي بحساب في SELinux. يُستخدَم حساب SELinux في السيّاق للتحكّم في العمليات من أجل تعريف أدوارها ومستوياتها. يعمل الدّور وسيطا بين أنواع الملفّات والمستخدمين في SELinux إذ يُعرّف ماهي أنواع الملفات التي يمكن لمستخدمي SELinux الوصول إليها. تُساهم الأدوار في الحؤول دون الثغرات التي تؤدي إلى هجمات الارتقاء في الصلاحيّات Privilege escalation. يعرّف SELinux نوعًا لكلّ ملفّ أو عمليّة. تُمنَع العمليّات في الظروف العاديّة من الوصول إلى الملفات التي تستخدمها عمليّات أخرى، أو من الوصول إلى هذه العمليّات. لا يُسمَح لعمليّة بالوصول إلى ملفّات إلا إذا أضيفت قاعدة إلى الساسية الأمنية تُصرّح لها بالوصول إلى النوع المستهدف. سنرى في ما يلي أمثلة لعمل SELinux. تغيير المنفذ المبدئي لخدمة SSH شرحنا في درس سابق أن تغيير المنفذ المبدئي الذي تنصت عبره خدمة SSH هو أحد الإجراءات الأمنيّة المتّبعة لتأمين الخادوم ضدّ الهجمات القادمة من شبكة الإنترنت. نحرّر الملفّ etc/ssh/sshd_config/ لتغييرالمنفذ الذي تعمل عبره هذه الخدمة ليصبح المنفذ رقم 9999 (انزع علامة التعليق # عن التعليمة Port وحدّد القيمة 9999 بدلا من 22): Port 9999 نحفظ التعديلات ونعيد تشغيل خدمة SSH (لاحظ الحرف d في نهاية اسم الخدمة): # systemctl restart sshd # systemctl status sshd غيّرنا المنفذ الذي تُنصت عبره خدمة SSH ثم أعدنا تشغيل العمليّة sshd التي تتحكّم في الخدمة ولكن إعادة تشغيل الخدمة أخفقت كما يظهر ذلك عند إظهار حالة الخدمة (الأمر systemctl status). إن كنت تستخدم واجهة رسوميّة فستظهر رسالة بعد تنفيذ أمر إعادة التشغيل تفيد بأن SELinux لاحظ أمرا ما. مالذي حصل إذن؟ يمكّن الفحص السّريع لملف السّجل var/log/audit/audit.log/ الذي يحوي معلومات متعلّقة بالأحداث الأمنية على مستوى نظام التشغيل من الحصول على معلومات عن ما حدث. يُشار في ملفّ السّجل المذكور بالنوع AVC إلى المعلومات المتعلقة بـSELinux؛ تمكننا الاستعانة بهذه المعلومة للبحث في المُدخلات ذات الصّلة بـSELinux: # grep AVC /var/log/audit/audit.log | tail -1 نلاحظ أن الخدمة sshd مُنعت من استخدام المنفذ 9999 نظرا لكونه محجوزا لصالح خدمة أخرى (JBoss Management): يمكنك تعطيل SELinux كما هو موضّح أعلاه وإعادة تشغيل خدمة SSH وستجد أن الخدمة تعمل على المنفذ الجديد؛ لكن لا تفعل. سنستخدم أداة semanage لإخبارنا بما يجب فعله لنتمكّن من تشغيل خدمة SSH على أي منفذ نريده دون مشاكل. ننفّذ الأمر التالي للحصول على لائحة بالمنافذ التي يسمح SELinux لخدمة SSH بالإنصات للاتّصالات القادمة عبرها: # semanage port -l | grep ssh ssh_port_t tcp 22 يظهر في نتيجة الأمر أن SELinux يسمح لـSSH بالإنصات للاتّصالات القادمة عبر المنفذ 22 فقط، لا غير. ما سنفعله الآن هو العودة إلى ملفّ إعداد SSH على المسار etc/ssh/sshd_config/ وتغيير المنفذ من 9999 إلى 9998: Port 9998 ثم نضيف المنفذ 9998 إلى السيّاق ssh_port_t ونعيد تشغيل الخدمة: # semanage port -a -t ssh_port_t -p tcp 9998 # systemctl restart sshd # systemctl is-active sshd تمكن ملاحظة أن الخدمة شُغّلت دون أية مشاكل هذه المرة. يوضّح هذا المثال كيف أن SELinux يتحكّم في منافذ الشبكة بالاعتماد على تعريفاته الخاصّة لنوع كلّ منفذ. السّماح لخدمة httpd بالوصول إلى خدمة sendmail ذكرنا أن SELinux يتحكّم في إمكانيّة وصول عمليّة Process إلى عمليّات أخرى. سنرى الآن مثالا على ذلك. سنفترض أنك تريد تفعيل وحدتي mod_security وmod_evasive على خادوم وِب Apache واستخدامهما لإرسال إشعارات بالبريد الإلكتروني (خدمة sendmail) عند حدوث هجمة حجب خدمة (Dos, Denial of Service). تحتاج في هذه الحالة للسماح لخادوم وِب Apache (خدمة httpd) بالوصول إلى خدمة البريد sendmail. توجد في SELinux إعدادات تشغيل تُسمّى SELinux booleans (قيم منطقيّة) يمكن عبرها تعطيل أو تفعيل قواعد ضمن سياسة SELinux الأمنية. تُستخدم الأداة semanage للحصول على قائمة بجميع هذه الإعدادات: # semanage boolean -l يتحكّم الإعداد httpd_can_sendmail في إمكانيّة وصول الخدمة httpd إلى sendmail: # semanage boolean -l | grep httpd_can_sendmail httpd_can_sendmail (off, off) Allow httpd to can sendmail يظهر في نتيجة الأمر أعلاه أن الإعداد مضبوط على القيمة off بمعنى أن القاعدة الأمنيّة معطّلة، نفعّلها على النحو التالي: # setsebool -P httpd_can_sendmail 1 استخدمنا الأمر setsebool لتفعيل القاعدة بتمرير اسمها والقيمة 1 (تفعيل). يؤدي استخدام الخيار P- إلى استمرار مفعول الأمر (تفعيل القاعدة) بعد إعادة تشغيل الخادوم. يمكن التأكد من تغيير الإعداد بإعادة تنفيذ أمر semanage السابق: # semanage boolean -l | grep httpd_can_sendmail httpd_can_sendmail (on, off) Allow httpd to can sendmail ملحوظة: يشير الحقل الثاني في نتيجة الأمر semanage boolean (أي (on, off)) في المثال أعلاه إلى قيمة الإعداد حاليّا (on)، وقيمته المبدئيّة (off). تقديم صفحة وِب توجد في مجلّد مغاير للمجلد المبدئي سنفترض في هذا المثال أن لديك موقع وِب توجد صفحاته في المجلّد websites/ بدلا من المجلّد المبدئي لخادوم الوِب (var/www/html/). أنشئ ملفا باسم index.html في المجلد websites/ وأضف إليه المحتوى التالي: <html> <h2>SELinux test</h2> </html> إن نفّذت الأمر التالي: # ls -lZ /websites/index.html فستجد أن الملفّ index.html من النوع default_t وهو النوع المبدئي في SELinux ولا يمكن لخادوم الوِب الوصولُ إليه. غيّر قيمة التعليمة DocumentRoot في الملفّ etc/httpd/conf/httpd.conf/ لتصبح websites/. حدّث كتلة Directory التي يظهر فيها اسم المجلّد المبدئي السابق؛ مثلا: <Directory "/var/www/html"> ... </Directory> تصبح: <Directory "/websites"> ... </Directory> أعد تشغيل خادوم الوِب: # systemctl restart httpd أدخل عنوان الخادوم في المتصفّح (أو 127.0.0.1 إن كان المتصفّح على الخادوم). يجب أن تظهر رسالة خطأ 403 تفيد بأن الوصول إلى هذا المحتوى ممنوع. ملحوظة: إن ظهرت الصفحة المبدئيّة لخادوم الوِب فعلّق جميع الأسطر الموجودة في الملفّ etc/httpd/conf.d/welcome.conf/ وأعد تشغيل خادوم الوِب. نعدّل نوع المجلّد websites/ وجميع محتوياته ليصبح httpd_sys_content_t type (بدلا من النوع المبدئي default_t) ممّا يتيح لخادوم الوِب Apache الوصول إلى هذا المحتوى بصلاحيّة القراءة فقط: # semanage fcontext -a -t httpd_sys_content_t "/websites(/.*)?" ثم نطبّق سياسة SELinux التي عدّلناها للتّو: # restorecon -R -v /websites أعد تشغيل خادوم الوِب وافتح عنوان الخادوم في المتصفّح من جديد، وستجد أن خادوم الوِب يعرض محتوى ملفّ HTML الذي أنشأناه سابقا. موضوع SELinux متشعّب جدا؛ إلا أن المفاهيم التي عرضنا لها في هذا المقال ستمكّنك من إيجاد قاعدة تبني عليها للانتقال إلى مواضيع أخرى تتعلّق بنظام الحماية SELinux. ترجمة - بتصرّف - لمقال RHCSA Series: Mandatory Access Control Essentials with SELinux in RHEL 7 – Part 13 لصاحبه Gabriel Cánepa.
  2. يتطلّب عملُ مدير الأنظمة غالبا تثبيتَ نظام التشغيل على أكثر من خادوم؛ فسواء تعلّق الأمر بمركز بيانات أو بيئة للاختبار، سيجد مدير الأنظمة نفسه أمام مهمة تثبيت النظام على أكثر من جهاز. تأخذ الطريقة التقليدية في التثبيت الكثير من الوقت، خصوصا إذا كان عدد الخواديم معتبرا. تتيح Red Hat إمكانية تفادي ضياع الوقت في مثل هذه التثبيتات باستخدام أداة تثبيت تُعرَف بـKickstart. سنعرِض في هذا المقال لكيفية استخدام Kickstart لتثبيت Red Hat Enterprise Linux 7. مقدمة عن Kickstart والتثبيت المؤتمَت Automated installation تُستخدَم أداة Kickstart لأتمتة عمليات التثبيت على Red Hat Enterprise Linux وتوزيعات أخرى مشتقة من Fedora (مثل CentOS وOracle Linux)؛ يعني هذا أنّ تدخّل مدير النّظام أثناء عمليّة التثبيت سيكون في الحدّ الأدنى، على عكس عملية التثبيت الاعتيادية التي تتطلّب المتابعة المباشرة من مدير النظام للانتقال من خطوة إلى أخرى. يمكن باستخدام Kickstart الحصول على خواديم بأنظمة تشغيل متطابقة (نفس حزم البرامج وملفات الإعداد) بقليل من الجهد. الاستعداد للتثبيت باستخدام Kickstart نحتاج لاتّباع الخطوات التاليّة لتنفيذ تثبيت عن طريق Kickstart: إنشاء ملفّ Kickstart وهو ملفّ نصيّ توجد به خيّارات إعداد تُعرَّف مسبقا. توفير ملفّ Kickstart على وسيط تخزين (قرص مُدمَج، قرص صلب أو موقع على الشبكة). يستخدم العميل ملفّ rhel-server-7.2-x86_64-boot.iso للإقلاع عليه، وهو ملفّ ISO يحوي الملفات الأساسيّة فقط للتوزيعة؛ ثم نتيح ملف التوزيعة الكامل rhel-server-7.0-x86_64-dvd.iso على مورد على الشبكة، مثل خادوم HTTP (وِب) أو خادوم FTP. يحوي الملفّ الكامل جميع الحزم الموجودة في التوزيعة ويُستخدَم لتثبيت الحزم التي نحدّدها في ملفّ Kickstart. سنستخدم في حالتنا خادوم RHEL 7 آخر على العنوان 192.168.2.100. بدء التثبيت باستخدام Kickstart. يُنشأ ملفّ Kickstart من حساب زبناء Red Hat حيثُ توجد أداة إعداد Kickstart. استخدم هذه الأداة لتحديد خيارات التثبيت التي تناسبك، بعد التمعّن فيها جيدا. تتألف الأداة من مقاطع عدّة تشمل الإعدادات الأساسيّة مثل لغة الواجهة، لوحة المفاتيح والمنطقة الزمنيّة. كما تشمل الأداة جزءًا خاصًّا بمصدر التثبيت (قرص مُدمَج CD، خادوم وِب أو غيرهما). يُعدّ ملفّ Kickstart مبدئيّا لتثبيت الحزم الأساسيّة للنّظام فقط، لكن يمكن تحديد حزم أخرى لتثبيتها. إن قرّرت أن التثبيت سيكون عبر خادوم وِب، FTP أو NFS فتأكّد من أن الجدار الناري على الخادوم معدّ للسماح بهذه الخدمات. حدّد خادوم وِب مصدرا للتثبيت في أداة إنشاء ملفّ Kickstart واستخدم 192.168.2.100 عنوانا للخادوم وkickstart/media/ بوصفه المجلد الذي يوجد فيه ملفّ ISO الخاصّ بالنظام. نزل الملف بعد إكمال الإعدادات. يمكنك أيضا إنشاء ملفّ Kickstart يدويا دون اللّجوء إلى الأداة التي توفّرها Red Hat. نختار في المثال التالي لملفّ Kickstart أن تكون لغة التثبيت الإنكليزية، لوحة المفاتيح us والمنطقة الزمنية Africa/Nouakchott. بالنسبة للحزم فهي توجد بين التعليمتيْن packages% وend% وحدّدنا الحزم الأساسية، خادوم نسخ احتياطي Backup server وخادوم طباعة Print server. تظهر في الملفّ أيضا كلمة سرّ الحساب الجذر المعمّاة (التعليمة rootpw مع الخيار iscrypted--). راجع توثيق Kickstart للمزيد من الخيارات. lang en_US keyboard us timezone Africa/Nouakchott --isUtc rootpw $1$5sOxDlRo$In4KTyX7OmcOW9HUxWtbn0 --iscrypted #platform x86, AMD64, or Intel EM64T text url --url=http://192.168.2.100//kickstart/media bootloader --location=mbr --append="rhgb quiet crashkernel=auto" zerombr clearpart --all --initlabel autopart auth --passalgo=sha512 --useshadow selinux --enforcing firewall --enabled firstboot --disable %packages @base @backup-server @print-server %end انتبه للتعليمة التالية في ملفّ إعداد Kickstart: url --url=http://192.168.2.100//kickstart/media يُستخدَم المجلّد kickstart/media (على خادوم الوِب) لاستخراج محتوى ملف ISO (ملف التثبيت). سنحتاج قبل استخراج محتوى ملف ISO إلى تركيبه Mounting على المسار media/rhel/ مع تحديد خيار التركيب o loop- للتعامل مع الملفّ بوصفه جهازا طرفيا حلقيا Loop device: # mount -o loop /var/www/html/kickstart/rhel-server-7.0-x86_64-dvd.iso /media/rhel يفترض الأمر أعلاه وجود ملف ISO باسم rhel-server-7.0-x86_64-dvd.iso في المجلّد /var/www/html/kickstart/ على الخادوم 192.168.2.100. ملحوظة: الأجهزة الطرفية الحلقيّة Loop devices هي شبه أجهزة تخيّلية (بمعنى أنها لا توجد فعلا، غير ملموسة) تتيح التعامل مع ملف كما لو أنه جهاز طرفي كتلي Block device (وسيط تخزين مثل قرص صلب). يمكّن تركيب ملفات ISO - التي هي تمثيل لنظام ملفات File system أو تجزئة من قرص صلب - بوصفها أجهزة حلقية من الوصول إلى محتواها كما لو كانت أنظمة ملفات فعلية. ثم ننسخ جميع محتويات المجلّد media/rhel/ إلى المجلّد var/www/html/kickstart/media/ ليكون الوصول إليه متاحا عبر خادوم الوِب: # cp -R /media/rhel/* /var/www/html/kickstart/media/ يجب أن نحصُل الآن بسرد محتويات المجلد var/www/html/kickstart/media/ على نتيجة تشبه التالي: من الجيد، بغضّ النظر عن الآليّة المستخدمة لإنشاء ملف Kickstart، التحقّق من صيغة الملفّ قبل البدء في استخدامه لتثبيت النظام. ثبّت، لهذا الغرض، حزمة pykickstart: # yum update && yum install pykickstart ثم استخدم أداة ksvalidator لفحص الملفّ: # ksvalidator /var/www/html/kickstart/academy.bin لن تحصُل على أية مخرجات إن كانت صيغة الملفّ صحيحة؛ أما إذا كانت توجد أخطاء في صيغة الملف فستظهر رسائل توضّح أين توجد التعليمات غير الصّحيحة أو غير المعروفة في الملف. تنفيذ عمليّة التثبيت نبدأ عمليّة التثبيت بالإقلاع على ملفّ rhel-server-7.2-x86_64-boot.iso؛ ثم نحدّد خيار تثبيت Red Hat Enterprise Linux 7 ونضغط على زرّ الجدولة Tab في لوحة المفاتيح من أجل إلحاق التعليمات التاليّة بأمر التثبيت: # inst.ks=http://192.168.2.100/kickstart/academy.bin تشير التعليمات إلى ملفّ academy.bin الذي أنشأناه سابقا؛ ثم نضغط على زرّ Enter لبدء التثبيت. تظهر أثناء التثبيت الحزم ومجموعات الحزم التي اخترتها عند إنشاء ملفّ Kickstart أعلاه؛ كما تظهر بعد انتهاء التثبيت رسالة تطلُب منك إخراج وسيط التثبيت وسيمكنك بعدها تشغيل النظام الجديد. يمكن، كما أشرنا سابقا، إنشاء ملفات Kickstart يدويا إلا أن الطريقة المنصوح بها هي استخدام الأداة التي توفّرها Red Hat كل ما كان ذلك ممكنا. تنشئ عمليّة تثبيت Red Hat Enterprise Linux دائما ملفّا يحوي إعدادات Kickstart للنظام المُثبَّت باسم anaconda-ks.cfg على المسار root/anaconda-ks.cfg/. يمكن استخدام هذا الملفّ أيضا لإعداد خواديم مشابهة باستخدام Kickstart. من الجيّد التعوّد على استخدام Kickstart لأتمتة تثبيت Red Hat Enterprise Linux؛ فهو طريقة سهلة للتثبيت والحصول على خواديم متشابهة في أقل مدة. نشير في اﻷخير إلى أنه يمكن استخدام Kickstart لتثبيت Red Hat Enterprise Linux بصورة مؤتمتة تماما باستخدام خادوم إقلاع عبر الشبكة (PXE Server) وضبط محمّل الإقلاع Boot loader لاستخدامه. ترجمة - بتصرّف - لمقال RHCSA Series: Automate RHEL 7 Installations Using ‘Kickstart’ – Part 12 لصاحبه Gabriel Cánepa.
  3. تتطلّب إدارة الخواديم الولوج عن بعد إلى النظام لتنفيذ مهامّ مختلفة باستخدام محاك للطرفيّة. في الواقع، من النادر أن يتواجد مدير النظام مباشرة أمام الخادوم أو حتى في نفس الموقع الجغرافي. يعني هذا أنه سيحتاج لطريقة تمكّنه من الولوج عن بعد إلى الأجهزة التي ستُطلب منه إدارتها. كان مديرو الأنظمة في البداية يستعملون خدمة telnet للولوج إلى الأنظمة عن بعد؛ إلا أن هذه الخدمة لم تعد مستعملة نظرا لأن الاتصالات التي تتم عبرها غير آمنة وتمكن قراءتها. سنرى في هذا المقال طريقة آمنة للولوج عن بعد إلى الخواديم وكيفيةَ إعداد خدمات الشبكة لتبدأ تلقائيا بعد إقلاع النظام؛ كما سنتعرّض لكيفية ضبط الشبكة واسم المضيف Hostname. تثبيت SSH وتأمين الاتصالات ستحتاج، لتكون قادرا على الاتصال بخواديم RHEL عن بعد عن طريق SSH، إلى تثبيت الحزم openssh-server ، openssh-clients وopenssh. لن يكتفي الأمر التالي بتثبيت برنامج الولوج عن بعد بل سيثبّت أيضا أداة نقل الملفات عن بعد وأداة لتأمين تقل الملفات: # yum update && yum install openssh openssh-clients openssh-server تتولى حزمة openssh-server إدارة الاتصالات عبر SSH من جانب الخادوم، في ما تتولى openssh-clients إدارتها من جانب العميل؛ تثبيتُ الحزمتين - إضافة إلى حزمة openssh - على نفس الجهاز يمكّن من استخدامه للاتّصال بجهاز آخر أو للاتصال به انطلاقا من جهاز آخر. توجد إعدادات أساسيّة في الملفّ etc/ssh/sshd_config/ على الخادوم يزيد تعديل قيمها المبدئيّة من أمان الاتصالات عن بعد: غيّر المنفذ Port المبدئي الذي يُنصت عبره الخادوم لاتصالات SSH. القيمة المبدئيّة هي 22. تأكد قبل تغيير المنفذ أنه غير مُستخدَم؛ مثلا بتنفيذ أمر netstatعلى النحو التالي (حيث 2500 هو المنفذ الذي نريد التأكد من شغوره): # netstat -npltu | grep 2500 إن لم يُرجع الأمر أعلاه أية نتيجة فيمكنك استخدام المنفذ 2500 دون مشاكل. افتح الملف etc/ssh/sshd_config/ لتعديل المنفذ المبدئي على الخادوم ليصبح على النحو التالي: Port 2500 ثم في نفس الملفّ عدّل قيمة التعليمة Protocol لتصبح 2 فقط: Protocol 2 اضبط المهلة الزمنيّة للاستيثاق على القيمة دقيقتين على سبيل المثال، عطّل إمكانيّة الدخول بالحساب الجذر root عن بعد واجعل الولوج عن بعد متاحا فقط لمجموعة محدودة من المستخدمين: LoginGraceTime 2m PermitRootLogin no AllowUsers academy يمكن أيضا تفعيل الاستيثاق المعتمد على المفاتيح بدلا من كلمات السّر: PasswordAuthentication no RSAAuthentication yes PubkeyAuthentication yes يفترض الإعداد الأخير أنك سبق أن ولّدت زوج مفاتيح لحساب المستخدم على الأجهزة العميلة ونسخت المفتاح العامّ إلى الخادوم مثل ما هو مشروح في درس العمل مع خواديم SSH: العملاء والمفاتيح. إعداد الشبكة وتمييز الأسماء Name resolution توجد بضعة ملفات إعداد تتحكّم في إعدادات الشبكة على مستوى النظام عموما: 1. ملف etc/hosts/ يُستخدَم هذا الملفّ لترجمة أسماء المضيفات إلى عناوين IP في الشبكات الصغيرة. يأخذ كلّ سطر في الملفّ الصيغة التاليّة: اسم النطاق المعرَّف بالكامل اسم المضيف العنوان على سبيل المثال: 192.168.0.10 rhcsa rhcsa.redhat.academy.hsoub.com 2. ملفّ etc/resolv.conf/ يحدّد عناوين IP الخاصّة بخواديم النطاقات ونطاق البحث الذي يُستخدَم لتكملة استعلام عن اسم نطاق في حال عدم تحديد اسم النطاق المعرَّف بالكامل. لن تحتاج لتحرير هذا الملفّ في الحالات العاديّة؛ ولكن إن احتجت لتعديل خواديم النطاقات فمن المهمّ الحفاظ على الصيغة التاليّة لكلّ سطر في الملف: nameserver عنوان IP على سبيل المثال: nameserver 8.8.8.8 3. ملفّ etc/host.conf/ يحدّد الطرق والترتيبات التي يستخدمها خادوم تمييز الأسماء لمعرفة عناوين أسماء المضيفات في الشبكة. بمعنى أنه يخبر الخادوم الخدماتِ التي يجب عليه الاستعانة بها ووفق أي ترتيب. توجد في هذا الملفّ خيارات كثيرة؛ إلا أن الإعداد الأساسي والأكثر انتشارا يحوي سطرا بالصيغة التاليّة: order bind,hosts تشير هذه الصيغة إلى أن خادوم تمييز الأسماء يجب أن يستعلم أولا من الخواديم المحدّدة في الملفّ resolv.conf ثم إن لم يحصُل على نتيجة ينظُر في الملفّ etc/hosts/. 4. ملفّ etc/sysconfig/network/ يحوي هذا الملفّ معلومات التوجيه Routing ومعلومات المضيف العامّة لجميع واجهات الشبكة. يمكن استخدام التعليمات التاليّة: NETWORKING=yes|no HOSTNAME=value حيث value هي اسم النطاق المعرَّف بالكامل للمضيف. GATEWAY=XXX.XXX.XXX.XXX حيث XXX.XXX.XXX.XXX هو عنوان IP الخاصّ بالبوّابة Gateway. GATEWAYDEV=value تحدّد قيمة هذه التعليمة، في حالة حاسوب توجد به أكثر من واجهة شبكة، الجهازَ الطّرفي Device الذي توجد عليه البواّبة؛ مثلا enp0s3. مجلّد etc/sysconfig/network-scripts/ (ملفات إعداد واجهات الشبكة) توجد داخل هذا المجلّد ملفات عدّة تبدأ أسماءها بـifcfg؛ يظهر بعد السابقة ifcfg في اسم الملفّ اسمُ الواجهة التي يضبط إعداداتها. يمكن عرض أسماء الواجهات الموجودة على الجهاز باستخدام الأمر ip link show: # ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp0s3: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT qlen 1000 link/ether 08:00:27:21:98:8c brd ff:ff:ff:ff:ff:ff تظهر في نتيجة الأمر أعلاه أسماءُ الواجهات enp0s3، lo وenp0s8؛ وعند سرد محتويات المجلّد: # ls /etc/sysconfig/network-scripts/ ifcfg-enp0s3 ifdown-eth ifdown-post ifdown-TeamPort ifup-eth ifup-plip ifup-sit init.ipv6-global ifcfg-lo ifdown-ib ifdown-ppp ifdown-tunnel ifup-ib ifup-plusb ifup-Team network-functions ifcfg-Profile_1 ifdown-ippp ifdown-routes ifup ifup-ippp ifup-post ifup-TeamPort network-functions-ipv6 ifdown ifdown-ipv6 ifdown-sit ifup-aliases ifup-ipv6 ifup-ppp ifup-tunnel ifdown-bnep ifdown-isdn ifdown-Team ifup-bnep ifup-isdn ifup-routes ifup-wireless لاحظ الملفات التي تبدأ أسماءها بـifcfg مثل ifcfg-enp0s3. تتشابه إعدادات الواجهات، ما عدا واجهة lo. ينبغي الانتباه إلى أن تعديل قيمة متغيرّات في ملفّ ifcfg الخاصّ بواجهة سيلغي تطبيق التعليمات المشابهة الواردة في الملفّ etc/sysconfig/network/ على هذه الواجهة. أضفنا تعليقات إلى تعليمات الملفّات الواردة أدناه من أجل الشّرح؛ إلا أنه ينبغي تجنّب إضافة تعليقات إلى الملفّ الفعلي. # عنوان MAC الخاصّ بالواجهة HWADDR=08:00:27:4E:59:37 # نوع الاتصال TYPE=Ethernet # تشير هذه القيمةإلى أن عنوان آي بي الخاصّ بالواجهة قد حُدِّد يدويا. # إن كانت قيمة التعليمة هي # dhcp # فهذا يعني أن عنوان آي بي يحدّده خادوم # DHCP # ؛ وبالتالي يجب ألا يكون السطران المواليّان لهذا السطر مذكورين BOOTPROTO=static # عنوان آي بي الواجهة IPADDR=192.168.0.18 # قناع الشبكة NETMASK=255.255.255.0 # البوابة GATEWAY=192.168.0.1 # تحدّد ما إذا كان مدير الشبكة # Network manager # يتحكّم في هذه الواجهة. # القيمة هنا هيno # ؛ من أجل منع تغيير الإعدادات NM_CONTROLLED=no NAME=enp0s3 UUID=14033805-98ef-4049-bc7b-d4bea76ed2eb # تحدّد هذه التعليمة ما إذا كان على نظام التشغيل تفعيل هذه الواجهة مع إقلاع النظام # (نعم yes في حالتنا) ONBOOT=yes إعداد أسماء المضيفات يُستخدَم الأمر hostnamectl للاستعلام عن أسماء المضيفات ولضبطها على نظام Red Hat Enterprise Linux 7. نفّذ الأمر التالي لعرض الاسم الحالي للمضيف: # hostnamectl Static hostname: localhost.localdomain Icon name: computer-vm Chassis: vm Machine ID: df88bf46c92e47e8b4b16df99ab633d9 Boot ID: dc52c695417a4a6aa77dfdd633b2c3c7 Virtualization: kvm Operating System: Red Hat Enterprise Linux CPE OS Name: cpe:/o:redhat:enterprise_linux:7.2:GA:server Kernel: Linux 3.10.0-327.18.2.el7.x86_64 Architecture: x86-64 استخدم الخيار set-hostname مع الأمر لتغيير اسم المضيف إلى الاسم المُمرَّر في المعطى الموالي: # hostnamectl set-hostname academy1 يضبُط الأمر أعلاه اسمَ المضيف ليصبح academy1. أعد تشغيل خدمة hostnamed لاعتماد التعديل دون الحاجة لإعادة تشغيل الجهاز: # systemctl restart systemd-hostnamed يمكن أيضا استخدام الأداة nmcli لنفس الغرض. يعرض الأمر التالي الاسم الحالي للمضيف: # nmcli general hostname استخدم الأمر التالي لتغيير اسم المضيف بالأداة nmcli: # nmcli general hostname academy1 تشغيل خدمات الشبكة مع إقلاع النظام نريد الآن التأكد من أن خدمات الشبكة ستُشغَّل تلقائيا مع إقلاع نظام التشغيل. يتم هذا الأمر بإنشاء وصلات إلى ملفات محدّدة ضمن مقطع [install] في ملفات إعداد الخدمات (مثل usr/lib/systemd/system/firewalld.service/ بالنسبة للجدار الناري firewalld). لكننا لن نتولى عملية إنشاء الوصلات مباشرة؛ بل إن نظام التمهيد SystemD سيتولى المهمة. ننفّذ الأمر التالي لتفعيل خدمة الجدار الناري مع الإقلاع: # systemctl enable firewalld وبالنسبة لخدمة الشبكة: # systemctl enable network ترجمة - بتصرّف - لمقال RHCSA Series: Securing SSH, Setting Hostname and Enabling Network Services – Part 8 لصاحبه Gabriel Cánepa.
  4. بدأنا في المقال السابق من سلسلة دروس RHCSA شرحَ كيفية إعداد وسائط التخزين المحليّة باستخدام parted و ssm وشرحنا كيفية إنشاء تجزئات معمّاة وتركيبها Mounting أثناء إقلاع النظام. نذكّر - كما أشرنا إلى ذلك خلال الدرس السابق - بخطورة تنفيذ مهام الإدارة الحرجة على أنظمة الملفّات أثناء تركيبها. سنراجع في هذا الدرس أهمّ صيغ نظم الملفات المستخدمة في Red Hat Enterprise Linux 7 ثم نغطّي مواضيع تركيب أنظمة الملفات الشبكية (CIFS و NFS)، استخدامها وفصلها؛ إما يدويا أو تلقائيا. سنتطرّق أيضا لماهية قوائم التحكم في الوصول Access control litsts, ACL. المتطلبات تأكد قبل المواصلة مع هذا الدرس من توفّرك على خادوميْ NFS وSamba لتشارك الملفات؛ تمكنك مراجعة الدرسيْن التاليّيْن لإعدادها: إعداد تشارك الملفات على RedHat Enterprise Linux باستخدام Samba. تثبيت نظام الملفات الشبكي NFS وتركيبه على أوبونتو. سنستخدم في هذا الدرس جهازيْن؛ الأول على العنوان 192.168.2.100 ويشغّل خدمتيْ Samba و NFS (لا يهمّ نظام التشغيل)؛ أما الثاني وهو العميل فيعمل بنظام RHEL 7 على العنوان 192.168.2.200؛ وهو الذي سنطبق عليه الخطوات المشروحة هنا. أنظمة الملفات على RHEL 7 اعتمد نظام التشغيل RHEL 7 نظام الملفات XFS مبدئيا نظرا لأدائه العالي وقابليته الكبيرة للتمدّد Scalability. يدعم XFS مبدئيا معيار user_xattr (خاصيّات المستخدم الموسَّعة Extended user attributes) وقوائم التحكم في الوصول ACL؛ وهو ما يعني أنك لا تحتاج للتصريح برغبتك في استخدام هذه الخيارات حتى تكون متاحة؛ عكسَ ماهو كائن في أنظمة الملفّات ext3 وext4 (تنصح ردهات بعدم استخدام نظام ext2 للملفات على RHEL 7) التي يتوجّب فيها ذكر هذه الخاصيّات، في ملفّ fstab على سبيل المثال. خاصيّات المستخدم الموسَّعة هي تمديد لخاصيات الملف وتأخذ صيغة “خاصيّة:قيمة”. تُربَط هذه الخاصيّات بملفّ أو مجلَّد وتُستخدَم لإضافة وظائف جديدة إلى نظام الملفّات؛ ترميز Encoding الملفّ، أو نوع mime الخاصّ به على سبيل المثال. قوائم التحكم في الوصول صُمّمت قوائم التحكم في الوصول ACL لتمكين مدير النظام من التحكّم في وصول المستخدمين إلى الملفّات بطريقة أكثر تفصيلا مما تتيحه الأذون التقليدية. سنعرض في الفقرات أدناه كيف تُستعمَل قوائم التحكّم في الوصول عمليا. يوجد نوعان من قوائم التحكم في الوصول؛ قوائم التحكم في الوصول الخاصّة بالنفاذ Access ACLs التي يمكن تطبيقها سواءً على الملفّات أو المجلّدات، وتلك المبدئية Default ACLs التي لا تُطبَّق إلا على المجلّدات. إن لم تُعيَّن قوائم تحكّم في الوصول لملفّات موجودة في مجلّد فإنها تأخذ قوائم التحكّم في الوصول المبدئية المطبّقة على المجلّد الأب. يمكن لقوائم التحكم في الوصول أن تُعدّ بالنسبة لمستخدم، مجموعة مستخدمين أو لمستخدم لا ينتمي لمجموعة المستخدمين المالكة للملفّ. نستخدم الأمر setfacl مع الخيار m- لضبط قوائم التحكّم في الوصول؛ ومع الخيار x- لحذفها. ننشئ في ما يلي مجموعة مستخدمين باسم academy ثم نضيف إليها المستخدمَيْن ahmed و fatima: # groupadd academy # useradd ahmed # useradd fatima # passwd ahmed New password: Retype new password: # passwd fatima New password: Retype new password: # usermod -a -G academy ahmed # usermod -a -G academy fatima ثم نتأكد من أن المستخدمَين ينتميان إلى المجموعة academy: # id ahmed uid=1006(ahmed) gid=1009(ahmed) groups=1009(ahmed),1008(academy) # id fatima uid=1007(fatima) gid=1010(fatima) groups=1010(fatima),1008(academy) يظهر جيدا أن المستخدميْن ينتميان إلى المجموعة academy إضافة لانتمائهما لمجموعة بنفس اسم المستخدم (تُنشَأ مع إنشاء المستخدم مجموعة تحمل نفس الاسم). سننشئ الآن مجلدا باسم playground داخل المجلّد mnt/، وننشئ داخله ملفّا باسم testfile.txt؛ ثم نجعل academy هي المجموعة المالكة للملفّ ونحدّد الأذون عليه بـ770 (أذون القراءة، الكتابة والتنفيذ لكل من المالك والمجموعة المالكة، ولا أذون لبقية المستخدمين): # mkdir /mnt/playground # touch /mnt/playground/testfile.txt # chown :academy /mnt/playground/testfile.txt # chmod 770 /mnt/playground/testfile.txt ثم ننتقل إلى الحساب ahmed ثم نكتب عن طريقه الجملة التالية في الملفّ mnt/playground/testfile.txt/، ونعود إلى الحساب الجذر: # su ahmed $ echo "My name is Ahmed" > /mnt/playground/testfile.txt $ exit نكرّر نفس الشيء مع الحساب fatima ولكن بكتابة جملة جديدة في آخر الملفّ: # su fatima $ echo "My name is Fatima" >> /mnt/playground/testfile.txt $ exit ملحوظة 1: استخدمنا عامل التوجيه << مع المستخدم الثاني (fatima) حتى لا نحذف ما أضافه المستخدم الأول (ahmed). ملحوظة 2: يعود السبب في كون ahmed و fatima يستطيعان الكتابة في الملف mnt/playground/testfile.txt/ إلى انتمائهما للمجموعة academy التي جعلناها مالكة الملف وأعطيناها كلّ الأذون عليه. سننشئ مستخدما ثالثا samir: # useradd samir # passwd samir New password: Retype new password: يريد samir الكتابة في الملفّ mnt/playground/testfile.txt/؛ ستخفق العمليّة كما هو متوقع نظرا لعدم امتلاكه إذن الكتابة في الملفّ. لكن ماذا إن أردنا إتاحة إمكانيّة الكتابة على الملفّ mnt/playground/testfile.txt/ للمستخدم samir، الذي لا ينتمي إلى المجموعة academy؟ الإجابة الآنية هي إضافته للمجموعة academy؛ لكن هذا سيمنحه إذن الكتابة على جميع الملفات التي تملكها المجموعة، وهو ما لا نرغب فيه. يمكننا استخدام قوائم التحكم في الوصول لهذا الغرض. يطلب الأمر setfacl عند استخدام الخيار m- التعديل على قوائم التحكم في الوصول الخاصّة بملفّ أو إضافتها، ويُستخدَم على النحو التالي: setfacl -m <rules> <files> حيث <files> ملفّ أو مجموعة ملفّات، و<rules> قواعد تأخذ إحدى الصيغ التاليّة: u:<uid>:<perms>: تضبُط قوائم التحكم في الوصول الخاصّة بالنفاذ على الملفّ بالنسبة لمستخدم؛ حيث uid معرّف المستخدم أو اسمه وperms الأذون التي نريد إعطاءها له. g:<gid>:<perms>: تضبط قوائم التحكم في الوصول الخاصّة بالنفاذ على الملفّ بالنسبة لمجموعة مستخدمين؛ حيث gid معرّف المجموعة أو اسمها وperms الأذون التي نريد إعطاءها له. m:<perms>: تحدّد قناع الأذون الفعلية Effective rights mask؛ وهي طريقة لتقييد الأذون الممنوحة للمستخدمين أو المجموعات غير المستخدم المالك والمجموعة المالكة o:<perms>: تعيّن قوائم التحكم في الوصول الخاصّة بالنفاذ بالنسبة المستخدمين غير المنتمين للمجموعة المالكة للملفّ. نحصُل على ما نريد بتطبيق القاعدة الأولى على الملفّ mnt/playground/testfile.txt/: # setfacl -m u:samir:rwx /mnt/playground/testfile.txt يضيف الأمر أعلاه قائمة للتحكم في الوصول تعطي للمستخدم samir أذون الكتابة w، القراءة r والتنفيذ x على الملفّ mnt/playground/testfile.txt/. يمكن الآن للمستخدم samir الكتابة في الملف mnt/playground/testfile.txt/. استخدم الأمر getfacl لعرض قوائم التحكم في الوصول بالنسبة لملفّ أو مجلّد: # getfacl /mnt/playground/testfile.txt getfacl: Removing leading '/' from absolute path names # file: mnt/playground/testfile.txt # owner: root # group: academy user::rwx user:samir:rwx group::rwx mask::rwx other::--- بالنسبة لقوائم التحكم في الوصول المبدئية فيمكن ضبطها بإضافة حرف d قبل القاعدة على النحو التالي (حيث directory مسار المجلّد): # setfacl -m d:o:r <directory> ستسمح قائمة التحكم في الوصول المبدئية التي عرّفها الأمر السابق لجميع المستخدمين غير الأعضاء في المجموعة المالكة بالحصول على إذن قراءة المحتويات التي ستضاف للمجلّد مستقبلا. تطبّق هذه القائمة على كل عنصر يُضاف إلى المجلّد ما لم تحدَّد له قائمة تحكم خاصّة به. لاحظ الفرق في نتيجة تنفيذ الأمر getfacl قبل ضبط قوائم التحكم في الوصول المبدئية وبعدها: # getfacl /mnt/playground/ getfacl: Removing leading '/' from absolute path names # file: mnt/playground/ # owner: root # group: root user::rwx group::r-x other::r-x # setfacl -m d:o:r /mnt/playground # getfacl /mnt/playground/ getfacl: Removing leading '/' from absolute path names # file: mnt/playground/ # owner: root # group: root user::rwx group::r-x other::r-x default:user::rwx default:group::r-x default:other::r-- تركيب نظام الملفات الشبكي NFS يُستخدَم الأمر showmount -e لسرد مجلدات NFS المتاحة على الخادوم. يتوفّر الأمر ضمن حزمة nfs-utils، لذا يجب أولا تثبيت هذه الحزمة: # yum update && yum install nfs-utils ثم ننفّذ الأمر: # showmount -e 192.168.2.100 Export list for 192.168.2.100: /share 192.168.2.200 تشير نتيجة الأمر أعلاه إلى أن الخادوم على العنوان 192.168.2.100 يتشارك المجلّد share/ مع العنوان 192.168.2.200 (عنوان الجهاز الذي نستخدمه). يمكن استخدام أمر mount لتركيب مجلدات متشاركة عبر نظام NFS على نظام الملفّات المحلي كالتالي: # mount -t nfs -o [options] remote_host:/remote/directory /local/directory حيث options خيارات التركيب (ليست ضرورية)، remote_host عنوان الخادوم الذي توجد عليه الملفّات المتشاركة، remote/directory/ مسار الملفّ على الخادوم البعيد وlocal/directory/ مسار التركيب على نظام الملفّات المحلي. يُكتَب الأمر في حالتنا (share/ هو مسار المجلد على الخادوم، كما يظهر في نتيجة الأمر showmount السابق؛ وmnt/nfs/ هو مجلد أنشأناه على نظام الملفات المحلي للتركيب عليه): # mkdir /mnt/nfs # mount -t nfs 192.168.2.100:/share /mnt/nfs ملحوظة: إن حصلت على خطأ Job for rpc-statd.service failed فهذا يعني أن الخدمة rpcbind التي يستغلها النظام للتواصل مع نظام الملفات الشبكي غير مشغَّلة. نفذ - في هذه الحالة - الأمرين التاليين لتشغيلها وتفعيلها مع إقلاع النظام: # systemctl enable rpcbind.socket # systemctl restart rpcbind.service ثم أعد تشغيل الجهاز وأعد تنفيذ أمر التركيب السابق. يتيح الأمر mount تركيب المجلدات للعمل عليها، لكن هذا التركيب لا يدوم لما بعد إعادة تشغيل النظام؛ إن أردنا جعل التركيب دائما فيجب أن نضيف سطرا جديدا إلى ملفّ etc/fstab/ المعدّ لهذا الغرض؛ يأخذ السطر الهيئة التالية: remote_host:/remote/directory /local/directory nfs options 0 0 تمكن ملاحظة أن المتغيرات المستخدمة هي نفسها المستخدمة مع أمر mount؛ المختلف هنا هو التموضع. يكون السطر - بعد تطبيق هذه الهيئة على حالتنا - على النحو التالي: 192.168.2.100:/share /mnt/nfs nfs defaults 0 0 تركيب ملفات Samba يكثُر استخدام خادوم Samba لتشارك الملفات في البيئات المختلطة (أنظمة تشغيل مختلفة، مثل وندوز ولينكس). تتيح أداة smbclient التي تأتي ضمن الحزمة samba-client، عرض الملفات المتوفّرة للتشارك عن طريق Samba: # smbclient -L 192.168.2.100 -U samba_user Enter samba_user's password: Domain=[MYGROUP] OS=[Windows 6.1] Server=[Samba 4.2.10] Sharename Type Comment --------- ---- ------- samba_share Disk Directory for collaboration IPC$ IPC IPC Service (Samba Server Version 4.2.10) samba_user Disk Home Directories Domain=[MYGROUP] OS=[Windows 6.1] Server=[Samba 4.2.10] Server Comment --------- ------- Workgroup Master --------- ------- سيُطلب منك إدخال كلمة سر المستخدم samba_user؛ الذي هو عضو في مستخدمي Samba على الخادوم. راجع مقال إعداد تشارك الملفات على RedHat Enterprise Linux باستخدام Samba للمزيد من التفاصيل عن إعداد Samba لمشاركة الملفات. ستحتاج من أجل تركيب مجلدات متشاركة عبر خادوم Samba لتثبيت الحزمة cifs-utils على العميل (جهازك): # yum update && yum install cifs-utils ثم استخدم الأمر mount على النحو التالي: # mount -t cifs -o credentials=/path/to/credentials/file //remote_host/samba_share /local/directory يحدّد الخيار credentials ملفّا لمعلومات استثياق مستخدم يحقّ له الوصول إلى المجلدات المتشاركة على الخادوم، remote_host هو عنوان الخادوم؛ samba_share اسم المجلد المتشارَك على الخادوم كما يظهر في نتيجة الأمر smbclient وlocal/directory/ مسار مجلد التركيب المحلي. ننشئ قبل تنفيذ أمر التركيب مجلدا خاصا لهذا الغرض: # mkdir /mnt/samba ثم ننشئ ملفّ الاستيثاق smbcredentials.، وهو ملفّ مخفي، في المجلد الشخصي للمستخدم الجذر (/root/) مع تحديد الأذون بـ600 حتى لا يمكن لغير المستخدم الجذر قراءة محتواه. نضع داخل ملفّ الاستيثاق البيانات على النحو التالي: username=samba_user password=samba_user password تحدّد قيمة المعطى الأول اسمَ المستخدم، وقيمةُ المعطى الثاني كلمةَ السر. # mount -t cifs -o credentials=/root/.smbcredentials //192.168.2.100/samba_share /mnt/samba إن أردت جعل الملفّ متاحا تلقائيا فيمكنك إضافة سطر على النحو التالي إلى ملفّ etc/fstab/: //192.168.0.10/samba_share /mnt/samba cifs credentials=/root/.smbcredentials,defaults 0 0 يمكن حذف ملفّ الاستيثاق (خيار credentials) إذا كان المجلد على الخادوم متاحا للعموم. يجب الانتباه إلى أنه يجب ليُركَّب المجلّد - في حالتيْ NFS وSamba - أن يكون الخادوم حيث توجد مجلدات التشارك متاحا عبر الشبكة. لا تكتف بقراءة الدرس؛ طبّق ما قرأته أكثر من مرة بطرق الخاصّة واستخدم قسم الأسئلة إن واجهتك مشكلة (مع تحديدها). ترجمة -وبتصرّف- للمقال RHCSA Series: Using ACLs (Access Control Lists) and Mounting Samba / NFS Shares – Part 7 لصاحبه Gabriel Cánepa.
  5. يعدّ التعامل مع الملفات النصيّة من المهامّ المتكرّرة التي على مدير النّظُم تنفيذها. تشمل هذه المهمّة التّعديل على الملفّات الموجودة (ملفات إعداد غالبا) أو إنشاء ملفّات جديدة. سنقدّم في هذا الدّرس البرنامجيْن الأكثر استخداما لتحرير الملفات النصيّة على RHEL (وتوزيعات لينكس عموما)؛ وهما Nano و Vim. يشتهر Nano بسهولة استخدامه، خصوصا بالنسبة للمبتدئين؛ فيما يتميّز Vim بإضافاته الفعّالة التي تجعل منه أكثر من مجرّد محرّر نصوص. لن ندخل في شرح المحرّر الذي يجب عليك اختيّاره؛ جرّب ثم اختر ما يناسبك. استخدام Nano لتحرير الملفات النصية يُستخدَم أمر nano لبدء تشغيل محرّر النصوص Nano. يمكن فتح ملفّ بتمرير مساره إلى الأمر؛ سيظهر محتوى الملفّ في هذا الحالة داخل المحرّر. إن لم يكن الملفّ موجودا فسيُنشئ المحرّر ملفا فارغا بنفس الاسم ويفتحه إلا أنه لن يُخزَّن إلا إذا طلبت ذلك من المحرّر (سنرى كيف في ما بعد). إن استُخدِم الأمر دون معطيات فسيظهر المحرّر بمحتوى فارغ. يظهر في أعلى المحرّر إلى اليسار رقم الإصدار وفي الوسط اسم الملفّ المفتوح أو صوان Buffer جديد (تخزين مؤقّت) إن نُفِّذ الأمر دون تمرير معطى. ثم تأتي منطقة تحرير النّص (بيضاء في الصّورة) وفي الأسفل أدوات للتحكّم. تظهر أدوات التحكّم على هيئة حرف تسبقه علامة ^ التي تشير إلى زرّ Ctrl في لوحة المفاتيح؛ أي أنه يجب الضّغط على زرّ Ctrl والحرف المشار إليه من أجل استعمال أداة التحكّم. أهم أدوات التحكم هي التالية: Ctrl+G: تظهر صفحة المساعدة. Ctrl+X: تخرُج من المحرّر. Ctrl+O: تخزّن محتوى الملفّ. Ctrl+J: تسويّة محاذاة النّص. Ctrl+R: إدراج محتوى ملفّ بذكر مساره الكامل (المُطلَق) في الملفّ الحالي. Ctrl+W: البحث داخل الملفّ. Ctrl + K: يقصّ السطر الحالي. Ctrl + U: يُلصق المحتوى المقصوص. Ctrl + C: يُظهر وضعيّة المؤشر (السطر والعمود). إن طلبت من المحرّر عملية مثل الحفظ وأردت إلغاءها يمكن أيضا استخدام هذا الاختصار. يُستخدم الاختصاران Ctrl+F و Ctrl+B على التوالي لتقديم المؤشّر أو إرجاعه بحرف. يُستخدم الاختصاران Ctrl+P و Ctrl+N على التوالي للانتقال إلى الأعلى أو الأسفل؛ سطرا في كل مرة. يُستخدم الاختصاران Ctrl+space وAlt+space على التوالي لتقديم المؤشّر أو إرجاعه بكلمة. Ctrl + _: الانتقال إلى سطر وعمود تحدّدهما بالصّيغة X,Y حيث X رقم السّطر وY رقم العمود. استخدام Vim لتحرير الملفات النصية محرّر Vim هو نسخة محسَّنة من محرّر Vi؛ وهو محرّر نصوص مشهور الأنظمة الشبيهة بيونكس. يتميّز محرّر Vim بعمله حسب أوضاع Modes مختلفة: وضع الأوامر: يُستخدَم لتصفّح الملف وتنفيذ أوامر عليه. تتكوّن الأوامر من حرف أو أكثر وهي حسّاسة لحالة الأحرف Case-sensitive. إن أردت إعادة تنفيذ أحد الأوامر عدّة مرات فيمكنك كتابة عدد المرات قبله (توجد بضعة استثناءات لهذه القاعدة). مثلا؛ ينسخ الأمرُ yy (أو Y) كامل السّطر الحالي وعند كتابة العدد 4 أمامه كالتالي 4yy (أو 4Y) فإنه ينسخ السّطر الحالي إضافة للأسطر الثلاثة الموالية (4 أسطر في المجموع). وضع ex: يمكن في هذا الوضع تطبيق أوامر محرّر ex (محرّر نصوص يعمل على أنظمة يونكس) لتنفيذ عمليّات مثل حفظ الملفّ الحالي أو تنفيذ برنامج أو أمر خارجي. اضغط على زر Exc ثم أدخل نقطتين عموديّتيْن : إن أردت الوصول إلى وضع ex من وضع الأوامر؛ ثم اكتب بعدهما أمر ex الذي تودّ تنفيذه. وضع الإدخال : يُستخدم زر i للانتقال من وضع الأوامر إلى وضع الإدخال (كتابة نصّ). ينتج عن الضّغط على أزرار في لوحة المفاتيح أثناء وضع الإدخال ظهور النّص في المحرّر. تمكن دائما العودة إلى وضع الأوامر، مهما كان الوضع الذي توجد فيه، بالضّغط على زرّ Esc. نشغّل محرّر النصوص Vim بتنفيذ الأمر vim في سطر الأوامر. يكون المحرّر عند بدء تشغيله على وضع الأوامر. ننفّذ الأمر help: للحصول على المساعدة (لا تنس الضغط على زر Enter بعد كتابة الأمر ليُنفَّذ). يبدو المحرّر كالتالي بعد تنفيذ الأمر السابق. تُقدّم صفحة المساعدة في الأعلى فهرسا بمحتوياتها على هيئة مقاطع مخصّصة حسب المواضيع. انتقل إلى الموضوع الذي ترغب في عرض معلومات عنه باستخدام الأسهم على لوحة المفاتيح ثم عند الوصول إلى اسم الموضوع في الفهرس اضغط على الزّريْن [+Ctrl لعرض محتويات المقطع المخصَّص للموضوع. يظهر في أسفل الشاشة اسم الملفّ الحالي. إن أردت إغلاق الملف دون حفظ التعديلات نفّذ الأمر التالي: :q! يُستخدَم نفس الأمر أيضا للخروج من صفحة المساعدة. استخدم أحد الأوامر التاليّة لحفظ التعديلات على ملفّ: :wq! :x! ZZ لاحظ ألا وجود للنقطتيْن في الأمر الأخير (ZZ). استخدم الأمر Ndd أثناء وضع الأوامر لقصّ عدد N من الأسطر، ابتداءً من السّطر الحالي. استخدم الأمر Myy أثناء وضع الأوامر لنسخ عدد M من الأسطر، ابتداءً من السّطر الحالي. استخدم الأمر p للصق الأسطُر التي نسختها أو قصصتها سابقا. يُستخدَم الأمر r: إن أردت إدراج محتوى ملف في الملفّ الحالي. إن أردنا مثلا إدراج محتوى الملف etc/fstab/ في الملف الحالي ننفّذ الأمر كالتالي: :r /etc/fstab يمكن أيضا إدراج نتيجة تنفيذ أمر من أوامر النّظام كالتالي: :r! command مثلا؛ لإضافة التاريخ والوقت في مكان المؤشّر نكتب: :r! date تابع درس أساسيّات Vim للمزيد حول الموضوع. استخدام أمر grep والتعابير النمطية Regular expressions يعد البحث في الملفات النصيّة من الأمور الاعتياديّة لأي مدير أنظمة. يكثُر استخدام أمر grep مع التعابير النمطيّة لهذا الغرض. التعابير النمطيّة (تُعرَف بـ regexأو regexp) هي طريقة للتعرّف على سلسلة محارف تتبع نمطا (صيغة أو هيئة) تُحدَّد بعبارة. سنعرض في ما يلي لأمثلة قاعديّة في التعامل مع التعابير النمطيّة؛ راجع مقال مقدمة في التعابير النمطية لتفاصيل أكثر. نفرض مثلا أنك تريد التأكد من دعم معالجك للحوسبة الافتراضيّة Virtualization. يعني وجود سلسلة المحارف svmأو vmx في الملفّ proc/cpuinfo/ أن المعالج يدعم التقنيّة المذكورة. نستخدم أمر grep كما يلي للبحث في الملف: $ grep -i 'svm\|vmx' /proc/cpuinfo تُستخدم العصى العموديّة | (تشير إلى العامل أو Or) للبحث عن توجد إحدى العبارتين svm أو vmx. يجب تخليص Escape العامل بـ\ وإلا فإن أمر grep سيتعامل معه كمحرف عادي لا دلالة له وليس بوصفه عاملا. يطلُب الخيار i- من الأمر ألا يعتدّ بحالة الأحرف (كبيرة أو صغيرة). يمكن باستخدام الخيّار E- تجاوز الحاجة لتخليص العوامل؛ ما يجعل الأمر يفسّرها مباشرة؛ يُكتَب الأمر السابق مثلا: $ grep -Ei 'svm|vmx' /proc/cpuinfo يمكن أن يكون التعبير النمطي عبارة عن مجال من خيارات توضَع بين معكوفين مربعين []. يُقرأ التعبير النمطي c[aeiou]t مثلا: حرف c، يتبعه واحد من الأحرف التالية aeiou ثم حرف t. تُطابق الكلمات التاليّة هذا التعبير النمطي: cat، cet، cot، cit وcut. يمكن أيضا وضع مجال من الأحرف أو الأرقام بين المعكوفين؛ على سبيل المثال [a-z] و[0-9] يوافقان على التوالي أي حرف أبجدية لاتيني صغير Lowercase والأرقام من 0 إلى 9. إن أردنا الإشارة إلى أن الحرف يمكن أن يتكرّر نضع عدد مرات التكرار بين معكوفين {X} بعد العبارة. يستخرج الأمر التالي معرّف جهاز التخزين من الملفّ etc/fstab/: $ grep -Ei '[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}' -o /etc/fstab نأخذ الجزء الأول من العبارة: [0-9a-f]{8}- بمكن فهم الجزء كالتالي: لدينا ثماني خانات تتبعها خانة تاسعة توجد بها عارضة -. بالنسبة للخانات الثمانيّة فقيمة كل واحدة يمكن أن تكون إما رقما من بين الأرقام 0 إلى9 أو حرفا من بين الأحرف a إلى f. ينطبق نفس المبدأ على بقيّة أجزاء العبارة. يشير العدد بين معكوفين بعد الأقواس إلى أن عدد مرات تكرار الجزء الموجود بينها. في المحصّلة: يمكن تقسيم العبارة إلى ثلاثة أجزاء: [0-9a-f]{8}- ([0-9a-f]{4}-){3} [0-9a-f]{12} يتشابه الجزء الأول والأخير (الثالث) مع فرق ألا وجود لعارضة في الجزء الأخير وكونه مكونا من 12 محرفا؛ بدلا من 8 قبل العارضة في الجزء الأول. أما الجزء الثاني فهو مكوّن من ثلاثة أجزاء؛ وتمكن إعادة كتابته كالتالي: [0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}- يطلُب الخيار o- من الأمر طباعة جزء الملف المطابق للعبارة دون غيره. الأنماط المعرَّفة مسبقا توجد تعابير نمطيّة معرّفة مسبقا؛ وفي ما يلي أهمها: النمط المعنى [[:alnum:]] جميع الحروف اللاتينية (الصغيرة والكبيرة) إضافة للأرقام من 0 إلى 9 [[:alpha:]] أي حرف لاتيني، صغيرا كان أم كبيرا [[:blank:]] مسافة أو علامة الجدولة Tabulation [[:digit:]] أي رقم من 0 إلى 9 [[:lower:]] أي حرف لاتيني صغير [[:space:]] مساحة [[:punct:]] علامات التنقيط [[:upper:]] أي حرف لاتيني كبير [:word:] جميع الأحرف اللاتينية، الأرقام من 0 إلى 9 أو عارضة سفليّة _ Underscore يطبع الأمر التالي جميع أسطر الملفّ etc/passwd/التي تحوي سلسلة من أربعة أرقام: $ grep -Ei [[:digit:]]{4} /etc/passwd ترجمة -وبتصرّف- للمقال RHCSA Series: Editing Text Files with Nano and Vim / Analyzing text with grep and regexps – Part 4 لصاحبه Gabriel Cánepa.
  6. صُمّمت شهادة Red Hat Certified System Administrator, RHCSA لاختبار المترشّح في المعارف والمهارات الضّروريّة المشتركة بين مختلف مجالات إدارة أنظمة لينكس. تعدّ شهادة RHCSA مدخل مسار الشهادات الخاصّ بـ Red Hat؛ وتليها شهادة Red Hat Certified Engineer التي تعدّ إحدى شهادات لينكس الأكثر قبولا. لماذا التقدم لشهادة RHCSA تتطلّب شهادة RHCSA الكثير من الاستعداد قبل التقدّم للامتحان؛ كما أنها مكلّفة. يجب أن تكون إجابة السّؤال “لماذا أريد هذه الشهادة؟” حاضرة في ذهنك قبل البدء في طريق الحصول عليها. في ما يلي أمور ينبغي الانتباه إليها قبل اتّخاذ القرار النهائي: شهادة RHCSA ضروريّة بالنسبة لبعض المؤسسات التي تعتمد بكثافة على حلول Red Hat التقنيّة. ستمثّل الشهادة إضافة محسوسة لسيرتك الذاتيّة مما قد يؤدّي إلى فرص وظيفية أكثر. ولكن يجب الانتباه أيضا إلى أن الحصول على الشهادة ليس ضمانا بالحصول على الوظيفة. يجب الاستمرار في العمل والتطوير المستمر لقدراتك. توفّر Red Hat موادّ دراسية جيدة للتحضير؛ ستحصُل على معرفة جيدة حول توزيعة Red Hat Enterprise Linux بمتابعتك لهذه الموارد الدراسية. إن كنت مدير نظم لينكس متمرّسا فسيحسّن التحضير للشهادة من مهاراتك ويزيد الحصول عليها من ثقتك بقدراتك. ينبغي الانتباه أيضا إلى أن الشهادة ليست بديلا عن الخبرة التي تكتسبها من العمل اليومي. قد لا تتجاوز الامتحان من أول محاولة وتضطّر بالتالي لدفع ثمن المحاولة مرة أخرى. يجب أن تكون على وعي بهذه المخاطرة؛ وأن تقبلها. تكلفة شهادة RHCSA وطريقة إجراء الامتحان تصلُح شهادة RHCSA لمدة ثلاث سنوات من تاريخ الحصول عليها. سير الامتحان يدوم امتحان الشهادة ساعتين ونصف، وهو امتحان تطبيقي لا مكان فيه للنظري؛ بمعنى أن لديك مهامّ ويجب تنفيذها. يبلغ عدد الأسئلة في العادة عشرين سؤالا مجموع درجاتها 300. الحد الأدنى للتجاوز هو 210 درجات. تُطرَح على كل مترشّح أسئلة فريدة (بمعنى أن الأسئلة تختلف من مترشّح لآخر) وتصله نتائج الامتحان بالبريد الإلكتروني في غضون سبعة أيام من إجرائه. تكلفة الشهادة يمكن تقسيم التكلفة الكليّة للشهادة إلى قسمين: تكلفة إجراء الاختبار وتكلفة التحضير له (اختياري). يكلّف التقدّم للاختبار حوالي 400$ حسب المنطقة الجغرافية. يمكن احتساب ما بين 200 إلى 300 دولار أمريكي في المواد الدراسية التحضيرية. نصائح قبل التقدم للشهادة الخبرة في إدارة الأنظمة مطلوبة لنيل الشهادة؛ إلا أنها ليست شرطًا لازما. يستطيع من ليست له خبرة كبيرة بإدارة أنظمة لينكس التقدّم للاختبار؛ إلا أن التحضير المكثّف جدا مطلوب في هذه الحالة. ستحتاج لمعرفة وحدات الاختبار والتركيز جيدا عليها لاستيعابها. “الممارسة ثم الممارسة” هي الوسيلة الوحيدة لفهم متطلبات الشهادة؛ طبّق كل خطوة من كل وحدة مرات ومرات. ربما تحتاج لثلاث أو أربع ساعات يوميا من التحضير لأسابيع متتالية وبوجود مواد تحضير جيدة حتى تنال الشهادة من أول محاولة. تفصّل صفحة الامتحان EX200 على موقع Red Hat الوحدات والمواضيع التي يُنتظَر من المترشح إتقانها. سلسلة دروس RHCSA تفترض هذه السلسة - على الأقل - معرفةً يسيرة بأوامر لينكس القاعديّة مثل: تبديل مجلّد العمل: أمر cd. سرد محتويات مجلّد: أمر ls. نسخ الملفات: أمر cp. نقل الملفات أو إعادة تسميتها: أمر mv. إنشاء ملفات فارغة أو تحديث الختم الزمني لملفات موجودة: أمر touch. حذف الملفات: أمر rm. إنشاء مجلّد: أمر mkdir. سنمرّ خلال دروس هذه السلسلة على بعض الأوامر أعلاه مع أمثلة مشروحة؛ كما يمكنك استخدام طرق مذكورة في السلسلة للحصول على معلومات أكثر عنها. يمكن الحصول على نسخة من توزيعة RHEL 7 من موقع مطوري Red Hat (هذه النسخة موجّهة للاستخدام الشّخصي فقط وينبغي ألا تُستَخدم في بيئة إنتاج). راجع سلسلة مقالات مدخل إلى لينكس إن كانت المواضيع أعلاه غريبة عليك. تتكوّن هذه السلسلة من 15 درسا تغطّي المواضيع التالية: مراجعة الأوامر الأساسيّة وكيفية الاستفادة من التوثيق Documentation. إدارة الملفات والمجلّدات. إدارة المستخدمين والمجموعات. التعامل مع الملفات النصّيّة: تحريرها بـ Nano و Vim؛ تحليلها بـ grep والتعابير النمطية. إدارة العمليات Process management. إعداد وسائط التخزين وتعميّتها. استخدام لوائح التحكم في الوصول Access control lists, ACL وتركيب المجلدات على الشبكة. تأمين SSH، ضبط اسم المضيِّف Hostname وتفعيل خدمات الشبكة. تثبيت خادوم ويب ونقل الملفات، إعداده وتأمينه. إدارة الحزم بـ Yum، جدولة المهام بـ Cron ومراقبة سجلات Logs النظام. أساسيات الجدار الناري Firewall ومراقبة الشّبكة. أتممة تثبيت RHEL 7 باستخدام Kickstart. أساسيات التحكّم في الوصول في SELinux. إعداد الاستيثاق Authentication بميثاق LDAP على RHEL 7. أساسيّات الحوسبة الافتراضيّة Virtualization وإدارة الضّيوف Guest بـKVM. تنبيه: اعتُمِد أثناء التخطيط للسلسلة على التفاصيل الواردة في صفحة الامتحان EX200 المذكورة أعلاه إذ أن Red Hat تشترط على المترشحين عدم نشر الأسئلة التي تُطرح عليهم في الامتحان. يجب التأكيد أن المصدر الرسمي الوحيد لأسئلة الامتحان هو Red Hat التي يمكن أن تغيّر مواضيعه إن رأت ذلك مناسبا.
  7. نتطرّق في هذا المقال من سلسلة الدروس عن شهادة RHCSA من RedHat لكيفيّة إعداد نظام التخزين وضبطه على RedHat Enterprise Linux 7 باستخدام الأداة Parted وهي الأداة المبدئيّة للتعامل مع وحدات التخزين في RHEL؛ سنقدّم أيضا مدير نظام التخزين System storage manager, SSM الذي يسهّل المهمّة كثيرا. إنشاء التجزئات Partitions والتعديل عليها في RedHat Enterprise Linux تُستَخدم الأداة parted مبدئيا للتعامل مع التجزئات في RHEL؛ ويمكن باستخدامها: عرض جدول التجزئات الحاليّة، التعديل على التجزئات الحاليّة بزيادة حجمها أو نقصه، إنشاء تجزئات جديدة على المساحة الفارغة من القرص أو على أجهزة تخزين جديدة. ملحوظة: نستخدم آلة تخيّلية باستخدام VirtualBox كما هو مشروح في درس تثبيت Red Hat Enterprise Linux باستخدام VirtualBox. أضفنا إليها قرصا تخيّليا جديدا لنختبر عليه أوامر parted. تمكن إضافة القرص التخيلي باختيّار إعدادات الآلة Settings، ثم تحديد التخزين Storage من نافذة الإعدادات ثم إنشاء قرص تخيليّ بالنقر عل أيقونة الإضافة التي تظهر بجانب خيّار Controller: SATA عند الحوم حوله بالمؤشر. يُستحسَن قبل البدء في إنشاء تجزئات جديدة أو التعديل على التجزئات الموجودة التأكّد من عدم استخدام أيّ من التجزئات على القرص. إن كانت لديك مساحة إبدال Swap على القرص فستحتاج لتعطيلها. الطريقة الأسهل لتهيئة هذه المتطلّبات هو إقلاع النظام على وضع الإنقاذ Rescue mode باستخدام وسيط التثبيت (قرص ضوئي أو مفتاح USB): اذهب إلى قائمة الأجهزة الطرفيّة Devices في VirtualBox ثم اختر الأقراص الضوئيّة Optical devices وحدّد مسار ملفّ ISO الخاصّ بتثبيت النظام. بعد إعادة تشغيل النظام والإقلاع على وسيط التثبيت تظهر قائمة الاختيّار التاليّة؛ حدّد خيار Troubleshooting (استكشاف الأخطاء). تظهر قائمة Troubleshooting؛ اختر منها Rescue a Red Hat Enterprise Linux system (أصلح نظاما يستخدم RHEL) انتظر قليلا حتى تظهر لك إمكانيّة تحديد الخيّار. توجد أربعة خيارات اختر منها Skip to shell (تجاوز إلى الصّدفة) بكتابة الرقم الظاهر أمامها (3). تحصُل باتّباع الخطوات السابقة على صدفة يمكنك تنفيذ أوامر Parted منها. إنشاء تجزئة جديدة نستخدم الأمر parted على النحو التالي لإنشاء تجزئة جديدة على القرص sdb (أي القرص الثاني، يُشار للقرص الأوّل بـ sda): # parted /dev/sdb ملحوظة 1: يحتوي المجلّد dev/ على ملفّات خاصّة للتعامل مع العتاد؛ يستخدم النظام الملفّ dev/sda/ للتعامل مع القرص الأوّل في الجهاز، dev/sdb/ مع الثاني، dev/sdc/ مع الثالث، وهكذا. يُشار إلى التجزئات الموجودة على قرص بأرقام: dev/sda1/ التجزئة الأولى من القرص الأول، dev/sda2/ التجزئة الثانية من القرص الأول، dev/sdb1/ التجزئة الأولى من القرص الثاني، وهكذا. ملحوظة 2: يحوي القرص الأول dev/sda/ ملفّات نظام التشغيل المثبّت على الجهاز. تطبيق أوامر بطريقة خاطئة على هذا القرص قد يجعل النظام غير قابل للاستخدام. سيظهر محثّ جديد لإدخال الأوامر الخاصّة بالأداة parted: نفّذ الأمر print في سطر أوامر parted للحصول على قائمة بالتجزئات الحاليّة على القرص: لا توجد حتى الآن أية تجزئة على القرص الذي تبلغ مساحته 8,5GB. سننشئ على هذا القرص تجزئة أوّليّة بمساحة تبلغ 7GB. نهيّئ Format التجزئة بنظام الملفّات xfs الذي يُستخدَم مبدئيا على RHEL؛ إلا أن بإمكانك الاختيار من بين نظم ملفّات أخرى كثيرة. سنبدأ بإنشاء التجزئة باستخدام الأمر mkpart ثم نهيّئها باستخدام الأمر mkfs.fstype؛ إذ أن دعم الأمر mkpart لأنظمة الملفات الحديثة ليس جيّدا. نضبُط في ما يلي لصيقة Label للقرص ثم ننشئ تجزئة أوليّة على القرص dev/sdb/ تبدأ من أول القرص (%0) وتنتهي عند 7GB (أي 7000MB)؛ ثم نستخدم الأمر print في الأداة Parted لعرض جدول تجزئات القرص. أثناء عمليّة الإنشاء يُطلّب منّا نوعيّة نظام الملفّات الذي نريد، نترك الخيار المبدئي. ملحوظة: لصيقة القرص Disk lable (تُسمّى أيضا جدول التجزئة Partition table أو خريطة التجزئة Partition map) هو سجّل يستخدمه النظام للحصول على معلومات عن التجزئة. يدعم الأمر mklable صيغ تجزئة محدّدة من بينها bsd، gpt، msdos وmac. نستخدم الآن الأمر mkfs.xfs لتهيئة التجزئة التي أنشأناها. نخرج من سطر الأوامر الخاص بالأداة Parted بتنفيذ الأمر quit ثم ننفّذ الأمر على النحو التالي: # mkfs.xfs /dev/sdb1 # parted /dev/sdb print لاحظ إرفاق التجزئة أثناء إنشائها ببيانات وصفيّة Meta data خاصّة بنظام الملفّات xfs. تغيير مساحة تجزئة تتيح الأداة Parted أمر resize لتغيير مساحة التجزئة، إلا أن هذا الأمر لا ينطبق سوى على نظم الملفّات القديمة مثل ext2، fat32 وfat16؛ أي أن الطريقة الوحيدة لتغيير مساحة التجزئة هي بحذفها ثم إنشائها من جديد وهو ما يعني حذف محتويات التجزئة وضياعها. تستخدم توزيعة RHEL نمط تجزئة LVM لتلافي هذه الصعوبة في إدارة التجزئات (سنرى كيف يعمل بعد قليل). نعرض في ما يلي لائحة بالتجزئات على القرص sdb ثم نحذف التجزئة الأولى: # parted /dev/sdb print # parted /dev/sdb rm 1 من المستحسَن ألا تستخدم هذا الأمر على نظام إنتاج حقيقي. مدير التجزئات المنطقية Logical volume manager رأينا أنّ تعديل مساحة التجزئات الموجودة على القرص بعد إنشائها بالطريقة التقليديّة المشروحة أعلاه صعب وربما يؤدي لفقدان بيانات؛ لهذا يجب النّظر إلى إمكانيّة الاستعانة بمدير التجزئات المنطقيّة LVM. يعمل مدير التجزئات على تجميع وسائط تخزين عدّة لتبدو كأنها وسيط تخزين واحد ثم إنشاء تجزئات انطلاقا من هذه الوحدة المجمَّعة. تكمُن الميزة التي تقدّمها هذه الطريقة في سهولة تمديد أو تقليص التجزئات المنطقيّة دون مصاعب تُذكر. يبيّن المخطَّط التالي البنية الأساسيّة لمدير التجزئات المنطقيّة. سنشرح في ما يلي أساسيّات استخدام مدير التجزئات المنطقيّة LVM. نهيّئ لهذا الغرض قرصين ملموسين تخيّليّيْن جديديْن بنفس طريقة إنشاء القرص التخيّلي في الفقرات السابقة. سنستخدم القرصيْن لإنشاء مجموعة تجزئة Volume group ننشئ عليها التجزئات المنطقيّة. إنشاء التجزئات الملموسة Physical Volumes نبدأ بإنشاء تجزئتيْن جديدتين ملموستيْن تأخذ كلّ واحدة منهما كامل القرص الذي توجد عليه. بالنسبة للقرص التخيلي الثالث (الأول هو قرص النظام، الثاني هو القرص الذي استخدمناه في الجزء الأول من المقال): # parted /dev/sdc (parted) mklable msdos (parted) mkpart Partition type? primary/secondary? p File system type? [ext2]? Start? 0% End? 100% (parted) print Model: ATA VBOX HARDDISK (scsi) Disk /dev/sdb: 8590MB sector size (logical/physical): 512B/512B Partition Table: msdos Disk flags: Number Start End Size Type File system Flags 1 1049kb 8590MB 8589MB primary quit نعيد نفس الشيء بالنسبة للرابع: # parted /dev/sdd ننفذ بالعودة إلى سطر الأوامر بعد تهيئة التجزئتين الأمرين التاليّين: # pvcreate /dev/sdc1 # pvcreate /dev/sdd1 تظهر في كلّ مرة رسالة بأن إنشاء التجزئة الملموسة تم بطريقة صحيحة. الأمر pvcreate جزء من مدير التجزئات المنطقيّة ومهمّته إنشاء التجزئات الملموسة التي سنجمّعها كما سنرى من أجل إنشاء تجزئات منطقية في ما بعد. إن أردت إظهار معلومات عن التجزئات الملموسة التي أنشأناها بالأمر pvcreate فيمكنك استخدام الأمر pvdisplay: # pvdisplay /dev/sdc1 # pvdisplay /dev/sdd1 يُظهر الأمر اسمَ التجزئة والمجموعة التي تنتمي إليها مع بيانات أخرى. لا توجد لحدّ الساعة مجموعة تجزئات؛ لذا سننشئ واحدة. إنشاء مجموعة تجزئات Volume group يُستخدم الأمر vgcreate لإنشاء مجموعة تجزئات. ننشئ في الأمر التالي مجموعة تجزئات باسم hsoub_vg تتكون من تجزئتين ملمومستين هما dev/sdc/1 و dev/sdd1/: # vgcreate hsoub_vg /dev/sd{c,d}1 تظهر رسالة تفيد بإنشاء مجموعة التجزئات. ستلاحظ الآن عند تنفيذ الأمر pvdisplay /dev/sdv1 اسم المجموعة ضمن معلومات التجزئة. إن أردت رؤية معلومات عن مجموعة التجزئات فيمكنك تنفيذ الأمر vgdisplay: # vgdisplay hsoub_vg إنشاء تجزئات منطقية جهّزنا مجموعة التجزئات؛ يمكننا الآن استخدامها لإنشاء تجزئات منطقية باستخدام الأمر lvcreate. يمكن أن نحدّد مساحة التجزئة إما بالوحدة (GB مثلا) أو بمداها (100 بالمئة)، المعطى الأخير للأمر هو اسم مجموعة التجزئات التي نريد تطبيق الأمر عليها: # lvcreate -L 3G -n vol01_docs hsoub_vg # lvcreate -L 1G -n vol02_logs hsoub_vg # lvcreate -l 100%FREE -n vol03_homes hsoub_vg يحدّد الخيار L- مساحة التجزئة بالوحدة، l- النسبة من المجموعة و n-اسم التجزئة المنطقيّة. في الأمرين الأول والثاني أعلاه أنشأنا تجزئتين منطقيتين مساحتاهما على التوالي 3G و1G. في الأمر الثالث طلبنا أن تأخذ التجزئة كامل المساحة المتبقيّة على مجموعة التجزئة . يمكن باستخدام الأمر lvdisplay إظهار التجزئات المنطقية الموجودة على مجموعة تجزئات كالتالي: # lvdisplay hsoub_vg تهيئة التجزئات المنطقية وتركيبها يمكنك بعد إنشاء التجزئات المنطقيّة تهيئتها بنظام الملفات الذي تريد؛ نستخدم في المثال التالي نظام الملفّات ext4 (من المهمّ اختيار نظام الملفات المناسب؛ xfs مثلا لا يدعم تغيير مساحة التجزئة): # mkfs.ext4 /dev/hsoub_vg/vol01_docs # mkfs.ext4 /dev/hsoub_vg/vol02_logs # mkfs.ext4 /dev/hsoub_vg/vol03_homes لاحظ مسار التجزئات المنطقيّة. توجد مجموعة التجزئات على المسار dev/hsoub_vg/ حيث hsoub_vg هو مجموعة التجزئة، وبداخل المجلّد توجد التجزئات المنطقيّة التي أنشأناها سابقا. يأتي بعد التهيئة تركيبُ التجزئات حتى يمكن استخدامها: # mkdir /mnt/docs /mnt/logs /mnt/homes # mount /dev/hsoub_vg/vol01_docs /mnt/docs # mount /dev/hsoub_vg/vol02_logs /mnt/logs # mount /dev/hsoub_vg/vol03_homes /mnt/homes ملحوظة: يعني التركيب Mounting إتاحة إمكانية الوصول لنظام الملفات انطلاقا من نقطة معينة في شجرة ملفات لينكس. بدون هذه الخطوة لا يمكن استعمال التجزئة. يمكن الآن تخزين الملفّات في المجلّد mnt/docs/ وسيضعها النظام على التجزئة المنطقيّة vol01_docs. ينطبق نفس المبدأ على بقيّة التجزئات والمسارات. حذف التجزئات المنطقية، مجموعة التجزئات والتجزئات الملموسة نستخدم الأوامر vgremove، lvremove وpvremove لحذف تجزئة منطقية، مجموعة تجزئات وتجزئات ملموسة على التوالي. سنحتاج أولا لفصلها (نزع تركيبها) بالأمر umount: # umount /mnt/docs /mnt/logs /mnt/homes # lvremove /dev/hsoub_vg/vol01_docs /dev/hsoub_vg/vol02_logs /dev/hsoub_vg/vol03_homes ستظهر رسالة تطلُب منك تأكيد رغبتك في حذف التجزئات؛ اضغط زر y للتأكيد. ثم نحذف مجموعة التجزئات ومن بعدها التجزئات الملموسة: # vgremove /dev/hsoub_vg # pvremove /dev/sd{b,c}1 سنخرج الآن من وضع الإنقاذ بعد أن رأينا آلية عمل التجزئات المنطقية. استخدم الأمر exit للخروج من وضع الإنقاذ ثم انزع القرص الضوئي التخيلي حتى يستطيع النظام الإقلاع من القرص التخيليّ (يمكن أيضا إطفاء الآلة التخيليّة مباشرة من VirtualBox ونزع القرص الضوئي ثم تشغيلها من جديد). استخدام مدير وسائط التخزين SSM لإنشاء التجزئات المنطقية وإدارتها مدير وسائط التخزين SSM (اختصار لـ System storage manager) هو أداة تعمل واجهةً بين لإدارة وسائط التخزين بطريقة أسهل. رأينا في الفقرات السابقة أنّه يلزم تنفيذ خمسة أوامر لإنشاء تجزئة منطقيّة والبدء في استخدامها (mkfs ، lvcreate ، vgcreate ،pvcreate و mount). يمكن باستخدام ssm اختصار هذه الخطوات في خطوة واحدة. نبدأ بتحديث حزم النظام وتثبيت مدير وسائط التخزين: $ su - Password: # yum update && yum install system-storage-manager ثم نستخدم الأمر ssm لإنشاء تجزئات بنفس الخاصيّات السابقة: # ssm create -s 3G -n vol01_docs -p hsoub_vg --fstype ext4 /mnt/docs /dev/sd{c,d}1 # ssm create -s 1G -n vol02_logs -p hsoub_vg --fstype ext4 /mnt/logs # ssm create -n vol03_homes -p hsoub_vg --fstype ext4 /mnt/homes ملحوظة: تأكد من وجود المجلدات على المسارات mnt/logs ، /mnt/docs/ و mnt/homes/ حتى يمكن تركيب التجزئات عليها. يمكن من الأوامر استنتاجُ عمل الخيارات: المساحة: s-. اسم التجزئة المنطقية: n-. مجموعة التجزئات: p-. نقطة التركيب: المسارات mnt/logs، /mnt/docs/ وmnt/homes/. التجزئات الملموسة: dev/sd{c,d}1/. لم نحدّد في الأمر الأخير مساحة التجزئة؛ في هذه الحالة تأخذ التجزئة كامل المساحة المتبقيّة على مجموعة التجزئات. حدّدنا في الأمر الأول التجزئات الملموسة التي ستتكوّن منها مجموعة التجزئات؛ بينما لم نفعل ذلك في الأمريْن الآخريْن إذ لم نعد نحتاجه بعد إنجاز المهمة في الأمر الأول. نفَّذ ssm في الأوامر أعلاه المهامّ التالية: إعداد التجزئات الملموسة. إنشاء مجموعة تجزئات. إنشاء تجزئات منطقيّة. تهيئة التجزئات المنطقيّة. تركيب التجزئات المنطقيّة. يمكننا الآن عرض معلومات عن التجزئات الملموسة، مجموعات التجزئات والتجزئات المنطقيّة على التوالي بالأوامر: # ssm list dev # ssm list pool # ssm list vol من أهم الميزات التي توفّرها التجزئات المنطقيّة إمكانيّة التعديل على مساحتها (تصغيرها أو تكبيرها) مباشرة. نفرض مثلا أن التجزئة vol02_logs توشك على الامتلاء بينما توجد مساحة فارغة كبيرة على التجزئة vol03_homes. لحد الساعة لا توجد مساحة فارغة على مجموعة التجزئات hsoub_vg لأننا استهلكناها كلَّها بإنشاء تجزئات منطقية عليها؛ يمكن التأكد من ذلك بتنفيذ الأمر ssm list pool: ما سنفعله هو تقليص مساحة التجزئة vol03_homes ثم منح المساحة المقتطعة منها للتجزئة الممتلئة vol02_logs . يعدّل الأمر التالي على التجزئات المنطقيّة بحيث تصبح مساحة vol03_homes تساوي 4GB بدلا من 11GB: # ssm resize -s 4G /dev/hsoub_vg/vol03_homes إن أعدنا تنفيذ الأمر ssm list pool الآن فسنرى وجود مساحة غير مستقلة على المجموعة hsoub_vg. يمكننا الآن زيادة مساحة التجزئة vol02_logs: # ssm resize -s+2G /dev/hsoub_vg/vol02_logs يطلُب الأمر زيادة مساحة التجزئة vol02_logs بـ2GB. يمكن باستخدام الأمر ssm remove حذفُ تجزئة منطقيّة على النحو التالي: # ssm remove /dev/hsoub_vg/vol01_docs ستظهر رسالة تطلب منك التأكيد على خيّار الحذف. لحذف مجموعة تجزئات نحذف التجزئات المنطقيّة أولا ثم ننفّ الأمر: # ssm remove hsoub_vg إدارة التجزئات المعماة بواسطة SSM يتوفّر مدير وسائط التخزين SSM على إمكانيّة تعميّة تجزئات موجودة أو إنشاء تجزئات وتعميّتها. سنحتاج لهذا الغرض لتثبيت حزمة cryptsetup إن لم تكن مثبّتة قبلا، على النحو التالي: # yum update && yum install cryptsetup ثم ننفذ الأوامر التالية لإنشاء تجزئات معمّاة، سيُطلب منك إدخال عبارة سرّ Passphrase وتأكيدها. # ssm create -s 3G -n vol01_docs -p hsoub_vg --fstype ext4 --encrypt luks /mnt/docs /dev/sd{c,d}1 # ssm create -s 1G -n vol02_logs -p hsoub_vg --fstype ext4 --encrypt luks /mnt/logs # ssm create -n vol03_homes -p hsoub_vg --fstype ext4 --encrypt luks /mnt/homes لا تختلف الأوامر عن الأوامر السابقة لإنشاء التجزئات سوى في إضافة الخيار encrypt-- الذي يحدّد نوعيّة التعميّة (luks في حالتنا، وهي طريقة تعميّة ينتشر استخدامها على أنظمة لينكس). يجب أن نضيف التجزئات إلى ملف etc/fstab/ حتى تكون متاحة بعد إقلاع النظام. سنستخدم معرّفات التجزئات UUID التي يمكننا الحصول عليها بتنفيذ الأمر blkid: # blkid -o value UUID /dev/hsoub_vg/vol01_docs # blkid -o value UUID /dev/hsoub_vg/vol02_logs # blkid -o value UUID /dev/hsoub_vg/vol03_homes ثم نضع المحتوى التالي في الملفّ etc/crypttab/ (استخدم المعرفات التي حصلت عليها في الخطوة السابقة): docs UUID=ba77d113-f849-4ddf-8048-13860399fca8 none logs UUID=58f89c5a-f694-4443-83d6-2e83878e30e4 none homes UUID=92245af6-3f38-4e07-8dd8-787f4690d7ac none ثم نضيف ما يلي إلى ملفّ etc/fstab/ (أسفل المحتوى الموجود في الملفّ): # Logical volume vol01_docs: /dev/mapper/docs /mnt/docs ext4 defaults 0 2 # Logical volume vol02_logs /dev/mapper/logs /mnt/logs ext4 defaults 0 2 # Logical volume vol03_homes /dev/mapper/homes /mnt/homes ext4 defaults 0 2 لاحظ أن الاسم الظاهر بعد dev/mapper/ هو نفس المعرّف المحدَّد في الملفّ etc/crypttab/. نفّذ الأمر systemctl reboot لإعادة التشغيل وستجد أنّ النظام يطلُب عبارة السرّ من أجل تركيب التجزئات. ملحوظة: تأكّد من كتابة التعليمات في الملفّات etc/crypttab و etc/fstab/ بطريقة صحيحة؛ وإلا فيمكن ألّا يقلع النظام. إن حدث خطأ ستُطلَب منك كلمة سر الحساب الجذر؛ ويمكنك بعدها تصحيح محتوى الملفّ ثم إعادة تشغيل النظام بالأمر السابق. يمكنك التأكد من أنّ التجزئات رُكِّبت في النقاط التي حدّدناها سلفا بتنفيذ الأمر mount لإظهار نقاط التركيب ثم استخدام grep لاختيار تلك التي توجد بها mnt حيث ركّبنا التجزئات: # mount | grep "mnt" /dev/mapper/logs on /mnt/logs type ext4 (rw,realtime,seclabel,data=ordered) /dev/mapper/docs on /mnt/docs type ext4 (rw,realtime,seclabel,data=ordered) /dev/mapper/homes on /mnt/homes type ext4 (rw,realtime,seclabel,data=ordered) خاتمة رأينا في هذا الدرس مبادئ إعداد نظام التخزين بالطريقة التقليدية وباستخدام أدوات إدارة التجزئات الحديثة مثل lvm و ssm. من المهم الانتباه إلى التعامل مع التجزئات يؤثّر مباشرة على عمل النظام ويمكن لخطأ في تنفيذ أمر مّا أن يجعل النظام غير قابل للاستخدام؛ لذا تدرّب أولا على نظام غير أساسي (أو تخيلي، وهي الطريقة الأسهل) إلى أن تتأكد من فهمك لآلية عمل مختلف الأدوات قبل أن تنتقل إلى بيئة إنتاج. ترجمة -وبتصرّف- للمقال RHCSA Series: Using ‘Parted’ and ‘SSM’ to Configure and Encrypt System Storage – Part 6 لصاحبه Gabriel Cánepa.
  8. تعرَضنا في دروس سابقة لكيفيّة إدارة الملفات و المستخدمين على RedHat Enterprise Linux؛ نواصل في هذا الدّرس تناول المهامّ الأساسيّة لإدارة خادوم بشرح مبادئ إدارة العمليّات على RedHat Enterprise Linux 7. نبدأ أوّلا بنظرة عامّة على ما يحدُث ابتداءً من اللحظة التي تشغّل فيها زرّ الطاقة على خادوم يعمل على توزيعة RHEL إلى اللحظة التي تظهر فيها شاشة تسجيل الدخول عبر سطر الأوامر. مراحل الإقلاع تنطبق هذه المراحل على توزيعات غنو/لينكس الأخرى مع وجود اختلافات طفيفة. يبدأ اختبار التشغيل الذاتي Power On Self Test بالتحقّق من العتاد Hardware. ينقل اختبار التشغيل الذاتي بعد اكتماله التحكمَ إلى محمِّل الإقلاع الأوّلي First stage boot loader الذي يوجد إما في مقطع الإقلاع على أحد أقراص الجهاز (نظام BIOS)؛ أو في تجزئة Partition منفصلة (نظام UEFI). يمرّر محمّل الإقلاع الأولي التحكّم إلى محمّل الإقلاع الثاني Second stage boot loader الذي يوجد في المجلّد boot/. محمّل الإقلاع الأكثر استخداما هو GRUB (اختصار لـ GRand Unified Boot Loader). يبحث محمّل الإقلاع عن نواة النظام Kernel ونظام ملفات خاصّ يُعرف بـ initramfs يحوي ملفّات وبرامج مهمتها إنجاز الخطوات الضروريّة لتركيب Mount نظام الملفّات الجذر (وهو نظام الملفّات المستخدَم في التجزئة التي يوجد عليها المجلّد root/). تضبط النواة العتاد الموصول بالنظام، ثم بعد تركيب نظام الملفات الجذر تشغّل عمليّة بمعرّف العمليات 1 PID. تجهّز هذه العمليّة بقيّة العمليّات التي من بينها العمليّة المسؤولة عن تسجيل الدخول. تُعرَف العمليّة ذات المعرّف 1 بعمليّة التمهيد Initialization (أو init اختصارا). ملحوظة: يغلب وصف محمّل الإقلاع Boot loader دون تحديد على محمّل الإقلاع الثاني. يمكننا باستخدام الأمر ps عرض لائحة بالعمليّات الحاليّة ذات العمليّة الأم (أي العمليّة التي بدأت تشغيلَ هذه العمليّات) systemd (عمليّة التمهيد في نظام التمهيد SystemD الذي انتقلت إليه أغلب توزيعات لينكس الحديثة): $ ps -o ppid,pid,uname,comm --ppid=1 يمكّننا الخيار o- من تحديد نوعيّة المخرجات التي نرغب في عرضها؛ وهي في هذه الحالة معرّف العمليّة الأمّ ppid، معرّف العمليّة pid، اسم المستخدم الذي شغّل العمليّة uname والأمر comm. يحدّد المعطى الأخير شرطا هو أن يكون معرّف العمليّة الأم يساوي 1 (عمليّة التمهيد). في ما يلي جزء من نتيجةِ تنفيذٍ للأمر: PPID PID USER COMMAND 1 478 root systemd-journal 1 497 root lvmetad 1 513 root systemd-udevd 1 620 root auditd 1 644 root alsactl 1 645 root smartd 1 646 libstor+ lsmd 1 649 root rngd 1 650 root abrtd 1 651 root abrt-watch-log 1 655 root ModemManager 1 656 root systemd-logind 1 657 root irqbalance 1 658 avahi avahi-daemon 1 659 root firewalld 1 662 root accounts-daemon 1 667 root rsyslogd 1 668 root abrt-watch-log 1 673 rtkit rtkit-daemon 1 675 dbus dbus-daemon 1 690 root gssproxy 1 752 root VBoxService 1 760 root ksmtuned 1 762 polkitd polkitd (...) ملحوظة: لجعل النتيجة أسهل للتصفح أعد توجيه الأمر ps أعلاه إلى less؛ ثم استخدم زرّ المسافة على لوحة المفاتيح للانتقال إلى الصفحة الموالية في النتائج، Ctrl+u للانتقال إلى الصفحة السابقة و q للعودة إلى سطر الأوامر: $ ps -o ppid,pid,uname,comm --ppid=1 | less يساعد تخصيص مخرجات الأمر ps في أمور منها على سبيل المثال معرفة العمليّات التي تتسبّب في زيادة استخدام المعالج أو الذاكرة: $ ps aux --sort=+pcpu # ترتيب العمليات تصاعديًّا حسب نسبة استخدام المعالج $ ps aux --sort=-pcpu # ترتيب العمليات تنازليًّا حسب نسبة استخدام المعالج $ ps aux --sort=+pmem # ترتيب العمليات تصاعديًّا حسب نسبة استخدام الذاكرة $ ps aux --sort=-pmem # ترتيب العمليات تنازليًّا حسب نسبة استخدام الذاكرة # ترتيب العمليّات تصاعديًّا حسب استخدام المعالج وتنازليًّا حسب استخدام الذاكرة $ ps aux --sort=+pcpu,-pmem مقدمة إلى SystemD اعتمدت أغلب توزيعات لينكس الحديثة نظام التمهيد SystemD بدلا من أنظمة التمهيد القديمة (مثل SysVinit) نظرا للميزات التي يقدّمها؛ ومن أهمها: إمكانيّة أكبر لتنفيذ العمليّات بالتوازي أثناء التمهيد؛ على عكس SysVinit الأبطأ (ينفّذ SysVinit العمليّات الواحدة تلو الأخرى وينتظر التحقّق من اعتماديّات العمليّات قبل البدء في تشغيل خدمات النظام). يعمل بعد التمهيد على إدارة موارد النظام بطريقة أفضل؛ فالخدمات تشغَّل عند الحاجة إليها فقط من أجل تجنّب استهلاك موارد النظام في عمليّات غير متسخدَمة. التوافق العكسيّ مع سكربتات SysVinit. تدير الأداة systemctl نظام التمهيد SystemD؛ التي تؤدي دورَ الأدوات chkconfig و service و shutdown في نظام التمهيد SysVinit. يبيِّن الجدول التالي التشابه بين عمل systemctl وعمل الأدوات المذكورة. الأمر في SysVinit الأمر في SystemD الوصف service name start systemctl start name تشغيل الخدمة name service name stop systemctl stop name إيقاف الخدمة name service name condrestart systemctl try-restart name إعادة تشغيل الخدمة بشرط أن تكون تعمل حاليا service name restart systemctl restart name إعادة تشغيل الخدمة service name reload systemctl reload name إعادة تحميل إعدادات الخدمة service name status systemctl status name عرض حالة الخدمة service –status-all systemctl عرض حالة جميع الخدمات chkconfig name on systemctl enable name تفعيل تشغيل الخدمة مع إقلاع النظام حسب ما هو محدّد في ملف الوحدة Unit file. تتمثّل عمليّة تفعيل خدمة للتشغيل التلقائي مع الإقلاع (أو تعطيلها) في إضافة وصلات رمزيّة (أو حذفها) إلى المجلّد etc/systemd/system/ (أو حذفها منه). chkconfig name off systemctl disable name تعطيل تشغيل خدمة مع إقلاع النظام. chkconfig --list name systemctl is-enabled name يتحقّق من ما إذا كانت الخدمة مفعَّلة حاليا أم لا chkconfig --list systemctl --type=service تعطيل جميع الخدمات مع ذكر ما إذا كانت الخدمة معطّلة أم مفعَّلة. shutdown -h now systemctl poweroff إيقاف الجهاز shutdown -r now systemctl reboot إعادة تشغيل النظام أضاف SystemD مفهومي الوحدة Unit إلى نظام التمهيد (التي يمكن أن تكون خدمة Service، نقطة تركيب Mount point، جهاز طرفي Device أو مقبس شبكي Network socket) والوجهة Target (الكيفيّة التي يدير بها SystemD عمليّات عدّة مرتبطة في ما بينها). راجع مقال أساسيات Systemd: العمل مع الخدمات، الوحدات Units، واليوميات Journal للمزيد حول نظام التمهيد SystemD. إدارة العمليات تعديل الأولوية في التنفيذ يُستخدَم الأمر renice للتعديل على الأولويّة المعطاة لعمليّة أو عدّة عمليات. تستخدم النواةُ الأولويات لتحديد الكيفيّة التي ستخصّص بها موارد الجهاز للعمليّات. تتراوح الأولويّات Priorities (وتُعرَف أيضا بـ Nices) بين 20- و 19: $ renice priority identifier نحدّد بالمعطى الأول priority الأولويّة التي نريد منحها؛ ثم نحدّد في المعطى الثاني معرّفات عمليّات p-، معرّفات مستخدمين (أو أسماءهم) u- أو معرّفات مجموعات مستخدمين (أو أسماءها) g-. يمكن للمستخدم العادي تغيير أولويّة عمليّاته فقط بشرط ألا يؤدّي التغيير إلى نقص قيمة الأولويّة (قيمة أقلّ تعني أولويّة أكبر). بمعنى أنه يمكن للمستخدم تقليص استخدام عمليّاته للموارد إلا أنه لا يمكنه زيادتها. يحاول الأمر التالي تغيير قيمة أولويّة العمليّة ذات المعرّف 10079 إلى 1-: $ renice -1 -p 10079 إن أردنا تغيير جميع عمليّات المستخدم academy إلى نفس القيمة نطبّق الأمر كالتالي: # renice -1 -u academy إنهاء عملية يُستخدَم الأمر kill لإنهاء العمليّات؛ إلا أن طريقة إنهاء العمليّة تختلف. ينهي الأمر kill العمليّة بإحدى طريقتيْن: إما أن يطلُب من العمليّة إنهاء مهامها (اجمعي أغراضك وانصرفي) أو يتولى هو المهمة بنفسه. إن لم نحدّد طريقة الإنهاء فسيستخدم الأمرُ الطريقةَ الأولى؛ لتحديد الطريقة الثانيّة نستخدم الخيّار 9-. في الواقع، 9 هو معرّف إشارة يُرسلها النظام إلى العمليّة؛ وتتميّز بأنها إشارة لا يمكن للعمليّة تجاهلها (عكسَ الإشارة 15 اللطيفة المستخدَمة في طريقة الإنهاء الأولى). يوجد الأمر pkill الذي يعمل على إنهاء العمليّات بطريقة مشابهة للأمر kill مع فرق أن kill ينهي عمليّة (أو مجموعة عمليّات) بناء على المعرّف؛ في حين أن pkill يمكن أن يستخدم اسم العمليّة أو خاصيّات أخرى. استخدم أمر pgrep إن أردت عرض عمليّات توافق شروطا معينة؛ إن طبّقت أمر pkill على نفس الشروط فسينهي جميع العمليّات التي تنطبق عليها. في المثال التالي نطلُب إنهاء جميع عمليّات المستخدم academy: # pkill -u academy إنهاء العمليّات ليس عمليّة هامشيّة؛ لذا من المستحسن عرض لائحة بالعمليّات التي ينطبق عليها الأمر أعلاه قبل تنفيذه: # pgrep -l -u academy يمكنك الحصول على مزيد من التفاصيل عن الأوامر ps، kill والإشارات Signals في مقال إدارة العمليات (Process) في لينكس باستخدام الطرفية. ترجمة -وبتصرّف- للمقال RHCSA Series: Process Management in RHEL 7: Boot, Shutdown, and Everything in Between – Part 5 لصاحبه Gabriel Cánepa.
  9. تتطلّب إدارة خادوم Red Hat Enterprise Linux، مثل أي خادوم عموما، معرفة كيفيّة إضافة حسابات المستخدمين، تعديلها، تعليقها أو حذفها. ستحتاج أيضا خلال إدارة الخادوم لمعرفة كيف تمنح المستخدمين الصّلاحيات الضروريّة على الملفات، المجلّدات وموارد النّظام الأخرى حتى يتمكنوا من إنجاز مهامهم. إدارة حسابات المستخدمين تحتاج حتى تتمكّن من إدارة المستخدمين أن تكون لديك صلاحيّات المدير الأعلى (الجذر root). لذا سنبدأ بالانتقال إلى المستخدم الجذر بتنفيذ الأمر: $ su - Password: Last login: Wed May 11 12:58:50 GMT 2016 on pts/0 [root@localhost ~]# يُستخدَم الأمر su للتبديل بين حسابات المستخدمين؛ وعند تمرير المعطى - له فسينتقل للحساب الجذر بعد طلب كلمة السّر. ملحوظة تشير العلامة # أمام الأمر إلى أنه يُنفَّذ من الحساب الجذر. إضافة مستخدم جديد يُستخدَم الأمران التاليان لإضافة حساب مستخدِم جديد: # adduser username # useradd username حيثُ username هو اسم الحساب الجديد. ملحوظة 1: إن كانت لديك تجربة سابقة مع توزيعات دبيانيّة (أوبونتو مثلا) فـ adduser هناك مختلف عنه هنا. الأمر adduser في RHEL (والتوزيعات المبنيّة على ردهات عموما) هو مجرّد وصلة رمزيّة للأمر useradd؛ بينما هو سكربت منفصل في دبيان؛ ولكنّه يعتمد على useradd وأوامر أخرى. ملحوظة 2: ستحتاج أولا لتعيين كلمة سرّ للحساب قبل التمكن من البدء في استخدامه (سنرى كيف ذلك بعد قليل). ينفّذ النظام المهامّ التاليّة عند إضافة مستخدم جديد: إنشاء مجلّد شخصي للمستخدِم (مبدئيا على المسار home/username/ ما لم يُطلب منه غير ذلك). تُنسَخ الملفات bash_logout. وbash_profile. وbashrc. (وهي ملفات مخفيّة) إلى المجلّد الشخصي للمستخدِم. تُستعمَل هذه الملفات لضبط الإعدادات الخاصّة بجلسة Session المستخدم. إنشاء مجلّد خاص بمسلَك بريد Mail spool المستخدِم. إنشاء مجموعة مستخدمين بنفس اسم الحساب وإضافته إليها. ملحوظة: مسلك البريد هو ملفّ يخزّن رأسيات البريد (مثل عنوان المُرسِل، تاريخ التسليم، … إلخ) ومحتوياته. يوجد على المسار /var/spool/mail/ مجلّد فرعي لكلّ مستخدم على النّظام. يستخدم بعض عملاء البريد هذا المجلّد بينما لا يستخدمه البعض الآخر. يُخزّن النظام معلومات عامّة عن جميع الحسابات في الملف etc/passwd/. توجد في هذا الملفّ أسطُر يمثّل كل واحد منها سجلّا لحساب مستخدِم. يأخذ كلّ سطر الصّيغة التاليّة: [username]:[x]:[UID]:[GID]:[Comment]:[Home directory]:[Default shell] السّطر مكوّن من حقول تفصل نقطتان : بين كل حقلين. يضمّ الحقل الأول [username] اسمَ الحساب. يشير الحقل الثاني [x] إلى أن الحساب محميّ بكلمة سرّ توجد معمّاةً Encrypted في الملفّ (etc/shadow/). يوجد في الحقليْن الثالث والرابع ([UID] و[GID]) على التوالي معرّف المستخدِم ومعرّف المجموعة الأوليّة Primary group التي ينتمي إليها. الحقل الخامس [Comment] هو تعليق حول الحساب؛ يوضع فيه عادة وصفٌ للحساب وعمله. يعرّف الحقل السادس [Home directory] المسار المُطلق لمجلد المستخدِم الشخصي. يحدّد الحقل السابع الأخير [Default shell] الصّدفة Shell التي تُسنَد للمستخدِم بعد ولوجه إلى النظام. يوجد ملفّ آخر يشبه etc/passwd/ من المهمّ التعوّد عليه وهو etc/group/. يحتفظ النظام في هذا الملفّ بمعلومات مجموعات المستخدِمين، سطر لكلّ مجموعة. صيغة السّطر هي كالتالي: [Group name]:[Group password]:[GID]:[Group members] يحدّد الحقل الأول [Group name] اسم المجموعة. يُخصّص الحقل الثاني [Group password] لكلمة سر المجموعة في حال وجودها. توجد غالبا علامة x في هذا الحقل دلالةً على عدم وجود كلمة سر. الحقل الثالث [GID] مطابق للحقل الرابع [GID] في ملف etc/passwd. يقدّم الحقل الرابع [Group members] لائحة بالمستخدمين المنضوين تحت هذه المجموعة. يفصل بين أسماء الحسابات بفاصلة ,. تعيين كلمة سر للمستخدم يبقى الحساب المنشَأ حديثا بالأمر useradd (أو adduser) معطّلا إلى أن نعيّن له كلمة سرّ؛ نستخدم أمر passwd لهذا الغرض: # passwd username سيُطلب منك إدخال كلمة سر للحساب ثم تكرارها؛ كما في المثال التالي: # useradd academy # passwd academy Changing password for user academy. New password: Retype new password: passwd: all authentication tokens updated successfully. طلب تغيير كلمة السر عند أول دخول يدير الأمر chage معلومات تاريخ الحساب مثل عدد الأيام التي يجب بعدها تغيير كلمة سرّ الحساب وتاريخ آخر تغيير لكلمة السّر. يحدّد الخيّار d-، إذا ذُكر بعده تاريخٌ بالصيغة YYYY-MM-DD، تاريخ آخر مرة غُيِّرت فيها كلمة السّر؛ أما إذا ذكر بعده عدد فيفترض أن آخر تعديل تمّ بعد تاريخ 1 يناير 1970 بهذا العدد من الأيام (chage -d 1 تعني أن التعديل كان يوم 2 يناير 1970، chage -d 2 تعني أن التعديل كان يوم 3 يناير 1970 وهكذا). يفرض تمريرُ القيمة 0 للخيّار d- مع الأمر chage على المستخدِم تغيير كلمة السّر بعد الولوج إلى الحساب. نعدّل في المثال التالي تاريخ التعديل الأخير لكلمة السّر ثم نحاول الدخول إلى الحساب academy بكلمة السّر التي عيّناها في الفقرة السابقة (اخرج من الحساب الجذر إن سبق لك تسجيل الدّخول به؛ واستخدم حسابا عاديًّا بعد تنفيذ الأمر chage): # chage -d 0 academy # exit logout $ su academy Password: You are required to change your password immediately (root enforced) Changing password for academy. (current) UNIX password: New password: Retype new password: $ ننتقل بالأمر su لاستخدام اسم الحساب الممرّر له (academy في حالتنا)؛ ستُطلب منا كلمة السّر التي عيناها سابق ثم بعد الولوج تظهر رسالة تطلب منا تعديل كلمة السّر. ندخل كلمة السر الحالية للاستمرار ثم نختار كلمة سر جديدة ونكرّرها. التعديل على الحساب يمكن بعد إضافة مستخدم تعديل حسابه في أي وقت بالأمر usermod: # usermod options username تحدّد خياراتٌ options سلوك الأمر و username الحساب الذي تُطبَّق عليه. تحديد تاريخ انتهاء صلاحيّة لحساب مستخدِم يتيح خيّار expiredate-- عند استخدامه مع الأمر usermod تحديد تاريخ يُعطَّل بعده الحساب. ننتقل في المثال التالي إلى استخدام الحساب الإداري (الجذر root)، ثم ننشئ حسابا جديدا باسم academy1: $ su - Password: # useradd academy1 يمكننا إظهار معلومات تاريخ الحساب بالأمر التالي: # chage -l academy1 Last password change : May 11, 2016 Password expires : never Password inactive : never Account expires : never Minimum number of days between password change : 0 Maximum number of days between password change : 99999 Number of days of warning before password expires : 7 نلاحظ أن قيمة Account expires ( انتهاء صلاحيّة الحساب) هي never أي أنه لا يوجد تاريخ انتهاء صلاحيّة. نستخدم الخيار expiredate-- مع الأمر usermod لتحديد تاريخ انتهاء صلاحية للحساب academy1 ثم نعرض معلومات عمر الحساب من جديد: # usermod --expiredate=2016-06-01 academy1 # chage -l academy1 Last password change : May 11, 2016 Password expires : never Password inactive : never Account expires : Jun 01, 2016 Minimum number of days between password change : 0 Maximum number of days between password change : 99999 Number of days of warning before password expires : 7 لاحظ تغيّر قيمة Account expires. إضافة مستخدم إلى مجموعة ثانية يُستخدم الخياران aG- مع الأمر usermod لإضافة مستخدم موجود إلى مجموعة أخرى غير المجموعة الأوليّة. ننشئ في المثال التالي مجموعة باسم hsoub ثم نضيف إليها المستخدم academy: # groupadd hsoub # usermod -aG hsoub academy لاحظ أن اسمَ المجموعة يسبق اسم الحساب. يمكن التأكد من إضافة الحساب إلى المجموعة بعرض المجموعات التي ينتمي إليها الحساب academy كالتالي: # groups academy academy : academy hsoub أي أن الحساب academy ينتمي إلى المجموعتيْن academy (المجموعة الأوليّة) وhsoub. حذف مستخدم من مجموعة إن أردت حذف مستخدم من جميع المجموعات الثانويّة وإبقاء الأوليّة فقط فيمكن ذلك على النحو التالي: # usermod -G "" academy # groups academy academy : academy إن كان المستخدم عضوا في أكثر من مجموعة ثانويّة فيمكن حذفه من بعضها بذكر تلك التي ينتمي إليها فقط مع الخيّار G-. مثلا ينتمي العضو academy للمجموعات hsoub2، hsoub1 وhsoub3، ونريد حذفه من hsoub2؛ ننفذ الأمر كالتالي: # usermod -G hsoub1,hsoub3 academy تعديل المسار المبدئي لمجلّد المستخدم أو الصّدفة المسندة إليه استخدم الخيار d- متبوعا بمسار تريده مع الأمر usermod إن أردت تغيير مكان المجلّد الشّخصي للمستخدِم. # usermod -d /home/test academy نفس المبدأ مع الصّدفة المبدئية (bash)؛ استخدم الخيار shell-- متبوعا بمسار صدفة أخرى (sh مثلا): # usermod --shell /bin/sh academy قفل كلمة المرور يمكن باستخدام الخيّار L- مع الأمر usermod قفل كلمة سر المستخدم وبالتالي منعه من الدخول إلى الحساب وتعطيله: # usermod -L academy إن جرّبت الآن الدخول إلى الحساب academy (بعد الخروج من الحساب الجذر) فستظهر رسالة بوجود خطأ في عمليّة الاستيثاق: $ su academy Password: su: Authentication failure عد إلى الحساب الجذر واستخدم الخيّار U- لإلغاء قفل كلمة المرور وتفعيل الحساب. # usermod -U academy يمكن الآن الدخول إلى الحساب academy. حذف مجموعة أو مستخدِم استخدِم الأمر groupdel لحذف مجموعة مستخدمين. بالنسبة لحساب مستخدم فالأمر المستخدَم هو userdel (إضافة الخيار r- تحذف أيضا محتوى المجلد الشخصي ومسلك البريد). # groupdel group_name # userdel -r user_name إدارة أذونات Permissions المستخدمين يعدّ أمر ls أحد أكثر الأوامر استخداما أثناء إدارة الخواديم. استخدم الخيّار l- مع ls لسرد قائمة مفصّلة بمحتويات مجلّد. يمكن أيضا تطبيق الأمر على ملفّ واحد لعرض تفاصيله. تظهر عند استخدام الأمر ls -l خاصيّات الملفّ ومن بينها وضعه Mode الذي يوجد في بداية كل مُخرَج؛ وهو مكون من عشرة محارف. يحدّد المحرف الأول نوع الملف ويمكن أن يأخذ إحدى القيم التالية: -: ملفّ عادي. d: مجلّد. l: وصلة رمزيّة. c: جهاز طرفيّ محرفي Character device (يعالج تدفق البيانات محرفا محرفا؛ مثل الطرفيّة). b: جهاز طرفيّ كتليّ Block device (يعالج البيانات على كتل، مثل وسائط التخزين). تحدّد المحارف التسعة التاليّة الأذونات المطبّقة على الملفّ. تُقسّم المحارف التسعة إلى ثلاث مجموعات، تحوي كل مجموعة ثلاثة محارف. تمثّل المحارف الثلاثة أذونات الملف وهي، من اليسار إلى اليمين، القراءة (r)، الكتابة (w) والتنفيذ (x). تشير المجموعات الثلاثة على التوالي (من اليسار إلى اليمين) إلى أذونات المستخدِم صاحب الملفّ (user, u)، مجموعة المستخدمين مالكة الملفّ (Group, g) وبقيّة المستخدمين (Other, o). يظهر الحرف الموافق للإذن إذا كان الإذن معيّنا وإلا تظهر مكانه علامة -. راجع المقالات التاليّة لمزيد من التفاصيل عن أذونات المستخدمين: مبادئ أذونات الملفات (File permissions) على لينكس. مقدمة إلى أذونات لينكس Linux Permissions. يُستخدَم الأمر chmod لتغيير أذونات الملفّ كالتالي: # chmod new_mode file حيث new_mode رمز عددي أو عبارة تحدّد الأذون الجديدة. يُحسَب الرمز العددي بناء على المكافئ العددي لكلّ إذن (4 للقراءة، 2 للكتابة و1 لإذن التنفيذ، و0 عند غياب الإذن) حيثُ تجمع المكافئات بالنسبة لصاحب الملفّ، المجموعة المالكة للملف وبقيّة المستخدمين. توضّح الصورة أعلاه مثالا على حساب الرمز العددي للإذن: توجد ثلاثة مجموعات كلّ واحدة مكوّنة من ثلاثة محارف. تشير المجموعة الأولى ابتداءً من اليسار لأذون مالك الملفّ، الثانيّة لأذون المجموعة والثالثة لأذون بقيّة المستخدمين. تشير المحارف في كلّ مجموعة لإذن معيّن: القراءة (المحرف الأول في كلّ مجموعة من اليسار)، الكتابة (المحرف الثاني) والتنفيذ (المحرف الثالث). إذا كان الإذن موجودا يُشار إليه بالحرف الموافق (w، r أو x) وإلا توضع مكانه علامة -. للحصول على الرمز العددي نجمع المكافئات بالنسبة لكل مجموعة ثم نضعها معا بالترتيب المذكور: المستخدم صاحب الملف في اليسار، المجموعة في الوسط وبقية المستخدمين على اليمين. نستخدم أمر chmod لتعيين الأذون الجديدة. ننشئ في المثال التالي ملفّا باسم myfile ثم نعرض معلوماته، نلاحظ أن الأذون هي: rw-rw-r-- والرمز العددي الموافق لها هو 664. ثم نستخدم أمر chmod لتعيين الأذون الجديدة باستخدام الرمز 744 وفي الأخير نعرض معلومات الملفّ من جديد ونلاحظ التغيّر. $ touch myfile $ ls -l myfile -rw-rw-r--. 1 academy academy 0 May 11 14:55 myfile $ chmod 744 myfile $ ls -l myfile -rwxr--r--. 1 academy academy 0 May 11 14:55 myfile تعيين إذن لجميع المستخدمين يمكنك جعل إذن على ملف متاحا لجميع المستخدمين (صاحب الملف، المجموعة والبقيّة) بالأمر chmod. نفرض مثلا أن لديك سكربت تريد إتاحة إمكانية تنفيذه للجميع؛ استخدم الأمر chmod كالتالي: # chmod a+x script.sh يُقرأ الأمر "امنح الإذن x (التنفيذ) لجميع المستخدمين a". يمكن أيضا استخدام نفس الطريقة مع المستخدم مالك الملف، المجموعة أو بقية المستخدمين: امنح إذن الكتابة w للمستخدم صاحب الملف o: # chmod o+w script.sh امنح إذن القراءة r للمجموعة g: # chmod g+r script.sh امنح أذون القراءة r، الكتابة w والتنفيذ x للمجموعة: # chmod g+rwx script.sh أما إذا أردنا نزع الإذن فنستخدم علامة - بدلا من + كالتالي: # chmod o-r script.sh تغيير ملكية ملف يظهر عند سرد ملفات مجلّد أو تفاصيل ملفّ (بأمر ls -l) المستخدِم صاحب الملف والمجموعة التي ينتمي إليها. مثلا: $ cd $ ls -la total 60 drwx------. 16 academy academy 4096 May 11 20:36 . drwxr-xr-x. 11 root root 4096 May 11 12:59 .. drwxr-xr-x. 2 academy academy 6 Apr 15 00:42 Desktop drwxr-xr-x. 2 academy academy 6 Apr 15 00:42 Documents drwxr-xr-x. 2 academy academy 6 Apr 15 00:42 Downloads drwxrwxr-x. 2 academy academy 6 Apr 27 20:51 folder drwxrwxr-x. 2 academy academy 38 Apr 29 17:08 links_folder drwxr-xr-x. 2 academy academy 6 Apr 15 00:42 Music -rwxr--r--. 1 academy academy 0 May 11 14:55 myfile drwxr-xr-x. 2 academy academy 6 Apr 15 00:42 Pictures drwxr-xr-x. 2 academy academy 6 Apr 15 00:42 Public drwxr-xr-x. 2 academy academy 6 Apr 15 00:42 Templates drwxr-xr-x. 2 academy academy 6 Apr 15 00:42 Videos انتقلنا في المثال أعلاه إلى المجلّد الشخصي للمستخدم الحالي (بتنفيذ أمر cd دون معطيات) ثم سردنا محتويات المجلّد بالأمر ls -la. يطلُب الخيّار a- من الأمر إظهار جميع المحتويات بما فيها الملفات المخفيّة (التي يبدأ اسمها بنقطة .). يظهر اسم المستخدم مالك الملف في العمود الثالث واسم المجموعة في العمود الرابع (جميع الملفات الظاهرة في نتيجة الأمر تعود للمستخدم academy والمجموعة academy ما عدا المجلّد .. الذي يشير إلى المجلّد الأعلى من المجلّد الحالي في البنية الشجرية والذي يملكه المستخدم والمجموعة root). نستخدم الأمر chown لتغيير ملكيّة ملفّ. يمكن تغيير المستخدم المالك والمجموعة في نفس الوقت أو كلّ على حدة. تغيير المستخدم المالك والمجموعة معا (لاحظ وجود النقطتين في الأمر): # chown user:group file تغيير المستخدم المالك دون تغيير المجموعة: # chown user: file تغيير المجموعة المالكة دون تغيير المستخدِم: # chown :group file نسخ أذون ملف وتطبيقها على آخر إن أردت جعل أذون ملف مطابقة تماما لأذون ملفّ آخر فيمكنك استخدام الخيّار reference--مع الأمر chown على النحو التالي: # chown --reference=ref_file file حيث ref_file هو الملف المرجِع وfile الملف الذي تريد نسخ الأذون إليه. يؤدي الأمر أيضا إلى تغييرملكيّة الملف file. إعداد الخيار الخاص بضبط معرف المجموعة setgid صُمِّم خيار setgid لإتاحة إمكانية الوصول إلى ملفّ بصلاحيات مجموعة المستخدمين المالكة للملف بغضّ النظر عن المستخدِم الذي يصل إليه فعلا. يمكن أن يُقرأ الأمر على النحو التالي : “اجعل الوصول إلى هذا الملف متاحا وفق أذونات المجموعة التي تملكه بغضّ النظر عن المستخدم الذي يحاول الوصول إليه”. يُطبّق ضبط معرّف المجموعة على النحو التالي: # chmod g+s file أو بإضافة الرقم 2 أمام الرمز العددي للأذون: # chmod 2750 file نفترض أن الأذون على الملف file هي 760 مما يعني أنه لا يُتاح إذن القراءة إلا للمستخدم مالك الملف أو المجموعة التي ينتمي إليها. إن حاول مستخدم غير المستخدم المالك ولا ينتمي للمجموعة قراءة محتوى الملف فلن يستطيع. إن ضبطنا خيار setgid بإحدى الطريقتين المذكورتين (g+s أو 2760) فسيمكن لأي مستخدم مهما كان قراءة الملف، لأنه أصبح يستفيد من صلاحيات المجموعة حتى ولو لم يكن واحدا منها؛ ولكنه لن يستطيع تنفيذ الملف لأن المجموعة لا تملك هذا الإذن. راجع مقال شرح أذونات الملفات (File permissions) على لينكس ويونكس للمزيد عن معرّف المجموعة (ومعرّف المستخدم). خاتمة تتطلّب إدارة خواديم RHEL معرفة عميقة بأذون الملفات وصلاحيات المستخدمين والمجموعات؛ لذا تأكد من تطبيق المعلومات الواردة في هذا المقال جيّدا حتى تستوعبها. إن وجدت استشكالات فيمكنك التعليق على هذا الدّرس أو استخدام قسم الأسئلة للحصول على المساعدة. ترجمة -وبتصرّف- للمقال RHCSA Series: How to Manage Users and Groups in RHEL 7 – Part 3 لصاحبه Gabriel Cánepa.
  10. نكمل في هذا الدّرس، الثاني من سلسلة الدّروس التحضيريّة لـشهادة RHCSA، ما بدأناه في الدّرس الأول؛ بالتّركيز على أوامر إدارة الملفّات والمجلّدات في Red Hat Enterprise Linux. هذه المهارات مطلوبة للحصول على الشهادة، كما أنها من الأنشطة التي لا يكاد يخلو يوم عمل بالنسبة لمدير أنظمة لينكس منها. أغلب الشروحات الواردة هنا تصلُح على توزيعات لينكس الأخرى. إنشاء الملفات والمجلدات، حذفها، نسخها ونقلها يعدّ إنشاء الملفات أو حذفها من سطر الأوامر أول ما تجب عليك معرفته في إطار إدارة الملفات. نفس الشيء بالنّسبة للمجلّدات التي ما هي في النهاية سوى ملفّ بمواصفات خاصّة. إنشاء ملف: أمر touch يُستخدَم أمر touch لإنشاء ملف فارغ أو لتحديث بيانات الوصول والتّعديل على ملف موجود. ننشئ في المثال التالي ملفًّا باسم testfile، ثم نسرد معلومات الملفّ باستخدام الأمر ls -l. يظهر وقت إنشاء الملف Apr 27 20:41 وتاريخه. نضيف محتوى إلى الملف ثم نعيد سرد معلوماته ونلاحظ تغيّرات من ضمنها التاريخ Apr 27 20:43. $ touch testfile $ ls -l testfile -rw-rw-r--. 1 meyil meyil 0 Apr 27 20:41 testfile $ echo "Hsoub Academy" > testfile $ ls -l testfile -rw-rw-r--. 1 meyil meyil 14 Apr 27 20:43 testfile انتظر دقيقة تقريبا ثم نفذ أمر touch على الملفّ. سيظهر تغيّر في تاريخ التّعديل. يمكنك التأكّد من أن محتواه لم يتغير بتنفيذ أمر cat. $ touch testfile $ ls -l testfile -rw-rw-r--. 1 meyil meyil 14 Apr 27 20:44 testfile $ cat testfile Hsoub Academy يُنشأ الملف الناتج عن تنفيذ أمر touch في المجلّد الحالي؛ إذا أردت إنشاءه في مجلّد مغاير فيمكنك تمرير المسار إلى الأمر على النحو التالي: $ touch folder/filename يُنشئ الأمر ملفّا باسم filename ضمن المجلّد folder. تحديد نوع ملف: أمر file يمكنك استخدام أمر file لتحديد نوع الملفّ (ملفّ، مجلّد، قرص صلب، … إلخ). $ file testfile testfile: ASCII text حذف ملف: أمر rm يحذف أمر rm الملف المرَّر في المعطى: $ rm testfile يمكن أيضا تمرير مسار الملف كاملا إن لم يكن موجودا في مجلّد العمل: $ rm folder/testfile توجد خيّارات يمكن تمريرها للأمر rm؛ سنرى بضعةً منها بعد قليل. إنشاء مجلد: أمر mkdir يمكن إنشاء مجلّد ضمن مجلّد العمل بأمر mkdir على النحو التالي: $ mkdir directory استخدم خيار p- مع أمر mkdir إن أردت إنشاء مسار كامل: $ mkdir -p dirA/dirA1/dirA12/ ينتُج عن تنفيذ الأمر مع الخيار p- في المثال السابق إنشاءُ مجلّد باسم dirA وبداخله مجلّد فرعي dirA1 وبداخل هذا الأخير مجلد باسم dirA12. حذف مجلد: أمر rmdir أو rm إن كان المجلّد فارغا فيمكن حذفه بالأمر rmdir: $ rmdir directory أما إن لم يكن فارغا فستحتاج لحذف محتوياته أولا أو استخدام خيّار r- مع أمر rm الذي يحذف المجلّد وما حوى: $ rm -r dirA/dirA1/dirA12/ يوجد أيضا خيّار f- الذي يُستخدَم مع r- لتأكيد الحذف وعدم إظهار أية رسائل تطلُب التأكيد: $ rm -rf dirA ينبغي الحذر عموما عند استخدام أمر rm وبالأخص مع خيّارَيْ r- وf-؛ فالاستخدام غير الحذر ربّما يؤدّي لضياع البيانات والكثير من المشاكل. إعادة توجيه المدخلات والمخرجات يتيح سطر الأوامر إمكانية توجيه مُخرَج أمر، أي نتيجة تنفيذه، إلى أمر آخر عن طريق ما يُسمّى بالأنابيب Pipelines. تُصبح حصيلة الأمر الموجَّه (المُخرَج) معطى (مُدخَلا) للأمر الموجَّه إليه. توجد حيلة أخرى تُعرف بإعادة التوجيه Redirecting تتمثّل في حفظ نتيجة أمر في ملفّ، أو أخذ محتوى ملفّ وجعله مُدخلا للأمر. سنحتاج حتى نستوعب مفهوميْ الأنابيب وإعادة التوجيه إلى فهم تدفّقات الإدخال والإخراج Input and Output Streams. ملحوظة: التدفقات Streams هي سلسلة من المحارف تنتقل من مَصدر إلى وِجهة. المُدخَل Input هو البيانات التي يتلقّاها الأمر أما المُخرَج Output فهو البيانات التي تنتج عن تنفيذ الأمر. الإدخال المعياري Standard input, stdin: وهو المَصدر المبدئي الذي يتلقّى منه الأمر المُدخلات؛ أي لوحة المفاتيح. الإخراج المعياريّ Standard output, stdout: وهو الوجهة المبدئية التي يُرسل إليها الأمر مُخرجاته؛ أي سطر الأوامر (الشّاشة). الخطأ المعياريّ Standard erro, stderr: وهو الوجهة التي يُرسل إليها الأمر رسائل الخطأ في حال حدوثها؛ أي سطر الأوامر. نأخذ الأمر التالي مثالا: $ ls /var /hsoub ls: cannot access /hsoub: No such file or directory /var: account adm cache crash db empty games gopher kerberos lib local lock log mail nis opt preserve run spool tmp yp يطلُب الأمر السابق عرض محتويات المجلديْن var/ و hsoub/. يسير التدفّق من الإدخال المعياري (لوحة المفاتيح) إلى الإخراج المعياري (سطر الأوامر، الشّاشة)؛ أي أن الأمر ls يأخذ المُدخَل var/ من لوحة المفاتيح (الضّغط على زرّ Enter) ثم يرسل نتيجة التنفيذ (المُخرَج، أي لائحة بالمجلّدات والملفّات الموجودة في المجلّد var/) إلى الشاشة لعرضها. بالنّسبة لـ hsoub/ فالمجلّد غير موجود لذا تظهر رسالة خطأ بذلك؛ في هذه الحالة يسير التدفّق من الإدخال المعياري (لوحة المفاتيح) إلى الخطأ المعياري (سطر الأوامر، الشّاشة) الذي يعرض رسالة الخطأ. ربما تطرح السّؤال؛ ما علاقة التدفقات المعياريّة بالأنابيب وإعادة التوجيه؟ الجواب هو أننا أثناء إعادة التوجيه نجعل ملفّا مكان أحد التدفقات المعيارية. مثلا؛ بدل أن تظهر نتيجة الأمر على الشاشة (الإخراج المعياري، stdout) "نوجّهها" إلى ملف. أي أننا نقول للأمر "لا تستخدم الإخراج المعياري، استخدم ملفا مكانه" (ينطبق نفس المبدأ على التدفقات الأخرى). بالنسبة للأنابيب فنطلب من الأمر الأول إرسال مخرجاته ليس إلى الإخراج المعياري بل إلى أمر ثان؛ ونقول للأمر الثاني "خذ مدخلاتك ليس من الإدخال المعياري بل من الأمر الذي قبلك". أعد قراءة الجمل الأخيرة بتأنّ. توجد عوامل Operators للتّوجيه؛ وذلك على النّحو التالي: العامِل العمل < يعيد توجيه الإخراج المعياري (مُخرَج الأمر) إلى ملف. إن كان الملف موجودا فسيُبدَل محتواه وإن لم يكن موجودا فسيُنشَأ. << يعيد توجيه الإخراج المعياري ويلصقه في نهاية ملف. <2 يعيد توجيه الخطأ المعياري إلى ملف. إن كان الملف موجودا فسيُبدَل محتواه وإن لم يكن موجودا فسيُنشَأ. <<2 يعيد توجيه الخطأ المعياري ويلصقه في نهاية ملف <& يعيد توجيه كلّ من الإخراج والخطأ إلى ملف. إن كان الملف موجودا فسيُبدَل محتواه وإن لم يكن موجودا فسيُنشَأ. > يستخدم الملفّ المحدّد مكان الإدخال المعياري (معطى، مُدخَل). <> يُستخدَم الملف المحدّد مكان للإخراج والإدخال يُرمَز للأنبوب بـ | الذي يوضَع بين أمرين (أو أكثر) كما سنرى. إليك أمثلة على إعادة التوجيه واستخدام الأنابيب: إعادة توجيه مخرج أمر إلى ملف نفترض أنك تريد سرد جميع الملفات والمجلدات الموجودة في مجلّد ثم حفظ النتيجة في ملف. يمكن إنجاز هذه المهمّة بالأمر التالي: $ ls -1 /var/mail > mail.txt يسرُد الأمر ls -1 /var/mail محتويات المجلّد var/mail/؛ يطلُب الخيّار 1- من أمر ls طباعة ملف واحد في كل سطر. نستخدم عامل إعادة التوجيه < لنحيل التدفق من الإخراج المعياري (stdout) إلى الملف mail.txt. إعادة توجيه المخرج ورسائل الخطأ في نفس الوقت يوجد على الأنظمة الشبيهة بيونكس ملفّ خاص يسمّى ملفّ العدم (أو الثّقب الأسود). الملفّ موجود على المسار dev/null/ ويتميّز بكونه "يبتلع" كلّ ما يُكتَب فيه فلا يبقى له أثر في النظام. يُستخدَم هذا الملفّ عادة للتخلّص من تدفق مخرجات عمليّة على لينكس عبر توجيهها إليه. $ ls /var /hsoub ls: cannot access /hsoub: No such file or directory /var: account adm cache crash db empty games gopher kerberos lib local lock log mail nis opt preserve run spool tmp yp $ ls /var/hsoub &> /dev/null لاحظ أن تنفيذ الأمر الثاني لا تنتج عنه أية مخرجات ولا رسائل خطأ؛ على عكس الأول الذي يظهر رسالة خطأ بالنسبة للمجلّد غير الموجود ومحتوى المجلّد الآخر. استخدام ملف مدخلا لأمر يُستخدَم أمر cat لطباعة محتوى ملفّ يمرّر اسمه في معطيات الأمر على النحو التالي: $ cat file غير أنه يمكننا استخدام إعادة التوجيه مع الأمر cat؛ مثلا: $ cat < mail.txt جعل مخرج أمر مدخلا لآخر نفترض أنك تريد حساب عدد الملفات والمجلّدات الفرعيّة في المجلّد الحالي. أحد الحلول هو سرد محتويات المجلّد باستخدام الخيّار 1- مع ls ثم استخدام أنبوب | لتمرير هذا المُخرَج إلى أمر wc الذي يحسب عدد الأسطر إذا استُخدم معه الخيار l-؛ كالتالي: $ ls -1 | wc -l راجع مقال مقدمة إلى إعادة توجيه الإدخال/الإخراج (I/O) في لينكس للمزيد حول الموضوع. تجميع الملفات وضغطها يُستخدَم التجميع (أو الأرشفة) لجمع أكثر من ملفّ معا؛ مثلا لإرسالها عبر البريد أو لنقلها إلى وسيط تخزين آخر. تُطبَّق غالبا على الملفّات المجمّعة (الأرشيفات) خوارزميّات ضغط للتقليل من حجم الملفّ. الأمر الأشهر للتّجميع على لينكس هو tar. بالنّسبة للخوارزميّات فالثلاثة التالية هي الأكثر شيوعا على غنو/لينكس: gzip، bzip2 وxz. يعدّ gzip الأقدم من بينها والأقل كفاءة، bzip2 أحدث منه وأحسن؛ أما xz فهو الأحدث من بين الثلاثة والأكثر كفاءة. يشير امتداد الملفّات المضغوطة إلى الخوارزميّة المستخدمة gz. بالنسبة لـgzip، وbz2. بالنسبة لـbzip2 وxz. بالسبة لخوارزميّة xz. يجمع الأمر التالي الملفّين file1 و file2 في أرشيف باسم archive.tar: $ tar -cf archive.tar file1 file2 يُخبر الخيّار c- الأمر tar أننا بصدد إنشاء ملف مجمَّع؛ أما الخيّار f- فيحدّد اسم ملف التجميع؛ الذي يسبق اسمُه اسمَ الملفات التي نريد جمعها. ملحوظة 1: إن كنت تريد استخدام أكثر من خيار في نفس الوقت فيمكنك كتابتها ملتصقة مع وجود الشرطة - أمامها. تنطيق هذه الملاحظة على الخيارات المختصرة . ملحوظة 2: غالبا توجد أكثر من طريقة لكتابة الخيّار، واحدة مختصرة مثل c- وأخرى مسهبة مثل create--. تشير صفحة التوثيق إلى الاثنين. ملحوظة 3: ابدأ عند كتابة خيارات tar بتلك التي تحدّد الوضع (الإنشاء، الاستخراج، …إلخ) واجعل الخيار f هو الأخير. في مايلي بعض الخيارات المهمة المستعملة مع أمر tar لتجميع الملفات. ينبغي أولا تحديد ما نريده من الأمر tar؛ هل نريد إنشاء أرشيف أو استخراج ملفات من أرشيف أم شيئا آخر. تحدّد الخيارات التاليّة الأوضاع الأساسيّة التي يعمل عليها tar. الخيار العمل c إنشاء ملف تجميع A إضافة ملفات تجميع إلى ملف تجميع آخر r إضافة ملفّات (ليست ملفات تجميع) إلى ملفّ تجميع u وضع النسخ الأحدث من الملفاّت مكان النّسخ القديمة ضمن ملفّ التجميع d مقارنة ملفات ضمن الأرشيف بتلك بتلك الموجودة في مجلّد t سرد محتوى الأرشيف x استخراج ملفّات من الأرشيف ملحوظة: لا يمكن استخدام خيّاريْن من القائمة أعلاه في نفس الوقت. تأتي بعد تحديد وضع العمل خيّارات تكيّف عمل tar؛ ومن أهمها التاليّة. الخيار العمل C الانتقال إلى مجلّد معيَّن قبل بدء عمل الأمر p المحافظة على أذون الملفّات v سرد جميع الملفّات المقروءة أو المستخرجة. يُظهر هذا الخيار عند استخدامه في الوضع t- المشار إليه حجمَ الملفّات، مالكها والتاريخ. '--exclude='FILE يستبعد الملفّ FILE من الأرشيف z يستعمل خوارزميّة gzip لضغط الأرشيف j يستعمل خوارزميّة bzip2 لضغط الأرشيف J يستعمل خوارزميّة xz لضغط الأرشيف ملحوظة: يأخذ tar مبدئيا مسارات نسبية، يظهر الخطأ tar: Removing leading / from member names عند إعطاء مسار مطلق. هذا السلوك معد لأسباب أمنية، لذا ينصح بالالتزام بمسارات نسبية، وإن كان لابد من استخدام مسارات مطلقة يمكن استخدام الخيار P-؛ مثلا على النحو التالي: $ tar -cPf archive.tar /home/academy/ أمثلة على استخدام أمر tar إنشاء ملف تجميع وضغطه: ينشئ الأمر التالي ملف تجميع لجميع الملفات الموجودة في المجلّد hsoub/academy: $ tar cf academy.tar hsoub/academy/* نختار خوارزميّة ضغط إن أردنا ضغط الملفّ أثناء التجميع (لاحظ امتداد الملف والخيّار المستخدم): خوارزميّة gzip: $ tar czf academy.tar.gz hsoub/academy/* خوارزميّة bzip2: $ tar cjf academy.tar.bzp2 hsoub/academy/* خوارزميّة xz: $ tar cJf academy.tar.xz hsoub/academy/* المحافظة على الأذون والملكيّة أثناء تجميع الملفات: ترغب أحيانا في ترك أذون الملفّات وملكيتها كما هي أثناء تجميعها أو ضغطها؛ مثلا أثناء النسخ الاحتياطي لمجلدات مستخدمي النظام. يحمل ملف التجميع في السلوك المبدئي لأمر tar أذونَ وصلاحياتِ المستخدِم الذي ينفذ الأمر. نستخدم الخيّارين same-permissions-- و same-owner-- في المثال التالي للمحافظة على الصلاحيّات والأذون: $ tar cJf academy.tar.xz hsoub/academy/* --same-permissions --same-owner إنشاء الوصلات الصلبة والرمزية توجد في لينكس نوعيّة من الملفات تسمى الوصلات Links وهي مؤشرات تحيل إلى ملفّ آخر. تنقسم الوصلات إلى صلبة Hard ورمزيّة Symbolic (أو ليّنة Soft). تشير الوصلات الصّلبة إلى نفس مساحة القرص التي يستغلها الملف؛ بينما تشير الوصلات اللينة إلى أسماء الملفات. يعني هذا أنك عند حذف وصلة صلبة فأنت تحذف الملف من القرص الصّلب؛ بينما عندما تحذف وصلة رمزيّة فالمحذوف هو المؤشر فقط. الخلاصة هي أن الوصلة الصّلبة تحيل لبيانات على القرص بينما الوصلة الرمزيّة تحيل لاسم الملف فقط. من الفروقات بين النوعين أن الوصلة الصلبة لا تأخذ مساحة من القرص (هذه المساحة موجودة أصلا وأخذها الملف الذي تشير إليه الوصلة) بينما تأخذ الوصلة الرمزية مساحة صغيرة. يسهل نقل الوصلات الرمزيّة بين نظم الملفات على عكس الوصلات الصّلبة. يُستخدم الأمر ln لإنشاء الوصلات. إن لم نحدّد خيارا مع الأمر فسينشئ وصلة صلبة. لإنشاء وصلة لينة نستخدم الخيار s-. نمرّر للأمر معطيَيْن؛ الأول هو الملف الهدف (الذي نريد إنشاء وصلة له) والثاني اسم الوصلة. وصلة صلبة باسم LINK_NAME تشير إلى الملف TARGET: $ ln TARGET LINK_NAME وصلة رمزية باسم LINK_NAME تشير إلى الملف TARGET: $ ln -s TARGET LINK_NAME أمثلة على الوصلات لا توجد طريقة أفضل من إنشاء الوصلات لفهم كيفيّة عملها. نبدأ بإنشاء مجلد ننشئ فيه ملفات هذا المثال، ثم ننتقل إليه: $ mkdir links_folder $ cd links_folder ثم ننشئ ملفا باسم links_test ونكتب فيه بضعة كلمات: $ touch links_test $ echo "Testing links..." > links_test نستخدم الآن الأمر ln لإنشاء وصلة صلبة باسم hard_link تشير إلى الملف links_test: $ ln links_test hard_link ثم وصلة رمزية باسم soft_link تشير لنفس الملفّ: $ ln -s links_test soft_link نسرُد محتوى المجلد: $ ls -l total 8 -rw-rw-r--. 2 meyil meyil 17 Apr 29 16:57 hard_link -rw-rw-r--. 2 meyil meyil 17 Apr 29 16:57 links_test lrwxrwxrwx. 1 meyil meyil 10 Apr 29 16:57 soft_link -> links_test لاحظ أن معلومات الملفيْن hard_link وlinks_test متطابقة تماما. على عكس الملف soft_link الذي توجد أمامه علامة تدلّ على الملفّ الذي يشير إليه. نجرّب الآن عرض محتويات الملفّات الثلاثة: $ cat hard_link Testing links... $ cat soft_link Testing links... $ cat links_test Testing links... لا فرق من هذه الناحية، نفس المحتوى. نجرّب حذف الملفّ الأصلي: $ rm links_test ثم نعرض محتوى الوصلة الصّلبة: $ cat hard_link Testing links... نفس المحتوى، لم يتغيّر شيء. ماذا لو عرضنا محتوى الوصلة الرمزيّة؟: $ cat soft_link cat: soft_link: No such file or directory تقول رسالة الخطأ إن الملف soft_link غير موجود؛ ولكنه يظهر عند عرض محتويات المجلّد: ls -l total 4 -rw-rw-r--. 1 meyil meyil 17 Apr 29 17:07 hard_link lrwxrwxrwx. 1 meyil meyil 10 Apr 29 17:08 soft_link -> links_test يعود السبب في ذلك إلى أن الملفّ soft_link يشير إلى اسم الملف links_test الذي لم يعد موجودا؛ أما الوصلة الصلبة فلديها إمكانيّة الوصول المباشر إلى البيانات على القرص الصّلب. يكثُر استخدام الوصلات الرمزية للإشارة إلى ملفّات تتغيّر باستمرار. لنفرض مثلا أن برنامجا ما يحتاج لمكتبة برمجيّة تُحدّث باستمرار؛ بدلا من كتابة اسم المكتبة وإصدارها مباشرة في البرنامج وتحديثه عند كل تحديث للمكتبة، بدلا منذ ذلك ننشئ وصلة رمزية نستخدمها في البرنامج وعند تحديث المكتبة نحدّث الوصلة الرمزية لتشير إلى الإصدار الجديد. هذه الطريقة أسهل، أسرع وآمَن؛ خصوصا إذا كان رابط المكتبة يظهر عشرات المرات في البرنامج. خلاصة تحدّثنا في هذا المقال عن الأوامر الأهم في إدارة الملفّات والمجلدات علي Red Hat Enterprise Linux ولينكس عموما. تأكد من مراجعة ما ورد في هذا المقال لاستيعابه ومتابعة الدروس الأخرى في السّلسة. إن كانت لديك إضافات فاستخدم مربّع التعليقات. يوجد أيضا قسم للأسئلة استخدمه لطرح استشكالاتك. ترجمة -وبتصرّف- للمقال RHCSA Series: How to Perform File and Directory Management – Part 2 لصاحبه Gabriel Cánepa.
  11. يعالج هذا الدرس، الأول من سلسلة دروس عن شهادة RHCSA، أساسيّات التعامل مع الطرفيّة Terminal في RHEL. سنفترض أن لديك توزيعة RHEL 7 مثبّتة وجاهزة للعمل؛ يمكنك الاستعانة بدرس تثبيت Red Hat Enterprise Linux باستخدام VirtualBox لتجهيز بيئة للعمل عليها. بنية الأوامر في Shell لا تثبّت -عادةً- واجهة رسومية في الخواديم؛ لذا ستجد نفسك في الغالب أمام واجهة نصيّة تمثّلها الصّدفة Shell التي تقدّم محثّا Prompt ينتظر منك إدخال أوامر تتفاعل عن طريقها مع مختلف خدمات نظام التّشغيل. بالنسبة للخواديم بواجهة رسوميّة فيمكن تشغيل برنامج الطرفيّة Terminal وستظهر نافذة بمحثّ تُكتَب فيه الأوامر. يُنفَّذ الأمر في الطرفيّة بالضّغط على زرّ Enter في لوحة المفاتيح، ويتكوّن من جزأين: اسم الأمر ومعطيات Arguments. تُغيّر معطياتٌ (تُسمّى خيارات Options، وتكون مسبوقة عادة بشرطة -) سلوكَ الأمر على نحوّ محدَّد سلفا؛ بينما تعيّن المعطيات الأخرى الكائنات التي سيعمل عليها الأمر. ملحوظة: برنامج الصّدفة المبدئي Default في RHEL وكثير من توزيعات لينكس هو Bash (اختصار لـBourne again shell). توجد برامج أخرى للصّدفة يمكن تثبيتها مثل C Shell و Ksh. الحصول على معلومات عن الأوامر توجد وسائل عدّة يمكن من خلالها الحصول على معلومات مفصَّلة عن أوامر الصّدفة. الأوامر المضمنة Built-in والأوامر المنفصلة تنقسم الأوامر في الصّدفة إلى نوعين؛ أوامر مضمَّنة وأخرى مستقلة أو منفصلة. تعدّ الأولى جزءًا من الصّدفة نفسها أمّا الثانيّة فهي برامج تُثبَّت على النظام إما مبدئيًّا أو يُثبّتها المستخدم. يساعد الأمر type في تحديد ما إذا كان أمر مّا مضمَّنا في الصّدفة أو أن حزمة (برنامجا) آخر منفصلة عن الصّدفة توفّره. يمكّننا هذا الفصل بين طبيعة الأوامر أن نعرف أين يمكننا الحصول على معلومات أكثر عن أمر عندما نحتاج لذلك. إن كان الأمر مضمّنا في الصّدفة فسنبحث عن معلوماته في صفحة التوثيق الخاصّة بها؛ أما إذا كان منفصلا عنها فسنبحث عن المعلومات عنه في صفحة التوثيق الخاصّة بالبرنامج الذي يوفّره. $ type cd cd is a shell builtin $ type top top is /usr/bin/top $ type type type is a shell builtin $ type less less is /usr/bin/less ملحوظة: تشير علامة الدولار $ إلى محثّ المستخدم العادي، وليست جزءا من الأمر. السّطر أو الأسطر الموالية للسّطر الذي توجد به علامة الدولار هو نتيجة تنفيذ الأمر. في الأمثلة أعلاه ننفّذ الأمر type ونمرّر له اسم الأمر الذي نريد معرفة هل هو مضمَّن في الصّدفة أم منفصل عنها. تظهر بعد تنفيذ كل أمر نتيجة؛ تشير النتيجة: cd is a shell builtin إلى أن الأمر cd مضمَّن في الصّدفة؛ نفس الشيء ينطبق على type. إن لم يكن الأمر مضمّنا في الصّدفة، بمعنى أن حزمةً منفصلةً توفّره، فسيظهر مسار الحزمة كما هو الحال مع أمرَي top وless في الأمثلة السّابقة. من بين الأوامر المعروفة المضّمنة في الصّدفة: أمر echo الذي يطبع سلسلة محارف. أمر pwd الذي يطبع مسار المجلّد الحالي. توثيق الأوامر يمكننا الاستعانة بصفحات التوثيق عند الشّك في عمل أمر مّا. تُستدعى صفحات التوثيق بالأمر man. توجد إضافة إلى صفحات توثيق الأوامر صفحاتُ توثيق خاصّة بالملفّات المهمّة مثل hosts ،fstab و inittab؛ دوال المكتبات البرمجيّة، الصّدفات، الأجهزة الطّرفية وميزات أخرى. نستخدم الأمر man مثلا على النحو التالي لعرض معلومات عن عمل الأمر uname: $ man uname في ما يلي مقتطَف من النتيجة: UNAME(1) User Commands UNAME(1) NAME uname - print system information SYNOPSIS uname [OPTION]... DESCRIPTION Print certain system information. With no OPTION, same as -s يوجد مصدر آخر مهمّ للبحث عن معلومات أمر مّا وهو أمر info الذي يقدّم عادة معلومات أشمل من أمر man. يُمرَّر اسم الأمر الذي نريد معلومات عنه إلى info على النّحو التالي: $ info ls $ info cut كما تتوفّر ملفّات مساعدة في المجلّدات الفرعيّة للمجلّد usr/share/doc/. حاول التعوّد على استخدام الطّرق الثلاث المذكورة أعلاه للبحث عن معلومات حول أمر تريد استخدامه أو تشّك في معطياته. انتبه خصوصا للمعلومات المذكورة عن صيغة استخدام كلّ أمر. أوامر أساسية أمر exec ينفّذ أمرُ exec الأمرَ الممرّر في المعطى. في الغالب يمكن تنفيذ الأمر الأخير دون الحاجة لتمريره إلى exec إلا أنّ خصوصيّة exec هي أنها تنشئ عمليّة Process جديدة تحلّ مكان عمليّة الصّدفة بدلا من العمل بالتوازي معها. عندما تنتهي العمليّة الجديدة تنتهي معها عمليّة الصّدفة. نقارن بين الحالتي التاليتيْن لتوضيح المسألة: $ top $ exec top ننفّذ في الحالة الأولى أمر top الذي يعرض قائمة بالعمليّات العاملة على النظام؛ ثم نضغط الزّر q لإنهاء الأمر؛ ستلاحظ أن المحثّ يظهر من جديد. في الحالة الثّانيّة يُنفَّذ الأمر top وتظهر قائمة بالعمليّات؛ ولكن عند الضّغط على زر q تختفي الطرفيّة. أمر export يُستخدَم أمر export لـ”تصدير” متغيّر إلى متغيّرات النّظام. متغيّرات النّظام (أو متغيّرات البيئة Environment variables) هي مجموعة من المتغيّرات تؤثّر قيّمها على سلوك البرامج أثناء تنفيذها؛ بعضها معدّ مبدئيًّا مع النّظام ويُتاح الوصول إليه لجميع البرامج. لكي يُضاف متغيّر إلى هذه المتغيّرات فيجب أن يُصدَّر إليها؛ وهذا هو عمل الأمر export. راجع السؤال التالي من قسم الأسئلة والأجوبة ماذا يعني متغير النظام PATH؟ أو درس الطريق نحو فهم متغير المسار PATH لمعلومات أكثر ومثال على متغيّرات النّظام. أمر history يعرض الأمرُ لائحة بالأوامر التي نفّذها الحساب الذي تستخدمه على النظام، مع ترقيمها. تمكن إعادة تنفيذ الأمر بكتابة رقمه في اللائحة مسبوقا بعلامة تعجّب. مثلا: $ history 13 tty 14 exec top 15 ps -ef | grep bash 16 ps -ef | grep 3817 | grep -v grep 17 ps -ef | grep bash 18 tty 19 exec top 20 ps -ef | grep bash 21 ps -ef | grep 4692 22 ps -ef | grep 4692 | grep -v 23 ps -ef | grep 4692 | grep -v grep 24 exit 25 history لإعادة تنفيذ الأمر رقم 19 (أي exec top): !19 يمكننا أيضا البحثُ في سجلّ الأوامر بالضّّغط على الزّريْن Ctrl وr ثم البدء في كتابة الأمر الذي نبحث عنه وستظهر الأوامر الموافقة لما نكتب مباشرة مع إمكانيّة التعديل عليها. يُحتَفَظ بلائحة الأوامر في ملف باسم bash_history. يوجد بالمجلَّد الشخصيّ للمستخدِم. تحتفظ الصّدفة مبدئيًّا بآخر 1000 أمر نفّذها المستخدم؛ إلا أن بإمكانك تغيير هذه القيمة بالتعديل على قيمة متغيّر النّظام Environment variable الذي يحتفظ بهذه القيمة وهو HISTSIZE. يمكن استخدام أمر export لتعديل قيمة المتغيّر. نستخدم في المثال التالي أمر echo لعرض قيمة المتغيّر قبل التعديل ثم نعدّله ونطبع قيمته الجديدة (لاحظ استخدام علامة $ قبل اسم المتغير عند تمريره للأمر echo): $ echo $HISTSIZE 1000 $ export HISTSIZE=2000 $ echo $HISTSIZE 2000 إلا أن طريقة التغيير هذه ليست دائمة؛ إذ سيعيد النّظام قيمة HISTSIZE المبدئية إذا أعيد تشغيله أو عند الخروج من الطرفيّة. لجعل التّعديل دائما نعدّل الملف bashrc. يدويًّا ونعيّن قيمة المتغيّر HISTSIZE (لا تترك فراغا بين علامة = وطرفيّ العمليّة): HISTSIZE=2000 ملحوظة: لن يُعتمَد هذا التعديل إلا عند فتح جلسة جديدة. أمر alias الاختصارات Aliases هي صيغ مختصرة لأمر أطول. إن كانت ملفّات موقع الويب توجد على المسار /var/www/ ونستخدم أمر cd للانتقال إليها على النحو التالي: cd /var/www فيمكننا تعريف كنية (اختصار) www تعمل كما لو أنها أمر ويؤدي تنفيذها إلى الانتقال إلى المجلّد المذكور. يعرض الأمر alias إن نُفِّذ دون معطيات، أو بتمرير المعطى p-، لائحة بالاختصارات المضبوطة. إن أردت إعداد اختصار جديد فيمكنك ذلك بذكر اسم الاختصار ثم الأمر الذي تحلّ محله على النحو التالي: $ alias ls='ls --color=auto' يغيّر الاختصار السّابقة عمل الأمر ls بإضافة معطيات نريد أن تعمل مبدئيًّا؛ إظهار كلّ نوع من الملفات بلون مختلف عند تنفيذ أمر ls. ملحوظة: يمكنك إعطاء أي اسم تريده للاختصار؛ حتى ولو كان اسم أمر موجود سلفا؛ لذا ينبغي الحذر في اختيار أسماء الاختصاصرات. كما يمكنك أيضا إدراج أكثر من أمر في الاختصار على أن تفصل بينها بنقطة فاصلة ;: $ alias myNewCommand='cd /usr/bin; ls; cd; clear' يعمل الأمر alias على تعديل الاختصارات بالنسبة للجلسة الحاليّة دون أن تكون التغييرات دائمة. لجعل الاختصارات تعمل بعد إعادة تشغيل النّظام أو بعد الخروج من الجلسة الحاليّة أضفها إلى الملف bashrc. الموجود في ملفك الشّخصي؛ إختصار واحد في كلّ سطر (في آخر الملفّ، تحت سطر User specific aliases and functions #)؛ مثلا: alias myNewCommand='cd /usr/bin; ls; cd; clear' ستُعتمَد التعديلات بعد الخروج من الجلسة الحاليّة. إن أردت أمثلة أكثر تفصيلا عن الاختصارات فدرس مقدّمة إلى اختصارات الطرفية (Aliases) ودوالها - أنجز مهامك بسرعة! يقدّمها. أمر exit ينهي كلّ من أمري exit وlogout جلسة الصّدفة. الفرق بين الاثنين أن أمر exit ينهي أي صدفة مهما كان نوعها بينما ينهي أمر logout صدفات تسجيل الدّخول؛ وهي تلك المشغَّلة تلقائيًّا عند تسجيل الدّخول من الواجهة النصيّة (الواجهة غير الرّسوميّة). ملحوظة: الصّدفة Shell هي اسم عامّ لأي برنامج يعطيك واجهة نصيّة للتّفاعل مع النّظام. توجد أنواع عدّة من الصّدفات؛ التفاعليّة Interactive، غير التّفاعليّة، صدفات تسجيل الدّخول Login وصدفات ما بعد الدخول Non-login. صدفات تسجيل الدّخول هي جزء من عمليّة الدّخول إلى النّظام (مثلا في خادوم ليست لديه واجهة رسوميّة)؛ أما صدفات ما بعد الدخول فيشّغلها المستخدم بعد ولوجه إلى النّظام؛ ومن أمثلتها برنامج Terminal في الواجهة الرّسومية. جرّب تنفيذ الأمر logout في برنامج الطرفيّة في الواجهة الرسوميّة ولاحظ الرسالة التي تظهر. أمر expand لا تتعامل بعض البرامج المعالجة النصيّة جيّدا مع علامة الجدولة Tabulation وتحتاج بالتالي إلى استبدال المسافة بها. يؤدّي أمر expand، الذي يأتي ضمن حزمة برامج coreutils، هذه المهمة. سنفترض أن لدينا ملفًّا باسم numbers (امتداد الملفات ليس ذا أهميّة كبيرة في لينكس) به أرقام تفصل بينها علامات جدولة. نستخدم أمر cat لعرض محتوى الملفّ في الطّرفيّة: $ cat numbers one two three four five six seven eight nine ten twelve thirteen نضع مسافات مكان علامات الجدولة كالتالي: $ expand --tabs=1 numbers يحدّد المعطى tabs-- عدد المسافات التي نضعها مكان الجدولة (مسافة واحدة في المثال). تظهر النتيجة على النحو التالي: one two three four five six seven eight nine ten twelve thirteen لاحظ أن التغييرات لا تحدُث على الملفّ، بل تُطبع مباشرة في الطّرفيّة (التي تُعرَف بـالإدخال المعياري Standard input, stdin). إن رغبت في الإجراء المعاكس لعمل expand (بمعني إحلال علامات جدولة مكان المسافات) فأمر unexpand موجود لهذا الغرض ويُستعمَل بنفس المبدأ. أمرا head و tail يطبع أمر head، إن استُخدِم دون خيارات، الأسطرَ العشرة الأولى من الملفّ المذكور اسمُه في المعطى. يمكن تغيير هذا السلوك المبدئيّ باستخدام خيّار n- متبوعا برقم يمثّل عدد الأسطر التي تود إظهارها: $ head -n3 /etc/passwd يعمل أمر tail بطريقة مشابهة لكنّه بدلا من طباعة الأسطر الأولى يطبَع الأسطر الأخيرة. $ tail -n3 /etc/passwd يوفّر أمر tail باستخدام خيّار f- ميزةَ عرض الأسطر الأخيرة من ملف فور إضافتها إليه. يمكن استخدام هذه الميزة مثلا لمتابعة سجلّ Log في الوقت الحقيقيّ: $ tail -f file.log أمر paste يأخذ أمر paste ملفيّن نصّييْن بمحاذاة أسطُر الملفّ الأول منهما بجانب الثاني ووضع فاصل بين السّطريْن. إن استُخدِم الأمر دون تحديد الفاصل فسيُستخدَم الفاصل المبدئي (علامة الجدولة). إن أردت تخصيص الفاصل فيمكن استخدام الخيّار d-. يطبع الأمر النتيجة مباشرة في الطّرفيّة دون تعديل على أي من الملفّيْن. في المثال التالي نُظهِر محتوى الملفّيْن file1 و file2 بالأمر cat ثم نستخدم paste لدمج الاثنيْن: $ cat file1 1 2 3 4 $ cat file 2 one two three four $ paste -d= file1 file2 1=one 2=two 3=three 4=four 5=five 6=six استخدمنا في المثال السّابق الخيار d- لتحديد الفاصل؛ وهو في هذه الحالة علامة التساوي =. لاحظ ألا وجود لمسافة بين الخيار d- والعلامة التي اخترناها للفصل بين سطريْ الملفّين؛ كما أن أسطُر الملفّ في المعطى الأول تأتي أولا تليها علامة الفصل ثم أسطر الملف الثاني. أمر split يعمل الأمر split على تقسيم ملفّ إلى ملفّيْن أو أكثر وتسميّتهما اعتمادا على لاحقة Suffix من اختيارنا. لدينا معايير تقسيم عدّة للاختيّار بينها؛ الحجم Size، عدد الأسطُر، عدد الملفات الناتجة وطبيعتها. بالنسبة للّاحقة فيمكن أن تكون أحرفا أو أرقاما. يقسّم الأمر التالي الملف bash.pdf إلى ملفّات حجمُ كلّ واحد منها 50KB. تبدأ الملفّات الناتجة بـ_bash يليها عدد. $ split -b 50KB -d bash.pdf bash_ الخيّار b- يحدّد معيار التقسيم بحجم 50KB؛ الخيّار d- يحدّد نوعيّة اللّاحقة (أعداد مرتَّبة)، bash.pdf اسم الملفّ الذي نريد تقسيمه و_bash السّابقة التي تبدأ بها أسماء الملفّات المتحصَّل عليها. مثال على النتجية: bash_00 bash_01 bash_02 bash_03 bash_04 bash_05 لو لم نستخدم الخيّار d- لكانت النتيجة كالتالي: bash_aa bash_ab bash_ac bash_ad bash_ae bash_af إن أردت دمج الملفّات الناتجة والحصول على الملفّ الأصلي فأمر cat يفي بالغرض: $ cat bash_00 bash_01 bash_02 bash_03 bash_04 bash_05 > bash.pdf أمر tr يُستخدَم أمر tr لإحلال محارف Characters مكان أخرى. نستخدم في المثال التالي ملف file2 السابق وننفذ عليه أمر tr لإحلال O مكان o : $ cat file2 | tr o O يُستخدَم الأنبوب Pipe (|) لتوجيه نتيجة أمر إلى آخر؛ تُصبِح نتيجة الأمر اﻷول في هذه الحالة هي معطى الأمر الثاني. في المثال نطبع محتوى الملف file2 ثم نمرّره للأمر tr؛ تظهر النتيجة في الطرفيّة: One twO three fOur five six يمكن تطبيق التحويل على مجال من الأحرف؛ في المثال التالي نُحوِّل جميع الأحرف الصّغيرة في الملف file2 إلى أحرف كبيرة: $ cat file2 | tr [a-z] [A-Z] ONE TWO THREE FOUR FIVE SIX أمرا sort و uniq يتيح أمر uniq إمكانيّة إظهار الأسطر المكرّرة في ملف نصّي أو حذفها. يجب الانتباه إلى أن uniq لا يكشف التكرار إلا إذا كانت الأسطُر المتكرّرة متتالية. لذا فإن تنفيذ uniq يسبقه غالبا ترتيب الملفّ بالأمر sort. يفترض أمر sort مبدئيّا أن السّطر يتكوّن من حقول عدّة تفصل بينها مسافات؛ ويعتمد الحقل الأول لترتيب أسطُر الملف. لاحظ المثال التالي وكيف حذف أمر uniq أحد الأسطر بعد ترتيب الملفّ بـ sort: $ cat file3 Jan Doe 111 Dave Null 114 Peter Cramp 113 Dave Smith 112 Dave Null 114 $ sort file3 | uniq Dave Null 114 Dave Smith 112 Jan Doe 111 Peter Cramp 113 يمكّننا خيار k- متبوعا برقم يمثّل موقع الحقل في السّطر (الثاني، الثالث، …) من اختيّار حقل مغاير للحقل المبدئي في ترتيب الملف. لاحظ الترتيب في المثالين: $ sort -k2 file3 | uniq Peter Cramp 113 Jan Doe 111 Dave Null 114 Dave Smith 112 $ sort -k3 file3 | uniqJan Doe 111 Dave Smith 112 Peter Cramp 113 Dave Null 114 يتيح أمر sort كذلك حذف الأسطُر المكرّرة مباشرة دون الحاجة لتمرير نتيجة الترتيب إلى uniq وذلك باستخدام الخيّار u-: $ sort -u file3 Dave Null 114 Dave Smith 112 Jan Doe 111 Peter Cramp 113 أمر cut يستخرج أمر cut أجزاءً من أسطر ويعرضها في الطّرفيّة. يعتمد الأمر على عدد البايتات (الخيار b-)، المحارف (c-) أو الحقول (f-). يتّخذ أمر cut مبدئيا المسافة فاصلا بين الحقول؛ إلا أن بالإمكان تخصيص الفاصل بالخيّار d-. نستخدم في المثال التالي أمر cut لاستخراج الحقليْن الأول والثالث من الملف etc/passwd/ اعتمادا على أنه يُفصَل بين الحقول بعلامة :. cut -d: -f1,3 /etc/passwd يحدّد d- الفاصل بين الحقول (:)، و f- الحقول التي نستبقيها (الحقل الأول والثالث). خاتمة رأينا في هذا الدّرس أساسيّات التعامل مع الطّرفيّة، كيفيةَ الحصول على المساعدة عندما نحتاج إليها وأوامرَ هامّة لمعالجة الملفات النّصيّة من سطر الأوامر. استخدم وسائل المساعدة التي تحدثنا عنها للحصول على معلومات أكثر عن الأوامر الواردة في المقال. يمكنك استخدام مربع التعليقات في الأسفل لطرح استشكالات عن موضوع الدّرس. ترجمة -وبتصرّف- للمقال RHCSA Series: Reviewing Essential Commands & System Documentation لصاحبه Gabriel Cánepa.
  12. تعدّ شركة Red Hat إحدى الشركات الرائدة في مجال الحلول المتعلّقة بأنظمة لينكس، فهي أول شركة متخصّصة في البرمجيات مفتوحة المصدر تتجاوز عائداتها ملياري دولار، أربع سنوات فقط بعد تسجيل اسمها أولَ شركة في هذا المجال تتجاوز مليار دولار، سنة 2012. تُطوِّر الشركة توزيعة Red Hat Entreprise Linux المعروفة اختصارا بـ RHEL وتسوّقها عبر نظام الاشتراكات، وهي من أكثر توزيعات لينكس استخداما في المؤسسات الكبيرة؛ إذ أن أكثر من 90 بالمئة من الشركات الخمسمئة الكبرى تعتمد على RHEL لتشغيل بنيتها حسب بيانات الشركة المتعلّقة بزبنائها سنة 2014. توفّر Red Hat، إلى جانب تطويرها لتوزيعة لينكس وحلول برمجية أخرى (مثل خادوم التطبيقات JBoss)، برامجَ تدريبية وشهاداتٍ متخصّصة في إدارة الأنظمة التي تعمل بتوزيعة RHEL أو حلول Red Hat الأخرى. يشبه مسار الشهادات المتخصصة في RHEL مسارات تقدّمها شركات تقنية أخرى من حيث تتالي الشهادات: يبدأ المستوى الأول من المسار بشهادة مدير أنظمة Red Hat Certified System Administrator, RHCSA تليها شهادة مهندس Red Hat Certified Engineer, RHCE ثم شهادة مصمّم نُظُم Red Hat Certified Architect, RHCA تمثّل شهادة RHCSA مدخَل المسار ويجب على المترشّح الحصولُ عليها قبل أن يستطيع التقدّم لبقية الشهادات؛ أما شهادة RHCA فهي الأعلى في السّلم وينبغي للمترشّح النجاح في الشهادتين الأخرييْن قبل التقدّم للحصول عليها. تتخذ شهادات Red Hat من الاختبارات العمليّة وسيلةً لتقويم أداء المترشح بدلا من الاكتفاء بطرح أسئلة بخيارات متعدّدة. تدوم الاختبارات ساعتين ونصف على الأقل، يُطلَب من المترشح إكمال مهامّ تتعلّق بأهداف الاختبار. شهادة مدير أنظمة RHCSA يحصُل المترشح على شهادة مدير أنظمة RHCSA بعد تجاوزه لاختبار EX200 الذي يقوِّم معرفة المترشح ومهاراته بأساسيات إدارة الأنظمة المبنية على RHEL. يُنظَر إلى المهارات المطلوبة لتجاوز اختبار EX200 على أنها مشتركة في مختلف البيئات ومخطّطات النشر Deployment المعتمدة على التوزيعة. يشمل اختبار الشهادة المواضيع التالية: معرفة الأدوات الأساسية للتعامل مع الملفات، المجلّدات، سطر الأوامر والتوثيق Documentation؛ واستيعاب آلية استخدامها. تشغيل أنظمة RHEL بما في ذلك تحديد مستوى التشغيل Run level عند الإقلاع، التعرّف على العمليات Processes، تشغيل الآلات الوهمية Virtual machines وإيقافها؛ والتحكّم في الخدمات Services. ضبط وسائل التخزين المحليّة Local storage. إنشاء أنظمة الملفات File systems وإعدادها؛ بما في ذلك خاصيّات النّظام مثل الأذونات، التعميّة Encryption، لوائح التحكّم في الوصول Access control lists وغيرها. نشر الأنظمة، إعدادها وصيانتها. يدخل في هذا الإطار تثبيت البرامج، تحديثها وخدمات النظام الأساسية. إدارة المستخدمين والمجموعات، بما ذلك استخدامُ دليل مركزيّ للاستيثاق Authentication. إدارة الأمان؛ ومنها إعداد الجدار النّاريّ Firewall و SELinux. شهادة RHCE وهي الشهادة الثانيّة في مسار شهادات RHEL. يجب على المتقدّم لهذه الشهادة أن يكون حاصلا على شهادة RHCSA صالحة (الاختبار EX200) وأن يجتاز اختبار EX300. يُنتَظر من المتقدّمين للحصول على شهادة RHCE أن يكونوا على دراية جيّدة بإدارة أنظمة RHEL مع خبرة سنة إلى ثلاث سنوات في العمل على توزيعة RHEL في إطار مؤسسي. يشمل اختبار EX300 المواضيع التالية: إعداد المسارات الثابتة Static routes، ترشيح الحزم Packet filtering، وترجمة عناوين الشبكة Network address translation, NAT. ضبط معطيات الشغيل الخاصّة بنواة لينكس. إعداد وسائط التّخزين من نوع iSCSI. إنتاج تقارير عن استخدام موارد النظام واستغلالها. استخدام سكربتات Shell لتشغيل أنشطة صيانة النظام آليّا. إعداد الولوج إلى النظام بما في ذلك الولوج عن بعد. إعداد النظام لتوفير خدمات الشبكة مثل HTTP/HTTPS، FTP، نظام الملفات الشبكي NFS، تشارك الملفات بميثاق SMB، البريد الإلكتروني بميثاق SMTP، الولوج عن بعد بـSSH ومزامنة التوقيت بميثاق NTP. شهادة RHCA وتعدّ الشهادة الأكثر تقدّما من بين شهادات RHEL. تتوجّه الشهادة إلى الخبراء الذين يريدون التّدليل على قدرتهم على استخدام RHEL وتقنيات Red Hat أخرى ضمن بيئات عمل موجودة أو يُخطَّط لإنشائها. ينبغي على المتقدّم لهذه الشهادة - إضافة إلى امتلاكه لشهادتي RHCSA وRHCE سابقتيْ الذكر - تجاوز خمسة اختبارات في أحد المجالات التالية: مراكز البيانات Datacenters (اختيار خمسة من بين تسعة اختبارات): يتوجّه للحاصلين على شهادة RHCE ممّن يودون إبراز قدراتهم على التخطيط لمراكز بيانات تعتمد على حلول Red Hat وتشغيلها. الحوسبة السحابيّة Cloud (الاختيار من بين ثمانية اختبارات): يُنتظر من المتقدّمين للتخصّص في هذا المجال الفهمُ العميق لحلول Red Hat في مجال إنشاء بنى تحتيّة سحابيّة والعمل عليها. منصات التطبيقات Application platform (تجاوز خمسة اختبارات): يتركّز اهتمام هذا المجال على الأدوات الخاصّة ببناء التطبيقات وإدارتها. تطوير التطبيقات Application development (الاختيار من بين ثمانية اختبارات): يختصّ بالمهارات اللّازمة لتطوير تطبيقات المؤسسات، دمجها Integration وتصميم بناها التحتيّة. العمليّات والتطوير DevOps (خمسة اختبارات؛ بعضها في طور التّحضير): تركّز الاختبارات في هذا المجال على المهارات اللّازمة للتسريع من نقل التطبيقات بين بيئات العمل والانتقال بها بين الأطوار المختلفة من التطوير إلى العمل في بيئة الإنتاج مرورا بالبناء والاختبار. تعدّ الحاويّات Containers جزءا هامًّا من مواضيع هذا المجال. يمكن أن نلاحظ وجود تقاطع بين المجالات في الاختبارات المطلوبة. التسعير والصلاحية تسعّر Red Hat شهاداتها حسب الاختبارات المطلوبة لنيلها. تبلغ تكلفة الاختبار 400 دولار أمريكي بالنسبة لاختبارات الشهادتيْن RHCSA و RHCE؛ أي 400 دولار لكلّ واحدة منهما. فيما تصل التكلفة إلى 600 دولار بالنسبة لاختبارات شهادة RHCA؛ أي 3000 دولار للشهادة. يمكن أن تختلف التسعيرة حسب المنطقة الجغرافية. تصلُح شهادة RHCSA لمدة ثلاث سنوات ابتداءً من تاريخ نيلها؛ تزيد مدة الصلاحية المتبقيّة للشهادة بثلاث سنوات إن حصل صاحبها على الشهادة الموالية RHCE التي تدوم مدة صلاحيتها لثلاث سنوات من تاريخ الحصول عليها. نفس المبدأ يُطبَّق عند الحصول على شهادة متخصّصة من شهادات RHCA ما عدا بضعة شهادات متعلّقة بـ JBoss. التدريب والتحضير توفّر Red Hat دورات تدريبيّة لمختلف اختباراتها إما في مراكز تابعة للشركة أو على الإنترنت؛ كما تتيح اشتراكا مدته سنة لكامل المحتوى التعليمي على موقعها. يمكن أيضا اتباع دورات تحضيرية لدى أحد المراكز المتعاونة المعتمدة.