क्या मैं देख सकता हूं कि पैकेज क्यों स्थापित किया गया है?


112

एक विशिष्ट पैकेज के लिए, क्या मुझे पता चल सकता है कि यह क्यों स्थापित है?

तो, क्या मैं देख सकता हूं या यह मैन्युअल रूप से स्थापित है, या यह किसी अन्य पैकेज की निर्भरता के रूप में स्थापित है? या कि यह डिस्ट्रो के हिस्से के रूप में स्थापित है?


यह इस प्रश्न से संबंधित है (विवरण का एक हिस्सा) , विवरण के लिए इस उत्तर को देखें।
कौशिक

2017 के लिए बहुत बेहतर जवाब यहाँ: askubuntu.com/questions/128524/…
लैम्बर्ट

जवाबों:


107

एक टर्मिनल में निम्नलिखित कमांड दर्ज करने के लिए एक त्वरित समाधान है:

aptitude why $package

या, यदि आप केवल परम कारण में रुचि रखते हैं:

aptitude why $package --show-summary

पैकेज के नाम के साथ $ पैकेज बदलें , और आपको aptitudeपहले पैकेज को स्थापित करने की आवश्यकता हो सकती है ।

यहां वह आउटपुट है जो आपको मिल सकता है aptitude why aspell --show-summary

Packages requiring aspell:
  inkscape

अधिक विस्तार के लिए आप दौड़ेंगे aptitude why aspell। आप निम्नानुसार उदाहरण आउटपुट पढ़ सकते हैं: "आपने मैन्युअल रूप से स्थापित किया है inkscape, जिसके लिए आवश्यकता होती है libgtkspell, जिसकी आवश्यकता होती है libenchantic2a, aspell"। ( iमार्कर इंस्टॉल किए गए पैकेज इंगित करते हैं; Aमार्कर स्वचालित रूप से इंस्टॉल किए गए पैकेज दर्शाते हैं।)

i   inkscape       Depends libgtkspell0 (>= 2.0.10)                                                                    
i A libgtkspell0   Depends libenchant1c2a (>= 1.6.0)                                                                   
i A libenchant1c2a Depends aspell-en | myspell-dictionary | aspell-dictionary | ispell-dictionary | hunspell-dictionary
i A aspell-en      Depends aspell (>= 0.60.3-2)

अंत में, निम्न आदेश

apt-cache rdepends --installed $package

आपके कंप्यूटर पर स्थापित अन्य पैकेजों को सूचीबद्ध करता है जो सीधे $ पैकेज पर निर्भर करते हैं । आप उन --recurseसभी पैकेजों को सूचीबद्ध करने का विकल्प जोड़ सकते हैं जो इस पर प्रत्यक्ष या अप्रत्यक्ष रूप से निर्भर करते हैं।


