Linux: إدارة الحزم — apt / dpkg / snap وتثبيت البرامج
في لينكس، لا تحتاج لزيارة مواقع ويب لتحميل ملفات exe — مدير الحزم يتولى التثبيت بأمر واحد. التوزيعات المختلفة تستخدم مديري حزم مختلفين، لكن المفاهيم الأساسية واحدة.
📋 المتطلبات المسبقة: يجب أن تعرف بالفعل
- الدرس 17: إدارة العمليات
1. ما ستتعلمه
- apt: تحديث/تثبيت/إزالة/بحث
- dpkg: تثبيت حزم deb المحلية
- إضافة مصادر PPA الطرف الثالث
- snap/flatpak: الحزم المعزولة
- pip/npm/cargo: مديرو حزم على مستوى اللغة
2. قصة تثبيت Nginx
(1) نقطة الألم: على ويندوز، تثبيت البرامج يعني البحث في الويب، والتحميل، والنقر المزدوج، والضغط على "التالي"
احتاج شياو مينغ تثبيت Nginx على Ubuntu. بالغريزة فتح المتصفح وبحث عن "nginx download."
(2) apt يفعلها في سطر واحد
قال بوب: "تثبيت Nginx على Ubuntu يحتاج أمرًا واحدًا فقط."
sudo apt update
sudo apt install nginx -y
بعد 30 ثانية كان Nginx مثبتًا — الاعتماديات عُولجت تلقائيًا، وملفات الخدمة أُنشئت، والتشغيل مع بدء النظام خُصّص.
(3) الفائدة: مديرو الحزم غيّروا طريقة تثبيتنا
اكتشف شياو مينغ أن apt لا يثبّت البرامج فحسب بل يتعامل تلقائيًا مع كل علاقات الاعتمادية. لم يعُد يحمل ملفات exe أو dmg يدويًا.
3. نقاط المعرفة
(1) apt — مدير حزم Debian/Ubuntu
# تحديث قوائم مصادر الحزم
sudo apt update
# ترقية كل الحزم المثبتة
sudo apt upgrade -y
> 💡 نصيحة: `apt update && apt upgrade -y` هو المزيج الذهبي لصيانة النظام — `update` يحدّث قائمة مصادر الحزم، و`upgrade` يرقّي الحزم المثبتة. شغّل `update` دائمًا قبل تثبيت برامج جديدة، وإلا قد لا تجد أحدث إصدار.
# تثبيت برامج
sudo apt install nginx -y
sudo apt install curl wget git vim -y # تثبيت عدة برامج دفعة واحدة
# إزالة برامج
sudo apt remove nginx # يحتفظ بملفات الإعدادات
sudo apt purge nginx # يحذف ملفات الإعدادات أيضًا
# بحث
apt search "web server"
apt show nginx # عرض معلومات الحزمة
# تنظيف
sudo apt autoremove # إزالة الاعتماديات غير اللازمة
sudo apt autoclean # تنظيف ذاكرة التحميل المؤقتة
(2) dpkg — تثبيت حزم deb المحلية
# تثبيت ملف .deb محلي
sudo dpkg -i package.deb
# إذا كانت اعتماديات مفقودة، أصلحها بـapt
sudo apt install -f
# عرض الحزم المثبتة
dpkg -l | grep nginx
dpkg -L nginx # عرض الملفات التي ثبّتها الحزمة
# إزالة
sudo dpkg -r package_name # إزالة
sudo dpkg -P package_name # إزالة كاملة (بما فيها ملفات الإعدادات)
(3) مصادر البرامج وPPA
# قائمة مصادر الحزم
cat /etc/apt/sources.list
# إضافة PPA (أرشيف حزم شخصي)
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.12
# ترتيب أولوية مصادر برامج Ubuntu
# 1. /etc/apt/sources.list
# 2. /etc/apt/sources.list.d/*.list
(4) snap/flatpak — الحزم المعزولة
# snap (مدمج في Ubuntu)
snap find "code" # بحث
sudo snap install code --classic # تثبيت VS Code
sudo snap install lxd # تثبيت LXD
sudo snap refresh # تحديث كل حزم snap
sudo snap remove code # إزالة
# مميزات snap: تحديث تلقائي، عزل بصندوق رملي، عبر التوزيعات
ℹ️ ملاحظة: apt وsnap وflatpak هي ثلاث حلول تعبئة مختلفة — apt يثبّت حزم النظام الأصلية (أفضل أداء، أخف)، بينما snap/flatpak حزم معزولة (عزل أفضل، تحديثات تلقائية، لكن بدء أبطأ قليلًا واستهلاك قرص أكبر). فضّل apt للاستخدام اليومي؛ اختر snap/flatpak عندما تحتاج دعمًا عبر التوزيعات أو عزلًا بصندوق رملي.
(5) مديرو حزم على مستوى اللغة
# Python
pip install requests # تثبيت حزمة Python
pip install -r requirements.txt # تثبيت من ملف
pip list # عرض الحزم المثبتة
pip uninstall requests # إزالة
pip freeze > requirements.txt # تصدير الاعتماديات
# Node.js
npm install express # تثبيت حزمة
npm install -g typescript # تثبيت عام
npm list # عرض الحزم المثبتة
npx create-react-app my-app # تشغيل دون تثبيت
# Rust
cargo install ripgrep # تثبيت أداة
cargo add serde # إضافة اعتمادية للمشروع
(6) ▶ مثال: عمليات apt الأساسية
# 1. تحديث مصادر الحزم
sudo apt update
# 2. تثبيت أدوات تطوير شائعة
sudo apt install -y build-essential curl wget git vim htop
# 3. البحث عن حزمة
apt search "text editor" | grep -i "vim\|nano"
# 4. عرض معلومات الحزمة
apt show htop
# 5. إزالة
sudo apt remove htop
sudo apt autoremove # تنظيف الاعتماديات غير اللازمة
الإخراج:
TEXTHit:1 http://archive.ubuntu.com/ubuntu jammy InRelease Get:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [119 kB] Fetched 119 kB in 1s Reading package lists... Done Reading package lists... Done Building dependency tree... Done The following NEW packages will be installed: build-essential curl wget git vim htop 0 upgraded, 6 newly installed, 0 to remove Need to get 12.3 MB of archives. Setting up build-essential (12.9ubuntu3) ... Setting up curl (7.81.0-1) ... vim - Vi IMproved - enhanced vi editor htop - interactive processes viewer Package: htop Version: 3.0.5-7build2 Priority: optional Section: utils Reading package lists... Done Building dependency tree... Done The following packages will be REMOVED: htop 0 upgraded, 0 newly installed, 1 to remove Reading package lists... Done Building dependency tree... Done The following packages will be REMOVED: libhwloc5 0 upgraded, 0 newly installed, 1 to remove
(7) ▶ مثال: تثبيت حزمة محلية بdpkg
# تحميل حزمة .deb الخاصة بـVS Code
wget https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64 -O code.deb
# تثبيت
sudo dpkg -i code.deb
# إذا أُبلغ عن مشاكل اعتماديات، أصلحها
sudo apt install -f
# عرض الملفات التي ثبّتها VS Code
dpkg -L code | head -20
الإخراج:
TEXT--2026-07-07 10:23:01-- https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64 Resolving code.visualstudio.com... 20.190.159.4 HTTP request sent, awaiting response... 302 Found Length: 95000000 (90M) [application/octet-stream] Saving to: 'code.deb' code.deb 100%[==========>] 90.51M 5.2MB/s in 18s Selecting previously unselected package code. Setting up code (1.89.1-1716721786) ... /usr/share/code/code /usr/share/code/resources/app/package.json /usr/share/code/resources/app/product.json /usr/bin/code /usr/share/applications/code.desktop /usr/share/icons/hicolor/512x512/apps/code.png
(8) ▶ مثال: إضافة PPA لتثبيت إصدار أحدث من Python
# Ubuntu 22.04 الافتراضي هو Python 3.10؛ لتثبيت Python 3.12 تحتاج PPA
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt update
sudo apt install -y python3.12 python3.12-venv python3.12-distutils
# تأكد
python3.12 --version
الإخراج:
TEXTHit:1 http://archive.ubuntu.com/ubuntu jammy InRelease Hit:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease Get:3 http://ppa.launchpadcontent.net/deadsnakes/ppa/ubuntu jammy InRelease [23.8 kB] Fetched 23.8 kB in 1s Reading package lists... Done The following NEW packages will be installed: python3.12 python3.12-venv python3.12-distutils Setting up python3.12 (3.12.4-1+jammy1) ... Python 3.12.4
(9) ▶ مثال: إدارة حزم Python بpip
# تثبيت إطار عمل Flask
pip install flask
# إنشاء قائمة اعتماديات
pip freeze > requirements.txt
# تثبيت نفس الاعتماديات على آلة أخرى
pip install -r requirements.txt
# تثبيت في دليل المستخدم (لا حاجة لـsudo)
pip install --user black
الإخراج:
TEXTCollecting flask Downloading flask-3.0.3-py3-none-any.whl (101 kB) Installing collected packages: flask Successfully installed flask-3.0.3 flask==3.0.3 werkzeug==3.0.3 jinja2==3.1.4 Collecting black Downloading black-24.4.2-py3-none-manylinux1_x86_64.whl (2.2 MB) Installing collected packages: black Successfully installed black-24.4.2
(10) ▶ مثال: إيجاد مسارات الحزم المثبتة
# عرض أي الأدلة ثُبّت فيها nginx
dpkg -L nginx | head -10
# عرض ملفات إعدادات nginx
dpkg -L nginx | grep -E "\.conf$"
# إيجاد أي حزمة ينتمي إليها أمر
dpkg -S /usr/bin/htop
# htop: /usr/bin/htop
# عكسي — إيجاد أي حزمة ينتمي إليها ملف
dpkg -S /etc/nginx/nginx.conf
# nginx: /etc/nginx/nginx.conf
الإخراج:
TEXT/etc/nginx/nginx.conf /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default /usr/sbin/nginx /var/www/html/index.html /etc/nginx/nginx.conf /etc/nginx/sites-available/default htop: /usr/bin/htop nginx: /etc/nginx/nginx.conf
(11) ▶ مثال شامل: إعداد بيئة تطوير ويب من الصفر
#!/bin/bash
# setup-web-env.sh - إعداد بيئة تطوير ويب من الصفر
set -e
echo "=== Setting Up Web Development Environment ==="
# 1. تحديث النظام
echo ">>> Updating package sources..."
sudo apt update
sudo apt upgrade -y
# 2. تثبيت الأدوات الأساسية
echo ">>> Installing basic tools..."
sudo apt install -y build-essential curl wget git vim htop net-tools
# 3. تثبيت Nginx
echo ">>> Installing Nginx..."
sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
# 4. تثبيت Node.js
echo ">>> Installing Node.js 20..."
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
> ⚠️ تحذير: نمط `curl | bash` (تحميل سكريبت من الإنترنت وتنفيذه مباشرة) يحمل مخاطر هجوم سلسلة التوريد — إذا خُترق الخادم أو اختُطف DNS، فقد يُنفَّذ كود خبيث. على خوادم الإنتاج، حمّل السكريبت أولًا، وراجع محتواه، ثم نفذه، أو فضّل المستودعات الرسمية للتوزيعة.
# 5. تثبيت Python 3 + pip
echo ">>> Installing Python 3..."
sudo apt install -y python3 python3-pip python3-venv
# 6. تثبيت Docker
echo ">>> Installing Docker..."
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER
# 7. تأكد
echo ""
echo "=== Environment Verification ==="
echo "Nginx: $(nginx -v 2>&1)"
echo "Node.js: $(node --version)"
echo "npm: $(npm --version)"
echo "Python: $(python3 --version)"
echo "Git: $(git --version)"
echo "Docker: $(docker --version)"
echo ""
echo "✅ Environment setup complete! Some changes (like Docker) require re-login to take effect."
❓ أسئلة شائعة
س: ما الفرق بين
apt updateوapt upgrade؟ ج:apt updateيحدّث فهرس الحزم المحلي (قائمة الحزم المتاحة وإصداراتها).apt upgradeيرقّي فعليًا الحزم المثبتة لإصدارات أحدث. شغّلupdateدائمًا قبلupgrade.
س: ما الفرق بين
apt removeوapt purge؟ ج:apt removeيزيل الحزمة لكن يحتفظ بملفات إعداداتها.apt purgeيزيل الحزمة ويحذف ملفات إعداداتها أيضًا. استخدمpurgeإذا أردت إزالة نظيفة.
س: كيف أرى أي ملفات ثبّتها حزمة؟ ج:
dpkg -L package_nameيعرض كل الملفات التي ثبّتها حزمة.dpkg -S /path/to/fileيفعل العكس — يجد أي حزمة ينتمي إليها ملف.
س: هل PPAs آمنة؟ ج: PPAs مصادر يديرها طرف ثالث بمستوى أمان أقل من المستودعات الرسمية. أضف فقط PPAs رسمية من مشاريع معروفة (مثل deadsnakes وnginx وgit-core). PPAs مجهولة تحمل مخاطر أمنية.
س: ماذا أفعل بشأن تعارضات الاعتماديات؟ ج: جرّب أولًا
sudo apt install -fللإصلاح. إذا فشل، تحقق من تعارضات PPA (عطّل PPAs المتعارضة). كملاذ أخير، حمّل حزم.debيدويًا وثبّتها بـdpkg -i.
📖 ملخص
- Debian/Ubuntu:
apt install/remove/purge/update/upgrade - حزم محلية:
dpkg -iلتثبيت.deb، وapt install -fلإصلاح الاعتماديات - مصادر طرف ثالث:
add-apt-repository ppa:xxx/yyy - حزم اللغات:
pip installلـPython، وnpm installلـNode.js apt autoremoveينظف الاعتماديات غير اللازمة
📝 تمارين
- أساسي (⭐): استخدم apt لتثبيت htop وtree، وتأكد من التثبيت، ثم استخدم
dpkg -Lلعرض الملفات التي ثبّتها htop - متوسط (⭐⭐): استخدم
apt search "database"للبحث عن قاعدة بيانات وتثبيتها (مثل PostgreSQL أو SQLite)، ثم استخدم pip لتثبيت حزمة Python (مثلrequestsأوflask) - متقدم (⭐⭐⭐): اكتب سكريبت إعداد بيئة بنقرة واحدة يثبّت git/vim/htop/nginx/nodejs/python3، ويتحقق مما إذا كانت كل أداة مثبتة فعلًا لتجنب التكرار، ويُخرج تقرير تأكد من الإصدارات في النهاية