Skip to content

أساسيات Linux

مقدمة

في عالم الخوادم، Linux هو البطل بلا منازع. أكثر من 90% من الخوادم حول العالم تعمل بنظام Linux، من تطبيق WeChat الذي تستخدمه يوميًا إلى بحث Google، كلها مدعومة بنظام Linux في الخلفية. كمطور، إتقان أساسيات Linux ليس خيارًا، بل هو ضرورة.

ماذا ستتعلم في هذا المقال؟

بعد إكمال هذا الفصل، ستكتسب:

  • نظام الملفات: فهم بنية أدلة Linux وفلسفة "كل شيء ملف"
  • الأوامر الشائعة: إتقان الأوامر الأساسية مثل معالجة الملفات والنصوص وإدارة العمليات
  • نموذج الصلاحيات: فهم مفاهيم المستخدمين والمجموعات والصلاحيات
  • أساسيات Shell: فهم المفاهيم الأساسية لـ Shell مثل الأنابيب وإعادة التوجيه والمتغيرات البيئية
  • مهارات عملية: تعلم المهارات الأساسية في التشغيل مثل عرض السجلات وفحص العمليات وتشخيص الشبكة
الفصلالمحتوىالمفاهيم الأساسية
الفصل 1نظام الملفاتبنية الأدلة، كل شيء ملف
الفصل 2الأوامر الشائعةالملفات، النصوص، العمليات، الشبكة
الفصل 3نموذج الصلاحياتالمستخدم، المجموعة، rwx، sudo
الفصل 4أساسيات Shellالأنابيب، إعادة التوجيه، المتغيرات، السكربتات
الفصل 5سيناريوهات عمليةفحص السجلات، تشخيص الأداء

1. نظام الملفات: كل شيء ملف

واحدة من أهم فلسفات Linux الأساسية هي كل شيء ملف. الملفات العادية هي ملفات، والأدلة هي ملفات، والأقراص الصلبة هي ملفات، وحتى اتصالات الشبكة ومعلومات العمليات كلها ملفات. هذا التجريد الموحد يسمح لك باستخدام نفس مجموعة الأدوات (القراءة، الكتابة، التحكم في الصلاحيات) للتعامل مع جميع موارد النظام تقريبًا.

Linux Filesystem Hierarchy
Click a directory to see what it is used for
📁/Root directory
⚙️/binEssential commands
📋/etcConfiguration files
🏠/homeUser home directories
📊/varVariable data
🗑️/tmpTemporary files
📦/usrUser programs
🔍/procProcess information
🔌/devDevice files
/
The starting point of the whole filesystem. Every directory and file begins here. In Linux, everything is a file, including devices and process information exposed through this directory tree.

اختصار بنية الأدلة

تخيل نظام ملفات 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 هو المعامل.

Linux Command Cheat Sheet
Browse common commands and examples by category
lsList files and directories
ls -la /home
cdChange directory
cd /var/log
cpCopy files
cp -r src/ backup/
mvMove or rename
mv old.txt new.txt
rmRemove files
rm -rf dist/
mkdirCreate directories
mkdir -p src/components
findFind files
find . -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إرسال طلبات HTTPclient URL
sshتسجيل الدخول عن بعدsecure shell

فن دمج الأوامر

قوة Linux لا تكمن في الأمر الواحد، بل في دمج الأوامر. باستخدام الأنبوب | لربط عدة أوامر بسيطة معًا، يمكنك حل مشكلات معقدة:

bash
# إيجاد أكثر 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

bash
$ ls -l app.js
-rwxr-xr-- 1 alice developers 2048 Jan 15 10:30 app.js
│├──┤├──┤├──┤
          └── حجم الملف
     └── المجموعة المالكة
     └── المالك
   └── صلاحيات الآخرين: r-- (قراءة فقط)
   └── صلاحيات المجموعة: r-x (قراءة+تنفيذ)
 └── صلاحيات المالك: rwx (قراءة+كتابة+تنفيذ)
└── نوع الملف: - ملف عادي، d دليل، l رابط

أنواع الصلاحيات الثلاثة

