مبتدئ → تطبيقي · 10 دروس

Linux CLI — سطر الأوامر للمطورين

تتعلّم الطرفية، التنقل بين المجلدات، إدارة الملفات، الصلاحيات، الأنابيب، grep، العمليات، SSH، وسكربتات Bash — وتخرج بمجلد مشروع منظم بسكربت جاهز.

كيف تدرس هذا المسار؟

  1. اقرأ المفهوم — الطرفية بوابة السيرفر الحقيقي.
  2. انسخ الأوامر وجرّبها في Terminal أو WSL.
  3. نفّذ المهمة العملية قبل الاختبار.
  4. أكمل الاختبار — التقدّم يُحفظ على جهازك.

محتوى أصلي من Mesue Learn — عملي ومناسب لسن +12 وما فوق.

1. مقدمة الطرفية — بوابة المطور

الهدف: تفهم ما هي الطرفية ولماذا يستخدمها المبرمجون قبل كتابة أي أمر.

الطرفية (Terminal) = نافذة نصية تكتب فيها أوامر والجهاز ينفّذها فوراً.

لماذا يهمك كمطور؟
• أسرع من النقر في واجهات معقدة
• أدوات Git و Python و Node تعمل من الطرفية
• الخوادم (Servers) غالباً بلا شاشة — فقط سطر أوامر
• سكربتات ت automate مهام متكررة

أين تجدها؟
• Linux/Mac: Terminal
• Windows: PowerShell، WSL، أو Git Bash

البرومبت (Prompt) يظهر مثل:
user@pc:~/projects$

$ أو % = جاهز لأمر. Enter = تنفيذ. Ctrl+C = إيقاف أمر عالق.

قاعدة Mesue: الطرفية ليست «للمحترفين فقط» — هي أداة يومية للمبرمج المبتدئ.

  • Terminal = أوامر نصية بدل النقر
  • Git و Python و npm تعمل من الطرفية
  • Ctrl+C يوقف الأمر الجاري
  • WSL يجلب Linux على Windows

صورة ذهنية

 [أنت]
    |
    v
 [Terminal]
    |
    v
 [النظام / البرامج]

مختبر: أول 5 أوامر

نفّذ whoami و pwd و date و echo — ماذا يعيد كل أمر؟

مهمة عملية

افتح الطرفية على جهازك ونفّذ echo "أنا أتعلّم Linux CLI" — التقط لقطة شاشة.

اختبر فهمك

الطرفية (Terminal) هي أساساً...

2. التنقل — pwd و cd و ls

الهدف: تعرف مكانك في النظام وتنتقل بين المجلدات وتعرض محتوياتها.

pwd = Print Working Directory — «أين أنا الآن؟»
cd = Change Directory — «اذهب إلى مجلد»
ls = List — «اعرض محتويات المجلد»

أمثلة:
pwd
ls
ls -l # تفاصيل (صلاحيات، حجم، تاريخ)
ls -la # يشمل الملفات المخفية (.)
cd Documents
cd .. # مجلد أب
cd ~ # مجلدك الرئيسي (Home)
cd / # جذر النظام

مسارات:
• مطلق: /home/user/projects
• نسبي: cd projects/mesue

Tab = إكمال تلقائي للأسماء — وفر وقتك!

ls -lah = تفاصيل + مخفية + أحجام مقروءة (K, M).

  • pwd يعرض المسار الحالي
  • cd .. للأعلى، cd ~ للHome
  • ls -l للتفاصيل، ls -a للمخفية
  • Tab يكمّل أسماء الملفات

صورة ذهنية

 ~ (Home)
  |
 +-- Documents
 |     |
 |     v
 |  [mesue/]
  |
 cd .. → رجوع

مختبر: خريطة مجلدات

من Home: cd إلى 3 مجلدات مختلفة — pwd بعد كل cd. ارسم شجرة بسيطة على ورقة.

مهمة عملية

أنشئ مجلد mesue-cli-lab في Home وادخل إليه — pwd يجب أن ينتهي بـ mesue-cli-lab.

اختبر فهمك

أي أمر يعرض المجلد الحالي؟

