# فصل هفتم: مدیریت نرم‌افزارها در لینوکس

## Linux Package Management

در فصل‌های گذشته با فایل‌ها، مجوزها، کاربران و ساختار داخلی لینوکس آشنا شدیم.

اکنون زمان آن رسیده است که یاد بگیریم چگونه نرم‌افزارها را در لینوکس نصب، حذف و مدیریت کنیم.

در هر سیستم‌عامل، نصب برنامه‌ها یکی از کارهای روزمره کاربران است.

در سیستم‌هایی مانند Windows معمولاً کاربران فایل نصب‌کننده را دانلود کرده و آن را اجرا می‌کنند.

اما در لینوکس، روش مدیریت نرم‌افزارها متفاوت است.

لینوکس از مفهومی به نام **Package Management** استفاده می‌کند.

Package Managerها وظیفه پیدا کردن، دانلود، نصب، به‌روزرسانی و حذف نرم‌افزارها را بر عهده دارند.

---

# Package چیست؟

Package یا بسته نرم‌افزاری، مجموعه‌ای از فایل‌ها است که برای نصب یک نرم‌افزار آماده شده است.

یک Package معمولاً شامل:

- فایل‌های برنامه
- فایل‌های تنظیمات
- اطلاعات مربوط به نسخه
- وابستگی‌های نرم‌افزاری
- دستورالعمل نصب

است.

به زبان ساده:

Package یک نسخه آماده از یک نرم‌افزار است که سیستم می‌تواند آن را مدیریت کند.

---

# چرا لینوکس از Package Manager استفاده می‌کند؟

در گذشته نصب نرم‌افزار در لینوکس می‌توانست پیچیده باشد.

کاربر باید:

- کد منبع برنامه را دریافت کند.
- آن را کامپایل کند.
- وابستگی‌ها را پیدا کند.
- تنظیمات لازم را انجام دهد.

Package Managerها این فرآیند را ساده کردند.

مزایای Package Manager:

- نصب سریع نرم‌افزارها
- مدیریت وابستگی‌ها
- دریافت نسخه‌های امن
- حذف کامل برنامه‌ها
- به‌روزرسانی آسان

---

# Repository چیست؟

Repository یا مخزن نرم‌افزار، سروری است که Packageهای مختلف در آن قرار دارند.

وقتی شما دستوری مانند:

    apt install firefox

را اجرا می‌کنید، سیستم ابتدا Repositoryها را بررسی می‌کند، سپس Package مورد نظر را دانلود و نصب می‌کند.

ساختار کلی:

    User
     |
     ▼
    Package Manager
     |
     ▼
    Repository
     |
     ▼
    Package

---

# تفاوت توزیع‌های لینوکس در Package Management

توزیع‌های مختلف لینوکس از Package Managerهای متفاوتی استفاده می‌کنند.

نمونه‌ها:

Debian و Ubuntu:

    APT

Fedora و Red Hat:

    DNF

Arch Linux:

    Pacman

در این کتاب تمرکز ما بر روی APT خواهد بود، زیرا Ubuntu و Debian از محبوب‌ترین توزیع‌های لینوکس هستند.

---

# APT چیست؟

APT مخفف:

    Advanced Package Tool

است.

APT ابزار اصلی مدیریت Package در سیستم‌های Debian-based است.

توسط APT می‌توان:

- نرم‌افزار نصب کرد.
- نرم‌افزار حذف کرد.
- سیستم را به‌روزرسانی کرد.
- اطلاعات Packageها را مشاهده کرد.

---

# به‌روزرسانی لیست Packageها

قبل از نصب نرم‌افزار بهتر است لیست Packageها را به‌روز کنیم.

دستور:

    sudo apt update

این دستور:

- Repositoryها را بررسی می‌کند.
- لیست نسخه‌های جدید را دریافت می‌کند.
- اطلاعات Packageها را به‌روزرسانی می‌کند.

نکته مهم:

این دستور خود نرم‌افزارها را آپدیت نمی‌کند؛ فقط اطلاعات موجود را تازه می‌کند.

---

# ارتقای نرم‌افزارها

برای به‌روزرسانی Packageهای نصب شده:

    sudo apt upgrade

استفاده می‌کنیم.

این دستور نسخه‌های جدید نرم‌افزارهای نصب شده را دریافت و نصب می‌کند.

---

# نصب نرم‌افزار با apt install

ساختار:

    sudo apt install package-name

مثال:

    sudo apt install git

در این فرآیند:

1. APT Package را پیدا می‌کند.
2. وابستگی‌ها را بررسی می‌کند.
3. فایل‌ها را دانلود می‌کند.
4. نرم‌افزار را نصب می‌کند.

---

# حذف نرم‌افزار

برای حذف یک Package:

    sudo apt remove package-name

مثال:

    sudo apt remove git

در این حالت برنامه حذف می‌شود، اما ممکن است فایل‌های تنظیمات باقی بمانند.

