如何使用apt-get升级单个包?

如何更新单个包? 至于man apt-getapt-get upgrade不会将包/包列表作为参数:

升级

upgrade用于从/etc/apt/sources.list枚举的源安装当前安装在系统上的所有软件包的最新版本。 当前安装有新版本的软件包将被检索和升级; 在任何情况下当前都没有安装包已删除,或者尚未安装的包已检索和安装 在不更改其他程序包的安装状态的情况下无法升级的当前安装程序包的新版本将保留其当前版本。 必须首先执行更新,以便apt-get知道新版本的软件包可用。

你只需要做apt-get install --only-upgrade 。 这将仅升级该单个程序包,并且仅在安装时才进行升级。

如果您希望安装该软件包(如果它不存在),或者如果它已经升级,您可以省略--only-upgrade

要使用CLI更新单个程序包:

 sudo apt-get install --only-upgrade  

例如, 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. 

我可以想到两种可能的方式:

  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右键单击→标记升级

    在此处输入图像描述

    注意 :有时它可能会要求其他包或依赖项,这是正常的。

根据我在Ubuntu 12.04 LTS上的经验,如果使用单独的PPA,使用下面的命令将不会升级包 –

 sudo apt-get --only-upgrade install  

同样地,我不想运行升级命令,这会升级我服务器上的所有软件包 –

 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~minin + 2”。

现在,您可以运行具有特定版本号的apt-get install命令,瞧!

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

我只是添加了这个,因为我无法在其他地方找到这些信息!

在Ubuntu 9.04 Jaunty上,

 apt-get --only-upgrade install  

收益率:

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

命令

 apt-get --only-upgrade true install  

在我的情况下工作。

对于不安装程序包的命令行解决方案(如果尚不存在):

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

这很容易变成一个脚本,例如:

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