أساسيات سطر الأوامر في Linux
خروج

الدرس 1 من 18 · المستخدم

الطرفية والصدفة (shell) والمحثّ (prompt)

20 د Rocky Linux 9

الهدف

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

أهم النقاط

  • الطرفية (terminal) هي النافذة؛ والصدفة (shell) هي البرنامج الذي يقرأ أوامرك (في Linux، هي في الغالب bash).
  • المحثّ (prompt) يخبرك من أنت، وعلى أي جهاز، وفي أي مجلد. وينتهي بـ $ (مستخدم عادي) أو # (root، أي المدير).
  • يُكتب الأمر هكذا: commande options arguments، مع فصلها بمسافات.
  • Linux يميّز بين الحروف الكبيرة والصغيرة: ls يعمل، وLS غير موجود.
  • مفتاح Tab يُكمل الأسماء، والسهم إلى الأعلى يستدعي الأوامر السابقة، وCtrl+C يوقف أمرًا.

1. الطرفية، الكونسول، الصدفة: ثلاث كلمات لثلاثة أشياء

تخيّل صندوق أداء في متجر كبير:

  • شاشة الصندوق ولوحة مفاتيحه هي الطرفية: تعرض ما تكتبه وتستقبله؛
  • أمينة الصندوق التي تفهم «خبزتان ولتر من الحليب» هي الصدفة: تفسّر طلبك؛
  • المستودع الذي يوفّر المنتجات هو نواة Linux (kernel): هي التي تقوم بالعمل الحقيقي (قراءة القرص، تشغيل البرامج).

على الخادم (server)، لا توجد غالبًا أي واجهة رسومية. تتصل به عن بُعد (بواسطة ssh، الذي سنراه لاحقًا) فتجد نفسك مباشرة داخل صدفة. لهذا السبب يُعدّ سطر الأوامر المهارة الأساسية للمدير.

توجد عدة صدفات: sh (الصدفة التاريخية، الموحّدة بمعيار POSIX)، وbash (الأكثر انتشارًا في Linux)، وzsh (الافتراضية في macOS)، وdash (نسخة sh خفيفة جدًا تستعملها Debian وUbuntu لسكربتات النظام). في هذه الدورة نستعمل bash: فهي موجودة في Red Hat وDebian وUbuntu.

echo $SHELL        # صدفة الدخول الخاصة بحسابك، مثلًا /bin/bash
echo $0            # الصدفة التي تعمل الآن، مثلًا -bash أو bash
cat /etc/shells    # قائمة الصدفات المثبّتة على الجهاز

2. قراءة المحثّ

عندما تنتظر الصدفة أمرًا، تعرض محثًّا. في أغلب التوزيعات، يبدو هكذا:

[karim@srv-boutique ~]$          ← Rocky / RHEL
karim@srv-boutique:~$            ← Debian / Ubuntu
root@srv-boutique:/etc#          ← root، داخل المجلد /etc

لنفكّكه:

الجزء المعنى
karim المستخدم المتصل
srv-boutique اسم الجهاز (hostname)
~ المجلد الحالي؛ و~ تعني «مجلدي الشخصي»
$ أنت مستخدم عادي
# أنت root: كل شيء مسموح، فاحذر!

في الوثائق (وفي هذه الدورة)، السطر الذي يبدأ بـ $ يُكتب بصفة مستخدم عادي، والسطر الذي يبدأ بـ # يُكتب بصفة root. لا تنسخ الرمز $ أو # نفسه.

يُضبط شكل المحثّ بواسطة المتغيّر PS1. يمكنك الاطلاع عليه دون تعديله:

echo "$PS1"        # مثلًا: [\u@\h \W]\$   (\u = المستخدم، \h = الجهاز، \W = المجلد)

3. أوامرك الأولى

هذه الأوامر لا تغيّر شيئًا: يمكنك كتابتها دون خوف.

whoami             # من أنا؟  → karim
hostname           # على أي جهاز؟  → srv-boutique
date               # التاريخ والساعة
uptime             # منذ متى يعمل الجهاز، ومقدار حمله
uname -r           # إصدار نواة Linux
cal                # تقويم صغير (ليس مثبّتًا دائمًا)
clear              # يمسح الشاشة (أو Ctrl+L)

4. بنية الأمر

يتكوّن الأمر من ثلاثة أجزاء تفصل بينها مسافات:

