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

Как мне обновить один пакет? Поскольку man apt-get говорит apt-get upgrade не принимает пакет / список пакетов в качестве параметра:

обновлять

обновление используется для установки новейших версий всех пакетов, установленных в настоящее время в системе, из источников, перечисленных в /etc/apt/sources.list. Пакеты, установленные в настоящее время с доступными новыми версиями, извлекаются и обновляются; ни при каких обстоятельствах установленные в настоящее время пакеты не удаляются, или пакеты, которые еще не установлены, извлекаются и устанавливаются. Новые версии установленных в настоящее время пакетов, которые нельзя обновить без изменения статуса установки другого пакета, будут оставлены в их текущей версии. Сначала необходимо выполнить обновление, чтобы apt-get знал, что доступны новые версии пакетов.

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

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

Для того, чтобы обновить один пакет с помощью CLI:

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

напр., sudo apt-get install --only-upgrade ack

Reading package lists... DoneBuilding dependency tree       Reading state information... DoneSkipping **ack**, it is not installed and only upgrades are requested.0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

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

  1. sudo apt-get install nameofpackage

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

    ~$ sudo apt-get install emeseneReading package lists... DoneBuilding dependency tree       Reading state information... DoneThe following packages will be upgraded:  emesene1 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: Щелкните правой кнопкой мыши→Отметить для обновления:

    enter image description here

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

По моему опыту работы с 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 ~точность+2".

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

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

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

На Ubuntu 9.04 Веселый,

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

доходность:

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

Команда

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

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

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

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

Для обновления одного пакета на Ubuntu 18.04 LTS:

sudo apt update && sudo apt install --only-upgrade <packagename>

Для обновления нескольких пакетов:

sudo apt update && sudo apt install --only-upgrade <package1> <package2> <package3>