Wie aktualisiere ich ein einzelnes Paket mit apt-get?

827

Wie aktualisiere ich ein einzelnes Paket? Soweit man apt-getgesagt apt-get upgrade, wird ein Paket / eine Liste von Paketen nicht als Parameter verwendet:

Aktualisierung

Mit dem Upgrade werden die neuesten Versionen aller derzeit auf dem System installierten Pakete aus den in aufgeführten Quellen installiert /etc/apt/sources.list. Derzeit installierte Pakete, für die neue Versionen verfügbar sind, werden abgerufen und aktualisiert. Derzeit installierte Pakete werden unter keinen Umständen entfernt oder Pakete, die noch nicht installiert sind, werden abgerufen und installiert. Neue Versionen der aktuell installierten Pakete, die nicht aktualisiert werden können, ohne den Installationsstatus eines anderen Pakets zu ändern, behalten ihre aktuelle Version bei. Zuerst muss ein Update durchgeführt werden, damit apt-get weiß, dass neue Versionen von Paketen verfügbar sind.

lurscher
quelle

Antworten:

1027

Sie müssen nur tun apt-get install --only-upgrade <packagename>. Dadurch wird nur dieses einzelne Paket aktualisiert und nur, wenn es installiert ist.

Wenn Sie das Paket installieren möchten, wenn es nicht vorhanden ist, oder wenn Sie es aktualisieren möchten, können Sie es weglassen --only-upgrade.

Josh
quelle
88
apt-get install --only-upgrade <packagename>installiert keine neuen Pakete
taneli
9
Wird der installBefehl bei Bedarf auch die Abhängigkeiten dieses einzelnen Pakets aktualisieren?
Pino
7
@Pino Es wird, es macht Sinn, dies zu tun. Was ist, wenn die Version, auf die Sie aktualisieren, von einer neueren Version eines anderen Pakets abhängt? Sie sind abgesprungen, wenn Sie nicht beide upgraden. Deshalb installist dies der richtige Befehl, auch wenn er nicht intuitiv zu sein scheint.
Matt Dodge
6
Entfernt dies die "Auto" -Markierung? Manchmal, wenn Sie Bibliotheken speziell installieren, wird das Paket als manuell installiert markiert. Ich mag es aus diesem Grund nicht, 'install' auf Bibliotheken auszuführen.
Isaaclw
3
Ich habe gerade getestet, da alle Informationen ziemlich vage sind; Unter Ubuntu 16.04 ( apt 1.0.1) apt installwirkt sich das Aktualisieren eines Pakets mit nicht auf die autoMarke aus, unabhängig davon, ob --only-upgradees mitgeliefert wurde oder nicht. Natürlich ist die Verwendung --only-upgradesinnvoll, wenn Sie nicht versehentlich etwas Neues installieren möchten. Es werden auch alle erforderlichen Abhängigkeiten aktualisiert .
Dual
129

So aktualisieren Sie ein einzelnes Paket mithilfe der CLI:

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

z.B, 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
quelle
11
Ich erhalte einen Fehler mit diesem Befehl:E: Sense only is not understood, try true or false.
Michael
1
Für diejenigen, die auf den Fehler des vorherigen Kommentators stoßen, siehe meine Antwort unten .
Golem
3
downvoted, da keine neuen Informationen aus früheren Antworten
hinzugefügt wurden
1
Sie sollten --only-upgradean installUnterbefehl übergeben, nicht direkt an apt-get, dann müssen Sie nicht anhängen true.
Ruslan
55

Ich kann mir zwei Möglichkeiten vorstellen:

  1. sudo apt-get install nameofpackage

    Dadurch wird das Paket aktualisiert, auch wenn es bereits installiert ist:

    ~$ 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. Verwenden Synaptic Package Manager: Rechtsklick → Zum Aktualisieren markieren :

    Bildbeschreibung hier eingeben

    Hinweis : Manchmal werden zusätzliche Pakete oder Abhängigkeiten angefordert. Dies ist normal.

Binärleben
quelle
1
Ja, es sollte und sudo apt-get install whateversollte ein Upgrade von selbst durchführen.
Binarylife
4
upgradenimmt kein Paketargument an.
ℝaphink
25

Nach meiner Erfahrung mit Ubuntu 12.04 LTS wird das Paket mit dem folgenden Befehl nicht aktualisiert, wenn ein separater PPA verwendet wird.

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

Ebenso wollte ich nicht den Upgrade-Befehl ausführen, der alle Pakete auf meinem Server aktualisiert -

sudo apt-get dist-upgrade

Zum Beispiel habe ich PHP 5.3 installiert und das PPA ondrej zu meiner apt.sources hinzugefügt, indem ich -

sudo add-apt-repository ppa:ondrej/php5

Wenn ich renne

sudo apt-get install php5

es wird nur PHP 5.3 neu installieren.

Ich muss zuerst die Versionsnummer bestimmen, auf die das Upgrade durchgeführt werden soll

sudo apt-cache policy php5

Dies listet alle verfügbaren Versionsnummern auf. Sie sollten die Versionsnummer finden, auf die Sie aktualisieren möchten, und dann die gesamte Zeichenfolge kopieren, die darauf verweist. Beispielsweise lautet die Zeichenfolge für PHP 5.5 unter Ubuntu "5.5.16 + dfsg-1 + deb.sury.org ~ exact + 2".

Jetzt können Sie den Befehl apt-get install mit der spezifischen Versionsnummer ausführen und voila!

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

Ich habe dies nur hinzugefügt, weil ich diese Informationen nirgendwo anders finden konnte!

chopsuei3
quelle
16

Unter Ubuntu 9.04 Jaunty

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

ergibt:

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

Der Befehl

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

arbeitete in meinem Fall.

Golem
quelle
4
Sie sollten --only-upgradean installUnterbefehl übergeben, nicht direkt an apt-get, dann müssen Sie nicht anhängen true.
Ruslan
10

Für eine Befehlszeilenlösung, die das Paket nicht installiert, wenn es noch nicht vorhanden ist:

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

Dies kann leicht zu einem Skript gemacht werden, zB:

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
quelle