تخطَّ إلى المحتوى

سطر الأوامر في Linux: الأوامر والخيارات والأنابيب

الدرس 2 من 10 · أساسيات Linux

في الدرس السابق كتبت أوامر بسيطة مثل pwd و ls و echo. الآن ستفهم لغة سطر الأوامر نفسها: كيف يُبنى أي أمر، وكيف تعرف خياراته، وكيف تربط أوامر صغيرة ببعضها لتنجز مهاماً كبيرة. هذه القدرة على التركيب هي سر قوة Linux وسبب حب المبرمجين له.

أغلب أوامر Linux تتبع نفس الشكل:

الأمر [الخيارات] [المعاملات]
نافذة طرفيّة
ls -l Documents
  • ls: الأمر، أي البرنامج الذي سيُنفَّذ.
  • -l: خيار (Option) يغيّر سلوك الأمر، ويبدأ عادة بشرطة. هنا: «اعرض التفاصيل».
  • Documents: معامل (Argument)، أي الشيء الذي يعمل عليه الأمر. هنا: المجلد المطلوب عرضه.

تخيّل الأمر مثل طلب في مطعم: قهوة هو الأمر، و«بدون سكر» خيار، و«للطاولة رقم 5» معامل.

نافذة طرفيّة
ls
الناتج
Documents Pictures fruits.txt
نافذة طرفيّة
ls -a
الناتج
. .. Documents Pictures fruits.txt

الخيار -a (من all) أظهر عناصر إضافية: . تعني المجلد الحالي، و .. المجلد الأب. وستعرف لاحقاً أن أي ملف يبدأ اسمه بنقطة يكون مخفياً.

ويمكن دمج عدة خيارات: ls -l -a تساوي ls -la. وبعض الخيارات لها اسم طويل بشرطتين، مثل ls --all التي تساوي ls -a.

كيف تعرف خيارات أي أمر؟

Section titled “كيف تعرف خيارات أي أمر؟”

لا أحد يحفظ كل الخيارات! استخدم المساعدة المدمجة:

نافذة طرفيّة
ls --help
man ls
  • --help: ملخص سريع للخيارات في الطرفية.
  • man (من manual): الدليل الكامل للأمر. تنقّل فيه بالأسهم، وابحث بـ / ثم الكلمة، واخرج بالحرف q.
نافذة طرفيّة
name="سارة"
echo "أهلاً يا $name"
الناتج
أهلاً يا سارة

انتبه: لا مسافات حول = عند تعريف المتغير. و $name تستبدل اسم المتغير بقيمته. وهناك متغيرات جاهزة في النظام، مثل $HOME لمجلدك الشخصي و $USER لاسم المستخدم.

نافذة طرفيّة
mkdir projects && cd projects

&& تعني: «نفّذ الأمر الثاني فقط إذا نجح الأول». لو فشل إنشاء المجلد، لن نحاول الدخول إليه.

نافذة طرفيّة
false && echo "لن يُطبع"
false; echo "يُطبع دائماً"
الناتج
يُطبع دائماً

(false أمر لا يفعل شيئاً سوى أن «يفشل»، ونستخدمه هنا للتجربة.) الفاصلة المنقوطة ; تنفّذ الأوامر بالتتابع مهما حدث، أما && فتتوقف عند أول فشل.

بدلاً من عرض النتيجة على الشاشة، يمكنك حفظها في ملف:

نافذة طرفيّة
echo "السطر الأول" > notes.txt
echo "السطر الثاني" >> notes.txt
cat notes.txt
الناتج
السطر الأول
السطر الثاني
  • >: اكتب في الملف، ويُمسح محتواه القديم إن وُجد.
  • >>: أضف في نهاية الملف دون مسح ما فيه.
  • cat: يعرض محتوى الملف.

هنا السحر الحقيقي. الأنبوب (Pipe) يأخذ مخرجات أمر ويجعلها مدخلات لأمر آخر. لنفترض ملف fruits.txt فيه: تفاح، موز، تفاح، عنب (كل كلمة في سطر):

نافذة طرفيّة
sort fruits.txt
الناتج
تفاح
تفاح
عنب
موز
نافذة طرفيّة
sort fruits.txt | uniq -c
الناتج
2 تفاح
1 عنب
1 موز

sort رتّب الأسطر، ثم مرّر النتيجة بالأنبوب إلى uniq -c الذي عدّ تكرار كل سطر. بأمرين صغيرين حصلنا على إحصاء كامل!

تخيّل الأنبوب مثل خط إنتاج في مصنع: كل محطة تأخذ المنتج من المحطة السابقة، وتضيف عليه عملها، وتمرره للتالية.

أمثلة أخرى مفيدة:

نافذة طرفيّة
grep "تفاح" fruits.txt # الأسطر التي تحتوي الكلمة
ls | wc -l # عدد الملفات والمجلدات

grep يبحث عن نص داخل ملف أو مخرجات، و wc -l يعدّ الأسطر. فلسفة Linux: أدوات صغيرة، كل أداة تتقن شيئاً واحداً، وتتعاون عبر الأنابيب.

  • السهم لأعلى: يسترجع الأوامر السابقة واحداً واحداً.
  • history: يعرض قائمة مرقمة بالأوامر التي كتبتها.
  • Ctrl + R: ابحث في السجل بكتابة جزء من أمر قديم.
  • Ctrl + C: أوقف الأمر الذي يعمل الآن.
  • clear أو Ctrl + L: نظّف الشاشة.

افتح الطرفية (أو Git Bash على ويندوز) وجرّب:

  1. اعرض مساعدة الأمر mkdir بـ --help، وابحث عن معنى الخيار -p.
  2. أنشئ ملفاً فيه أسماء 5 من أصدقائك باستخدام echo مع > ثم >>.
  3. اعرض الأسماء مرتبة بـ sort.
  4. استخدم grep مع أنبوب لتعرض الأسماء التي تحتوي حرفاً معيناً.
  5. تحدٍّ: احسب عدد الأسماء المكررة في ملف باستخدام sort و uniq -c.
  • مسافات حول = في المتغيرات: name = "سارة" تعطي خطأ command not found، لأن الطرفية تفهم name كأمر.
  • > بدل >>: تمسح الملف بدلاً من الإضافة إليه.
  • حالة الأحرف: Linux يفرّق بين ls و LS، وبين Notes.txt و notes.txt.

سؤال

في الأمر ls -l Documents، ما هو الخيار؟

سؤال

ما وظيفة الأنبوب | في sort names.txt | uniq؟

  • الأمر يتكون من اسم، ثم خيارات تبدأ بشرطة، ثم معاملات.
  • --help و man لمعرفة خيارات أي أمر.
  • && تنفّذ التالي عند النجاح فقط، و ; تنفّذ بالتتابع دائماً.
  • > تكتب في ملف وتمسح القديم، و >> تضيف في نهايته.
  • الأنبوب | يربط أوامر صغيرة لتنجز مهام كبيرة، مثل sort | uniq -c.