Как обновить один пакет с помощью apt-get?

730

Как обновить один пакет? Что касается man apt-get , то apt-get upgrade не принимает пакет / список пакетов в качестве параметра:

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.

    
задан lurscher 20.05.2011 в 18:36
источник

6 ответов

916

Вам просто нужно сделать apt-get install --only-upgrade <packagename> . Это позволит обновить только один пакет и только если он установлен.

Если вы хотите установить пакет, если он не существует, или обновите его, если это произойдет, вы можете оставить --only-upgrade .

    
ответ дан Josh 20.05.2011 в 18:41
источник
118

Чтобы обновить один пакет с помощью CLI:

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

например, 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.
    
ответ дан Ian 15.10.2012 в 13:22
49

Есть два возможных способа, которыми я могу думать:

  1. sudo apt-get install nameofpackage

    Это обновит пакет, даже если он уже установлен:

    ~$ 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. Использование Synaptic Package Manager : Щелкните правой кнопкой мыши → Отметить для обновления :

    Примечание . Иногда он может запрашивать дополнительные пакеты или зависимости, это нормально.

ответ дан Binarylife 20.05.2011 в 18:39
22

В моем опыте по Ubuntu 12.04 LTS, используя приведенную ниже команду, не будет обновлять пакет, если использовать отдельный PPA -

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

Сходным образом, я не хотел запускать команду обновления, которая обновляла бы все пакеты на моем сервере -

sudo apt-get dist-upgrade

Например, у меня установлен PHP 5.3 и добавлен ondrej PPA к моим apt.sources, используя -

sudo add-apt-repository ppa:ondrej/php5

Если я запустил

sudo apt-get install php5

он просто переустановит PHP 5.3.

Я должен, во-первых, определить номер версии для обновления, используя

sudo apt-cache policy php5

Здесь перечислены все доступные номера версий. Вы должны найти номер версии, которую хотите обновить, а затем скопировать всю строку, которая ссылается на нее. Например, строка для PHP 5.5 на Ubuntu «5.5.16 + dfsg-1 + deb.sury.org ~ exact + 2».

Теперь вы можете запустить команду apt-get install с определенным номером версии и voila!

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

Я только добавил это, потому что я не смог найти эту информацию в другом месте!

    
ответ дан chopsuei3 18.09.2014 в 18:14
15

В Ubuntu 9.04 Jaunty,

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

дает:

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

Команда

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

работал в моем случае.

    
ответ дан golem 13.04.2015 в 20:21
9

Для решения командной строки, которое не устанавливает пакет, если он еще не существует:

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

Это можно легко сделать в скрипте, например:

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
    
ответ дан Shane 22.05.2012 в 09:58