Jak zaktualizować pojedynczy pakiet za pomocą apt-get?

826

Jak zaktualizować pojedynczy pakiet? O ile man apt-getmówi apt-get upgrade, nie przyjmuje pakietu / listy pakietów jako parametru:

Aktualizacja

upgrade służy do instalowania najnowszych wersji wszystkich pakietów aktualnie zainstalowanych w systemie ze źródeł wymienionych w /etc/apt/sources.list. Pakiety aktualnie zainstalowane z dostępnymi nowymi wersjami są pobierane i aktualizowane; pod żadnym pozorem aktualnie nie są usuwane pakiety, ani pakiety, które nie zostały jeszcze zainstalowane, pobrane i zainstalowane. Nowe wersje aktualnie zainstalowanych pakietów, których nie można zaktualizować bez zmiany statusu instalacji innego pakietu, pozostaną w aktualnej wersji. Najpierw należy wykonać aktualizację, aby apt-get wiedział, że dostępne są nowe wersje pakietów.

lurscher
źródło

Odpowiedzi:

1026

Musisz tylko zrobić apt-get install --only-upgrade <packagename>. Spowoduje to uaktualnienie tylko tego jednego pakietu i tylko jeśli jest zainstalowany.

Jeśli chcesz zainstalować pakiet, jeśli nie istnieje, lub zaktualizować, jeśli tak, możesz go pominąć --only-upgrade.

Josh
źródło
88
apt-get install --only-upgrade <packagename>nie zainstaluje żadnych nowych pakietów
taneli
9
Czy installpolecenie zaktualizuje również zależności tego pojedynczego pakietu, jeśli to konieczne?
Pino
7
@Pino Będzie, warto to zrobić. Co się stanie, jeśli aktualizowana wersja zależy od nowszej wersji innego pakietu? Jesteś niezadowolony, jeśli nie zaktualizujesz obu. Oto dlaczego installjest to właściwe polecenie, nawet jeśli wydaje się to sprzeczne z intuicją.
Matt Dodge
6
Czy to usuwa znak „auto”? Czasami podczas instalowania bibliotek konkretnie pakiet jest oznaczany jako zainstalowany ręcznie. Z tego powodu nie lubię uruchamiać bibliotek w bibliotekach.
isaaclw
3
Właśnie przetestowałem, ponieważ wszystkie informacje są dość niejasne; w Ubuntu 16.04 ( apt 1.0.1) aktualizacja pakietu przy użyciu apt installnie wpływa na autoznak, niezależnie od tego, czy --only-upgradejest dostarczony, czy nie. Chociaż oczywiście używanie --only-upgradema sens, jeśli nie chcesz przypadkowo zainstalować czegoś nowego. Uaktualni również wszelkie wymagane zależności.
podwójny
129

Aby zaktualizować pojedynczy pakiet za pomocą interfejsu CLI:

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

na przykład, 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
źródło
11
Występuje błąd związany z tym poleceniem:E: Sense only is not understood, try true or false.
Michael,
1
Dla tych, którzy napotkają błąd poprzedniego komentatora, zobacz moją odpowiedź poniżej .
golem,
3
przegłosowano, ponieważ nie dodało nowych informacji z poprzednich odpowiedzi
gokul_uf
1
Powinieneś przejść --only-upgradedo installpodkomendy, a nie bezpośrednio do apt-get, wtedy nie będziesz musiał dołączać true.
Ruslan
55

Są dwa możliwe sposoby, o których mogę myśleć:

  1. sudo apt-get install nameofpackage

    Spowoduje to uaktualnienie pakietu, nawet jeśli jest już zainstalowany:

    ~$ 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. Używanie Synaptic Package Manager: Kliknij prawym przyciskiem myszy → Zaznacz do aktualizacji :

    wprowadź opis zdjęcia tutaj

    Uwaga : Czasami może prosić o dodatkowe pakiety lub zależności, jest to normalne.

Życie binarne
źródło
1
Tak, powinien i sudo apt-get install whateverpowinien sam dokonać aktualizacji.
Binarylife
4
upgradenie bierze argumentu pakietu.
inkaphink
25

Z mojego doświadczenia dotyczącego Ubuntu 12.04 LTS, użycie poniższego polecenia nie spowoduje aktualizacji pakietu, jeśli używasz osobnego PPA -

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

Podobnie nie chciałem uruchamiać polecenia upgrade, które aktualizowałoby wszystkie pakiety na moim serwerze -

sudo apt-get dist-upgrade

Na przykład mam zainstalowany PHP 5.3 i dodałem PPD ondrej do moich apt.sources, używając -

sudo add-apt-repository ppa:ondrej/php5

Jeśli ucieknę

sudo apt-get install php5

po prostu ponownie zainstaluje PHP 5.3.

Najpierw muszę ustalić numer wersji do aktualizacji, używając

sudo apt-cache policy php5

Spowoduje to wyświetlenie wszystkich dostępnych numerów wersji. Powinieneś znaleźć numer wersji, którą chcesz zaktualizować, a następnie skopiować cały ciąg, który się do niego odwołuje. Na przykład ciąg znaków dla PHP 5.5 na Ubuntu to „5.5.16 + dfsg-1 + deb.sury.org ~ precision + 2”.

Teraz możesz uruchomić polecenie apt-get install z określonym numerem wersji i voila!

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

Dodałem to tylko dlatego, że nie mogłem znaleźć tych informacji nigdzie indziej!

chopsuei3
źródło
16

Na Ubuntu 9.04 Jaunty,

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

daje:

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

Komenda

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

pracował w moim przypadku.

golem
źródło
4
Powinieneś przejść --only-upgradedo installpodkomendy, a nie bezpośrednio do apt-get, wtedy nie będziesz musiał dołączać true.
Ruslan
10

W przypadku rozwiązania wiersza polecenia, które nie instaluje pakietu, jeśli jeszcze nie istnieje:

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

Można to łatwo przekształcić w skrypt, np .:

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
źródło