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


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

Обновить

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


706
2018-05-20 16:36


Источник




Ответы:


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

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


888
2018-05-20 16:41



@Raphink: ваш комментарий об обновлении прав, но установка считается эквивалентом обновления одного пакета; install is followed **by one** or more packages desired for installation or upgrading , Если у вас есть лучший ответ, вы можете ответить на вопрос. Было бы здорово. - Binarylife
apt-get install --only-upgrade <packagename> не будет устанавливать новые пакеты - taneli
Будет ли install при необходимости обновить команду и зависимости этого единственного пакета? - Pino
@Pino Это будет, это имеет смысл сделать это. Что делать, если версия, которую вы обновляете, зависит от новой версии другого пакета? Если вы не обновляете оба варианта, вы будете закрыты. Вот почему installэто правильная команда для этого, даже если она кажется противоречащей интуиции. - Matt Dodge
Удаляет ли это знак «авто»? Иногда, когда вы устанавливаете библиотеки, пакет помечен как установленный вручную. По этой причине мне не нравится запускать «install» в библиотеках. - isaaclw


Чтобы обновить один пакет с помощью 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.

116
2017-10-15 11:22



Я получаю сообщение об ошибке с помощью этой команды: E: Sense only is not understood, try true or false. - Michael
Для тех, кто сталкивается с ошибкой предыдущего комментатора, см. мой ответ ниже, - golem
downvoted, поскольку он не добавлял новую информацию из предыдущих ответов - gokul_uf
Вы должны пройти --only-upgrade в install подкомандой, а не непосредственно apt-get, то вам не придется добавлять true, - Ruslan


Я могу думать о двух возможных способах:

  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: Щелкните правой кнопкой мыши → Отметить для обновления:

    enter image description here

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


48
2018-05-20 16:39



Да, это должно и sudo apt-get install whatever должен сделать обновление самостоятельно. - Binarylife
upgrade не принимает аргумент пакета. - ℝaphink
Правильно, спасибо, он обновляет все пакеты. - Binarylife


В моем опыте по 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

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


22
2017-09-18 16:14





На 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>

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


15
2018-04-13 18:21



Вы должны пройти --only-upgrade в install подкомандой, а не непосредственно apt-get, то вам не придется добавлять true, - Ruslan


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

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

9
2018-05-22 07:58