Come faccio a elencare i pacchetti installati in base alla data di installazione?
Devo farlo su debian/ubuntu. Sarebbero utili anche le risposte per altre distribuzioni.
Ho installato un sacco di cose per compilare un determinato pezzo di codice e voglio ottenere un elenco dei pacchetti che ho dovuto installare.
Risposta accettata:
Le distribuzioni basate su RPM come Red Hat sono facili:
rpm -qa --last
Su Debian e altre distribuzioni basate su dpkg, anche il tuo problema specifico è facile:
grep install /var/log/dpkg.log
A meno che il file di registro non sia stato ruotato, nel qual caso dovresti provare:
grep install /var/log/dpkg.log /var/log/dpkg.log.1
In generale, dpkg
e apt
non sembra tenere traccia della data di installazione, vista la mancanza di un campo simile nella dpkg-query
pagina man.
E alla fine il vecchio /var/log/dpkg.log.*
i file verranno eliminati dalla rotazione del registro, quindi non è garantito che in questo modo venga fornita l'intera cronologia del sistema.
Un suggerimento che appare alcune volte (ad esempio questo thread) è di guardare il /var/lib/dpkg/info
directory.
I file lì suggeriscono che potresti provare qualcosa come:
ls -t /var/lib/dpkg/info/*.list | sed -e 's/.list$//' | head -n 50
Per rispondere alla tua domanda sulle selezioni, ecco un primo passaggio.
crea l'elenco dei pacchetti in base alle date
$ find /var/lib/dpkg/info -name "*.list" -exec stat -c $'%nt%y' {} ; |
sed -e 's,/var/lib/dpkg/info/,,' -e 's,.listt,t,' |
sort > ~/dpkglist.dates
crea l'elenco dei pacchetti installati
$ dpkg --get-selections | sed -ne '/tinstall$/{s/[[:space:]].*//;p}' |
sort > ~/dpkglist.selections
unisciti alle 2 liste
$ join -1 1 -2 1 -t $'t' ~/dpkglist.selections ~/dpkglist.dates
> ~/dpkglist.selectiondates
Per qualche motivo non sta stampando molte differenze per me, quindi potrebbe esserci un bug o un'ipotesi non valida su cosa --get-selections
significa.
Ovviamente puoi limitare i pacchetti usando find . -mtime -<days>
o head -n <lines>
e cambia il formato di output come preferisci, ad es.
$ find /var/lib/dpkg/info -name "*.list" -mtime -4 |
sed -e 's,/var/lib/dpkg/info/,,' -e 's,.list$,,' |
sort > ~/dpkglist.recent
$ join -1 1 -2 1 -t $'t' ~/dpkglist.selections ~/dpkglist.recent
> ~/dpkglist.recentselections
per elencare solo le selezioni che sono state installate (modificate?) negli ultimi 4 giorni.
Probabilmente potresti anche rimuovere sort
comandi dopo aver verificato l'ordinamento utilizzato da dpkg --get-selections
e fai il find
comando più efficiente.