3. الملفات — إنشاء، نسخ، نقل، حذف

الهدف: تنشئ ملفات ومجلدات وتعدّلها وتنسخها بأمان.

mkdir اسم_مجلد # مجلد جديد
mkdir -p a/b/c # مجلدات متداخلة
touch file.txt # ملف فارغ أو تحديث تاريخه

cat file.txt # عرض المحتوى
nano file.txt # محرر نصي بسيط (أو vim/code)
echo 'مرحباً' > hi.txt # كتابة (استبدال)
echo 'سطر' >> hi.txt # إلحاق

cp source dest # نسخ
cp -r folder/ backup/ # نسخ مجلد
mv old new # نقل أو إعادة تسمية
rm file.txt # حذف ملف
rm -r folder/ # حذف مجلد

⚠️ rm لا سلة مهملات — الحذف نهائي!

قبل rm -r: ls داخل المجلد وتأكد. استخدم rm -i للتأكيد.

  • mkdir -p للمجلدات المتداخلة
  • > يكتب، >> يلحق
  • mv = نقل أو rename
  • rm -r خطير — تحقق مرتين

صورة ذهنية

 touch/cat → [file.txt]
      |
 cp/mv → [نسخة]
      |
 rm → ✗ (نهائي)

مختبر: هيكل مشروع

أنشئ src/ و docs/ و README.md — cat README.md — هل المحتوى صحيح؟

مهمة عملية

ابنِ هيكلاً: mesue-cli-lab/src/ و docs/ و README.md بسطر واحد على الأقل.

اختبر فهمك

أي أمر ينسخ مجلداً كاملاً؟

4. الصلاحيات — من يقرأ ويكتب وينفّذ؟

الهدف: تقرأ صلاحيات rwx وتعدّلها بـ chmod دون كسر النظام.

ls -l يعرض صلاحيات مثل:
-rw-r--r-- 1 user group 123 Apr 1 10:00 file.txt

الأجزاء:
• النوع: - ملف، d مجلد
• rwx للمالك (user)
• rwx للمجموعة (group)
• rwx للآخرين (others)

r=read قراءة، w=write كتابة، x=execute تنفيذ

chmod 644 file.txt # rw-r--r--
chmod 755 script.sh # rwxr-xr-x (سكربت قابل للتشغيل)
chmod +x script.sh # إضافة execute

chmod 777 = خطر! الجميع يعدّل — تجنّبه.

للمجلدات: x = الدخول إليها (cd).

chown user:group file — للمتقدمين مع sudo.

  • rwx = read, write, execute
  • 755 للسكربتات القابلة للتشغيل
  • 644 للملفات النصية العادية
  • 777 خطير — لا تستخدمه

صورة ذهنية

 -rw-r--r--
  ||| ||| |||
 owner group other
 r w - r - - r - -

مختبر: سكربت قابل للتشغيل

قبل chmod +x — ./hello.sh يفشل. بعدها — ينجح. ls -l يرى x.

مهمة عملية

أنشئ hello.sh و chmod +x وشغّله بـ ./hello.sh.

اختبر فهمك

في ls -l، حرف x يعني...

5. الأنابيب وإعادة التوجيه — ربط الأوامر

الهدف: تمرّر مخرجات أمر لآخر وتوجّهها لملفات.

Pipe | = مخرجات أمر → مدخلات أمر آخر

ls | wc -l # عدد الملفات
history | tail -5 # آخر 5 أوامر

إعادة التوجيه:
command > file.txt # stdout إلى ملف (استبدال)
command >> file.txt # إلحاق
command 2> errors.log # stderr فقط
command &> all.log # stdout + stderr

< = إدخال من ملف:
wc -l < file.txt

أمثلة عملية:
ls -la | head -10 # أول 10 أسطر
date >> log.txt # سجل بسيط

stderr = رسائل خطأ (2). stdout = مخرجات عادية (1).

  • | يربط مخرجات بمدخلات
  • > يكتب، >> يلحق
  • 2> لرسائل الخطأ
  • head/tail/wc شركاء pipes

