Vraag Kan ik zien waarom een ​​pakket is geïnstalleerd?


Kan ik voor een specifiek pakket achterhalen waarom het is geïnstalleerd?

Dus, kan ik zien of het handmatig is geïnstalleerd, of dat het is geïnstalleerd als een afhankelijkheid van een ander pakket? Of dat het is geïnstalleerd als onderdeel van de distro?


96
2017-10-10 14:08


oorsprong


Dit heeft te maken met (een deel van) deze vraag, zie dit antwoord voor details. - koushik
Veel beter antwoord voor 2017 hier: askubuntu.com/questions/128524/... - Lambart
Mogelijk duplicaat van Hoe kunt u afhankelijke pakketten (omgekeerde afhankelijkheden) weergeven? - kiamlaluno


antwoorden:


Een snelle oplossing is om het volgende commando in een terminal in te voeren:

aptitude why $package

of, als je alleen geïnteresseerd bent in de uiteindelijke oorzaak:

aptitude why $package --show-summary

Vervangen $ pakket met de naam van het pakket en mogelijk moet u de aptitude pakket eerst.

Hier is de output waar je misschien voor kunt krijgen aptitude why aspell --show-summary

Packages requiring aspell:
  inkscape

Voor meer detail zou je rennen aptitude why aspell. U kunt de voorbeelduitvoer hieronder als volgt lezen: "U handmatig geïnstalleerd inkscape, wat vereist libgtkspell, wat vereist libenchantic2a, wat vereist aspell". (i markeringen geven geïnstalleerde pakketten aan; A markeringen geven automatisch geïnstalleerde pakketten aan.)

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)

Eindelijk het volgende commando

apt-cache rdepends --installed $package

vermeldt de andere pakketten die op uw computer zijn geïnstalleerd en die rechtstreeks afhankelijk zijn van $ pakket. U kunt de --recurse optie om een ​​lijst weer te geven van alle pakketten die er direct of indirect van afhankelijk zijn.


92
2017-10-10 14:14



