APT में स्थापित पैकेजों की सूची (पुनरावर्ती) निर्भरता


17

मेरे द्वारा स्थापित प्रत्येक पैकेज के लिए मैं यह जानना चाहूंगा कि यदि मैं इसे अनइंस्टॉल करता हूं तो कौन से पैकेज स्थापित किए जाएंगे। मेरे द्वारा आवश्यक आउटपुट का एक उदाहरण है ( package: list of deps):

abc: foo bar
bcd: baz abc
bdd: baz fuubar

संलग्न

यदि मैं जाँचता हूँ कि क्या वास्तव में हटा दिया जाएगा यदि मैं पैकेज pppका उपयोग कर हटा दूं apt-get:

$ echo $(apt-get --dry-run remove ppp | grep '^Remv ' | cut -d' ' -f2)
gnome-ppp mint-meta-xfce network-manager-pptp-gnome network-manager-pptp wvdial pppoeconf pppoe pptp-linux pppconfig ppp

मैं देखता हूं कि यह अलग है कि कौन सा apt-cacheशो मुझे देता है (जो मुझे नहीं लगता कि इसमें पुनरावर्ती निर्भरताएं शामिल हैं):

$ apt-cache show ppp | grep '^Breaks: '
Breaks: network-manager (<= 0.8.0.999-1), network-manager-pptp (<= 0.8.0.999-1), pppdcapiplugin (<= 1:3.9.20060704+dfsg.1-1)

2 संलग्न करें

क्या dpkg --get-selections | cut -f1स्थापित करने के लिए विश्वसनीय पैकेजों की सूची प्राप्त करने का एक विश्वसनीय तरीका है?


1
पार्सिंग apt-get --dry-run removeमूल रूप से सही लगता है। यह कुछ स्वचालित रूप से स्थापित पैकेजों को याद कर सकता है जो केवल स्वचालित रूप से स्थापित पैकेजों के लिए आवश्यक हैं जो केवल आपके द्वारा हटाए गए पैकेजों के लिए आवश्यक हैं। क्या इसीलिए आप इसे उपयुक्त उत्तर नहीं मानते हैं?
गाइल्स का SO- बुराई पर रोक '23:

जवाबों:


11

आपने यहां कुछ अलग सवाल पूछा, मुझे उम्मीद है कि मैं कम से कम एक या दो पर मदद कर सकता हूं।

सभी स्थापित पैकेजों को सूचीबद्ध करने के लिए, dpkgफ़ील्ड से अलग की गई सूची में आउटपुट का उपयोग करें

dpkg -l 

अतिरिक्त क्षेत्रों के बिना, बस पैकेज सूची प्राप्त करने के लिए, ताकि आप इसे कहीं और पाइप कर सकें।

dpkg -l | awk '{print $2 }' # Pipe to grep after the awk, or glob from dpkg

उदाहरण के लिए, यदि मैं एक पुराने कर्नेल को हटाना चाहता हूं,

apt-get purge `dpkg -l linux* | awk '{print $2}' | grep 3.0.0-12`

सभी अनावश्यक निर्भरताओं के माध्यम से जाने का सबसे आसान तरीका है debfoster। यह अंतःक्रियात्मक रूप से चलता है और आप जो चाहते हैं, उनकी निर्भरता से गुजरता है और जो पुनरावर्ती निर्भरता नहीं है उसे हटा या सूचीबद्ध कर सकता है।

किसी विशिष्ट पैकेज की सभी पुनरावर्ती निर्भरता को सूचीबद्ध करने के लिए,

debfoster -d $PACKAGE ## PACKAGE is the specific package.

आपके द्वारा निष्पादित किए जाने के बाद आप debfosterकिसी भी आश्रित की जाँच कर सकते हैं कि एक पैकेज भी है,

debfoster -e $PACKAGE ## PACKAGE is the specific package.

'अनाथ' संकुल को सूचीबद्ध करने का एक बहुत अच्छा तरीका है deborphandeborphanविकल्पों के बिना चलाएं , और यह सभी 'अनाथ' संकुल को सूचीबद्ध करेगा। एक 'अनाथ' एक ऐसा पैकेज है जिस पर कुछ भी निर्भर नहीं करता है, और आपने स्पष्ट रूप से स्थापित नहीं किया है।

मैं भी किसी भी 'अनाथ' संकुल को साफ करना पसंद करता हूं, एक ताजा स्थापना के बाद। जब मैंने विशिष्ट पैकेज निकाल दिए, तो आप कुछ भी याद कर सकते हैं apt-get autoremove --purge,

apt-get purge `deborphan`

अंत में कभी-कभी आप --purgeपैकेज 'बचे हुए' के ​​साथ समाप्त नहीं करते हैं , नए संस्करण apt-getस्वतः ही उन्हें हटा सकते हैं। अनइंस्टॉल किए गए पैकेज चलाने से सभी 'बचे हुए' को हटाने के लिए,

apt-get autoclean

यदि आपके पास नया संस्करण नहीं है apt-get, तो आप हमेशा उन्हें इन आदेशों के साथ निकाल सकते हैं। वे त्रुटि करते हैं यदि कोई 'बचे हुए' फाइलें मौजूद नहीं हैं, ऐसा लगता है कि आटोक्लेयन कभी-कभी कुछ भी याद कर सकता है।

dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs dpkg --purge

डेबफोस्टर अभी भी मौजूद है, लेकिन इसे अभिवृत्ति में सुविधाओं से भरा माना जाता है
यहोशू क्लेटन

4
apt-cache show pkgname1 pkgname2...

(अन्य बातों के अलावा) इन (क्रम) निर्भरताओं को सूचीबद्ध करेगा। यह आमतौर पर पर्याप्त होता है, जब तक कि आप इसे आगे की प्रक्रिया के लिए मशीन को नहीं खिला रहे हों। यदि आप इसे आपके द्वारा बताए गए प्रारूप में चाहते हैं, तो आपको संभवतः एक स्क्रिप्ट लिखना होगा।


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

2
@ हटाया गया: क्षमा करें, मैंने अब तक यह टिप्पणी नहीं देखी थी। "मेरे द्वारा इंस्टॉल किए गए प्रत्येक पैकेज के लिए कौन से पैकेज की स्थापना रद्द की जाएगी" के जवाब में (मेरा मानना ​​है कि आप चाहते हैं कि यह प्रश्न प्रति पैकेज के आधार पर उत्तर दिया जाए) apt-get remove -s packagename। आपके द्वारा स्थापित सभी पैकेजों को सूचीबद्ध करना बस है dpkg -l
फहीम मीठा

@FaheemMitha: पुरानी पोस्ट, लेकिन अभी भी महान टिप apt-get remove -s packagename!
ट्वैन 163

@ twan163 हैप्पी यह आपके लिए उपयोगी था।
फहीम मीठा

1

मुझे लगता है कि यो को उसी चीज के लिए लूप जारी रखना और बनाना है:

apt-cache depends libtext-wrapi18n-perl |xargs apt-cache depends

बेशक हेडर हटा दें।


2
apt-cache पर निर्भर करता है कि एक रिकर्स विकल्प हैapt-cache depends --recurse libtext
यहोशू क्लेटन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.