Posso vedere perché un pacchetto è installato?


112

Per un pacchetto specifico, posso scoprire perché è installato?

Quindi, posso vedere o è installato manualmente o che è installato come dipendenza di un altro pacchetto? O che sia installato come parte della distribuzione?


Questo è legato a (una parte di) questa domanda, vedere questa risposta per i dettagli.
Koushik,

Risposta molto migliore per il 2017 qui: askubuntu.com/questions/128524/…
Lambart

Risposte:


107

Una soluzione rapida è inserire il seguente comando in un terminale:

aptitude why $package

o, se sei interessato solo alla causa ultima:

aptitude why $package --show-summary

Sostituisci $ package con il nome del pacchetto e potresti dover aptitudeprima installare il pacchetto.

Ecco l'output che potresti ottenere aptitude why aspell --show-summary

Packages requiring aspell:
  inkscape

Per maggiori dettagli eseguiresti aptitude why aspell. È possibile leggere l'output di esempio, di seguito, come segue: "Installazione manuale inkscape, che richiede libgtkspell, che richiede libenchantic2a, che richiede aspell". (gli iindicatori indicano i pacchetti installati; gli Aindicatori indicano i pacchetti installati automaticamente.)

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)

Infine, il seguente comando

apt-cache rdepends --installed $package

elenca gli altri pacchetti installati sul tuo computer che dipendono direttamente da $ package . È possibile aggiungere l' --recurseopzione per elencare tutti i pacchetti che dipendono direttamente o indirettamente da esso.


