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.

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.


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.

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.


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!


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.