Linux中apt与apt-get命令的区别与解释

Ubuntu 16.04 发布时,一个引人注目的新特性便是 apt 命令的引入。其实早在 2014 年,apt 命令就已经发布了第一个稳定版,只是直到 2016 年的 Ubuntu 16.04 系统发布时才开始引人关注。

随着 apt install package 命令的使用频率和普遍性逐步超过 apt-get install package,越来越多的其它 Linux 发行版也开始遵循 Ubuntu 的脚步,开始鼓励用户使用 apt 而不是 apt-get。

那么,apt-get 与 apt 命令之间到底有什么区别呢?如果它们有类似的命令结构,为什么还需要新的 apt 命令呢?是否 apt 真的比 apt-get 更好?普通用户应该使用新的 apt 命令还是坚持旧有习惯继续使用 apt-get 呢?

系统极客将在本文中解释所有这些问题,我们希望本文结束时,你将会有一个更清晰的了解。

apt与apt-get

在开始对比 apt 与 apt-get 命令的区别之前,我们先来看看这两个命令的背景,以及它们要试图达到的目的。

Debian 作为 Ubuntu、Linux Mint 和 elementary OS 等 Linux 操作系统的母板,其具有强健的「包管理」系统,它的每个组件和应用程序都内置在系统中安装的软件包中。Debian 使用一套名为 Advanced Packaging Tool(APT)的工具来管理这种包系统,不过请不要把它与 apt 命令混淆,它们之间是其实不是同一个东西。

在基于 Debian 的 Linux 发行版中,有各种工具可以与 APT 进行交互,以方便用户安装、删除和管理的软件包。apt-get 便是其中一款广受欢迎的命令行工具,另外一款较为流行的是 Aptitude 这一命令行与 GUI 兼顾的小工具。

