চিট শিট

apt কমান্ড: Ubuntu ও Debian-এ প্যাকেজ ইনস্টল, আপডেট ও মুছে ফেলা

হালনাগাদ: · Skillaria.Top

apt হলো Ubuntu ও Debian-এর প্যাকেজ ম্যানেজার: sudo apt update প্যাকেজ তালিকা আপডেট করে, sudo apt upgrade আপডেট ইনস্টল করে, sudo apt install নাম প্যাকেজ ইনস্টল করে, sudo apt remove মোছে (purge — কনফিগসহ), আর apt autoremove অপ্রয়োজনীয় নির্ভরতা সরায়। প্যাকেজ খুঁজতে apt search ও apt show, আর ভাঙা নির্ভরতা ঠিক করতে sudo apt --fix-broken install।

apt হলো Ubuntu, Debian ও তাদের ডেরিভেটিভের (Linux Mint, Pop!_OS) স্ট্যান্ডার্ড প্যাকেজ ম্যানেজার। এটি রিপোজিটরি থেকে প্রোগ্রাম নামায়, নির্ভরতা নিজে টেনে আনে এবং এক কমান্ডে সিস্টেম আপডেট করে। নিচে দৈনন্দিন কাজের সব apt কমান্ড কাজ অনুযায়ী সাজানো, সঙ্গে সাধারণ ভুল ও তার সমাধান।

apt কীভাবে কাজ করে

প্যাকেজ হলো একটি .deb আর্কাইভ, যাতে থাকে প্রোগ্রাম, মেটাডেটা ও নির্ভরতার তালিকা। রিপোজিটরি হলো সার্ভার, যেখানে প্যাকেজ থাকে; তাদের ঠিকানা লেখা থাকে /etc/apt/sources.list-এ এবং /etc/apt/sources.list.d/ ডিরেক্টরিতে। apt উপলব্ধ প্যাকেজের একটি স্থানীয় তালিকা রাখে এবং ইনস্টলের সময় সেটির সঙ্গেই মেলায়, তাই তা নিয়মিত আপডেট করতে হয়।

পর্দার আড়ালে apt চালায় নিম্ন স্তরের dpkg, যা প্যাকেজ আনপ্যাক ও নিবন্ধন করে, কিন্তু নির্ভরতা মেটাতে পারে না। apt-get ও apt-cache পুরোনো ইন্টারফেস — একই কার্যকারিতা, কিন্তু স্থির আউটপুট, তাই স্ক্রিপ্টে সুবিধাজনক। apt মানুষের জন্য নতুন মোড়ক: প্রোগ্রেস বার, রং, ছোট কমান্ড।

প্রায় সব পরিবর্তনমূলক কমান্ডের জন্য প্রশাসকের অধিকার লাগে, তাই তা sudo দিয়ে চালানো হয়। খোঁজা ও তথ্য দেখা ছাড়াই চলে।

চিট-শিট: মূল apt কমান্ড

কমান্ডকী করে
sudo apt updateরিপোজিটরি থেকে প্যাকেজের তালিকা আপডেট
sudo apt upgradeআপডেট ইনস্টল, কোনো প্যাকেজ না মুছে
sudo apt full-upgradeপ্রয়োজনে প্যাকেজ মুছে বা বদলে আপডেট
sudo apt install প্যাকেজপ্যাকেজ নির্ভরতাসহ ইনস্টল
sudo apt reinstall প্যাকেজপ্যাকেজ আবার ইনস্টল
sudo apt remove প্যাকেজপ্যাকেজ মোছা, কনফিগ রেখে
sudo apt purge প্যাকেজপ্যাকেজ এবং সিস্টেম কনফিগ সহ মোছা
sudo apt autoremoveঅপ্রয়োজনীয় হয়ে যাওয়া নির্ভরতা মোছা
apt search শব্দনাম ও বিবরণ দিয়ে প্যাকেজ খোঁজা
apt show প্যাকেজবিবরণ, ভার্সন, নির্ভরতা, আকার
apt list --installedইনস্টল করা প্যাকেজের তালিকা
apt list --upgradableকী আপডেট করা যায়
apt policy প্যাকেজইনস্টল করা ও উপলব্ধ ভার্সন, উৎস
sudo apt cleanডাউনলোড করা .deb-এর ক্যাশ পরিষ্কার
sudo apt --fix-broken installভাঙা নির্ভরতা মেরামত

