Як оновити один пакет за допомогою apt-get?


826

Як оновити єдиний пакет? Наскільки man apt-getсказано apt-get upgrade, не приймайте пакет / список пакунків як параметр:

оновлення

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

Відповіді:


1026

Вам просто потрібно зробити apt-get install --only-upgrade <packagename>. Це оновить лише той єдиний пакет, і лише якщо він встановлений.

Якщо ви хочете встановити пакет, якщо він не існує, або оновити його, якщо він є, ви можете залишити його --only-upgrade.


88
apt-get install --only-upgrade <packagename>не встановлюватиме жодних нових пакетів
taneli

9
Чи installоновить команду також залежність цього єдиного пакету, якщо необхідно?
Піно

7
@Pino Буде, має сенс зробити це. Що робити, якщо версія, до якої ви оновите, залежить від нової версії іншого пакета? Ви шлангуєте, якщо не модернізуєте обох. Ось чому installце правильна команда для цього, навіть якщо це здається контрінтуїтивним.
Метт Додж

6
Це видаляє позначку "авто"? Іноді при встановленні бібліотек спеціально пакет позначається як встановлений вручну. З цієї причини мені не подобається запускати «встановити» в бібліотеках.
isaaclw

3
Я щойно перевірив, оскільки вся інформація досить розпливчаста; в Ubuntu 16.04 ( apt 1.0.1) оновлення пакету за допомогою apt installне впливає на autoмарку, --only-upgradeпостачається вона чи ні. Хоча звичайно використовувати --only-upgradeсенс, якщо ви не хочете випадково встановити щось нове. Він також оновить будь-які необхідні залежності.
протримався

129

Щоб оновити один пакет за допомогою 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.

11
Я отримую помилку з цією командою:E: Sense only is not understood, try true or false.
Майкл

1
Тим, хто стикається з помилкою попереднього коментатора, дивіться мою відповідь нижче .
голем

3
знизив, оскільки не додав нової інформації з попередніх відповідей
gokul_uf

1
Ви повинні перейти --only-upgradeдо installпідкоманди, а не безпосередньо до цього apt-get, тоді вам не доведеться додавати true.
Руслан

55

Є два можливі способи придумати:

  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: Клацніть правою кнопкою миші → Позначити для оновлення :

    введіть тут опис зображення

    Примітка : Іноді він може просити додаткові пакети або залежності, це нормально.


1
Так, воно повинно і sudo apt-get install whateverповинно зробити оновлення самостійно.
Binarylife

4
upgradeне приймає аргумент пакету.
ℝaphink

25

З мого досвіду щодо 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 з певним номером версії та voila!

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

Я додав це лише тому, що мені не вдалося знайти цю інформацію ніде!


16

У 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>

працював у моєму випадку.


4
Ви повинні перейти --only-upgradeдо installпідкоманди, а не безпосередньо до цього apt-get, тоді вам не доведеться додавати true.
Руслан

10

Для рішення командного рядка, яке не встановлює пакет, якщо він ще не існує:

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.