Pity एप्टीट्यूड डिफ़ॉल्ट रूप से शामिल नहीं है :(
badp

1
@badp आपको इंगित करने के लिए धन्यवाद। यह मावरिक के साथ बुरा नया है, केवल लाइव एलसीडी आईएसओ छवि पर कुछ स्थान बचाने के लिए। लेकिन यह एक अमूल्य उपकरण है, और मैं इसके बिना नहीं जाऊंगा।
enzotib

15
apt-cache rdepends --recurse $packageशायद बहुत सारे पैकेज देता है। मैं --installedस्थापित पैकेजों को प्रतिबंधित करने का विकल्प जोड़ूंगा। -iविकल्प पूर्व-निर्भरता और निर्भरता संबंधित पैकेजों के लिए प्रतिबंधित है। लेकिन एक पैकेज स्थापित किया जा सकता है क्योंकि यह दूसरे पैकेज द्वारा अनुशंसित है। इस तरह की सिफारिश से संबंधित पैकेजों को शामिल करने के लिए, मुझे लगता है कि यह सही होगा:apt-cache rdepends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --installed --recurse $package
jarno

4
@ जर्नो के भस्मीकरण से थोड़ा छोटा, मान लें कि आप apt-cache rdepends --no-{suggests,conflicts,breaks,replaces,enhances} --installed --recurse $package
कंस

30

एक निश्चित पैकेज क्यों स्थापित किया गया था इस पर एक त्वरित और संक्षिप्त तर्क एक टर्मिनल ( Applications -> Accessories -> Terminal) में निम्नलिखित कमांड टाइप करके पाया जा सकता है :

aptitude why <package-name>

उस पैकेज के नाम से बदलें जिसे आप रुचि रखते हैं। उदाहरण के लिए, टाइपिंग aptitude why libgoo-canvas-perlनिम्नलिखित आउटपुट देता है:

i   shutter Suggests libgoo-canvas-perl

मूल रूप से इसका मतलब है कि shutterइस मामले में पैकेज को libgoo-canvas-perlस्थापित करने का सुझाव दिया गया है। तब टाइप करके aptitude why shutterमैं डिपेंडेंसी चेन पर चल सकता हूं।

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

मेरे मामले में, shutterसुझाव देता है libgoo-canvas-perl- हालांकि, सुझाए गए पैकेज स्वचालित रूप से डिफ़ॉल्ट रूप से स्थापित नहीं होते हैं। फिर भी, यह स्क्रीनशॉट को संपादित करने में सक्षम नहीं होने के साथ "अनुभव" की मेरी मेमोरी को जॉग करता है shutterजिसके साथ मुझे मैन्युअल रूप से स्थापित करने का नेतृत्व कियाligbgoo-canvas-perl

अंत में, आप यह जान सकते हैं कि क्या कोई पैकेज स्वचालित रूप से स्थापित किया गया था (मतलब पैकेज प्रबंधन प्रणाली द्वारा तय की गई निर्भरता को देखते हुए अनिवार्य रूप से और अन्य पैकेजों की सिफारिशों से जिसे आपने इसे स्थापित करने के लिए कहा था)।

aptitude show <package-name>

यह नीचे की तरह एक पंक्ति का उत्पादन करेगा (आउटपुट की तीसरी पंक्ति):

Automatically installed: no

अधिक जानकारी के लिए info aptitude(टर्मिनल में) रन करें या एप्टीट्यूड विकी पेज पर जाएं

यह पता लगाने के लिए कि एक विशेष पैकेज कब स्थापित किया गया था, 2 विकल्प हैं:

  1. Synaptic पैकेज प्रबंधक सभी गतिविधि का इतिहास लॉग रखता है। इतिहास लॉग फ़ाइल देखने के लिए, फ़ाइल मेनू से इतिहास चुनें। आप Installस्थापना के संबंध में सभी प्रविष्टियों को सूचीबद्ध करने के लिए (मामले को ध्यान में रखकर) खोज सकते हैं । हालाँकि, यह केवल Synaptic का उपयोग करके स्थापित संकुल को दिखाएगा
  2. किसी टर्मिनल में निम्न कमांड चलाएँ। यह स्थापना इतिहास प्रविष्टियों के लिए dpkg लॉग खोजेगा। हालांकि, इन लॉग्स में से कितने को बरकरार रखा गया है, इसकी अधिकतम सीमा है, इसलिए यदि आप जिस पैकेज की तलाश कर रहे हैं वह बहुत समय पहले स्थापित किया गया था, तो आप इसे नहीं पा सकते हैं। अधिक जानकारी यहाँ

    zcat -f /var/log/dpkg.log* | grep "\ install\ " | grep -i <package-name>
    

1
यदि आप यह जानना चाहते हैं कि एक पैकेज स्थापित किया गया था या अपग्रेड किया गया थाzcat -f /var/log/dpkg.log* | grep -i PackageName | egrep “\ install\ |\ upgrade\ “
क्रिस गुड

@ क्रिस: आप स्मार्ट उद्धरण के बिना अपनी टिप्पणी फिर से दर्ज कर सकते हैं, इसलिए यह कॉपी / पेस्ट करने योग्य है?
डैन डस्केल्सस्कु

1
यह बात बताने के लिए धन्यवाद। सही दोहरे उद्धरणों के साथ: zcat -f /var/log/dpkg.log* | grep -i PackageName | egrep "\ install \ | \ उन्नयन \"
क्रिस अच्छा

12

हां, आप कर सकते हैं, और यह वास्तव में एक बहुत स्पष्ट आदेश है। आपके द्वारा स्थापित एप्टीट्यूड को मानते हुए, आप एक टर्मिनल विंडो विज्ञापन प्रकार खोल सकते हैं:

aptitude why package

उस पैकेज की सूची देनी चाहिए जो उस विशिष्ट पैकेज पर निर्भर करता है। यदि यह मैन्युअल रूप से स्थापित पैकेज है, तो यह कुछ ऐसा कहेगा "पैकेज स्थापित करने का कारण खोजना संभव नहीं था"।


5

यहां एक सरल तरीका है जो भरोसा नहीं करता है aptitude, जो कि 10.10 डिफ़ॉल्ट रूप से अब जहाज नहीं करता है।

रेखांकन

Synaptic खोलें और इसे निकालने का प्रयास करें।

यदि कोई संवाद आपको अन्य पैकेजों को हटाने के लिए कहता है, तो वे पैकेज हैं जो (पुनरावर्ती) इस पर निर्भर करते हैं।

टर्मिनल से

apt-get remove package_name_goes_here -s

फिर, परिणाम के रूप में हटाए जाने वाले पैकेज वे सभी हैं जो (पुनरावर्ती) उस पर निर्भर करते हैं। ( -sपैरामीटर apt-getवास्तव में पैकेज को नहीं हटाने के लिए कहता है।)


2
यह एक जोखिम भरा समाधान है क्योंकि यह वास्तव में पैकेज और सभी निर्भरता को दूर कर सकता है यदि वे गलत क्लिक करते हैं।
इमेजिनरी रोबॉट्स

1
@ImaginaryRobots, यह एक बहुत कुछ है। (आपको पहले डायलॉग पर Ok को misclick करना है, फिर अप्लाई करना है, फिर दोबारा कन्फर्मेशन डायलॉग पर Ok करना है।) टर्मिनल वर्जन के लिए एक अतिरिक्त y/Nकन्फर्मेशन रिक्वेस्ट होनी चाहिए जो आपको टाइपो चाहिए -s। मैंने हालांकि एक चेतावनी जोड़ी।
बैड

1
-1 के रूप में यह जानकारी निर्भरता टैब के तहत Synaptic में उपलब्ध है, जब एक पैकेज के गुणों को देखते हैं।
अलेक्जेंडरपास

@alex गलत - वह संवाद आपको यह नहीं बताता है कि वह पैकेज मैन्युअल रूप से या स्वचालित रूप से स्थापित है या नहीं। पुनश्च: इनबॉक्स काउंटर रीसेट, कठिन प्रयास करें।
badp

@badp नहीं, लेकिन वह जानकारी मुख्य स्क्रीन पर "इंस्टॉल (मैनुअल)" स्थिति फ़िल्टर के साथ मिल सकती है, और जब आप पैकेज चुनते हैं तो पैकेज मेनू में देखा जा सकता है।
अलेक्जेंडर्पस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.