如果你已阅读过我们的 apt-get 命令指南(https://www.sysgeek.cn/linux-package-management/),可能已经遇到过许多类似的命令,如apt-cache、apt-config 等。如你所见,这些命令都比较低级又包含众多功能,普通的 Linux 用户也许永远都不会使用到。换种说法来说,就是最常用的 Linux 包管理命令都被分散在了 apt-get、apt-cache 和 apt-config 这三条命令当中。

apt 命令的引入就是为了解决命令过于分散的问题,它包括了 apt-get 命令出现以来使用最广泛的功能选项,以及 apt-cache 和 apt-config 命令中很少用到的功能。

在使用 apt 命令时,用户不必再由 apt-get 转到 apt-cache 或 apt-config,而且 apt 更加结构化,并为用户提供了管理软件包所需的必要选项。

简单来说就是:apt = apt-get、apt-cache 和 apt-config 中最常用命令选项的集合。

apt与apt-get之间的区别

通过 apt 命令,用户可以在同一地方集中得到所有必要的工具,apt 的主要目的是提供一种以「让终端用户满意」的方式来处理 Linux 软件包的有效方式。

apt 具有更精减但足够的命令选项,而且参数选项的组织方式更为有效。除此之外,它默认启用的几个特性对最终用户也非常有帮助。例如,可以在使用 apt 命令安装或删除程序时看到进度条。

未分类

apt 还会在更新存储库数据库时提示用户可升级的软件包个数。

未分类

如果你使用 apt 的其它命令选项,也可以实现与使用 apt-get 时相同的操作。

apt和apt-get命令之间的区别

虽然 apt 与 apt-get 有一些类似的命令选项,但它并不能完全向下兼容 apt-get 命令。也就是说,可以用 apt 替换部分 apt-get 系列命令,但不是全部。

未分类

当然,apt 还有一些自己的命令:

未分类

需要大家注意的是:apt 命令也还在不断发展, 因此,你可能会在将来的版本中看到新的选项。

apt-get已弃用?

目前还没有任何 Linux 发行版官方放出 apt-get 将被停用的消息,至少它还有比 apt 更多、更细化的操作功能。对于低级操作,仍然需要 apt-get。

我应该使用apt还是apt-get?

既然两个命令都有用,那么我该使用 apt 还是 apt-get 呢?作为一个常规 Linux 用户,系统极客建议大家尽快适应并开始首先使用 apt。不仅因为广大 Linux 发行商都在推荐 apt,更主要的还是它提供了 Linux 包管理的必要选项。

最重要的是,apt 命令选项更少更易记,因此也更易用,所以没理由继续坚持 apt-get。

小结

最后结大家提供两点使用上的建议:

  • apt 可以看作 apt-get 和 apt-cache 命令的子集, 可以为包管理提供必要的命令选项。
  • apt-get 虽然没被弃用,但作为普通用户,还是应该首先使用 apt。

Ubuntu通过apt-get安装指定版本和查询指定软件有多少个版本

一、通过apt-get安装指定版本

apt-get install <<package name>>=<<version>>

二、查询指定软件有多少个版本

说明:在Linux用这个查询并不能完全的把所有版本都列举出来,因为每个版本都与系统版本和CPU架构有关,比如一个软件支持Ubuntu系统的16.04的CPU架构为amd64的版本只有1.0和1.2,其余都不支持,所以列举时就只有两款。

列举版本列表

0、通过网站搜索:

https://packages.ubuntu.com/

1、

apt-cache madison <<package name>>

将列出所有来源的版本。如下输出所示:

apt-cache madison vim
   vim | 2:7.3.547-1 | http://debian.mirrors.tds.net/debian/ unstable/main amd64 Packages
   vim | 2:7.3.429-2 | http://debian.mirrors.tds.net/debian/ testing/main amd64 Packages
   vim | 2:7.3.429-2 | http://http.us.debian.org/debian/ testing/main amd64 Packages
   vim | 2:7.3.429-2 | http://debian.mirrors.tds.net/debian/ testing/main Sources
   vim | 2:7.3.547-1 | http://debian.mirrors.tds.net/debian/ unstable/main Sources

madison是一个apt-cache子命令,可以通过man apt-cache查询更多用法。

2、

apt-cache policy <<package name>>

将列出所有来源的版本。信息会比上面详细一点,如下输出所示:

apt-cache policy gdb
gdb:
  Installed: 7.7.1-0ubuntu5~14.04.2
  Candidate: 7.7.1-0ubuntu5~14.04.2
  Version table:
 *** 7.7.1-0ubuntu5~14.04.2 0
        500 http://fr.archive.ubuntu.com/ubuntu/ trusty-updates/main amd64 Packages
        100 /var/lib/dpkg/status
     7.7-0ubuntu3 0
        500 http://fr.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages
        500 http://archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

policy是一个apt-cache子命令,可以通过man apt-cache查询更多用法。

3、

apt-cache showpkg <<package name>>

4、

apt-get install -s <<package-name>>

说明:这个命令只是模拟安装时会安装哪些软件列表,但不会例举出每个软件有多少个版本

5、

aptitude versions <<package name>>

参考:https://manpages.debian.org/unstable/aptitude/aptitude.8.en.html

6、

apt-show-versions -a <<package name>>

说明:列举出所有版本,且能查看是否已经安装。还可以通过apt-show-versions -u <>来查询是否有升级版本。

参考:http://manpages.ubuntu.com/manpages/trusty/man1/apt-show-versions.1p.html

7、

whohas -d Debian,Ubuntu <<package name>> | tr -s ' ' 't' | cut -f 1-3 | column -t

8、

rmadison -u debian,ubuntu,bpo <<package name>> | cut -d "|" -f 1-3

单个详情

1、

apt-cache show <<package name>>

说明:查询指定包的详情,不管是否已经安装。

2、

dpkg -l <<package name>>

说明:效果和上面基本一致,但是结果是列表详情展示,会提示是否已经删除了之后还有依赖包没有删除等。

3、

dpkg -s <<package name>>

说明:必须是安装的包才能显示详情。

4、

dpkg-query -s <<package name>>

说明:同上,效果一致。

使用技巧

1、可以在查询后面带上一些参数来实现筛选

apt-cache show package | grep Version
apt-show-versions | more

【Ubuntu】修改Ubuntu的apt-get源为国内镜像源的方法

1、原文件备份

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

2、编辑源列表文件

sudo vim /etc/apt/sources.list

3、将原来的列表删除,添加如下内容(中科大镜像源)

deb http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse

4、运行sudo apt-get update

apt-get upgrade更新时忽略指定包

当使用 apt-get 命令时,默认会将所有需要更新的包都下载更新,但是我的 docker-ce 指向的是官方的源,速度非常慢,而且我并没有更新它的需求,这个时候就需要在更新的时候将 docker-ce 排除掉。

apt-mark hold xxx

使用这个命令可以将指定的包的版本hold住,这样在更新的时候就会忽略掉这个包。

apt-mark unhold xxx

将 hold 替换为 unhold 就可以取消对这个包版本的锁定了。

使用apt-get时出现 “no public key available” 的解决方法

在 Debian 和 Ubuntu 下运行 apt-get update 刷新更新源的时候,经常遇到 “There is no public key available for the following key IDs” 的问题,具体表现为以下错误提示:

W:There is no public key available for the following key IDs: 3B4FE6ACC0B21F32,
W:There is no public key available for the following key IDs: 3B4FE6ACC0B21F32,

解决方法如下,

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32

把 3B4FE6ACC0B21F32 替换为你出现问题的IDs。另外,如果有如下问题,是因为加入了 natty-backports 源,删掉即可:

W:Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/natty-backports/main/source/Sources 404 Not Found [IP: 91.189.91.13 80],
W:Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/natty-backports/restricted/source/Sources 404 Not Found [IP: 91.189.91.13 80],
W:Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/natty-backports/universe/source/Sources 404 Not Found [IP: 91.189.91.13 80],
W:Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/natty-backports/multiverse/source/Sources 404 Not Found [IP: 91.189.91.13 80],

运行如下命令:

sudo sed -i '/natty-backports/d' /etc/apt/sources.list{,.d/*}

debian apt-get 更新源文件格式说明

在安装完debian操作系统之后大家做的第一件事大概就是修改source.list(路径:/etc/apt/sources.list)文件了吧,否则你是无法在线更新软件的,那么source.list文件中的各个配置项的具体含义你搞懂了么?下面就以我的source.list文件为例为大家讲解一下。

deb http://mirrors.163.com/debian/ wheezy main non-free contrib
deb http://mirrors.163.com/debian/ wheezy-proposed-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ wheezy main non-free contrib
deb-src http://mirrors.163.com/debian/ wheezy-proposed-updates main non-free contrib

其中可以把每一行分为四个部分,说白了,当你在线更新某个软件时,debian就是遵照这四个选项(准确的说是后三项)的指示找到软件来给你安装的:

deb    ###   ftp地址                         ###  版本代号   ###  限定词
deb    ###   http://mirrors.163.com/debian/ ###  wheezy    ###   main non-free contrib

其中,

1. 第一部分

第一部分为deb或者deb-src,其中前者代表软件的位置,后者代表软件的源代码的位置

2. 第二部分

第二部分为你的ftp镜像的url,以我的为例,我是用的是大陆速度较快的网易镜像。在浏览器中打开此链接以后会发现有如下内容:

未分类

其中:
/dists/ 目录包含”发行版”(distributions), 此处是获得 Debian 发布版本(releases)和已发布版本(pre-releases)的软件包的正规途径. 有些旧软件包及 packages.gz 文件仍在里面.
/pool/ 目录为软件包的物理地址. 软件包均放进一个巨大的 “池子(pool)”, 按照源码包名称分类存放. 为了方便管理, pool 目录下按属性再分类(“main”, “contrib” 和 “non-free”), 分类下面再按源码包名称的首字母归档. 这些目录包含的文件有: 运行于各种系统架构的二进制软件包, 生成这些二进制软件包的源码包.你可以执行命令 apt-cache showsrc mypackagename, 查看 ‘Directory:’ 行获知每个软件包的存放位置. 例如: apache 软件包存放在 pool/main/a/apache/ 目录中.另外, 由于lib*软件包数量巨大, 它们以特殊的方式归档: 例如, libpaper 软件包存放在 pool/main/libp/libpaper/.
还有一些目录:

/tools/:用于创建启动盘, 磁盘分区, 压缩/解压文件, 启动 Linux 的 DOS 下的小工.

/doc/:

基本的 Debian 文档, 如 FAQ, 错误报告系统指导等..

/indices/:

维护人员文件和重载文件.

/project/:

大部分为开发人员的资源, 如: project/experimental/ 本目录包含了处于开发中的软件包和工具, 它们均处于 alpha 测试阶段. 用户不应使用这些软件, 因为即使是经验丰富的用户也会被搞得一团糟.)

3. 第三部分

第三部分表示你的debian版本号(注意,不是某个软件的版本号,而是debian本身的版本号),也有人称这是对debian软件包的一种水平划分(这种说法还是比较形象的),具体这一项怎么写,可以参看http://mirrors.163.com/debian/dists/网页里面的内容(如下图),大致来说按版本的旧–>新程度有这么几大类:oldstable,stable,testing,sid

未分类

1.oldstable顾名思义,就是以前的稳定发行版了,在本例中oldstable就是Debian6.0.8目录的一个链接,两者内容完全一致。

2.stable是指现在的稳定发行版,对于每个debian来说,每个稳定发行版都会有一个代号,如debian 6叫做squeeze,debian 7叫做wheezy,由于在笔者写本文的时候稳定版是debian7,所以stable就是wheezy的一个链接。

3.testing指目前还暂时处于测试阶段的debian发行版,如wheezy往下发展就是jessie了,所以testing代指的就是jessie目录,它是jessie的一个链接。

4.unstable那就是不稳定版本了,但在这个目录清单里我们并没有看到unstable目录,其实它还有一个代号:sid,我们知道debian的发行版本名称大都来自玩具总动员中的角色名称,而sid就是那个专门破坏玩具的邻居家坏小孩,所以就把unstable这个不稳定的软件目录起名为sid了,这里面的软件一般都是最新的,稳定性、安全稳定值得商榷,如果你想做试验小白鼠,大可使用这里的软件。经过一段时间的测试,这里面的软件可能会进入下一个阶段testing目录从而出现在下一个debian发行版中,要么就夭折被直接抛弃了。

4. 第四部分

好了,从水平的角度介绍完debian发行版,现在我们进入这些目录大致看一下里面的内容(以stable目录为例):

未分类

我们会发现每个目录都会包括contrib、main、non-free等几个目录,那么这些目录又是什么东东呢?
以垂直的观点来看 Debian 软件的分布:main、contrib、non-free、non-us
因为 Debian 是非营利组织,但是组织架构严谨,有一套完善的软件管理方式。基于其对软件 free 度的一种坚持,对不同版权软件包的录入有一些限定。
下面是对它们的一些简要介绍:
main Debian 里最基本及主要且符合自由软件规范的软件 ( packages )。
contrib 这里头软件虽然可以在 Debian 里头运作,即使本身属于自由软件但多半却是相依于非自由 ( non-free ) 软件。
non-free 不属于自由软件范畴的软件。
non-us 这个分类里头的软件都来自非美国地区,当中可能有牵扯到专利、加密..等等问题。
marillat 对应 Christian Marillat 的软件仓库,包括mplayer, transcode等。
rareware 对应 rarewares.org 的软件仓库, 包括很多音效程序,如lame, musepack, beep media player等。
ustc 对应 debian@ustc 维护的一些软件包,如 mule-gbk, gaim-openq, scim, stardictdicts, patched xpdf, irssi, xmms。
java 对应 Blackdown java。包括 j2re, j2sdk ,mozilla java plugin。
firefly 对应打过firefly补丁的包,包括 fontconfig mozilla mozilla-firefoxpango1.0 qt-x11-free xft
misc 对应其它无分类的包,包括 nvidia-kernel,winex3, rox, chmsee等

5. 关于源的混用问题

一般不建议混用 stable, testing 和 unstable 的源。因为很多软件之间都有不同程度的相依性,强行的结果会造成更多软件相依、相斥问题的产生,最终可能影响系统稳定与整个软件升级制度的正常运作。

需要把源从低级升到高级是非常简单的,只要修改 sources.list 里的源就好了。但反过来,降级是一种几乎不可能的任务…如果你使用的是高版本的debian,而在source.list文件中配置的是低版本,那么当你在线安装软件的时候很可能会发现有很多软件依赖问题无法解决,当出现这些问题的时候,就要想到是否要修改下source.list文件中的版本问题了

6. 按需修改自己的sources.list

Debian 有自己独特的版本系统,整个系统有三个版本,分别为稳定版(stable),测试版(testing)和不稳定版(unstable/sid)。每次发布的版本都是稳定版,而测试版在经过一段时间的测试证明没有问题后会成为新的稳定。因为稳定版是会更新的,为了便于区分不同时期的稳定版,每个版本又有自己特有的代号(codename),现在的稳定版称为 wheezy(debian7),测试版称为jessie。而不稳定版的代号永远是 sid。

sources.list的写法

1)找到包含dists和pool这两个目录的那个目录,把地址记下来,比如http://mirrors.163.com/debian/;

2)打开dists,里面包含的目录名字,记下来。比如http://mirrors.163.com/debian/,dists/包含wheezy、testing等。把这些目录名字记下来。

3)打开pool目录,看看里面包含哪些组件目录,比如main、contrib、non-free;

4)书写格式:deb<1记下来的地址><2记下来的目录名><3记下来的名字>, 如:

deb http://mirrors.163.com/debian wheezy man contrib non-free

7. 更新软件包列表信息,升级debian

修改/etc/apt/sources.list 之后一般会运行下面两个命令进行更新升级:

sudo apt-get update
sudo apt-get dist-upgrade

其中 :
update – 取回更新的软件包列表信息
dist-upgrade – 发布版升级
第一个命令仅仅更新的软件包列表信息,所以很快就能完成。
第二个命令是全面更新发布版,一般会下载几百兆的新软件包。
其实在运行完第一个命令后系统就会提示你进行更新升级。因为修改了源,所有这次更新的改动可能会很大,比如安装某个包可能会删除太多的其他包,所有系统会提示你运行“sudo apt-get dist-upgrade”进行全面升级或使用软件包管理器中的“标记全部软件包以便升级”功能进行升级。两者效果是一样的。

8. Debian 全球镜像站

http://www.debian.org/mirror/list

UBUNTU 解决非正常关闭APT-GET的锁

在ubuntu的命令行窗口中使用apt-get命令安装程序, 命令未执行完的情况下关闭窗口或使用Ctrl+C来结束命令。 当我们再次使用apt-get命令安装程序的时候, 报错信息如下:

E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?

我们执行如下命令, 删除锁定的文件

$ sudo rm -rf /var/cache/apt/archives/lock
$ sudo rm -rf /var/lib/dpkg/lock

此时, 我们再次执行命令apt-get install, 获得如下报错信息:

E: dpkg 被中断,您必须手工运行 sudo dpkg --configure -a 解决此问题。

我们执行脚本 sudo dpkg –configure -a, 获得新的报错信息:

debconf: DbDriver "config": /var/cache/debconf/config.dat is locked by another process: 资源暂时不可用

我们执行rm命令将该文件也删除:

$ sudo rm -rf /var/cache/debconf/config.dat

再次运行apt-get install命令, 一切恢复正常。

Ubuntu 16.04使用apt-fast加速apt-get下载安装包

使用 apt-fast shell 封装器,通过多个连接同时下载一个包来加速 apt-get/apt 和 aptitude 命令,进而使得自己的工作效率得到提升。

如何加速在 Ubuntu Linux 16.04 或者 14.04 LTS 上从多个仓库中下载包的 apt-get 或者 apt 命令?你需要使用到 apt-fast 这个 shell 封装器,它会通过多个连接同时下载一个包来加速 apt-get/apt 和 aptitude 命令并且所有的包都会同时下载,另外它使用 aria2c 作为默认的下载加速器。

安装 apt-fast 工具

在 Ubuntu Linux 14.04 或者之后的版本尝试下面的命令:

$ sudo add-apt-repository ppa:saiarcot895/myppa

未分类

更新你的仓库:

$ sudo apt-get update

或者

$ sudo apt update

未分类

安装 apt-fast:

$ sudo apt-get -y install apt-fast

或者

$ sudo apt -y install apt-fast
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  aria2 libc-ares2 libssh2-1
Suggested packages:
  aptitude
The following NEW packages will be installed:
  apt-fast aria2 libc-ares2 libssh2-1
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,282 kB of archives.
After this operation, 4,786 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://01.archive.ubuntu.com/ubuntu xenial/universe amd64 libssh2-1 amd64 1.5.0-2 [70.3 kB]
Get:2 http://ppa.launchpad.net/saiarcot895/myppa/ubuntu xenial/main amd64 apt-fast all 1.8.3~137+git7b72bb7-0ubuntu1~ppa3~xenial1 [34.4 kB]
Get:3 http://01.archive.ubuntu.com/ubuntu xenial/main amd64 libc-ares2 amd64 1.10.0-3 [33.9 kB]
Get:4 http://01.archive.ubuntu.com/ubuntu xenial/universe amd64 aria2 amd64 1.19.0-1build1 [1,143 kB]
54% [4 aria2 486 kB/1,143 kB 42%]                                    20.4 kB/s 32s

配置 apt-fast

你将会得到下面的提示(必须输入一个5到16的数值):

未分类

并且

未分类

你也可以直接编辑设置:

$ sudo vi /etc/apt-fast.conf

请注意这个工具并不是给慢速网络连接的,它是给快速网络连接的。如果你的网速慢,那么你将无法从这个工具中得到好处。

该怎么使用 apt-fast 命令?

语法是:

$ apt-fast command
$ apt-fast [options] command

使用 apt-fast 取回新的包列表:

$ sudo apt-fast update

使用 apt-fast 执行升级:

$ sudo apt-fast upgrade

执行发行版升级(发布或者强制内核升级),输入:

$ sudo apt-fast dist-upgrade

安装新的包

$ sudo apt-fast install pkg
比如要安装 nginx,输入:
$ sudo apt-fast install nginx

未分类

删除包:

$ sudo apt-fast remove pkg
$ sudo apt-fast remove nginx

删除包和它的配置文件:

$ sudo apt-fast purge pkg
$ sudo apt-fast purge nginx

删除所有未使用的包:

$ sudo apt-fast autoremove

下载源码包:

$ sudo apt-fast source pkgNameHere

清理下载的文件:

$ sudo apt-fast clean

清理旧的下载文件:

$ sudo apt-fast autoclean

验证没有破坏的依赖:

$ sudo apt-fast check

下载二进制包到当前目录:

$ sudo apt-fast download pkgNameHere
$ sudo apt-fast download nginx
[#7bee0c 0B/0B CN:1 DL:0B]
07/26 15:35:42 [NOTICE] Verification finished successfully. file=/home/vivek/nginx_1.10.0-0ubuntu0.16.04.2_all.deb
07/26 15:35:42 [NOTICE] Download complete: /home/vivek/nginx_1.10.0-0ubuntu0.16.04.2_all.deb
Download Results:
gid   |stat|avg speed  |path/URI
======+====+===========+=======================================================
7bee0c|OK  |        n/a|/home/vivek/nginx_1.10.0-0ubuntu0.16.04.2_all.deb
Status Legend:
(OK):download completed.

下载并显示指定包的 changelog:

$ sudo apt-fast changelog pkgNameHere
$ sudo apt-fast changelog nginx

apt-get安装软件时 需要依赖更低版本的依赖库 通用解决办法

比如ubuntu尝试安装sqlite3,

xda@xda-dt:~$ sudo apt-get install sqlite3 libsqlite3-0=3.7.9-2ubuntu1.1
Reading package lists... Done
Building dependency tree       
Reading state information... Done
libsqlite3-0 is already the newest version.
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 sqlite3 : Depends: libsqlite3-0 (= 3.7.9-2ubuntu1) but 3.7.9-2ubuntu1.1 is to be installed
E: Unable to correct problems, you have held broken packages.

会出现上面的问题。

方法1,使用aptitude 安装。

xda@xda-dt:~$ sudo aptitude install sqlite3
The following NEW packages will be installed:
  sqlite3{b} 
0 packages upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 26.9 kB of archives. After unpacking 174 kB will be used.
The following packages have unmet dependencies:
 sqlite3 : Depends: libsqlite3-0 (= 3.7.9-2ubuntu1) but 3.7.9-2ubuntu1.1 is installed.
The following actions will resolve these dependencies:

     Keep the following packages at their current version:
1)     sqlite3 [Not Installed]                            



Accept this solution? [Y/n/q/?] n
The following actions will resolve these dependencies:

     Downgrade the following packages:                                  
1)     libsqlite3-0 [3.7.9-2ubuntu1.1 (now) -> 3.7.9-2ubuntu1 (precise)]



Accept this solution? [Y/n/q/?] Y
The following packages will be DOWNGRADED:
  libsqlite3-0 
The following NEW packages will be installed:
  sqlite3 
0 packages upgraded, 1 newly installed, 1 downgraded, 0 to remove and 0 not upgraded.
Need to get 375 kB of archives. After unpacking 174 kB will be used.
Do you want to continue? [Y/n/?] Y
Get: 1 http://hk.archive.ubuntu.com/ubuntu/ precise/main libsqlite3-0 amd64 3.7.9-2ubuntu1 [348 kB]
Get: 2 http://hk.archive.ubuntu.com/ubuntu/ precise/main sqlite3 amd64 3.7.9-2ubuntu1 [26.9 kB]
Fetched 375 kB in 1s (306 kB/s)    
dpkg: warning: downgrading libsqlite3-0 from 3.7.9-2ubuntu1.1 to 3.7.9-2ubuntu1.
(Reading database ... 162912 files and directories currently installed.)
Preparing to replace libsqlite3-0 3.7.9-2ubuntu1.1 (using .../libsqlite3-0_3.7.9-2ubuntu1_amd64.deb) ...
Unpacking replacement libsqlite3-0 ...
Selecting previously unselected package sqlite3.
Unpacking sqlite3 (from .../sqlite3_3.7.9-2ubuntu1_amd64.deb) ...
Processing triggers for man-db ...
Setting up libsqlite3-0 (3.7.9-2ubuntu1) ...
Setting up sqlite3 (3.7.9-2ubuntu1) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place

xda@xda-dt:~$ sqlite3
SQLite version 3.7.9 2011-11-01 00:52:41
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .exit