ls   -l   /etc
#│    │    └── الوسيط (argument): على «ماذا» نعمل (هنا المجلد /etc)
#│    └─────── الخيار (option): «كيف» نعمل (هنا «الصيغة الطويلة»)
#└──────────── الأمر نفسه

بعض القواعد التي ينبغي معرفتها منذ اليوم الأول:

  • الخيارات القصيرة تبدأ بشرطة واحدة: -l، -a. ويمكن تجميعها: ls -la = ls -l -a.
  • الخيارات الطويلة تبدأ بشرطتين: --all، --help. وهي أوضح للقراءة داخل سكربت.
  • الاسم الذي يحتوي على مسافة يجب أن يوضع بين علامتي تنصيص: ls "Mes documents". بدون علامتي التنصيص، ترى الصدفة وسيطين اثنين: Mes وdocuments.
  • الحروف الكبيرة والصغيرة لها أهمية: Rapport.txt وrapport.txt ملفان مختلفان.

5. الأوامر المدمجة والبرامج

بعض الأوامر برامج مخزّنة على القرص (/usr/bin/ls). وبعضها الآخر مدمج في الصدفة (builtin)، مثل cd وecho وtype. الأمر type يخبرك بطبيعة أي اسم:

type ls      # ls is aliased to `ls --color=auto'   (اسم مستعار alias، انظر أدناه)
type cd      # cd is a shell builtin                 (مدمج في الصدفة)
type date    # date is /usr/bin/date                 (برنامج)

لمعرفة مكان وجود برنامج: command -v date أو which date (هذا الأخير ليس مثبّتًا دائمًا).

6. ربح الوقت على لوحة المفاتيح

المدير يكتب كثيرًا. اختصارات bash هذه صالحة في جميع التوزيعات:

المفتاح الأثر
Tab يُكمل اسم أمر أو ملف؛ الضغط مرتين على Tab = قائمة الاحتمالات
↑ / ↓ الصعود / النزول في الأوامر التي سبق كتابتها
Ctrl+R البحث في السجلّ (history) (اكتب جزءًا من الأمر)
Ctrl+C يقطع الأمر الجاري
Ctrl+L يمسح الشاشة
Ctrl+A / Ctrl+E بداية / نهاية السطر
Ctrl+D على سطر فارغ: يغلق الصدفة (مثل exit)
history            # القائمة المرقّمة لآخر أوامرك
!42                # يعيد تشغيل الأمر رقم 42 من السجلّ
!!                 # يعيد تشغيل آخر أمر

يُحفظ السجلّ في الملف ~/.bash_history عند خروجك من الصدفة.

7. الأسماء المستعارة (alias): اختصاراتك الخاصة

الاسم المستعار (alias) يستبدل كلمة بأمر أطول. مثال: مسيّر متجر يطّلع كثيرًا على أحدث الملفات في مجلد المبيعات.

alias lt='ls -lt'  # سيعرض lt الملفات من الأحدث إلى الأقدم
lt                 # نستعمله كأي أمر
alias              # يعرض كل الأسماء المستعارة المعرّفة
unalias lt         # يحذف الاسم المستعار

الاسم المستعار المكتوب بهذه الطريقة يختفي عند إغلاق الصدفة. للاحتفاظ به، نكتبه في الملف ~/.bashrc، الذي تقرؤه bash عند كل فتح:

echo "alias lt='ls -lt'" >> ~/.bashrc   # >> يضيف إلى نهاية الملف
source ~/.bashrc                        # يعيد تحميل الملف فورًا

في Rocky / RHEL، يحتوي ملف .bashrc الخاص بـ root مسبقًا على أسماء مستعارة للأمان مثل alias rm='rm -i' (طلب التأكيد قبل الحذف). ليس الأمر كذلك في Debian وUbuntu: الأمر نفسه يحذف هناك دون أن يسأل.

8. root، المستخدم ذو الصلاحيات المطلقة

حساب root يستطيع فعل كل شيء، بما في ذلك تدمير النظام بأمر واحد. على خادم حقيقي، نعمل بصفة مستخدم عادي ولا نصبح root إلا لمهام الإدارة (بواسطة sudo، الذي ستراه في مسارات كل توزيعة). في مختبرات MasterLinux، أنت root للتبسيط: إنها بيئة تجريبية معزولة (sandbox) ستُمحى، فلا خطر عليك.