Medelijden aptitude is standaard niet inbegrepen :( - badp
@badp bedankt om erop te wijzen. Dit is de slechte nieuwe met non-conformist, alleen om wat ruimte te besparen op het livecd iso-image. Maar het is een gereedschap van onschatbare waarde, en ik zal niet zonder blijven. - enzotib
apt-cache rdepends --recurse $package geeft waarschijnlijk te veel pakketten. ik zou toevoegen --installed optie om te beperken tot geïnstalleerde pakketten. -i optie beperkt tot pre-afhankelijkheid en afhankelijkheid gerelateerde pakketten. Maar er kan een pakket worden geïnstalleerd omdat dit door een ander pakket wordt aanbevolen. Om dergelijke aan aanbevelingen gerelateerde pakketten op te nemen, denk ik dat dit de juiste zou zijn: apt-cache rdepends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --installed --recurse $package - jarno
iets kortere equivalent van de bezwering van @ jarno, aangenomen dat je op bash of een andere shell bent met beugeluitbreiding: apt-cache rdepends --no-{suggests,conflicts,breaks,replaces,enhances} --installed --recurse $package - akavel


Een snelle en korte redenering waarom een ​​bepaald pakket is geïnstalleerd, kan worden gevonden door het volgende commando in een terminal in te typen (Applications -> Accessories -> Terminal):

aptitude why <package-name>

Vervang door de naam van het pakket waarin u bent geïnteresseerd. Bijvoorbeeld typen aptitude why libgoo-canvas-perl geeft het volgende uit:

i   shutter Suggests libgoo-canvas-perl

Dit betekent in feite dat het pakket shutter in dit geval heeft gesuggereerd libgoo-canvas-perl worden geïnstalleerd. Door dan te typen aptitude why shutter Ik kan de keten van afhankelijkheid oplopen.

Er is echter een voorbehoud. Ik merk vaak dat aptitude de meest plausibele verklaring vindt voor de situatie die misschien niet het eigenlijke geval is, maar geeft je toch een idee om verder te kijken.

In mijn geval, shutter suggereert libgoo-canvas-perl - voorgestelde pakketten worden echter niet standaard automatisch geïnstalleerd. Desalniettemin, het stimuleert mijn geheugen van de "ervaring" met het niet kunnen bewerken van screenshots met shutter waardoor ik handmatig moest installeren ligbgoo-canvas-perl

Ten slotte kunt u achterhalen of een pakket automatisch is geïnstalleerd (wat betekent dat het pakketbeheersysteem als verplicht is gekozen door te kijken naar afhankelijkheden en aanbevelingen van andere pakketten die u hebt gevraagd te installeren) door het volgende commando uit te voeren.

aptitude show <package-name>

Hierdoor wordt een regel zoals hieronder weergegeven (3e regel van de uitvoer):

Automatically installed: no

Voor meer info uitvoeren info aptitude (in een terminal) of bezoek de Aptitude wiki-pagina

Er achter komen wanneer een bepaald pakket is geïnstalleerd, er zijn 2 opties:

  1. Synaptic-pakketbeheerder onderhoudt een historielogboek van alle activiteiten. Als u het geschiedenislogboekbestand wilt weergeven, kiest u Geschiedenis in het menu Bestand. U kunt zoeken naar Install (let op het geval) om alle vermeldingen met betrekking tot de installatie te vermelden. Dit toont echter alleen de geïnstalleerde pakketten met behulp van Synaptic
  2. Voer de volgende opdracht uit in een terminal. Hiermee worden dpkg-logboeken doorzocht voor installatiehistorie-items. Er is echter een maximale limiet voor het aantal logboeken dat wordt bewaard. Als het pakket waarnaar u op zoek bent al lang geleden is geïnstalleerd, is het mogelijk dat u het niet kunt vinden. Meer details hier

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

29
2017-09-21 14:02



Ja, heel erg bedankt! Precies wat ik nodig had! - bheeshmar
Als u wilt weten wanneer een pakket is geïnstalleerd of geüpgraded zcat -f /var/log/dpkg.log* | grep -i PackageName | egrep “\ install\ |\ upgrade\ “ - Chris Good
@ChrisGood: kunt u uw opmerking opnieuw invoeren zonder slimme aanhalingstekens, dus het is een kopie / pastabel? - Dan Dascalescu
Bedankt dat je dat duidelijk hebt gemaakt. Met de juiste dubbele aanhalingstekens: zcat -f /var/log/dpkg.log* | grep -i PackageName | egrep "\ install \ | \ upgrade \" - Chris Good


Ja, dat kan, en het is eigenlijk een vrij duidelijk bevel. Ervan uitgaande dat je aptitude hebt geïnstalleerd, kun je een advertentietype voor het Terminal Window openen:

aptitude why package

Dat zou een lijst moeten geven met pakketten die afhankelijk zijn van dat specifieke pakket. Als het een handmatig geïnstalleerd pakket is, zal het iets zeggen als "Het was niet mogelijk om een ​​reden te vinden om pakket te installeren".


11
2017-10-10 14:14





Hier is een eenvoudige manier waarop u niet vertrouwt aptitude, die 10.10 niet meer standaard verzendt.

Merk op

U hebt root-toegang nodig om deze opdrachten uit te voeren.

aanschouwelijk

Open Synaptic en probeer het te verwijderen.

Als er een dialoogvenster verschijnt waarin u wordt gevraagd om andere pakketten te verwijderen, zijn dit de pakketten die (recursief) ervan afhankelijk zijn.

Vanaf terminal

apt-get remove package_name_goes_here -s

Nogmaals, de pakketten die als resultaat worden verwijderd, zijn allemaal die (recursief) ervan afhankelijk zijn. (De -s parameter vertelt apt-get om het pakket niet daadwerkelijk te verwijderen.)


2
2017-10-10 14:27



Dit is een riskante oplossing, omdat het pakket en alle afhankelijkheden daadwerkelijk kunnen worden verwijderd als ze verkeerd klikken. - ImaginaryRobots
@ImaginaryRobots, dat is a lot van misclicking. (U moet OK in het eerste dialoogvenster, vervolgens Toepassen, en nogmaals Ok in het bevestigingsvenster klikken.) Voor de terminalversie is er ook een extra y/N verzoek om bevestiging moet je typeren -s. Ik heb echter een waarschuwing toegevoegd. - badp
-1 omdat deze informatie beschikbaar is in Synaptic op het tabblad afhankelijkheden bij het bekijken van de eigenschappen van een pakket. - alexanderpas
@alex onjuist: in dat dialoogvenster wordt niet aangegeven of dat pakket handmatig of automatisch is geïnstalleerd. PS: reset inboxteller, probeer harder. - badp
@badp nee, maar die info is te vinden met het statusfilter "Geïnstalleerd (handmatig)" op het hoofdscherm en kan worden bekeken in het pakketmenu wanneer u een pakket selecteert. - alexanderpas