Pitude aptitude non è incluso di default :(
badp

1
@badp grazie per averlo sottolineato. Questo è il brutto nuovo con Maverick, solo per risparmiare un po 'di spazio sull'immagine iso livecd. Ma è uno strumento inestimabile, e non ne esco senza.
enzotib,

15
apt-cache rdepends --recurse $packageprobabilmente dà troppi pacchetti. Aggiungerei l' --installedopzione per limitare ai pacchetti installati. -iL'opzione limita i pacchetti relativi alla pre-dipendenza e alla dipendenza. Ma un pacchetto può essere installato perché è consigliato da un altro pacchetto. Per includere tali pacchetti relativi alle raccomandazioni, suppongo che ciò darebbe quelli giusti:apt-cache rdepends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --installed --recurse $package
jarno

4
equivalente leggermente più breve dell'incantesimo di @jarno, supponendo che tu sia su bash o altra shell con espansione di parentesi graffe:apt-cache rdepends --no-{suggests,conflicts,breaks,replaces,enhances} --installed --recurse $package
Akavel

30

Un ragionamento rapido e breve sul motivo per cui un certo pacchetto è stato installato può essere scoperto digitando il seguente comando in un terminale ( Applications -> Accessories -> Terminal):

aptitude why <package-name>

Sostituisci con il nome del pacchetto che ti interessa. Ad esempio, digitando aptitude why libgoo-canvas-perlrestituisce quanto segue:

i   shutter Suggests libgoo-canvas-perl

Ciò significa sostanzialmente che il pacchetto shutterin questo caso ha suggerito di libgoo-canvas-perlessere installato. Digitando quindi aptitude why shutterposso camminare sulla catena delle dipendenze.

Tuttavia, c'è un avvertimento. Noto spesso che aptitude trova la spiegazione più plausibile per la situazione che potrebbe non essere il caso reale, ma che comunque ti darà un indizio per guardare oltre.

Nel mio caso, shuttersuggerisce libgoo-canvas-perl- tuttavia, i pacchetti suggeriti non vengono installati automaticamente per impostazione predefinita. Ciononostante, fa jogging la mia memoria dell '"esperienza" con il fatto di non essere in grado di modificare schermate con le shutterquali mi ha portato all'installazione manualeligbgoo-canvas-perl

Infine, puoi scoprire se un pacchetto è stato installato automaticamente (significato deciso dal sistema di gestione dei pacchetti come obbligatorio guardando le dipendenze e le raccomandazioni di altri pacchetti che hai chiesto di installare) eseguendo il comando seguente.

aptitude show <package-name>

Questo genererà una riga come di seguito (terza riga dell'output):

Automatically installed: no

Per ulteriori informazioni, esegui info aptitude(in un terminale) o visita la pagina wiki di Aptitude

Per scoprire quando è stato installato un determinato pacchetto, ci sono 2 opzioni:

  1. Il gestore pacchetti Synaptic mantiene un registro cronologico di tutte le attività. Per visualizzare il file di registro della cronologia, selezionare Cronologia dal menu File. Puoi cercare Install(attenzione al caso) per elencare tutte le voci relative all'installazione. Tuttavia, questo mostrerà solo i pacchetti installati usando Synaptic
  2. Eseguire il comando seguente in un terminale. Ciò cercherà nei registri di dpkg le voci della cronologia di installazione. Tuttavia, esiste un limite massimo alla quantità di questi registri mantenuta, quindi se il pacchetto che stai cercando è stato installato molto tempo fa, potresti non trovarlo. Maggiori dettagli qui

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

1
Se vuoi scoprire quando un pacchetto è stato installato o aggiornatozcat -f /var/log/dpkg.log* | grep -i PackageName | egrep “\ install\ |\ upgrade\ “
Chris Good

@ChrisGood: puoi reinserire il tuo commento senza virgolette intelligenti, quindi è copia / pastable?
Dan Dascalescu il

1
Grazie per la segnalazione. Con le doppie virgolette corrette: zcat -f /var/log/dpkg.log* | grep -i NomePacchetto | egrep "\ install \ | \ upgrade \"
Chris Good,

12

Sì, puoi, ed è un comando abbastanza ovvio, in effetti. Supponendo che aptitude sia installato, è possibile aprire un tipo di annuncio della finestra Terminale:

aptitude why package

Ciò dovrebbe fornire un elenco di pacchetti che dipendono da quel pacchetto specifico. Se si tratta di un pacchetto installato manualmente, verrà visualizzato qualcosa del tipo "Impossibile trovare un motivo per installare il pacchetto".


5

Ecco un modo semplice su cui non fare affidamento aptitude, che 10.10 non viene più fornito di default.

Graficamente

Apri Synaptic e prova a rimuoverlo.

Se viene visualizzata una finestra di dialogo che richiede di eliminare altri pacchetti, questi sono i pacchetti che (ricorsivamente) dipendono da esso.

Dal terminale

apt-get remove package_name_goes_here -s

Ancora una volta, i pacchetti che verrebbero rimossi di conseguenza sono tutti quelli che (ricorsivamente) dipendono da esso. (Il -sparametro dice apt-getdi non rimuovere effettivamente il pacchetto.)


2
Questa è una soluzione rischiosa perché potrebbe effettivamente rimuovere il pacchetto e tutte le dipendenze se fanno clic in modo errato.
ImaginaryRobots,

1
@ImaginaryRobots, questo è un sacco di errori. (Devi fare clic su OK nella prima finestra di dialogo, quindi su Applica, quindi di nuovo su OK nella finestra di dialogo di conferma.) Per la versione del terminale, c'è anche una y/Nrichiesta di conferma aggiuntiva in caso di errore di battitura -s. Ho aggiunto un avviso comunque.
badp,

1
-1 poiché queste informazioni sono disponibili in Synaptic nella scheda Dipendenze, quando si visualizzano le proprietà di un pacchetto.
alexanderpas,

@alex errato - quella finestra di dialogo non ti dice se quel pacchetto è installato manualmente o automaticamente. PS: Ripristino contatore posta in arrivo, prova più intensamente.
badp,

@badp no, ma quelle informazioni possono essere trovate con il filtro di stato "Installato (manuale)" nella schermata principale e possono essere visualizzate nel menu del pacchetto quando si seleziona un pacchetto.
alexanderpas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.