صورة ذهنية

 ls --> | --> wc -l --> [عدد]
      |
 date >> log.txt

مختبر: سجل نشاط

echo \"بدء العمل\" >> activity.log ثم date >> activity.log — cat activity.log.

مهمة عملية

أنشئ activity.log بثلاثة أسطر باستخدام >> و date و echo.

اختبر فهمك

الرمز | (pipe) يفعل...

6. grep — البحث داخل الملفات

الهدف: تبحث عن نصوص وأنماط في ملفات ومخرجات الأوامر.

grep = Global Regular Expression Print

grep 'كلمة' file.txt
grep -i 'error' log.txt # تجاهل حالة الأحرف
grep -r 'TODO' src/ # بحث متكرر في مجلد
grep -n 'function' app.py # مع أرقام الأسطر
grep -v 'debug' log.txt # الأسطر التي لا تحتوي

مع pipe:
ls -la | grep '.md'
history | grep git

regex بسيط:
grep '^#' config.txt # أسطر تبدأ بـ #
grep '[0-9]' data.txt # تحتوي رقماً

--color=auto يلوّن النتائج (غالباً افتراضي).

grep أداة يومية: سجلات، كود، configs.

  • grep يبحث عن نص أو نمط
  • -r للبحث في مجلد كامل
  • -i غير حساس لحالة الأحرف
  • -v يعكس (استبعاد)

صورة ذهنية

 [ملفات/مخرجات]
        |
        v
     [grep]
        |
   الأسطر المطابقة

مختبر: صيد TODO

أنشئ tasks.txt بـ 5 أسطر — 2 فيها TODO. grep -c TODO tasks.txt = 2.

مهمة عملية

ابحث عن كلمة Mesue في README.md بـ grep — إن لم توجد، أضفها ثم ابحث.

اختبر فهمك

grep -r pattern folder/ يعني...

7. العمليات — ما الذي يعمل الآن؟

الهدف: تراقب العمليات وتوقف العالقة منها وتشغّل أوامر في الخلفية.

كل برنامج يعمل = process (عملية) له PID (رقم).

ps # لقطة لعمليات الجلسة
ps aux | head # نظرة عامة (Linux/Mac)
top أو htop # مراقبة حية (q للخروج)

kill PID # إيقاف بلطف (SIGTERM)
kill -9 PID # إيقاف قسري — آخر حل

which python3 # أين البرنامج؟
command & # تشغيل في الخلفية
jobs # قائمة الخلفية
fg %1 # إحضار للمقدمة

Ctrl+Z ثم bg = إرسال للخلفية.

مثال: python3 -m http.server 8080 &

لا kill -9 إلا عند الضرورة — قد تفسد ملفات مفتوحة.

  • PID = معرّف العملية
  • top/htop للمراقبة
  • kill قبل kill -9
  • & للتشغيل في الخلفية

صورة ذهنية

 ps / top
    |
 [PID 1234 python]
 [PID 5678 bash]
    |
 kill → إيقاف

مختبر: عملية خلفية

شغّل sleep 60 & — jobs يظهرها — kill %1 — jobs فارغ.

مهمة عملية

نفّذ ps أو ps aux | head -5 — ما أكثر عملية تكراراً؟

اختبر فهمك

kill -9 يُستخدم عندما...

8. مقدمة SSH — الاتصال الآمن بخادم

الهدف: تفهم SSH وتتصل بخادم (أو WSL) دون مشاركة كلمات سر في Git.

SSH = Secure Shell — اتصال مشفّر بجهاز بعيد (خادم VPS، Raspberry Pi، WSL).

ssh user@host
ssh user@192.168.1.10
ssh -p 2222 user@host # منفذ غير 22

أول اتصال: «هل تثق بهذا الجهاز؟» — yes مرة واحدة.

مفاتيح SSH (أفضل من كلمة سر):
ssh-keygen -t ed25519 -C "you@example.com"
ssh-copy-id user@host

scp file.txt user@host:~/ # نسخ ملف للخادم
scp user@host:~/log.txt . # جلب ملف

⚠️ لا ترفع المفتاح الخاص (~/.ssh/id_ed25519) إلى GitHub أبداً.

