Come posso ottenere la cronologia di "apt-get install" su Ubuntu?


85

Sto per spostare un server da una casella Ubuntu a un'altra. Non sto clonando la vecchia scatola con la nuova; Sto creando un nuovo sistema e sposterò i dati secondo necessità. Voglio installare tutto il software che ho sulla vecchia scatola su quella nuova.

C'è un modo semplice per trovare la cronologia di tutti i comandi "sudo apt-get install" che ho dato nel tempo? Cioè, dpkg -l mi mostra tutti i pacchetti che sono stati installati, ma non quale pacchetto di livello superiore li ha installati. Se c'è un modo per dpkg di darmi il pacchetto di installazione, posso trovare quelli unici lì; altrimenti, voglio qualcos'altro da dire "hai installato questi 24 pacchetti".



Puoi accettare una risposta qui sotto? Essere grati alle persone che hanno risposto.
m-ric,


Queste soluzioni verificheranno solo cosa è successo DOPO l'ultima rotazione del registro. Non controllano tutta la cronologia.
Kraang Prime,

Questa risposta, askubuntu.com/a/250530/197730 , fornisce questa soluzione semplice e veloce a questa domanda Come elencare tutti i pacchetti installati .
TooTone,

Risposte:


69

La aptstoria è /var/log/apt/history.logcome detto in un commento sopra. Detto questo, questo non elencherà i pacchetti installati manualmente, utilizzando dpkgo GUI come gdebi. Per vedere tutti i pacchetti che sono passati dpkg, puoi vedere /var/log/dpkg.log.


8

5
La procedura nel primo collegamento non distingue tra pacchetti installati automaticamente e pacchetti installati manualmente. /var/log/apt/history.log(hai sbagliato posizione tra l'altro) sarà ruotato dopo alcuni mesi.
Gilles,

Gilles ha ragione su entrambi i fronti. Ho solo circa un mese di quei registri e non riesco nemmeno a vedere come è impostata la percentuale di cancellazione dei registri (è fatta con 'newsyslog' su FreeBSD). Quindi non ho ancora una soluzione, ma ho alcuni suggerimenti. Posso almeno greppare l'output del comando nell'articolo sulla clonazione, cercare nomi "di alto livello", installarli su quello nuovo, fare la stessa cosa sul nuovo riquadro, diffondere i due risultati e ripetere fino a quando non sono soddisfatti. Vorrei comunque sentire altre idee.
Paul Hoffman,

7

È possibile elencare i pacchetti la cui installazione è stata esplicitamente richiesta con apt-mark.

apt-mark showmanual

Nel caso in cui eseguiate un'antica versione di Debian, ecco un modo manuale.

Il seguente comando fornisce l'elenco dei pacchetti la cui installazione è stata richiesta, manualmente o automaticamente. A meno che non ti trovi nel mezzo di (de) installazione di pacchetti, questo è l'elenco dei pacchetti installati.

dpkg --get-selections | sed -n 's/\t\+install$//p'

Il seguente comando fornisce un superset di pacchetti installati automaticamente:

</var/lib/apt/extended_states awk -v RS= '/\nAuto-Installed: *1/{print$2}'

Mettendo tutto insieme, il seguente comando elenca i pacchetti installati manualmente:

comm -23 <(dpkg --get-selections | sed -n 's/\t\+install$//p') \
         <(</var/lib/apt/extended_states \
           awk -v RS= '/\nAuto-Installed: *1/{print$2}' |sort)

1
--- risultato molto diverso dacomm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
Cbhihe,

Su Debian, c'è apt-mark showmanualqual è equivalente al tuo ultimo comando.
Maxschlepzig,

3
grep -i "Commandline" /var/log/apt/history.log

Mostra tutti i pacchetti che hai installato usando: sudo apt-get install xxxxx


Questo non differisce sufficientemente dalla risposta di @ ℝaphink e dovrebbe essere un commento ad esso.
Karl Richter,

2

Invece di una combinazione tac / head, è meglio usare la coda (per le ultime 25 righe):

tail -n 25 /var/log/apt/history.log

Questo non differisce sufficientemente dalla risposta di @ ℝaphink e dovrebbe essere un commento ad esso.
Karl Richter,

Inoltre, non è lo stesso. tail elencherà le ultime righe nel file, nell'ordine in cui sono nel file. tac invertirà l'ordine in modo che l'ultima riga sia ora la prima, la penultima è la seconda, ecc. Ancora una volta, sembra che tu abbia il rischio di sbagliarti quando dici che qualcosa è "migliore" senza spiegarne il motivo. Voglio dire, "meglio" secondo chi? Per quale requisito? Sembra un po 'troppo fiducioso.
Todd Walton,

0

Le altre risposte mi hanno aiutato ma mi hanno dato troppi risultati. Per ridurre l'output, ho iniziato con apt-mark showmanualcome in questa risposta , quindi ho filtrato i pacchetti originariamente installati (vedi questa risposta per come ottenere un elenco di pacchetti originariamente installati; sto usando Ubuntu 18.04.2, quindi il link qui sotto) .

BASE_PACKAGES_MANIFEST=http://releases.ubuntu.com/18.04.2/ubuntu-18.04.2-desktop-amd64.manifest
REMOVE_VERSIONS_REGEX='[0-9][.-][0-9][.-][0-9]|[0-9][.-][0-9]|[0-9]'
paste  <( apt-mark showmanual ) <( apt-mark showmanual | sed -r "s/$REMOVE_VERSIONS_REGEX//g" ) |
    grep -vf <( curl $BASE_PACKAGES_MANIFEST | cut -f1 | sed -r "s/$REMOVE_VERSIONS_REGEX|:amd//g" ) |
    cut -f1 |
    sort |
    uniq

Lo script filtra i pacchetti presenti nel manifest originale eseguendo un confronto indipendente dalla versione, in modo che i pacchetti aggiornati non vengano visualizzati nell'elenco. Ho finito con un elenco di circa 60 pacchetti.

L'altro modo che mi piace è questa risposta che cerca tutti i registri apt .


-1

Per ottenere l'elenco dei pacchetti installati più recenti in ordine decrescente, mi piace usare (ad es. 25 righe):

tac /var/log/apt/history.log |head --lines=25

1
Più efficiente (e allitterativo) sarebbe: tail -25 /var/log/apt/history.log | tac
agc,

Questo non differisce sufficientemente dalla risposta di @ ℝaphink e dovrebbe essere un commento ad esso.
Karl Richter,
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.