---

# حذف کامل نرم‌افزار

برای حذف برنامه همراه با تنظیمات:

    sudo apt purge package-name

مثال:

    sudo apt purge nginx

---

# جستجو در Packageها

برای پیدا کردن نرم‌افزار:

    apt search keyword

مثال:

    apt search python

لیستی از Packageهای مرتبط نمایش داده می‌شود.

---

# مشاهده اطلاعات یک Package

برای دریافت اطلاعات:

    apt show package-name

مثال:

    apt show python3

اطلاعاتی مانند:

- نسخه
- توضیحات
- حجم
- وابستگی‌ها

نمایش داده می‌شود.

---

# مشاهده Packageهای نصب شده

برای مشاهده لیست Packageها:

    apt list --installed

استفاده می‌شود.

---

# مفهوم Dependency

یکی از مهم‌ترین وظایف Package Managerها مدیریت Dependency است.

Dependency یعنی یک نرم‌افزار برای اجرا شدن به نرم‌افزارهای دیگری نیاز دارد.

مثال:

یک برنامه ممکن است به:

- کتابخانه خاص
- ابزار سیستمی
- نسخه مشخصی از یک Package

نیاز داشته باشد.

APT این وابستگی‌ها را به صورت خودکار مدیریت می‌کند.

---

# dpkg چیست؟

dpkg ابزار سطح پایین مدیریت Package در Debian است.

APT در واقع از dpkg برای نصب Packageها استفاده می‌کند.

مهم‌ترین کاربرد:

نصب فایل‌های:

    .deb

است.

---

# نصب فایل deb با dpkg

مثال:

    sudo dpkg -i package.deb

بعد از نصب ممکن است وابستگی‌هایی ناقص باشند.

برای اصلاح:

    sudo apt install -f

استفاده می‌کنیم.

---

# تفاوت apt و dpkg

| apt | dpkg |
|---|---|
| سطح بالا | سطح پایین |
| مدیریت وابستگی‌ها را انجام می‌دهد | وابستگی‌ها را خودکار حل نمی‌کند |
| از Repository استفاده می‌کند | فایل محلی deb را نصب می‌کند |
| مناسب استفاده روزمره است | برای مدیریت مستقیم Packageها استفاده می‌شود |

---

# پاک‌سازی Packageهای اضافی

گاهی Packageهایی باقی می‌مانند که دیگر استفاده نمی‌شوند.

برای حذف آن‌ها:

    sudo apt autoremove

استفاده می‌شود.

---

# بررسی فضای Package Cache

APT فایل‌های دانلود شده را ذخیره می‌کند.

برای پاک کردن Cache:

    sudo apt clean

استفاده می‌کنیم.

---

# نصب ابزارهای کاربردی اولیه

چند ابزار رایج:

نصب Git:

    sudo apt install git

نصب Python:

    sudo apt install python3

نصب curl:

    sudo apt install curl

نصب wget:

    sudo apt install wget

---

# مدیریت نرم‌افزارها در زندگی واقعی

یک کاربر حرفه‌ای لینوکس دائماً با Package Manager کار می‌کند.

مثال‌ها:

توسعه‌دهنده:

- نصب زبان‌های برنامه‌نویسی
- نصب کتابخانه‌ها
- نصب ابزارهای توسعه

مدیر سیستم:

- نصب سرویس‌ها
- به‌روزرسانی سرورها
- مدیریت امنیت

متخصص امنیت:

- نصب ابزارهای تحلیل
- مدیریت ابزارهای تست

---

# تمرین‌های فصل هفتم

## تمرین اول

به‌روزرسانی Repository:

    sudo apt update

---

## تمرین دوم

بررسی آپدیت‌ها:

    sudo apt upgrade

---

## تمرین سوم

نصب یک برنامه:

    sudo apt install tree

---

## تمرین چهارم

مشاهده اطلاعات برنامه:

    apt show tree

---

## تمرین پنجم

حذف برنامه:

    sudo apt remove tree

---

## تمرین ششم

پاک‌سازی Packageهای اضافی:

    sudo apt autoremove

---

# جمع‌بندی فصل هفتم

در این فصل یاد گرفتیم:

- Package چیست.
- Package Manager چه کاری انجام می‌دهد.
- Repository چیست.
- چگونه با APT نرم‌افزار نصب کنیم.
- چگونه نرم‌افزارها را حذف و به‌روزرسانی کنیم.
- تفاوت apt و dpkg چیست.
- Dependencyها چگونه مدیریت می‌شوند.

مدیریت Packageها یکی از مهارت‌های ضروری هر کاربر حرفه‌ای لینوکس است.

بدون شناخت Package Management، مدیریت سیستم‌های لینوکسی بسیار دشوار خواهد بود.

در فصل بعد وارد یکی از مهم‌ترین بخش‌های لینوکس می‌شویم:

**پردازش‌ها، سرویس‌ها و مدیریت منابع سیستم**