apt update ও apt upgrade: সিস্টেম কীভাবে আপডেট করবেন

এটি দুটি ভিন্ন কাজ, এবং প্রায়ই গুলিয়ে ফেলা হয়। apt update কিছু ইনস্টল করে না: শুধু প্যাকেজের নতুন তালিকা নামায়। apt upgrade সেই তালিকার ভিত্তিতে ইনস্টল করা প্রোগ্রামের নতুন ভার্সন ইনস্টল করে।

$ sudo apt update
Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
Get:2 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB]
...
12 packages can be upgraded. Run 'apt list --upgradable' to see them.

$ apt list --upgradable
$ sudo apt upgrade

সার্ভারের জন্য সাধারণ জোড়া এক লাইনে, স্বয়ংক্রিয় সম্মতিসহ:

sudo apt update && sudo apt upgrade -y

upgrade ও full-upgrade-এর পার্থক্য

apt upgrade নতুন নির্ভরতা যোগ করতে পারে, কিন্তু ইনস্টল করা কোনো প্যাকেজ কখনো মোছে না। আপডেটের জন্য কিছু মুছতে হলে (যেমন কার্নেল বা লাইব্রেরির ভার্সন বদলের সময়) সেই প্যাকেজ «স্থগিত» হয় — আউটপুটে আসে The following packages have been kept back। apt full-upgrade (apt-get dist-upgrade-এর সমতুল্য) মোছা অনুমোদন করে এবং আপডেট সম্পূর্ণ করে। এর আগে apt কী মুছতে যাচ্ছে তা মনোযোগ দিয়ে পড়ুন।

শুধু একটি প্যাকেজ আপডেট

sudo apt install --only-upgrade nginx

প্যাকেজ ইনস্টল না থাকলে --only-upgrade-সহ কমান্ড সেটি ইনস্টল করবে না — ভুলবশত ইনস্টল থেকে রক্ষা করে।

apt install: প্যাকেজ ইনস্টল

sudo apt install nginx                 # একটি প্যাকেজ
sudo apt install git curl htop         # কয়েকটি একসঙ্গে
sudo apt install -y docker.io          # Y/n প্রশ্ন ছাড়া
sudo apt install nginx=1.24.0-2ubuntu7 # নির্দিষ্ট ভার্সন
sudo apt install --no-install-recommends ffmpeg  # সুপারিশকৃত প্যাকেজ ছাড়া
sudo apt install ./google-chrome-stable_current_amd64.deb  # স্থানীয় .deb

ইনস্টলের আগে apt দেখায় কোন প্যাকেজ যোগ হবে এবং কত জায়গা লাগবে, আর নিশ্চিত হতে চায়। -y ফ্ল্যাগ স্বয়ংক্রিয়ভাবে «হ্যাঁ» বলে — স্ক্রিপ্ট ও Dockerfile-এ সুবিধাজনক, কিন্তু হাতে কাজ করার সময় তালিকাটি পড়ে নেওয়া ভালো।

ডিফল্টভাবে apt শুধু বাধ্যতামূলক (Depends) নয়, সুপারিশকৃত (Recommends) নির্ভরতাও ইনস্টল করে। সার্ভার ও কন্টেইনারে --no-install-recommends আকার উল্লেখযোগ্যভাবে কমায়।

.deb ফাইল ইনস্টল: apt না dpkg -i

