高级打包工具(英语:Advanced Packaging Tools,缩写为APT)是Debian及
其派生发行版的软件包管理器。APT可以自动下载,配置,安装二进制或者源代码格式
的软件包,因此简化了Unix系统上管理软件的过程。APT最早被设计成dpkg的前端,
用来处理deb格式的软件包。现在经过APT-RPM组织修改,APT已经可以安装在支持
RPM的系统管理RPM包。
APT由以下的几个主要的命令构成:
在Debian系统中,APT建构于dpkg之上。
APT的软件安装来源在Debian安装的时候即可进行初始设置,除了Debian官方的
网络安装来源之外,也可以使用Debian的安装光盘,甚至可以从非官方的安装来源
中下载非官方的软件。APT同时也可以从一些安装来源中下载源代码软件,并且自
行编译、安装。
APT会从每一个安装源下载一个软件包的列表。这个列表中有这个安装源所包含的
可用软件包的信息。在可能的情况下,APT会安装最新的软件包,被安装的软件包
所依赖的其他软件包也会被安装,建议安装的软件包则会在屏幕中显示但是不会被
安装。不过在有一些情况下APT由于依赖关系不能安装软件包,例如:这个软件包
和系统中的其他软件包冲突,或者这个软件包依赖的软件包在任何安装源中均不存
在或没有要求的版本。在这种情况下,APT会返回错误信息并且中止,用户需要自
行解决依赖问题。
Debian系统的一大特色即为“永不停机”,事实上,APT达到了这一点。
在软件被升级的时候,它仍然可以继续服务。APT可以智能地从安装来源下载最新版本的软件并且安装,而无须在安装后重新引导电脑
(除了更新Linux内核之外)。所有的配置都可以得到保留,升级软件不再是一个
棘手的问题。
APT最使人称道的特点在于可以从一个Debian发行版升级到新的Debian发行版,例
如从woody升级到sarge。APT可以升级绝大部分满足依赖关系的软件,但是也可
能要删除,或添加新的软件以满足依赖关系。
在终端机里输入:
在终端机里输入:
这里,如果你的软件包被破坏了,或者你想要安装一个最新的软件,运行这个。
这样系统会自动下载
在终端机里输入:
这样配置文件也会被删除。
这样系统会自动移除
在终端机里输入:
这样系统会自动由映射点更新包列表,如果想安装最新包,必须先运行一次。每次修改了 /etc/apt/sources.list后,也必须运行一次。
在终端机里输入:
这样系统会自动将所有已经安装在系统内的包升级为最新版本。如果一个包改变了依存关系,而需要安装一个新的包时,它将不会被升级,而是标识成hold。如果某个包被设置hold标号,就不会被升级。
在终端机里输入:
和apt-get upgrade类似,dist-upgrade会安装和移除包来满足依存关系,因此具有一定的危险性。
在终端输入apt-get -h会在末尾出现“本APT具有超级牛力(This APT has super cow power)。
在终端输入apt-get moo会在屏幕上显示一头牛。
(__)
(oo)
/------\/
/ | ||
* /\---/\
~~ ~~
..."Have you mooed today?"...
与apt-get相似的一个叫做aptitude的程序在aptitude -h的末尾加上了“这个aptitude没有超级牛力”
在后面加上moo(即输入aptitude moo),并且分别加上选项“-v”,“-vv”,“-vvv”,“-vvvv”,“-vvvvv”,“-vvvvvv”(即输入aptitude -v moo;输入aptitude -vv moo;等等),则会有如下输出:
$ aptitude moo
本程序中没有复活节彩蛋。
$ aptitude -v moo
本程序中确实没有复活节彩蛋。
$ aptitude -vv moo
我不是已经告诉您本程序中没有复活节彩蛋了吗?
$ aptitude -vvv moo
停下来!
$ aptitude -vvvv moo
好吧,好吧,如果我给您复活节彩蛋,您会停手吗?
$ aptitude -vvvvv moo
好吧,您赢了。
/----\
-------/ \
/ \
/
|-----------------/ --------\
----------------------------------------------
$ aptitude -vvvvvv moo
这是什么?这当然是一只大象被一条蛇吞吃了。
而apt系列的另一个名为"apt-build"的软件包也具有相似的功能:
$ apt-build moo
(__) ~
(oo) /
_____\/___/
/ /\ / /
~ / * /
/ ___/
*----/\
/ \
/ /
~ ~
..."Have you danced today? Discow!"...
(意为:今天你跳舞了吗?迪斯可!)
显示软件包的详细信息:
这包含了软件包许多的信息,例如如果你已经安装了这个软件包,信息里面也会显示。
显示软件包的大致信息:
这会显示大致的信息。
检查packagename依赖的包:
安装编译源代码需要的库(包):
所的源代码包一个’Build-Depends’域,指明了从源代码编译这个包需要安装的软件。上面的命令可以下载这些包,其中’packagename’是包名。
下载包packagename的源代码:
这将在当前目录下载个文件:.orig.tar.gz,.dsc,*.diff.gz。如果这个包是debian的,那么最后一个文件没有,并且第一个文件名里面不包括"orig"字符串。.dsc文件被dpkg-source使用,把源代码包解压到目录 packagename-version.每一个下载的源代码包里面都有一个debian/目录,这个目录包含了用于创建.deb包的文件。
下载的时候自动把源代码包编译:
可能是编译成.deb包
根据下载的源代码创建deb包:
如果你决定在下载的时候不创建deb包,你可以以后通过在下载的包之后创建的目录里面运行这个命令来创建。
直接利用包管理器安装包:
需要直接使用包管理器,运行这个命令来安装包
已知软件包中有一个文件,根据文件查找软件包:
自动安装缺失的软件:
这里,command是你要运行的命令。例如 auto-apt run ./configure .当缺失依赖软件的时候,它会询问你安装,方便了编译。安装之后会继续运行。auto-apt需要保持一个最新的数据库,利用这个命令进行更新:auto-apt update, auto-apt updatedb and auto-apt update-local。
利用apt-file根据文件名查找相应的软件包:
如果你只知道程序名字filename,那么你可以运行这个命令,它的工作方式和 dpkg -S差不多,就是根据某个软件包里可能包含的文件来查找这个软件包的名字。另外,它也会显示包含这个文件的没有安装的软件包。当你编译的时候,提示缺了什么头文件的时候,利用这个很方便地确定需要装哪些软件包(当然利用audo-apt更方便).
列出一个软件包中包含的文件:
这里,apt-file是根据一个数据库来读取信息的,所以需要保持数据库是最新的。
更新apt-file的数据库:
默认情况下,apt-file的数据库和auto-apt是一样的。
apt-get update // 更新源文件,并不会做任何安装升级操作
apt-get upgrade // 升级所有已安装的包
apt-get install packagename // 安装指定的包
apt-get install packagename --only-upgrade // 仅升级指定的包
apt-get install packagename --reinstall // 重新安装包
apt-get -f install // 修复安装
apt-get build-dep packagename // 安装相关的编译环境
apt-get source packagename // 下载该包的源代码
apt-get dist-upgrade // 升级系统
apt-get dselect-upgrade // 使用 dselect 升级
apt-cache search packagename // 查询指定的包
apt-cache show packagename // 显示包的相关信息,如说明、大小、版本等
apt-cache depends packagename // 了解使用该包依赖哪些包
apt-cache rdepends packagename // 查看该包被哪些包依赖
apt-get remove packagename // 删除包
apt-get remove packagename -- purge // 删除包,包括删除配置文件等
apt-get autoremove packagename --purge // 删除包及其依赖的软件包+配置文件等(只对6.10有效,推荐使用)
apt-get clean // 清理无用的包
apt-get autoclean // 清理无用的包
apt-get check // 检查是否有损坏的依赖
// 使用这个命令可以将指定的包的版本hold住,这样在更新的时候就会忽略掉这个包。
apt-mark hold packagename
// 将 hold 替换为 unhold 就可以取消对这个包版本的锁定了。
apt-mark unhold packagename