أساسيات Linux
مقدمة
في عالم الخوادم، Linux هو البطل بلا منازع. أكثر من 90% من الخوادم حول العالم تعمل بنظام Linux، من تطبيق WeChat الذي تستخدمه يوميًا إلى بحث Google، كلها مدعومة بنظام Linux في الخلفية. كمطور، إتقان أساسيات Linux ليس خيارًا، بل هو ضرورة.
ماذا ستتعلم في هذا المقال؟
بعد إكمال هذا الفصل، ستكتسب:
- نظام الملفات: فهم بنية أدلة Linux وفلسفة "كل شيء ملف"
- الأوامر الشائعة: إتقان الأوامر الأساسية مثل معالجة الملفات والنصوص وإدارة العمليات
- نموذج الصلاحيات: فهم مفاهيم المستخدمين والمجموعات والصلاحيات
- أساسيات Shell: فهم المفاهيم الأساسية لـ Shell مثل الأنابيب وإعادة التوجيه والمتغيرات البيئية
- مهارات عملية: تعلم المهارات الأساسية في التشغيل مثل عرض السجلات وفحص العمليات وتشخيص الشبكة
| الفصل | المحتوى | المفاهيم الأساسية |
|---|---|---|
| الفصل 1 | نظام الملفات | بنية الأدلة، كل شيء ملف |
| الفصل 2 | الأوامر الشائعة | الملفات، النصوص، العمليات، الشبكة |
| الفصل 3 | نموذج الصلاحيات | المستخدم، المجموعة، rwx، sudo |
| الفصل 4 | أساسيات Shell | الأنابيب، إعادة التوجيه، المتغيرات، السكربتات |
| الفصل 5 | سيناريوهات عملية | فحص السجلات، تشخيص الأداء |
1. نظام الملفات: كل شيء ملف
واحدة من أهم فلسفات Linux الأساسية هي كل شيء ملف. الملفات العادية هي ملفات، والأدلة هي ملفات، والأقراص الصلبة هي ملفات، وحتى اتصالات الشبكة ومعلومات العمليات كلها ملفات. هذا التجريد الموحد يسمح لك باستخدام نفس مجموعة الأدوات (القراءة، الكتابة، التحكم في الصلاحيات) للتعامل مع جميع موارد النظام تقريبًا.
اختصار بنية الأدلة
تخيل نظام ملفات Linux كشجرة مقلوبة:
/ ← الدليل الجذري (جذر الشجرة)
├── home/ ← مجلدات المستخدمين (ملفاتك هنا)
├── etc/ ← ملفات الإعدادات ("لوحة تحكم" النظام)
├── var/ ← البيانات المتغيرة (السجلات، الذاكرة المؤقتة)
├── usr/ ← البرامج المثبتة من قبل المستخدم
├── tmp/ ← الملفات المؤقتة (تُحذف عند إعادة التشغيل)
├── proc/ ← معلومات العمليات (افتراضية، لا تشغل مساحة)
├── dev/ ← ملفات الأجهزة (الأقراص، الطرفيات)
├── bin/ ← الأوامر الأساسية (ls، cp، mv)
├── sbin/ ← أوامر إدارة النظام (تحتاج root)
├── opt/ ← برامج الطرف الثالث
└── root/ ← الدليل الرئيسي للمستخدم rootطريقتان لكتابة المسارات
| النوع | الصيغة | مثال | الوصف |
|---|---|---|---|
| المسار المطلق | يبدأ من / | /home/alice/code/app.js | ينطلق من الدليل الجذري، لا لبس فيه |
| المسار النسبي | يبدأ من الدليل الحالي | ./code/app.js أو ../config | . هو الدليل الحالي، .. هو الدليل الأعلى |
قوة "كل شيء ملف"
تريد معرفة معلومات المعالج؟ اقرأ ملفًا: cat /proc/cpuinfo تريد معرفة استخدام الذاكرة؟ اقرأ ملفًا: cat /proc/meminfo تريد توليد أرقام عشوائية؟ اقرأ ملفًا: cat /dev/urandom تريد تجاهل المخرجات؟ اكتب في ملف: echo "no thanks" > /dev/null
لا حاجة لواجهة برمجة تطبيقات خاصة، مجرد قراءة وكتابة الملفات تكفي. هذه هي أناقة فلسفة Unix.
2. الأوامر الشائعة
تتبع أوامر Linux صيغة موحدة: command [options] [arguments]. مثلاً في ls -la /home، ls هو الأمر، و-la هي الخيارات، و/home هو المعامل.
lsList files and directoriesls -la /homecdChange directorycd /var/logcpCopy filescp -r src/ backup/mvMove or renamemv old.txt new.txtrmRemove filesrm -rf dist/mkdirCreate directoriesmkdir -p src/componentsfindFind filesfind . -name "*.js" -type fأكثر 10 أوامر استخدامًا
إذا كان عليك تذكر 10 أوامر فقط، فتذكر هذه:
| الأمر | الاستخدام | طريقة التذكر |
|---|---|---|
ls | عرض الملفات | list |
cd | تغيير الدليل | change directory |
cat | عرض محتوى الملف | concatenate |
grep | البحث في النصوص | global regular expression print |
find | البحث عن الملفات | find |
ps | عرض العمليات | process status |
tail -f | متابعة السجلات مباشرة | مشاهدة "ذيل" الملف، -f تعني follow |
chmod | تغيير الصلاحيات | change mode |
curl | إرسال طلبات HTTP | client URL |
ssh | تسجيل الدخول عن بعد | secure shell |
فن دمج الأوامر
قوة Linux لا تكمن في الأمر الواحد، بل في دمج الأوامر. باستخدام الأنبوب | لربط عدة أوامر بسيطة معًا، يمكنك حل مشكلات معقدة:
# إيجاد أكثر 5 عمليات استهلاكًا للمعالج
ps aux --sort=-%cpu | head -6
# إحصاء أكثر أنواع الأخطاء ظهورًا في السجل
grep "ERROR" app.log | awk '{print $4}' | sort | uniq -c | sort -rn | head -10
# البحث عن ملفات أكبر من 100 ميجابايت
find / -size +100M -type f 2>/dev/null
# مراقبة الأخطاء في السجل مباشرة
tail -f /var/log/app.log | grep --color "ERROR"فلسفة Unix
"افعل شيئًا واحدًا، وأتقنه." كل أمر مسؤول عن وظيفة واحدة فقط، ويتم تحقيق العمليات المعقدة من خلال دمج الأوامر عبر الأنابيب. لهذا السبب أوامر Linux قصيرة ومختصرة — إنها مكعبات بناء، وليست سكاكين سويسرية.
3. نموذج الصلاحيات
Linux هو نظام متعدد المستخدمين، ونموذج الصلاحيات هو حجر الأساس للأمان. كل ملف لديه ثلاث مجموعات من الصلاحيات، تتحكم فيما يمكن لـ المالك (Owner) والمجموعة (Group) والآخرين (Others) القيام به.
قراءة مخرجات ls -l
$ ls -l app.js
-rwxr-xr-- 1 alice developers 2048 Jan 15 10:30 app.js
│├──┤├──┤├──┤ │ │ │
│ │ │ │ │ │ └── حجم الملف
│ │ │ │ │ └── المجموعة المالكة
│ │ │ │ └── المالك
│ │ │ └── صلاحيات الآخرين: r-- (قراءة فقط)
│ │ └── صلاحيات المجموعة: r-x (قراءة+تنفيذ)
│ └── صلاحيات المالك: rwx (قراءة+كتابة+تنفيذ)
└── نوع الملف: - ملف عادي، d دليل، l رابطأنواع الصلاحيات الثلاثة
| الصلاحية | الحرف | الرقم | المعنى للملفات | المعنى للأدلة |
|---|---|---|---|---|
| قراءة | r | 4 | عرض محتوى الملف | عرض محتويات الدليل (ls) |
| كتابة | w | 2 | تعديل محتوى الملف | إنشاء/حذف الملفات في الدليل |
| تنفيذ | x | 1 | تشغيل البرنامج/السكربت | الدخول إلى الدليل (cd) |
644Normal file: owner can read/write, others read-only755Executable file or directory: owner has full access600Private file: only owner can read/write777Fully open: not recommendedحساب الصلاحيات الرقمية بسرعة
الأرقام الثلاثة تمثل صلاحيات المالك والمجموعة والآخرين على التوالي، كل رقم هو مجموع r(4) + w(2) + x(1):
chmod 755 script.sh
7 = rwx (4+2+1) → المالك: قراءة+كتابة+تنفيذ
5 = r-x (4+0+1) → المجموعة: قراءة+تنفيذ
5 = r-x (4+0+1) → الآخرين: قراءة+تنفيذ| الصلاحيات الشائعة | المعنى | الاستخدام النموذجي |
|---|---|---|
644 | rw-r--r-- | الملفات العادية (المالك يكتب، الآخرون يقرؤون فقط) |
755 | rwxr-xr-x | الملفات القابلة للتنفيذ/الأدلة |
600 | rw------- | الملفات الخاصة (مثل مفاتيح SSH) |
777 | rwxrwxrwx | الجميع يقرأ ويكتب وينفذ (خطير، تجنب استخدامه) |
sudo: الحصول على صلاحيات مرتفعة مؤقتًا
صلاحيات المستخدم العادي محدودة، بعض العمليات تحتاج صلاحيات root. sudo يتيح لك تنفيذ الأوامر مؤقتًا كهوية root:
# المستخدم العادي لا يمكنه تعديل إعدادات النظام
$ vim /etc/nginx/nginx.conf
# Permission denied
# استخدم sudo لرفع الصلاحيات مؤقتًا
$ sudo vim /etc/nginx/nginx.conf
# أدخل كلمة المرور الخاصة بك ثم يمكنك التعديل
# التبديل إلى المستخدم root (استخدم بحذر)
$ sudo su -مبدأ الصلاحيات الدنيا
لا تستخدم أبدًا chmod 777 لحل مشاكل الصلاحيات، هذا يعادل إزالة قفل الباب. الطريقة الصحيحة هي معرفة من يحتاج أي صلاحية ومنحها بدقة. وبالمثل، لا تعمل بهوية root لفترات طويلة، استخدم sudo فقط عند الضرورة.
4. أساسيات Shell
Shell هو "المترجم" بينك وبين نواة Linux. أنت تدخل الأوامر، وShell يفسرها ويسلمها للنواة للتنفيذ. أكثر أنواع Shell استخدامًا هي Bash (الافتراضي في معظم توزيعات Linux) وZsh (الافتراضي في macOS).
الأنابيب وإعادة التوجيه
هاتان أقوى ميزتان في Shell:
| الرمز | الاسم | الوظيفة | مثال |
|---|---|---|---|
| ` | ` | أنبوب | تمرير مخرجات الأمر السابق كمدخلات للأمر التالي |
> | إعادة توجيه الإخراج | كتابة المخرجات إلى ملف (استبدال) | echo "hello" > file.txt |
>> | إعادة توجيه بالإلحاق | إلحاق المخرجات بنهاية الملف | echo "world" >> file.txt |
< | إعادة توجيه الإدخال | قراءة المدخلات من ملف | wc -l < file.txt |
2> | إعادة توجيه الأخطاء | كتابة رسائل الخطأ إلى ملف | cmd 2> error.log |
2>&1 | دمج المخرجات | دمج مخرجات الأخطاء مع المخرجات العادية | cmd > all.log 2>&1 |
المتغيرات البيئية
المتغيرات البيئية هي "الإعدادات العامة" في Shell، تؤثر على سلوك الأوامر:
# عرض جميع المتغيرات البيئية
env
# عرض متغير محدد
echo $PATH
echo $HOME
# تعيين مؤقت (يسري فقط في جلسة Shell الحالية)
export API_KEY="abc123"
# تعيين دائم (اكتب في ملف الإعدادات)
echo 'export API_KEY="abc123"' >> ~/.bashrc
source ~/.bashrc # تفعيل الإعدادات فورًا| المتغيرات الشائعة | المعنى | مثال للقيمة |
|---|---|---|
$PATH | مسار البحث عن الأوامر | /usr/local/bin:/usr/bin:/bin |
$HOME | الدليل الرئيسي للمستخدم | /home/alice |
$USER | اسم المستخدم الحالي | alice |
$PWD | دليل العمل الحالي | /var/log |
$SHELL | الـ Shell المستخدم حاليًا | /bin/bash |
مقدمة في سكربتات Shell
كتابة عدة أوامر في ملف واحد هو ما يسمى بسكربت Shell. إنها نقطة البداية لأتمتة العمليات:
#!/bin/bash
# deploy.sh - سكربت نشر بسيط
APP_DIR="/opt/myapp"
LOG_FILE="/var/log/deploy.log"
echo "$(date) - بدء النشر..." >> $LOG_FILE
# سحب أحدث كود
cd $APP_DIR && git pull origin main
# تثبيت الاعتماديات
npm install --production
# إعادة تشغيل الخدمة
pm2 restart myapp
echo "$(date) - اكتمل النشر" >> $LOG_FILE# منح السكربت صلاحية التنفيذ وتشغيله
chmod +x deploy.sh
./deploy.shنصائح لتصحيح السكربتات
أضف set -ex في بداية السكربت: -e يجعل السكربت يتوقف فورًا عند حدوث خطأ (بدلاً من الاستمرار في التنفيذ)، و-x يطبع كل أمر يتم تنفيذه (لتسهيل اكتشاف المشكلات). هذان الخياران يعتبران أساسيين تقريبًا في سكربتات الإنتاج.
5. سيناريوهات عملية
انتهينا من النظري، لنلقِ نظرة على أكثر السيناريوهات العملية التي تواجهك في التطوير.
5.1 فحص السجلات
عندما تتعطل الخدمة، أول رد فعل هو النظر في السجلات. إليك الطرق الشائعة لفحص السجلات:
# 1. متابعة السجلات مباشرة (الأكثر استخدامًا)
tail -f /var/log/app/error.log
# 2. البحث عن أخطاء في فترة زمنية محددة
grep "2024-01-15 14:" error.log | grep "ERROR"
# 3. إحصاء عدد الأخطاء لكل ساعة
grep "ERROR" app.log | awk '{print substr($1,1,13)}' | uniq -c
# 4. عرض آخر 100 سطر من السجل
tail -100 app.log
# 5. البحث في عدة ملفات سجل
grep -r "OutOfMemory" /var/log/app/5.2 فحص العمليات
التطبيق متجمد، المعالج مرتفع، تسريب في الذاكرة — كل هذه المشكلات تحتاج إلى البدء بفحص العمليات:
# عرض العمليات الأعلى استهلاكًا للمعالج
ps aux --sort=-%cpu | head -10
# عرض العمليات الأعلى استهلاكًا للذاكرة
ps aux --sort=-%mem | head -10
# البحث عن عملية محددة
ps aux | grep "node"
# عرض تفاصيل العملية (بما في ذلك الخيوط)
top -Hp <PID>
# عرض الملفات المفتوحة من قبل العملية
lsof -p <PID>
# إنهاء العملية بشكل لطيف (SIGTERM)
kill <PID>
# إنهاء قسري (SIGKILL، كحل أخير)
kill -9 <PID>5.3 تشخيص الشبكة
الخدمة لا تتصل؟ اكتشف أولاً ما إذا كانت المشكلة في الشبكة أم في التطبيق:
# اختبار إمكانية الوصول إلى الهدف
ping -c 4 google.com
# التحقق مما إذا كان المنفذ مفتوحًا
telnet db-server 3306
# أو باستخدام nc
nc -zv db-server 3306
# عرض المنافذ التي يستمع عليها الجهاز المحلي
ss -tlnp
# أو
netstat -tlnp
# التحقق من تحليل DNS
dig api.example.com
nslookup api.example.com
# اختبار واجهة HTTP
curl -v http://localhost:3000/health
# عرض إحصائيات حالة اتصالات الشبكة
ss -s5.4 فحص مساحة القرص
امتلاء القرص هو أحد أكثر الأعطال شيوعًا في بيئة الإنتاج:
# عرض استخدام كل قسم
df -h
# إيجاد أكثر الأدلة استهلاكًا للمساحة
du -sh /* 2>/dev/null | sort -rh | head -10
# تضييق النطاق لتحديد الأدلة الكبيرة
du -sh /var/log/* | sort -rh | head -10
# البحث عن ملفات كبيرة (>100 ميجابايت)
find / -type f -size +100M 2>/dev/null | head -20
# تنظيف المساحات الشائعة الاستهلاك
# تنظيف السجلات القديمة
sudo journalctl --vacuum-size=500M
# تنظيف صور Docker غير المستخدمة
docker system prune -a::: tip口诀 للتشخيص في بيئة الإنتاج "أولاً السجلات، ثانيًا العمليات، ثالثًا الشبكة، رابعًا القرص". 90% من مشكلات بيئة الإنتاج يمكن تحديد أسبابها من خلال هذه الخطوات الأربع. عندما تصبح هذه عادة، ستزداد كفاءة التشخيص بشكل كبير. :::
الخلاصة
Linux هو مهارة أساسية لكل مطور، وإتقان الأساسيات يمكّنك من التعامل مع معظم سيناريوهات التطوير والتشغيل اليومية.
مراجعة النقاط الرئيسية في هذا الفصل:
- كل شيء ملف: Linux يستخدم تجريد الملفات لتوحيد طريقة الوصول إلى موارد العتاد والعمليات والشبكة وغيرها
- دمج الأوامر: الأوامر الفردية بسيطة الوظائف، وقوتها الحقيقية تظهر عند دمجها عبر الأنبوب
| - نموذج الصلاحيات: مالك/مجموعة/آخرين × قراءة/كتابة/تنفيذ، استخدم الأرقام (مثل 755) للتعيين السريع
- أساسيات Shell: الأنابيب وإعادة التوجيه والمتغيرات البيئية والسكربتات هي حجر الأساس للأتمتة
- التشخيص العملي: السجلات → العمليات → الشبكة → القرص، أربع خطوات لتحديد معظم مشكلات بيئة الإنتاج
قراءة إضافية
- دليل أوامر Linux - وثائق Linux man pages الرسمية
- The Linux Command Line - كتاب مجاني لمقدمة سطر أوامر Linux
- Linux Journey - موقع تفاعلي لتعلم Linux
- explainshell.com - أدخل أمرًا واحصل على شرح تلقائي لكل معامل