الصلاحيةالحرفالرقمالمعنى للملفاتالمعنى للأدلة
قراءةr4عرض محتوى الملفعرض محتويات الدليل (ls)
كتابةw2تعديل محتوى الملفإنشاء/حذف الملفات في الدليل
تنفيذx1تشغيل البرنامج/السكربتالدخول إلى الدليل (cd)
Linux Permission Decoder
Enter a numeric permission and inspect what it means
-rwxr-xr-x
Owner
Group
Others
Common permission combinations
644Normal file: owner can read/write, others read-only
755Executable file or directory: owner has full access
600Private file: only owner can read/write
777Fully 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)  → الآخرين: قراءة+تنفيذ
الصلاحيات الشائعةالمعنىالاستخدام النموذجي
644rw-r--r--الملفات العادية (المالك يكتب، الآخرون يقرؤون فقط)
755rwxr-xr-xالملفات القابلة للتنفيذ/الأدلة
600rw-------الملفات الخاصة (مثل مفاتيح SSH)
777rwxrwxrwxالجميع يقرأ ويكتب وينفذ (خطير، تجنب استخدامه)

sudo: الحصول على صلاحيات مرتفعة مؤقتًا

صلاحيات المستخدم العادي محدودة، بعض العمليات تحتاج صلاحيات root. sudo يتيح لك تنفيذ الأوامر مؤقتًا كهوية root:

bash
# المستخدم العادي لا يمكنه تعديل إعدادات النظام
$ 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، تؤثر على سلوك الأوامر:

bash
# عرض جميع المتغيرات البيئية
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. إنها نقطة البداية لأتمتة العمليات:

bash
#!/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
bash
# منح السكربت صلاحية التنفيذ وتشغيله
chmod +x deploy.sh
./deploy.sh

نصائح لتصحيح السكربتات

أضف set -ex في بداية السكربت: -e يجعل السكربت يتوقف فورًا عند حدوث خطأ (بدلاً من الاستمرار في التنفيذ)، و-x يطبع كل أمر يتم تنفيذه (لتسهيل اكتشاف المشكلات). هذان الخياران يعتبران أساسيين تقريبًا في سكربتات الإنتاج.


5. سيناريوهات عملية

انتهينا من النظري، لنلقِ نظرة على أكثر السيناريوهات العملية التي تواجهك في التطوير.

5.1 فحص السجلات

عندما تتعطل الخدمة، أول رد فعل هو النظر في السجلات. إليك الطرق الشائعة لفحص السجلات:

bash
# 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 فحص العمليات

التطبيق متجمد، المعالج مرتفع، تسريب في الذاكرة — كل هذه المشكلات تحتاج إلى البدء بفحص العمليات:

bash
# عرض العمليات الأعلى استهلاكًا للمعالج
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 تشخيص الشبكة

الخدمة لا تتصل؟ اكتشف أولاً ما إذا كانت المشكلة في الشبكة أم في التطبيق:

bash
# اختبار إمكانية الوصول إلى الهدف
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 -s

5.4 فحص مساحة القرص

امتلاء القرص هو أحد أكثر الأعطال شيوعًا في بيئة الإنتاج:

bash
# عرض استخدام كل قسم
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 هو مهارة أساسية لكل مطور، وإتقان الأساسيات يمكّنك من التعامل مع معظم سيناريوهات التطوير والتشغيل اليومية.

مراجعة النقاط الرئيسية في هذا الفصل:

  1. كل شيء ملف: Linux يستخدم تجريد الملفات لتوحيد طريقة الوصول إلى موارد العتاد والعمليات والشبكة وغيرها
  2. دمج الأوامر: الأوامر الفردية بسيطة الوظائف، وقوتها الحقيقية تظهر عند دمجها عبر الأنبوب |
  3. نموذج الصلاحيات: مالك/مجموعة/آخرين × قراءة/كتابة/تنفيذ، استخدم الأرقام (مثل 755) للتعيين السريع
  4. أساسيات Shell: الأنابيب وإعادة التوجيه والمتغيرات البيئية والسكربتات هي حجر الأساس للأتمتة
  5. التشخيص العملي: السجلات → العمليات → الشبكة → القرص، أربع خطوات لتحديد معظم مشكلات بيئة الإنتاج

قراءة إضافية