Como obtenho o histórico de "apt-get install" no Ubuntu?

85

Estou prestes a mover um servidor de uma caixa Ubuntu para outra. Não estou clonando a caixa antiga pela nova; Estou criando um novo sistema e moverei os dados conforme necessário. Quero instalar todo o software que tenho na caixa antiga da nova.

Existe uma maneira simples de encontrar o histórico de todos os comandos "sudo apt-get install" que forneci ao longo do tempo? Ou seja, o dpkg -l mostra todos os pacotes que foram instalados, mas não qual pacote de nível superior os instalou. Se existe uma maneira do dpkg me fornecer o pacote de instalação, eu posso encontrar os únicos lá; caso contrário, quero outra coisa para dizer "você instalou esses 24 pacotes".

Paul Hoffman
fonte
Você pode aceitar uma resposta abaixo? Ser grato às pessoas que responderam.
M-ric
Essas soluções verificarão apenas o que aconteceu APÓS a última rotação do log. Eles não verificam toda a história.
Kraang Prime
Maneira simples e rápida é dada por esta resposta, askubuntu.com/a/250530/197730 , para esta pergunta Como listar todos os pacotes instalados .
TooTone

Respostas:

68

A apthistória está /var/log/apt/history.logcomo foi dito em um comentário acima. Dito isto, isso não listará pacotes que foram instalados manualmente, usando dpkgGUIs, como gdebi. Para ver todos os pacotes que passaram dpkg, você pode olhar /var/log/dpkg.log.

ℝaphink
fonte
8

http://www.debianadmin.com/clone-your-ubuntu-installation.html

e /var/adm/apt/history.log

M_1
fonte
5
O procedimento no primeiro link não faz distinção entre pacotes instalados automaticamente e pacotes instalados manualmente. /var/log/apt/history.log(você digitou o local incorretamente), depois de alguns meses, ele será removido
Gilles
Gilles está certo em ambos os aspectos. Eu tenho apenas cerca de um mês desses logs e nem consigo ver como a taxa de exclusão de logs é definida (isso é feito com 'newsyslog' no FreeBSD). Então ainda não tenho uma solução, mas tenho algumas dicas. Posso, pelo menos, receber a saída do comando no artigo de clonagem, procurar nomes de "alto nível", instalá-los no novo, fazer o mesmo na nova caixa, diferenciar os dois resultados e repetir até ficar satisfeito. Eu ainda gostaria de ouvir mais idéias.
Paul Hoffman
7

Você pode listar os pacotes cuja instalação foi solicitada explicitamente apt-mark.

apt-mark showmanual

Caso você esteja executando um lançamento antigo do Debian, aqui está uma maneira manual.

O comando a seguir fornece a lista de pacotes cuja instalação foi solicitada, manual ou automaticamente. A menos que você esteja no meio de (des) instalar pacotes, esta é a lista de pacotes instalados.

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

O comando a seguir fornece um superconjunto de pacotes instalados automaticamente:

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

Juntando tudo, o seguinte comando lista os pacotes instalados 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)
Gilles
fonte
1
--- resultado muito diferente decomm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
Cbhihe
No Debian, existe o apt-mark showmanualque é equivalente ao seu último comando.
precisa saber é o seguinte
3
grep -i "Commandline" /var/log/apt/history.log

Mostra todos os pacotes que você instalou usando: sudo apt-get install xxxxx

Prent Rodgers
fonte
Isso não difere suficientemente da resposta de @ ℝaphink e deve ser um comentário para ela.
Karl Richter
2

Em vez da combinação tac / cabeça, é melhor usar cauda (nas últimas 25 linhas):

tail -n 25 /var/log/apt/history.log
Inteiro
fonte
Isso não difere suficientemente da resposta de @ ℝaphink e deve ser um comentário para ela.
Karl Richter
Além disso, não é o mesmo. tail listará as últimas linhas do arquivo, na ordem em que estão no arquivo. tac irá reverter a ordem para que a última linha seja agora a primeira, a penúltima seja a segunda, etc. Além disso, parece que você corre o risco de estar errado quando diz que algo é "melhor" sem explicar o porquê. Quero dizer, "melhor" de acordo com quem? Para que requisito? Parece meio confiante demais.
Todd Walton
0

As outras respostas ajudaram, mas me deram muita saída. Para reduzir a saída, comecei apt-mark showmanualcomo nesta resposta e depois filtramos os pacotes originalmente instalados (veja esta resposta para saber como obter uma lista dos pacotes originalmente instalados; estou usando o ubuntu 18.04.2, portanto, o link abaixo) .

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

O script filtra pacotes que estavam no manifesto original fazendo uma comparação independente da versão, para que os pacotes atualizados não apareçam na lista. Acabei com uma lista de cerca de 60 pacotes.

A outra maneira que eu gosto é essa resposta que pesquisa todos os logs do apt .

TooTone
fonte
-1

Para obter a lista dos pacotes instalados mais recentes em ordem decrescente, eu gosto de usar (por exemplo, 25 linhas):

tac /var/log/apt/history.log |head --lines=25
Hartmut P.
fonte
1
Mais eficiente (e aliterativo) seria: tail -25 /var/log/apt/history.log | tac
agc
Isso não difere suficientemente da resposta de @ ℝaphink e deve ser um comentário para ela.
Karl Richter