Come visualizzare la cronologia di apt-get install?


18

Come posso visualizzare la cronologia dei apt-get installcomandi che ho eseguito manualmente?

Mi sembra che tutti i metodi disponibili mostrino tutto ciò che è stato installato fin dall'inizio dell'installazione di Ubuntu.

Come posso visualizzare la cronologia di da apt-get installquando il mio processo di installazione del sistema è stato completato?


Beh si. Cos'altro ti aspetteresti? Vuoi mostrare solo quelli che hai eseguito dal terminale e non quelli che erano gestiti da una GUI o qualcosa del genere? Si prega di modificare la tua domanda e chiarire.
terdon,

@terdon Okay ha apportato una nuova modifica
TellMeWhy dal

1
Ci sono dei log dpkgin /var/log/dpkg.log*.
Velkan,

1
@ParanoidPanda Che fallisce in vari modi. Troncamenti della cronologia, cose eseguite in altre shell, cose rimosse dalla storia o mai messe lì in primo luogo, cose installate da script, cose gestite da altri utenti ecc
Ecc.

1
@MrBones: lo so, e l'ho affermato nella mia risposta (e nei commenti sottostanti). Tuttavia l'OP ha chiesto un modo per visualizzare tutte le istanze quando hanno eseguito manualmente il apt-get installcomando per installare un pacchetto, e ho fornito una soluzione che fornisce queste informazioni a meno che il file della cronologia non sia stato modificato in alcuni modi (es: le voci hanno stato rimosso).

Risposte:


20

Penso che la risposta data qui da Ko sia il modo migliore che abbia visto finora. Anche se viene utilizzato Software Center apt, verrà elencato anche tutto ciò che è installato.

Il comando è:

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

Lo
testerò

Non è! controlla l'aggiornamento: askubuntu.com/a/680405/320386
kos

Utilizzare questo, è il modo più sicuro per questo compito: zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline:(?=.* install ) \K.*' | sed '1,4d': grep -Po '^Commandline:(?=.* install ) \K.*'filtrerà solo i apt-getcomandi contenenti installcon uno spazio iniziale e finale, sed '1,4d' potrebbe dipendere dalla specifica installazione; nel mio 1,4cancella esattamente il numero di voci provenienti da Ubiquity, che sono quelle che vuoi rimuovere. Fammi sapere se il numero è lo stesso sulla tua installazione, in questo modo almeno abbiamo una base: |
kos,

@kos Ottengo linee extra come apt-get -o APT::Status-Fd=4 -o APT::Keep-Fds::=5 -o APT::Keep-Fds::=6 -q -y --no-remove install linux-genericcon il nuovo comando. Sono le linee di Ubiquity?
Arronical

No, quelli sembrano provenire da Software Updater; non c'è modo di distinguere dai comandi eseguiti dall'utente e dai comandi eseguiti da alcuni apt-getfrontend, a parte Ubiquity che viene eseguito una sola volta (ad esempio le aptdaemonvoci verranno mostrate anche da quel comando). La scommessa migliore è comunque usare quel comando, che almeno esclude le voci di Ubiquity.
kos,

9

Basta digitare il seguente comando nel terminale per visualizzare tutti i registri di installazione.

grep " install " /var/log/dpkg.log

3

Per semplificare la risposta di @Arronical, un trucco che ho imparato di recente è che puoi usare zcat -qfper cat sia file gzip txt che txt.

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

diventa

zcat -qf /var/log/apt/history.log* | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

Da man zcat:

   -q --quiet
          Suppress all warnings.
   -f --force
          Force  compression  or  decompression  even if the file has multiple links or the corre‐
          sponding file already exists, or if the compressed data is read from  or  written  to  a
          terminal.  If  the  input  data is not in a format recognized by gzip, and if the option
          --stdout is also given, copy the input data without change to the standard  output:  let
          zcat  behave  as  cat.  If -f is not given, and when not running in the background, gzip
          prompts to verify whether an existing file should be overwritten.

2

Ecco uno script che stampa solo i pacchetti di livello superiore attualmente installati , in cui i "pacchetti di livello superiore" sono definiti come pacchetti atp da cui non dipendono altri pacchetti atp. Se tali programmi di livello superiore sono stati installati da atp o da un gestore di pacchetti come synaptic, sono stati scelti manualmente dall'utente.

#!/bin/sh
NumDaysAgo=18
find /var/lib/dpkg/info -name "*.list" -mtime -$NumDaysAgo \
    -exec stat -c $'%y\t%n' {} \; | \
sed -e 's,/var/lib/dpkg/info/,,' -e 's,\.list,,' | \
sort -r | \
while read Date Time Xxx Pkg
do 
    lncnt=$(apt-cache --installed rdepends $Pkg | wc -l)
    if [ $lncnt -eq "2" ]
        then echo "$Date $Time $Pkg"
    fi
done
echo "JOB COMPLETED: $BASH_SOURCE"

I pacchetti vengono stampati in ordine inverso presupponendo che l'utente abbia maggiori probabilità di desiderare prima le informazioni più recenti e che il programma è lento.

Flusso del programma:

  • Il programma prima raccoglie in un elenco tutti i pacchetti installati leggendo i nomi dei file in /var/lib/dpkg/info/. I tempi di modifica dei file sono i tempi di installazione.
  • Tale elenco è ordinato in ordine inverso.
  • Per ogni pacchetto installato $Pkg, una chiamata a apt-cache rdepends $Pkg richiede le dipendenze inverse di $Pkg. Se non ci sono dipendenze, si tratta di un pacchetto di livello superiore e le informazioni sul pacchetto vengono stampate: data ora nomepacchetto