أخطاء متكررة

  • نسخ الرمز $ أو # من الأمثلة: تجيب الصدفة بـ command not found.
  • نسيان المسافة بين الأمر والخيار: ls-l غير موجود، الصحيح هو ls -l.
  • الكتابة بحروف كبيرة (Ls، CD): لا يتعرّف Linux على الأمر.
  • لصق أمر وجدته على الإنترنت دون فهمه، خصوصًا بصفة root. اقرأه أولًا، وتحقّق من كل كلمة فيه.

التطبيق العملي (Lab)

طرفية Rocky Linux تنتظرك، بصفة root (محثّ ينتهي بـ #). ستقوم بما يلي:

  1. سؤال الجهاز عمّن تكون والاحتفاظ بالجواب في ملف؛
  2. فعل الشيء نفسه مع التاريخ؛
  3. سؤال الصدفة هل cd برنامج أم أمر مدمج؛
  4. إنشاء اسم مستعار دائم lt في ملف .bashrc الخاص بك.

الرمز > يرسل نتيجة أمر إلى ملف (ويستبدل محتواه)، و>> يضيفها إلى نهايته. ستدرسهما بالتفصيل في الدرس 1.8. انقر على زر التحقّق (Vérifier) بعد كل مهمة.

اختبار قصير

  1. ما الفرق بين الطرفية والصدفة؟
  2. ماذا يعني الرمز # في نهاية المحثّ root@web01:/var/log#؟ وفي أي مجلد أنت؟
  3. هل يعمل الأمر LS -L؟ ولماذا؟
  4. كيف تجعل اسمًا مستعارًا دائمًا؟
  5. أي مفتاح يُكمل اسم ملف تلقائيًا؟
الأجوبة
  1. الطرفية هي النافذة التي تعرض النص وتستقبله؛ والصدفة (bash) هي البرنامج الذي يفسّر الأوامر.
  2. أنت root (المدير)؛ والمجلد الحالي هو /var/log.
  3. لا: Linux يميّز بين الحروف الكبيرة والصغيرة. يجب كتابة ls -l.
  4. بكتابته في ~/.bashrc (ثم source ~/.bashrc أو فتح صدفة جديدة).
  5. مفتاح Tab.

المصادر المرجعية: Debian Reference (رخصة حرة)، Ubuntu Server Guide (CC BY-SA 3.0)، وثائق Red Hat Enterprise Linux (CC BY-SA 3.0). نص أصلي من MasterLinux.

تمارين تطبيقية

تُنجَز على Rocky Linux 9

الطرفية عبر الإنترنت قادمة قريبًا. في انتظار ذلك، أنجِز هذه المهام على جهازك بنظام لينكس أو على آلة افتراضية أو WSL.

  1. احفظ اسم المستخدم المتصل في الملف /root/moi.txt (الأمر whoami).
    عرض تلميحالرمز > يرسل نتيجة أمر إلى ملف: whoami > /root/moi.txt
    عرض الحل
    whoami > /root/moi.txt

    التحقق : grep -qx root /root/moi.txt

  2. احفظ التاريخ والساعة الحاليين في الملف /root/date.txt (الأمر date).
    عرض تلميحالمبدأ نفسه: date، ثم الرمز >، ثم اسم الملف.
    عرض الحل
    date > /root/date.txt

    التحقق : test -s /root/date.txt

  3. اسأل الصدفة عن طبيعة الأمر cd (الأمر type) واحفظ الجواب في الملف /root/type-cd.txt.
    عرض تلميحtype cd > /root/type-cd.txt — يخبرك الجواب هل هو برنامج أم أمر مدمج في الصدفة.
    عرض الحل
    type cd > /root/type-cd.txt

    التحقق : grep -qi -e builtin -e intégrée /root/type-cd.txt

  4. أنشئ اختصارًا دائمًا: أضف السطر alias lt='ls -lt' إلى نهاية الملف /root/.bashrc.
    عرض تلميحاستعمل >> (علامتان) لـ«الإضافة» إلى النهاية: echo "alias lt='ls -lt'" >> /root/.bashrc
    عرض الحل
    echo "alias lt='ls -lt'" >> /root/.bashrc

    التحقق : grep -q "^alias lt='ls -lt'" /root/.bashrc

المراجع الرسمية المعتمدة: Debian Reference — chapitre 1, tutoriels GNU/Linux ; Ubuntu Server Guide — prise en main de la ligne de commande. نص أصلي من MasterLinux.