चीट शीट

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' # केवल नाम से, regular expression के साथ
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। डिपेंडेंसी के रूप में लगे पैकेज «auto» चिह्नित होते हैं और ज़रूरत खत्म होने पर autoremove में आ जाते हैं। manual का चिह्न पैकेज को इससे बचाता है।

रिपॉज़िटरी: कैसे जोड़ें और वे कहाँ रहती हैं

स्रोतों की सूची /etc/apt/sources.list और /etc/apt/sources.list.d/*.list फ़ाइलों में रहती है। Ubuntu 24.04 और Debian 12+ पर deb822 फ़ॉर्मेट में .sources फ़ाइलें बढ़ती जा रही हैं (जैसे /etc/apt/sources.list.d/ubuntu.sources)।

key के साथ बाहरी रिपॉज़िटरी

आधुनिक तरीका है रिपॉज़िटरी की key अलग रखना और 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 पर निजी रिपॉज़िटरी हैं। केवल उन्हीं पर भरोसा करें जिन पर आपको यकीन है: उनके पैकेज 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 की जगह apt-get इस्तेमाल होता है: apt का इंटरफ़ेस स्थिर नहीं है, और वह खुद इस बारे में चेतावनी देता है (WARNING: apt does not have a stable CLI interface)। इंस्टॉलर सवाल न पूछे, इसके लिए DEBIAN_FRONTEND=noninteractive जोड़ा जाता है।

apt की आम गड़बड़ियाँ और उनके हल

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

कोई दूसरा प्रोसेस पैकेज पर काम कर रहा है: दूसरे टर्मिनल में apt, «सॉफ़्टवेयर सेंटर», या पृष्ठभूमि में 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 इंस्टॉल करने के बाद, या अलग-अलग डिस्ट्रीब्यूशन वर्ज़न के रिपॉज़िटरी मिलाने के बाद।

sudo apt --fix-broken install
sudo dpkg --configure -a
apt policy समस्या-वाला-पैकेज

dpkg was interrupted

इंस्टॉलेशन बीच में रुक गई (टर्मिनल बंद हुआ, बिजली गई)। संदेश खुद हल बताता है: sudo dpkg --configure -a।

apt update पर NO_PUBKEY

बाहरी रिपॉज़िटरी की साइनिंग key नहीं है या पुरानी है। प्रोजेक्ट की साइट से ताज़ा key /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 की इंस्टॉल और हटाने की history कहाँ देखें?

History /var/log/apt/history.log में लिखी जाती है (पुरानी प्रविष्टियाँ history.log.N.gz आर्काइव में हैं), और विस्तृत dpkg लॉग /var/log/dpkg.log में।

पैकेज का पिछला वर्ज़न कैसे लौटाएँ?

apt policy पैकेज से उपलब्ध वर्ज़न देखें, फिर sudo apt install पैकेज=वर्ज़न चलाएँ और apt-mark hold से उसे फ़िक्स करें, ताकि अगला अपडेट नया वर्ज़न वापस न लाए।

क्या apt CentOS या Fedora पर चल सकता है?

नहीं, वहाँ पैकेज का फ़ॉर्मेट अलग (rpm) है और मैनेजर भी अलग — dnf या yum। apt Debian, Ubuntu और उनसे बने डिस्ट्रीब्यूशन पर चलता है।

इस विषय को वीडियो में सीखें

यह विषय “Linux: с нуля до уверенного администрирования” कोर्स में अभ्यास के साथ विस्तार से समझाया गया है।

कोर्स पर जाएँ