Como ver os pacotes instalados em uma determinada data usando o 'aptitude'?

54

Alguém sabe se existe uma maneira fácil de encontrar uma lista de pacotes instalados, classificados por data, ao usar aptitude(ou apt-get)?

Instalei vários pacotes para tentar algo novo, mas não deu certo. Gostaria de remover todos esses pacotes, para recuperar algum espaço em disco.

Eu tentei apenas olhar para a lista de arquivos .deb baixados, mas isso parece uma maneira bastante atrasada de fazê-lo (embora funcione).

Mikeage
fonte

Respostas:

43

Infelizmente, o dpkg (o aptitude do manipulador de pacotes funciona em cima de) não salva especificamente a data de instalação dos pacotes, embora haja a intenção de adicioná-lo. No entanto, a data da instalação pode ser encontrada observando o carimbo de data dos arquivos gravados no diretório /var/lib/dpkg/info.


fonte
4
Se você usar essa abordagem, verifique apenas os carimbos de data e hora nos *.listarquivos, pois os outros arquivos são carimbados com a data do pacote.
Dave
20

Eu configurei o aptitude para gravar em um log ( /var/log/aptitude). Produz saída como esta;

Aptitude 0.4.11.11: log report
Mon, Feb  9 2009 13:21:28 +0100

IMPORTANT: this log only lists intended actions; actions which fail due to
dpkg problems may not be completed.

Will install 6 packages, and remove 0 packages.
4096B of disk space will be used
===============================================================================
[UPGRADE] apt 0.7.20.1 -> 0.7.20.2
[UPGRADE] apt-utils 0.7.20.1 -> 0.7.20.2
[UPGRADE] base-passwd 3.5.19 -> 3.5.20
[UPGRADE] libgnutls26 2.4.2-5 -> 2.4.2-6
[UPGRADE] libpq5 8.3.5-1 -> 8.3.6-1
[UPGRADE] ucf 3.0015 -> 3.0016
===============================================================================

Log complete.

Isso mostra a data exata e os pacotes que o aptitude instalou. Para configurar isso, siga a referência de aptidão;

Option:Aptitude::Log

Default:/var/log/aptitude

Description: If this is set to a nonempty string, aptitude will log the package
installations, removals, and upgrades that it performs. If the value of
Aptitude::Log begins with a pipe character (ie, ``|''), the remainder of its
value is used as the name of a command into which the log will be piped: for
instance, |mail -s 'Aptitude install run' root will cause the log to be emailed
to root. To log to multiple files or commands, you may set this option to a list
of log targets.

Você encontrará um link para a referência do aptitude na página de manual do aptitude.

jeremiah
fonte
11
Por favor, poste o link e como implementá-lo. Apenas referir-se a algum texto manual não é muito útil.
not2qubit
17

Existe uma maneira simples de ver a data de instalação de todos os pacotes. Basta executar:

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

Como resultado, você obterá uma lista de todos os pacotes instalados com data e hora exata.

Obrigado pelos comentários que me levaram a essa solução.

jmarceli
fonte
2
O cdcomando não é necessário se você usar o caminho completo no catcomando ...
papukaija
11
O objetivo do cdcomando era lsdentro deste diretório para verificar os arquivos dpkg.log disponíveis. Mas uma solução melhor será executada ls /var/log | grep 'dpkg.log'para listar os arquivos de log. Desculpa a bagunça.
jmarceli
2
ou apenas "grep install /var/log/dpkg.log*"?
Marc Van Daele 25/10
11
Huh, eu não sabia que cat | catera algo que você poderia fazer. Mas por que não reunir os dois arquivos em um comando? (Ou melhor ainda: só faço o que @MarcVanDaele diz.)
mwfearnley
13

Encontrei este aqui na web. Ele cria um histórico do dpkg a partir do arquivo de log do dpkg.

Parece muito simples.

function apt-history(){
      case "$1" in
        install)
              cat /var/log/dpkg.log | grep 'install '
              ;;
        upgrade|remove)
              cat /var/log/dpkg.log | grep $1
              ;;
        rollback)
              cat /var/log/dpkg.log | grep upgrade | \
                  grep "$2" -A10000000 | \
                  grep "$3" -B10000000 | \
                  awk '{print $4"="$5}'
              ;;
        *)
              cat /var/log/dpkg.log
              ;;
      esac
}

