我怎样才能更新一个软件包?就man apt-get
而言,apt-get upgrade
不接受软件包/软件包列表作为参数。
upgrade
upgrade用于安装所有软件包的最新版本 目前安装在系统上的所有软件包的最新版本,这些软件包的来源是在
/etc/apt/sources.list
中列举的来源。目前安装的软件包的新 的版本会被检索和升级;在任何情况下都不会 移除目前已安装的软件包,或移除尚未安装的软件包。 安装的软件包进行检索和安装。当前安装的新版本 的新版本,如果在不改变安装状态的情况下不能升级的软件包 的软件包的新版本将被保留在其当前版本。一个更新 必须先执行更新,以便apt-get知道新版本的 包的新版本。
为了使用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.
我能想到的有两种可能的方式。
1.sudo apt-get install nameofpackage
。
这将升级该软件包,即使它已经安装了:
~$ sudo apt-get install emesene
读取软件包列表...完成
构建依赖关系树
读取状态信息...完成
以下软件包将被升级。
emesene
1个已升级,0个新安装,0个要删除,5个未升级。
需要获得1,486 kB的存档。
此操作后,将释放696 kB的磁盘空间。
获取: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 <packagename>
同样,我也不想运行升级命令,因为它可以升级我服务器上的所有软件包--------。
sudo apt-get dist-upgrade
例如,我安装了PHP 5.3,并在我的apt.sources中添加了ondrej PPA。
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命令,然后就可以了!{{11156095}}。
sudo apt-get install php5=5.5.16+dfsg-1+deb.sury.org~precise+2
我只是因为在其他地方找不到这些信息才加上去的!
对于一个命令行解决方案,如果软件包不存在,就不会安装。
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