GitHub يستخدم SSH: git@github.com:USER/repo.git

Mesue: credentials/ و .ssh/ خارج Git دائماً.

  • SSH اتصال مشفّر بالخادم
  • ssh-keygen + ssh-copy-id أأمن
  • scp لنقل الملفات
  • المفتاح الخاص سري — لا يرفع لGit

صورة ذهنية

 [جهازك] --SSH--> [خادم]
     |                  |
  id_ed25519      authorized_keys

مختبر: فحص SSH

ls ~/.ssh/ — هل id_ed25519.pub موجود؟ cat *.pub آمن (مفتاح عام فقط).

مهمة عملية

اقرأ ls -la ~/.ssh/ — اشرح الفرق بين .pub والمفتاح بدون .pub.

اختبر فهمك

أي ملف SSH يمكن مشاركته (مفتاح عام)؟

9. سكربتات Bash — أتمتة المهام

الهدف: تكتب سكربت Bash بسيط بـ shebang ومتغيرات وحلقات.

سكربت = ملف أوامر قابل للتشغيل.

#!/bin/bash
# أول سطر: shebang

echo "مرحباً"
NAME="Mesue"
echo "المشروع: NAME"

# للمتغير:
echo "المشروع: $NAME"

mkdir -p backup
cp *.md backup/ 2>/dev/null || true

for f in *.txt; do
echo "ملف: $f"
done

if [ -f README.md ]; then
echo "README موجود"
fi

chmod +x script.sh
./script.sh

bash -n script.sh # فحص syntax دون تنفيذ

استخدم " للمتغيرات. || true يمنع توقف السكربت عند خطأ بسيط.

  • #!/bin/bash = shebang
  • chmod +x ثم ./script.sh
  • for و if للتحكم
  • bash -n للتحقق من الأخطاء

صورة ذهنية

 script.sh
    |
 shebang → bash
    |
 أوامر → نتيجة

مختبر: setup.sh

احفظ setup.sh — chmod +x — ./setup.sh — ls يظهر src docs tests.

مهمة عملية

اكتب setup.sh ينشئ 3 مجلدات و README.md — شغّله وتحقق.

اختبر فهمك

#!/bin/bash في أول السطر يخبر النظام...

10. المشروع النهائي — تنظيم مجلد مشروع Bash

الهدف: تسلّم مجلد مشروع منظم بسكربت organize.sh يجهّز الهيكل تلقائياً.

المطلوب: مجلد mesue-cli-project في Home

الهيكل:
mesue-cli-project/
├── README.md (وصف عربي)
├── src/
├── docs/
├── scripts/
│ └── organize.sh (ينشئ/ينظّم الهيكل)
└── logs/
└── .gitkeep

organize.sh يجب أن:
1) ينشئ المجلدات إن لم تكن
2) يكتب تاريخ التشغيل في logs/setup.log
3) يطبع «جاهز» مع pwd

معيار النجاح:
✓ ./scripts/organize.sh يعمل بدون أخطاء
✓ README يشرح كيف تشغّل السكربت
✓ ls -R يظهر الهيكل كاملاً
✓ grep TODO src/ أو docs/ — لا أسرار

(اختياري) git init + .gitignore لـ logs/*.log

  • هيكل واضح = مشروع احترافي
  • organize.sh قابل لإعادة التشغيل
  • README يشرح للزائر
  • لا كلمات سر في الملفات

صورة ذهنية

 organize.sh
      |
 +----+----+----+
 v    v    v    v
src docs scripts logs
      |
 README.md

مختبر: العرض النهائي

احذف logs/ — شغّل organize.sh مجدداً — هل أُعيد إنشاؤه؟ cat logs/setup.log.

مهمة عملية

سلّم mesue-cli-project + organize.sh + README عربي — شارك لقطة ls -R.

اختبر فهمك

أفضل ممارسة في المشروع النهائي؟

سطر الأوامر أصبح أداة يومية

جرّب مسار السحابة لنشر موقعك على VPS، أو Git لإدارة مشروعك من الطرفية.