Fonte

EDITAR

Eu tentei esse script no Ubuntu 8.10 Server e funciona muito bem. Você poderia fornecer algumas informações, como resolveu o seu problema?

guerda
fonte
5
  • Use os logs do dpkg

    locate dpkg.log | xargs cat {} | grep " install "
    
  • OU se você não tiver locate

    find /var/log/ -name 'dpkg.log' | xargs cat {} | grep " install "
    
  • Use sortpara garantir pedidos adequados com base no tempo

    locate dpkg.log | xargs cat {} | grep " install " | sort
    
  • Use tac(reverso cat) *, cabeça eg para receber as últimas 4 entradas

    locate dpkg.log | xargs cat {} | grep " install " | sort | tac | head -n4
    

Por exemplo, para o último comando, recebo:

2014-10-08 18:56:12 install xorg-server-source:all <none> 2:1.16.1-1
2014-10-08 18:49:34 install libelementary-data:all <none> 0.7.0.55225-1
2014-10-08 18:46:57 install e17:i386 <none> 0.17.6-1
2014-10-08 18:46:56 install libedje-bin:i386 <none> 1.8.6-2.1+b1
a20
fonte
11
Por que você usaria tac+ em headvez de tail?
Zanna
11
Tem sido um tempo, eu esqueci o porquê - mas é possível há uma inteiramente boa razão para isso .. ou talvez eu tinha um momento louro: D
a20
4

Você também pode rastrear suas ações anteriores, verificando /var/log/apt/term.log e arquivos mais antigos term.log.1.gz etc.). Possui registros de data e hora e log completo de mensagens durante a instalação.


fonte
2

[RESPONDENDO A PERGUNTA REAL], Sim, existe uma maneira FÁCIL de procurar pacotes instalados em uma data específica, mesmo que isso tenha sido feito dentro do terminal usando o apt-get.

Se você instalar o Synaptic Package Manager, que pode ser instalado livremente no Ubuntu Software Center, você só precisa abrir o menu FILE e escolher a opção "Histórico". Lá, você encontrará uma contabilidade de todos os pacotes de aplicativos adicionados e removidos, organizados por data, independentemente de como eles foram instalados ou removidos.

gyropyge
fonte
2

De fato, existe um pkginstall.shscript 'oficial' que pode fazer isso. Siga as instruções na documentação oficial . Resumidamente, faça o download do script no link acima, verifique se ele é executável e execute com:

~/pkginstalls.sh

Isso criará um pkginstalls.txtarquivo em seu diretório pessoal contendo todos os pacotes instalados classificados por data.

BTW, este é o conteúdo do script:

#!/bin/bash
#pkginstalls.sh
#creates text file with a list of all packages installed by date

#first append all info from archived logs

i=2
mycount=$(ls -l /var/log/dpkg.log.*.gz | wc -l)
nlogs=$(( $mycount + 1 ))

while [ $i -le $nlogs ]
do
if [ -e /var/log/dpkg.log.$i.gz ]; then
zcat /var/log/dpkg.log.$i.gz | grep "\ install\ " >> $HOME/pkgtmp.txt
fi
i=$(( $i+1 ))

done

#next append all info from unarchived logs

i=1
nulogs=$(ls -l /var/log/dpkg.log.* | wc -l)
nulogs=$(( $nulogs - $nlogs + 1 ))
while [ $i -le $nulogs ]
do
if [ -e /var/log/dpkg.log.$i ]; then
cat /var/log/dpkg.log.$i | grep "\ install\ " >> $HOME/pkgtmp.txt
fi
i=$(( $i+1 ))

done

#next append current log

cat /var/log/dpkg.log | grep "\ install\ " >> $HOME/pkgtmp.txt

#sort text file by date

sort -n $HOME/pkgtmp.txt > $HOME/pkginstalls.txt

rm $HOME/pkgtmp.txt

exit 0
Ron
fonte