ডাউনলোড করা .deb ভালো হয় apt install ./ফাইল.deb দিয়ে — পথ অবশ্যই ./ দিয়ে শুরু বা সম্পূর্ণ হতে হবে, নইলে apt রিপোজিটরিতে ওই নামের প্যাকেজ খুঁজবে। dpkg -i-এর থেকে ভিন্ন, apt প্রয়োজনীয় নির্ভরতা নিজে নামায়। আপনি যদি dpkg দিয়ে প্যাকেজ ইনস্টল করেন এবং নির্ভরতার ত্রুটি পান, সেটি ঠিক করবে sudo apt --fix-broken install।

sudo dpkg -i package.deb
sudo apt --fix-broken install

apt remove, purge ও autoremove: প্যাকেজ মোছা

কমান্ডপ্রোগ্রাম/etc-এর কনফিগনির্ভরতা
apt removeমুছে যায়থেকে যায়থেকে যায়
apt purgeমুছে যায়মুছে যায়থেকে যায়
apt autoremove——অপ্রয়োজনীয়গুলো মুছে যায়
sudo apt remove nginx
sudo apt purge nginx            # একই + কনফিগ
sudo apt autoremove             # নির্ভরতার অবশিষ্টাংশ
sudo apt autoremove --purge     # অবশিষ্টাংশ ও তাদের কনফিগ একসঙ্গে

remove উপযুক্ত, যদি প্রোগ্রাম আবার ফিরিয়ে আনার ইচ্ছা থাকে এবং সেটিংস রাখতে চান। purge — পরিষ্কার নতুন করে ইনস্টলের জন্য। মনে রাখবেন: ব্যবহারকারীর হোম ডিরেক্টরির ফাইল (যেমন ~/.config) কোনো কমান্ডই মোছে না।

যেসব প্যাকেজ মোছা হয়েছে কিন্তু কনফিগ রেখে গেছে, সেগুলো খুঁজতে — তাদের অবস্থা rc:

dpkg -l | grep '^rc'

প্যাকেজ খোঁজা ও তথ্য

apt search postgresql          # নাম ও বিবরণ দিয়ে খোঁজা
apt search --names-only '^php8' # শুধু নামে, রেগুলার এক্সপ্রেশন সহ
apt show htop                  # ভার্সন, আকার, নির্ভরতা, বিবরণ
apt policy docker.io           # কোন ভার্সন উপলব্ধ এবং কোথা থেকে
apt list --installed | grep python3
apt-cache depends curl         # প্যাকেজটি কীসের ওপর নির্ভর করে
apt-cache rdepends libssl3     # প্যাকেজের ওপর কে নির্ভর করে

কোন প্যাকেজের ফাইল

$ dpkg -S /usr/bin/curl
curl: /usr/bin/curl

$ dpkg -L curl        # প্যাকেজ কোন ফাইল ইনস্টল করেছে

কমান্ড সিস্টেমে না থাকলে Ubuntu চালানোর চেষ্টায় নিজেই প্যাকেজের নাম জানিয়ে দেয় (বার্তা Command 'tree' not found, but can be installed with: sudo apt install tree)। ইনস্টল না করা প্যাকেজের ভেতরের ফাইল খুঁজতে আছে apt-file: sudo apt-file update-এর পর apt-file search bin/dig।

ভার্সন লক: apt-mark hold

কখনো কোনো প্যাকেজ আপডেট করা যাবে না — যেমন প্রোডাকশনে DBMS বা কার্নেলের ভার্সন শুধু হাতে বদলানো হয়। তখন প্যাকেজ «জমিয়ে» রাখা হয়:

sudo apt-mark hold postgresql-16
apt-mark showhold
sudo apt-mark unhold postgresql-16

আরেকটি কার্যকর জোড়া — apt-mark manual ও apt-mark auto। নির্ভরতা হিসেবে ইনস্টল হওয়া প্যাকেজ স্বয়ংক্রিয় চিহ্ন পায় এবং অপ্রয়োজনীয় হলে autoremove-এর আওতায় পড়ে। manual চিহ্ন প্যাকেজকে তা থেকে রক্ষা করে।

রিপোজিটরি: কীভাবে যোগ করবেন ও তারা কোথায় থাকে

