मैं अप्रचलित पैकेजों की एक सूची कैसे प्राप्त करूं?


19

मैं उन पैकेजों की एक सूची प्राप्त करने का एक तरीका निकालने की कोशिश कर रहा हूं जो अब मेरे द्वारा सक्षम किए गए रिपॉजिटरी में उपलब्ध नहीं हैं। यह कार्य केंद्र उबंटू के कुछ संस्करणों के माध्यम से रहा है और कई 3 पार्टी रिपोजिटरी को जोड़ा और हटाया गया है। मैं सॉफ्टवेयर की एक सूची प्राप्त करना चाहता हूं जो मेरे पास इन हटाए गए रिपॉजिटरी से है, इसलिए मैं इसे साफ कर सकता हूं या उपयुक्त रिपॉजिटरी को वापस जोड़ सकता हूं।

जवाबों:


23
aptitude search '~o'

एप्टीट्यूड में कुछ बहुत शक्तिशाली खोज उपलब्ध है। दुर्भाग्य से वाक्यविन्यास थोड़ा अस्पष्ट है और आपको प्रलेखन खोजने के लिए मैनपेज को खोदना होगा, लेकिन इसके लायक है।

उपयुक्त शो-संस्करण भी सहायक हो सकते हैं:

apt-show-versions | grep 'No available version'

1
यहाँ अप्रचलित पैकेजों के बारे में एक अच्छा लेख देखें: raphaelhertzog.com/2011/02/07/…
Lluís

एक और उपयोगी सूचीapt-show-versions | grep "newer than version in archive"
शॉन

मुझे लगता है कि उपयुक्त-शो-संस्करण केवल इसलिए सबसे अच्छा है क्योंकि एप्टीट्यूड लाइन याद रखने के लिए बेहद जवाबी है। हर बार जब मुझे इसकी आवश्यकता होती है तो मुझे इसे गूगल करना पड़ता है / इसे देखना / सहेजना / स्क्रिप्ट बनाना / आदि करना पड़ता है।
j riv

6

उन ऐप्स की सूची प्राप्त करने के लिए जो एक पंजीकृत रिपॉजिटरी या पीपीए में नहीं हैं:

sudo apt-get install apt-show-versions
apt-show-versions | grep 'No available version'

इस तरह से टेक्स्ट को आउटपुट करना चाहिए:

app1 1.0.0.14 installed: No available version in archive
app23 0.3.6 installed: No available version in archive
app332 7.0.9377 installed: No available version in archive

मेरे लिए यह काम किया और तीन ऐप्स दिखाए जिन्हें मैंने डीईबी पैकेजों का उपयोग करके स्थापित किया था और एक रेपो या पीपीए में उपलब्ध नहीं थे।

हालांकि याद रखें कि सभी कार्यक्रमों के लिए जांचना असंभव है, केवल वही जो गुजरता था dpkg। उदाहरण के लिए, कुछ एप्लिकेशन बस उन्हें सही फ़ोल्डर में निकालने से स्थापित होते हैं, या अन्य एक स्टैंडअलोन इंस्टॉलर बिन या स्क्रिप्ट का उपयोग करते हैं। तो आपके लिए सबसे अच्छा तरीका है कि आप स्वयं उन ऐप्स की सूची रखें, जिन्हें आप एपीटी के अलावा किसी अन्य विधि के माध्यम से इंस्टॉल करते हैं।


मेरे सभी स्‍थानीय dpkgस्‍थापित पैकेजों के लिए काम करता है। एक अपवाद। यह सूचीबद्ध है skype-bin, जबकि apt-cache policy skype-binस्पष्ट रूप से कैनन पार्टनर रेपो दिखाता है। मुझे यकीन नहीं है कि क्या चल रहा है। बहुचर्चित मुद्दा? अभी भी +1 है apt-show-versions!
gertvdijk

एप्टीट्यूड इन 'अप्रचलित' संकुल को कहता है। ऊपर क्रोनिटिस टिप्पणी देखें।
हेंक पोली

5

यदि आपके पास योग्यता भी इंस्टॉल किया गया उपयोग करते हैं,

aptitude search '?obsolete'

या इसका संक्षिप्त रूप

aptitude search '~o'

यहाँ यह एक नमूना आउटपुट है

i A gcc-4.7-base - GCC, the GNU Compiler Collection (base package)
id  libdb4.7     - Berkeley v4.7 Database Libraries [runtime]
i   libudev0     - libudev shared library

