المحتوى عن 'ريد هت'.



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

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

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

نوع المُحتوى


التصنيفات

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

التصنيفات

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

التصنيفات

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

التصنيفات

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

التصنيفات

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

التصنيفات

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

التصنيفات

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

التصنيفات

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

أسئلة وأجوبة

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

التصنيفات

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

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

  1. بدأنا في المقال السابق من سلسلة دروس 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.
  2. يعدّ التعامل مع الملفات النصيّة من المهامّ المتكرّرة التي على مدير النّظُم تنفيذها. تشمل هذه المهمّة التّعديل على الملفّات الموجودة (ملفات إعداد غالبا) أو إنشاء ملفّات جديدة. سنقدّم في هذا الدّرس البرنامجيْن الأكثر استخداما لتحرير الملفات النصيّة على 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.
  3. نتطرّق في هذا المقال من سلسلة الدروس عن شهادة RHCSA من RedHat لكيفيّة إعداد نظام التخزين وضبطه على RedHat Enterprise Linux 7 باستخدام الأداة Parted وهي الأداة المبدئيّة للتعامل مع وحدات التخزين في RHEL؛ سنقدّم أيضا مدير نظام التخزين System storage manager, SSM الذي يسهّل المهمّة كثيرا. إنشاء التجزئات Partitions والتعديل عليها في RedHat Enterprise Linux تُستَخدم الأداة parted مبدئيا للتعامل مع التجزئات في RHEL؛ ويمكن باستخدامها: عرض جدول التجزئات الحاليّة، التعديل على التجزئات الحاليّة بزيادة حجمها أو نقصه، إنشاء تجزئات جديدة على المساحة الفارغة من القرص أو على أجهزة تخزين جديدة. ملحوظة: نستخدم آلة تخيّلية باستخدام VirtualBox كما هو مشروح في درس تثبيت Red Hat Enterprise Linux باستخدام VirtualBox. أضفنا إليها قرصا تخيّليا جديدا لنختبر عليه أوامر parted. تمكن إضافة القرص التخيلي باختيّار إعدادات الآلة Settings، ثم تحديد التخزين Storage من نافذة الإعدادات ثم إنشاء قرص تخيليّ بالنقر عل أيقونة الإضافة التي تظهر بجانب خيّار Controller: SATA عند الحوم حوله بالمؤشر. يُستحسَن قبل البدء في إنشاء تجزئات جديدة أو التعديل على التجزئات الموجودة التأكّد من عدم استخدام أيّ من التجزئات على القرص. إن كانت لديك مساحة إبدال Swap على القرص فستحتاج لتعطيلها. الطريقة الأسهل لتهيئة هذه المتطلّبات هو إقلاع النظام على وضع الإنقاذ Rescue mode باستخدام وسيط التثبيت (قرص ضوئي أو مفتاح USB): اذهب إلى قائمة الأجهزة الطرفيّة Devices في VirtualBox ثم اختر الأقراص الضوئيّة Optical devices وحدّد مسار ملفّ ISO الخاصّ بتثبيت النظام. بعد إعادة تشغيل النظام والإقلاع على وسيط التثبيت تظهر قائمة الاختيّار التاليّة؛ حدّد خيار Troubleshooting (استكشاف الأخطاء). تظهر قائمة Troubleshooting؛ اختر منها Rescue a Red Hat Enterprise Linux system (أصلح نظاما يستخدم RHEL) انتظر قليلا حتى تظهر لك إمكانيّة تحديد الخيّار. توجد أربعة خيارات اختر منها Skip to shell (تجاوز إلى الصّدفة) بكتابة الرقم الظاهر أمامها (3). تحصُل باتّباع الخطوات السابقة على صدفة يمكنك تنفيذ أوامر Parted منها. إنشاء تجزئة جديدة نستخدم الأمر parted على النحو التالي لإنشاء تجزئة جديدة على القرص sdb (أي القرص الثاني، يُشار للقرص الأوّل بـ sda): # parted /dev/sdb ملحوظة 1: يحتوي المجلّد dev/ على ملفّات خاصّة للتعامل مع العتاد؛ يستخدم النظام الملفّ dev/sda/ للتعامل مع القرص الأوّل في الجهاز، dev/sdb/ مع الثاني، dev/sdc/ مع الثالث، وهكذا. يُشار إلى التجزئات الموجودة على قرص بأرقام: dev/sda1/ التجزئة الأولى من القرص الأول، dev/sda2/ التجزئة الثانية من القرص الأول، dev/sdb1/ التجزئة الأولى من القرص الثاني، وهكذا. ملحوظة 2: يحوي القرص الأول dev/sda/ ملفّات نظام التشغيل المثبّت على الجهاز. تطبيق أوامر بطريقة خاطئة على هذا القرص قد يجعل النظام غير قابل للاستخدام. سيظهر محثّ جديد لإدخال الأوامر الخاصّة بالأداة parted: نفّذ الأمر print في سطر أوامر parted للحصول على قائمة بالتجزئات الحاليّة على القرص: لا توجد حتى الآن أية تجزئة على القرص الذي تبلغ مساحته 8,5GB. سننشئ على هذا القرص تجزئة أوّليّة بمساحة تبلغ 7GB. نهيّئ Format التجزئة بنظام الملفّات xfs الذي يُستخدَم مبدئيا على RHEL؛ إلا أن بإمكانك الاختيار من بين نظم ملفّات أخرى كثيرة. سنبدأ بإنشاء التجزئة باستخدام الأمر mkpart ثم نهيّئها باستخدام الأمر mkfs.fstype؛ إذ أن دعم الأمر mkpart لأنظمة الملفات الحديثة ليس جيّدا. نضبُط في ما يلي لصيقة Label للقرص ثم ننشئ تجزئة أوليّة على القرص dev/sdb/ تبدأ من أول القرص (%0) وتنتهي عند 7GB (أي 7000MB)؛ ثم نستخدم الأمر print في الأداة Parted لعرض جدول تجزئات القرص. أثناء عمليّة الإنشاء يُطلّب منّا نوعيّة نظام الملفّات الذي نريد، نترك الخيار المبدئي. ملحوظة: لصيقة القرص Disk lable (تُسمّى أيضا جدول التجزئة Partition table أو خريطة التجزئة Partition map) هو سجّل يستخدمه النظام للحصول على معلومات عن التجزئة. يدعم الأمر mklable صيغ تجزئة محدّدة من بينها bsd، gpt، msdos وmac. نستخدم الآن الأمر mkfs.xfs لتهيئة التجزئة التي أنشأناها. نخرج من سطر الأوامر الخاص بالأداة Parted بتنفيذ الأمر quit ثم ننفّذ الأمر على النحو التالي: # mkfs.xfs /dev/sdb1 # parted /dev/sdb print لاحظ إرفاق التجزئة أثناء إنشائها ببيانات وصفيّة Meta data خاصّة بنظام الملفّات xfs. تغيير مساحة تجزئة تتيح الأداة Parted أمر resize لتغيير مساحة التجزئة، إلا أن هذا الأمر لا ينطبق سوى على نظم الملفّات القديمة مثل ext2، fat32 وfat16؛ أي أن الطريقة الوحيدة لتغيير مساحة التجزئة هي بحذفها ثم إنشائها من جديد وهو ما يعني حذف محتويات التجزئة وضياعها. تستخدم توزيعة RHEL نمط تجزئة LVM لتلافي هذه الصعوبة في إدارة التجزئات (سنرى كيف يعمل بعد قليل). نعرض في ما يلي لائحة بالتجزئات على القرص sdb ثم نحذف التجزئة الأولى: # parted /dev/sdb print # parted /dev/sdb rm 1 من المستحسَن ألا تستخدم هذا الأمر على نظام إنتاج حقيقي. مدير التجزئات المنطقية Logical volume manager رأينا أنّ تعديل مساحة التجزئات الموجودة على القرص بعد إنشائها بالطريقة التقليديّة المشروحة أعلاه صعب وربما يؤدي لفقدان بيانات؛ لهذا يجب النّظر إلى إمكانيّة الاستعانة بمدير التجزئات المنطقيّة LVM. يعمل مدير التجزئات على تجميع وسائط تخزين عدّة لتبدو كأنها وسيط تخزين واحد ثم إنشاء تجزئات انطلاقا من هذه الوحدة المجمَّعة. تكمُن الميزة التي تقدّمها هذه الطريقة في سهولة تمديد أو تقليص التجزئات المنطقيّة دون مصاعب تُذكر. يبيّن المخطَّط التالي البنية الأساسيّة لمدير التجزئات المنطقيّة. سنشرح في ما يلي أساسيّات استخدام مدير التجزئات المنطقيّة LVM. نهيّئ لهذا الغرض قرصين ملموسين تخيّليّيْن جديديْن بنفس طريقة إنشاء القرص التخيّلي في الفقرات السابقة. سنستخدم القرصيْن لإنشاء مجموعة تجزئة Volume group ننشئ عليها التجزئات المنطقيّة. إنشاء التجزئات الملموسة Physical Volumes نبدأ بإنشاء تجزئتيْن جديدتين ملموستيْن تأخذ كلّ واحدة منهما كامل القرص الذي توجد عليه. بالنسبة للقرص التخيلي الثالث (الأول هو قرص النظام، الثاني هو القرص الذي استخدمناه في الجزء الأول من المقال): # parted /dev/sdc (parted) mklable msdos (parted) mkpart Partition type? primary/secondary? p File system type? [ext2]? Start? 0% End? 100% (parted) print Model: ATA VBOX HARDDISK (scsi) Disk /dev/sdb: 8590MB sector size (logical/physical): 512B/512B Partition Table: msdos Disk flags: Number Start End Size Type File system Flags 1 1049kb 8590MB 8589MB primary quit نعيد نفس الشيء بالنسبة للرابع: # parted /dev/sdd ننفذ بالعودة إلى سطر الأوامر بعد تهيئة التجزئتين الأمرين التاليّين: # pvcreate /dev/sdc1 # pvcreate /dev/sdd1 تظهر في كلّ مرة رسالة بأن إنشاء التجزئة الملموسة تم بطريقة صحيحة. الأمر pvcreate جزء من مدير التجزئات المنطقيّة ومهمّته إنشاء التجزئات الملموسة التي سنجمّعها كما سنرى من أجل إنشاء تجزئات منطقية في ما بعد. إن أردت إظهار معلومات عن التجزئات الملموسة التي أنشأناها بالأمر pvcreate فيمكنك استخدام الأمر pvdisplay: # pvdisplay /dev/sdc1 # pvdisplay /dev/sdd1 يُظهر الأمر اسمَ التجزئة والمجموعة التي تنتمي إليها مع بيانات أخرى. لا توجد لحدّ الساعة مجموعة تجزئات؛ لذا سننشئ واحدة. إنشاء مجموعة تجزئات Volume group يُستخدم الأمر vgcreate لإنشاء مجموعة تجزئات. ننشئ في الأمر التالي مجموعة تجزئات باسم hsoub_vg تتكون من تجزئتين ملمومستين هما dev/sdc/1 و dev/sdd1/: # vgcreate hsoub_vg /dev/sd{c,d}1 تظهر رسالة تفيد بإنشاء مجموعة التجزئات. ستلاحظ الآن عند تنفيذ الأمر pvdisplay /dev/sdv1 اسم المجموعة ضمن معلومات التجزئة. إن أردت رؤية معلومات عن مجموعة التجزئات فيمكنك تنفيذ الأمر vgdisplay: # vgdisplay hsoub_vg إنشاء تجزئات منطقية جهّزنا مجموعة التجزئات؛ يمكننا الآن استخدامها لإنشاء تجزئات منطقية باستخدام الأمر lvcreate. يمكن أن نحدّد مساحة التجزئة إما بالوحدة (GB مثلا) أو بمداها (100 بالمئة)، المعطى الأخير للأمر هو اسم مجموعة التجزئات التي نريد تطبيق الأمر عليها: # lvcreate -L 3G -n vol01_docs hsoub_vg # lvcreate -L 1G -n vol02_logs hsoub_vg # lvcreate -l 100%FREE -n vol03_homes hsoub_vg يحدّد الخيار L- مساحة التجزئة بالوحدة، l- النسبة من المجموعة و n-اسم التجزئة المنطقيّة. في الأمرين الأول والثاني أعلاه أنشأنا تجزئتين منطقيتين مساحتاهما على التوالي 3G و1G. في الأمر الثالث طلبنا أن تأخذ التجزئة كامل المساحة المتبقيّة على مجموعة التجزئة . يمكن باستخدام الأمر lvdisplay إظهار التجزئات المنطقية الموجودة على مجموعة تجزئات كالتالي: # lvdisplay hsoub_vg تهيئة التجزئات المنطقية وتركيبها يمكنك بعد إنشاء التجزئات المنطقيّة تهيئتها بنظام الملفات الذي تريد؛ نستخدم في المثال التالي نظام الملفّات ext4 (من المهمّ اختيار نظام الملفات المناسب؛ xfs مثلا لا يدعم تغيير مساحة التجزئة): # mkfs.ext4 /dev/hsoub_vg/vol01_docs # mkfs.ext4 /dev/hsoub_vg/vol02_logs # mkfs.ext4 /dev/hsoub_vg/vol03_homes لاحظ مسار التجزئات المنطقيّة. توجد مجموعة التجزئات على المسار dev/hsoub_vg/ حيث hsoub_vg هو مجموعة التجزئة، وبداخل المجلّد توجد التجزئات المنطقيّة التي أنشأناها سابقا. يأتي بعد التهيئة تركيبُ التجزئات حتى يمكن استخدامها: # mkdir /mnt/docs /mnt/logs /mnt/homes # mount /dev/hsoub_vg/vol01_docs /mnt/docs # mount /dev/hsoub_vg/vol02_logs /mnt/logs # mount /dev/hsoub_vg/vol03_homes /mnt/homes ملحوظة: يعني التركيب Mounting إتاحة إمكانية الوصول لنظام الملفات انطلاقا من نقطة معينة في شجرة ملفات لينكس. بدون هذه الخطوة لا يمكن استعمال التجزئة. يمكن الآن تخزين الملفّات في المجلّد mnt/docs/ وسيضعها النظام على التجزئة المنطقيّة vol01_docs. ينطبق نفس المبدأ على بقيّة التجزئات والمسارات. حذف التجزئات المنطقية، مجموعة التجزئات والتجزئات الملموسة نستخدم الأوامر vgremove، lvremove وpvremove لحذف تجزئة منطقية، مجموعة تجزئات وتجزئات ملموسة على التوالي. سنحتاج أولا لفصلها (نزع تركيبها) بالأمر umount: # umount /mnt/docs /mnt/logs /mnt/homes # lvremove /dev/hsoub_vg/vol01_docs /dev/hsoub_vg/vol02_logs /dev/hsoub_vg/vol03_homes ستظهر رسالة تطلُب منك تأكيد رغبتك في حذف التجزئات؛ اضغط زر y للتأكيد. ثم نحذف مجموعة التجزئات ومن بعدها التجزئات الملموسة: # vgremove /dev/hsoub_vg # pvremove /dev/sd{b,c}1 سنخرج الآن من وضع الإنقاذ بعد أن رأينا آلية عمل التجزئات المنطقية. استخدم الأمر exit للخروج من وضع الإنقاذ ثم انزع القرص الضوئي التخيلي حتى يستطيع النظام الإقلاع من القرص التخيليّ (يمكن أيضا إطفاء الآلة التخيليّة مباشرة من VirtualBox ونزع القرص الضوئي ثم تشغيلها من جديد). استخدام مدير وسائط التخزين SSM لإنشاء التجزئات المنطقية وإدارتها مدير وسائط التخزين SSM (اختصار لـ System storage manager) هو أداة تعمل واجهةً بين لإدارة وسائط التخزين بطريقة أسهل. رأينا في الفقرات السابقة أنّه يلزم تنفيذ خمسة أوامر لإنشاء تجزئة منطقيّة والبدء في استخدامها (mkfs ، lvcreate ، vgcreate ،pvcreate و mount). يمكن باستخدام ssm اختصار هذه الخطوات في خطوة واحدة. نبدأ بتحديث حزم النظام وتثبيت مدير وسائط التخزين: $ su - Password: # yum update && yum install system-storage-manager ثم نستخدم الأمر ssm لإنشاء تجزئات بنفس الخاصيّات السابقة: # ssm create -s 3G -n vol01_docs -p hsoub_vg --fstype ext4 /mnt/docs /dev/sd{c,d}1 # ssm create -s 1G -n vol02_logs -p hsoub_vg --fstype ext4 /mnt/logs # ssm create -n vol03_homes -p hsoub_vg --fstype ext4 /mnt/homes ملحوظة: تأكد من وجود المجلدات على المسارات mnt/logs ، /mnt/docs/ و mnt/homes/ حتى يمكن تركيب التجزئات عليها. يمكن من الأوامر استنتاجُ عمل الخيارات: المساحة: s-. اسم التجزئة المنطقية: n-. مجموعة التجزئات: p-. نقطة التركيب: المسارات mnt/logs، /mnt/docs/ وmnt/homes/. التجزئات الملموسة: dev/sd{c,d}1/. لم نحدّد في الأمر الأخير مساحة التجزئة؛ في هذه الحالة تأخذ التجزئة كامل المساحة المتبقيّة على مجموعة التجزئات. حدّدنا في الأمر الأول التجزئات الملموسة التي ستتكوّن منها مجموعة التجزئات؛ بينما لم نفعل ذلك في الأمريْن الآخريْن إذ لم نعد نحتاجه بعد إنجاز المهمة في الأمر الأول. نفَّذ ssm في الأوامر أعلاه المهامّ التالية: إعداد التجزئات الملموسة. إنشاء مجموعة تجزئات. إنشاء تجزئات منطقيّة. تهيئة التجزئات المنطقيّة. تركيب التجزئات المنطقيّة. يمكننا الآن عرض معلومات عن التجزئات الملموسة، مجموعات التجزئات والتجزئات المنطقيّة على التوالي بالأوامر: # ssm list dev # ssm list pool # ssm list vol من أهم الميزات التي توفّرها التجزئات المنطقيّة إمكانيّة التعديل على مساحتها (تصغيرها أو تكبيرها) مباشرة. نفرض مثلا أن التجزئة vol02_logs توشك على الامتلاء بينما توجد مساحة فارغة كبيرة على التجزئة vol03_homes. لحد الساعة لا توجد مساحة فارغة على مجموعة التجزئات hsoub_vg لأننا استهلكناها كلَّها بإنشاء تجزئات منطقية عليها؛ يمكن التأكد من ذلك بتنفيذ الأمر ssm list pool: ما سنفعله هو تقليص مساحة التجزئة vol03_homes ثم منح المساحة المقتطعة منها للتجزئة الممتلئة vol02_logs . يعدّل الأمر التالي على التجزئات المنطقيّة بحيث تصبح مساحة vol03_homes تساوي 4GB بدلا من 11GB: # ssm resize -s 4G /dev/hsoub_vg/vol03_homes إن أعدنا تنفيذ الأمر ssm list pool الآن فسنرى وجود مساحة غير مستقلة على المجموعة hsoub_vg. يمكننا الآن زيادة مساحة التجزئة vol02_logs: # ssm resize -s+2G /dev/hsoub_vg/vol02_logs يطلُب الأمر زيادة مساحة التجزئة vol02_logs بـ2GB. يمكن باستخدام الأمر ssm remove حذفُ تجزئة منطقيّة على النحو التالي: # ssm remove /dev/hsoub_vg/vol01_docs ستظهر رسالة تطلب منك التأكيد على خيّار الحذف. لحذف مجموعة تجزئات نحذف التجزئات المنطقيّة أولا ثم ننفّ الأمر: # ssm remove hsoub_vg إدارة التجزئات المعماة بواسطة SSM يتوفّر مدير وسائط التخزين SSM على إمكانيّة تعميّة تجزئات موجودة أو إنشاء تجزئات وتعميّتها. سنحتاج لهذا الغرض لتثبيت حزمة cryptsetup إن لم تكن مثبّتة قبلا، على النحو التالي: # yum update && yum install cryptsetup ثم ننفذ الأوامر التالية لإنشاء تجزئات معمّاة، سيُطلب منك إدخال عبارة سرّ Passphrase وتأكيدها. # ssm create -s 3G -n vol01_docs -p hsoub_vg --fstype ext4 --encrypt luks /mnt/docs /dev/sd{c,d}1 # ssm create -s 1G -n vol02_logs -p hsoub_vg --fstype ext4 --encrypt luks /mnt/logs # ssm create -n vol03_homes -p hsoub_vg --fstype ext4 --encrypt luks /mnt/homes لا تختلف الأوامر عن الأوامر السابقة لإنشاء التجزئات سوى في إضافة الخيار encrypt-- الذي يحدّد نوعيّة التعميّة (luks في حالتنا، وهي طريقة تعميّة ينتشر استخدامها على أنظمة لينكس). يجب أن نضيف التجزئات إلى ملف etc/fstab/ حتى تكون متاحة بعد إقلاع النظام. سنستخدم معرّفات التجزئات UUID التي يمكننا الحصول عليها بتنفيذ الأمر blkid: # blkid -o value UUID /dev/hsoub_vg/vol01_docs # blkid -o value UUID /dev/hsoub_vg/vol02_logs # blkid -o value UUID /dev/hsoub_vg/vol03_homes ثم نضع المحتوى التالي في الملفّ etc/crypttab/ (استخدم المعرفات التي حصلت عليها في الخطوة السابقة): docs UUID=ba77d113-f849-4ddf-8048-13860399fca8 none logs UUID=58f89c5a-f694-4443-83d6-2e83878e30e4 none homes UUID=92245af6-3f38-4e07-8dd8-787f4690d7ac none ثم نضيف ما يلي إلى ملفّ etc/fstab/ (أسفل المحتوى الموجود في الملفّ): # Logical volume vol01_docs: /dev/mapper/docs /mnt/docs ext4 defaults 0 2 # Logical volume vol02_logs /dev/mapper/logs /mnt/logs ext4 defaults 0 2 # Logical volume vol03_homes /dev/mapper/homes /mnt/homes ext4 defaults 0 2 لاحظ أن الاسم الظاهر بعد dev/mapper/ هو نفس المعرّف المحدَّد في الملفّ etc/crypttab/. نفّذ الأمر systemctl reboot لإعادة التشغيل وستجد أنّ النظام يطلُب عبارة السرّ من أجل تركيب التجزئات. ملحوظة: تأكّد من كتابة التعليمات في الملفّات etc/crypttab و etc/fstab/ بطريقة صحيحة؛ وإلا فيمكن ألّا يقلع النظام. إن حدث خطأ ستُطلَب منك كلمة سر الحساب الجذر؛ ويمكنك بعدها تصحيح محتوى الملفّ ثم إعادة تشغيل النظام بالأمر السابق. يمكنك التأكد من أنّ التجزئات رُكِّبت في النقاط التي حدّدناها سلفا بتنفيذ الأمر mount لإظهار نقاط التركيب ثم استخدام grep لاختيار تلك التي توجد بها mnt حيث ركّبنا التجزئات: # mount | grep "mnt" /dev/mapper/logs on /mnt/logs type ext4 (rw,realtime,seclabel,data=ordered) /dev/mapper/docs on /mnt/docs type ext4 (rw,realtime,seclabel,data=ordered) /dev/mapper/homes on /mnt/homes type ext4 (rw,realtime,seclabel,data=ordered) خاتمة رأينا في هذا الدرس مبادئ إعداد نظام التخزين بالطريقة التقليدية وباستخدام أدوات إدارة التجزئات الحديثة مثل lvm و ssm. من المهم الانتباه إلى التعامل مع التجزئات يؤثّر مباشرة على عمل النظام ويمكن لخطأ في تنفيذ أمر مّا أن يجعل النظام غير قابل للاستخدام؛ لذا تدرّب أولا على نظام غير أساسي (أو تخيلي، وهي الطريقة الأسهل) إلى أن تتأكد من فهمك لآلية عمل مختلف الأدوات قبل أن تنتقل إلى بيئة إنتاج. ترجمة -وبتصرّف- للمقال RHCSA Series: Using ‘Parted’ and ‘SSM’ to Configure and Encrypt System Storage – Part 6 لصاحبه Gabriel Cánepa.
  4. تعتمد الكثير من بيئات المؤسسات التي توجد بها حواسيب بنُظم تشغيل مختلفة (توزيعات لينكس أو وندوز) على خادوم 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.
  5. تعرَضنا في دروس سابقة لكيفيّة إدارة الملفات و المستخدمين على 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.
  6. تتطلّب إدارة خادوم 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.