debian: remove todos os pacotes instalados em um dia específico

3

Eu tenho que remover todos os pacotes instalados em um dia específico.

Minha solução é procurar o arquivo /var/log/dpkg.log , descobrir a entrada com a data correta, extrair os nomes dos pacotes e removê-los.

Posso ter certeza de que, assim, encontrarei todos os pacotes desejados?

Existe outra maneira de fazer isso, de uma maneira mais segura / formal?

    
por Bau Miao 28.02.2014 / 08:50

1 resposta

2

/var/log/apt/history.log geralmente é melhor usar por vários motivos para isso, uma é que ele registra se um pacote foi instalado automaticamente para satisfazer dependências ou não. As atualizações são instaladas no mesmo dia e algumas delas têm novas dependências. Se você tentar removê-los, o apt recomendará remover os pacotes atualizados também. Você sempre pode remover as dependências automáticas dos pacotes removidos depois com apt-get autoremove .

Uma desvantagem de /var/log/apt/history.log é que ele registra somente pacotes instalados via apt (linha de comando ou gerenciador de pacotes), não aqueles instalados diretamente com dpkg . Outra é que o log é horrível de analisar:

date=2014-02-26
awk '$1=="Start-Date:" && $2=="'"$date"'" && got_date="yes" {}
  got_date=="yes" && $1=="Install:" && got_date="no" {
    for(i=2; i<=NF; i++) {
      if( $i !~ /,|\)/ && $(i+2) !~ /^automatic\)/ ) print $i } }' \
  /var/log/apt/history.log |
  xargs sudo apt-get -s remove

Remova o -s de apt-get quando tiver certeza de que você tem o que deseja. O formato de data pode variar de acordo com a localidade, portanto, verifique seu log para ver.

Além disso, apt-get autremove não removerá pacotes se outro pacote sugerir / recomendá-los (por exemplo, o pacote é instalado como uma dependência, mas mantido devido a uma sugestão). Aqui está o comando para obter tudo, beware isso pode remover mais do que você esperava (para mim isso realmente quer remover meu ambiente de desktop!):

date=2014-02-26
awk '$1=="Start-Date:" && $2=="'"$date"'" && got_date="yes" {}
  got_date=="yes" && $1=="Install:" && got_date="no" {
    for(i=2; i<=NF; i++) {
      if( $i !~ /,|\)/ ) print $i } }' \
  /var/log/apt/history.log |
  xargs sudo apt-get -s remove

Mais uma vez, remova -s quando estiver satisfeito.

    
por 28.02.2014 / 14:38