Liste as atualizações disponíveis, mas não as instale

Eu quero que meu script de relatório de execução cron me notifique caso haja atualizações para meus pacotes. É uma maneira de fazer apt-get me dar a lista de atualizações disponíveis, mas não fazer mais nada?

Resposta

apt

Para versões modernas de apt, há uma opção específica para isso:

apt list --upgradable

apt-get

Para o antigo comando apt-get, o mostra uma lista de pacotes que estão disponíveis para atualização:

# apt-get -u upgrade --assume-no

De apt-get página do manual :

-u
–show- atualizado
  Mostrar pacotes atualizados; Imprima uma lista de todos os pacotes que devem ser atualizados. Item de configuração: APT :: Get :: Show-Upgraded.
–assume-no   “não” automático para todos os prompts. & lt == Para evitar que a instalação seja iniciada

Comentários

  • Eu esperava que isso pudesse ser feito sem root
  • Se você digitar ” Y ” e pressionar Enter, este comando irá instalar atualizações. Eu definitivamente recomendaria adicionar ” -s “, caso contrário, esta resposta é enganosa
  • Este é um resposta muito errada porque (sem opções adicionais) o comando espera pela entrada e se o usuário inserir a entrada errada, o pacote é instalado, o que modifica o sistema que não é o OP quer (acabou de acontecer no meu sistema)
  • E btw: -u é uma opção padrão de apt-get
  • @ThorSummoner ‘ -s ‘ fará o que você quiser & funciona sem raiz

Resposta

apt-get --just-print upgrade 

Não é lido tão facilmente , abaixo está uma linha perl para analisar a saída do apt-get “:

apt-get --just-print upgrade 2>&1 | perl -ne "if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "PROGRAM: $1 INSTALLED: $2 AVAILABLE: $3\n"}" 

Isso deve resultar em algo como:

PROGRAM: grub-pc INSTALLED: 1.99-21ubuntu3.1 AVAILABLE: 1.99-21ubuntu3.9 

Espero que ajude outra pessoa,

Comentários

  • j só para rir: apt-get -s upgrade | awk -F ‘ [] [()] + ‘ ‘ / ^ Inst / {printf ” Prog:% s \ tcur:% s \ tavail:% s \ n “, $ 2, $ 3, $ 4} ‘
  • Também poderia ser muito mais bonito, se usar column assim: apt-get --just-print upgrade 2>&1 | perl -ne 'if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "PROGRAM: $1 INSTALLED: $2 AVAILABLE: $3\n"}' | column -s " " -t
  • @AntonioK Parece ótimo!
  • Eu ‘ tenho medo que este código Perl hackeará minha máquina. .;)
  • @AntonioK Como você classifica os nomes dos programas em ordem alfabética?

Resposta

Outra opção, inspirada no enzotib:

aptitude search "~U" | wc -l

Este comando usará o aptitude para gerar os novos pacotes e depois wc apenas contar as linhas.

Em uma nota lateral, descobri que a solução do enzotib sem as aspas simples em torno de ~U não funcionou para mim. (Wheezy, ZSH, aptitude 0.6.8.2)

Atualização:

Com o novo apt você pode fazer:

apt list --upgradeable

Comentários

  • Obrigado por isso, o comando apt list era exatamente o que eu queria.
  • Legal com esta solução é que você não precisa de sudo / root.

Resposta

O mais fácil é:

apt list --upgradeable

Comentários

  • não funciona no mint.
  • ‘ é uma pena que não ‘ t retornar códigos de saída diferentes dependendo se há atualizações disponíveis ou não. Seria bom poder usar isso em um script.

Resposta

Você pode executar

aptitude -F%p --disable-columns search ~U 

ou o não documentado

/usr/lib/update-notifier/apt-check -p; echo 

Outro método usando um apt-get simulação:

apt-get -s dist-upgrade | awk "/^Inst/ { print $2 }" 

Comentários

  • Este comando aptitude funcionou muito bem para mim e funcionou não requer root
  • apt-get -s dist-upgrade também funciona bem e tem a mesma saída quando você canaliza por aquele awker
  • obrigado! isso saiu de um inferno de dependência. estava tentando dist-upgrade, mas não perdia alguns pacotes, então precisava usar aptitude. aptitude install $(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }') resolveu o problema!

Resposta

Dê uma olhada no pacote “apticron”:

apticron – Simples ferramenta para enviar e-mails sobre atualizações de pacotes pendentes

Apticron é um script simples que envia e-mails diários sobre atualizações de pacotes pendentes, como atualizações de segurança, tratando adequadamente os pacotes em espera por dselect e aptitude.

https://packages.debian.org/buster/apticron

Comentários

  • Seu link está quebrado …

Resposta

apt-get update && apt-get -s upgrade 

irá listar as atualizações disponíveis sem realmente instalar.

O primeiro comando atualiza os arquivos de índice do pacote antes que a atualização simulada (portanto -s) seja feito. “-s” fará uma atualização simulada mostrando os pacotes que seriam instalados, mas não instalará nada.

Ao contrário, “-u” em vez de “-s” instalaria na verdade após a confirmação. p>

Comentários

  • A opção de simulação pode ser acionada com qualquer um dos -s, --simulate, --just-print, --dry-run, --recon, --no-act, recon e dry-run são meus favoritos pessoais.

Resposta

Eu precisava de informações completas da versão sobre possíveis atualizações, então usei uma modificação de jasonwryan “s resposta:

apt-get -V -u upgrade 

É uma saída simples e IMO razoavelmente formatada.

