如何更新单个软件包?就man apt-get而言,apt-get upgrade不会将软件包/软件包列表作为参数:


upgrade

upgrade用于安装所有软件包的最新版本当前安装在系统上的软件包
,来自
/etc/apt/sources.list中列举的来源。检索并升级当前安装有可用的新版本的软件包。在任何情况下
都不会删除当前已安装的软件包,或者尚未获取并安装尚未安装的软件包。当前安装的新版本
软件包,如果不更改其他软件包的安装状态
不能升级,则将保留其当前版本。必须先执行更新
,以便apt-get知道
软件包的新版本可用。


#1 楼

您只需要执行apt-get install --only-upgrade <packagename>即可。这将仅升级单个软件包,并且仅在安装了该软件包的情况下进行升级。

如果您希望安装该软件包(如果该软件包不存在),或者对其进行升级,则可以省略--only-upgrade

评论


apt-get install --only-upgrade <软件包名称>不会安装任何新软件包

– taneli
2012年10月15日上午11:29

如果需要,安装命令是否还会升级该单个软件包的依赖关系?

–皮诺
13年5月31日晚上8:18

@Pino这样做很有意义。如果要升级到的版本依赖于另一个软件包的较新版本怎么办?如果您不同时升级两者,那您将大受打击。这就是为什么install是正确的命令的原因,即使看起来违反直觉也是如此。

–马特·道奇(Matt Dodge)
13年8月22日在19:57

这会删除“自动”标记吗?有时,当您专门安装库时,该软件包会被标记为手动安装。因此,我不喜欢在库上运行“安装”。

–isaaclw
2015年9月29日在16:24

我刚刚进行了测试,因为所有信息都很模糊。在Ubuntu 16.04(apt 1.0.1)上,无论是否提供--only-upgrade,使用apt install升级软件包都不会影响自动标记。当然,如果您不想意外安装新的东西,当然使用--only-upgrade是有意义的。它还将升级任何必需的依赖项。

–已对偶
18年8月23日在13:01



#2 楼

为了使用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.


评论


我收到以下命令错误:E:无法理解仅意义,请尝试使用true或false。

–迈克尔
2013年9月20日在18:15

对于那些遇到前一个评论者错误的人,请参阅下面的我的答案。

– golem
15年4月13日在18:23



投票失败,因为它没有从先前的答案中添加新信息

– gokul_uf
16-3-22在23:55

您应该将--only-upgrade传递给install子命令,而不是直接传递给apt-get,则不必附加true。

–俄罗斯
17 Mar 23 '17 at 9:58

#3 楼

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



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]



使用Synaptic Package Manager:右键单击→标记为升级:



注意:有时可能会问对于其他软件包或依赖项,这是正常现象。



评论


是的,它应该和sudo apt-get install自行升级。

– Binallife
2011年5月20日在16:44



升级不带包参数。

–ℝaphink
11年8月4日在11:31

sudo apt-get install nameofpackage将进行升级,但如果仅将软件包作为依赖项安装,则还将软件包设置为“手动安装”。并非总是如此,因为它限制了以后sudo apt autoremove的用途。

– Tanius
6月19日11:17

#4 楼

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

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


我一直不想运行升级命令,它将升级服务器上的所有软件包-

sudo apt-get dist-upgrade


例如,我安装了PHP 5.3,并使用-<将ndrej PPA添加到了apt.sources中br />
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


我之所以只添加了它,是因为我无法在其他任何地方找到此信息!

评论


我想这对某些人来说是显而易见的,但是如果上面的apt-get install命令失败并显示一条消息,例如“无法获取某些档案”,则可能需要先运行apt update,然后重新运行apt-cache策略,以标识正确的版本。最终安装命令。

–CODE-REaD
5月20日19:29

#5 楼

在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>


以我的情况工作。

评论


您应该将--only-upgrade传递给install子命令,而不是直接传递给apt-get,则不必附加true。

–俄罗斯
17 Mar 23 '17 at 9:58

#6 楼

对于尚不存在的不安装软件包的命令行解决方案:

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


可以很容易地将其制成脚本,例如:

upgrade-package.sh:

#!/bin/bash

[[ -z  ]] && { echo "Usage: $(basename q4312078q) package"; exit 1; }

if dpkg -s "" 2>/dev/null | grep -q Status.*installed; then
    echo "Attempting to upgrade "
    sudo apt-get install ""
else
    echo "Package  is not installed"
fi


#7 楼

古老而又不错的问题,我可以自由地添加一个更新的答案...
对于更现代的发行版,其中包括apt包装器,例如:

sudo apt upgrade <package-name>


评论


这行不通;它仍然尝试升级所有内容。

–科兰
4月9日17:49

“一切”是什么意思?认为此ALAWAYS将升级软件包依赖关系。您可以尝试下载软件包的.deb并执行'dpkg -i .deb',但是您可能必须运行'apt install -f'

–xCovelus
4月11日17:57

不仅仅是依赖关系:它将升级所有其他具有更新的软件包。

–科兰
4月12日19:15

#8 楼

要在Ubuntu 18.04 LTS上升级单个软件包:

sudo apt update && sudo apt install --only-upgrade <packagename>


要升级多个软件包:

sudo apt update && sudo apt install --only-upgrade <package1> <package2> <package3>