Como atualizar um único pacote usando o apt-get?

739

Como faço para atualizar um único pacote? Tanto quanto man apt-get diz apt-get upgrade não pega um pacote / lista de pacotes como parâmetro:

upgrade

upgrade is used to install the newest versions of all packages currently installed on the system from the sources enumerated in /etc/apt/sources.list. Packages currently installed with new versions available are retrieved and upgraded; under no circumstances are currently installed packages removed, or packages not already installed retrieved and installed. New versions of currently installed packages that cannot be upgraded without changing the install status of another package will be left at their current version. An update must be performed first so that apt-get knows that new versions of packages are available.

    
por lurscher 20.05.2011 / 18:36

6 respostas

926

Você só precisa fazer apt-get install --only-upgrade <packagename> . Isso atualizará apenas esse pacote único e somente se ele estiver instalado.

Se você deseja instalar o pacote, se ele não existir, ou atualizá-lo, use o --only-upgrade .

    
por Josh 20.05.2011 / 18:41
120

Para atualizar um único pacote usando a CLI:

sudo apt-get install --only-upgrade <packagename>

por exemplo, sudo apt-get install --only-upgrade ack

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Skipping **ack**, it is not installed and only upgrades are requested.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
    
por Ian 15.10.2012 / 13:22
50

Há duas maneiras possíveis de pensar:

  1. sudo apt-get install nameofpackage

    Isso atualizará o pacote mesmo se ele já estiver instalado:

    ~$ sudo apt-get install emesene
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    The following packages will be upgraded:
      emesene
    1 upgraded, 0 newly installed, 0 to remove and 5 not upgraded.
    Need to get 1,486 kB of archives.
    After this operation, 696 kB disk space will be freed.
    Get:1 http://il.archive.ubuntu.com/ubuntu/ natty-updates/universe emesene all 2.11.4+dfsg-0ubuntu1 [1,486 kB]
    
  2. Usando Synaptic Package Manager : Clique com o botão direito do mouse → Marcar para atualizar :

    Nota : Por vezes, pode pedir pacotes ou dependências adicionais, é normal.

por Binarylife 20.05.2011 / 18:39
22

Na minha experiência no Ubuntu 12.04 LTS, usar o comando abaixo não atualizará o pacote se usar um PPA separado -

sudo apt-get --only-upgrade install <packagename>

Similarmente, eu não queria executar o comando upgrade, que atualizaria todos os pacotes no meu servidor -

sudo apt-get dist-upgrade

Por exemplo, eu tenho o PHP 5.3 instalado e adicionei o ondrej PPA ao meu apt.sources usando -

sudo add-apt-repository ppa:ondrej/php5

Se eu correr

sudo apt-get install php5

apenas reinstalará o PHP 5.3.

Preciso, primeiro, determinar o número da versão para atualização, usando

sudo apt-cache policy php5

Isso listará todos os números de versão disponíveis. Você deve encontrar o número da versão para o qual deseja atualizar e, em seguida, copiar a string inteira que faz referência a ela. Por exemplo, a string para PHP 5.5 no Ubuntu é "5.5.16 + dfsg-1 + deb.sury.org ~ precise + 2".

Agora, você pode executar o comando apt-get install com o número de versão específico, e voila!

sudo apt-get install php5=5.5.16+dfsg-1+deb.sury.org~precise+2

Eu só adicionei isso porque não consegui encontrar essa informação em nenhum outro lugar!

    
por chopsuei3 18.09.2014 / 18:14
15

No Ubuntu 9,04 desenvolto,

apt-get --only-upgrade install <package>

rendimentos:

E: Sense only is not understood, try true or false.

O comando

apt-get --only-upgrade true install <package>

funcionou no meu caso.

    
por golem 13.04.2015 / 20:21
9

Para uma solução de linha de comando que não instala o pacote, se ainda não existir:

dpkg -s <package> 2>/dev/null | grep -q Status.*installed && sudo apt-get install <package>

Isso pode ser facilmente convertido em um script, por exemplo:

upgrade-package.sh:

#!/bin/bash

[[ -z $1 ]] && { echo "Usage: $(basename $0) package"; exit 1; }

if dpkg -s "$1" 2>/dev/null | grep -q Status.*installed; then
    echo "Attempting to upgrade $1"
    sudo apt-get install "$1"
else
    echo "Package $1 is not installed"
fi
    
por Shane 22.05.2012 / 09:58

Tags