Resposta

Basta filtrar a saída de

apt-get update && apt-get -s -V -u upgrade 

para ter apenas as informações preferidas em seu registro.

Provavelmente, você “precisará da parte bonita após a linha

Os seguintes pacotes serão atualizados:

que tem poucos espaços no início.

Comentários

  • Olá e bem-vindo ao site. Do jeito que está, sua resposta é basicamente uma repetição das existentes e, portanto, não acrescenta nada de novo. Você poderia melhorá-lo, por exemplo, explicando como filtrar a saída, adicionando uma explicação sobre o que as várias opções fazem, etc.

Resposta

apt-get update > /dev/null && apt-get --just-print upgrade | grep "Inst " 

é o mais simples para e-mails cron; não há iteração do usuário e, se não houver atualizações, não haverá saída.

Resposta

Jet outro on-line, inspirado por esta resposta :

 function a { read input;dpkg -l ${input} | grep " ${input} " | awk "{$1=$2=$3=$4="";print $0}" | sed "s/^ *//";unset input;};{ apt-get --just-print upgrade 2>&1 | perl -ne "if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "$1 (\e[1;34m$2\e[0m -> \e[1;32m$3\e[0m)\n"}";} | while read -r line; do echo -en "$line $(echo $line | awk "{print $1}" | a )\n"; done;  

A saída é semelhante a esta (colorida):

locales (2.13-38+deb7u7 -> 2.13-38+deb7u8) Embedded GNU C Library: National Language (locale) data [support] linux-headers-3.2.0-4-amd64 (3.2.65-1+deb7u1 -> 3.2.65-1+deb7u2) Header files for Linux 3.2.0-4-amd64 linux-headers-3.2.0-4-common (3.2.65-1+deb7u1 -> 3.2.65-1+deb7u2) Common header files for Linux 3.2.0-4 sudo (1.8.5p2-1+nmu1 -> 1.8.5p2-1+nmu2) Provide limited super user privileges to specific users 

Se você não quiser uma breve descrição, use esta:

 { apt-get --just-print upgrade 2>&1 | perl -ne "if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "$1 (\e[1;34m$2\e[0m -> \e[1;32m$3\e[0m)\n"}";} | while read -r line; do echo -en "$line\n"; done;  

Resultado:

locales (2.13-38+deb7u7 -> 2.13-38+deb7u8) linux-headers-3.2.0-4-amd64 (3.2.65-1+deb7u1 -> 3.2.65-1+deb7u2) linux-headers-3.2.0-4-common (3.2.65-1+deb7u1 -> 3.2.65-1+deb7u2) sudo (1.8.5p2-1+nmu1 -> 1.8.5p2-1+nmu2) 

Comentários

  • O liner é fantástico, exceto que não ‘ produz a descrição de alguns pacotes.

Resposta

apt-check é provavelmente o método de script mais eficiente.

/usr/lib/update-notifier/apt-check 2>&1 | cut -d ";" -f 1 

Uma modificação muito pequena mostra apenas as atualizações de segurança.

/usr/lib/update-notifier/apt-check 2>&1 | cut -d ";" -f 2 

Resposta

Depois de escrever um aviso para a resposta de @jasonwryan “, desejo fornecer minha própria solução:

apt-get dist-upgrade --assume-no 

Infelizmente, este não funciona com o debian wheezy e tive que verificar alguns contêineres lxc que ainda não foram atualizados. Este formulário sempre funcionará:

apt-get dist-upgrade </dev/null 

Finalmente, eu também queria reformatar a saída. Optei por alterar a chamada novamente (usando --dry-run, mas ignorando todas as saídas adicionais) porque parece mais seguro:

apt-get --dry-run dist-upgrade | awk " BEGIN{p=0} /^The/{p=1;t=$0} /no longer required/{p=0} #optional: /been kept back/{p=0} p && t{print t;t=""} /^ / && p{print $0} " 

Retorna:

The following packages have been kept back: iproute The following packages will be upgraded: unzip 

Resposta

Eu gosto de usar isto:

apt-get -qq update && apt-get -qq -s upgrade 

Você obtém uma saída como esta:

Inst linux-base [3.5] (4.5~deb8u1 Debian-Security:8/oldstable [all]) Conf linux-base (4.5~deb8u1 Debian-Security:8/oldstable [all]) 

se houver atualizações disponíveis e nenhum se não houver. Dessa forma, você pode simplesmente combiná-lo com uma solução de monitoramento.

Resposta

Como um variação eu uso o seguinte:

apt-get -V -s dist-upgrade \ |grep -E "^ .*=>.*" \ |awk "BEGIN { ul=sprintf("%*s",40,""); gsub(/ /,"-",ul); printf "%-30s %-30s %-30s\n", "Package", "Installed", "Available"; printf "%-30.30s %-30.30s %-30.30s\n", ul, ul, ul; } { printf "%-30s %-30s %-30s\n", $1, substr($2,2), substr($4,1,length($4)-1) }" 

Coloque-o em um script chamado apt-updates e você pode então chamar apt-updates para obter uma lista de todas as atualizações, independentemente do usuário.

Você ainda precisa chamar apt-get update com acesso privilegiado.

Comentários

  • a saída mostra apenas o nome do pacote (primeira coluna), a segunda coluna sempre imprime = ” e a terceira coluna está sempre vazia. Eu ‘ m no Mint.

Resposta

Lá ” a ferramenta apt-show-versions . Para mostrar as atualizações disponíveis, execute:

apt-show-versions -u 

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *