Como visualizar o histórico de instalação do apt-get?

18

Como posso visualizar o histórico de apt-get installcomandos que executei manualmente?

Parece-me que todos os métodos disponíveis mostram tudo o que foi instalado desde o início da instalação do Ubuntu.

Como posso visualizar o histórico apt-get installdesde a conclusão do processo de instalação do sistema?

Diga-me o porquê
fonte
Bem, sim. O que mais você espera? Deseja mostrar apenas aqueles que foram executados no terminal e não aqueles que foram executados por uma GUI ou algo assim? Por favor edite sua pergunta e esclarecer.
terdon
@terdon Okay fez uma nova edição
TellMeWhy 1/15/15
1
Há registros de dpkgno /var/log/dpkg.log*.
Velkan
1
@ParanoidPanda Isso falha de várias maneiras. Truncamentos de história, as coisas funcionam em outras conchas, as coisas removidos da história, ou nunca colocar lá em primeiro lugar, as coisas instalados a partir de scripts, as coisas funcionam por outros usuários etc etc
squidly
1
@ MrBones: Eu sei, e afirmei isso na minha resposta (e nos comentários abaixo). No entanto, o OP pediu uma maneira de visualizar todas as instâncias quando eles executaram manualmente o apt-get installcomando para instalar um pacote, e eu forneci uma solução que fornece essas informações, a menos que o arquivo de histórico tenha sido alterado de determinadas maneiras (por exemplo: as entradas foram foi removido).

Respostas:

20

Eu acho que a resposta dada aqui por kos é a melhor maneira que eu vi até agora. Embora, como o Software Center use apt, qualquer coisa que ele tenha instalado também será listado.

O comando é:

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'
Arronical
fonte
Eu vou testar isso quando eu chegar em casa e aceitá-lo se ele funciona :)
TellMeWhy
Não é! confira a atualização: askubuntu.com/a/680405/320386
kos
Utilize este, é o caminho mais seguro para esta tarefa: 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.*'irá filtrar apenas os apt-getcomandos que contêm installcom um espaço à esquerda e à direita, sed '1,4d' pode ser dependente da instalação específica; no meu 1,4exclui exatamente o número de entradas provenientes da Ubiquity, que são aquelas que você deseja remover. Deixe-me saber se o número é o mesmo em sua instalação, dessa forma, pelo menos, temos uma linha de base: |
kos
@ kos Eu recebo linhas extras, como apt-get -o APT::Status-Fd=4 -o APT::Keep-Fds::=5 -o APT::Keep-Fds::=6 -q -y --no-remove install linux-genericcom o novo comando. Eles são as linhas da Ubiquity?
Arronical
Não, parece que eles vieram do Software Updater; não há como diferenciar comandos executados do usuário e comandos executados por algum apt-getfront-end, além do Ubiquity, que é executado apenas uma vez (por exemplo, as aptdaemonentradas também serão mostradas por esse comando). A melhor aposta ainda é usar esse comando, que pelo menos exclui as entradas da Ubiquity.
kos
9

Basta digitar o seguinte comando no seu terminal para visualizar todos os logs de instalação.

grep " install " /var/log/dpkg.log
Vikas Chaudhary
fonte
3

Para simplificar a resposta @Arronical, um truque interessante que aprendi recentemente é que você pode usar zcat -qfpara criar arquivos txt e txt com gzip.

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

torna-se

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

Do 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.
jjcf89
fonte
2

Aqui está um script que imprime apenas os pacotes de nível superior atualmente instalados , em que "pacotes de nível superior" são definidos como pacotes atp dos quais nenhum outro pacote atp depende. Se esses programas de nível superior foram instalados pelo atp ou por um gerenciador de pacotes como o synaptic, eles foram escolhidos manualmente pelo usuário.

#!/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"

Os pacotes são impressos em ordem inversa, supondo que é mais provável que o usuário deseje as informações mais recentes mais cedo e porque o programa é lento.

Fluxo do programa:

  • O programa primeiro reúne em uma lista todos os pacotes instalados lendo os nomes de arquivos em /var/lib/dpkg/info/. Os tempos de modificação do arquivo são os tempos de instalação.
  • Essa lista é classificada em ordem inversa.
  • Para cada pacote instalado $Pkg, uma chamada para apt-cache rdepends $Pkg solicita as dependências reversas de $Pkg. Se não houver dependências, é um pacote de nível superior e as informações do pacote são impressas: date time packagename

