تعلم لينكس هو one of the most valuable skills in the tech industry. يمكنه مساعدتك على القيام بالأمور بسرعة أو بكفاءة أعلى. معظم الخوادم القوية والحوسبات العملاقة في العالم تشتغل على لينكس.
بينما يؤدي لك تعلم لينكس إلى تمكينك في دورك الحالي، يمكنه أيضًا مساعدتك في نقلك إلى مجالات تكنولوجية أخرى مثل DevOps، والأمن السيبراني، والحوسبة السحابية.
في هذا الدليل، ستتعلم الأساسات من خلال شريط الأوامر اللينكسي، ومن ثم ستنتقل إلى مواضيع أكثر تعقيدًا مثل كتابة الscripting القوسي والإدارة النظامية. سواءً كنت جديدًا في لينكس أو قد استخدمته لسنوات، يوجد في هذا الكتاب شيء لك.
مشاهدة مهمة: جميع الأمثلة في هذا الكتاب تم توضيحها في Ubuntu 22.04.2 LTS (Jammy Jellyfish). أغلب الأدوات الخطوط التي تعمل بشكل متزايد أو أقل بنفسها في التوزيعات الأخرى. ولكن بعض التطبيقات الواجهة الشخصية والأوامر قد تختلف إذا كنت تعمل على توزيع لينكس آخر.
جدول محتويات
-
جزء 2: مقدمة إلى الصدفة Bash وأوامر النظام
جزء 1: مقدمة للينكس
1.1. بدء العمل مع لينكس
ما هو لينكس؟
لينكس هو نظام تشغيل مفتوح المصدر وهو مبني على نظام تشغيل يونكس. تم إنشاؤه بواسطة لينوس تورفالدس في عام 1991.
المصدر المفتوح يعني أن شفرة النظام التشغيل متوفرة للجميع. هذا يسمح لأي شخص بتعديل الشفرة الأصلية، وتخصيصها، وتوزيع نظام التشغيل الجديد للمستخدمين الحاليين.
لماذا يجب عليك التعرف على لينكس؟
في المناظرة الحالية للمراكز البيانية، يختلف لينكس ومايكروسوفت وندز على أنهم الرival، مع لينكس الذي يمتلك أغلبية كبيرة.
هنا عدة أسباب قوية لتعلم لينكس:
-
بالنظر إلى واسعة تشغيل لينكس، هناك فرصة عالية أن تكون تطبيقك يُستضاف على لينكس. لذلك يصبح تعلم لينكس كمبرمج أكثر قيمة.
-
بما أن الحوسبة السحابية أصبحت الوضع العادي، الأحتمالات العالية أن مثيلات السحابة التي تعتمد على لينكس.
-
يخدم لينكس كمنصة لعدة نظم تشغيل للأشياء الإنترنتية (IoT) وتطبيقات الهواتف المحمولة.
-
في تقنية المعلومات، هناك الكثير من الفرص لمهارات لينكس.
ماذا يعني بأن لينكس نظام تشغيل مفتوح المصدر؟
ما هو المصدر المفتوح؟ البرمجيات المصدر المفتوح هي البرمجيات التي يتم تتاح الحصول على شفرتها بحرية، مما يسمح لأي شخص باستخدامها، تعديلها، وتوزيعها.
في كل مرة يتم إنشاء شفرة المصدر، يصبح ذلك تلقائياً محمي بحقوق النسخ، وتوزيعه يحدد من قبل صاحب حقوق النسخ من خلال تراخيص البرمجيات.
على عكس المصدر المفتوح، يقيد البرمجيات الاحتكارية أو المغلقة الوصول إلى شفرتها الخاصة. فقط المبتكرين يمكنهم النظر، والتعديل، أو توزيعها.
لينكس هو بشكل رئيسي مصدر مفتوح، وهذا يعني أن شفرتها متاحة بحرية. يمكن لأي شخص النظر، والتعديل، وتوزيعها. يمكن للمطورين من جميع أنحاء العالم المساهمة في تحسينها. هذا يضع الأساس للتعاون الذي هو جزء مهم من برمجيات المصدر المفتوح.
هذه المقاربة التعاونية أودت إلى إقبال واسع للينكس عبر الخوادم، وأجهزة الكمبيوتر المكتبية، والأنظمة المدمجة، وأجهزة الهاتف النقال.
أكثر جانب لينكس كمصدر مفتوح هو أن أي شخص يستطيع تعديل نظام التشغيل لاحتياجاته المحددة دون تقييد من التراخيص الاحتكارية.
نظام Chrome OS الذي يستخدمه أجهزة Chromebooks يعتمد على لينكس. وأندرويد، الذي يعمل على الكثير من الهواتف النقالة حول العالم، يعتمد أيضًا على لينكس.
ما هو نواة لينكس؟
النواة هو العنصر الأساسي لنظام التشغيل الذي يدير عمليات الكمبيوتر وأجهزته. يتمركز على عمليات الذاكرة ووقت المعالج.
تؤدي النواة دور جسر بين التطبيقات والمعالجة الرفمية للبيانات عن طريق الاتصال بين العمليات والمناطق الخاصة للنظام.
تحميل النواة إلى الذاكرة أولاً عند بدء نظام تشغيل وتبقى هناك حتى إغلاق النظام. تحمل المسؤولية عن مهام كالإدارة الصحفية، إدارة المهام، وإدارة الذاكرة.
إذا كنت مهتماً بما يبدو عليه نواة لينكس، هنا هو رابط GitHub.
ما هو توزيع لينكس؟
في هذه النقطة، تعلم أنه يمكنك إعادة إستخدام شفرة نواة لينكس، تعديلها، وإنشاء نواة جديدة. يمكنك أيضًا تركيب مختلف الأدوات والبرمجيات لإنشاء نظام تشغيل جديد تمامًا.
توزيع لينكس أو distro هو إصدار من نظام تشغيل لينكس الذي يتضمن نواة لينكس، أدوات النظام، وبرامج أخرى. وبما أنه مفتوح المصدر، يعتبر توزيع لينكس جهود تعاونية تتضمن مجموعات تطوير مستقلة عديدة.
ماذا يعني أن يكون التوزيع مشتق؟ عندما تقول أن التوزيع “مشتق” من آخر، فإن التوزيع الجديد يبني على قاعدة أو أساس التوزيع الأصلي. يمكن أن تشمل هذه التشريعات استخدام نفس نظام إدارة الحزم (سنتحدث عن ذلك لاحقًا),إصدار نواة الكيرنل، وفي بعض الأحيان نفس أدوات التكوين.
اليوم، هناك آلاف التوزيعات لينكس التي يمكن الإختيار منها، وتوفر أهداف ومعايير مختلفة لتحديد ودعم البرمجيات المقدمة من توزيعاتهم.
تتنوع التوزيعات واحدة من الأخرى، ولكنها تتمتع ببعض الصفات المشتركة:
-
تتألف التوزيع من نواة لينكس.
-
تدعم برامج الفضاء المستخدم.
-
قد تكون التوزيع صغيرة ولغرض واحد أو تتضمن الآلاف من البرامج المفتوحة المصدر.
-
يجب توفير بعض وسائل الإنصراف وتحديث التوزيع والعناصر التابعة له.
إذا نظرت إلى جدول الزمن لتوزيعات لينكس، سترى التوزيعتين الرئيسيين: سلاكوار وديبيان. تتم إشيرة إلى عدة توزيعات منهما. مثلا، أوبونتو وكالي تأتي من ديبيان.
ما هي مزايا التشعيب؟ هناك مزايا متعددة للتشعيب. تستطيع توزيعات المشعوبة أن تستفيد من الاستقرار، الأمان، ومستودعات البرامج الكبيرة للتوزيع الأصلي.
عند البناء على بناء موجود، يمكن للمطورين أن يركزوا جميع جهودهم على الميزات المتخصصة للتوزيع الجديدة. يستفيد مستخدمو توزيعات المشعوبة من التوثيق، الدعم الجماعي، والموارد المتاحة للتوزيع الأصلي.
بعض توزيعات لينكس الشعبية تتضمن:
-
أبونتو
: إحدى التوزيعات الشهيرة والأكثر استخدامًا لللينكس، وهي مهذبة للمستخدمين وموصولة للمبتدئين. تعلم أكثر عن أبونتو هنا.
-
ماينت لينكس: تقوم بعملية تكرار من الأبونتو، وتوفر تجربة مهذبة للمستخدمين مع تركيز دعم المعاين المتعددة. تعلم أكثر عن ماينت لينكس هنا.
-
أرش لينكس: مشهور ومن المفضل للمستخدمين المحتملين، وهي توزيعة خفيفة وقابلة للتواؤم تستهدف المستخدمين الذين يفضلون النهج اليدوي. تعلم أكثر عن أرش لينكس هنا.
-
مانجارو: يعتمد على Arch Linux، يوفر مانجارو تجربة سهلة للمستخدم مع برامج مثبتة مسبقًا وأدوات سهلة لإدارة النظام. تعرف على المزيد حول مانجارو هنا.
-
كالي لينكس: يوفر كالي لينكس مجموعة شاملة من أدوات الأمان ويركز بشكل أساسي على الأمن السيبراني والاختراق. تعرف على المزيد حول كالي لينكس هنا.
كيفية تثبيت والوصول إلى لينكس
أفضل طريقة للتعلم هي تطبيق المفاهيم أثناء تقدمك. في هذا القسم، سنتعلم كيفية تثبيت لينكس على جهازك حتى تتمكن من المتابعة. ستتعلم أيضًا كيفية الوصول إلى لينكس على جهاز يعمل بنظام ويندوز.
أوصي بأن تتبع أي من الطرق المذكورة في هذا القسم للوصول إلى لينكس حتى تتمكن من المتابعة.
تثبيت لينكس كنظام التشغيل الأساسي
تثبيت لينكس كنظام التشغيل الأساسي هو الطريقة الأكثر فعالية لاستخدام لينكس، حيث يمكنك استخدام القوة الكاملة لجهازك.
في هذا القسم، ستتعلم كيفية تثبيت أوبونتو، وهي واحدة من أكثر توزيعات لينوكس شيوعًا. لقد تركت التوزيعات الأخرى الآن، لأنني أريد أن أبقي الأمور بسيطة. يمكنك دائمًا استكشاف التوزيعات الأخرى بمجرد أن تشعر بالراحة مع أوبونتو.
-
الخطوة 1 – تنزيل ملف iso لأوبونتو: قم بزيارة الموقع الرسمي وقم بتنزيل ملف iso. تأكد من اختيار إصدار مستقر يُسمى “LTS”. تعني LTS دعمًا طويل المدى، مما يعني أنك ستحصل على تحديثات الأمان والصيانة مجانًا لفترة طويلة (عادة 5 سنوات).
-
الخطوة 2 – إنشاء بندريف قابل للإقلاع: هناك العديد من البرامج التي يمكنها إنشاء بندريف قابل للإقلاع. أوصي باستخدام Rufus لأنه سهل الاستخدام جدًا. يمكنك تحميله من هنا.
-
الخطوة 3 – الإقلاع من الفلاشة: بمجرد أن تكون الفلاشة القابلة للإقلاع جاهزة، أدخلها وقم بالإقلاع منها. يعتمد إعداد قائمة الإقلاع على جهاز اللابتوب الخاص بك. يمكنك البحث في جوجل عن قائمة الإقلاع لنموذج اللابتوب الخاص بك.
-
الخطوة 4 – اتبع التعليمات: بمجرد بدء عملية الإقلاع، اختر
try or install ubuntu
.ستستغرق العملية بعض الوقت. بمجرد ظهور واجهة المستخدم الرسومية، يمكنك تحديد اللغة وتخطيط لوحة المفاتيح والاستمرار. أدخل اسم المستخدم وكلمة المرور الخاصة بك. تذكر هذه البيانات لأنك ستحتاجها لتسجيل الدخول إلى نظامك والوصول إلى الامتيازات الكاملة. انتظر حتى تكتمل عملية التثبيت.
-
الخطوة 5 – إعادة التشغيل: انقر على إعادة التشغيل الآن وأزل الفلاشة.
- خطوة 6 – الدخول: قم بالدخول باستخدام البيانات الشخصية التي أدخلتها سابقاً.
وهكذا تفعل! الآن يمكنك تثبيت التطبيقات وتخصيص سطح المكتب.
للتثبيت المتقدم، يمكنك التحقق من المواضيع التالية:
-
تقسيم القرص.
-
إعداد ذاكرة التبادل لتمكين وضع النوم العميق.
الوصول إلى الطرفية
جزء مهم من هذا الدليل هو تعلم الطرفية التي ستشغل جميع الأوامر وسترى السحر يحدث. يمكنك البحث عن الطرفية بضغط مفتاح “windows” وكتابة “terminal”. يمكنك حبس الطرفية في الشريط الجانبي حيث توجد الأعطال الأخرى للوصول بسهولة.
💡 الاختصار لفتح الطرفية هو
ctrl+alt+t
يمكنك أيضاً فتح الطرفية من داخل مجلد. قم بالضغط بالزر الأيمن حيث تكون وانقر على “افتح في الطرفية”. سيفتح الطرفية في نفس المسار.
كيفية استخدام لينكس على جهاز وندوز
في بعض الأحيان قد تحتاج إلى تشغيل لينكس ووندوز جنباً إلى جنب. لحسن حظك، هناك بعض الطرق التي يمكنك من خلالها الحصول على أفضل العالمين دون الحاجة إلى حاسبات مختلفة لكل نظام تشغيل.
في هذا القسم، ستتحقق من بعض الطرق لاستخدام لينكس على جهاز وندوز. بعضها مبني على المتصفح أو السحابة ولا يحتاج إلى تثبيت أي نظام تشغيل قبل الاستخدام.
الخيار 1: “تشغيل ثنائي” لينكس + ويندوز مع التشغيل الثنائي، يمكنك تثبيت لينكس بجانب ويندوز على حاسوبك، مما يسمح لك بإختيار نظام التشغيل الذي تريد استخدامه عند البدء.
هذا يتطلب تقسيم القرص الصلب الخاص بك وتثبيت لينكس على قسم منفصل. بتلك المقاربة، يمكنك استخدام نظام تشغيل واحد في كل مرة.
الخيار 2: استخدام النظام الفرعي للينكس في ويندوز (WSL) يوفر النظام الفرعي للينكس طبقة توافق التي تسمح لك بتشغيل التنفيذيات الثنائية للينكس بطريقة طبيعية على ويندوز.
استخدام WSL له بعض المزايا. تكوين WSL بسيط وليس مكلفًا للوقت. يعتبر خفيفًا مقارنة بالماكينات الافتراضية حيث يتوجب عليك تخصيص الموارد من الآلة الضامنة. ليس عليك تثبيت أي ISO أو صورة قرص افتراضي لأجهزة لينكس التي تميل إلى أن تكون ملفات كبيرة. يمكنك استخدام ويندوز ولينكس جنبًا إلى جنب.
كيفية تثبيت WSL2
أولاً، قم بتمكين خاصية النظام الفرعي للينكس في الإعدادات.
-
إذهب إلى بداية. أبحث عن “تشغيل أو تعطيل ميزات ويندوز”.
-
أشرح خيار “النظام الفرعي للينكس” إذا لم يكن مشار إليه بالفعل.
-
ثم، قم بفتح سطر الأوامر الخاص بك وإعطاء أوامر التثبيت.
-
افتح موجه الأوامر كمسؤول:
-
نفذ الأمر التالي:
wsl --install
هذه هي النتيجة:
ملاحظة: سيتم تثبيت أوبونتو بشكل افتراضي.
- بمجرد اكتمال التثبيت، ستحتاج إلى إعادة تشغيل جهاز ويندوز الخاص بك. لذا، أعد تشغيل جهاز ويندوز.
بعد إعادة التشغيل، قد ترى نافذة مثل هذه:
بمجرد اكتمال تثبيت أوبونتو، سيُطلب منك إدخال اسم المستخدم وكلمة المرور.
وهذا كل شيء! أنت جاهز لاستخدام أوبونتو.
قم بتشغيل أوبونتو من خلال البحث عنه من قائمة البداية.
وهنا تم تشغيل نسخة أوبونتو الخاصة بك.
الخيار 3: استخدام آلة افتراضية (VM)
الآلة الافتراضية (VM) هي محاكاة برمجية لنظام كمبيوتر مادي. تتيح لك تشغيل أنظمة تشغيل وتطبيقات متعددة على جهاز مادي واحد في وقت واحد.
يمكنك استخدام برامج المحاكاة الافتراضية مثل Oracle VirtualBox أو VMware لإنشاء آلة افتراضية تعمل بنظام لينكس داخل بيئة ويندوز الخاصة بك. هذا يتيح لك تشغيل لينكس كنظام تشغيل مضيف إلى جانب ويندوز.
برامج الحاسوب الافتراضي توفر خيارات لتخصيص وإدارة موارد الهاردوير لكل حاسوب افتراضي، بما في ذلك النوى الكهربائية، الذاكرة، المساحة القرصية، وعرضة الشبكة. يمكنك تعديل هذه التخصيصات بحسب الاحتياجات لأنظمة التشغيل الضيفة والتطبيقات.
إليك بعض الخيارات الشائعة المتاحة للتوصيل الافتراضي:
الخيار 4: استخدام حل على أساس المتصفح
حلول المتصفح تستخدم بشكل خاص لاختبار سريع، التعلم أو الوصول إلى بيئات لينكس من الأجهزة التي لا تحتوي على تثبيت لينكس.
يمكنك إما استخدام محررات الشفرة على الإنترنت أو الطرفيات على الإنترنت للوصول إلى لينكس. لاحظ أنه في العادة لا تملك الصلاحيات الكاملة للإدارة في هذه الحالات.
محررات الشفرة عبر الإنترنت
تقدم محررات الشفرة عبر الإنترنت محررات مع ترمينالات لينكس مدمجة. بينما يتمثل الغرض الرئيسي منها في البرمجة، يمكنك أيضًا إستخدام ترمينال لينكس لتنفيذ الأوامر وأداء المهام.
Replit هو مثال لمحرر الشفرة عبر الإنترنت، حيث يمكنك كتابة شفرتك وولوج الصدفة اللينكسية في نفس الوقت.
واجهات ترمينال لينكس عبر الويب:
تسمح لك ترمينالات لينكس عبر الإنترنت بالوصول إلى واجهة الأوامر السطرية للينكس مباشرة من متصفحك. توفر هذه الترمينالات واجهة عبر الويب لصدفة الينكس، مما يمكنك من تنفيذ الأوامر والعمل مع تطبيقات لينكس.
مثالاً لهذا القبيل هو JSLinux. يظهر الصورة أدناه بيئة لينكس جاهزة للاستخدام:
الخيار 5: استخدام حل تخزين السحابة
بدلاً من تشغيل لينكس مباشرة على جهاز ويندوزك، يمكنك النظر في استخدام بيئات لينكس عبر السحابة أو خواديم الخصوصية الافتراضية (VPS) للوصول والعمل بلينكس عن بعد.
تقدم خدمات مثل Amazon EC2 أو Microsoft Azure أو DigitalOcean إمثلة لينكس يمكنك الاتصال بها من جهاز الويندوز. تحذير، بعض هذه الخدمات يوفر تيرز مجاني، ولكنها ليست مجانية على المدى الطويل.
جزء 2: مقدمة لصدفة Bash وأوامر النظام
2.1. البدء بصدفة Bash
مقدمة لصدفة bash.
يقدم لائحة الأوامر الخاصة بلينكس بما يسمى قائمة الخاص (الشيل). خلال السنوات الماضية ، تم تطوير برنامج الشيل لتوفير خيارات مختلفة.
يمكن تكوين مستخدمين مختلفين للاستخدام من أنواع مختلفة من الشيلات. ومع ذلك ، يفضل معظم المستخدمين أن يبقوا بالشيل التي يتم بها التشغيل بالإفتراض. الشيل الافتراضي لمعظم توزيعات لينكس هو غانوم بورن-مجدد (bash
). يتم تلبية غانوم البورن (sh
) بواسطة الغانوم المتقدم.
لمعرفة شيلك الحالي، فعليك فتح محطة التحكم وإدخال الأوامر التالية:
echo $SHELL
تفسير الأمر:
-
تستخدم أوامر
echo
للتواصل مع المحطة. -
تحتوي
$SHELL
على ما يشابه أسم الشيل الحالي.
في إعداداتي، يأتي الناتج /bin/bash
هذا يعني أنني أستخدم الشيل البورن.
# ناتج
echo $SHELL
/bin/bash
الغانوم البورن قوي جدًا لأنه يمكنه توفير توازين صعبة إنجازها بصورة فعالة مع واجهة تصميمية (GUI)، أو واجهة مستخدم تصميمي. تذكر أن معظم الخوادم لا تحمل واجهة تصميمية وهو الأفضل تعلم إستخدام قوى واجهة خطأ الأوامر (CLI).
المحطة مقابل الشيل
تلك الم
المحطة الطرفية هي الواجهة التي تستخدمها للتفاعل مع الغلاف. الغلاف هو مترجم الأوامر الذي يعالج وينفذ أوامرك. ستتعلم المزيد عن الأغلفة في الجزء السادس من الدليل.
ما هو الموجه؟
عند استخدام الغلاف بشكل تفاعلي، فإنه يعرض $
عند انتظاره لأمر من المستخدم. يُطلق على هذا اسم موجه الغلاف.
[username@host ~]$
إذا كان الغلاف يعمل كمستخدم root
(ستتعلم المزيد عن المستخدم الجذر لاحقًا)، يتم تغيير الموجه إلى #
.
[root@host ~]#
2.2. بنية الأمر
الأمر هو برنامج يقوم بعملية معينة. بمجرد أن يكون لديك وصول إلى الغلاف، يمكنك إدخال أي أمر بعد علامة $
ومشاهدة الإخراج على المحطة الطرفية.
بشكل عام، تتبع أوامر لينكس هذا التركيب:
command [options] [arguments]
إليك تفصيل التركيب أعلاه:
-
command
: هذا هو اسم الأمر الذي تريد تنفيذه.ls
(قائمة)،cp
(نسخ)، وrm
(حذف) هي أوامر لينكس شائعة. -
[خيارات]
: الخيارات، أو الأعمال، تسير غالبًا بسبب الـ (-) الواحد أو الـ (–) المزدوج، تغير تصرف الأمر. يمكن أن يغير كيفية عمل الأمر. على سبيل المثال،ls -a
يستخدم خيار-a
لعرض الملفات المخفية في الداخل الحالي. [ما يتضمن الأعمال]
: الما يتضمن الأعمال هم الإدخالات للأوامر التي تحتاج إليها. قد تكون هذه الأشياء أسماء الملفات أو أسماء المستخدمين أو معلومات أخرى ستتعامل معها الأمر. على سبيل المثال، في الأمرcat access.log
،cat
هو الأمر وaccess.log
هو الإدخال. وكنتيجة لذلك، تتم عرض محتويات ملفaccess.log
بواسطة أمرcat
.
ليس من الضروري إدخال الخيارات والأعمال لكل الأ
💡نصيحة: يمكنك الإطلاع على دليل الأمر باستخدام الأمر man
.
يمكنك الوصول إلى صفحة دليل ls
بواسطة man ls
، وسيبدو كهذا:
صفحات الدليل هي طريقة عظيمة وسريعة للوصول إلى التوثيق. أوصيك بشدة بمشاهدة صفحات man للأوامر التي تستخدمها الكثير.
2.3. أوامر Bash واختصارات للمفاتيح
عندما تكون في الطرفية، يمكنك تسريع مهامك باستخدام الاختصارات.
هنا بعض الاختصارات الأكثر شيوعاً في الطرفية:
العملية | الاختصار |
البحث عن الأمر السابق | أسهم إلى الأعلى |
القفز إلى بداية الكلمة السابقة | Ctrl+LeftArrow |
مسح الحروف من المؤشر إلى نهاية سطر الأمر | Ctrl+K |
إكمال الأوامر، أسماء الملفات، والخيارات | الضغط على الزر Tab |
القفز إلى بداية سطر الأمر | Ctrl+A |
عرض قائمة الأوامر السابقة | history |
2.4. تحديد هويتك: الأمر whoami
يمكنك معرفة اسم المستخدم الذي قمت بتسجيل الدخول به باستخدام الأمر whoami
. هذا الأمر مفيد عندما تتبادل بين مستخدمين مختلفين وتريد تأكيد المستخدم الحالي.
فقط بعد الرمز $
، اكتب whoami
واضغط Enter.
whoami
هذه هي المخرجة التي حصلت عليها.
zaira@zaira-ThinkPad:~$ whoami
zaira
الجزء 3: فهم نظام Linux الخاص بك
3.1. اكتشاف نظام التشغيل والمواصفات الخاصة بك
طباعة معلومات النظام باستخدام أمر uname
يمكنك الحصول على معلومات مفصلة عن النظام من خلال أمر uname
.
عند تقديم الخيار -a
، فإنه يطبع جميع معلومات النظام.
uname -a
# الناتج
Linux zaira 6.5.0-21-generic #21~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Feb 9 13:32:52 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
في الناتج أعلاه،
-
Linux
: يشير إلى نظام التشغيل. -
zaira
: يمثل اسم المضيف للجهاز. -
6.5.0-21-generic #21~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Feb 9 13:32:52 UTC 2
: يوفر معلومات حول إصدار النواة، تاريخ الإنشاء، وبعض التفاصيل الإضافية. -
x86_64 x86_64 x86_64
: يشير إلى بنية النظام. -
GNU/Linux
: يمثل نوع نظام التشغيل.
إيجاد تفاصيل الأبنية البيانية للCPU باستخدام الأمر lscpu
الأمر lscpu
في لينكس يستخدم لإظهار معلومات عن الأبنية البيانية للCPU. عند تشغيل lscpu
في الطرفية، يوفر تفاصيل كالتالية:
-
أبنية الCPU (مثلاً، x86_64)
-
وضع التشغيل للCPU (مثلاً، 32-بت، 64-بت)
-
ترتيب البايت (مثلاً، النهاية الصغيرة)
-
الCPU (عدد الCPU)، وهكذا وأخرى
دعونا نجربها:
lscpu
# الناتج
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Address sizes: 48 bits physical, 48 bits virtual
Byte Order: Little Endian
CPU(s): 12
On-line CPU(s) list: 0-11
Vendor ID: AuthenticAMD
Model name: AMD Ryzen 5 5500U with Radeon Graphics
Thread(s) per core: 2
Core(s) per socket: 6
Socket(s): 1
Stepping: 1
CPU max MHz: 4056.0000
CPU min MHz: 400.0000
كان هذا الكثير من المعلومات، ولكنها مفيدة أيضًا! تذكر بأنك دائمًا يمكنك تصفية المعلومات المناسبة باستخدام الرموز الخاصة. انظر إلى دليل الأمر بواسطة man lscpu
.
الجزء 4: إدارة الملفات من سطر الأوامر
4.1. التسلسل الهرمي لنظام الملفات في لينكس
كل الملفات في لينكس تخزن في نظام الملفات. يتبع هيكلة الشجرة المعكوسة لأن الجذر في الجزء الأعلى.
الدليل /
هو الدليل الجذري والنقطة البداية لنظام الملفات. يحتوي الدليل الجذري على جميع الدلائل والملفات الأخرى في النظام. الرمز /
يخدم أيضًا كفاصل بين أسماء المسار. مثلاً، /home/alice
يشكل مساراً كاملاً.
الصورة أدناه تظهر جميع تسلسليات النظام الملفي. يخدم كل مسار مجهز لغرض محدد.
لاحظ أن هذه ليست قائمة كاملة وقد تكون التوزيعات المختلفة تحتوي على إعدادات مختلفة.
إليك جدول يظهر الغرض من كل مسار:
الموقع | الغرض |
/bin | البرامج الأساسية للأوامر |
/boot | الملفات الثابتة لمحمل البوت، المطلوب لبدء عملية البوت. |
/etc | إعدادات النظام المحددة للمضيف |
/home | مسارات المستخدمين الشخصية |
/root | مسار المستخدم الرئيسي للإدارة |
/lib | المكتبات المشتركة الأساسية وموديولات النواة |
/mnt | نقطة الإرتباط لتركيب نظام الملفات مؤقتاً |
/opt | حزم البرمجيات الإضافية للتطبيقات |
/usr | البرمجيات المثبتة والمكتبات المشتركة |
/var | البيانات المتغيرة التي تُبقى أيضًا بين البوتات |
/tmp | الملفات المؤقتة التي يمكن الوصول إليها لكل المستخدمين |
💡 تلميح: يمكنك معرفة المزيد عن نظام الملفات باستخدام الأمر man hier
.
يمكنك فحص نظام الملفات الخاص بك باستخدام الأمر tree -d -L 1
. يمكنك تعديل العلامة -L
لتغيير عمق الشجرة.
tree -d -L 1
# الناتج
.
├── bin -> usr/bin
├── boot
├── cdrom
├── data
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lib32 -> usr/lib32
├── lib64 -> usr/lib64
├── libx32 -> usr/libx32
├── lost+found
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── snap
├── srv
├── sys
├── tmp
├── usr
└── var
25 directories
هذه القائمة ليست كاملة وقد تكون التوزيعات والأنظمة المختلفة مكونة بشكل مختلف.
4.2. التنقل في نظام ملفات لينكس
المسار الأساسي vs المسار النسبي
المسار الأساسي هو المسار الكامل من الدليل الجذر إلى الملف أو الدليل. يبدأ دائمًا بـ/
. مثلاً، /home/john/documents
.
والمسار النسبي، على النقيض، هو المسار من الدليل الحالي إلى الملف أو الدليل المقصد. لا يبدأ بـ/
. مثلاً، documents/work/project
.
حدد دليلك الحالي باستخدام أمر pwd
من السهل أن تفقد طريقك في نظام الملفات لينكس، خاصة إذا كنت جديدًا في سطر الأوامر. يمكنك إيجاد دليلك الحالي باستخدام أمر pwd
.
هنا مثال:
pwd
# النتيجة
/home/zaira/scripts/python/free-mem.py
تغيير الدلائل باستخدام أمر cd
الأمر لتغيير الدلائل هو cd
ويمثل “change directory” (تغيير الدليل). يمكنك استخدام الأمر cd
للتنقل إلى دليلٍ مختلف.
يمكنك استخدام مسارًا نسبيًا أو مسارًا أساسيًا.
مثلاً، إذا كنت تريد التنقل في هيكل الملف التالي (تتبع الخطوط الحمراء):
وأنت تقف في “home”، سيكون الأمر هكذا:
cd home/bob/documents/work/project
بعض الاختصارات الشائعة لـcd
تتضمن:
الأمر | الوصف |
cd .. |
تعود إلى المجلد السابق |
cd ../.. |
تعود إلى المجلدين السابقين |
cd أو cd ~ |
تذهب إلى المجلد الرئيسي |
cd - |
تذهب إلى المسار السابق |
4.3. إدارة الملفات والمجلدات
حين العمل بالملفات والمجلدات، قد ترغب في نسخها، تحريكها، إزالتها، وإنشاء ملفات جديدة ومجلدات جديدة. هذه بعض الأوامر التي يمكنك استخدامها لذلك.
💡مختصر:يمكنك تمييز بين الملف والمجلد بنظرة إلى الحرف الأول في خريطة ls -l
. يمثل ال'-'
الملف ويمثل ال'd'
المجلد.
إنشاء مجلدات جديدة باستخدام الأمر mkdir
يمكنك إنشاء مجلد فارغ باستخدام الأمر mkdir
.
# تولد مجلد فارغ "foo" في المجلد الحالي
mkdir foo
يمكنك أيضًا إنشاء مجلدات تلقائيًا باستخدام الخيار -p
.
mkdir -p tools/index/helper-scripts
# خريطة المجلد
.
└── tools
└── index
└── helper-scripts
3 directories, 0 files
إنشاء ملفات جديدة باستخدام الأمر touch
أمر touch
يولد ملف فارغ. يمكنك استخدامه كما هو هنا:
# يولد ملف فارغ "file.txt" في المجلد الحالي
touch file.txt
يمكن توليد الأسماء المترابطة معاً إذا أردت إنشاء مجموعة من الملفات في أمر واحد.
# يمكن إنشاء ملفات فارغة "file1.txt", "file2.txt" و "file3.txt" في المجلد الحالي
touch file1.txt file2.txt file3.txt
إزالة ملفات و directories باستخدام الأوامر rm
و rmdir
يمكنك استخدام أوامر الـ rm
لإزالة كلا من الملفات والمجالدات الغير خالية.
الأمر | الوصف |
rm file.txt |
إزالة الملف file.txt |
rm -r directory |
إزالة المجالد directory ومحتوياته |
rm -f file.txt |
إزالة الملف file.txt دون التأكيد |
rmdir directory |
إزالة المجالد الفارغ |
🛑 تنبيه: يجب استخدام العلامة -f
بحذر لأنك لن تتم سؤالك قبل مسح ملفًا. و يجب احتواء عناء عند تشغيل أوامر rm
في المجلد root
لأنه قد ينتج عن محذوف ملفات جواهر النظام الرئيسية.
تخزين ملفات باستخدام الأوامر cp
لتنسخ الملفات في Linux، يمكنك استخدام الأوامر cp
.
- النموذج لتنسخ الملفات:
cp source_file destination_of_file
هذه الأوامر تنسخ الملف المسجل file1.txt
إلى موقع جديد /home/adam/logs
.
cp file1.txt /home/adam/logs
تأييد: تعني أيضًا تنسخ الـ cp
الملف المحدد مع الإسم المعطاً.
هذا الأمر ينسخ ملفاً يطلق عليه file1.txt
إلى ملف آخر يطلق عليه file2.txt
في نفس المجلد.
cp file1.txt file2.txt
تحريك وتغيير أسماء الملفات والمجلدات باستخدام الأمر mv
يستخدم الأمر mv
لتحريك الملفات والمجلدات من مجلد إلى آخر.
النسق البسيط لتحريك الملفات:mv مصدر_ملف وجهة_التحريك
مثال: تحريك ملف يطلق عليه file1.txt
إلى مجلد يطلق عليه backup
:
mv file1.txt backup/
لتحريك مجلد وما يحتوي عليه:
mv dir1/ backup/
تغيير أسماء الملفات والمجلدات في Linux يتم أيضًا باستخدام الأمر mv
.
النسق البسيط لتغيير أسماء الملفات:mv قدم_الملف الجديد_ملف
مثال: تغيير أسم ملف من file1.txt
إلى file2.txt
:
mv file1.txt file2.txt
تغيير أسم مجلد من dir1
إلى dir2
:
mv dir1 dir2
4.4. إيجاد ملفات ومجلدات باستخدام الأمر find
يسمح لك الأمر find
ببحث فعال عن ملفات، مجلدات، والأجهزة الحرفية والأجهزة الشبكية.
أساسياً تعني:
find /path/ -type f -name file-to-search
حيث،
/path
هو المسار الذي يتوقع أن يجد الملف فيه. هذا هو منطلق البحث عن الملفات. يمكن أيضًا أن يكون المسار/
أو.
وهما يمثلان المجلد الجذري والمجلد الحالي، بالمرة،>.-
-type
يمثل واصفات الملفات. يمكن أن تكون أيًا من التالي:
f
– ملف عادي مثل ملفات النصوص والصور والملفات المخفية.
d
– دليل. هذه هي المجلدات قيد النظر.
l
– ارتباط رمزي. تشير الروابط الرمزية إلى الملفات وتكون مشابهة للاختصارات.
c
– أجهزة الحروف. الملفات التي تُستخدم للوصول إلى أجهزة الحروف تُسمى ملفات أجهزة الحروف. يتواصل السائقون مع أجهزة الحروف عن طريق إرسال واستقبال أحرف فردية (بايتات، أوكتات). تشمل الأمثلة لوحات المفاتيح وبطاقات الصوت والفأرة.
b
– أجهزة الكتل. الملفات التي تُستخدم للوصول إلى أجهزة الكتل تُسمى ملفات أجهزة الكتل. يتواصل السائقون مع أجهزة الكتل عن طريق إرسال واستقبال كتل بيانات كاملة. تشمل الأمثلة USB و CD-ROM -name
هو اسم النوع الذي تريد بحثه.
كيفية بحث الملفات بواسطة الاسم أوالملفات بواسطة التوسيع
لو أننا نحتاج إيجاد ملفات تحتوي على “style” في أسمها. سنستخدم أمر مثل:
find . -type f -name "style*"
#output
./style.css
./styles.css
والآن يمكننا أن نبحث عن ملفات مع توسيع معين مثل .html
. سنقوم بتعديل الأمر بشكل ما هو ذلك:
find . -type f -name "*.html"
# output
./services.html
./blob.html
./index.html
كيفي
نقطة في بداية اسم الملف تمثل الملفات الخفية. هي تخفى عادة ولكن يمكن عرضها بواسطة ls -a
في الدليل الحالي.
يمكننا تعديل الأمر find
كما هو موضح أدناه للبحث عن الملفات الخفية:
find . -type f -name ".*"
عرض وبحث عن الملفات الخفية
ls -la
# محتويات المجلد
total 5
drwxrwxr-x 2 zaira zaira 4096 Mar 26 14:17 .
drwxr-x--- 61 zaira zaira 4096 Mar 26 14:12 ..
-rw-rw-r-- 1 zaira zaira 0 Mar 26 14:17 .bash_history
-rw-rw-r-- 1 zaira zaira 0 Mar 26 14:17 .bash_logout
-rw-rw-r-- 1 zaira zaira 0 Mar 26 14:17 .bashrc
find . -type f -name ".*"
# خروج find
./.bash_logout
./.bashrc
./.bash_history
فوق يمكنكم رؤية قائمة بالملفات الخفية في دليل المنزل الخاص بي.
كيفية البحث في ملفات السجلات وملفات التكوين
ملفات السجلات لها تمديد .log
، ويمكن العثور عليها كما يلي:
find . -type f -name "*.log"
بالمثل، يمكن البحث عن ملفات التكوين كما يلي:
find . -type f -name "*.conf"
كيفية البحث عن أشكال الملفات الأخرى بحسب النوع
يمكن البحث عن ملفات الكتلة الحرفية بتوفير c
لـ -type
:
find / -type c
بالمثل، يمكن العثور على ملفات الكتلة الجهازية باستخدام b
:
find / -type b
كيفية البحث في المجلدات
في المثال أدناه، نحن نبحث عن المجلدات باستخدام العلامة -type d
.
ls -l
# قائمة محتويات المجلد
drwxrwxr-x 2 zaira zaira 4096 Mar 26 14:22 hosts
-rw-rw-r-- 1 zaira zaira 0 Mar 26 14:23 hosts.txt
drwxrwxr-x 2 zaira zaira 4096 Mar 26 14:22 images
drwxrwxr-x 2 zaira zaira 4096 Mar 26 14:23 style
drwxrwxr-x 2 zaira zaira 4096 Mar 26 14:22 webp
find . -type d
# خروج قائمة المجلد
.
./webp
./images
./style
./hosts
كيفية البحث في الملفات بحسب الحجم
استخدام الأمر find
بشكل مفيد جداً هو لعرض الملفات بناءً على حجم معين.
find / -size +250M
هنا، نحن نقوم بعرض الملفات الحجمها يتعدى 250MB
.
ويشمل الوحدات الأخرى:
-
G
: جيغا بايت. -
M
: ميغابايت. -
K
: كيلوبايت -
c
: بايتات.
فقط استبدل بالوحدة المناسبة.
find <directory> -type f -size +N<Unit Type>
كيفية البحث عن الملفات بواسطة وقت التعديل
باستخدام الرمز -mtime
، يمكنك تصفية الملفات والمجلدات بناءً على وقت التعديل.
find /path -name "*.txt" -mtime -10
مثلاً،
-
-mtime +10 يعني أنك تبحث عن ملف تم تعديله قبل 10 أيام.
-
-mtime -10 يعني أقل من 10 أيام.
-
-mtime 10 إذا تخطيت الـ + أو – فأنه يعني بالضبط 10 أيام.
4.5. الأوامر الأساسية لعرض الملفات
جمع وعرض الملفات باستخدام الأمر cat
الأمر cat
في لينكس يستخدم لعرض محتويات الملف. يمكن أيضًا استخدامه لجمع الملفات وإنشاء ملفات جديدة.
هنا صيغة الأمر cat
الأساسية:
cat [options] [file]
أبسط طريقة لاستخدام cat
هي بدون أي خيارات أو معطيات. هذا سيعرض محتويات الملف على الطرفية.
لذلك، إذا كنت تريد عرض محتويات ملف بإسم file.txt
، يمكنك استخدام الأمر التالي:
cat file.txt
هذا سيعرض جميع محتويات الملف على الطرفية في وقت واحد.
عرض الملفات النصية تفاعلياً باستخدام less
و more
بينما يعرض cat
الملف بأكمله في وقت واحد، يسمح لك less
و more
بعرض محتويات الملف تفاعلياً. هذا مفيد عندما تريد التمرير من خلال ملف كبير أو البحث عن محتوى محدد.
ترمزية الأمر less
هي:
less [options] [file]
الأمر more
شبيه بـ less
ولكنه يحتوي على خصائص أقل. يستخدم لعرض محتويات الملف بشكل واحد على الشاشة.
ترمزية الأمر more
هي:
more [options] [file]
بالنسبة لكلا الأوامر، يمكنك استخدام الزر المسافة
للتمرير للصفحة التالية، والزر Enter
للتمرير للسطر التالي، وزر q
للخروج من المعاين.
للتحريك للوراء يمكنك استخدام الزر b
، وللتحريك للأمام يمكنك استخدام الزر f
.
عرض جزء الأخير من الملفات باستخدام tail
في بعض الأحيان قد تحتاج إلى عرض السطور العشر الأخيرة فقط من الملف بدلاً من الإظهار بأكمله. يستخدم الأمر tail
في لينكس لعرض جزء الأخير من الملف.
مثلاً، tail file.txt
سيعرض العشر سطور الأخيرة من الملف file.txt
بشكل افتراضي.
إذا كنت تريد عرض عدد مختلف من الأسطر، يمكنك استخدام الخيار -n
متبوعًا بعدد الأسطر التي تريد عرضها.
# عرض آخر 50 سطرًا من الملف file.txt
tail -n 50 file.txt
💡نصيحة: استخدام آخر لـ tail
هو خياره المتابعة (-f
). يتيح لك هذا الخيار عرض محتويات الملف أثناء كتابتها. هذه أداة مفيدة لعرض ومراقبة ملفات السجل في الوقت الفعلي.
عرض بداية الملفات باستخدام head
مثلما يعرض tail
الجزء الأخير من الملف، يمكنك استخدام أمر head
في لينكس لعرض بداية الملف.
على سبيل المثال، head file.txt
سيعرض أول 10 أسطر من الملف file.txt
افتراضيًا.
لتغيير عدد الأسطر المعروضة، يمكنك استخدام الخيار -n
متبوعًا بعدد الأسطر التي تريد عرضها.
عد الكلمات، الأسطر، والأحرف باستخدام wc
يمكنك عد الكلمات، الأسطر، والأحرف في ملف باستخدام أمر wc
.
على سبيل المثال، تشغيل wc syslog.log
أعطاني الناتج التالي:
1669 9623 64367 syslog.log
في الناتج أعلاه،
-
1669
يمثل عدد الأسطر في الملفsyslog.log
. -
9623
يمثل عدد الكلمات في الملفsyslog.log
. -
64367
يمثل عدد الحروف في الملفsyslog.log
.
إذن، الأمر wc syslog.log
قدَّر 1669
سطر، 9623
كلمة، و 64367
حرف في الملف syslog.log
.
مقارنة الملفات سطراً بسطر باستخدام diff
مقارنة وإيجاد الاختلافات بين ملفين هو وظيفة شائعة في لينكس. يمكنك مقارنة ملفين مباشرة من خلال سطر الأوامر باستخدام أمر diff
.
هيكلية أساسية لأمر diff
هي:
diff [options] file1 file2
هنا ملفين، hello.py
و also-hello.py
، سنقارنهما باستخدام أمر diff
:
# محتويات hello.py
def greet(name):
return f"Hello, {name}!"
user = input("Enter your name: ")
print(greet(user))
# محتويات also-hello.py
more also-hello.py
def greet(name):
return fHello, {name}!
user = input(Enter your name: )
print(greet(user))
print("Nice to meet you")
- تحقق إذا كانت الملفات متطابقة أم لا
diff -q hello.py also-hello.py
# الناتج
Files hello.py and also-hello.py differ
- انظر كيف تختلف الملفات. لذلك، يمكنك استخدام الرمز
-u
لرؤية الناتج الموحد:
diff -u hello.py also-hello.py
--- hello.py 2024-05-24 18:31:29.891690478 +0500
+++ also-hello.py 2024-05-24 18:32:17.207921795 +0500
@@ -3,4 +3,5 @@
user = input(Enter your name: )
print(greet(user))
+print("Nice to meet you")
— hello.py 2024-05-24 18:31:29.891690478 +0500
- في الناتج أعلاه:
--- hello.py 2024-05-24 18:31:29.891690478 +0500
يعني ملف المقارنة وتاريخه.+++ also-hello.py 2024-05-24 18:32:17.207921795 +0500
يعني الملف الآخر المقارن وتاريخه.@@ -3,4 +3,5 @@
يظهر أعداد الأسطر التي حدثت فيها تغييرات. في هذه الحالة، يوضح أن أسطر 3 إلى 4 في الملف الأصلي تغيرت إلى أسطر 3 إلى 5 في الملف المعدل.user = input(Enter your name: )
هي سطر من الملف الأصلي.print(greet(user))
هي سطر آخر من الملف الأصلي.
+print("Nice to meet you")
هي السطر الإضافي في الملف المعدل.
diff -y hello.py also-hello.py
لرؤية التفرقة بالتكاليف الجانبية، يمكنك استخدام علامة -y
:
def greet(name): def greet(name):
return fHello, {name}! return fHello, {name}!
user = input(Enter your name: ) user = input(Enter your name: )
print(greet(user)) print(greet(user))
> print("Nice to meet you")
# Output
- في الخروج:
- الأسطر التي تتطابق في كلا الملفين يتم عرضها جنبًا إلى جنب.
الأسطر المختلفة تُعرض برمز >
مما يشير إلى أن السطر موجود فقط في أحد الملفات.
الجزء 5: أساسيات تحرير النصوص في لينكس
مهارات تحرير النصوص باستخدام سطر الأوامر هي واحدة من أهم المهارات في لينكس. في هذا القسم، ستتعلم كيفية استخدام محررين نصيين شهيرين في لينكس: Vim و Nano.
أقترح أن تتقن أي محرر نصوص تفضله وتلتزم به. سيوفر لك ذلك الوقت ويجعلك أكثر إنتاجية. Vim و nano هما خيارات آمنة لأنهما متواجدان في معظم توزيعات لينكس.
5.1. إتقان Vim: الدليل الكامل
مقدمة إلى Vim
- Vim هو أداة تحرير نصوص شهيرة لسطر الأوامر. يأتي Vim بمزاياه: فهو قوي، وقابل للتخصيص، وسريع. هنا بعض الأسباب التي تجعلك تفكر في تعلم Vim:
- يتم الوصول إلى معظم الخوادم عبر CLI، لذلك في إدارة النظام، ليس لديك بالضرورة رفاهية GUI. ولكن Vim سيكون دائماً متاحاً – سيكون دائماً هناك.
- فإن Vim تستخدم مقاربة تركيزية على لوحة المفاتيح، لأنها مصممة للاستخدام بدون فأرة، والتي يمكن أن تسرع بشكل ملحوọc مهام التحرير بمجرد تعلم مخادع المفاتيح. هذا يجعله أسرع أيضًا من الأدوات الجرافيكية.
- بعض الأدوات اللينكسية، على سبيل المثال تحرير مهام cron، تعمل بنفس تنسيق التحرير كما Vim.
فإن Vim مناسبة للجميع – من المبتدئين والمستخدمين المتقدمين. Vim تدعم البحث في السلاسل الكاملة، وإبراز البحوث، وأكثر من ذلك. من خلال المكونات الإضافية، Vim توفر قدرات ممتدة للمطورين ومسؤولي النظام بما في ذلك إكمال الشفرة، تسليط الضوء على الجملة، إدارة الملفات، التحكم في الإصدار، وأكثر.
هناك نوعين من Vim: Vim (vim
) وVim tiny (vi
). Vim tiny هو نسخة أصغر من Vim ويفتقد بعض مميزات Vim.
كيفية البدء في استخدام vim
vim your-file.txt
بدءاً بإستخدام Vim بأمر هذا:
your-file.txt
يمكن أن يكون ملف جديد أو ملف موجود الذي تريد تحرير
تنقل في Vim: تسليم التحريك والأوامر
في الأيام الأولى للواجهة اللوحية للأوامر، لم يكن للمفاتيح أزرار الأسهم. وبالتالي، كان التنقل يتم بإستخدام مجموعة الأزرار المتاحة، hjkl
هو واحد منها.
باعتماد المفاتيح كمركزي، يمكنك استخدام الأزرار hjkl
لتسريع مهام التحرير النصي.
ملاحظة: رغم أن الأزرار الأسهم ستعمل بشكل جيد، يمكنك ما لا زال تجربة الأزرار hjkl
للتنقل. يجد بعض الناس هذه الطريقة الأسرع للتنقل.
💡تلميح: لتذكر ترتيب hjkl
، استخدم هذا: h تميل للوراء، j قفز للأسفل، k قفز للأعلى، l قفز للأمام.
الأشكال الثلاثة لVim
- يجب أن تعرف الأشكال الثلاثة لتشغيل Vim وكيفية التحول بينها. تتصرف مفاتيح الضغط بشكل مختلف في كل وضع الأمر. الأشكال الثلاثة هي كما يلي:
- الوضع الأمري.
- الوضع التحريري.
الوضع المرئي.
الوضع الأمري. عند بدء Vim، ستبدأ في الوضع الأمري بشكل افتراضي. يسمح لك هذا الوضع بالوصول إلى أشكال أخرى.
⚠ من أجل التحول إلى أشكال أخرى، يجب أن تكون في الوضع الأمري أولاً
الوضع التحريري
يسمح لك هذا الوضع بتغييرات في الملف. للدخول إلى وضع التحرير، أضغط على I
بينما تكون في وضع الأمر. لاحظ الزر '-- INSERT'
في نهاية الشاشة.
وضع الرؤية
- هذا الوضع يسمح لك بالعمل على حرف واحد، كتلة نص، أو أسطر نص. دعونا نقسم هذا إلى خطوات بسيطة. تذكر، استخدم الإرشفة السفلى عندما تكون في وضع الأمر.
Shift + V
→ تحديد أسطر متعددة.Ctrl + V
→ وضع البلوك
V
→ وضع الحرف
يأتي وضع الرؤية بمساعدة عندما تحتاج إلى نسخ ولصق أو تحرير الأسطر بالكمية.
وضع الأمر الممتد.
يسمح لك وضع الأمر الممتد بإجراء عمليات متقدمة مثل البحث، وضبط أرقام الأسطر، وإبراز النص. سنغطي وضع الممتد في القسم التالي.
كيفية البقاء على مسار صحيح؟ إذا نسيت وضعك الحالي، فقط أضغط على ESC
مرتين وستعود إلى وضع الأمر.
التحرير بكفاءة في Vim: النسخ واللصق والبحث
1. كيفية النسخ واللصق في Vim
- النسخ واللصق يعرف بـ ‘تمسك’ و ‘وضع’ في مصطلحات لينكس. للنسخ واللصق، إتبع الخطوات التالية:
- حدد النص في وضع الرؤية.
- أضغط على
'y'
للنسخ/التمسك.
الانتقال إلى الموضع المطلوب وانقر على 'p'
.
2. كيفية البحث عن نص في Vim
يمكن البحث عن أي سلسلة من النصوص باستخدام Vim بإستخدام /
في وضع التعامل. للبحث، استخدم /النص-الذي-تريد-البحث-عنه
.
في وضع التعامل، أكتب :set hls
وانقر على enter
. قم بالبحث باستخدام /النص-الذي-تريد-البحث-عنه
. هذا سيحيط بالإشارة إلى البحثات.
لنبحث عن عدد قليل من السلاسل:
3. كيفية الخروج من Vim
- أولا، انتقل إلى وضع التعامل (بالضغط على الزر الخلافي مرتين) ومن ثم استخدم هذه الإشارات:
- الخروج بدون حفظ →
:q!
الخروج والحفظ → :wq!
اختصارات Vim: جعل التحرير أسرع
- ملاحظة: جميع هذه الاختصارات تعمل فقط في وضع التعامل.
Ctrl+u
: تحريك الى الأعلى بنصف الصفحةP
: لصق فوق المؤشر:%s/قديم/جديد/g
: استبدال جميع ظهوراتقديم
بـجديد
في الملف:q!
: أغلق دون الحفظ
Ctrl+w بعده h/j/k/l
: التنقل بين نوافذ المقسمة
5.2. التسلط على Nano
بدء العمل مع Nano: محرر النصوص السهل الاستخدام
Nano هو محرر نصوص سهل الاستخدام والمفضل للمبتدئين. يكون مثبتا مسبقا على معظم توزيعات لينكس.
nano
لإنشاء ملف جديد باستخدام Nano، استخدم الأمر التالي:
nano filename
لبدء التحرير لملف موجود باستخدام Nano، استخدم الأمر التالي:
قائمة بالإرشادات المفاتيح في Nano
لندرس أهم إرشادات المفاتيح في Nano. ستستخدم إرشادات المفاتيح للأداء منتجات مختلفة مثل الحفظ، الإغلاق، النسخ، اللصق، وأكثر.
الكتابة إلى ملف والحفظ
بمجرد فتح نانو (Nano) باستخدام أوامر البرمجيات nano
، يمكنك بدء كتابة النصوص. لتحفظ الملف، قم بضغط Ctrl+O
، وسيتم إدراجك لإدخال اسم الملف. قم بضغط Enter
لتحفظ الملف.
خروج من نانو
يمكنك خروج من نانو عن طريق الضغط على Ctrl+X
إذا كان لديك تغييرات غير محفوظة، سيتم تحديد إليك إذا أردت حفظ التغييرات قبل الخروج.
نسخ ولصق
لتحديد المنطقة، قم باستخدام ALT+A
، سيظهر علامة. استخدم أفقاً لتحديد النص. بمجرد تحديد النص، اترك العلامة بالضغط على ALT+^
والخروج.
لنسخ النص المحدد، قم بضغط Ctrl+K
، وللصق النص المحدد بالضغط على Ctrl+U
.
تحرير ولصق
تحديد المنطقة باستخدام ALT+A
، ومن ثم قم بتحرير النص بالضغط على Ctrl+K
ولصق النص المحدد بالضغط على Ctrl+U
.
التنقل
استخدم Alt \
للذهاب إلى بداية الملف.
استخدم Alt /
للذهاب إلى نهاية الملف.
رؤية أعداد الأسطر
عندما تفتح ملفًا بواسطة nano -l اسم_الملف
، يمكنك رؤية أعداد الأسطر على الجانب الأيسر من الملف.
البحث
يمكنك البحث عن إحدى الأسطر بواسطة <
يمكنك أيضًا البدء في البحث عن سلسلة من النصوص بCTRL + W
والضغط على Enter. إذا كنت تريد البحث للخلف، يمكنك الضغط على Alt+W
بعد بدء البحث بCtrl+W
.
- ملخص للأزرار التعريف في Nano
Ctrl+G
: عرض نص المساعدةCtrl+J
: ضبط الفقرة الحاليةCtrl+V
: التمرير لأسفل صفحة واحدةCtrl+\
: البحث والاستبدال
Alt+E
: إعادة العملية التي تم التراجع عنها
الجزء 6: كتابة السكربتات بـ Bash
6.1. تعريف كتابة السكربتات بـ Bash
سكربت bash هو ملف يحتوي على سلسلة من الأوامر التي تُنفذ بواسطة برنامج bash سطراً بعد سطر. يسمح لك بإجراء سلسلة من الإجراءات، مثل التنقل إلى دليل محدد، وإنشاء مجلد، وإطلاق عملية باستخدام سطر الأوامر.
بحفاظ الأوامر في سكربت، يمكنك تكرار نفس سلسلة الخطوات مراراً وتنفيذها عن طريق تشغيل السكربت.
6.2. مزايا كتابة السكربتات بـ Bash
كتابة السكربتات بـ Bash هي أداة قوية ومتعددة الاستخدامات لتلكمي الأعمال النظامية، وإدارة موارد النظام، وأداء المهام اليومية الأخرى في أنظمة Unix/Linux.
- بعض مزايا السكربتات الشيلية هي:
- التلكم: تسمح لك السكربتات الشيلية بتلكمية المهام والعمليات المتكررة، ممكناً الوقت وتقليل الخطر من الأخطاء التي يمكن حدوثها خلال التنفيذ اليدوي.
- المنقولية: يمكن تنفيذ السكربتات الشيلية على مختلف المنصات وأنظمة التشغيل، بما فيهم Unix، Linux، macOS، وحتى Windows من خلال استخدام المحاكي أو الآلات الافتراضية.
- المرونة: السكربتات القاعدية يمكن تخصيصها بشكل كبير ويمكن تعديلها بسهولة لمطابقة الاحتياجات الحددة. يمكن أيضًا تركيبها مع لغات برمجة أخرى أو أدوات لخلق سكربتات أكثر قوة.
- الإمكانية: السكربتات القاعدية سهلة الكتابة ولا تتطلب أي أدوات أو برمجيات خاصة. يمكن تحريرها باستخدام أي محرر نصوص، ومعظم أنظم التشغيل لديها مفسر قاعدة مضمن.
- التكامل: يمكن تكامل السكربتات القاعدية مع أدوات وتطبيقات أخرى، مثل قواعد البيانات، خوادم الويب، وخدمات السحابة، مما يسمح بمهام التوجيه الآلي وإدارة النظام الأكثر تعقيدًا.
التنقيح: السكربتات القاعدية سهلة التنقيح، ومعظم الأسافل لديها أدوات التنقيح وإبلاغ الأخطاء المبنية في المفسر، والتي يمكن أن تساعد في تحديد وتصحيح الأشكال الناقصة بسرعة.
6.3. نظرة عامة على الصدفة الباش وواجهة الأمر الخطية.
المصطلحين “الغلاف” و “باش” يستخدمون عادة بشكل متبادل. ولكن هناك فرقا ضئيلا بين الاثنين.
المصطلح “الغلاف” يشير إلى البرنامج الذي يوفر واجهة سطر الأوامر للتفاعل مع نظام تشغيل. Bash (Bourne-Again SHell) هو أحد أكثر شيلات الأونكس/لينكس التي يستخدمها وهو الغلاف الافتراضي في العديد من توزيعات لينكس.
حتى الآن، الأوامر التي كنت تدخلها بشكل أساسي كانت تدخل في “غلاف”.
على الرغم من أن Bash هو نوع من الغلاف، فإنه هناك غلافات أخرى متوفرة أيضًا، مثل Korn shell (ksh),C shell (csh),و Z shell (zsh). كل غلاف له ترميزه الخاص ومجموعة خاصة من الخصائص، ولكنهم جميعًا يشاركون الغرض الشائع الذي يوفر واجهة سطر الأوامر للتفاعل مع نظام التشغيل.
ps
# output:
PID TTY TIME CMD
20506 pts/0 00:00:00 bash <--- the shell type
20931 pts/0 00:00:00 ps
يمكنك تحديد نوع الغلاف الخاص بك باستخدام الأمر ps
:
في الخلاصة، بينما “الغلاف” هو مصطلح واسع يشير إلى أي برنامج يوفر واجهة سطر الأوامر، “Bash” هو نوع محدد من الغلاف والذي يستخدم واسعا في أنظمة الأونكس/لينكس.
ملاحظة: في هذا القسم، سنستخدم الغلاف “باش”.
6.4. كيفية إنشاء وتنفيذ سكريبتات Bash
مقاييس تسمية السكريبت
وفقاً للمقاييس التسمية، تنتهي سكريبتات باش بملحقة .sh
. ومع ذلك، يمكن لسكريبتات باش أن تعمل بشكل جيد بدون تمديد sh
.
إضافة الشيبانغ
ال脚本 الباش الأول يبدأ بshebang
.”Shebang” هو مزيج من bash #
و bang !
متبعة من مسار الجهاز الباش. هذه هي السطر الأول في الscript. “Shebang” تخبر الshell بتنفيذه من خلال جهاز الباش. “Shebang” مجرد مسار دائم للمترجم الباش.
#!/bin/bash
إلا أعلاه مثال للأول بنية الshebang.
which bash
يمكنك إيجاد مسار جهازك الباش (وقد يختلف عن الأعلى) باستخدام الأمر:
إنشاء معارفك الباش الأول
سيتم إلقاء الدعوة للمستخدم لإدخال مسار. وسيتم إظهار محتوياته.
vim run_all.sh
قم بإنشاء ملف يسمى run_all.sh
بواسطة أي محرر توفر إليك.
#!/bin/bash
echo "Today is " `date`
echo -e "\nenter the path to directory"
read the_path
echo -e "\n you path has the following files and folders: "
ls $the_path
أضف الأوامر التالية في ملفك وحفظها:
1 دعونا ننظر أعمق في الscript بشكل خطوات. أعرض نفس الscript مجدداً، ولكن هذه المرة بأعداد الأسطر.
2 echo "Today is " `date`
3
4 echo -e "\nenter the path to directory"
5 read the_path
6
7 echo -e "\n you path has the following files and folders: "
8 ls $the_path
- #!/bin/bash
- سطر #1: الshebang (
#!/bin/bash
) يشير إلى مسار جهاز الباش. - سطر #2: أمر ال
echo
يعرض التاريخ والوقت الحالي على المحتوى. تلاحظ أنdate
في الأخطاء. - سطر #4: نريد من المستخدم إدخال
- السطر #5: يأخذ أمر
read
الإدخال ويخزنه في المتغيرthe_path
.
السطر #8: يأخذ أمر ls
المتغير الذي يحتوي على المسار المخزن يعرض الملفات والمجلدات الحالية.
تشغيل السكربت الباش
chmod u+x run_all.sh
لجعل السكربت قابلاً للتنفيذ، قم بتعيين حقوق التنفيذ للمستخدم الخاص بك باستخدام هذا الأمر:
- هنا،
chmod
يعدل ملكية ملف للمستخدم الحالي :u
.+x
يضيف حقوق التنفيذ للمستخدم الحالي. وهذا يعني أن المستخدم الذي هو المالك يمكنه الآن تشغيل السكربت.
run_all.sh
هو الملف الذي نرغب في تشغيله.
- يمكنك تشغيل السكربت باستخدام أي من الطرق المذكورة:
sh run_all.sh
bash run_all.sh
./run_all.sh
لنرى كيف يعمل 🚀
6.5. أساسيات برمجة Bash
التعليقات في برمجة bash
التعليقات تبدأ بعلامة #
في برمجة bash. يعني أن أي سطر يبدأ بعلامة #
هو تعليق وسيتم تجاهله بواسطة المترجم.
التعليقات مفيدة جدًا في توثيق الكود، ومن الجيد إضافتها لمساعدة الآخرين على فهم الكود.
هذه أمثلة على التعليقات:
# هذا تعليق مثال
# سيتم تجاهل كلا السطرين من قبل المترجم
المتغيرات وأنواع البيانات في Bash
تسمح لك المتغيرات بتخزين البيانات. يمكنك استخدام المتغيرات لقراءة البيانات والوصول إليها ومعالجتها في النص البرمجي الخاص بك.
لا توجد أنواع بيانات في Bash. في Bash، يمكن للمتغير تخزين القيم العددية أو الحروف الفردية أو سلاسل الحروف.
- في Bash، يمكنك استخدام وتعيين قيم المتغير بالطرق التالية:
country=Netherlands
تعيين القيمة مباشرة:
same_country=$country
2. تعيين القيمة بناءً على الإخراج الذي يتم الحصول عليه من برنامج أو أمر، باستخدام استبدال الأوامر. لاحظ أن $
مطلوب للوصول إلى قيمة متغير موجود.
يقوم هذا بتعيين قيمة country
إلى المتغير الجديد same_country
.
country=Netherlands
echo $country
للوصول إلى قيمة المتغير، أضف $
إلى اسم المتغير.
Netherlands
new_country=$country
echo $new_country
# النتيجة
Netherlands
# النتيجة
فوق، يمكنكم رؤية مثال على تعيين وطباعة قيم المتغيرات.
مبادئ تسمية المتغيرات
- في خطوط البرمجة Bash، يتمثل التالي في مبادئ تسمية المتغيرات:
- يجب أن تبدأ أسماء المتغيرات بحرف أو تشريحة (
_
). - يمكن أن تحتوي أسماء المتغيرات على الحروف، الأرقام، والتشريحات (
_
). - يجب أن تكون أسماء المتغيرات حساسة لحالة الأحرف.
- لا يجب أن تحتوي أسماء المتغيرات على مسافات أو أحرف خاصة.
- استخدم أسماء توصيفية تعكس الغرض من المتغير.
اتجاهل استخدام الكلمات الحزبية المحجوزة، مثل if
، then
، else
، fi
، وهكذا كأسماء للمتغيرات.
name
count
_var
myVar
MY_VAR
هنا بعض الأمثلة لأسماء المتغيرات الصالحة في Bash:
وهنا بعض الأمثلة لأسماء المتغيرات غير الصالحة:
2ndvar (variable name starts with a number)
my var (variable name contains a space)
my-var (variable name contains a hyphen)
# أسماء متغيرات غير صالحة
الاتباع لهذه المبادئ التسمية يساعد على جعل نصوص البرمجيات الخاصة بباش أكثر قابلية للقراءة وسهولة التحكم فيها.
الإدخال والإخراج في نصوص البرمجيات الخاصة بباش
جمع الإدخال
- في هذا القسم، سنتحدث عن بعض الوسائل لتوفير الإدخال لأوامرنا البرمجية.
قراءة إدخال المستخدم وتخزينه في متغير
#!/bin/bash
echo "What's your name?"
read entered_name
echo -e "\nWelcome to bash tutorial" $entered_name
يمكننا قراءة إدخال المستخدم باستخدام الأمر read
.
2. قراءة من ملف
while read line
do
echo $line
done < input.txt
هذا الكود يقرأ كل سطر من ملف يُدعى input.txt
ويطبعه على الطرفية. سندرس حلقات التكرار لاحقاً في هذا القسم.
3. معاملات سطر الأوامر
في سكربت باش أو وظيفة، $1
يشير إلى الحقل الأول المرسل، $2
يشير إلى الحقل الثاني المرسل، وهكذا.
#!/bin/bash
echo "Hello, $1!"
هذا السكربت يأخذ الاسم كحقل سطر الأوامر ويطبع تحية شخصية.
لقد أعطينا زايرة
كحقلنا للسكربت.
الإخراج:
عرض الإخراج
- هنا سنتحدث عن بعض الوسائل لإستقبال الإخراج من الأوامر البرمجية.
echo "Hello, World!"
طباعة على الطرفية:
هذا يطبع النص “Hello, World!” على الطرفية.
echo "This is some text." > output.txt
2. كتابة إلى ملف:
هذا يكتب النص “هذا بعض النص.” إلى ملف يُدعى output.txt
. لاحظ أن مشغل >
يعيد كتابة ملف إذا كان لديه محتوى سابق.
echo "More text." >> output.txt
3. إضافة إلى ملف:
هذه الخاصية تضيف النص “مزيد من النص.” إلى نهاية الملف output.txt
.
ls > files.txt
4. إعادة توجيه الخرج:
هذا يسرد الملفات في الدليل الحالي ويكتب الخرج إلى ملف يُدعى files.txt
. يمكنك توجيه خرج أي أمر إلى ملف بهذه الطريقة.
ستتعلم عن إعادة توجيه الخرج بتفصيل في الفصل 8.5.
البنود الشرطية (if/else)
العبارات التي تنتج نتيجة منطقية، سواء كانت صحيحة أو خاطئة، تُدعى أوضاعاً. وهناك العديد من الطرق لتقييم الأوضاع، بما في ذلك if
، if-else
، if-elif-else
، والشروط النسية.
if [[ condition ]];
then
statement
elif [[ condition ]]; then
statement
else
do this by default
fi
الصيغة:
صيغة بنود الشرطية في باش
if [ $a -gt 60 -a $b -lt 100 ]
يمكننا استخدام مشغلات منطقية مثل و (AND) -a
أو أو (OR) -o
لجعل التشابهات تحمل معنى أكبر.
هذه البندة تتحقق إذا كانت كلا الشروط صحيحة
: a
أكبر من 60
AND b
أصغر من 100
.
#!/bin/bash
لنرى مثال لسكربت باش الذي يستخدم البنود if
، if-else
، وif-elif-else
لمعرفة إذا كان رقم مُدخل من طرف المستخدم موجباً أو سلبياً أو صفراً:
echo "Please enter a number: "
read num
if [ $num -gt 0 ]; then
echo "$num is positive"
elif [ $num -lt 0 ]; then
echo "$num is negative"
else
echo "$num is zero"
fi
# سكربت لمعرفة إذا كان الرقم موجباً أو سلبياً أو صفراً
يوجه ال脚本 أولاً للمستخدم بأن يأدخل رقماً. ثم يستخدم أعمال الif
لتفقد إذا كان الرقم أكبر من 0
. إذا كان كذلك، سينشر ال脚本 أن الرقم إيجابي. إذا كان الرقم لا يزيد عن 0
، سيذهب ال脚本 إلى الأعمال التالية، وهي أعمال الif-elif
.
هنا، يتفقد ال脚本 إذا كان الرقم أقل من 0
. إذا كان كذلك، سينشر ال脚本 أن الرقم سلبي.
أخيرًا، إذا كان الرقم لا يزيد عن 0
ولا يكون أقل من 0
، سيستخدم ال脚本 أعمال الelse
لنشر أن الرقم صفر.
شاهد بعمل 🚀
الدوران والتنقل في Bash
دورة الwhile
الدورات الwhile
تفقد لمشاهدة شريط التحكم وتدور حتى يبقى الشريط true
. يحتاج إلى عبارة المعامل التي تزيد عدد المعامل للتحكم في تنفيذ الدورة.
#!/bin/bash
i=1
while [[ $i -le 10 ]] ; do
echo "$i"
(( i += 1 ))
done
في المثال التالي، (( i += 1 ))
هي عبارة المعامل التي تزيد قيمة i
. ستتم تنفيذ الدورة بالضبط 10 مرات.
دورة الfor
الدورة الfor
تمامًا مثل الدورة الwhile
، تسمح لك بتنفيذ أي عبارات عدد معين من المرات. كل دورة تختلف في ترتيبها واستخدامها.
#!/bin/bash
for i in {1..5}
do
echo $i
done
في المثال التالي، ستتم تدور الدورة 5 مرات.
قواسم الحالة
case expression in
pattern1)
في Bash، تُستخدم عبارات case لمقارنة قيمة معينة مع قائمة من الأنماط وتنفيذ كتلة من الشيفرة بناءً على أول نمط يتطابق. تكون صيغة عبارة case في Bash كما يلي:
;;
pattern2)
# الشيفرة التي سيتم تنفيذها إذا تطابق التعبير مع النمط1
;;
pattern3)
# الشيفرة التي سيتم تنفيذها إذا تطابق التعبير مع النمط2
;;
*)
# الشيفرة التي سيتم تنفيذها إذا تطابق التعبير مع النمط3
;;
esac
# الشيفرة التي سيتم تنفيذها إذا لم يتطابق أي من الأنماط السابقة مع التعبير
هنا، “التعبير” هو القيمة التي نريد مقارنتها، و”النمط1″، “النمط2″، “النمط3″، وهكذا هي الأنماط التي نريد مقارنتها بها.
تفصل الفاصلة المنقوطة المزدوجة “;;” بين كل كتلة من الشيفرة التي سيتم تنفيذها لكل نمط. يمثل النجمة “*” الحالة الافتراضية، التي تُنفذ إذا لم يتطابق أي من الأنماط المحددة مع التعبير.
fruit="apple"
case $fruit in
"apple")
echo "This is a red fruit."
;;
"banana")
echo "This is a yellow fruit."
;;
"orange")
echo "This is an orange fruit."
;;
*)
echo "Unknown fruit."
;;
esac
لنرى مثالاً:
في هذا المثال، بما أن قيمة fruit
هي apple
، فإن النمط الأول يتطابق وتنفيذ كتلة الشيفرة التي تطبع This is a red fruit.
. إذا كانت قيمة fruit
بدلاً من ذلك banana
، فإن النمط الثاني سيتطابق وتنفيذ كتلة الشيفرة التي تطبع This is a yellow fruit.
، وهكذا.
إذا لم تتطابق قيمة fruit
مع أي من الأنماط المحددة، يتم تنفيذ الحالة الافتراضية التي تطبع Unknown fruit.
الجزء 7: إدارة حزم البرمجيات في لينكس
لينكس يأتي مع عدد من البرامج الداخلية. ومع ذلك قد تحتاج إلى تثبيت برامج جديدة بحسب الاحتياجات الخاصة بك. قد تحتاج أيضًا إلى ترقية التطبيقات الموجودة.
7.1. الباكيجات وإدارة الباكيجات
ما هو الباكيج؟
الباكيج هو مجموعة من الملفات التي تجمع معا. هذه الملفات ضرورية لتشغيل البرنامج المحدد. تحتوي هذه الملفات على ملفات التنفيذ الخاصة بالبرنامج، المكتبات والموارد الأخرى.
بالإضافة إلى الملفات الضرورية لتشغيل البرنامج، تحتوي الباكيجات أيضًا على مخرجات التثبيت التي تنسخ الملفات إلى أماكنها اللازمة. قد يحتوي البرنامج على العديد من الملفات والإعتماديات. ومع الباكيجات، يصبح من السهولة إدارة كل الملفات والإعتماديات في وقت واحد.
ما الفرق بين المصدر والثنائي؟
يكتب المبرمجون الشفرة المصدرية بلغة برمجة. ويتم ترجمة هذه الشفرة المصدرية إلى شفرة الآلة التي يستطيع الكمبيوتر فهمها. يُسمى الشفرة المترجمة بالشفرة الثنائية.
عند تحميل الباكيج، يمكنك الحصول على الشفرة المصدرية أو الشفرة الثنائية. الشفرة المصدرية هي الشفرة القابلة للقراءة بواسطة الإنسان والتي يمكن ترجمتها إلى شفرة ثنائية. الشفرة الثنائية هي الشفرة المترجمة التي يستطيع الكمبيوتر فهمها.
يمكن استخدام الباكيجات المصدرية مع أي نوع من الآلات إذا تم ترجمة الشفرة المصدرية بشكل صحيح. الشفرة الثنائية، على الجانب الآخر، هي شفرة مترجمة خاصة بنوع معين من الآلات أو الهيكلية.
uname -m
يمكنك معرفة هيكلية الآلة الخاصة بك باستخدام الأمر uname -m
.
x86_64
# الخرج
اعتماديات الحزم
تشارك البرامج غالبًا الملفات. بدلاً من تضمين هذه الملفات في كل حزمة، يمكن لحزمة منفصلة توفيرها لجميع البرامج.
لتثبيت برنامج يحتاج إلى هذه الملفات، يجب عليك أيضًا تثبيت الحزمة التي تحتوي عليها. هذا يسمى اعتماد الحزمة. تحديد الاعتمادات يجعل الحزم أصغر وأبسط عن طريق تقليل التكرارات.
عند تثبيت برنامج، يجب أيضًا تثبيت اعتماده. معظم الاعتمادات المطلوبة تكون عادةً مثبتة بالفعل، ولكن قد تكون هناك حاجة إلى بعض الاعتمادات الإضافية. لذلك، لا تتفاجأ إذا تم تثبيت عدة حزم أخرى مع الحزمة التي اخترتها. هذه هي الاعتمادات الضرورية.
مديرو الحزم
يوفر لينكس نظام إدارة شامل للحزم لتثبيت وترقية وتكوين وإزالة البرامج.
مع إدارة الحزم، يمكنك الوصول إلى قاعدة منظمة تحتوي على آلاف الحزم البرمجية بالإضافة إلى القدرة على حل الاعتمادات والتحقق من تحديثات البرامج.
يمكن إدارة الحزم باستخدام أدوات سطر الأوامر التي يمكن للمسؤولين النظاميين أتمتها بسهولة، أو من خلال واجهة رسومية.
قنوات/مستودعات البرامج
⚠️ إدارة الحزم تختلف بين التوزيعات المختلفة. هنا، نستخدم أوبونتو.
تثبيت البرامج يختلف قليلاً في لينكس مقارنةً بويندوز وماك.
يستخدم لينكس المستودعات لتخزين الحزم البرمجية. المستودع هو مجموعة من الحزم البرمجية المتاحة للتثبيت عبر مدير الحزم.
المدير البرمجي للحزم أيضًا يخزن فهرسًا لجميع الحزم المتاحة من مخزن. أحيانًا يعاد بناء الفهرس لضمان تحديثه ومعرفة أي الحزم تم ترقية أو إضافتها إلى القناة منذ آخر فحص.
تتبع العملية العامة لتحميل البرمجيات من مخزن يبدو شيئا كالتالي:
- إذا تحدثنا بالتحديد عن أوبونتو،
- يتم إحضار الفهرس باستخدام
apt update.
(apt
سيتم شرحه في القسم التالي). - يتم طلب الملفات/الإعتمادات الضرورية وفقًا للفهرس باستخدام
apt install
- يتم تثبيت الحزم والإعتمادات محليًا.
يتم تحديث الإعتمادات والحزم عند الاحتجاج باستخدام apt update
و apt upgrade
في النظامات التي تستند إلى ديبيان، يمكنك رفع القائمة بالمخازن (المستودعات) في /etc/apt/sources.list
.
7.2. تثبيت حزمة عن طريق سطر الأوامر
أمر apt
هو أداة سطر الأوامر قوية، التي تعمل مع “أداة التركيب المتقدمة (APT)” لأوبونتو.
apt
، ومعه الأوامر المتضمنة به، توفر الوسيلة للتثبيت من قبل قامب تطبيقات جديدة وتحديث القامب القائم بالتطبيقات الموجودة بالفعل ، وتحديث قامب القائمة بالتطبيقات وحتى تحديث كل نظام Ubuntu.
لمشاهدة سجلات تثبيت القامب apt
، يمكنك مشاهدة ملف /var/log/dpkg.log
.
تلو التالي أيضًا إستخدامات أوامر القامب apt
:
تثبيت القامبات
sudo apt install htop
على سبيل المثال، لتثبيت قامب htop
، يمكنك استخدام أمر التالي:
تحديث قامب القائمة بالتطبيقات
sudo apt update
قامب القائمة بالتطبيقات هو قائمة بجميع القامبات المتاحة في المستودعات. لتحديث قامب القائمة المحلي يمكنك استخدام الأمر التالي:
تحديث القامبات
قامبات منشأت في نظامك يمكن أن تحصل على تحديثات تحمل إصلاحات أخرى، تصحيحات أمنية وميزات جديدة.
sudo apt upgrade
لتحديث القامبات، يمكنك استخدام الأمر التالي:
إزالة القامبات
sudo apt remove htop
لإزالة قامب مثل htop
، يمكنك استخدام الأمر التالي:
7.3. تثبيت قامب بطريقة جغرافية متقدمة – Synaptic
إذا لم يكن لديك إرتياح بالخطأ بالسطر الأوامري، يمكنك استخدام تطبيق شبكي لتثبيت القامب. يمكنك إنجاز نفس النتائج التي يمكن إنجازها بالسطر الأوامري ولكن بواجهة تصاعدية.
Synaptic هو تطبيق إدارة ال
plaintext
يمكنك أيضًا النقر بزر الماوس الأيمن على حزمة ومشاهدة تفاصيل إضافية كالإعتماديات، وصاحب الصيانة، الحجم، والملفات المثبتة.
7.4. تثبيت الحزم التي تم تنزيلها من موقع الويب
ربما ترغب في تثبيت حزمة قمت بتنزيلها من موقع الويب، بدلاً من مخزن البرامج. هذه الحزم تُدعى ملفات .deb
.
cd directory
sudo dpkg -i package_name.deb
استخدامdpkg
لتثبيت الحزم:dpkg
هو أداة سطر الأوامر تستخدم لتثبيت الحزم. لتثبيت حزمة بواسطة dpkg، افتح الطرفية واكتب ما يلي:
ملاحظة: قم بتغيير “الدليل” إلى الدليل الذي يتم فيه تخزين الحزمة و”اسم_الحزمة” إلى اسم الملف الخاص بالحزمة.
بدلاً من ذلك، يمكنك النقر بزر الماوس الأيمن، واختيار “افتح ببرنامج آخر”، واختيار تطبيق واجهة المستخدم الذي ترغب فيه.
💡 نصيحة: في أوبونتو، يمكنك مشاهدة قائمة بالحزم المثبتة بواسطة dpkg --list
.
الجزء 8: مواضيع لينكس المتقدمة
8.1. إدارة المستخدمين
يمكن أن يكون هناك عدة مستخدمين بمستويات مختلفة من الوصول في النظام. في لينكس، يمتلك المستخدم الجذر أعلى مستوى من الوصول ويمكنه أن يؤدي أي عملية على النظام. يملك المستخدمون العاديون وصول محدود ويمكنهم فقط إجراء العمليات التي تم منحهم إذن للقيام بها.
ما هو المستخدم؟
حساب المستخدم يوفر فصل بين الأشخاص والبرامج التي يمكن تنفيذ الأوامر لهم.
يعرف البشر المستخدمين باسم، لأن الأسماء من السهل التعامل معها. ولكن النظام يعرف المستخدمين برقم فريد يُدعى رقم معرف المستخدم (UID).
تتسجيل المستخدمون البشريون باستخدام اسم المستخدم المقدم، يجب عليهم استخدام كلمة مرور للتصريح بأنفسهم。
حسابات المستخدمين تشكل أسس الأمن النظامي. ملكية الملفات أيضًا مرتبطة بحسابات المستخدمين وتُطبق السيطرة على الوصول إلى الملفات. لكل عملية توفر حساب مستخدم مرتبط بهذا يوفر طبقة من السيطرة للمشرفين。
- هناك ثلاثة أنواع أساسية من الحسابات الشخصية:
- المستخدم الخارق:يمتلك المستخدم الخارق الوصول الكامل إلى النظام. اسم المستخدم الخارق هو
root
. لديهUID
0. - مستخدم النظام:يمتلك مستخدم النظام حسابات المستخدمين التي تستخدم لتشغيل خدمات النظام. تستخدم هذه الحسابات لتشغيل خدمات النظام ولا يهدف للتفاعل البشري.
مستخدم عادي:المستخدمون العاديون هم المستخدمون البشريون الذين لديهم الوصول إلى النظام.
id
uid=1000(john) gid=1000(john) groups=1000(john),4(adm),24(cdrom),27(sudo),30(dip)... output truncated
يعرض الأمر id
الهوية الشخصية وهوية المجموعة للمستخدم الحالي.
id username
لعرض معلومات أساسية عن مستخدم آخر، أعطي الاسم المستخدم كحقل لأمر id
.
ps -u
أنظر إلى معلومات متعلقة بالمستخدم للعمليات، استخدم أمر ps
بوضع العلامة -u
..
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 16968 3920 ? Ss 18:45 0:00 /sbin/init splash
root 2 0.0 0.0 0 0 ? S 18:45 0:00 [kthreadd]
# الخرج
بشكل افتراضي، تستخدم الأنظمة ملف /etc/passwd
لتخزين معلومات المستخدم..
root:x:0:0:root:/root:/bin/bash
هنا سطر من ملف /etc/passwd
:
- ملف
/etc/passwd
يحتوي على المعلومات التالية بشأن كل مستخدم: - اسم المستخدم:
root
– اسم حساب المستخدم.. - كلمة المرور:
x
– كلمة المرور بصيغة مشفرة لحساب المستخدم وتخزن في ملف/etc/shadow
لأسباب أمنية.. - معرف المستخدم (UID):
0
– المعرف الرقمي الفريد لحساب المستخدم.. - معرف الجروب (GID):
0
– معرف الجروب الأساسي لحساب المستخدم.. - معلومات المستخدم:
root
– الاسم الحقيقي لحساب المستخدم.. - دليل المنزل:
/root
– دليل المنزل لحساب المستخدم.
الشل: /bin/bash
– الشل الافتراضي لحساب المستخدم. قد يستخدم المستخدم النظامي /sbin/nologin
إذا لم يُسمح بالتسجيلات التفاعلية لهذا المستخدم.
ما هو المجموعة؟
المجموعة هي مجموعة من حسابات المستخدمين التي تتشارك الوصول والموارد. للمجموعات أسماء لتحديدها. يُعرّف النظام المجموعات بواسطة رقم فريد يسمى معرف المجموعة (GID).
بشكل افتراضي، تُخزن المعلومات حول المجموعات في ملف /etc/group
.
adm:x:4:syslog,john
هنا إدخال من ملف /etc/group
:
- هنا تحليل الحقول في الإدخال المعطى:
- اسم المجموعة:
adm
– اسم المجموعة. - كلمة المرور:
x
– تُخزن كلمة المرور للمجموعة في ملف/etc/gshadow
لأسباب أمنية. كلمة المرور اختيارية وتظهر فارغة إذا لم تُحدد. - معرف المجموعة (GID):
4
– المعرف الرقمي الفريد للمجموعة.
أعضاء المجموعة: syslog,john
– قائمة أسماء المستخدمين الذين هم أعضاء في المجموعة. في هذه الحالة، تحتوي المجموعة adm
على عضوين: syslog
و john
.
في هذا الإدخال المحدد، اسم المجموعة هو adm
، معرف المجموعة هو 4
، والمجموعة لديها عضوين: syslog
و john
. عادةً ما يتم تعيين حقل كلمة المرور إلى x
للإشارة إلى أن كلمة مرور المجموعة مخزنة في ملف /etc/gshadow
.
- تنقسم المجموعات إلى ‘رئيسية’ و ‘فرعية’.
- المجموعة الرئيسية: يتم تعيين مجموعة رئيسية واحدة لكل مستخدم بشكل افتراضي. عادة ما يكون لهذه المجموعة نفس اسم المستخدم وتُنشأ عند إنشاء حساب المستخدم. الملفات والمجلدات التي ينشئها المستخدم تكون مملوكة عادةً لهذه المجموعة الرئيسية.
التحكم في الوصول: إيجاد وفهم صلوب الملفات
يمكن رؤية مالكية الملفات باستخدام أمر ls -l
. يعرض أول عنصر في مادة خروج أمر ls -l
صلوب الملف. ويعرض الأعناق الآخرون مالك الملف ومجموعة الملف ينتمي إليها.
دعونا ننظر أقرب إلى عنصر الأولويات
:
- الأولوياتتعرف شيئين:
- نوع الملف: نوع الملف يحدد نوع الملف. بالنسبة للملفات العادية التي تحتوي على بيانات بسيطة، فهي تكون فارغة
-
. بالنسبة لأنواع الملفات الخاصة الأخرى، يكون الرمز مختلفاً. بالنسبة للدليل، وهو ملف خاص، يكون الرمزd
. يتم التعامل مع الملفات الخاصة بشكل مختلف بواسطة نظام التشغيل.
فئات الأذونات: المجموعة التالية من الأحرف تحدد الأذونات للمستخدم والمجموعة والآخرين على التوالي.
– المستخدم: هذا هو مالك الملف ومالك الملف ينتمي لهذه الفئة.
– المجموعة: أعضاء مجموعة الملف ينتمون لهذه الفئة.
– الآخر: أي مستخدمين ليسوا جزءًا من فئات المستخدم أو المجموعة ينتمون لهذه الفئة.
💡نصيحة: يمكن عرض ملكية الدليل باستخدام الأمر ls -ld
.
كيفية قراءة الأذونات الرمزية أو أذونات rwx
- تمثيل
rwx
يُعرف بالتمثيل الرمزي للأذونات. في مجموعة الأذونات، - – الخصائص
r
تعني قراءة. يُشير إليها الحرف الأول في الثلاثية. - الخصائص
w
تعني كتابة. يُشير إليها الحرف الثاني في الثلاثية.
الخصائص x
تعني تنفيذ. يُشير إليها الحرف الثالث في الثلاثية.
قراءة:
للملفات العادية، تسمح الإذنات بقراءة بفتح الملف وقراءته فقط. لا يمكن للمستخدمين تعديل الملف.
بالمثل في الأدلة، تسمح الإذنات بقراءة بإظهار محتويات الدليل دون أي تعديل في الدليل.
كتابة:
عندما يكون للملفات إذنات كتابة، يمكن للمستخدم تعديل (تحرير، حذف) الملف وحفظه.
للمجلدات، تمكن الإذنات الكتابية المستخدمين من تعديل محتوياتها (إنشاء، حذف، وتغيير اسم الملفات داخلها)، وتعديل محتويات الملفات التي لهم إذنات كتابة عليها.
أمثلة للإذنات في لينكس
- بما أننا نعرف الآن كيفية قراءة الإذنات، دعونا نرى بعض الأمثلة.
-
-rw-rw-r--
:ملف يُمكن تعديله من قبل مالكه والمجموعة لكن ليس من قبل الآخرين.
drwxrwx---
:دليل يُمكن تعديله من قبل مالكه والمجموعة.
تنفيذ:
بالنسبة للملفات، تسمح صلاحية التنفيذ بإجراء سكربت التنفيذ. بالنسبة للدلائل، يمكن للمستخدم الوصول إليها ومعرفة تفاصيل الملفات الموجودة في الدليل.
كيفية تغيير صلاحيات الملف وملكيةه في لينكس باستخدام chmod
و chown
بما أننا نعرف الأساسيات للملكية والصلاحيات، دعونا نرى كيف يمكننا تغيير الصلاحيات باستخدام أمر chmod
.
chmod permissions filename
صيغةchmod
:
- حيث،
-
صلاحيات
يمكن أن تكون قراءة، كتابة، تنفيذ أو تركيب منها.
اسم_الملف
هو اسم الملف الذي يجب تغيير صلاحياته. يمكن أن يكون هذا المعطي قائمة من الملفات لتغيير الصلاحيات بالجملة.
- يمكننا تغيير الصلاحيات باستخدام نمطين:
- نموذج الرموز: هذه الطريقة تستخدم الرموز مثل
u
,g
,o
لتمثيل المستخدمين، الأماكن، والآخرين. الصلاحيات تمثل بـr, w, x
للقراءة، الكتابة، والتنفيذ، على التوالي. يمكنك تغيير الصلاحيات باستخدام +, – و =.
نموذج الأعداد الأوكتالية: هذه الطريقة تمثل الصلاحيات بأرقام أوكتالية ثلاثية من 0-7.
الآن، دعونا نشاهد الأمر بتفصيل.
كيفية تغيير الصلاحيات باستخدام نموذج الرموز
يلخص الجدول التالي تمثيل المستخدم: | تمثيل المستخدم |
u | وصف |
g | مستخدم/مالك |
o | مجموعة |
آخرون
يمكننا استخدام عمليات الرياضيات لإضافة، إزالة، وتعيين الصلاحيات. يلخص الجدول التالي الخلاصة: | العملية |
وصف | + |
يضيف صلاحية للملف أو الدليل | – |
يزيل الصلاحية | \= |
تعيين الإذن إذا لم يكن موجودًا من قبل. أيضًا يغلق الإذنات التي تم تعيينها سابقًا.
مثال:
فرض أن لدينا سكربت وأريد أن أجعله قابل للتنفيذ لصاحب الملف zaira
.
إذنات الملف الحالية هي كما يلي:
دعونا نقسم الإذنات كما يلي:
chmod u+x mymotd.sh
لإضافة الحق في التنفيذ (x
) للمالك (u
) باستخدام الوضع الترميزي، يمكننا استخدام الأمر أدناه:
الناتج:
الآن، يمكننا أن نرى أن الإذنات التنفيذية قد أضيفت للمالك zaira
.
- أمثلة إضافية لتغيير الإذنات بواسطة الطريقة الترميزية:
- إزالة إذنات القراءة والكتابة للمجموعة والآخرين:
chmod go-rw
. - إزالة إذن القراءة للآخرين:
chmod o-r
.
تعيين إذن الكتابة للمجموعة وتغلب الإذن الموجود: chmod g=w
.
كيفية تغيير الإذنات باستخدام الوضع الأساسي
الوضع الأبسolute يستخدم الأرقام لتمثيل الصلاحيات ويستخدم مشغلي الرياضيات لتعديلها.
الجدول أدناه يوضح كيف يمكننا إعطاء الصلاحيات اللازمة: | الصلاحية |
إعطاء الصلاحية | قراءة |
أضف 4 | كتابة |
أضف 2 | تنفيذ |
أضف 1
يمكن إسقاط الصلاحيات باستخدام الطرح. الجدول أدناه يوضح كيف يمكنك إزالة الصلاحيات اللازمة. | الصلاحية |
سحب الصلاحية | قراءة |
أزل 4 | كتابة |
أزل 2 | تنفيذ |
أزل 1
- مثال:
ضع قراءة
(أضف 4) لـ المستخدم
، قراءة
(أضف 4) و تنفيذ
(أضف 1) للمجموعة، وفقط تنفيذ
(أضف 1) للآخرين.
chmod 451 اسم-الملف
هذه هي الطريقة التي قمنا بها بالحساب:
- لاحظ أنها نفسها كـ
r--r-x--x
.
أزل حقوق التنفيذ
من الآخرين
و المجموعة
.
- لإزالة التنفيذ من
الآخرين
والمجموعة
، أزل 1 من جزء التنفيذ في العقدتين الأخيرتين.
تعيين read
، write
و execute
للuser
، read
و execute
للgroup
و فقط read
للآخرين.
هذا سيكون نفس rwxr-xr--
.
كيفية تغيير الصلاحيات باستخدام أمر chown
بعد ذلك، سنتعلم كيفية تغيير مالكية الملف. يمكنك تغيير مالكية الملف أو المجلد باستخدام أمر chown
. في بعض الحالات، يتطلب تغيير الصلاحيات الإذن sudo
.
chown user filename
بناءية الأمر chown
:
كيفية تغيير مالكية المستخدم بواسطة chown
دعونا ننقل مالكية المستخدم من zaira
إلى news
.
chown news mymotd.sh
أمر تغيير الصلاحيات: sudo chown news mymotd.sh
.
الناتج:
كيفية تغيير مالكية المستخدم والمجموعة في نفس الوقت
chown user:group filename
يمكننا أيضاً استخدام chown
لتغيير المستخدم والمجموعة في نفس الوقت.
كيفية تغيير مالكية الدليل
chown -R admin /opt/script
يمكنك تغيير مالكية البيانات التابعة للدليل تنقلياً. العينة أدناه تغيير مالكية مجلد /opt/script
لتسمح للمستخدم admin
.
كيفية تغيير مالكية المجموعة
chown :admins /opt/script
في حالة كان لدينا الحاجة فقط لتغيير مالك المجموعة، يمكننا استخدام chown
بوضع الفاصلة :
قبل اسم المجموعة
كيفية التنقل بين مستخدمين
[user01@host ~]$ su user02
Password:
[user02@host ~]$
يمكنك تبديل بين المستخدمين باستخدام الأمر su
.
كيفية تحصيل الوصول المتسلسل
المستخدم الرئيسي أو مستخدم الجذر لديه مستوى أعلى من الوصول في نظام لينكس. يمكن للمستخدم الرئيسي أن يقوم بأي عملية على النظام. يمكن للمستخدم الرئيسي أن يوصل إلى جميع الملفات والمجالات، وتثبيت وحذف التطبيقات، وتغير أو تختلف إعدادات النظام.
ومع هذه القوة الكبيرة يأتي مسؤولية كبيرة. إذا تم هجمة المستخدم الرئيسي، يمكن لشخص ما أن يحصل على سيطرة كاملة على النظام. يوصف أن يستخدم حساب المستخدم الرئيسي فقط في الحالات المناسبة.
[user01@host ~]$ su
Password:
[root@host ~]إذا تخطيت الاسم المستخدم، سيتم تبديل الحساب المستخدم الرئيسي بشكل تلقائي بواسطة أمر su
.
#
نموذج آخر لأمر su
هو su -
. تتغير الأمر su
إلى حساب المستخدم الرئيسي ولكنه لا يغير المتغيرات البيئية. يتغير الأمر su -
إلى حساب المستخدم الرئيسي ويغير المتغيرات البيئية الى تلك اللازمة للمستخدم المهمش.
تشغيل أوامر مع sudo
لتشغيل أوامر بصفة المستخدم root
دون تغير حساب المستخدم root
, يمكنك استخدام أمر sudo
. تسمح لأمر sudo
بتشغيل الأوامر بصفة الصلاحيات المرتفعة.
تشغيل الأوامر مع sudo
خيار أكثر أمانة من تشغيل الأوامر بصف
كان يتم تسجيل جميع الأوامر التي تم تنفيذها بواسطة sudo
، مما يوفر سجلاً للمراجعة عن الأشخاص الذين قاموا بتنفيذ أي أوامر وفي ما وقته.
cat /var/log/auth.log | grep sudo
في Ubuntu، يمكنك الحصول على سجلات التحقيق هنا:
user01 is not in the sudoers file. This incident will be reported.
للمستخدم الذي لا يملك وصول لsudo
، يتم تعريفه في السجلات ويتم إظهار رسالة مثل هذه:
إدارة حسابات المستخدمين المحليين
إنشاء مستخدمين من خلال السطر الأوامري
sudo useradd username
الأمر المستخدم لإضافة مستخدم جديد هو:
هذا الأمر ي config دليل مجال المستخدم ويخلق مجموعة خاصة من دون المستخدم باسمه. في الوقت الحاضر ، تفتقر الحساب إلى كلمة مرور سليمة ، مما يمنع المستخدم من الدخول إلى أن يتم إنشاء كلمة مرور.
تعديل المستخدمين الموجودين
يستخدم الأمر usermod
لتعديل المستخدمين الموجودين. هذه بعض خياراته الشائعة التي يستخدم مع الأمر usermod
:
- هذا بعض أمثلة لأمر
usermod
في Linux: - تغيير اسم دخول المستخدم:
- تغيير دليل المستخدم المنزلي:
- إضافة مستخدم إلى مجموعة إضافية:
- تغيير سطح المستخدم:
- قفل حساب المستخدم:
- تفتيش حساب مستخدم:
- تعيين تاريخ انتهاء لحساب مستخدم:
- تغيير معرفة مستخدم (UID) للمستخدم:
- تغيير مجموعة رئيسية للمستخدم:
إزالة مستخدم من مجموعة إضافية:
إلغاء مستخدمين
- يستخدم أمر
userdel
لإلغاء حساب مستخدم والملفات المرتبطة من النظام. sudo userdel username
: يحذف بيانات المستخدم من/etc/passwd
ولكن يبقى مجلد المستخدم.
الأمر sudo userdel -r username
يحذف بيانات المستخدم من /etc/passwd
ويحذف أيضًا مجلد المستخدم.
تغيير كلمات المرور للمستخدمين
- يستخدم أمر
passwd
لتغيير كلمة المرور للمستخدم.
sudo passwd username
: يضبط كلمة المرور الجديدة أو تغيير كلمة المرور القديمة للمستخدم username. ويستخدم أيضًا لتغيير كلمة المرور للمستخدم المتصل بالحساب الآن.
8.2 الاتصال بالخوادم البعيدة عن طريق SSH
ar
الوصول إلى الخوادم البعيدة هو إحدى المهام الأساسية لمسؤولي النظم. يمكنك الاتصال بخوادم مختلفة أو الوصول إلى قواعد البيانات من خلال جهازك المحلي وتنفيذ الأوامر، جميعها باستخدام SSH.
ما هو بروتوكول SSH؟
SSH يوجد لـ Secure Shell. إنه بروتوكول الشبكة الشفرية الذي يسمح بالتواصل الآمن بين نظامين.
المنفذ الافتراضي لـ SSH هو 22
.
- المشاركان الاثنين أثناء التواصل عبر SSH هم:
- الخادم: الآلة التي تريد الوصول إليها.
العميل: النظام الذي تقوم من خلاله بالوصول إلى الخادم.
- يتم الاتصال بالخادم باتباع هذه الخطوات:
- بدء الاتصال: يرسل العميل طلب الاتصال إلى الخادم.
- تبادل المفاتيح: يرسل الخادم مفتاحه العام إلى العميل. يتفق الجهتان على أساليب التشفير التي سيستخدمونها.
- توليد المفتاح الجلسة: يستخدم العميل والخادم تبادل المفتاح ديفي-هيلمان لإنشاء مفتاح جلسة مشترك.
- الاستيثاق العميل: يتم تسجيل الدخول للخادم بواسطة كلمة المرور، المفتاح الخاص أو طريقة أخرى.
التواصل الآمن: بعد الاستيثاق، يتم التواصل بين العميل والخادم بأمان بواسطة التشفير.
كيفية الاتصال بخادم بعيد باستخدام SSH؟
الأمر ssh
هو أداة مبنية في لينكس وأيضًا الافتراضية. يجعل الوصول إلى الخوادم سهلاً وآمنًا.
هنا، نحن نتحدث عن كيفية إنشاء الاتصال بواسطة العميل.
- قبل الاتصال بالخادم، يجب أن يكون لديك المعلومات التالية:
- عنوان IP الخادم أو اسم النطاق.
- اسم المستخدم وكلمة المرور للخادم.
رقم المنفذ الذي لديك إمكانية الوصول إليه في الخادم.
ssh username@server_ip
بناء الأمر ssh
الأساسي هو:
ssh [email protected]
على سبيل المثال، إذا كان اسم المستخدم john
وعنوان IP الخادم 192.168.1.10
، سيكون الأمر:
[email protected]'s password:
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-70-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Fri Jun 5 10:17:32 UTC 2024
System load: 0.08 Processes: 122
Usage of /: 12.3% of 19.56GB Users logged in: 1
Memory usage: 53% IP address for eth0: 192.168.1.10
Swap usage: 0%
Last login: Fri Jun 5 09:34:56 2024 from 192.168.1.2
john@hostname:~$ بعد ذلك، ستطلب منك إدخال كلمة المرور السرية. ستبدو شاشةك مثل هذه:
# بدء إدخال الأوامر
يمكنك الآن تنفيذ الأوامر ذات الصلة على الخادم 192.168.1.10
.
ssh -p port_number username@server_ip
⚠️ المنفذ الافتراضي للssh هو 22
ولكنه أيضًا غير مستقر، لأن الهاكرز سيحاولون الهجوم هنا أولاً. يمكن لخادمك أن يكشف عن منفذ آخر ويشاركك بالوصول. للاتصال بمنفذ مختلف، استخدم الوسم -p
.
8.3. تحليل وتحقيق متقدم للسجلات
تُنشأ الملفات السجلية، عندما يتم تهيئتها، بواسطة نظامك لأسباب مختلفة مفيدة. يمكن استخدامها لتتبع أحداث النظام، ورصد أداء النظام، وحل المشاكل. وهي خاصةً مفيدة لمسؤولي النظام حيث يمكنهم تتبع الأخطاء في التطبيق، والأحداث الشبكية، ونشاط المستخدم.
هنا مثال لملف سجل:
2024-04-25 09:00:00 INFO Startup: Application starting
2024-04-25 09:01:00 INFO Config: Configuration loaded successfully
2024-04-25 09:02:00 DEBUG Database: Database connection established
2024-04-25 09:03:00 INFO User: New user registered (UserID: 1001)
2024-04-25 09:04:00 WARN Security: Attempted login with incorrect credentials (UserID: 1001)
2024-04-25 09:05:00 ERROR Network: Network timeout on request (ReqID: 456)
2024-04-25 09:06:00 INFO Email: Notification email sent (UserID: 1001)
2024-04-25 09:07:00 DEBUG API: API call with response time over threshold (Duration: 350ms)
2024-04-25 09:08:00 INFO Session: User session ended (UserID: 1001)
2024-04-25 09:09:00 INFO Shutdown: Application shutdown initiated
# ملف سجل عينة
- في المعمول، يحتوي ملف السجل على العمود التالي:
- الطابع الزمني: وقت وتاريخ حدوث الحدث.
- مستوى السجل: شدة الحدث (INFO, DEBUG, WARN, ERROR).
- المكون: العنصر الذي أنتج الحدث في النظام (Startup, Config, Database, User, Security, Network, Email, API, Session, Shutdown).
- الرسالة: وصف الحدث الذي حصل.
معلومات إضافية: معلومات إضافية تتعلق بالحدث.
في الأنظمة الحالية، تتم إنتاج الملفات السجلية بطول آلاف الخطوط وتتم إنشاؤها كل ثانية. وقد تكون تعددية للغاية وفقاً للتكوينات. كل قامة في ملف السجلات هي قطعة من المعلومات التي يمكن استخدامها لتتبع القضايا. هذا يجعل ملفات السجلات صعبة القراءة وفهمها يدوياً.
هنا يأتي التحليل السجلي. عملية استخراج المعلومات المفيدة من ملفات السجلات. يتضمن تفكيك الملفات السجلية إلى قطع صغيرة وأكثر قابلية للتعامل واستخراج المعلومات المهمة.
يمكن أيضًا استخدام المعلومات المفصلة لخلق التنبيهات والتقارير والجهاز الرئيسي.
في هذا القسم ستستكشف بعض التقنيات لتحليل ملفات السجلات في Linux.
استخراج النص باستخدام grep
تعني “البحث عن العبارات العامة” وهو توزيع داخلي للبوست وهو توزيع داخلي للبوست. يستخدم للتطابق بيانات في الملفات.
- هذه بعض أستخدامات
grep
المتعاونة: - هذه الأمرة تبحث عن “search_string” في ملف يُدعى
filename
. - هذه الأمرة تبحث عن “
search_string
” في جميع الملفات داخل المجلد المحدد ومجلداته الفرعية. - هذه الأمرة تجري بحثًا لا يتمحور حول حالة الأحرف لـ”search_string” في ملف يُدعى
filename
. - هذه الأمرة تظهر أرقام السطور مع السطور التي تطابق مع “search_string” في الملف المسمى
filename
. - هذه الأمرة تحسب عدد السطور التي تحتوي على “search_string” في الملف المسمى
filename
. - هذه الأمرة تظهر جميع السطور التي لا تحتوي على “search_string” في الملف المسمى
filename
. - هذه الأمرة تبحث عن الكلمة الكاملة “word” في الملف المسمى
filename
.
هذه الأمرة تسمح بإستخدام تعابير التعبيرات العادية الموسعة للمطابقة الأكثر تعقيداً للأنماط في الملف المسمى filename
.
💡 تلميح: إذا كانت هناك ملفات متعددة في مجلد، يمكنك استخدام الأمر أدناه لإيجاد القائمة بالملفات التي تحتوي على السلاسل المرغوبة.
grep -l "String to Match" /path/to/directory
# ابحث عن قائمة الملفات التي تحتوي على السلاسل المرغوبة
تحليل النص باستخدام sed
sed
يشير إلى “محرر السلسلة”. يعالج البيانات سلسلة بسلسلة، مما يعني قراءة البيانات سطراً واحداً في الوقت. sed
يسمح لك بالبحث عن الأنماط وأداء الإجراءات على السطور التي تطابق تلك الأنماط.
بنية الكود الأساسية لsed
:
sed [options] 'command' file_name
بنية الكود الأساسية لـ sed
هي كما يلي:
هنا، يستخدم الأمر
لأداء عمليات مثل التغيير، الحذف، الإدراج، وما إلى ذلك، على بيانات النص. يمثل الاسم الوظيفي اسم الملف الذي تريد معالجته.
sed
استخدام:
1. التغيير:
sed 's/old-text/new-text/' filename
يستخدم العلامة s
لتغيير النص. يتم استبدال النص القديم
بـ النص الجديد
:
sed 's/error/warning/' system.log
على سبيل المثال، لتغيير جميع حالات “error” إلى “warning” في ملف السجل system.log
:
2. طباعة السطور التي تحتوي على نمط محدد:
sed -n '/pattern/p' filename
استخدام sed
لتصفية وعرض السطور التي تطابق نمط محدد:
sed -n '/ERROR/p' system.log
على سبيل المثال، للعثور على جميع السطور التي تحتوي “ERROR”:
3. حذف السطور التي تحتوي على نمط محدد:
sed '/pattern/d' filename
يمكنك حذف السطور من الإخراج التي تطابق نمط محدد:
sed '/DEBUG/d' system.log
على سبيل المثال، لحذف جميع السطور التي تحتوي “DEBUG”:
4. استخراج حقول محددة من سطر سجل:
sed -n 's/^\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\).*/\1/p' system.log
يمكنك استخدام العبارات التقليدية لاستخراج جزء من السطور. فلنفترض أن كل سطر في الملف السّجليّ يبدأ بتاريخ بالصيغة “YYYY-MM-DD”. يمكنك استخراج التاريخ من كل سطر:
تحليل النص بواسطة awk
awk
يملك القدرة على تجزيئة كل سطر إلى حقول. يُمكنه معالجة النصوص المُنظمة مثل ملفات السجلات。
باسك الاساسي لawk
awk 'pattern { action }' file_name
باسك الأساسي لـ awk
هو:
هنا، pattern
هو شرط يتم بموجبه إجراء العملية action
. إذا تم تخطي النمط، يتم إجراء العمل على كل سطر。
2024-04-25 09:00:00 INFO Startup: Application starting
2024-04-25 09:01:00 INFO Config: Configuration loaded successfully
2024-04-25 09:02:00 INFO Database: Database connection established
2024-04-25 09:03:00 INFO User: New user registered (UserID: 1001)
2024-04-25 09:04:00 INFO Security: Attempted login with incorrect credentials (UserID: 1001)
2024-04-25 09:05:00 INFO Network: Network timeout on request (ReqID: 456)
2024-04-25 09:06:00 INFO Email: Notification email sent (UserID: 1001)
2024-04-25 09:07:00 INFO API: API call with response time over threshold (Duration: 350ms)
2024-04-25 09:08:00 INFO Session: User session ended (UserID: 1001)
2024-04-25 09:09:00 INFO Shutdown: Application shutdown initiated
INFO
- في الأمثلة القادمة، ستستخدم هذا الملف السجلي كمثال:
الوصول إلى الأعمدة باستخدامawk
zaira@zaira-ThinkPad:~$ awk '{ print $1 }' sample.log
يمكن الوصول إلى الحقول في awk
(مفصولة بالمسافات بشكل افتراضي) باستخدام $1
، $2
، $3
، وهكذا。
2024-04-25
2024-04-25
2024-04-25
2024-04-25
2024-04-25
2024-04-25
2024-04-25
2024-04-25
2024-04-25
2024-04-25
zaira@zaira-ThinkPad:~$ awk '{ print $2 }' sample.log
# النّتيجة
09:00:00
09:01:00
09:02:00
09:03:00
09:04:00
09:05:00
09:06:00
09:07:00
09:08:00
09:09:00
- # النّتيجة
awk '/ERROR/ { print $0 }' logfile.log
طباعة السطور التي تحتوي على نمط محدد (مثلاً، ERROR)
2024-04-25 09:05:00 ERROR Network: Network timeout on request (ReqID: 456)
# النّتيجة
- هذا يطبع كل السطور التي تحتوي على “ERROR”。
awk '{ print $1, $2 }' logfile.log
استخراج الحقل الأول (التاريخ والوقت)
2024-04-25 09:00:00
2024-04-25 09:01:00
2024-04-25 09:02:00
2024-04-25 09:03:00
2024-04-25 09:04:00
2024-04-25 09:05:00
2024-04-25 09:06:00
2024-04-25 09:07:00
2024-04-25 09:08:007
2024-04-25 09:09:00
# النّتيجة
- هذا سيستخرج الحقلين الأولين من كل سطر، والذين في هذه الحالة سيكونا التاريخ والوقت。
awk '{ count[$3]++ } END { for (level in count) print level, count[level] }' logfile.log
ملخص حدوث كل مستوى من مستويات السجل
1
WARN 1
ERROR 1
DEBUG 2
INFO 6
# الناتج
- سيكون الناتج ملخصًا لعدد حدوث كل مستوى سجل.
awk '{ $3="INFO"; print }' sample.log
تصفية الحقول المحددة (على سبيل المثال، حيث يكون الحقل الثالث معلومات)
2024-04-25 09:00:00 INFO Startup: Application starting
2024-04-25 09:01:00 INFO Config: Configuration loaded successfully
2024-04-25 09:02:00 INFO Database: Database connection established
2024-04-25 09:03:00 INFO User: New user registered (UserID: 1001)
2024-04-25 09:04:00 INFO Security: Attempted login with incorrect credentials (UserID: 1001)
2024-04-25 09:05:00 INFO Network: Network timeout on request (ReqID: 456)
2024-04-25 09:06:00 INFO Email: Notification email sent (UserID: 1001)
2024-04-25 09:07:00 INFO API: API call with response time over threshold (Duration: 350ms)
2024-04-25 09:08:00 INFO Session: User session ended (UserID: 1001)
2024-04-25 09:09:00 INFO Shutdown: Application shutdown initiated
INFO
# الناتج
سيقوم هذا الأمر بإستخراج جميع الأسطر التي يكون في الحقل الثالث “معلومات”.
💡 نصيحة: الفاصل الافتراضي في awk
هو المسافة. إذا كان ملف السجل الخاص بك يستخدم فاصل مختلف، فيمكنك تحديده باستخدام الخيار -F
. على سبيل المثال، إذا كان ملف السجل يستخدم النقطة المضيئة كفاصل، يمكنك استخدام awk -F: '{ print $1 }' logfile.log
لاستخراج الحقل الأول.
تحليل ملفات السجل باستخدام cut
أمر cut
هو أمر بسيط ولكنه قوي يستخدم لاستخراج أجزاء من النص من كل سطر من المدخلات. نظرًا لأن ملفات السجل مهيكلة وكل حقل محدد بحرف محدد، مثل المسافة، الجدولة، أو فاصل مخصص، يقوم cut
بعمل جيد جدًا في استخراج تلك الحقول المحددة.
cut [options] [file]
الصيغة الأساسية لأمر القطع هي:
- بعض الخيارات المستخدمة بشكل شائع لأمر القطع:
-d
: يحدد الفاصل المستخدم كفاصل بين الحقول.-f
: يحدد الحقول التي سيتم عرضها.
-c
: يحدد مواضع الأحرف.
cut -d ' ' -f 1 logfile.log
على سبيل المثال، ستحدد الأمر أدناه المجال الأول (مفصول بمسافة) من كل سطر من ملف السجل:
أمثلة لاستخدامcut
لفهم سجلات
2024-04-25 08:23:01 INFO 192.168.1.10 User logged in successfully.
2024-04-25 08:24:15 WARNING 192.168.1.10 Disk usage exceeds 90%.
2024-04-25 08:25:02 ERROR 10.0.0.5 Connection timed out.
...
فرض أن لديك ملف سجل مبني كما يلي، حيث تفصل الحقول بمسافات:
cut
يمكن استخدامه بالطرق التالية:
cut -d ' ' -f 2 system.log
استخراج الوقت من كل مُدخل سجل:
08:23:01
08:24:15
08:25:02
...
# الناتج
- هذا الأمر يستخدم مسافة كحدث ويختار الحقل الثاني، وهو جزء الوقت من كل مُدخل سجل.
cut -d ' ' -f 4 system.log
استخراج عناوين الـ IP من السجلات:
192.168.1.10
192.168.1.10
10.0.0.5
# الناتج
- هذا الأمر يستخرج الحقل الرابع، وهو عنوان IP من كل مُدخل سجل.
cut -d ' ' -f 3 system.log
استخراج مستويات السجل (INFO, WARNING, ERROR):
INFO
WARNING
ERROR
# الناتج
- هذا يستخرج الحقل الثالث الذي يحتوي على مستوى السجل.
جمعcut
مع أوامر أخرى:
grep "ERROR" system.log | cut -d ' ' -f 1,2
يمكن أن يتم إخراج الأوامر الأخرى إلى أمر cut
. لنقل أنك تريد تصفية السجلات قبل القطع. يمكنك استخدام grep
لاستخراج السطور التي تحتوي على "ERROR" ومن ثم استخدام cut
للحصول على معلومات محددة من تلك السطور:
2024-04-25 08:25:02
# الناتج
- This command first filters lines that include “ERROR”, then extracts the date and time from these lines.
Extracting multiple fields:
cut -d ' ' -f 1,2,3 system.log`
It is possible to extract multiple fields at once by specifying a range or a comma-separated list of fields:
2024-04-25 08:23:01 INFO
2024-04-25 08:24:15 WARNING
2024-04-25 08:25:02 ERROR
...
# Output
The above command extracts the first three fields from each log entry that are date, time, and log level.
Parsing log files with sort
and uniq
Sorting and removing duplicates are common operations when working with log files. The sort
and uniq
commands are powerful commands used to sort and remove duplicates from the input, respectively.
Basic syntax of sort
sort [options] [file]
The sort
command organizes lines of text alphabetically or numerically.
- Some key options for the sort command:
-n
: Sorts the file assuming the contents are numerical.-r
: Reverses the order of sort.-k
: Specifies a key or column number to sort on.
-u
: Sorts and removes duplicate lines.
“`
يستخدم الأمر uniq
لتصفية أو تعداد وإبلاغ الأسطر المكررة في ملف.
uniq [options] [input_file] [output_file]
هيكلة uniq
هي:
- بعض الخيارات الرئيسية للأمر
uniq
هي: -c
: يضيف العدد من المواقف أمام السطر.-d
: يطبع فقط الأسطر المكررة.
-u
: يطبع فقط الأسطر الفريدة.
أمثلة لاستخدام sort
و uniq
معاً لتحليل السجلات
2024-04-25 INFO User logged in successfully.
2024-04-25 WARNING Disk usage exceeds 90%.
2024-04-26 ERROR Connection timed out.
2024-04-25 INFO User logged in successfully.
2024-04-26 INFO Scheduled maintenance.
2024-04-26 ERROR Connection timed out.
- فلنفترض المثال التالي لسجلات الدخول لهذه العروض:
sort system.log
فرز سجلات الدخول حسب التاريخ:
2024-04-25 INFO User logged in successfully.
2024-04-25 INFO User logged in successfully.
2024-04-25 WARNING Disk usage exceeds 90%.
2024-04-26 ERROR Connection timed out.
2024-04-26 ERROR Connection timed out.
2024-04-26 INFO Scheduled maintenance.
# الخرج
- هذا يفرز السجلات الأبجديية، وهو بمثابة فرزها حسب التاريخ إذا كان التاريخ هو الحقل الأول.
sort system.log | uniq
الفرز وإزالة الأسطر المكررة:
2024-04-25 INFO User logged in successfully.
2024-04-25 WARNING Disk usage exceeds 90%.
2024-04-26 ERROR Connection timed out.
2024-04-26 INFO Scheduled maintenance.
# الخرج
- هذا الأمر يفرز ملف السجل ويمرره إلى
uniq
، مما يزيل الأسطر المكررة.
sort system.log | uniq -c
حساب تواجد كل سطر:
2 2024-04-25 INFO User logged in successfully.
1 2024-04-25 WARNING Disk usage exceeds 90%.
2 2024-04-26 ERROR Connection timed out.
1 2024-04-26 INFO Scheduled maintenance.
# الخرج
- يفرز السجلات وبعدها يحصي كل سطر فريد. وفقاً للخرج، سبق أن السطر
'2024-04-25 INFO User logged in successfully.'
ظهر 2 مرات في الملف.
sort system.log | uniq -u
تحديد سجلات الدخول الفريدة:
2024-04-25 WARNING Disk usage exceeds 90%.
2024-04-26 INFO Scheduled maintenance.
# الخرج
- هذا الأمر يظهر السطور التي تمت بشكل فريد.
sort -k2 system.log
فرز حسب مستوى السجل:
2024-04-26 ERROR Connection timed out.
2024-04-26 ERROR Connection timed out.
2024-04-25 INFO User logged in successfully.
2024-04-25 INFO User logged in successfully.
2024-04-26 INFO Scheduled maintenance.
2024-04-25 WARNING Disk usage exceeds 90%.
# الخرج
يفرز الإدخالات بناءً على الحقل الثاني، وهو مستوى السجل.
8.4. إدارة عمليات Linux عن طريق سطر الأوامر
- العملية هي مثيل تشغيلي لبرنامج. تتكون العملية من:
- مساحة العنوان للذاكرة المخصصة.
- حالات العملية.
الخصائص مثل الإملكية، وصفات الأمان، واستخدام الموارد.
- يتملك العملية أيضًا بيئة تتكون من:
- المتغيرات المحلية والعالمية
- السياق التنظيمي الحالي
الموارد النظامية المخصصة، مثل منافذ الشبكة أو موصفات الملف.
عند إجراء الأمر ls -l
، يخلق النظام التشغيل عملية جديدة لتنفيذ الأمر. يملك العملية معرف، وحالة، وتستمر حتى ينتهي الأمر.
فهم تشكيل العملية ودورة الحياة الخاصة بها
في أوبونتو، جميع العمليات تأتي من العملية الأولية النظامية تُدعى systemd
، وهي العملية الأولى التي تبدأها النوى أثناء الإقلاع.
يحمل العملية systemd
معرف العملية (PID) بـ 1
وتكون مسؤولة عن تهيئة النظام، وبدء وإدارة العمليات الأخرى، وتعامل خدمات النظام. جميع العمليات الأخرى على النظام هي من الأحفاد systemd
.
يكرر عملية الأب مساحته الخاصة (fork) لخلق بنية عملية جديدة (إبن). يتم إسناد معرف عملية فريد (PID) لكل عملية جديدة لأغراض التتبع والأمان. الPID ومعرف عملية الأب (PPID) جزء من البيئة العملية الجديدة. يستطيع أي عملية إنشاء عملية إبنها.
عبر البرنامج الإفراطي، تورث عملية الإبن الهويات الأمنية، وموصلات الملفات السابقة والحالية، وصلاحيات المنفذ والموارد، ومتغيرات البيئة، وشفرة البرنامج. يمكن لعملية الإبن تنفيذ شفرتها الخاصة بعد ذلك.
عادةً، يتم إيقاف العملية الأب بينما تعمل عملية الإبن، وتحدد طلب (wait) للإخطار عند إنتهاء الإبن.
عند الخروج، قد أغلقت عملية الإبن مواردها وبيئتها أو تخلصت منها. الموارد الوحيدة المتبقية، التي يُعرف بها بالموتى، تُعتبر مُدخل في جدول العمليات. العملية الأب، عندما يُنبه بنجاح الإبن، تنظف من جدول العمليات مدخلا الإبن، مما يحرر الموارد الأخيرة لعملية الإبن. ومن ثم يستمر العملية الأب في تنفيذ شفرتها الخاصة.
فهم حالات العمليات
تتخيل العمليات في لينكس حالات مختلفة خلال حياتها العملية. حالة العملية تشير إلى ما يقوم به العملية حالياً وكيفية تفاعلها مع النظام. تتحول العمليات بين الحالات بمقدور حالتها التنفيذية وخوارزمية تخطيط النظام.
يمكن للعمليات في نظام لينكس أن تكون في إحدى الحالات التالية: | الحالة |
الوصف | (جديد) |
الحالة الأولية عندما يتم إنشاء العملية عن طريق إتصال نظام fork. | قابل للتنفيذ (جاهز) (R) |
العملية جاهزة للتنفيذ وتنتظر أن يتم جدولها على الCPU. | يعمل (مستخدم) (R) |
العملية تؤدي بوضع المستخدم، تشغيل تطبيقات المستخدم. | يعمل (النوى) (R) |
العملية تؤدي في وضع النوى، يتعامل مع إتصالات النظام أو الإشارات الآلية. | ينام (S) |
العملية تنتظر إنهاء الحدث (مثل عملية إدخال/إخراج) ويمكن تنبيهها بسهولة. | ينام (غير قابل للإزعاج) (D) |
العملية في حالة نوم غير قابلة للإزعاج، تنتظر إنهاء شرط محدد (عادةً إدخال/إخراج) ولا يمكن إزعاجها بواسطة الإشارات. | ينام (نوم القرص) (K) |
العملية تنتظر إنهاء عمليات إدخال/إخراج القرص الصلب. | ينام (خم) (I) |
العملية خاملة، لا تقوم بأي عمل، وتنتظر حدوث الحدث. | توقف (T) |
توقف تنفيذ العملية، وهو عادةً بسبب إشارة، ويمكن استئنافه لاحقًا. | زومبي (Z) |
انتهت العملية من التنفيذ ولكن لازال لديه إدخال في جدول العمليات، ينتظر أن يقرأ والده محال التخلص منه.
تتحول العمليات بين هذه الحالات بالطرق التالية: | التحول |
الوصف | فورك |
ينشئ عملية جديدة من عملية الوالد، يتحول من (جديد) إلى (مستعد) (R). | جدولة |
يختار المُجدول عملية مستعدة، يتحولها إلى حالة (جارية (مستخدم) أو (جارية (نواة). | تشغيل |
يتحول العملية من (مستعد) (R) إلى (جارية (نواة) (R) عندما يُجدول للتنفيذ. | إلغاء الأولوية أو إعادة الجدولة |
يمكن إلغاء أولوية العملية أو إعادة جدولتها، مما يأخذها إلى حالة (مستعد) (R) مرة أخرى. | نداء النظام |
تقوم العملية بنداء نظام، يتحول من (جارية (مستخدم) (R) إلى (جارية (نواة) (R). | العودة |
تنتهي العملية من نداء النظام وتعود إلى (جارية (مستخدم) (R). | الانتظار |
تنتظر العملية الحدوث، يتحول من (جارية (نواة) (R) إلى إحدى حالات النوم (S, D, K, أو I). | الحدث أو الإشارة |
يتم إيقاظ العملية بواسطة حدث أو إشارة، مما ينقلها من حالة النوم إلى جاهزة (R). | تعليق |
يتم تعليق العملية، تنتقل من قيد التشغيل (النواة) أو جاهزة إلى متوقفة (T). | استئناف |
تستأنف العملية، تنتقل من متوقفة (T) إلى جاهزة (R). | إنهاء |
تنهي العملية، تنتقل من قيد التشغيل (المستخدم) أو قيد التشغيل (النواة) إلى زومبي (Z). | جمع |
يقرأ العملية الأم حالة الخروج لعملية الزومبي، ويزيلها من جدول العمليات.
كيفية عرض العمليات
zaira@zaira:~$ ps aux
يمكنك استخدام أمر ps
مع مجموعة من الخيارات لعرض العمليات على نظام لينكس. يُستخدم أمر ps
لعرض معلومات حول اختيار من العمليات النشطة. على سبيل المثال، ps aux
يعرض جميع العمليات التي تعمل على النظام.
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 168140 11352 ? Ss May21 0:18 /sbin/init splash
root 2 0.0 0.0 0 0 ? S May21 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< May21 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< May21 0:00 [rcu_par_gp]
root 5 0.0 0.0 0 0 ? I< May21 0:00 [slub_flushwq]
root 6 0.0 0.0 0 0 ? I< May21 0:00 [netns]
root 11 0.0 0.0 0 0 ? I< May21 0:00 [mm_percpu_wq]
root 12 0.0 0.0 0 0 ? I May21 0:00 [rcu_tasks_kthread]
root 13 0.0 0.0 0 0 ? I May21 0:00 [rcu_tasks_rude_kthread]
*... output truncated ....*
# الإخراج
- يظهر الإخراج أعلاه لقطة للعمليات التي تعمل حاليًا على النظام. كل صف يمثل عملية مع الأعمدة التالية:
USER
: المستخدم الذي يملك العملية.PID
: معرف العملية.%CPU
: نسبة استخدام المعالج للعملية.%MEM
: استخدام الذاكرة للعملية.VSZ
: حجم الذاكرة الافتراضية للعملية.RSS
: حجم مجموعة المقيم، وهي الذاكرة الفعلية غير المتبدلة التي استخدمها المهمة.TTY
: الطرفية المسيطرة على العملية. يشير؟
إلى عدم وجود طرفية مسيطرة.Ss
: قائد الجلسة. هذا هو العملية التي بدأت جلسة، وهو قائد لمجموعة من العمليات ويمكنه التحكم في إشارات المحطة. يشير أولS
إلى حالة النوم، ويشير الثانيs
إلى أنه قائد جلسة.START
: وقت أو تاريخ بدء العملية.TIME
: الوقت التراكمي لوحدة المعالجة المركزية.
COMMAND
: الأمر الذي بدأ العملية.
العمليات الخلفية والأمامية
في هذا القسم ستتعلم كيفية التحكم في الوظائف عن طريق تشغيلها في الخلفية أو الأمامية.
الوظيفة هي عملية تبدأ بواسطة الصدفة. عندما تشغل أمرا في الطرفية، يعتبر ذلك وظيفة. يمكن للوظيفة أن تشتغل في الخلفية أو الأمامية.
- لإظهار التحكم، ستبدأ أولا بإنشاء ثلاث عمليات ومن ثم تشغيلهم في الخلفية. بعد ذلك، ستقوم بإدراج العمليات وتبادلها بين الخلفية والأمامية. سترى كيفية وضعهم في وضع النوم أو الخروج تماما.
إنشاء ثلاث عمليات
افتح طرفية وبدأ ثلاث عمليات طويلة الأمد. استخدم أمر sleep
الذي يحتفظ بالعملية قيد التشغيل لعدد محدد من الثواني.
sleep 300 &
sleep 400 &
sleep 500 &
# تشغيل أمر sleep لـ300، 400، و500 ثانية
- ال
&
الموجود في نهاية كل أمر يحول العملية إلى الخلفية.
عرض الوظائف في الخلفية
jobs
استخدم أمر jobs
لعرض القائمة بالوظائف في الخلفية.
jobs
[1] Running sleep 300 &
[2]- Running sleep 400 &
[3]+ Running sleep 500 &
- الخرج يجب أن يبدو مثل هذا:
إحضار وظيفة خلفية إلى الأمامية
fg %1
لإحضار وظيفة خلفية إلى الأمامية، استخدم الأمر fg
بعدها رقم الوظيفة. على سبيل المثال، لإحضار الوظيفة الأولى (sleep 300
) إلى الأمامية:
- هذا سيحضر الوظيفة
1
إلى الأمامية.
إعادة نقل الوظيفة الأمامية إلى الخلفية
بينما يعمل الوظيفة في الخلفية الأمامية، يمكنك إيقافها وتحويلها إلى الخلفية بضغط Ctrl+Z
لإيقاف الوظيفة.
zaira@zaira:~$ fg %1
sleep 300
^Z
[1]+ Stopped sleep 300
zaira@zaira:~$ jobs
سيبدو وظيفة موقوفة هكذا:
[1]+ Stopped sleep 300
[2] Running sleep 400 &
[3]- Running sleep 500 &
# وظيفة موقوفة
الآن استخدم أمر bg
لاستئناف الوظيفة بالمعرف 1 في الخلفية.
# ضغط Ctrl+Z لإيقاف الوظيفة الأمامية
bg %1
- # ثم، استئنافها في الخلفية
jobs
[1] Running sleep 300 &
[2]- Running sleep 400 &
[3]+ Running sleep 500 &
أعرض الوظائف مجددا
- في هذه التمرين، قمت بـ:
- بدء ثلاثة عمليات خلفية باستخدام أوامر sleep.
- استخدمت وظائف لعرض القائمة بالوظائف الخلفية.
- أحضرت وظيفة إلى الأمام بواسطة
fg %رقم_الوظيفة
. - أيقفت الوظيفة بواسطة
Ctrl+Z
ونقلتها إلى الخلفية بواسطةbg %رقم_الوظيفة
.
استخدمت وظائف مجددا للتحقق من حالة الوظائف الخلفية.
الآن تعرف كيفية التحكم بالوظائف.
قتل العمليات
من الممكن إنهاء عملية غير مستجيبة أو غير مرغوب فيها باستخدام أمر kill
. يقوم أمر kill
بإرسال إشارة إلى معرف العملية، طالبًا منها الإنهاء.
هناك عدد من الخيارات المتاحة مع أمر kill
.
kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24)
...terminated
# الخيارات المتاحة مع أمر kill
- هنا بعض الأمثلة على أمر
kill
في نظام Linux: - هذا الأمر يرسل إشارة
SIGTERM
الافتراضية إلى العملية ذات معرف 1234، طالبًا منها الإنهاء. - هذا الأمر يرسل إشارة
SIGTERM
الافتراضية إلى جميع العمليات ذات الاسم المحدد. - هذه الأمرة ترسل إشارة
SIGKILL
إلى العملية بPID 1234، وتقتلها بالقوة. - هذه الأمرة ترسل إشارة
SIGSTOP
إلى العملية بPID 1234، وتوقفها.
هذه الأمرة ترسل الإشارة الافتراضية SIGTERM
إلى جميع العمليات التي يمتلكها المستخدم المحدد.
توضح هذه الأمثلة طرقًا متنوعة لاستخدام الأمر kill
لإدارة العمليات في بيئة لينكس.
إليك المعلومات حول خيارات الأمر kill والإشارات في شكل جدولي: يلخص هذا الجدول أكثر خيارات الأمر kill شيوعًا والإشارات المستخدمة في لينكس لإدارة العمليات. |
الأمر / الخيار | الإشارة |
الوصف | kill <pid> |
SIGTERM |
يطلب من العملية إنهاء نفسها بشكل لطيف (الإشارة الافتراضية). | kill -9 <pid> |
SIGKILL |
يجبر العملية على التوقف فورًا دون تنظيف. | kill -SIGKILL <pid> |
SIGKILL |
يجبر العملية على التوقف فورًا دون تنظيف. | kill -15 <pid> |
SIGTERM |
يرسل بشكل صريح إشارة SIGTERM لطلب الإنهاء اللطيف. |
kill -SIGTERM <pid> |
SIGTERM |
يرسل بشكل صريح إشارة SIGTERM لطلب الإنهاء اللطيف. |
kill -1 <pid> |
SIGHUP |
تقليديًا تعني “الإغلاق المفاجئ”؛ يمكن استخدامها لإعادة تحميل ملفات التكوين. | kill -SIGHUP <pid> |
SIGHUP |
تعني “انهاء الاتصال”; يمكن استخدامه لتحميل مجدد ملفات الاعدادات. | kill -2 <pid> |
SIGINT |
تمني المعاملة بالانهاء (تشابه ضغط Ctrl+C في الترميل). |
kill -SIGINT <pid> |
SIGINT |
تمني المعاملة بالانهاء (تشابه ضغط Ctrl+C في الترميل). |
kill -3 <pid> |
SIGQUIT |
يسبب المعاملة بالانهاء وتوليد تسجيل قلب للتحقيق. | kill -SIGQUIT <pid> |
SIGQUIT |
يسبب المعاملة بالانهاء وتوليد تسجيل قلب للتحقيق. | kill -19 <pid> |
SIGSTOP |
يوقف المعاملة. | kill -SIGSTOP <pid> |
SIGSTOP |
يوقف المعاملة. | kill -18 <pid> |
SIGCONT |
يحافظ على المعاملة الموقفة. | kill -SIGCONT <pid> |
SIGCONT |
يحافظ على المعاملة الموقفة. | killall <name> |
تختلف |
يرسل اشارة لجميع المعاملات ذات الاسم المعطا. | killall -9 <name> |
SIGKILL |
يقتل جميع العمليات التي تحمل الاسم المحدد. | pkill <نموذج> |
تختلف |
يرسل إشارة للعمليات بناءً على تطابق النموذج. | pkill -9 <نموذج> |
SIGKILL |
يقتل بالقوة جميع العمليات التي تطابق النموذج. | xkill |
SIGKILL |
أداة رسومية تسمح بالنقر فوق نافذة لقتل العملية المقابلة.
8.5. البثوت القياسي للإدخال والإخراج في لينكس
- قراءة الإدخال وكتابة الإخراج هي جزء أساسي من فهم السطر الأوامر وتشفير الصدفة. في لينكس، لكل عملية ثلاث بثوتات قياسية:
- المعرف لـ
stdin
هو0
. - الخرج القياسي (
stdout
): هذه السلسلة الافتراضية للخرج حيث يكتب العملية خرجها. بشكل افتراضي، الخرج القياسي هو المحطة. يمكن أيضًا إعادة توجيه الخرج إلى ملف أو برنامج آخر. موصل ملف لـstdout
هو1
.
الخرج الخاطئ القياسي (stderr
): هذه السلسلة الافتراضية للخرج الخاطئ حيث يكتب العملية رسائل الخطأ. بشكل افتراضي، الخرج الخاطئ القياسي هو المحطة، مما يسمح برؤية رسائل الخطأ حتى لو تم إعادة توجيه stdout
. موصل ملف لـstderr
هو 2
.
إعادة التوجيه والأنابيب
إعادة التوجيه: يمكنك إعادة توجيه سلسلتي الخرج والخطأ إلى ملفات أو أوامر أخرى. على سبيل المثال:
ls > output.txt
# إعادة توجيه stdout إلى ملف
ls non_existent_directory 2> error.txt
# إعادة توجيه stderr إلى ملف
ls non_existent_directory > all_output.txt 2>&1
# إعادة توجيه stdout و stderr إلى ملف واحد
- في الأمر الأخير،
ls non_existent_directory
: يعرض محتويات دليل يسمى non_existent_directory. نظرًا لأن هذا الدليل غير موجود، فإنls
سيولد رسالة خطأ.> all_output.txt
: يقوم المشغل>
بإعادة توجيه المخرج القياسي (stdout
) لأمرls
إلى الملفall_output.txt
. إذا لم يكن الملف موجودًا، فسيتم إنشاؤه. إذا كان موجودًا، فسيتم الكتابة فوق محتوياته.
2>&1:
: هنا، 2
يمثل معرف الملف للخطأ القياسي (stderr
). &1
يمثل معرف الملف للمخرج القياسي (stdout
). تُستخدم الشخصية &
لتحديد أن 1
ليس اسم الملف بل معرف ملف.
تم ترجمة النص إلى اللغة العربية وإبقاء الحدود الخاصة بك بدون تغيير:
إذا، 2>&1
يعني “إعادة توجيه stderr (2) إلى أينما stdout (1) يذهب حالياً،” وهو في هذه الحالة ملف all_output.txt
. لذلك، سيكتب كل الإخراج (إذا كان هناك) ورسالة الخطأ من ls
إلى all_output.txt
.
أنابيب:
ls | grep image
يمكنك استخدام الأنابيب (|
) لتمرير إخراج أمر واحد كإدخال لأمر آخر:
image-10.png
image-11.png
image-12.png
image-13.png
... Output truncated ...
# الإخراج
8.6 التشغيل التلقائي في لينكس – قم بتشغيل المهام بواسطة مهام كرون
كرون هو أداة قوية لجدولة المهام التي تتوفر في نظم تشغيل مماثلة لأنظمة أوكس. من خلال تكوين كرون، يمكنك إعداد مهام تلقائية للجراء على أساس يومي، أسبوعي، شهري، أو بموعد محدد آخر. قدرات التشغيل التلقائي التي توفرها كرون تلعب دوراً رئيسياً في إدارة نظم لينكس.
يمكن الخادم crond
(نوع من برامج الكمبيوتر التي تعمل في الخلفية) تمكين وظائف كرون. يقرأ كرون crontab (أجداول كرون) لتشغيل السكربتات المحددة مسبقاً.
باستخدام تركيبة محددة، يمكنك تكوين مهمة كرون لجدولة السكربتات أو الأوامر الأخرى للتشغيل تلقائياً.
ما هي مهام كرون في لينكس؟
أي مهمة تخطط لها من خلال كرونس تسمى مهمة كرون.
الآن، دعونا نرى كيفية عمل مهام كرون.
كيفية التحكم في الوصول إلى كرونس
لإستخدام مهام كرون، يحتاج المدير إلى السماح بإضافة مهام كرون للمستخدمين في ملف /etc/cron.allow
.
إذا أتيت بتنبيه كهذا، يعني أنك لا تملك الإذن لاستخدام cron.
لإذن جون لاستخدام crons، أضف اسمه في /etc/cron.allow
. قم بإنشاء الملف إذا لم يكن موجودًا. هذا سيسمح لجون بإنشاء وتحرير وظائف cron.
يمكن أيضًا منع الأعضاء من الوصول إلى وظائف cron عن طريق إدخال أسماءهم في الملف /etc/cron.d/cron.deny
.
كيفية إضافة وظائف cron في Linux
أولاً، لاستخدام وظائف cron، ستحتاج إلى التحقق من حالة خدمة cron. إذا لم يكن cron مثبتًا، يمكنك تحميله بكل سهولة من خلال مدير البيانات. فقط استخدم هذا للتحقق:
sudo systemctl status cron.service
# تحقق من خدمة cron على نظام Linux
بنية جملة cron
- تستخدم crontabs الإشارات التالية لإضافة وإدراج وظائف cron:
crontab -e
: يحرر إدخالات crontab لإضافة، حذف أو تحرير وظائف cron.crontab -l
: يعرض جميع وظائف cron للمستخدم الحالي.crontab -u اسم المستخدم -l
: يعرض وظائف cron لمستخدم آخر.
crontab -u اسم المستخدم -e
: يحرر وظائف cron لمستخدم آخر.
عندما تقوم بإدراج crons وهي موجودة، سترى شيئا مثل هذا:
* * * * * sh /path/to/script.sh
مثال عمل cron
- في المثال أعلاه،
* يمثل الدقائق والساعات والأيام والشهور وأيام الأسبوع، على التوالي. انظر التفاصيل لهذه القيم بالأسفل: |
قيمة | |
وصف | الدقائق | 0-59 |
ستنفذ الأمر في الدقيقة المحددة. | الساعات | 0-23 |
ستنفذ الأمر في الساعة المحددة. | الأيام | 1-31 |
ستنفذ الأوامر في تلك الأيام من الشهر. | الشهور | 1-12 |
الشهر الذي يتم فيه تنفيذ المهمات. | أيام الأسبوع | 0-6 |
- أيام الأسبوع التي سيشتغل فيها الأوامر. هنا، 0 يمثل الأحد.
sh
يمثل أن السكربت هو سكربت bash ويجب أن يتم تشغيله من/bin/bash
.
/path/to/script.sh
يحدد مسار السكربت.
* * * * * sh /path/to/script/script.sh
| | | | | |
| | | | | Command or Script to Execute
| | | | |
| | | | |
| | | | |
| | | | Day of the Week(0-6)
| | | |
| | | Month of the Year(1-12)
| | |
| | Day of the Month(1-31)
| |
| Hour(0-23)
|
Min(0-59)
أسفلها هي ملخص لتركيبة عمل cron:
مثالات عمل cron
أسفلها بعض المثالات لتخطيط عمل cron. | الجدول الزمني |
قيمة الجدول الزمني | 5 0 * 8 * |
في 00:05 في أغسطس. | 5 4 * * 6 |
في 04:05 في السبت. | 0 22 * * 1-5 |
في 22:00 في كل يوم من الثلاثاء إلى الخميس.
لا بأس إذا كنت غير قادر على تقنيع هذا في الوقت الآن. يمكنك ممارسة وتوليد جداول الكرون مع موقع crontab guru.
كيفية ترتيب مهمة كرون
- في هذا المقطع سننظر في مثال لكيفية ترتيب سكرIPT بواسطة مهمة كرون.
#!/bin/bash
echo `date` >> date-out.txt
قم بإنشاء سكرIPT يدعى date-script.sh
الذي ينشر التاريخ والوقت النظامي ويضمنه إلى ملف. يظهر السكرIPT أدناه:
chmod 775 date-script.sh
2. قم بجعل السكرIPT قابلًا للتنفيذ بتعطيل أولوياته.
3. أضف السكرIPT في الجداول الكرونية باستخدام crontab -e
.
*/1 * * * * /bin/sh /root/date-script.sh
هنا، قمنا بتنظيمه للقيام به كل دقيقة.
cat date-out.txt
4. تفقد خريطة ملف date-out.txt
. وفقًا للسكرIPT، يجب أن ينشر التاريخ النظامي إلى هذا الملف كل دقيقة.
Wed 26 Jun 16:59:33 PKT 2024
Wed 26 Jun 17:00:01 PKT 2024
Wed 26 Jun 17:01:01 PKT 2024
Wed 26 Jun 17:02:01 PKT 2024
Wed 26 Jun 17:03:01 PKT 2024
Wed 26 Jun 17:04:01 PKT 2024
Wed 26 Jun 17:05:01 PKT 2024
Wed 26 Jun 17:06:01 PKT 2024
Wed 26 Jun 17:07:01 PKT 2024
# خريطة
كيفية تحليل الأعطال للكرون
الكرون مفيد جدًا ولكنه قد لا يعمل كما يتوجب دائمًا. لحسن الحظ، يوجد بعض الطرق المؤثرة التي يمكنك استخدامها لتحليلها.
1. تحقيق بجدول التواني.
أولًا يمكنك محاولة تحقيق جدول التواني المضمن للكرون. يمكنك فعل ذلك بالنمط الذي رأ
2. إطلع على سجلات cron.
أولاً، عليك مراجعة ما إذا كان cron يعمل في الوقت المناسب أم لا. في أوبونتو، يمكنك التحقق من هذا من سجلات cron الموجودة في /var/log/syslog
.
إذا وجدت إدخالًا في هذه السجلات في الوقت الصحيح، فذلك يعني أن cron يعمل وفقاً للجدول الزمني الذي قمت بضبطه.
1 Jun 26 17:02:01 zaira-ThinkPad CRON[27834]: (zaira) CMD (/bin/sh /home/zaira/date-script.sh)
2 Jun 26 17:02:02 zaira-ThinkPad systemd[2094]: Started Tracker metadata extractor.
3 Jun 26 17:03:01 zaira-ThinkPad CRON[28255]: (zaira) CMD (/bin/sh /home/zaira/date-script.sh)
4 Jun 26 17:03:02 zaira-ThinkPad systemd[2094]: Started Tracker metadata extractor.
5 Jun 26 17:04:01 zaira-ThinkPad CRON[28538]: (zaira) CMD (/bin/sh /home/zaira/date-script.sh)
أدناه سجلات وظيفة cron النموذجية. تحقق من العمود الأول الذي يظهر الوقت. يذكر المسار النصي في نهاية السطر أيضًا. السطر #1 و #3 و #5 يظهر أن النصي يعمل كما هو موضوع الأمر.
3. أوجه الخرج من cron إلى ملف.
يمكنك إعادة توجيه خرج cron إلى ملف ومراجعة الفهرس لأي أخطاء محتملة.
* * * * * sh /path/to/script.sh &> log_file.log
# إعادة توجيه خرج cron إلى ملف
8.7. مبادئ الشبكات في لينكس
لينكس يقدم عددًا من الأوامر لرؤية معلومات متعلقة بالشبكة. سنتحدث بإختصار في هذا الفصل عن بعض الأوامر.
ألق نظرة على واجهات الشبكة بواسطة ifconfig
ifconfig
يعطي الأمر ifconfig
معلومات عن واجهات الشبكة. إليك مثال للخرج:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::a00:27ff:fe4e:66a1 prefixlen 64 scopeid 0x20<link>
ether 08:00:27:4e:66:a1 txqueuelen 1000 (Ethernet)
RX packets 1024 bytes 654321 (654.3 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 512 bytes 123456 (123.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 256 bytes 20480 (20.4 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 256 bytes 20480 (20.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# الخرج
خرج الأمر ifconfig
يظهر واجهات الشبكة المهيأة على النظام، بما في ذلك التفاصيل مثل العناوين IP، وعناوين MAC، وإحصائيات البيكيتات، وأكثر من ذلك.
هذه الواجهات يمكن أن تكون أجهزة مادية أو إفتراضية.
لاستخراج عناوين IPv4 وIPv6، يمكنك استخدام ip -4 addr
و ip -6 addr
، على التوالي.
تعرف على نشاط الشبكة معnetstat
الأمر netstat
يظهر نشاط الشبكة والإحصاءات عن طريق تقديم المعلومات التالية:
- إليك بعض الأمثلة عن استخدام أمر
netstat
في الخط السلكي: - عرض جميع الأسكوتب المستمعة وغير المستمعة:
- عرض فقط الأنقاب المستمعة:
- عرض الإحصاءات الشبكية:
- عرض جدول التوجيه:
- عرض اتصالات TCP:
- عرض اتصالات UDP:
- عرض واجهات الشبكة:
- عرض معرف العملية وأسماء البرامج للاتصالات:
- عرض الإحصائيات لبروتوكول محدد (مثل TCP):
أظهر المعلومات الموسعة:
افحص قابلية الاتصال بالشبكة بين جهازين باستخدام ping
ping google.com
ping
يستخدم لاختبار قابلية الاتصال بين جهازين. يرسل حزمات ICMP إلى الجهاز الهدف ويرايق الرد.
ping google.com
PING google.com (142.250.181.46) 56(84) bytes of data.
64 bytes from fjr04s06-in-f14.1e100.net (142.250.181.46): icmp_seq=1 ttl=60 time=78.3 ms
64 bytes from fjr04s06-in-f14.1e100.net (142.250.181.46): icmp_seq=2 ttl=60 time=141 ms
64 bytes from fjr04s06-in-f14.1e100.net (142.250.181.46): icmp_seq=3 ttl=60 time=205 ms
64 bytes from fjr04s06-in-f14.1e100.net (142.250.181.46): icmp_seq=4 ttl=60 time=100 ms
^C
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3001ms
rtt min/avg/max/mdev = 78.308/131.053/204.783/48.152 ms
ping
يختبر إذا كان لديك ردّاً يعود بدون حدوث وقت انتهاء.
— google.com ping إحصائيات —
يمكنك إيقاف الردّ بواسطة Ctrl + C
.
اختبار النقاط النهائية باستخدام الأمر curl
- أمر
curl
يمثل “عنوان URL للعميل”. يستخدم لنقل البيانات إلى أو من الخادم. يمكن أيضاً استخدامه لاختبار نقاط الوصول للAPI التي تساعد في إصلاح الأخطاء في النظام والتطبيق.
curl http://www.official-joke-api.appspot.com/random_joke
{"type":"general",
"setup":"What did the fish say when it hit the wall?","punchline":"Dam.","id":1}
- كمثال، يمكنك أن تستخدم
http://www.official-joke-api.appspot.com/
لتجربة الأمرcurl
.
curl -o random_joke.json http://www.official-joke-api.appspot.com/random_joke
الأمر curl
بدون أي خيارات يستخدم طريقة GET بشكل افتراضي.
curl -o
يحفظ الناتج في الملف المذكور.
curl -I http://www.official-joke-api.appspot.com/random_joke
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Vary: Accept-Encoding
X-Powered-By: Express
Access-Control-Allow-Origin: *
ETag: W/"71-NaOSpKuq8ChoxdHD24M0lrA+JXA"
X-Cloud-Trace-Context: 2653a86b36b8b131df37716f8b2dd44f
Content-Length: 113
Date: Thu, 06 Jun 2024 10:11:50 GMT
Server: Google Frontend
# حفظ الناتج في random_joke.json
curl -I
يجلب فقط الرؤوس.
8.8. تحليل مشاكل الLinux: أدوات وتقنيات
تقرير النشاط النظامي بواسطة sar
يعتبر أمر الsar
في Linux أداة قوية لجمع معلومات تقارير وتخزين النشاط النظامي. إنه جزء من مجموعة sysstat
ويستخدم بشكل واسع لمراقبة أداء النظام عبر الوقت.
لإستخدام sar
يتوجب عليك أولاً تنصيب sysstat
باستخدام sudo apt install sysstat
.
بمجرد التنصيب، بدء الخدمة باستخدام sudo systemctl start sysstat
.
تفقد حالة الخدمة باستخدام sudo systemctl status sysstat
.
sar [options] [interval] [count]
بمجرد أن يكون الحالة نشطة، ستبدأ النظام في جمع أدارات مختلفة التي يمكنك استخدامها للوصول إلى وتحليل البيانات التاريخية. سنرى ذلك بصورة تفصيلية قريبًا.
sar -u 1 3
ترميز أمر الsar
هو ما يلي:
Linux 6.5.0-28-generic (zaira-ThinkPad) 04/06/24 _x86_64_ (12 CPU)
19:09:26 CPU %user %nice %system %iowait %steal %idle
19:09:27 all 3.78 0.00 2.18 0.08 0.00 93.96
19:09:28 all 4.02 0.00 2.01 0.08 0.00 93.89
19:09:29 all 6.89 0.00 2.10 0.00 0.00 91.01
Average: all 4.89 0.00 2.10 0.06 0.00 92.95
على سبيل المثال، sar -u 1 3
سيعرض إحصاءات استخدام الCPU كل ثانية لمدة ثلاث مرات.
# المخرج
هذه بعض حالات الاستخدام الشائعة وأمثلة على كيفية استخدام أمر الsar
.
sar
يمكن استخدامه لأغراض متعددة:
sar -r 1 3
Linux 6.5.0-28-generic (zaira-ThinkPad) 04/06/24 _x86_64_ (12 CPU)
19:10:46 kbmemfree kbavail kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
19:10:47 4600104 8934352 5502124 36.32 375844 4158352 15532012 65.99 6830564 2481260 264
19:10:48 4644668 8978940 5450252 35.98 375852 4165648 15549184 66.06 6776388 2481284 36
19:10:49 4646548 8980860 5448328 35.97 375860 4165648 15549224 66.06 6774368 2481292 116
Average: 4630440 8964717 5466901 36.09 375852 4163216 15543473 66.04 6793773 2481279 139
1. استخدام الذاكرة
لتفقد استخدام الذاكرة (الخالية والمستخدمة)، استخدم:
هذا الأمر يعرض إحصاءات الذاكرة كل ثانية ثلاث مرات.
sar -S 1 3
sar -S 1 3
Linux 6.5.0-28-generic (zaira-ThinkPad) 04/06/24 _x86_64_ (12 CPU)
19:11:20 kbswpfree kbswpused %swpused kbswpcad %swpcad
19:11:21 8388604 0 0.00 0 0.00
19:11:22 8388604 0 0.00 0 0.00
19:11:23 8388604 0 0.00 0 0.00
Average: 8388604 0 0.00 0 0.00
2. استخدام المساحة المتبقَّة
لمعرفة
هذا الأمر يساعد في رصد استخدام المشارك، وهو أهم للأنظمة التي تعمل بناءً على الذاكرة الفيزيائية.
sar -d 1 3
3. تحميل الأجهزة الأ/إ
لتقديم النشاط للأجهزة الأ/إ والقسمات المنقسمة لها:
هذا الأمر يوفر إحصاءات تفصيلية عن تحميل البيانات إلى ومن أجهزة الأ/إ، وهو مفيد للتشخيص من قنوب الأدخال/خروج الأ/إ.
sar -n DEV 1 3
5. إحصاءات الشبكة
sar -n DEV 1 3
Linux 6.5.0-28-generic (zaira-ThinkPad) 04/06/24 _x86_64_ (12 CPU)
19:12:47 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
19:12:48 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
19:12:48 enp2s0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
19:12:48 wlp3s0 10.00 3.00 1.83 0.37 0.00 0.00 0.00 0.00
19:12:48 br-5129d04f972f 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
.
.
.
Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: enp2s0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
...output truncated...
لرؤية إحصاءات الشبكة، مثل عدد البيانات التي تتلقاء (تمت الإرسال) من واجهة الشبكة:
# -n DEV يخبر الأمر sar بتقديم واجهات أجهزة الشبكة التعلمية
هذا يعرض إحصاءات الشبكة كل ثانية لمدة ثلاث ثواني، مما يساعد في رصد ترددات الشبكة.
- 6. البيانات التاريخية
- # هي “true” و “false”. من فضلك لا تضع قيم أخرى، ستتم
- تكوين فترة جمع البيانات: حرر تكوين وظيفة cron لتعيين فترة جمع البيانات.
sar -u -f /var/log/sysstat/sa04
Linux 6.5.0-28-generic (zaira-ThinkPad) 04/06/24 _x86_64_ (12 CPU)
15:20:49 LINUX RESTART (12 CPU)
16:13:30 LINUX RESTART (12 CPU)
18:16:00 CPU %user %nice %system %iowait %steal %idle
18:16:01 all 0.25 0.00 0.67 0.08 0.00 99.00
Average: all 0.25 0.00 0.67 0.08 0.00 99.00
أ替رجى بتعويض <DD>
باليوم الذي تريد مشاهدة البيانات له.
في الأمر التالى ، /var/log/sysstat/sa04
يعطي الإحصاءات ليوم الرابع من شهر الحالي.
sar -I SUM 1 3
7. الإعتمادات التي يتم إلتقاطها الآن من أجهزة المعالج
Linux 6.5.0-28-generic (zaira-ThinkPad) 04/06/24 _x86_64_ (12 CPU)
19:14:22 INTR intr/s
19:14:23 sum 5784.00
19:14:24 sum 5694.00
19:14:25 sum 5795.00
Average: sum 5757.67
لمشاهدة الإعتمادات التي يتم إلتقاطها بالثانية من قبل المعالج ، قم باستخدام هذا الأمر:
# خريطة الخارج
هذا الأمر يساعد في مراقبة مدى مناسبة تنظيم الأجهزة المعالجة للإعتمادات وهو مهم للتنسيق المؤثر للأداء ال
هذه الأمثلة توضح كيف يمكنك استخدام sar
لمراقبة مختلف جوانب أداء النظام. استخدام sar
بانتظام يمكن أن يساعد في تحديد العقبات النظامية والتأكد من تسريع تشغيل التطبيقات بشكل فعال.
8.9. استراتيجية إصلاح الأخطاء العامة للخوادم
لماذا نحتاج لفهم المراقبة؟
المراقبة النظامية هي جزء مهم من إدارة النظم. الأنواع التطبيقية الحرجة تتطلب مستوى عالٍ من الاستجابة للتدابير للوقاية من الفشل وخفض تأثير الإنقطاع.
توفر لينكس أدوات قوية لتقييم صحة النظام. في هذا الفصل، ستتعلم عن الطرق المختلفة المتاحة لتحقيق صحة نظامك وتحديد العقبات.
[user@host ~]$ uptime 19:15:00 up 1:04, 0 users, load average: 2.92, 4.48, 5.20
البحث عن متوسط الحمل وزمن التشغيل للنظام
قد يحدث إعادة تشغيل الآلة وقد تؤدي إلى تعطيل بعض التكوينات. لمعرفة كم ساعة تم تشغيل الآلة، استخدم الأمر: uptime
. وبالإضافة للزمن التشغيل، يعرض الأمر أيضًا متوسط الحمل.
متوسط الحمل هو حمل النظام على الأخيرة 1، 5 و 15 دقيقة. النظرة السريعة تشير إلى ما إذا كان الحمل النظامي يزداد أو ينخفض على مدى الوقت.
ملاحظة: الكمبيوتر المثالي للطابور هو 0
. هذا ممكن فقط عندما لا يوجد طوابير في انتظار المعالج.
lscpu
يمكن حساب متوسط الحمل لكل معالج بتقسيم متوسط الحمل على عدد المعالجات المتاحة بشكل جملة.
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Address sizes: 48 bits physical, 48 bits virtual
Byte Order: Little Endian
CPU(s): 12
On-line CPU(s) list: 0-11
.
.
.
output omitted
لإيجاد عدد المعالجات، استخدم الأمر lscpu.
# الناتج
إذا كان معدل التحميل يزداد ولا يخفق، فإن المعالجات مستهدفة. هناك بعض العمليات التي تتوقف أو هناك تسرب في الذاكرة.
free -mh
حساب الذاكرة المتاحة
total used free shared buff/cache available
Mem: 14Gi 3.5Gi 7.7Gi 109Mi 3.2Gi 10Gi
Swap: 8.0Gi 0B 8.0Gi
في بعض الأحيان، قد يكون إستخدام الذاكرة العالي مسبب المشاكل. لتفقد الذاكرة المتاحة والذاكرة في استعمال، يمكنك استخدام أمر free
.
# خاتم
حساب المساحة القائمة على القرص
df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 1.5G 2.4M 1.5G 1% /run
/dev/nvme0n1p2 103G 34G 65G 35% /
tmpfs 7.3G 42M 7.2G 1% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
efivarfs 246K 93K 149K 39% /sys/firmware/efi/efivars
/dev/nvme0n1p3 130G 47G 77G 39% /home
/dev/nvme0n1p1 511M 6.1M 505M 2% /boot/efi
tmpfs 1.5G 140K 1.5G 1% /run/user/1000
لتأكد من صحة النظام، لا تنسى المساحة القائمة على القرص. لتقارير جميع النقاط الموجودة ونسبة استخدامها بالمقارنة، يمكنك استخدام الأمر التالي. بما يرام، لا يجب أن تتجاوز مساحة القرص 80% من الاستخدام.
أمر df
يوفر معلومات تفصيلية عن مساحة القرص.
تحديد أوضاع العمليات
[user@host ~]$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
runner 1 0.1 0.0 1535464 15576 ? S 19:18 0:00 /inject/init
runner 14 0.0 0.0 21484 3836 pts/0 S 19:21 0:00 bash --norc
runner 22 0.0 0.0 37380 3176 pts/0 R+ 19:23 0:00 ps aux
يمكنك مراقبة أوضاع العمليات لرؤية أي عملية تتوقف مع استخدام كبير للذاكرة أو المعالج.
رأينا من قبل أن أمر ps
يعطي معلومات ذات فائدة عن العملية. أنظر إلى الأعمدة CPU
و MEM
.
مراقبة النظام في الوقت الحقيقي
مراقبة النظام في الوقت الحقيقي تمكنك من رؤية حالة النظام الحقيقية.
أداة واحدة يمكنك استخدامها لذلك هي top
الأمر.
أمر top
يعرض نظرة ديناميكية على عمليات النظام، مع عرض بروتوكول سريع بعده قائمة بالعمليات أو
تستطيع أن ترى تفاصيل منظمة بشكل جيد في نافذة متكاملة باستخدام top
. هناك عدد من الأعلام، والاختصارات، وأساليب التحديد التي تأتي مع top
.
يمكنك أيضًا قتل العمليات باستخدام top
. لذلك، اضغط على k
ومن ثم أدخل رقم العملية.
تفسير السجلات
تحمل سجلات النظام والتطبيق الكثير من المعلومات عن ما يمر به النظام. تحتوي على معلومات مفيدة ورموز الأخطاء التي تشير إلى الأخطاء. إذا بحثت عن رموز الأخطاء في السجلات، يمكن تقليل وقت الاكتشاف والتصحيح بشكل كبير.
تحليل منافذ الشبكة
لا ينبغي تجاهل جانب الشبكة لأن الأخطاء في الشبكة متوفرة وقد تؤثر على النظام وتدفقات المرور.
للاكتشاف تلك الأشياء، يجب أن نفهم حالات المنافذ. | بعض حالات المنافذ مشرحة بإختصار هنا: |
الحالة | الوصف |
LISTEN | تمثل المنافذ التي تنتظر طلب اتصال من أي TCP البعيد أو المنفذ. |
ESTABLISHED | تمثل الاتصالات التي تكون مفتوحة ويمكن توصيل البيانات المستلمة إلى الوجهة. |
TIME WAIT | تمثل الوقت الذي ينتظر لضمان تأكيد طلب إنهاء الاتصال. |
FIN WAIT2
تمثل الانتظار لطلب إنهاء الاتصال من TCP البعيد.
[user@host ~]$ /sbin/sysctl net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 15000 65000
تحليل معلومات المنافذ في لينكس
مداي المنافذ: يُعرف مداي المنافذ في النظام، ويمكن تحسين/تناقصها وفقاً لذلك. في العينة السّابقة، يتراوح المدى من 15000
إلى 65000
، مما يمنحنا إجمالياً 50000
منافذ متاحة (65000 – 15000). إذا تم إستخدام جميع هذه المنافذ أو تتجاوز الحد، فهناك قضية.
الخطأ الذي يُبلّغ عنه في السجلات في هذه الحالات يمكن أن يكون فشل في الربط بالمنفذ
أو الكثير جداً من الاتصالات
.
تحديد فقدان الباكت
في مراقبة النظام، نحتاج إلى ضمان أن الاتّصالات الواردة والخارجة مستقرة.
[user@host ~]$ ping 10.13.6.113
PING 10.13.6.141 (10.13.6.141) 56(84) bytes of data.
64 bytes from 10.13.6.113: icmp_seq=1 ttl=128 time=0.652 ms
64 bytes from 10.13.6.113: icmp_seq=2 ttl=128 time=0.593 ms
64 bytes from 10.13.6.113: icmp_seq=3 ttl=128 time=0.478 ms
64 bytes from 10.13.6.113: icmp_seq=4 ttl=128 time=0.384 ms
64 bytes from 10.13.6.113: icmp_seq=5 ttl=128 time=0.432 ms
64 bytes from 10.13.6.113: icmp_seq=6 ttl=128 time=0.747 ms
64 bytes from 10.13.6.113: icmp_seq=7 ttl=128 time=0.379 ms
^C
--- 10.13.6.113 ping statistics ---
7 packets transmitted, 7 received,0% packet loss, time 6001ms
rtt min/avg/max/mdev = 0.379/0.523/0.747/0.134 ms
أحد الأوامر المفيدة هو ping
. يؤثر ping
على النظام الوجهة ويجلب الردّ اليه.لاحظ السطور الأخيرة من الإحصائيات التي تظهر نسبة فقدان الباكت والوقت.
# ping عنوان IP الوجهة
يمكن أيضًا التقاط الباكت في وقت التشغيل باستخدام tcpdump
. سننظر في ذلك لاحقًا.
جمع الإحصائيات للتحقيق بعد الحادث
- إنه من العادة الجيدة جمع بعض الإحصائيات التي ستكون مفيدة لتحديد السبب الجذري لاحقًا. عادةً بعد إعادة تشغيل النظام أو خدماتنا نفقد الصورة السابقة للنظام والسجلات.
أدناه بعض الطرق لتقاط لقطة للنظام.
- نسخ السجلات
قبل إجراء أي تغييرات، أنسخ ملفات السجل إلى موقع آخر. هذا أمر حاسم لفهم حالة النظام أثناء وقت الخلل. في بعض الأحيان، تعتبر ملفات السجل الوحدة الوحيدة للنظر إلى حالات النظام السابقة لأن بعض إحصائيات الزمن التنفيذي قد تم فقدها.
sudo tcpdump -i any -w
TCP Dump
Tcpdump هو أداة السطر الأوامر التي تسمح لك بالتقاط وتحليل الحركة الإنتقالية الواردة والصادرة. وهي تستخدم في الغالب لمساعدة في إصلاح الأخطاء الشبكية. إذا شعرت بأن حركة النظام تتأثر، قم بأخذ tcpdump
كما يلي:
# حيث،
# -i any يلتقط الحركة من جميع الواجهات
# -w يحدد اسم الملف الناتج
# أوقف الأمر بعد بضع دقائق لأن حجم الملف قد يزداد
# استخدم توسيط الملف بالإمتداد .pcap
بمجرد أخذ tcpdump
، يمكنك استخدام أدوات كما Wireshark للتحليل البصري للحركة.
الختام
شكراً لك على قراءة الكتاب إلى النهاية. إذا وجدته مفيداً، فكر في مشاركته مع الآخرين.
ولكن الكتاب لا ينتهي هنا. سأستمر في تحسينه وإضافة مواد جديدة في المستقبل. إذا وجدت أي مشاكل أو إذا كنت تود إقتراح تحسينات، لا تتردد في فتح PR/ Issue.
- ابق على اتصال وواصل مسيرتك التعلمية!
LinkedIn: أشارك المقالات والمنشورات التقنية هناك. اترك توصية على لينكد إن وصادقني على المهارات ذات الصلة.
.
احصل على الوصول إلى المحتوى الحصري: للحصول على المساعدة الشخصية والمحتوى الحصري، إذهب هنا.
احصل على الوصول إلى المحتوى الحصري: للحصول على المساعدة الشخصية والمحتوى الحصري، إذهب هنا.
Source:
https://www.freecodecamp.org/news/learn-linux-for-beginners-book-basic-to-advanced/