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



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

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

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

نوع المُحتوى


التصنيفات

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

التصنيفات

  • 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

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

  1. تستخدم بعض توزيعات لينكس، خصوصا تلك المعتمدة على Fedora مثل CentOS وRed Hat Enterprise Linux، حزم RPM لتثبيت البرامج وإدارتها. ملف rpm. هو عبارة عن تجميع لبرامج ومكتبات تحتاجها هذه البرامج في حزمة تُستخدَم أداة باسم rpm لتثبيتها. الأداة rpm هي أداة مفتوحة المصدر تحتفظ ببيانات الحزم المثبّتة على النظام في المجلّد var/lib/rpm/. من المهم الانتباه إلى أن أداة rpm لا تستطيع التعامل مع البرامج التي ثُبِّتت انطلاقا من المصدر Source. يحتوي ملفّ rpm. على معلومات من قبيل ماهية الحزمة، من أين تأتي، الاعتماديات التي تحتاجها للعمل، الإصدار… إلخ. توجد خمسة أوضاع أساسية لأداة rpm: التثبيت i-: يُستخدَم لتثبيت حزم RPM. الحذف e-: يُستخدَم لحذف حزمة وإلغاء تثبيتها. الترقية U-: يُحدّث حزمة مثبّتة (تثبيت إصدار جديد من الحزمة). التحقق V-: يُستخدَم للتحقّق من حزمة RPM. الاستعلام q-: يُستخدَم للاستعلام عن حزم RPM. حزم RPM هي حزم قائمة بذاتها؛ تمكن الاستفادة من المواقع التالية للحصول على حزم RPM الخاصّة ببرنامج تريده: redhat.com rpmfind.net. rpm.pbone.net rpmseek.com يقدّم هذا المقال أمثلة لأوامر RPM من أجل المساعدة في تثبيت البرامج، تحديثها أو حذفها على توزيعة تستخدم RPM للتحزيم. ملحوظة: يجب أن تكون لديك صلاحيات الجذر حتى تستطيع إدارة الحزم. التحقق من توقيع حزمة يجب أولا التحقّق من مصدر الحزمة وموثوقيتها قبل تثبيتها. يُستخدم الخيار checksig-- مع الأمر rpm لهذا الغرض. لكي نستطيع التحقق من حزمة فإنه يجب أولا استيراد المفاتيح العمومية Public keys الخاصّة بالنظام الذي نعمل عليه (Fedora، CentOS، RHEL أو غيرها). بالنسبة لتوزيعة Red Hat Enterprise Linux فالأمر على النحو التالي: rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-* نطلب في الأمر التالي التحقق من الحزمة pidgin-1.5.1-6.el3.x86_64.rpm: [root@academy1 ~]# rpm --checksig pidgin-1.5.1-6.el3.x86_64.rpm pidgin-1.5.1-6.el3.x86_64.rpm: (sha1) dsa sha1 md5 gpg OK لاحظ أن نتيجة التحقق هي OK. تثبيت حزمة يطلُب الأمر التالي تثبيت الحزمة pidgin-1.5.1-6.el3.x86_64.rpm التي تحققنا من موثوقيتها أعلاه: [root@academy1 ~]# rpm -ivh pidgin-1.5.1-6.el3.x86_64.rpm Preparing... ########################################### [100%] 1:pidgin ########################################### [100%] تظهر في الأمر أعلاه الخيارات التالية: i-: وضع التثبيت، v-: طلب إظهار رسائل بتقدم عملية التثبيت، h-: طلب إظهار علامات # للدلالة على التقدم الحاصل في تنفيذ خطوات التثبيت. الخياران الأخيران v- وh- ليسا ضروريين. التحقق من اعتماديات حزمة قبل تثبيتها تتيح أداة rpm التحقق من اعتماديات حزمة قبل تثبيتها، مثلا للتحقق من اعتماديات الحزمة pidgin-2.11.0-1.fc24.x86_64.rpm: [root@academy1 ~]# rpm -qpR pidgin-1.5.1-6.el3.x86_64.rpm /bin/sh /bin/sh glib2 >= 2.2 htmlview libICE.so.6()(64bit) libSM.so.6()(64bit) libX11.so.6()(64bit) libXext.so.6()(64bit) libao.so.2()(64bit) libatk-1.0.so.0()(64bit) libaudiofile.so.0()(64bit) (...) يشير الخيار q- إلى أننا في وضع الاستعلام عن الحزمة. يطلب الخيار p- معلومات عن حزمة غير مثبّتة ويسرُد الخيار R- اعتماديّات الحزمة. تثبيت حزمة بغض النظر عن اعتمادياته لا يقبل rpm في الحالة العادية تثبيت حزمة إلا إذا كانت جميع اعتمادياتها مثبتة؛ إلا أنه يمكن إجباره على ذلك باستخدام الخيار nodeps--: [root@academy1 ~]# rpm -ivh --nodeps pidgin-1.5.1-6.el3.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:pidgin-1.5.1-6.el3 ################################# [100%] يُثبّت الأمر أعلاه الحزمة بتجاهل الأخطاء المتعلقة باعتماديّاتها؛ إلا أن البرنامج لن يعمل إلا بعد تثبيت الاعتماديات المطلوبة. التحقق من أن حزمة مثبّتة استخدم وضع الاستعلام q- للتأكد من أن حزمة مّا مثبتة على النظام: [root@academy1 ~]# rpm -q BitTorrent package BitTorrent is not installed [root@academy1 ~]# rpm -q pidgin pidgin-1.5.1-6.el3.x86_64.rpm سرد قائمة بجميع ملفات حزمة مثبتة أضف خيار السرد l- إلى وضع الاستعلام q- للحصول على قائمة بملفات حزمة مثبتة على النظام: [root@academy1 ~]# rpm -ql pidgin /etc/gconf/schemas/purple.schemas /usr/bin/gaim /usr/bin/pidgin /usr/lib64/pidgin /usr/lib64/pidgin/convcolors.so /usr/lib64/pidgin/extplacement.so /usr/lib64/pidgin/gestures.so /usr/lib64/pidgin/gtkbuddynote.so (...) سرد الحزم المُثبتة يسرُد الخيار a- عند استخدامه في وضع الاستعلام قائمة بأسماء جميع الحزم المثبتة: [root@academy1 ~]# rpm -qa libsss_nss_idmap-1.13.0-40.el7_2.9.x86_64 pygobject3-base-3.14.0-3.el7.x86_64 libfprint-0.5.0-3.el7.x86_64 man-pages-3.53-5.el7.noarch redhat-release-server-7.2-9.el7.x86_64 rsyslog-7.4.7-12.el7.x86_64 libsane-hpaio-3.13.7-6.el7_2.1.x86_64 (...) يمكن ترتيب القائمة لتظهر الحزم المثبتة مؤخرا في الأعلى باستخدام الخيار last--: [root@academy1 ~]# rpm -qa --last pidgin-1.5.1-6.el3.x86_64.rpm Sun 04 Sep 2016 09:47:32 PM GMT glibc-devel-2.17-106.el7_2.8.x86_64 Tue 02 Aug 2016 11:42:29 PM GMT nss-pam-ldapd-0.8.13-8.el7.x86_64 Tue 02 Aug 2016 11:42:23 PM GMT nscd-2.17-106.el7_2.8.x86_64 Tue 02 Aug 2016 11:42:17 PM GMT glibc-headers-2.17-106.el7_2.8.x86_64 Tue 02 Aug 2016 11:42:14 PM GMT glibc-common-2.17-106.el7_2.8.x86_64 Tue 02 Aug 2016 11:42:01 PM GMT (...) تحديث حزمة يُستخدَم وضع الترقية U- لتحديث إصدار حزمة مثبتة. يحتفظ أمر rpm عند تحديث حزمة بنسخة احتياطية من الإصدار المثبت للعودة إليها في حال لم تعمل الحزمة حسب المطلوب بعد تحديثها: [root@academy1 ~]# rpm -Uvh pidgin-1.5.1-6.el3.x86_64.rpm Preparing... ########################################### [100%] 1:pidgin ########################################### [100%] حذف حزمة استخدم الخيار e- مع الأمر rpm لحذف حزمة بذكر اسمها. مثلا؛ لحذف حزمة pidgin السابقة: [root@academy1 ~]# rpm -e pidgin تمكن أيضا إضافة الخيار v إلى الأمر لعرض رسائل بما يحدُث: [root@academy1 ~]# rpm -ev pidgin Preparing packages... pidgin-1.5.1-6.el3.x86_64.rpm كما يمكن الإبقاء على اعتماديات الحزمة باستخدام الخيار nodeps-- مع أمر الحذف وهو ما ينتج عنه حذف الحزمة فقط دون اعتمادياتها: [root@academy1 ~]# rpm -ev --nodeps pidgin انتبه إلى أن حذف حزمة من النظام يمكن أن يؤدي إلى عدم استقراره؛ لذا تأكد من حاجتك فعلا لحذف الحزمة. معرفة الحزمة التي ينتمي إليها ملف استخدم الخيار f- في وضع الاستعلام لمعرفة الحزمة التي ينتمي إليها ملف. مثلا؛ تخبرنا نتيجة الأمر التالي أن الملف usr/bin/htpasswd/ ينتمي للحزمة httpd-tools-2.4.6-40.el7_2.4.x86_64. [root@academy1 ~]# rpm -qf /usr/bin/htpasswd httpd-tools-2.4.6-40.el7_2.4.x86_64 الحصول على معلومات عن حزمة يعرض الخيار i- عند استخدامه في وضع الاستعلام معلومات عن حزمة مثبتة؛ مثلا بالنسبة لحزمة vsftpd: [root@academy1 ~]# rpm -qi vsftpd Name : vsftpd Version : 3.0.2 Release : 11.el7_2 Architecture: x86_64 Install Date: Thu 21 Jul 2016 03:29:37 PM GMT Group : System Environment/Daemons Size : 355788 License : GPLv2 with exceptions Signature : RSA/SHA256, Fri 18 Mar 2016 01:08:35 AM GMT, Key ID 199e2f91fd431d51 Source RPM : vsftpd-3.0.2-11.el7_2.src.rpm Build Date : Wed 24 Feb 2016 11:06:41 AM GMT Build Host : x86-019.build.eng.bos.redhat.com Relocations : (not relocatable) Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla> Vendor : Red Hat, Inc. URL : https://security.appspot.com/vsftpd.html Summary : Very Secure Ftp Daemon Description : vsftpd is a Very Secure FTP daemon. It was written completely from scratch. أما إن أردت الحصول على معلومات عن حزمة قبل تثبيتها فالأمر هو التالي: [root@academy1 ~]# rpm -qip pidgin-1.5.1-6.el3.x86_64.rpm Name : pidgin Version : 1.5.1 Release : 6.el3 Architecture: x86_64 Install Date: (not installed) Group : Applications/Internet Size : 11168813 License : GPL Signature : DSA/SHA1, Thu 29 Oct 2009 08:14:44 AM GMT, Key ID 219180cddb42a60e Source RPM : pidgin-1.5.1-6.el3.src.rpm Build Date : Wed 28 Oct 2009 03:52:51 PM GMT Build Host : x86-003.build.bos.redhat.com Relocations : (not relocatable) Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla> Vendor : Red Hat, Inc. URL : http://www.pidgin/im/ Summary : A Gtk+ based multiprotocol instant messaging client Description : Pidgin allows you to talk to anyone using a variety of messaging protocols, including AIM, ICQ, IRC, Yahoo!, Novell Groupwise, MSN Messenger, Jabber, Gadu-Gadu, Napster, and Zephyr. These protocols are implemented using a modular, easy to use design. To use a protocol, just add an account using the account editor. Pidgin supports many common features of other clients, as well as many unique features, such as perl scripting, TCL scripting and C plugins. Pidgin is NOT affiliated with or endorsed by America Online, Inc., Microsoft Corporation, Yahoo! Inc., or ICQ Inc. [root@academy1 ~]# الاستعلام عن التوثيق Documentation الخاص بحزمة مثبتة يمكن الحصول على مستندات التوثيق الخاصّة بحزمة باستخدام الخيارين df- في وضع الاستعلام. يأخذ الأمر معطى عبارة عن مسار الحزمة؛ وهو ما يمكن الحصول عليه عن طريق الأمر which. نطلب في المثال التالي معرفة مسار الحزمة vsftpd ثم نستعلم عن مستدات التوثيق الخاصّة بها: [root@academy1 ~]# which vsftpd /sbin/vsftpd [root@academy1 ~]# rpm -qdf /sbin/vsftpd /usr/share/doc/vsftpd-3.0.2/AUDIT /usr/share/doc/vsftpd-3.0.2/BENCHMARKS /usr/share/doc/vsftpd-3.0.2/BUGS /usr/share/doc/vsftpd-3.0.2/COPYING /usr/share/doc/vsftpd-3.0.2/Changelog (...) التحقق من حزمة تقارن أداة rpm عند طلب التحقق من حزمة المعلومات المستقاة من الملفات المثبتة مع تلك الموجودة في قاعدة بيانات rpm. يُستخدم الخيار V- لوضع التحقق وp لتمرير حزمة إلى الأمر: [root@academy1 ~]# rpm -Vp vsftpd-3.0.3-2.fc24.x86_64.rpm warning: vsftpd-3.0.3-2.fc24.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 81b46521: NOKEY .......T. c /etc/logrotate.d/vsftpd .......T. c /etc/pam.d/vsftpd .......T. c /etc/vsftpd/ftpusers .......T. c /etc/vsftpd/user_list .......T. c /etc/vsftpd/vsftpd.conf .......T. /etc/vsftpd/vsftpd_conf_migrate.sh .......T. /usr/lib/systemd/system-generators/vsftpd-generator .......T. /usr/lib/systemd/system/vsftpd.service .......T. /usr/lib/systemd/system/vsftpd.target .......T. /usr/lib/systemd/system/vsftpd@.service S.5....T. /usr/sbin/vsftpd missing /usr/share/doc/vsftpd missing d /usr/share/doc/vsftpd/AUDIT missing d /usr/share/doc/vsftpd/BENCHMARKS missing d /usr/share/doc/vsftpd/BUGS (...) يمكن طلب التحقق من جميع الحزم في النظام بالخيار a في وضع التحقق على النحو التالي: [root@academy1 ~]# rpm -Va S.5....T. c /etc/os-release S.5....T. /usr/src/kernels/3.10.0-327.22.2.el7.x86_64/include/config/auto.conf S.5....T. /usr/src/kernels/3.10.0-327.22.2.el7.x86_64/include/config/auto.conf.cmd S.5....T. /usr/src/kernels/3.10.0-327.22.2.el7.x86_64/include/config/tristate.conf S.5....T. /usr/src/kernels/3.10.0-327.22.2.el7.x86_64/include/generated/autoconf.h (...) سرد جميع المفاتيح العمومية المستوردة يمكنك إن أردت سرد جميع المفاتيح العمومية للحزم المثبتة على نظامك، وذلك على النحو التالي: [root@academy1 ~]# rpm -qa gpg-pubkey* gpg-pubkey-2fa658e0-45700c69 gpg-pubkey-37017186-45761324 gpg-pubkey-897da07a-3c979a7f gpg-pubkey-f21541eb-4a5233e7 gpg-pubkey-42193e6b-4624eff2 gpg-pubkey-fd431d51-4ae0493b gpg-pubkey-db42a60e-37ea5438 تصحيح قاعدة بيانات RPM معطوبة يحدُث أن تُصاب قاعدة البيانات الخاصّة بحزم RPM بعُطب مما ينتُج عنه غياب وظائف من أداة rpm. يمكنك في هذه الحالة محاولة بناء قاعدة البيانات من جديد بالأوامر التالية: [root@academy1 ~]# cd /var/lib/rpm [root@academy1 rpm]# rm __db* [root@academy1 rpm]# rpm --rebuilddb [root@academy1 rpm]# /usr/lib/rpm/rpmdb_verify Packages BDB5105 Verification of Packages succeeded. ترجمة - وبتصرف - لمقال 20 Practical Examples of RPM Commands in Linux لصاحبه Ravi Saive.
  2. عرضنا في دروس سابقة من هذه السلسلة لوسيلتين من وسائل التحكّم في الوصول على 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.
  3. يتناول هذا المقال كيفية تثبيت الحزم، تحديثها، حذفها، البحث عنها وإدارة مستودعاتها Repositories على توزيعة لينكس تستخدم مدير الحزم YUM الذي تُطوّره شركة Red Hat. يُمكن استخدام الأمثلة المذكورة في هذا الدّرس، والتي جُرِّبت على خادوم Red Hat Enterprise Linux 7، لأغراض الدراسة، التحضير لشهادة متخصّصة أو لاستكشاف طرق جديدة لتثبيت الحزم والإبقاء على نظامك محدَّثا. يجب، لكي تتبع الأمثلة المقدَّمة في هذا الدرس، أن يكون لديك فهم لأساسيات عمل الأوامر في لينكس وتوزيعة تستخدم YUM للتجربة عليها، Fedora أو Red Hat Enterprise Linux 7 على سبيل المثال. ما هو مدير الحزم YUM؟ يُستخدَم مدير الحزم YUM (اختصار لـYellowdog Updater Modified) لإدارة البرامج المُحزَّمة بصيغة RPM (RedHat Package Manager). يمكن استخدام YUM من سطر الأوامر أو عبر واجهة رسومية. يتيح مدير الحزم YUM لمدير النظام تثبيت الحزم، تحديثها، حذفها أو البحث عنها. يُوزَّع مدير الحزم YUM حسب رخصة غنو GNU العمومية. تثبيت الحزم يُستخدَم الأمر install في مدير الحزم YUM على النحو التالي لتثبيت حزمة برنامج يُسمَّى Firefox. يتولّى مدير الحزم تثبيت الاعتمادات Dependencies، أي البرامج والمكتبات Libraries التي يتطلب عملُ الحزمة Firefox وجودَها (يجب أن تكون لديك صلاحيات المستخدم الجذر لتثبيت الحزم): [root@academy1 ~]# yum install firefox Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager Resolving Dependencies --> Running transaction check ---> Package firefox.x86_64 0:45.3.0-1.el7_2 will be installed --> Finished Dependency Resolution Dependencies Resolved ========================================================================= Package Arch Version Repository Size ========================================================================= Installing: firefox x86_64 45.3.0-1.el7_2 rhel-7-server-eus-rpms 76 M Transaction Summary ========================================================================= Install 1 Package Total download size: 76 M Installed size: 142 M Is this ok [y/d/N]: y Downloading packages: (...) Installed: firefox.x86_64 0:45.3.0-1.el7_2 Complete! يطلُب الأمر أعلاه التأكيد (Is this ok) قبل البدء في تنزيل الحزمة وتثبيتها (اكتب y ثم اضغط على زرّEnter للتأكيد). استخدم الخيار y- إن كنت ترغب في تثبيت الحزم تلقائيا دون طلب التأكيد: # yum -y install firefox حذف حزمة يحذف الأمر التالي الحزمة firefox تماما من النظام (بما في ذلك اعتماداتها): [root@academy1 ~]# yum remove firefox Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager Resolving Dependencies --> Running transaction check ---> Package firefox.x86_64 0:45.3.0-1.el7_2 will be erased --> Finished Dependency Resolution Dependencies Resolved =========================================================================================== Package Arch Version Repository Size =========================================================================================== Removing: firefox x86_64 45.3.0-1.el7_2 @rhel-7-server-eus-rpms 142 M Transaction Summary =========================================================================================== Remove 1 Package Installed size: 142 M Is this ok [y/N]: y Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction Erasing : firefox-45.3.0-1.el7_2.x86_64 1/1 Verifying : firefox-45.3.0-1.el7_2.x86_64 1/1 Removed: firefox.x86_64 0:45.3.0-1.el7_2 Complete! يطلُب الأمر التأكيد قبل حذف الحزمة. استخدم الخيار y- لتعطيل طلب التأكّد كالتالي: # yum -y remove firefox تحديث حزمة فلنفترض أن لديك حزمة MySQL قديمة، لم تُحدَّث منذ زمن؛ وترغب في تحديثها إلى آخر إصدار. الأمر التالي يؤدي المهمة: # yum update mysql سرد قائمة بالحزم يُستخدَم أمر السرد list للبحث عن حزمة معيّنة عن طريق اسمها. يبحث الأمر التالي عن حزمة باسم openssh: [root@academy1 ~]# yum list openssh Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager Installed Packages openssh.x86_64 6.6.1p1-25.el7_2 @rhel-7-server-eus-rpms يمكن جعل البحث أكثر دقة بذكر إصدار الحزمة إن عُرِف؛ مثلا: # yum list openssh-6.6.1p1 البحث عن حزمة يمكن استخدام الأمر search للبحث عن حزمة لا تتذكر اسمها بالضبط؛ مثلا نبحث عن ftp: [root@academy1 ~]# yum search ftp Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager ================== N/S matched: ftp ================================= ftp.x86_64 : The standard UNIX FTP (File Transfer Protocol) client tftp.x86_64 : The client for the Trivial File Transfer Protocol (TFTP) tftp-server.x86_64 : The server for the Trivial File Transfer Protocol (TFTP) vsftpd.x86_64 : Very Secure Ftp Daemon curl.x86_64 : A utility for getting files from remote servers (FTP, HTTP, and others) lftp.i686 : A sophisticated file transfer program lftp.x86_64 : A sophisticated file transfer program wget.x86_64 : A utility for retrieving files using the HTTP or FTP protocols Name and summary matches only, use "search all" for everything. الحصول على معلومات عن حزمة استخدم الأمر info للحصول على معلومات عن حزمة؛ مثلا قبل تثبيتها: [root@academy1 ~]# yum info firefox Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager Available Packages Name : firefox Arch : x86_64 Version : 45.3.0 Release : 1.el7_2 Size : 76 M Repo : rhel-7-server-eus-rpms/7Server/x86_64 Summary : Mozilla Firefox Web browser URL : http://www.mozilla.org/projects/firefox/ License : MPLv1.1 or GPLv2+ or LGPLv2+ Description : Mozilla Firefox is an open-source web browser, designed for standards : compliance, performance and portability. سرد جميع الحزم المتوفّرة يسرُد الأمر list عند استخدامها دون معطيات جميع الحزم المتوفرة في المستودعات؛ وهي كثيرة؛ لذا أعد توجيه نتيجة أمر السّرد إلى الأمر less لتيسير عمليّة التصفح: [root@academy1 ~]# yum list | less استخدم المعطى installed إن أردت أن يقتصر السّرد على الحزم المثبّتة: [root@academy1 ~]# yum list installed | less العثور على حزمة انطلاقا من ملفّ يُستخدَم الأمر provides في مدير الحزم YUM لمعرفة الحزمة التي يتبع لها ملفّ مّا. مثلا؛ نريد معرفة الحزمة التي توفّر ملفّ الإعداد etc/httpd/conf/httpd.conf/، لذا ننفذ الأمر بالطريقة التالية: [root@academy1 ~]# yum provides /etc/httpd/conf/httpd.conf Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager httpd-2.4.6-17.el7.x86_64 : Apache HTTP Server Repo : rhel-7-server-eus-rpms Matched from: Filename : /etc/httpd/conf/httpd.conf httpd-2.4.6-17.el7.x86_64 : Apache HTTP Server Repo : rhel-7-server-rpms Matched from: Filename : /etc/httpd/conf/httpd.conf يُظهر الأمر اسم الحزمة والمستودع الذي تأتي منه. التحقق من وجود تحديثات وتحديث النظام استخدم الأمر yum check-update لمعرفة الحزم المثبّتة التي تتوفّر لها تحديثات. أما إن أردت تحديث الحزم إلى آخر إصدار متوفّر فالأمر yum update يؤدي المهمة. سرد مجموعات الحزم تُجمَّع كثير من الحزم في مجموعات لتسهيل التعامل معها؛ فبدلا من تثبيت هذه الحزم الواحدة تلو الآخرى، أو كتابة أسمائها جميعا، يمكن تثبيتها دفعة واحدة عن طريق اسم المجموعة. استخدم الأمر grouplist لسرد مجموعات الحزم المتوفّرة: [root@academy1 ~]# yum grouplist Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager Available Environment Groups: Minimal Install Infrastructure Server File and Print Server Basic Web Server Virtualization Host Server with GUI Installed Groups: Development Tools Graphical Administration Tools Legacy UNIX Compatibility Security Tools System Administration Tools Available Groups: Compatibility Libraries Console Internet Tools RT Scientific Support Smart Card Support System Management Done تثبيت مجموعة حزم استخدم الأمر groupinstall لتثبيت مجموعة حزم. يثبّت الأمر التالي مجموعة حزم File and Print Server (خادوم الطباعة وتشارك الملفات): [root@academy1 ~]# yum groupinstall 'File and Print Server' Dependencies Resolved ====================================================================================== Package Arch Version Repository Size ====================================================================================== Installing for group install "File and Storage Server": cifs-utils x86_64 6.2-7.el7 rhel-7-server-eus-rpms 84 k nfs4-acl-tools x86_64 0.3.3-14.el7 rhel-7-server-eus-rpms 47 k targetcli noarch 2.1.fb41-3.el7 rhel-7-server-eus-rpms 61 k targetd noarch 0.7.1-1.el7 rhel-7-server-eus-rpms 48 k Installing for dependencies: PyYAML x86_64 3.10-11.el7 rhel-7-server-eus-rpms 153 k libyaml x86_64 0.1.4-11.el7_0 rhel-7-server-eus-rpms 55 k lvm2-python-libs x86_64 7:2.02.130-5.el7_2.5 rhel-7-server-eus-rpms 166 k pyparsing noarch 1.5.6-9.el7 rhel-7-server-eus-rpms 94 k python-configshell noarch 1:1.1.fb18-1.el7 rhel-7-server-eus-rpms 67 k python-kmod x86_64 0.9-4.el7 rhel-7-server-eus-rpms 57 k python-rtslib noarch 2.1.fb57-3.el7 rhel-7-server-eus-rpms 88 k python-setproctitle x86_64 1.1.6-5.el7 rhel-7-server-eus-rpms 15 k python-urwid x86_64 1.1.1-3.el7 rhel-7-server-eus-rpms 654 k Transaction Summary ========================================================================================= Install 4 Packages (+9 Dependent packages) Total download size: 1.6 M Installed size: 5.7 M Is this ok [y/d/N]: تحديث مجموعة حزم يُستخدَم الأمر groupupdate على النحو التالي لتحديث مجموعة حزم سبق تثبيتها: [root@academy1 ~]# yum groupupdate 'File and Print Server' حذف مجموعة حزم استخدم الأمر groupremove لحذف مجموعة حزم مثبتة؛ مثلا لحذف مجموعة الحزم السابقة: [root@academy1 ~]# yum groupremove 'File and Print Server' سرد مستودعات YUM يمكن سرد المستودعات المفعَّلة في مدير الحزم YUM باستخدام الأمر التالي: [root@academy1 ~]# yum repolist Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager repo id repo name status !rhel-7-server-eus-rpms/7Server/x86_64 Red Hat Enterprise Linux 7 Server - Extended Update Support (RPMs) 11,241 !rhel-7-server-rpms/7Server/x86_64 Red Hat Enterprise Linux 7 Server (RPMs) 11,250 !rhel-7-server-rt-beta-rpms/x86_64 Red Hat Enterprise Linux for Real Time Beta (RHEL 7 Server) (RPMs) 15 !rhel-7-server-rt-rpms/7Server/x86_64 Red Hat Enterprise Linux for Real Time (RHEL 7 Server) (RPMs) 129 !rhel-ha-for-rhel-7-server-eus-rpms/7Server/x86_64 Red Hat Enterprise Linux High Availability (for RHEL 7 Server) - Extended Update Support (RP 224 !rhel-ha-for-rhel-7-server-rpms/7Server/x86_64 Red Hat Enterprise Linux High Availability (for RHEL 7 Server) (RPMs) 224 !rhel-rs-for-rhel-7-server-eus-rpms/7Server/x86_64 Red Hat Enterprise Linux Resilient Storage (for RHEL 7 Server) - Extended Update Support (RP 279 !rhel-rs-for-rhel-7-server-rpms/7Server/x86_64 Red Hat Enterprise Linux Resilient Storage (for RHEL 7 Server) (RPMs) 279 repolist: 23,641 أضف الخيار all إلى الأمر السابق إن أردت سرد جميع المستودعات بما فيها تلك غير المفعَّلة: [root@academy1 ~]# yum repolist all تثبيت حزمة مع تحديد المستودع يُستخدم الخيار enablerepo-- في أمر التثبيت لتحديد المستودع الذي نريد تنزيل الحزمة منه: [root@academy1 ~]# yum --enablerepo=rhel-7-server-rpms install postgresql Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager Resolving Dependencies --> Running transaction check ---> Package postgresql.x86_64 0:9.2.15-1.el7_2 will be installed --> Processing Dependency: postgresql-libs(x86-64) = 9.2.15-1.el7_2 for package: postgresql-9.2.15-1.el7_2.x86_64 --> Processing Dependency: libpq.so.5()(64bit) for package: postgresql-9.2.15-1.el7_2.x86_64 --> Running transaction check ---> Package postgresql-libs.x86_64 0:9.2.15-1.el7_2 will be installed --> Finished Dependency Resolution Dependencies Resolved ======================================================================================= Package Arch Version Repository Size ======================================================================================= Installing: postgresql x86_64 9.2.15-1.el7_2 rhel-7-server-eus-rpms 3.0 M Installing for dependencies: postgresql-libs x86_64 9.2.15-1.el7_2 rhel-7-server-eus-rpms 231 k Transaction Summary ======================================================================================== Install 1 Package (+1 Dependent package) Total download size: 3.2 M Installed size: 16 M Is this ok [y/d/N]: صدفة YUM تفاعلية يتيح مدير الحزم YUM صدفة Shell لتنفيذ أوامر عدّة لإدارة الحزم: [root@academy1 ~]# yum shell Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager > update > repolist repo id repo name status rhel-7-server-eus-rpms/7Server/x86_64 Red Hat Enterprise Linux 7 Server - Extended Update Support (RPMs) 11,241 rhel-7-server-rpms/7Server/x86_64 Red Hat Enterprise Linux 7 Server (RPMs) 11,250 rhel-7-server-rt-beta-rpms/x86_64 Red Hat Enterprise Linux for Real Time Beta (RHEL 7 Server) (RPMs) 15 rhel-7-server-rt-rpms/7Server/x86_64 Red Hat Enterprise Linux for Real Time (RHEL 7 Server) (RPMs) 129 rhel-ha-for-rhel-7-server-eus-rpms/7Server/x86_64 Red Hat Enterprise Linux High Availability (for RHEL 7 Server) - Extended Update Support (RPM 224 rhel-ha-for-rhel-7-server-rpms/7Server/x86_64 Red Hat Enterprise Linux High Availability (for RHEL 7 Server) (RPMs) 224 rhel-rs-for-rhel-7-server-eus-rpms/7Server/x86_64 Red Hat Enterprise Linux Resilient Storage (for RHEL 7 Server) - Extended Update Support (RPM 279 rhel-rs-for-rhel-7-server-rpms/7Server/x86_64 Red Hat Enterprise Linux Resilient Storage (for RHEL 7 Server) (RPMs) 279 > exit Leaving Shell عرض سجلّ أوامر YUM يُستخدَم الأمر history على النحو التالي لعرض قائمة بآخر أوامر YUM المنفّذة: [root@academy1 ~]# yum history Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager ID | Login user | Date and time | Action(s) | Altered ------------------------------------------------------------------------------- 14 | Mohamed ... <meyil> | 2016-09-01 23:57 | Erase | 1 13 | Mohamed ... <meyil> | 2016-09-01 23:48 | Install | 1 12 | Mohamed ... <meyil> | 2016-08-02 23:41 | I, U | 6 11 | Mohamed ... <meyil> | 2016-07-31 23:19 | Install | 2 10 | Mohamed ... <meyil> | 2016-07-21 22:09 | Install | 1 9 | Mohamed ... <meyil> | 2016-07-21 15:29 | Install | 4 8 | Mohamed ... <meyil> | 2016-07-21 14:18 | I, U | 75 7 | Mohamed ... <meyil> | 2016-06-11 01:32 | Erase | 1 6 | Mohamed ... <meyil> | 2016-06-07 13:51 | Update | 1 5 | Mohamed ... <meyil> | 2016-06-05 02:57 | Install | 2 4 | Mohamed ... <meyil> | 2016-06-05 02:56 | Update | 1 3 | Mohamed ... <meyil> | 2016-05-28 03:16 | Install | 1 2 | Mohamed ... <meyil> | 2016-05-28 02:45 | I, U | 190 EE 1 | System <unset> | 2016-05-27 20:43 | Install | 1293 history list تنظيف تخبئة Cache مدير الحزم يحتفظ مدير الحزم YUM بنسخ من البيانات المتعلقة بالحزم ضمن مجلّد var/cache/yum/؛ يمكن حذف جميع هذه النسخ بتنفيذ الأمر التالي: [root@academy1 ~]# yum clean all Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager Cleaning repos: rhel-7-server-eus-rpms rhel-7-server-rpms rhel-7-server-rt-beta-rpms rhel-7-server-rt-rpms rhel-ha-for-rhel-7-server-eus-rpms : rhel-ha-for-rhel-7-server-rpms rhel-rs-for-rhel-7-server-eus-rpms rhel-rs-for-rhel-7-server-rpms Cleaning up everything ترجمة - بتصرّف - لمقال20 Linux YUM (Yellowdog Updater, Modified) Commands for Package Management لصاحبه Ravi Saive.
  4. تتطلّب إدارة الخواديم الولوج عن بعد إلى النظام لتنفيذ مهامّ مختلفة باستخدام محاك للطرفيّة. في الواقع، من النادر أن يتواجد مدير النظام مباشرة أمام الخادوم أو حتى في نفس الموقع الجغرافي. يعني هذا أنه سيحتاج لطريقة تمكّنه من الولوج عن بعد إلى الأجهزة التي ستُطلب منه إدارتها. كان مديرو الأنظمة في البداية يستعملون خدمة 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.
  5. بدأنا في المقال السابق من سلسلة دروس 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.
  6. يعدّ التعامل مع الملفات النصيّة من المهامّ المتكرّرة التي على مدير النّظُم تنفيذها. تشمل هذه المهمّة التّعديل على الملفّات الموجودة (ملفات إعداد غالبا) أو إنشاء ملفّات جديدة. سنقدّم في هذا الدّرس البرنامجيْن الأكثر استخداما لتحرير الملفات النصيّة على 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.
  7. صُمّمت شهادة 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 التي يمكن أن تغيّر مواضيعه إن رأت ذلك مناسبا.
  8. تعتمد الكثير من بيئات المؤسسات التي توجد بها حواسيب بنُظم تشغيل مختلفة (توزيعات لينكس أو وندوز) على خادوم Samba لتشارك الملفّات والطّابعات أو لتقديم خدمات الاستيثاق ضمن بيئاتها الداخليّة. سنشرح في هذا المقال كيفيّة إعداد تشارك الملفّات عبر خادوم Samba على توزيعة RedHat Enterprise Linux 7. يمكن الوصول للملفّات المتشاركة بهذه الطريقة من حواسيب عميلة Clients تستخدم واحدة من توزيعات لينكس أو نظام وندوز على حدّ السواء. تثبيت خادوم Samba نستخدم لأغراض الشّرح في هذا الدّرس حاسوبين يعملان بتوزيعة RedHat Enterprise Linux؛ نثبّت على الأول خادوم Samba وعلى الثاني عميلا لنفس الغرض. نعدّ الحاسوبيْن ضمن شبكة داخليّة على النحو التالي: خادوم Samba على العنوان 192.168.2.100 (سنشير إليه بالخادوم). عميل Samba على العنوان 192.168.2.200 (سنشير إليه بالعميل). راجع مقال إنشاء شبكة داخليّة افتراضية باستخدام Oracle VirtualBox لمعرفة كيفية إنشاء بيئة اختبار لهذا الغرض باستخدام برنامج Oracle VirtualBox. سجّل الدخول إلى الخادوم بالحساب الجذر root ثم حدّث النظام وثبّت الحزم التاليّة الضروريّة لعمل Samba: $ su - Password # yum update # yum install samba samba-client samba-common إعداد تشارك الملفات على Samba سنفترض أننا نريد إعداد مجلّد مشترك بين مجموعة من المستخدمين تعمل في نفس القطاع (الماليّة Finance). ننشئ لهذا الغرض مجموعة مستخدمين باسم finance ونضيف إليها مستخدمَيْن user1 وuser2؛ ثم ننشئ الملفّ المشترك (على الخادوم) ونضبط أذونه ونعطي ملكيّته للمجموعة finance (ننفّذ الأوامر التاليّة على الخادوم بصلاحيّات الجذر): # groupadd finance # useradd user1 # useradd user2 # usermod -a -G finance user1 # usermod -a -G finance user2 # mkdir /finance # chmod 0770 /finance # chgrp finance /finance إعداد SELinux و Firewalld للسماح لـ Samba تستخدم توزيعة RedHat Enterprise Linux وتوزيعات أخرى (مثل Centos وFedora) مبدئيا SELinux، وهو وحدة Module تعمل مع نواة لينكس، لتنفيذ سياسات أمنيّة للتحكّم في الوصول. لكي يسمح SELinux لـSamba بالوصول إلى مجلّد أو ملفّ فإن هذا المجلّد يجب أن يُعلَّم باللّصيقة Label المسمّاة samba_share_t. نستخدم الأمر semanage على النحو التالي لتعليم المجلّد finance/ الذي أنشأناه سابقا والمجلّدات المتفرّعة عنه بهذه اللّصيقة: # semanage fcontext -at samba_share_t "/finance(/.*)?" ثم ننفّذ الأمر restorecon لتطبيق التعديلات: # restorecon /finance يجب أيضا التأكد من الجدار الناري Firewall يسمح بمرور البيانات من Samba وإليه عبر الشبكة. نضيف في ما يلي Samba إلى الخدمات المسموح بها على الجدار الناري ثم نعيد تحميل الإعدادات: # firewall-cmd --permanent --add-service=samba # firewall-cmd --reload إعداد مشاركة الملفات على Samba نريد أن يكون أعضاء المجموعة finance قادرين على تصفّح محتويات المجلّد finance/ الموجود على الخادوم وحفظ ملفّات عليه. ستكون الملفّات أو المجلّدات التي ينشئها أعضاء المجموعة finance على الخادوم ذات أذون 0770 ومجموعة مالكة finance. نفتح ملفّ الإعداد etc/samba/smb.conf/ ونضيف المحتوى التالي إلى آخر الملفّ: [finance] comment=Directory for collaboration of the company's finance team browsable=yes path=/finance public=no valid users=@finance write list=@finance writeable=yes create mask=0770 force create mode=0770 force group=finance احفظ الملفّ ثم نفّذ الأمر testparm للتأكد من عدم وجود أخطاء في الصّياغة. يُظهِر الأمر أخطاء عند وجود أخطاء في صياغة ملف إعداد Samba وإلا فإن النتيجة تظهر ملخّصا بإعدادات Samba. إن أردت إنشاء مجلّد متاح للجميع لتشارك الملفات فيمكنك إضافة مقطع جديد (باسم مختلف) في ملفّ إعداد Samba مع تغيير قيمة public إلى yes بدلا من no وحذف تعليمتيْ valid users وwrite list. إضافة مستخدمين إلى Samba سنضيف المستخدميْن user1 و user2 الذين أنشأناهما سابقا إلى Samba باستخدام أمر smbpasswd الذي يتعامل مع قاعدة بيانات Samba الداخليّة. يطلُب الأمر عند تنفيذه إعطاء كلمة سرّ للمستخدم؛ سيحتاج المستخدم كلمة السر هذه في ما بعد للاتصال بالخادوم والدخول إلى مجلّد التشارك: # smbpasswd -a user1 # smbpasswd -a user2 أنهينا إعداد Samba لتشارك الملفات؛ بقي لنا إعادة تشغيل الخدمة لأخذ الإعدادات في الحسبان ثم إضافتها للخدمات التي تعمل مع بدء تشغيل النظام: # systemctl start smb # systemctl enable smb ثم نختبر الاتصال بخادوم تشارك الملفات (ستُطلب منك كلمة سرّ المستخدم user1): # smbclient -L localhost -U user1 نكون بهذه الخطوة قد أنهينا تثبيت خادوم Samba وإعداده لتشارك الملفات. سننتقل الآن إلى الحاسوب الثاني (العميل) لتجربة الاتصال عن طريقه بالخادوم. تركيب مجلد Samba على عميل لينكس نبدأ أولا بتثبيت حزم Samba الضرورية على العميل كالتالي: $ su - Password # yum update # yum install samba samba-client samba-common cifs-utils ثم نتأكّد بعد انتهاء التثبيت من وجود اتّصال بين العميل والخادوم بتنفيذ الأمر التالي (على العميل، 192.168.2.100 هو عنوان IP الخاصّ بالخادوم): # smbclient –L 192.168.2.100 -U user2 نفّذ نفس الأمر مع المستخدم user1. يمكننا الآن تركيب Mount المجلّد finance/ الموجود على الخادوم (ذي العنوان 192.168.2.100) كأي وسيط تخزين آخر كالتالي (ننشئ أولا مجلدا للتركيب عليه): # mkdir /mnt/samba # mount //192.168.2.100/finance /mnt/samba -o username=user1 سيُطلَب منك إدخال كلمة سر المستخدم user1 التي أعددتها سابقا. إن لم يظهر خطأ فهذا يعني أن التركيب تمّ على ما يُرام. يمكنك التأكد من ذلك بتنفيذ الأمر mount دون خيارات والبحث عن المجلّد finance في النتائج: # mount | grep "finance" مثال على النتيجة: //192.168.2.100/finance on /mnt/samba type cifs (rw,relatime,vers=1.0,cache=strict,username=user1,domain=LOCALHOST,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.2.200,unix,posixpaths,serverino,acl,rsize=1048576,wsize=65536,actimeo=1) ننفذ الأمر التالي لفصل المجلّد: umount /mnt/samba استخدم ملفّ etc/fstab/ إن أردت دوام تركيب المجلد. افتح الملفّ وأضف إليه السّطر التالي etc/fstab/: //192.168.2.100/finance /mnt/samba cifs credentials=/media/samba/.smbcredentials,defaults 0 0 حيثُ media/samba/.smbcredentials/ ملفّ مخفيّ يحوي سطرين؛ الأول اسم مستخدم يمكنه الوصول إلى المجلّد المتشارَك والثاني كلمة سر المستخدم: username=user1 password=PasswordForUser1 نحدّد صلاحيّات الملفّ media/samba/.smbcredentials/ بـ600 وملكيّته root:root (حتى لا يمكن لغير المستخدم الجذر الاطّلاع على فحواه). يمكن تركيب المجلّد مباشرة بعد تغيير ملفّ fstab بتنفيذ الأمر mount -a. يمكننا الآن تجربة إنشاء ملفّ في مجلّد التشارك (الذي يوجد الآن على مسار التركيب mnt/samba/): # touch /mnt/samba/testfile1.txt جرّب الدخول إلى الخادوم وسرد محتويات المجلّد finance/؛ ستجد أن ملفا جديدا باسم testfile1.txt قد أنشئ: # ls -l total 0 -rwxrwx---. 1 user1 finance 0 Jun 8 03:29 testfile1.txt لاحظ أن مالك الملفّ هو user1 والمجموعة المالكة هي finance؛ كما أن الأذون هي 770. يعود السبب في ذلك إلى إعدادات المشاركة التي ضبطناها في ملفّ الإعداد etc/samba/smb.conf (تعليمتا force group=finance و Force create mode=0770). ترجمة -وبتصرّف- للمقال Setting Up Samba and Configure FirewallD and SELinux to Allow File Sharing on Linux/Windows Clients – Part 6 لصاحبه Gabriel Cánepa.
  9. تعرَضنا في دروس سابقة لكيفيّة إدارة الملفات و المستخدمين على 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.
  10. تتطلّب إدارة خادوم 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.
  11. نكمل في هذا الدّرس، الثاني من سلسلة الدّروس التحضيريّة لـشهادة 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.
  12. يعالج هذا الدرس، الأول من سلسلة دروس عن شهادة 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.
  13. توفّر Red Hat امتيازات خاصّة للمطوّرين يمكنك الاستفادة منها والتسجيل للحصول على رابط تنزيل ملف ISO. يمكن استخدام نفس الحساب للاشتراك والحصول على التحديثات من الشركة في إطار الاستخدام الشّخصي. ستحتاج قبل البدء في تثبيت توزيعة Red Hat Enterprise Linux إلى تنزيل الملفّ من موقع Red Hat. سنشرح في هذا المقال طريقة التثبيت باستخدام برنامج Oracle VirtualBox للأنظمة الوهمية الذي نفترض تثبيته لديك. يُنصَح بتوفّر الميزات التالية -على الأقل- من أجل تشغيل RHEL على النحو الأمثل: جهاز بمعماريّة 64 بت بعتاد يدعم الأنظمة الوهميّة (Intel VT-X أو AMD-V). نظام تشغيل يدعمه Virtualbox مثل Windows 7 ،OS X 10.8 ،Ubuntu 12.04 أو أحدث. ذاكرة عشوائية قدرها 8 غيغا بايت. مساحة قرص صلب متاحة قدرها 24 غيغابايت. إعداد VirtualBox لتثبيت RHEL نتوقّف قبل البدء في خطوات التثبيت لشرح مصطلحين يردان كثيرا عند الحديث عن الأنظمة الوهمية: المُضيف Host والضّيف Guest. في هذا الإطار نطلق عبارة المُضيف على نظام التشغيل الذي نُثبّت عليه برنامج VirtualBox بينما نعني بالضّيف نظامَ التشغيل الذي سنثبته داخل VirtualBox. هذا الأخير ليس له وجود بدون VirtualBox الذي يلعب دور الوسيط بينه وبين نظام التشغيل المثبت فعلا. في حالتي النظام المُضيف هو أوبنتو 14.04 بينما سنثبت RHEL كنظام ضيف. نبدأ بتشغيل VirtualBox ثم نضغط على زر New (جديد) لإنشاء نظام وهمي جديد؛ تظهر نافذة جديدة. نختار اسم RHEL للجهاز الوهميّ الجديد وسيتعرّف Virtualbox تلقائيا على نوع (Type) نظام التشغيل وإصداره (Version). ننتقل للخطوة الموالية (Next) لاختيار مقدار الذاكرة العشوائيّة للنّظام الوهميّ؛ الحد الأدنى هو 2096 ميغابايت (2 غيغابايت). لديّ ذاكرة عشوائية قدرها 8 غيغابايت خصصتُ منها 4 للجهاز الوهمي الذي ستعمل عليه RHEL. ثم يأتي دور القرص الصلب الوهمي. حدّد خيار Create a virtual hard disk now (أنشئ قرصا صلبا وهميًّا الآن) ثم انقر على الزر Create (أنشئ). حدّد خيار (VDI (VirtualBox Disk Image وهي صيغة الأقراص الصّلبة الوهمية المستخدمة مبدئيا في Virtualbox. انقر على التالي للخطوة الموالية. يوجد خياران؛ إما حجز مساحة ثابتة مقدّما Fixed size أو جعلها ديناميكية Dynamically allocated. في الحالة الأولى تُحجز مساحة (20 غيغابايت مثلا) على القرص الصّلب للنظام المضيف وتُخصَّص للنظام الضّيف؛ أما في الحالة الثانية فإن استغلال القرص الصلب للنظام المضيف يكون حسب الحاجة في حدود المساحة المخصَّصة. الطريقة الأولى أبطأ أثناء الحجز وقد يستغرق إعداداها بضعة دقائق، ولكنها أسرع في الاستعمال؛ والثانية أسرع أثناء الإعداد وأبطأ أثناء الاستخدام. تقترح النافذة التالية مسارا على النظام المضيف لحفظ القرص الوهميّ؛ يمكنك تغييره إن شئت. يوجد أيضا خيار لمساحة القرص الصّلب الوهمي. يجب أن تخصّص على الأقل 20 غيغابايت للنظام الوهميّ ويمكن أن تزيدها إن كنت تخطّط للعمل بكثافة على النظام (تثبيت الكثير من البرامج مثلا). بالنسبة لي اخترتُ 30 غيغابايت. نحصُل بالوصول إلى هذه النقطة على جهاز وهميّ قاعدي. نحتاج لبضعة إعدادات أخرى. ملحوظة: ربما تلاحظ وجود أكثر من جهاز وهمي في الصّورة أعلاه. يتيح VirtualBox إنشاء أكثر من نظام ضيف على نفس المُضيف. اختر الجهاز الوهمي الذي أنشأناه للتّو (RHEL) من القائمة الموجودة في يسار الشاشة ثم انقر على خانة الإعدادات العامة General في يمين الشاشة. تظهر نافذة الإعدادات؛ اختر منها تبويب Advanced. يسمح هذا الإعداد بتشارك الحافظة Clipboard بين النظامين الضّيف والمضيف. سنحتاج لتفعيل إضافات VirtualBox حتى يمكننا النسخ واللّصق بين الاثنين (خطوة موالية). يعمل الجهاز الوهمي مبدئيّا على معالج واحد؛ إلا أن بإمكانك جعله يعمل على أكثر من معالج إن كانت لديك معالجات أو أنوية متعدّدة. اختر System (النظام) من القائمة اليسرى في نافذة الإعدادات العامّة ثم تبويب المعالج Processor في الجانب الأيمن. اختر العدد المناسب بالنسبة لك (اخترتُ أن يعمل النظام الوهمي على معالجين؛ من أصل 4 متوفّرة). نأتي الآن لإعداد الجهاز الوهمي للإقلاع على ملف ISO الذي نزّلناه من موقع Red Hat. اختر Storage (التخزين) من القائمة اليسرى في نافذة الإعدادات العامّة ثم في الجانب الأيمن من النافذة، في مجموعة Storage tree (تفرعات التخزين) اختر أيقونة القرص الضوئي CD الموجودة تحت Controller: IDE (حيثُ توجد عبارة فارغ Empty دلالة على أننا لم نخصّص الإعداد بعد). انقُر على أيقونة القرص الضوئي ضمن مجموعة Attributes (الخصائص) يمينَ الشّاشة وانقر على خيار Choose Virtual Optical Disk File (اختر ملفّ قرص ضوئي وهمي). ستظهر نافذة انتقل عبرها إلى مكان ملف توزيعة RHEL الذي نزلته سابقا. يظهر اسم الملف rhel-server-7.2-x86_64-dvd.iso الآن في تفرّعات التخزين أسفل عبارة Controller: IDE بدلا من عبارة فارغ (Empty). بقيت لنا خطوة أخيرة قبل البدء في تثبيت التوزيعة؛ هذه الخطوة اختيارية ولكنها مفيدة. سننشئ مجلّدا مشتركا بين النظامين، الضيف والمضيف وهو ما يسهّل تشارك الملفات بين الاثنين. اختر Shared folders (المجلدات المشتركة) ضمن القائمة اليسرى في نافذة الإعدادات العامّة للجهاز الوهمي RHEL. انقر على زر الإضافة الموجود في يمين النافذة لتظهر نافذة صغيرة. حدّد في الحقل الأول Folder path مسار المجلّد على النظام المضيف ثم حدد له اسما بدون مساحات في الحقل الثاني. حدّد خيار Auto-mount (تركيب تلقائي) لكي يُركَّب الملف مع تشغيل النّظام. نحن الآن جاهزون لتثبيت RHEL. تثبيت RHEL على VirtualBox نختار النظام الوهميّ الذي أعددناه في الخطوات السابقة ثم ننقر على زر Start (ابدأ). يحمّل الجهاز الوهميّ ملف التوزيعة من القرص الضّوئي الوهميّ وتبدأ بالتالي عمليّة التثبيت كما لو كنا أمام جهاز حاسوب حقيقي. يظهر خياران في الشاشة؛ الأول لبدء تثبيت التوزيعة مباشرة والثاني لاختبار ملف ISO ثم بدء التثبيت. نختار الثاني للتحقّق من أنّه لا توجد عيوب في الملفّ. ملحوظة: اضغط على زرّ Ctrl الأيمن في لوحة المفاتيح لجعل المؤشّر يعمل داخل الإطار المخصّص للنظام الضّيف؛ ثم اضغط عليه مرةً أخرى إذا أردت إعادة المؤشّر للنظام المضيف. ينفّذ النظام بضعة عمليات للتحقّق من سلامة ملف ISO الخاصّ بالتوزيعة ثم تبدأ عمليّة التثبيت. الخطوة الأولى هي اختيار اللغة وتموضع لوحة المفاتيح. يأتي بعد اختيّار اللغة ملخَّص للتثبيت؛ يمكنك فيه اختيّار منطقة التوقيت، اللّغة، لوحة المفاتيح وإعدادات أخرى. بالنقر على إحدى الفقرات تُفتَح نافذة لإعدادها ثم بعد الانتهاء من الإعداد يوجد زر Done (تمّ) للعودة للملخَّص. سنذهب لزرّ Software selection (اختيّار البرامج) وننقر عليه. نحدّد خيار Server with Gui (خادوم بواجهة رسوميّة) من لائحة Base Environment (البيئة القاعديّة) الموجودة يسار الشاشة. توجد يمين الشاشة لائحة بإضافات برمجية (حزم برامج) يمكن الاختيار بينها للتثبيت مع البيئة القاعديّة المحدّدة. اختر من بينها Development tools (أدوات تطوير) التي سنحتاجها لاحقا ثم انقر زرّ Done للعودة إلى الملخّص. انقر على زرّ Network amd Hostname (الشبكة واسم المضيّف) في نافذة الملخّص لإعداد الاتّصال بالشبكة. اختر واجهة الشبكة من اللّائحة على اليسار ثم فعّل الاتّصال بالنقر على زر On. عطّل بالعودة إلى نافذة الملخّص استخدامَ KDump بنزع تحديد Enable kdump في نافذة الإعداد الخاصّة به من أجل ربح قليل من الذاكرة العشوائية. بقي لنا إعداد القرص الصّلب الذي سنثبّت عليه النظام لذا نختار زرّ Installation destination (وجهة التثبيت) في نافذة الملخّص. بما أن لدينا قرصا وهميّا فسنختاره كاملا للتجزئة. ملحوظة: ينبغي الحذر في هذه الخطوة إن كنت تثبّت التوزيعة على جهاز فعلي وليس وهميا به نظم تشغيل أخرى. ربما يؤدي اختيار تجزئة غير مناسبة إلى محو بياناتك الموجودة على القرص. يمكننا الآن بعد أن أكلنا إعداد الوجهة النقر على زرّ Begin installation لبدء التثبيت. تبدأ عملية تثبيت RHEL وتظهر نافذة جديدة. يُطلَب منّا أثناء نسخ الملفّات وتثبيت الأدوات التي اخترناها إعدادُ حساب المستخدِم الجذر Root ومستخدم آخر للمهامّ غير الإدارية. انقر على زرّ Root password (كلمة سر الجذر) لضبط كلمة السّر الخاصّة بالمستخدم الجذر؛ ثم بعد إتمام ضبطها انقر على زرّ User creation (إنشاء مستخدِم) لإعداد مستخدم آخر غير المستخدم الجذر. تبدو الصّورة على النحو التالي بعد إكمال الإعداديْن. انتظر حتى إكمال نقل الملفات وتطبيق الإعدادات (قد يستغرق ذلك دقائق طويلة حسب جهازك) ثم انقر على زرّ Reboot (أعد التشغيل). تظهر - بعد إعادة تشغيل النظام في الخطوة السّابقة - النافذة التالية والتي تطلُب قراءة شروط استخدام RHEL والموافقة عليها. اكتب الرقم 1 ثم اضغط على زر Enter لعرض معلومات الرّخصة. اكتب الرقم 2 ثم اضغط Enter لقبول الرخصة. اضغط على الزّر c في لوحة المفاتيح للخروج من شروط الاستخدام. اضغط على الزّر c لاستكمال التثبيت. ملحوظة: قد لا تظهر النافذة أعلاه؛ وتظهر بدلا منها نافذة رسومية يمكن من خلالها قراءة الترخيص وقبوله. يوجد أيضا في نفس النافذة زر للوصول المباشر إلى مدير الاشتراكات (لتسجيل الاشتراك كما في الخطوة الموالية أدناه). تظهر بعد اكتمال عمليّة الإقلاع نافذة دخول باسم الحساب العاديّ الذي أنشأته أثناء التثبيت. بقيت لنا خطوة أخيرة وهي تسجيل نسختنا من أجل الحصول على التحديثات من Red Hat. تأكّد من الاتّصال بالشبكة بالذهاب إلى قائمة Applications (التطبيقات) ثم القائمة الفرعيّة System tools (أدوات النّظام) ثم خيار Settings (الإعدادات) ثم زر Network (الشّبكة). نتوجّه بعد التأكّد من الاتّصال إلى قائمة التطبيقات مرة أخرى، أدوات النّظام ونختار منها Red Hat Subscription Manager (مدير الاشتراك في Red Hat). أدخل كلمة السرّ الخاصّة بالحساب الجذر (ليست كلمة سر حسابك العادي) إن طُلب منك ذلك. تظهر النافذة التالية. ننقر على زر Register (سجِّل) وندخل معلومات الاستيثاق الخاصّة بحساب مطوّري Red Hat (اسم المستخدِم وكلمة السّر) ثم ننتظر قليلا لتظهر النافذة التاليّة. تلخّص النافذة معلومات الاشتراك ونوعه. نضغط على زرّ Attache (أرفق) لاستخدام الاشتراك وتلقي التحديثات. لدينا الآن اشتراك مدّته سنة. إعدادات تكميلية أنهينا الآن تثبيت RHEL على VirtualBox؛ نكمل بتطبيق إعدادات تكميلية تساعدنا أثناء العمل على RHEL من داخل VirtualBox. تعطيل شاشة القفل وخيارات حفظ الطاقة تشغّل الإعدادات المبدئيّة في RHEL قفل الشّاشة عندما لا تكون مستخدمة؛ هذا مناسب أثناء العمل على جهاز فعليّ إلا أنه من الأفضل تعطيله على نظام وهميّ حيث يتولّى النّظام المضيف هذه المهمة. لتعطيل هذه الإعدادات ننقر على قائمة التطبيقات ثم نختار أدوات النظام ونحدّد الإعدادات Settings. نختار ضمن نافذة الإعدادات خيار الخصوصية Privacy، ثم قفل الشاشة Screen lock ثم نعطّل القفل التلقائي للشاشة Automatic Screen Lock. نعود لنافذة الإعدادات ونختار زرّ الطاقة Power لتظهر نافذة إعدادات الطاقة. ننقر على القائمة المنسدلة بجانب خيّار Black screen (الشاشة السوداء) ثم نختار Never من القائمة. إضافات Virtualbox تمكّن VirtualBox Guest Additions (إضافات الضّيف في VirtualBox) من تحسين التّكامل بين النظام الضّيف والنّظام المضيف. مثلا: استخدام المؤشّر دون الحاجة للضغط على زر Ctrl في لوحة المفاتيح. النسخ واللّصق بين النظامين. تشارك الملفات. القدرة على تغيير حجم الواجهة الرسوميّة داخل النظام الوهمي بتغيير حجم نافذة النّظام داخل VirtualBox. تحتاج قبل تثبيت إضافات VirtualBox إلى تثبيت أدوات التّطوير (نفّذنا هذه الخطوة أثناء تثبيت النظام) وإلى الدّخول إلى واجهة سطح المكتب. تكون خطوات التثبيت على النحو التالي. شغّل النظام الوهميّ RHEL ثم اختر قائمة Devices (أجهزة طرفيّة) في نافذة VirtualBox؛ ثم اختر Insert Guest Additions CD image. ستظهر بعد لحظات نافذة حوار تسألك ما إذا كنت متأكدا من أنك تريد تنزيل الملف. يبدأ تنزيل الملفّ بالضغط على Download (نزِّل) ثم تظهر بعد اكتمال التنزيل نافذة تطلُب تسجيل الملف وإدخاله في القرص الضّوئي الوهمي للنظام. انقر على زر Insert. تظهر بعد إدخال الملفّ النافذة التاليّة التي تطلُب تشغيله. يبدأ - بالنقر على زر Run في النافذة - تثبيتُ الإضافات. سيُطلَب منك إدخال كلمة السّر الخاصّة بحساب الجذر Root. تطلُب نافذة التثبيت الضغط على زر Enter بعد اكتمال العملية. أعد تشغيل النظام؛ ستظهر رسالة على الشاشة تخبرك أن النظام الوهمي يتعرّف الآن تلقائيا على المؤش عند مروره في النافذة الخصّة به في VirtualBox دون الحاجة للضّغط على زر Ctrl. يمكن استخدام المؤشّر على النّظام المضيف بمجرّد خروجه من حيّز الشاشة المخصَّص للنظام الضّيف. انقر على الأيقونة اليمنى في الرسالة لكي لا تظهر مجدّدا. تحديث النظام الخطوة الأخيرة هي تحديث النّظام. افتح طرفيّة Terminal (قائمة التطبيقات ثم المفضّلة Favorites) ثم نفّذ الأمر التالي للدخول في الحساب الجذر: su - ستُطلب منك كلمة سر المستخدم الجذر. ثم نفّذ الأمر التالي لتحديث الحزم والبرامج المثبّتة: yum -y update
  14. تعدّ شركة 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 دورات تدريبيّة لمختلف اختباراتها إما في مراكز تابعة للشركة أو على الإنترنت؛ كما تتيح اشتراكا مدته سنة لكامل المحتوى التعليمي على موقعها. يمكن أيضا اتباع دورات تحضيرية لدى أحد المراكز المتعاونة المعتمدة.