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


827

Como atualizo um único pacote? Tanto quanto man apt-getdiz apt-get upgradenão leva um pacote / lista de pacotes como parâmetro:

Melhorar

upgrade é usado para instalar as versões mais recentes de todos os pacotes atualmente instalados no sistema a partir das fontes enumeradas em /etc/apt/sources.list. Pacotes atualmente instalados com novas versões disponíveis são recuperados e atualizados; sob nenhuma circunstância os pacotes atualmente instalados são removidos ou os pacotes ainda não instalados são recuperados e instalados. Novas versões dos pacotes atualmente instalados que não podem ser atualizados sem alterar o status de instalação de outro pacote serão deixadas na versão atual. Uma atualização deve ser executada primeiro para que o apt-get saiba que novas versões de pacotes estão disponíveis.

Respostas:


1027

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

Se você deseja instalar o pacote, se ele não existir, ou atualizá-lo, se houver, você pode deixar de fora --only-upgrade.


88
apt-get install --only-upgrade <packagename>não instalará nenhum pacote novo
taneli 15/10/12

9
O installcomando atualizará também as dependências desse pacote único, se necessário?
Pino 31/05

7
@Pino Será, faz sentido fazê-lo. E se a versão para a qual você está atualizando depende de uma versão mais recente de outro pacote? Você é processado se não atualizar os dois. É por isso que installé o comando certo para isso, mesmo que pareça contra-intuitivo.
Matt Dodge

6
Isso remove a marca "auto"? Às vezes, quando você instala bibliotecas especificamente, o pacote é marcado como instalado manualmente. Não gosto de executar 'install' nas bibliotecas por esse motivo.
Isaaclw 29/09/2015

3
Acabei de testar, pois todas as informações são bastante vagas; no Ubuntu 16.04 ( apt 1.0.1), a atualização de um pacote usando apt installnão afeta a automarca, seja --only-upgradefornecida ou não. Embora, é claro, o uso --only-upgradefaça sentido se você não deseja instalar acidentalmente algo novo. Ele também atualizará todas as dependências necessárias .
dualed

129

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.

11
Eu recebo um erro com este comando:E: Sense only is not understood, try true or false.
Michael

1
Para aqueles que encontrarem o erro do comentarista anterior, veja minha resposta abaixo .
golem

3
downvoted como não adicionar novas informações a partir de respostas anteriores
gokul_uf

1
Você deve passar --only-upgradepara o installsubcomando, não diretamente para apt-get, e não precisará anexar true.
Ruslan

55

Existem duas maneiras possíveis de pensar:

  1. sudo apt-get install nameofpackage

    Isso atualizará o pacote mesmo se 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 atualização :

    insira a descrição da imagem aqui

    Nota : Às vezes, pode solicitar pacotes ou dependências adicionais, é normal.


1
Sim, deve e sudo apt-get install whateverdeve fazer a atualização por si só.
Binarylife

4
upgradenão aceita um argumento de pacote.
precisa saber é o seguinte

25

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

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

Da mesma forma, 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 PPA ondrej 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 a qual atualizar, 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 a qual deseja atualizar e copiar a sequência inteira que a referencia. Por exemplo, a string do PHP 5.5 no Ubuntu é "5.5.16 + dfsg-1 + deb.sury.org ~ precision + 2".

Agora, você pode executar o comando apt-get install com o número da versão específica e pronto!

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

Só adicionei isso porque não consegui encontrar essas informações em nenhum outro lugar!


16

No Ubuntu 9.04 Jaunty,

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>

trabalhou no meu caso.


4
Você deve passar --only-upgradepara o installsubcomando, não diretamente para apt-get, e não precisará anexar true.
Ruslan

10

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

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

Isso pode ser facilmente transformado 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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.