APT و Snap در Ubuntu
آموزش کامل دو سیستم مدیریت بستهٔ Ubuntu: APT برای بستههای deb کلاسیک و Snap برای بستههای کانتینری، بههمراه مقایسه و رفع خطاهای رایج.
Ubuntu همزمان از دو سیستم مدیریت بسته استفاده میکند: APT برای بستههای کلاسیک Debian با پسوند .deb و Snap برای بستههای کانتینری. در این آموزش با هر دو، تفاوتها و کاربردهای آنها آشنا میشوید.
APT چیست؟
APT (Advanced Package Tool) سیستم مدیریت بستهٔ کلاسیک Debian است که در Ubuntu هم پیشفرض است. APT بستههای با پسوند .deb را از مخازن نصب میکند و وابستگیها را بهصورت خودکار حل میکند.
دستورات پایهٔ APT
# بهروزرسانی فهرست بستهها
sudo apt update
# نصب یک بسته
sudo apt install nmap
# نصب چند بسته همزمان
sudo apt install nmap wireshark tcpdump
# نصب بدون پرسش تأیید
sudo apt install -y nmap
# ارتقای بستههای نصبشده
sudo apt upgrade
# ارتقای کامل (ممکن است بستهها را حذف/جایگزین کند)
sudo apt full-upgrade
# حذف بسته (نگهداشتن فایلهای پیکربندی)
sudo apt remove nmap
# حذف کامل بسته و فایلهای پیکربندی
sudo apt purge nmap
# حذف وابستگیهای یتیم
sudo apt autoremove
# پاکسازی کش بستهها
sudo apt cleanتفاوت update و upgrade
apt update فقط فهرست بستهها را بهروز میکند و هیچ بستهای نصب نمیکند. apt upgrade بستههای نصبشده را به نسخههای جدید ارتقا میدهد. این دو را با هم اشتباه نگیرید.
جستجو و اطلاعات بسته
# جستجوی بسته
apt search nmap
# اطلاعات بسته
apt show nmap
# لیست بستههای نصبشده
apt list --installed
# بستههای قابل ارتقا
apt list --upgradable
# فایلهای یک بسته
dpkg -L nmap
# بستهٔ صاحب یک فایل
dpkg -S /usr/bin/nmapنصب بستهٔ deb دستی
اگر فایل .deb را مستقلاً دانلود کردهاید:
# روش پیشنهادی: apt با حل خودکار وابستگیها
sudo apt install ./package.deb
# روش قدیمی dpkg (بدون حل وابستگی)
sudo dpkg -i package.deb
sudo apt install -f # رفع وابستگیهای گمشدهعلامت ./ مهم است
در apt install ./package.deb علامت ./ به APT میگوید که این یک فایل محلی است، نه نام بسته. بدون این علامت، APT بهدنبال بستهای به نام package.deb در مخازن میگردد.
Snap چیست؟
Snap سیستم مدیریت بستهٔ کانتینری Canonical است که بستههای Snap را بهصورت ایزوله، همراه با تمام وابستگیهایشان، ارائه میدهد. هر Snap در یک sandbox اجرا میشود و با سیستمعامل بهصورت محدود ارتباط دارد.
مزایای Snap
- وابستگیهای خود را همراه دارد (نه تداخل با بستههای سیستم)
- نسخههای جدید نرمافزار بدون انتظار برای بهروزرسانی مخازن
- بهروزرسانی خودکار در پسزمینه
- Rollback به نسخهٔ قبلی در صورت مشکل
- کاربرد یکسان روی Ubuntu، Debian، Fedora، Arch و...
معایب Snap
- حجم بیشتر (وابستگیهای تکراری)
- بوت کندتر (بهخصوص Firefox)
- فضای بیشتر روی دیسک
- Sandbox ممکن است دسترسی به فایلها را محدود کند
Snap در Ubuntu
در Ubuntu، Snap بهطور پیشفرض نصب و فعال است. برنامههای مانند Firefox، Thunderbird، Software (App Center) و بسیاری از برنامههای دیگر بهصورت Snap نصب میشوند. اگر نمیخواهید Snap استفاده کنید، باید نسخهٔ deb را از PPA یا Flatpak جایگزین کنید.
دستورات پایهٔ Snap
# نصب یک بسته
sudo snap install code --classic
# جستجوی بسته
snap find browser
# لیست بستههای نصبشده
snap list
# اطلاعات بسته
snap info code
# بهروزرسانی همهٔ snapها
sudo snap refresh
# بهروزرسانی یک snap خاص
sudo snap refresh code
# برگشت به نسخهٔ قبلی
sudo snap revert code
# حذف بسته
sudo snap remove code
# مشاهدهٔ تغییرات اخیر
snap changesمفهوم confinement
Snap بستهها را در سه سطح confinement ارائه میدهد:
| سطح | توضیح | مثال |
|---|---|---|
| strict | دسترسی فقط از طریق interfaceها | اکثر برنامهها |
| classic | دسترسی کامل به سیستم (مانند بستههای deb) | VS Code، Docker، IDEها |
| devmode | حالت توسعه، همهٔ دسترسیها | تست برنامههای در حال توسعه |
# نصب snap با دسترسی classic (لازم برای IDEها)
sudo snap install code --classic
# نصب در حالت strict (پیشفرض)
sudo snap install vlcچرا some snapها --classic میخواهند؟
برنامههایی مانند VS Code، CLion یا Docker نیاز به دسترسی کامل به فایلهای کاربر و سیستم دارند. این برنامهها با --classic نصب میشوند تا sandbox را دور بزنند. بدون این پرچم، نصب با خطا مواجه میشود.
بهروزرسانی خودکار Snap
Snap بهطور پیشفرض روزانه ۴ بار بهروزرسانی میکند. میتوان این رفتار را کنترل کرد:
# مشاهدهٔ تنظیمات refresh
snap refresh --time
# خروجی:
# auto-refresh: last today at 09:00 UTC, next tomorrow at 07:30 UTC
# timer: 00:00~24:00/4
# تنظیم زمان بهروزرسانی (مثلاً فقط آخر هفته)
sudo snap set system refresh.timer=sat,sun,02:00
# توقف موقت بهروزرسانی (تا ۹۰ روز)
sudo snap refresh --hold=90d
# توقف دائمی برای یک بسته
sudo snap set code refresh.hold=foreverمدیریت نسخههای Snap
Snap چندین نسخه از هر بسته را نگه میدارد (پیشفرض ۲ نسخه):
# مشاهدهٔ نسخههای نگهداشتهشده
snap list --all code
# خروجی:
# Name Version Rev Tracking Publisher Notes
# code 89.0 123 stable microsoft✓ classic
# code 88.0 122 stable microsoft✓ classic,disabled
# حذف نسخههای قدیمی (disabled)
sudo snap remove code --revision=122
# پاکسازی خودکار همهٔ نسخههای قدیمی
sudo snap set system refresh.retain=2پاکسازی نسخههای قدیمی Snap
برای آزادسازی فضای دیسک، میتوانید اسکریپت زیر را اجرا کنید تا تمام نسخههای disabled حذف شوند:
sudo snap list --all | awk '/disabled/{print $1, $3}' | while read name rev; do sudo snap remove "$name" --revision="$rev"; doneمقایسهٔ APT و Snap
| ویژگی | APT (deb) | Snap |
|---|---|---|
| نوع بسته | deb باینری | squashfs کانتینری |
| وابستگیها | مشترک با سیستم | همراه با بسته |
| حجم | کمتر | بیشتر |
| بهروزرسانی | دستی | خودکار |
| بوت | بدون تأثیر | ممکن است کند کند |
| Sandboxing | ندارد | دارد |
| نسخههای چندگانه | پشتیبانی محدود | پشتیبانی کامل |
| منبع | مخازن Ubuntu/PPA | Snap Store |
| Rollback | ندارد | دارد |
کجا از کدام استفاده کنیم؟
از APT برای ابزارهای سیستمی، کتابخانهها و برنامههای پایدار استفاده کنید. از Snap برای برنامههای کاربردی با بهروزرسانی مکرر (مرورگر، IDE، Docker) استفاده کنید.
ابزار App Center
Ubuntu 24.04 به بعد، از ابزار گرافیکی App Center (مشتری snap-store) استفاده میکند که هم بستههای Snap و هم بستههای deb را در یک رابط ارائه میدهد:
# اجرای App Center از ترمینال
snap-storeخطاهای رایج
۱. خطای lock در APT
E: Could not get lock /var/lib/dpkg/lock-frontend
It is held by process 12345 (apt)راهحل: صبر کنید تا فرآیند قبلی تمام شود. اگر نشد:
sudo killall apt apt-get dpkg
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock-frontend
sudo dpkg --configure -a۲. Snap سرعت بوت را کم کرده
راهحل:
# غیرفعالکردن بهروزرسانی خودکار موقت
sudo snap set system refresh.hold="$(date --date='60 days' +%Y-%m-%dT%H:%M:%S%:z)"
# یا نصب نسخهٔ deb برنامهها بهجای Snap
# مثلاً نصب Firefox از PPA Mozilla Team
sudo add-apt-repository ppa:mozillateam/ppa -y
sudo apt install -y firefox-esr۳. Snap نمیتواند نصب شود
error: cannot install "code": classic confinement requires --classicراهحل: پرچم --classic را اضافه کنید:
sudo snap install code --classic۴. snap find کند است
راهحل: اتصال اینترنت را بررسی کنید. اگر پشت پروکسی هستید:
sudo snap set system proxy.http="http://proxy:8080"
sudo snap set system proxy.https="http://proxy:8080"۵. برنامهٔ Snap به فایلهای سیستم دسترسی ندارد
راهحل: با interfaceهای snap مشکل را حل کنید:
# مشاهدهٔ interfaceهای یک snap
snap connections code
# اتصال دستی یک interface
sudo snap connect code:removable-mediaخلاصه و مرحلهٔ بعد
APT و Snap دو سیستم مدیریت بستهٔ Ubuntu با فلسفههای متفاوتاند. APT برای بستههای کلاسیک سیستم و Snap برای برنامههای کانتینری با وابستگیهای ایزوله. درک تفاوت این دو به شما کمک میکند انتخاب درست را برای هر نیاز داشته باشید.
بهعنوان گام بعدی:
- آموزش PPA و مخازن را برای افزودن مخازن شخصی ببینید
- آموزش Flatpak را برای جایگزین Snap بخوانید
- آموزش بهروزرسانی سیستم را برای روتین نگهداری دنبال کنید
این صفحه در تاریخ ۹ تیر ۱۴۰۵ بهروزرسانی شده است.