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

lur*_*her 959 upgrade apt

如何更新单个包?至于man apt-get说,apt-get upgrade不拿包作为参数的包/列表:

升级

upgrade 用于从 /etc/apt/sources.list. 当前安装的带有可用新版本的软件包被检索和升级;在任何情况下都不会删除当前安装的软件包,或者检索和安装尚未安装的软件包。如果不更改另一个包的安装状态就无法升级当前安装的包的新版本,将保留其当前版本。必须首先执行更新,以便 apt-get 知道有新版本的软件包可用。

Jos*_*osh 1205

你只需要做apt-get install --only-upgrade <packagename>。这将仅升级该单个软件包,并且仅当它已安装时。

如果您希望安装不存在的软件包,或者如果存在则升级它,您可以省略--only-upgrade.

  • `apt-get install --only-upgrade &lt;packagename&gt;` 不会安装任何新包 (96认同)
  • 如有必要,`install` 命令是否也会升级该单个软件包的依赖项? (11认同)
  • @Pino 会的,这样做是有道理的。如果您要升级到的版本依赖于另一个软件包的较新版本怎么办?如果你不升级两者,你就会被洗劫一空。这就是为什么 `install` 是正确的命令,即使它看起来违反直觉。 (9认同)
  • 这会删除“自动”标记吗?有时,当您专门安装库时,该软件包会被标记为手动安装。由于这个原因,我不喜欢在库上运行“安装”。 (8认同)
  • 我刚刚测试过,因为所有信息都很模糊;在 Ubuntu 16.04 (`apt 1.0.1`) 上,使用 `apt install` 升级软件包不会影响 `auto` 标记,无论是否提供 `--only-upgrade`。当然,如果您不想意外安装新的东西,使用 `--only-upgrade` 是有意义的。它还将升级任何*必需的* 依赖项。 (4认同)
  • @Raphink:您对升级的评论是对的,但是安装被认为相当于升级一个包;`install 后面跟着一个**或多个需要安装或升级的包`,如果你有更好的答案,你可以回答这个问题。那就太好了。 (2认同)
  • `--only-upgrade` 在这里没用。`install` 只会升级包 (2认同)
  • @isaaclw 添加 `--only-upgrade` 标志可确保软件包不会设置为手动安装(Ubuntu 20.04) (2认同)

小智 145

为了使用 CLI 更新单个包:

sudo apt-get install --only-upgrade <packagename>
Run Code Online (Sandbox Code Playgroud)

例如, 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.
Run Code Online (Sandbox Code Playgroud)

  • 我收到此命令的错误:`E: Sense only is not seen, try true or false.` (11认同)
  • 被低估,因为它没有从以前的答案中添加新信息 (3认同)

Bin*_*ife 62

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

  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]
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用Synaptic Package Manager右键单击?标记升级

    在此处输入图片说明

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

  • `upgrade` 不接受包参数。 (4认同)

小智 29

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

sudo apt-get --only-upgrade install <packagename>
Run Code Online (Sandbox Code Playgroud)

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

sudo apt-get dist-upgrade
Run Code Online (Sandbox Code Playgroud)

例如,我安装了 PHP 5.3 并使用 - 将 ondrej PPA 添加到我的 apt.sources 中 -

sudo add-apt-repository ppa:ondrej/php5
Run Code Online (Sandbox Code Playgroud)

如果我跑

sudo apt-get install php5
Run Code Online (Sandbox Code Playgroud)

它只会重新安装 PHP 5.3。

我必须首先确定要升级到的版本号,使用

sudo apt-cache policy php5
Run Code Online (Sandbox Code Playgroud)

这将列出所有可用的版本号。您应该找到要升级到的版本号,然后复制引用它的整个字符串。例如,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
Run Code Online (Sandbox Code Playgroud)

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


小智 17

在 Ubuntu 9.04 Jaunty 上,

apt-get --only-upgrade install <package>
Run Code Online (Sandbox Code Playgroud)

产量:

E: Sense only is not understood, try true or false.
Run Code Online (Sandbox Code Playgroud)

命令

apt-get --only-upgrade true install <package>
Run Code Online (Sandbox Code Playgroud)

在我的情况下工作。

  • 你应该将 `--only-upgrade` 传递给 `install` 子命令,而不是直接传递给 `apt-get`,这样你就不必附加 `true`。 (8认同)

小智 10

对于不安装软件包的命令行解决方案,如果它不存在:

dpkg -s <package> 2>/dev/null | grep -q Status.*installed && sudo apt-get install <package>
Run Code Online (Sandbox Code Playgroud)

这可以很容易地制作成一个脚本,例如:

升级包.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
Run Code Online (Sandbox Code Playgroud)