प्रत्येक पंक्ति का पहला वर्ण पैकेज की वर्तमान स्थिति को इंगित करता है। सबसे आम राज्य हैं:

  • पी, जिसका अर्थ है कि सिस्टम पर पैकेज का कोई निशान मौजूद नहीं है,
  • सी, जिसका अर्थ है कि पैकेज को हटा दिया गया था लेकिन इसकी विन्यास फाइल सिस्टम पर रहती है,
  • i, जिसका अर्थ है कि पैकेज स्थापित है, और
  • v, जिसका अर्थ है कि पैकेज आभासी है।

दूसरा वर्ण पैकेज पर की जाने वाली संग्रहीत क्रिया को इंगित करता है, यदि कोई हो, अन्यथा रिक्त स्थान प्रदर्शित होता है। सबसे आम क्रियाएं हैं:

  • i, जिसका अर्थ है कि पैकेज स्थापित किया जाएगा,
  • डी, जिसका अर्थ है कि पैकेज हटा दिया जाएगा, और
  • पी, जिसका अर्थ है कि पैकेज और इसकी कॉन्फ़िगरेशन फाइलें हटा दी जाएंगी।

यदि तीसरा वर्ण ए है, तो पैकेज स्वचालित रूप से स्थापित हो गया था।

संभावित राज्य और कार्रवाई के झंडे की पूरी सूची के लिए, एप्टीट्यूड रेफरेंस गाइड में सेक्शन एक्सेसिंग पैकेज इंफॉर्मेशन देखें ।


1
aptitude search ?obsoleteबाश में काम कर सकते हैं, लेकिन आपको उपयोग करना चाहिएaptitude search '?obsolete'
AB

क्या आप आउटपुट को पार्स करने पर कुछ विवरण जोड़ सकते हैं?
एल्डर गीक

क्या 'अप्रचलित' '~ o' से अलग है?
शॉन

@ सीन नहीं, वे अलग नहीं हैं। ~ ओ वास्तव में अप्रचलित के लिए संक्षिप्त रूप है?
डेमिस पाल्मा Pal

उद्धरण शेल द्वारा पार्स किए गए हैं। मुझे लगता है कि एबी का मतलब यह है कि आप कमांड लाइन पर अनजाने चरित्र को पास नहीं करना चाहिए क्योंकि आप नहीं जानते कि आपका शेल उनके लिए क्या करने जा रहा है।
सीन

2

उबंटू 19.10 से शुरू होकर इसे चलाना भी संभव है

apt list ?obsolete

अप्रचलित पैकेजों की सूची प्राप्त करने के लिए।

किसी भी रिलीज के लिए आप निम्नलिखित बैश वन-लाइनर का उपयोग कर सकते हैं:

comm -23 <(dpkg-query -W -f '${db:Status-Abbrev}\t${Package}\n' | grep '^.[^nc]' | cut -f2 | sort) <(apt-cache dumpavail | sed -rn 's/^Package: (.*)/\1/p' | sort -u)

इसके लिए अतिरिक्त पैकेज स्थापित करने की आवश्यकता नहीं है, और यह अपेक्षाकृत तेज़ है। यह आंशिक रूप से इंस्टॉल किए गए पैकेज भी मिलेगा (लेकिन उन लोगों को नहीं मिलेगा जिनके पास केवल कॉन्फ़िगरेशन फ़ाइलें शेष हैं; उन्हें आसानी से बदला जा सकता है, हालांकि)। नोट: यह ध्यान नहीं देता कि पैकेज किस आर्किटेक्चर के हैं।

यदि आप उन पैकेजों को शामिल करना चाहते हैं, जो रिपॉजिटरी से उपलब्ध संस्करण की तुलना में एक अलग संस्करण स्थापित हैं, तो आप निम्न में से कोई एक ले सकते हैं:

आधुनिक उपयुक्त का उपयोग करें:

 apt list --installed | awk -F/ '/\[installed,local\]/{print $1}'

फिर भी एक और विकल्प चलाना है

ubuntu-support-status --show-unsupported

और "अब डाउनलोड करने योग्य नहीं:" खंड के तहत पैकेज के नाम पढ़ें।


'उपयुक्त सूची - मानव-स्थापित | grep -v cosmic 'झूठी सकारात्मकता दिखाता है। यह उत्तर बहुत बेहतर है!
TamusJRoyce

