如何查询已经安装的package的版本?
apt-cache policy <package name>
或
apt policy <package name>
上述命令将显示已安装的软件包的版本,以及根据你所运行的Ubuntu版本在软件库中的所有可用版本。它不会显示为其他版本的Ubuntu(不是你的版本)准备的软件包版本。
使用其他命令也能显示版本:
apt list -a <package>
apt-cache madison <package>
上面的madison命令是Debian的archive管理工具,在这里用来查询可安装package的版本信息。
例子:
$ apt-cache policy gparted
gparted:
Installed: 0.16.1-1
Candidate: 0.16.1-1
Version table:
*** 0.16.1-1 0
500 http://ubuntu.inode.at/ubuntu/ saucy/main amd64 Packages
100 /var/lib/dpkg/status
那安装的版本就是0.16.1-1,建议就安装最新的版本就好,而显示的其他版本是老一些的版本。
那如何安装指定版本的package?
sudo apt-get -s install <package name>=<version>
这里-s --strip参数,是去除符号表的意思,strip the symbol tables。
比如:
$ sudo apt-get install gparted=0.16.1-1
Reading package lists... Done
Building dependency tree
Reading state information... Done
gparted is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 265 not upgraded.
下载后安装的方法
使用wget下载deb软件包,卸载原来的包,安装下载的这个包,在这里下载的是一个老一些的包,然后防止apt自动更新这个包,如果想更新了,在取消这个包的版本固定。
wget -o ~/Downloads/ https://cdn.crate.io/downloads/apt/stable/pool/main/c/crate/crate_2.1.8-1~wheezy_all.deb
sudo apt remove crate
sudo apt install ~/Downloads/crate_2.1.8-1~wheezy_all.deb
sudo apt-mark hold crate
sudo apt-mark unhold crate <---- Someday (not today) you will need this to undo the hold
其他说明:
Debian软件库(包括Ubuntu)被设计成只有一个候选软件包可用。默认情况下,这是该版本的最新版本。你不能改变这一点--这是上游(up stream)版本,而且版本是在软件库的 Release 文件中指定的。
警告: 在Ubuntu中使用Debian软件包通常是不明智的,除非你真的知道自己在做什么。这其中有很多原因。
警告: 降级一个软件包是可能的,但不被支持。如果你尝试了,但由于某种原因没有成功,那么你能得到的最好的建议就是恢复到你所发布的Ubuntu的正确版本。一个错误版本的软件包可能会导致各种依赖性问题。(这就是为什么Debian软件库不这么玩的原因)
参考:
apt - Install a specific version version not listed using madison - Ask Ubuntu
software installation - How to install specific version of some package? - Ask Ubuntu