উৎসের তালিকা থাকে /etc/apt/sources.list ও /etc/apt/sources.list.d/*.list-এ। Ubuntu 24.04 ও Debian 12+-এ .sources এক্সটেনশনসহ deb822 ফরম্যাট বেশি ব্যবহৃত হয় (যেমন /etc/apt/sources.list.d/ubuntu.sources)।

স্বাক্ষর কী সহ তৃতীয় পক্ষের রিপোজিটরি

আধুনিক উপায় হলো রিপোজিটরির কী আলাদা ফাইলে রাখা এবং signed-by দিয়ে যুক্ত করা। apt-key কমান্ড পুরোনো এবং নতুন সংস্করণে সরানো হয়েছে।

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update
sudo apt install docker-ce

Ubuntu-তে PPA

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo add-apt-repository --remove ppa:deadsnakes/ppa

PPA হলো Launchpad-এর ব্যক্তিগত রিপোজিটরি। শুধু বিশ্বাসযোগ্য উৎসের PPA যোগ করুন: সেখান থেকে প্যাকেজ root অধিকারে ইনস্টল হয়।

ক্যাশ ও ডিস্কের জায়গা

ডাউনলোড করা প্যাকেজ থাকে /var/cache/apt/archives/-এ। ছোট ডিস্কে ও Docker ইমেজে ক্যাশ নিয়মিত পরিষ্কার করা উচিত।

du -sh /var/cache/apt/archives
sudo apt clean          # সব .deb ক্যাশ মুছে
sudo apt autoclean      # শুধু পুরোনো ভার্সনের ক্যাশ মোছে

Dockerfile-এ ইনস্টল সাধারণত একটি স্তরে লেখা হয় এবং প্যাকেজ তালিকা সঙ্গে সঙ্গে মুছে ফেলা হয়:

RUN apt-get update \
 && apt-get install -y --no-install-recommends curl ca-certificates \
 && rm -rf /var/lib/apt/lists/*

স্ক্রিপ্টে apt-get ব্যবহার করা হয়, apt নয়: apt-এর ইন্টারফেস স্থির নয়, এবং সে নিজেই সতর্ক করে (WARNING: apt does not have a stable CLI interface)। ইনস্টলার যেন প্রশ্ন না করে, তার জন্য যোগ করা হয় DEBIAN_FRONTEND=noninteractive।

apt-এর সাধারণ ত্রুটি ও সমাধান

Could not get lock /var/lib/dpkg/lock-frontend

অন্য একটি প্রক্রিয়া প্যাকেজ নিয়ে কাজ করছে: আরেকটি টার্মিনালে apt, «Software Center», অথবা পটভূমির স্বয়ংক্রিয় আপডেট unattended-upgrades। কয়েক মিনিট অপেক্ষা করুন এবং দেখুন কে লক ধরে আছে:

ps aux | grep -E 'apt|dpkg'

প্রক্রিয়া চালু থাকলে হাতে lock-ফাইল মুছবেন না: বাধাগ্রস্ত ইনস্টল সিস্টেমকে অসঙ্গত অবস্থায় রেখে যেতে পারে। প্রক্রিয়াটি ঝুলে থাকলে বা মারা গেলে, সেটি শেষ হওয়ার পর চালান sudo dpkg --configure -a।

Unable to locate package

apt প্যাকেজ খুঁজে পায়নি। সবচেয়ে সাধারণ কারণ: নতুন সিস্টেমে sudo apt update দেওয়া হয়নি, নামে বানান ভুল, অথবা প্যাকেজ বন্ধ থাকা কম্পোনেন্টে (Ubuntu-তে universe)। কম্পোনেন্ট চালু হয় sudo add-apt-repository universe দিয়ে।

Unmet dependencies / held broken packages

নির্ভরতা মেলেনি — সাধারণত হাতে .deb ইনস্টলের পর বা বিভিন্ন distribution ভার্সনের রিপোজিটরি মেশানোর পর।

sudo apt --fix-broken install
sudo dpkg --configure -a
apt policy সমস্যাযুক্ত-প্যাকেজ

dpkg was interrupted

ইনস্টল মাঝপথে বাধা পেয়েছে (টার্মিনাল বন্ধ, বিদ্যুৎ গেছে)। বার্তাটি সরাসরি সমাধান বলে দেয়: sudo dpkg --configure -a।

apt update-এ NO_PUBKEY

তৃতীয় পক্ষের রিপোজিটরির স্বাক্ষর কী নেই বা পুরোনো। প্রকল্পের ওয়েবসাইট থেকে সর্বশেষ কী নামিয়ে /etc/apt/keyrings/-এ রাখুন এবং signed-by-এ উল্লেখ করুন, যেমন ওপরের Docker উদাহরণে।

স্বয়ংক্রিয় নিরাপত্তা আপডেট

Ubuntu Server-এ ডিফল্টভাবে unattended-upgrades প্যাকেজ থাকে, যা নিরাপত্তা আপডেট নিজে ইনস্টল করে। এটি যাচাই ও চালু করতে:

sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
cat /var/log/unattended-upgrades/unattended-upgrades.log

আপডেটের পর রিবুট দরকার কিনা দেখায় /var/run/reboot-required ফাইল: সেটি থাকলে কার্নেল বা গুরুত্বপূর্ণ লাইব্রেরি আপডেট হয়েছে।

সারসংক্ষেপ

মূল apt কমান্ড একটি ছোট চক্রে সীমাবদ্ধ: যেকোনো কাজের আগে update, ইনস্টলের জন্য install, আপডেটের জন্য upgrade, মোছার জন্য remove বা purge, আর পরিষ্কারের জন্য autoremove। ভার্সনের জন্য apt policy ও apt-mark hold, আর ভাঙার জন্য --fix-broken install ও dpkg --configure -a, এবং স্ক্রিপ্টে apt-get। প্যাকেজ ব্যবস্থাপনা Linux কোর্সে হাতে-কলমে শেখানো হয়।

সাধারণ প্রশ্ন

apt ও apt-get-এর পার্থক্য কী?

এগুলো একই প্যাকেজ সিস্টেমের দুটি ইন্টারফেস। apt টার্মিনালে কাজের জন্য সুবিধাজনক (প্রোগ্রেস, রং, ছোট কমান্ড), আর apt-get-এর আউটপুট স্থির, তাই স্ক্রিপ্ট ও Dockerfile-এর জন্য সুপারিশকৃত।

প্রতিটি ইনস্টলের আগে কি apt update দিতে হয়?

দরকার, যদি তালিকা অনেকদিন আপডেট না হয়ে থাকে: নইলে apt প্যাকেজ খুঁজে না পেতে পারে, অথবা এমন ভার্সন ডাউনলোডের চেষ্টা করতে পারে যা মিরর থেকে সরে গেছে, এবং 404 ত্রুটি দেবে।

apt-এর ইনস্টল ও মোছার ইতিহাস কোথায় দেখব?

ইতিহাস লেখা হয় /var/log/apt/history.log-এ (পুরোনো রেকর্ড history.log.N.gz আর্কাইভে), আর বিস্তারিত dpkg লগ থাকে /var/log/dpkg.log-এ।

কোনো প্যাকেজ আগের ভার্সনে ফিরিয়ে আনব কীভাবে?

apt policy প্যাকেজ দিয়ে উপলব্ধ ভার্সন দেখুন, তারপর sudo apt install প্যাকেজ=ভার্সন চালান, এবং পরের আপডেটে নতুন ভার্সন ফিরে না আসার জন্য apt-mark hold দিন।

CentOS বা Fedora-তে apt ব্যবহার করা যায় কি?

না, সেখানে ভিন্ন প্যাকেজ ফরম্যাট (rpm) এবং নিজস্ব ম্যানেজার — dnf ও yum। apt চলে Debian, Ubuntu ও তাদের ডেরিভেটিভে।

ভিডিওতে বিষয়টি শিখুন

“Linux: с нуля до уверенного администрирования” কোর্সে বিষয়টি অনুশীলনসহ বিস্তারিত শেখানো হয়েছে।

কোর্সে যান