Notas:

  • O script depende do formato de saída apt-cache rdepends $Pkgdestinado aos olhos humanos e pode mudar nas versões futuras do apt.
  • O código da parte que reúne os nomes dos arquivos em / var / lib / dpkg / info / veio desta publicação do unix.stackexchange . Como o pôster 'mikel' apontou, os dpgkarquivos de log do histórico não são confiáveis ​​porque serão alternados após atingir um determinado volume.
  • Página de manual para apt-chache
  • A chamada apt-cache rdepends ...é muito lenta, presumivelmente, porque cada chamada é calculada através da iteração através de todas as dependências. Portanto, o script acima começa nas instalações mais recentes para oferecer ao usuário o máximo de gratificação instantânea possível.
  • A --installedflag após apt-cacheverifica se os pacotes instalados pelo dpkg também estão instalados. Se o usuário ou outro software de instalação ignorasse o apt e usasse o dpkg diretamente, seria possível. ESTE CASO NÃO FOI TESTADO, mas acho que algo perceptível seria impresso na saída padrão ou de erro
  • A saída não inclui pacotes escolhidos manualmente, que mais tarde se tornaram dependentes de um pacote superior. A saída também pode incluir pacotes que foram instalados via apt por outros softwares de instalação de terceiros e, portanto, não são realmente instalados manualmente. No entanto, se o objetivo da saída for a base para configurar um linux restaurado a partir de um /homediretório de backup que inclua o referido software de terceiros, essa saída será adequada.
  • Alguns nomes de pacotes incluem números de versão e outros não. Mencionado apenas para trazer a consciência para o fato.
Craig Hicks
fonte
1

Se você quiser ver todas as coisas que instalou executando:

sudo apt-get install [package]

E você não mexeu com o histórico do bash, nem deseja exibir o histórico desse tipo de tipo de instalação para outro usuário (ou todos os usuários), basta executar:

history | grep "apt-get install"

E isso deve gerar resultados principalmente relevantes.


fonte
1
Vou receber toda a história com isso?
TellMeWhy
@DevRobot: A menos que você altere manualmente as entradas com as apt-get installmesmas no .bash_historyarquivo ou exclua esse arquivo, o comando mostrará todas as instâncias quando você executar um comando com a string apt-get installna sua conta de usuário (mesmo se você execute o comando como root e, portanto, não exatamente como sua conta de usuário - que está executando um comando com sudo).
2
Ele pode ter um problema se você tiver digitado mais de 200 comandos embora
Arronical
2
Prova @Arronical é esperado ao fazer reivindicações ;-)
Rinzwind
1
Eu mesmo assumiria 500 como o padrão ( gnu.org/software/bash/manual/html_node/… ).
Rinzwind
1

Se você deseja histórico de apt-get installcomandos, use o seguinte comando:

grep "apt-get install" .bash_history

Resultado:

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" 

Para outras informações, consulte Informações adicionais .

Há também informações de instalação mais detalhada em /var/log/apt/nos history.loge history.log.X.gzarquivos e term.loge term.log.X.gzarquivos

Se você deseja histórico de apenas apt-getcomandos incluídos,

history | grep apt-get

Ravan
fonte
apt-mark showmanualmostra todos os pacotes instalados quando o sistema operacional também foi instalado, em vez de apenas aqueles realmente instalados manualmente. É uma maneira estranha de se comportar!
Arronical
1
Isso não fornece necessariamente detalhes específicos sobre a história. O que as pessoas precisam olhar é /var/log/apt/history.loge arquivos semelhantes. Você obtém apenas a lista de pacotes selecionados manualmente e selecionados automaticamente. Você não fornece nenhum histórico cronológico do que foi instalado, do que foi removido, do que foi atualizado etc. desta resposta.
Thomas Ward
@Arronical - Onde está a página de manual apt -mark showmanual? Não consigo vê-lo na página de manual do Ubuntu 16.04 LTS para apt: < manpages.ubuntu.com/manpages/xenial/en/man8/apt.8.html >.
Craig Hicks
0

Para ver o que você instalou e removeu, reinstalou, etc. Mais informações sobre a jornada das instalações do apt-get.

A resposta pode ser modificada para um 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"'
Mike
fonte
0

Observe que alguns argumentos podem ser definidos antes da instalação, como o script virtualmin está fazendo durante a instalação: apt-get -y install packagename.

Portanto, se você deseja capturar todos os comandos de instalação, precisa alterar a consulta regex.

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