apt-getを使用して単一のパッケージをアップグレードする方法は?


827

単一のパッケージを更新するにはどうすればよいですか?man apt-get言う限りではapt-get upgrade、パラメーターとしてパッケージ/パッケージのリストを取りません:

アップグレード

upgradeは、に列挙されているソースから現在システムにインストールされているすべてのパッケージの最新バージョンをインストールするために使用され /etc/apt/sources.listます。現在利用可能な新しいバージョンでインストールされているパッケージが取得され、アップグレードされます。現在、インストールされているパッケージが削除されたり、まだインストールされていないパッケージが取得およびインストールされたりすることはありません。別のパッケージのインストールステータスを変更せずにアップグレードできない現在インストールされているパッケージの新しいバージョンは、現在のバージョンのままになります。パッケージの新しいバージョンが利用可能であることをapt-getが認識できるように、最初に更新を実行する必要があります。

回答:


1027

あなたはただする必要があります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、誤って何か新しいものをインストールしたくない場合は、使用することは理にかなっています。また、必要な依存関係もアップグレードします。
dualed

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.
Michael

1
前のコメンテーターのエラーが発生した場合は、以下の私の回答をご覧ください。
ゴーレム

3
以前の回答から新しい情報を追加しなかったため、
ダウン投票

1
に直接ではなく--only-upgradeinstallサブコマンドに渡す必要がありapt-getますtrue。追加する必要はありません。
ルスラン

55

私が考えることができる2つの可能な方法があります:

  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パッケージ引数を取りません。
チャフィンク

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

これにより、使用可能なすべてのバージョン番号がリストされます。アップグレードするバージョン番号を見つけて、それを参照する文字列全体をコピーする必要があります。たとえば、Ubuntu上のPHP 5.5の文字列は「5.5.16 + dfsg-1 + deb.sury.org〜precise + 2」です。

これで、特定のバージョン番号でapt-get installコマンドを実行できます。

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-upgradeinstallサブコマンドに渡す必要があり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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.