Как обновить один пакет с помощью apt-get?
Как обновить один пакет? Что касается man apt-get
говорит, что apt-get upgrade
не принимает пакет /список пакетов в качестве параметра:
обновить
обновление используется для установки новейших версий всех пакетов в настоящее время установленный в системе из источников, перечисленных в
/etc/apt/sources.list
. Пакеты, установленные в настоящее время с новыми доступные версии доступны и обновляются; ни при каких условиях в настоящее время установлены удаленные пакеты или пакеты уже не установлены установленный и восстановленный. Новые версии установленных в настоящее время пакеты, которые нельзя обновить без изменения статуса установки другого пакета останется в их текущей версии. Обновление необходимо выполнить сначала, чтобы apt-get знал, что новые версии пакеты доступны.
6 ответов
Вам просто нужно выполнить 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... 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.
Есть два возможных способа, которыми я могу думать:
-
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]
-
Использование
Synaptic Package Manager
: Щелкните правой кнопкой мыши '' Отметить для обновления :Примечание . Иногда он может запрашивать дополнительные пакеты или зависимости, это нормально.
В моем опыте по 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
Я только добавил это, потому что я не смог найти эту информацию в другом месте!
В 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>
работал в моем случае.
Для решения командной строки, которое не устанавливает пакет, если он еще не существует:
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