Como posso listar pacotes instalados por data de instalação?
Eu preciso fazer isso no debian / ubuntu. As respostas para outras distribuições também seriam boas.
Instalei muitas coisas para compilar um determinado pedaço de código e quero obter uma lista dos pacotes que tive que instalar.
debian
package-management
apt
Elazar Leibovich
fonte
fonte
Respostas:
Distribuições baseadas em RPM como Red Hat são fáceis:
No Debian e em outras distribuições baseadas em dpkg, seu problema específico também é fácil:
A menos que o arquivo de log tenha sido girado, nesse caso, você deve tentar:
Em geral,
dpkg
eapt
não parecem rastrear a data da instalação, passando pela falta de tal campo nadpkg-query
página de manual.E, eventualmente, os
/var/log/dpkg.log.*
arquivos antigos serão excluídos pela rotação do log, para que não seja garantido que você tenha todo o histórico do seu sistema.Uma sugestão que aparece algumas vezes (por exemplo, esta discussão ) é olhar para o
/var/lib/dpkg/info
diretório. Os arquivos sugerem que você tente algo como:Para responder sua pergunta sobre seleções, aqui está uma primeira passagem.
construir lista de pacotes por datas
construir lista de pacotes instalados
junte-se às 2 listas
Por alguma razão, não está imprimindo muitas diferenças para mim; portanto, pode haver um erro ou uma suposição inválida sobre o que
--get-selections
significa.Obviamente, você pode limitar os pacotes usando
find . -mtime -<days>
ouhead -n <lines>
e alterar o formato de saída como desejar, por exemplopara listar apenas as seleções que foram instaladas (alteradas?) nos últimos 4 dias.
Você provavelmente também pode remover os
sort
comandos depois de verificar a ordem de classificação usadadpkg --get-selections
e tornar ofind
comando mais eficiente.fonte
apt-get
mais do querpm
, mas agora o debian recebe -1 por não salvar a data de instalação no banco de dados. O truque debian inclui todos os pacotes instalados, não apenas os pacotes selecionados , mas é um bom começo.half-installed
entradas) se o fizer:grep install\ /var/log/dpkg.log
grep " install " /var/log/dpkg.log
lista apenas as linhas de "instalação" em vez de mostrar as linhas de "status" também.Mikel mostrou como fazer isso no nível do dpkg . Em particular,
/var/lib/dpkg/info/$packagename.list
é criado quando o pacote é instalado (e não é modificado posteriormente).Se você usou as ferramentas do APT (o que você presumivelmente usou desde que se preocupa com pacotes instalados automaticamente ou manualmente), há um histórico
/var/log/apt/history.log
. Desde que não tenha girado, ele acompanha todas as instalações, atualizações e remoções do APT, com uma anotação para pacotes marcados como instalados automaticamente. Este é um recurso relativamente recente, introduzido no APT 0.7.26, portanto, no Debian, ele apareceu no squeeze. No Ubuntu, o 10.04 possui,history.log
mas a anotação instalada automaticamente não está presente até a 10.10.fonte
Áspero, mas funciona:
fonte
ls
. Veja mywiki.wooledge.org/ParsingLs para obter notas sobre por que isso é perigoso / inerentemente incorreto - a opção mais segura é usar umfind -printf
oustat --format
gerar um fluxo que possa ser analisado sem ambiguidades.ls -al --time-style=long-iso
deve ser útil. Além disso, provavelmente é inédito que alguém nomearia um pacote APT\n\t\r\v
em seu nome.O
/var/log/apt/history.log
arquivo tem um formato estranho IMHO.Eu teria preferido um registro mais formatado em arquivo de log
ou algum XML mostrando não apenas um {pacote}, mas qualquer {dependência}.
Conforme implementado atualmente, você pode descobrir as informações que procura, mas isso requer algum processamento forense para extrair os detalhes.
fonte
Isso funciona para mim em um sistema Debian, acho que o formato do arquivo mudou desde 2011. Esse sistema é bem novo, então eu não esperaria que isso funcionasse em um sistema mais antigo, embora isso possa exigir apenas descompactar os logs e usar um globo para se referir a todos eles.
Os dois primeiros campos em cada linha do arquivo
/var/log/dpkg.log
são a data e a hora. Observe o espaço à direita com a instalação na parte grep, isso ocorre porque as atualizações podem acionar instalações, mas se eu entendi corretamente, você queria saber o que foi instalado pelos usuários.fonte
Aqui está o one-liner que todos desejam e precisam:
O resultado mostrará todos os pacotes (recentemente) instalados e atualizados em ordem cronológica.
A explicação da linha:
ls -1t
- obtenha todosdpkg.log*
os nomes de arquivos em ordem cronológicazcat -f
- Se o arquivo for do tipo gzip e descompactá-lo, o ELSE apenas passará o conteúdo.tac
- Saída reversa de gato , linha por linha, para garantir que obtemos a ordem cronológica correta.grep
- Verifique apenas os pacotes instalados ou de atualização .awk -F ':a'
- Separe o campo de arquitetura do nome do pacotecolumn -t
- imprima as colunas separadas por espaçoÉ claro que alguém gostaria de criar um alias para isso, mas infelizmente não é possível, pois o awk depende de aspas simples e duplas. Nesse sentido, é melhor colocar um script bash e onde o
:
separador é tratado melhor para outras arquiteturas na coluna de campo.A saída é:
Recua:
fonte
Observando isso porque você menciona que outras respostas de distribuição são bem-vindas. O rpm possui um grande conjunto de tags de formato de saída, um dos quais é INSTALLTIME. (Usando
wget
como exemplo)Isso pode ser formatado de algumas maneiras. Eu o uso desta maneira:
Essas duas páginas têm muitas informações excelentes para solucionar problemas de metadados do RPM:
http://www.rpm.org/max-rpm/s1-rpm-query-parts.html
http://www.rpm.org/max-rpm/s1-rpm-query-handy-queries.html
A classificação dessas informações forneceria uma solução funcional para o seu problema.
fonte
GNU / Linux Debian não possui ferramentas internas para esse problema, mas todas as informações sobre os programas instalados da maneira padrão são salvas em arquivos com o nome do programa.list no local / var / lib / dpkg / info / . Mas não há informações sobre programas instalados manualmente lá.
Uma solução longa e de linha única :
Explicação :
ls -rt
gera arquivos classificados por modificação de data na ordem inversa, ou seja , com os arquivos mais recentes no final da lista.stat
imprime a data do arquivo em formato legível por humanos.printf
exibe o nome do pacote e a data da sua última modificação.for
loop como um todo imprime nomes e datas dos pacotes, do mais antigo ao mais recente.Exemplo de saída (truncado):
O principal defeito dessa solução é que ela não é bem testada na produção.
fonte
/var/lib/dpkg/info/
. É também por isso que o uso/var/log/dpkg.log*
pode ser preferido.É difícil, mas funciona tão rapidamente quanto outras soluções. O formato da data é aaaammddhhmmss, o que significa que um pouco de remoção ou reordenação e formato resulta em um número que pode ser classificado.
Muito obrigado às outras soluções, esta lista de nomes de pacotes em ordem de instalação que podem ser usados em um sistema operacional criado para criar cópias.
fonte