1
@TamusJRoyce, हाँ, मुझे लगता है कि अब संपादन के बाद।
जारो सेप

1

अधिक जानकारी के लिए जाँच करें।

ubuntu-समर्थन का दर्जा 
इको "$ (sudo apt-mark showmanual | wc -l) पैकेज 'मैन्युअल रूप से स्थापित' के रूप में चिह्नित।"

... ubuntu-support-status और apt-mark को संस्थापन की आवश्यकता हो सकती है।


के sudoसाथ उपयोग करने की आवश्यकता नहीं है apt-mark showmanual
जर्नो

ubuntu-support-statusअप्रचलित पैकेजों की संख्या को सूचीबद्ध करता है, लेकिन पैकेज के नामों को नहीं।
जर्नो

1
आउटपुट पढ़ेंubuntu-support-status --help
हन्नू

ओह, संकेत के लिए धन्यवाद।
जर्नो

0

एक क्लीनर तरीका हो सकता है, लेकिन मेरे सिर के ऊपर से आप कर सकते हैं

dpkg -l | cut -f 3 -d ' ' > installed
xargs -n 1 --replace=X apt-cache search ^X$ < installed | cut -f 1 -d ' ' > available
diff installed available

installedफ़ाइल की पहली कुछ पंक्तियों को साफ़ करें : इसमें हेडर होंगे।

बोनस अगर कोई भी मेरे सिंटैक्स हाइलाइटिंग को ठीक कर सकता है ...


2
यदि आप dpkg -lइंस्टॉल किए गए पैकेजों की सूची प्राप्त करने के लिए आउटपुट का उपयोग करने जा रहे हैं, तो आपको परिणामों को दूसरे कॉलम में 'i' के साथ लाइनों तक सीमित करना चाहिए, क्योंकि dpkg उन पैकेजों को भी सूचीबद्ध करेगा जो स्थापित नहीं हैं (शायद हटाए गए लेकिन शुद्ध नहीं) । एक उदाहरण के रूप में, अपने पहले कमांड को बदलने के लिए dpkg -l | grep '^.[^i]' | cut -f 3 -d ' ' यह संकुल की सूची लौटाएगा, जो स्थापित नहीं हैं। (लेकिन एक बार थे)
stew

1
इसके अलावा, apt-cache search someinstalledpackageअगर कोई रेपो से पैकेज उपलब्ध नहीं है, तो भी कुछ लौटाएगा, इसलिए मुझे नहीं लगता कि यह बिल्कुल काम करेगा।
स्टू

1
@stew मैं यह देखने के लिए यहां से निकल जाऊंगा कि क्या कोई निष्कर्ष पर पहुंचता है, लेकिन आपका जवाब निश्चित रूप से बेहतर है। आप को +1।
जेफ फेरलैंड

@stew dpkg -l | grep '^.[^i]' | cut -f 3 -d ' 'कुछ हेडर लाइनों को भी प्रिंट करता है।
जर्नो

यहां तक ​​कि अगर यह जवाब काम करता है, तो यह बहुत धीमा होगा क्योंकि यह apt-cache searchप्रत्येक पैकेज के लिए अलग से चलेगा ।
जर्नो

0

जैसा कि उल्लेख किया गया है कि a-get search यह जांचने के लिए एक अच्छा तरीका नहीं है कि क्या पैकेज अभी भी उपलब्ध है। अतिरिक्त मैंने सब कुछ सिर्फ एक पंक्ति में जोड़ा है:

for i in `dpkg -l | grep '^i' | awk '{ print $2 }'`; do apt-cache show $i > /dev/null || echo $i; done

और क्योंgrep '^i'
एबी

@AB अच्छा बिंदु; यदि पैकेज स्थापित किया गया है, तो यह नहीं बताया गया है, लेकिन पैकेज की वांछित कार्रवाई स्थापित की जानी है। man dpkg-queryअधिक जानकारी के लिए देखें ।
जर्नो

यह बहुत धीमा है
jarno

apt-cache showअगर पैकेज उपलब्ध नहीं है, तो यह जाँचने के लिए अच्छा नहीं है। यदि आप संबंधित रिपॉजिटरी को अक्षम करते हैं, और किसी अन्य सक्षम रिपॉजिटरी के पास नहीं है, तो यह अभी भी पैकेज दिखाता है।
जर्नो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.