13.9 为Debian安装软件包及其依赖程序
apt-get install [package]
虽然dkpg
命令的功能强大,但使用一段时间后,当你试图安装需要依赖其他东西的软件包时,就会很快遇到问题(也就是所谓的“依赖关系地狱(dependency hell)”问题)。为了安装软件包A,还需要下载和安装软件包B和C,但为了安装C,还需要下载和安装软件包D和E,但为了安装E……唉,没完没了!这时就需要apt
出手了!
apt
命令和它的各个选项可以用于安装、升级和卸载软件包。但apt
的最大优点是可以自动处理软件包之间的依赖关系。例如,如果你想安装前面例子中的软件包A,apt
就可以自动下载和安装A、B、C等软件包。以后,如果想在系统中删除A,apt
也可以卸载它,如果系统中没有其他软件包需要B和C,apt
也一并卸载它们。
apt
最初是为在Debian系统中作为dpkg
的前端使用而开发的。现在在每个基于Debian的Linux系统(例如Debian、K/Ubuntu、Linspire、Xandros以及其他很多Linux系统)中都可以看到apt
的身影,而且它是可以让Debian易于使用且功能强大的特性之一。此外,非Debian的Linux系统也意识到了apt
是多么优秀,最终Connectiva公司对apt
进行了改造,使它能够管理RPM(本章重点介绍在Debian中如何使用apt
)。
提示 在基于RPM的Linux发行版本中使用
apt
的不错的简单介绍,可以参考本书作者的一篇文章“A Very Apropos apt”(2003年10月发行的Linux Magazine杂志中有这篇文章,也可以访问www.linux-mag.com/2003-10/apt_01.html)。除了这篇文章,也应该看看http://apt.freshrpms.net 上最新的RPM库。注意,要访问Linux Magazine的内容,得先进行免费的注册。
假设现在想用apt
来安装非常棒的工具sshfs
。为此,需要经历以下处理过程(记住必须以root用户来运行这些命令):
# apt-get update
Get:1 http://us.archive.ubuntu.com breezy Release.gpg [189B]
Get:2 http://archive.ubuntu.com breezy Release.gpg [189B]
Hit ftp://ftp.free.fr breezy/free Sources
Hit ftp://ftp.free.fr breezy/non-free Sources
Fetched 140kB in 1m4s (2176B/s)
Reading package lists... Done
[Results truncated for length]
# apt-get install sshfs
Reading package lists... Done
Building dependency tree... Done
The following extra packages will be installed:
fuse-utils libfuse2
The following NEW packages will be installed:
fuse-utils libfuse2 sshfs
Need to get 96.9kB of archives.
After unpacking 344kB of additional disk space will be used.
Do you want to continue [Y/n]? y
Get:1 http://us.archive.ubuntu.com breezy/universe
➥sshfs 1.1-1 [19.3kB]
...
Fetched 96.9kB in 10s (9615B/s)
Reading package fields... Done
Reading package status... Done
Preconfiguring packages ...
...
Selecting previously deselected package sshfs.
Unpacking sshfs (from .../archives/sshfs_1.1-1_i386.deb) ...
Setting up sshfs (1.1-1) ...
实际上,刚才运行了两个命令,我们来看看它们是做什么的。apt-get update
命令会从apt
服务器[也称为仓库(repository)]下载当前可用的软件包列表,在apt
配置文件(/etc/apt/sources.list
)中可以设置apt
服务器(如需你想看看apt
仓库在哪,只需运行cat /etc/apt/sources.list
)。如果在运行apt-get update
命令以后,在显示信息的第一行看到的是Get
,就意味着apt
发现远程仓库中的软件列表比本地的更新,所以它就下载这个更新的列表。反之,如果看到的是Ign
,就说明远程仓库上的软件列表和你的计算机上的列表是同步的,不需要下载。在做其他事之前先运行apt-get update
,就可以确保计算机上的软件包列表是正确的,而且也是最新的。
apt-get install sshfs
命令用于取回指定的软件包,以及任何必需的依赖(在这个例子中需要依赖fuse-utils
和libfuse2
)。在把这些软件包下载到本机以后,apt
(其实是dpkg
根据apt
的指示来进行操作)就会安装好所有软件包。请时刻记住这些命令使用的是包名,而不是文件名。换句话说,应该使用apt-get install sshfs
,而不是apt-get install sshfs_1.1-1_i386.deb
。可以看到,如果apt
发现了正在安装的软件包所要依赖的其他软件包(就像安装sshfs
时的情况那样),在apt
取回这些依赖包之前,它会要求确认是否确实需要安装它们。
如果想一次安装多个软件包,只需将它们依次都列在命令行上。例如,如果你想安装sshfs
和shfs-utils
,可以用以下命令:
# apt-get install sshfs shfs-utils
只要找到了sshfs
或shfs-utils
的任何依赖包,apt
就会询问是否需要安装它们。嗯,apt
就这么简单。
提示 还不知道
sshfs
是什么吗?哦,你应该知道它的!看看本书作者在The Open Source Weblog上写的一篇日志“Mount Remote Drives via SSH with SSHFS”(http://opensource.weblogsinc.com/2005/11/03/mount-remote-drives-via-ssh-with-sshfs/)。