Appunti:

  • Lo script dipende dal formato di output di apt-cache rdepends $Pkgcui era destinato agli occhi umani e potrebbe cambiare nelle versioni future di apt.
  • Il codice per la parte che raccoglie i nomi dei file in / var / lib / dpkg / info / proviene da questo post unix.stackexchange . Come ha sottolineato il poster "mikel" , i dpgkfile di log della cronologia non sono affidabili perché verranno ruotati dopo aver raggiunto un determinato volume.
  • Pagina man per apt-chache
  • La chiamata apt-cache rdepends ...è molto lenta presumibilmente perché ogni chiamata viene calcolata ripetendo tutte le dipendenze. Quindi lo script sopra inizia dalle installazioni più recenti per offrire all'utente la massima gratificazione istantanea possibile.
  • Il --installedflag dopo apt-cacheverifica che anche i pacchetti installati su dpkg siano installati correttamente. Se l'utente o un altro software di installazione bypassasse apt e utilizzasse direttamente dpkg, sarebbe possibile. QUESTO CASO NON È STATO TESTATO, ma penso che qualcosa di evidente verrebbe stampato nello standard o nell'output dell'errore
  • L'output non include i pacchetti scelti manualmente che in seguito sono diventati dipendenti da un pacchetto superiore. L'output può anche includere pacchetti che sono stati installati tramite apt da altri software di installazione di terze parti e quindi non sono realmente installati manualmente. Tuttavia, se lo scopo dell'output è come base per impostare un linux ripristinato da una /homedirectory di backup che includesse detto software di terze parti, allora questo output sarebbe adatto.
  • Alcuni dei nomi dei pacchetti includono numeri di versione, altri no. Menzionato solo per portare consapevolezza al fatto.

1

Se vuoi vedere tutte le cose che hai installato eseguendo:

sudo apt-get install [package]

E non hai incasinato la cronologia di bash, né vuoi visualizzare la cronologia di questo tipo di tipo di installazione per un altro utente (o tutti gli utenti), quindi puoi semplicemente eseguire:

history | grep "apt-get install"

E questo dovrebbe ottenere risultati per lo più pertinenti.


1
Avrò tutta la storia con questo?
TellMeWhy,

@DevRobot: a meno che tu non abbia modificato manualmente le voci con apt-get installin loro nel .bash_historyfile o eliminato questo file, il comando ti mostrerà tutte le istanze quando hai eseguito un comando con la stringa al apt-get installsuo interno sul tuo account utente (anche se tu esegui il comando come root e quindi non esattamente come il tuo account utente - che esegue un comando con sudo).

2
Potrebbe avere un problema se hai inserito più di 200 comandi
Arronical

2
@Si aspettano prove in merito alla presentazione di richieste ;-)
Rinzwind

1
Personalmente ritengo che 500 sia il valore predefinito ( gnu.org/software/bash/manual/html_node/… ).
Rinzwind,

1

Se si desidera la cronologia dei apt-get installcomandi, utilizzare il comando seguente:

grep "apt-get install" .bash_history

Produzione:

ravan@ravan:~$ grep "apt-get install" .bash_history

sudo apt-get install --no-install-recommends ubuntu-mate-core ubuntu-mate-desktop
sudo apt-get install xfce4
sudo apt-get install xfce4.12
sudo apt-get install pgadmin
sudo apt-get install touchegg
sudo apt-get install aptitude
sudo apt-get install aptitude
sudo gedit .bash_history | grep "apt-get install" 
sudo apt-get installvim
grep "apt-get install" .bash_history
cat .bash_history | grep "apt-get install" 

Per altre informazioni consultare Informazioni aggiuntive .

Ci sono anche informazioni di installazione più dettagliate nelle /var/log/apt/nelle history.loge history.log.X.gzfile e term.loge term.log.X.gzfile

Se vuoi la cronologia dei soli apt-getcomandi inclusi, allora

history | grep apt-get


apt-mark showmanualmostra tutti i pacchetti installati quando è stato installato anche il sistema operativo, anziché solo quelli effettivamente installati manualmente. È un modo strano per comportarsi bene!
Arronical

1
Questo non fornisce necessariamente dettagli specifici sulla storia. Ciò che le persone devono guardare è /var/log/apt/history.loge file simili. Ottieni solo l'elenco dei pacchetti selezionati e selezionati automaticamente. Da questa risposta non si fornisce alcuna cronologia cronologica di ciò che è stato installato, ciò che è stato rimosso, ciò che è stato aggiornato, ecc.
Thomas Ward

@Arronical - Dov'è la pagina man apt -mark showmanual? Non riesco a vederlo nella pagina man di Ubuntu 16.04 LTS per apt: < manpages.ubuntu.com/manpages/xenial/en/man8/apt.8.html >.
Craig Hicks il


0

Per vedere cosa hai installato e rimosso, reinstallato, ecc. Maggiori informazioni sul percorso delle installazioni apt-get.

La risposta può essere modificata in un alias:

alias apted='zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | fgrep Commandline: | cut -d " " -f 2- | grep -P "^|install"'

0

Si noti che alcuni argomenti possono essere impostati prima di quello di installazione, come lo script virtualmin sta facendo durante l'installazione: apt-get -y install nomepacchetto.

Quindi, se si desidera acquisire tutti i comandi di installazione, è necessario modificare la query regex.

zcat -qf /var/log/apt/history.log* | grep -Po '^Commandline: apt-get.*install (?!.*--reinstall)\K.*'
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.