apt-get详解

apt-get在Debian项目中的地位是无可替代的,如果说有一个程序可以代表Debian,那毫无疑问,是apt-get,apt-get和deb包提供了RPM所无法提供的强大功能。除了apt的便捷以外,apt-get的一大好处是极大地减小了所谓依赖关系恶梦的发生几率(dependency hell),即使是陷入了ependency hell,apt-get也提供了很好的援助手段,帮你逃出魔窟。

通常apt-get都和网上的压缩包一起出没,从互联网上下载或是安装。全世界有超过200个 debian 官方镜像,还有繁多的非官方软件包提供网站。你所使用的基于Debian的发布版不同,你所使用的软件仓库可能需要手工选择或是可以自动设置。你能从Debian官方网站得到完整的镜像列表。而很多非官方网站提供各种特殊用途的非官方软件包,当然,使用非官方软件包会有更多风险了。

软件包都是为某一个基本的Debian发布版所准备的(从unstable到stable),并且划分到不同类别中(如 main contrib nonfree),这个是依据 debian 自由软件纲领而划分的(也就是常说的dfsg),因为美国限制加密软件出口,还有一个non-us类别。

apt-get获取软件包所依赖的配置文件 /etc/apt/sources.list 中的设置编写格式是deb [server-type] [address] [directories] [areas]

例子:

deb http://mirror.peer1.net/debian main contrib non-free

例子

deb http://debian.ustc.edu.cn/debian/ testing main contrib non-free

例如下面是一个debian5的apt配置文件:

deb ftp://debian.ustc.edu.cn/debian/ stable main contrib non-free
deb-src ftp://debian.ustc.edu.cn/debian/ stable main contrib non-free

deb ftp://debian.ustc.edu.cn/debian-uo sid marillat rareware ustc java misc jrfonseca firefly
deb-src ftp://debian.ustc.edu.cn/debian-uo sid marillat rareware ustc java misc jrfonseca firefly

deb http://update.inlsd.org/debian-multimedia stable main
deb-src http://update.inlsd.org/debian-multimedia stable main

deb http://mirrors.oss.org.cn/debian stable main contrib non-free
deb-src http://mirrors.oss.org.cn/debian stable main contrib non-free

deb http://mirrors.163.com/debian/ testing main non-free contrib
deb-src http://mirrors.163.com/debian/ testing main non-free contrib

deb http://ftp.cn.debian.org/debian/ lenny main contrib non-free
deb-src http://ftp.cn.debian.org/debian/ lenny main contrib non-free #Added by software-properties

deb http://http.us.debian.org/debian/ lenny main contrib non-free
deb-src http://http.us.debian.org/debian/ lenny main contrib non-free #Added by software-properties

如果用deb-src而不是deb的话,那么就是指的源代码包。通常都会使用http和ftp方式获取文件,不过也可以使用本地文件,更罕见的还有rsh和SSH,但都是可以的。使用 netselect-apt 可以用来判断哪个镜像更快。修改了镜像信息后,应该使用apt-get update 命令,更新软件包的信息你可以从Debian 网站上看软件包的相关信息,而另一方面可以使用 dpkg -l 看哪些软件包已经被安装了。很大的程序,比如gnome,通常有个空的软件包,只是通过依赖关系来安装其他所有的相应的软件,而这些软件也可以被逐一安装。

使用apt-get install [package-name]
就可以安装软件包了,这里不需要版本号,apt-get会自动选择最新的。如果最新的已经被安装了,那么就不会安装了。如果希望安装一个较老的版本,可以选择版本,比如apt-get install gimp=2.2你也可以选择特定的发布版apt-get install -t unstable gimp

对于安装源代码,使用source代替install就可以了,如果需要编译,使用 -b 选项,软件包会被下载到当前目录的。(aptitude 注:只有root可以install,但是谁都可以source的。)

执行之前,apt-get 会列出有多少软件包要被安装、升级,如果要被安装的软件不只是你所指出的软件包,那么它会问你是否继续。可以使用-s来看看运行的结果(注:不知道这个是怎么仿真的,没试过)

apt-get安装过程中,会显示安装的状况,有时 apt-get 会根据软件包的需求调用debconf 来让用户输入一些配置选项。这个配置一般都是一些选择,通常选择缺省情况都可以,也可以使用 --yes 来声明,全部使用缺省选项,无需提问。(注:如果使用cron来每天自动更新系统,这个选项还是挺有用的,虽然总觉得有点害怕吧。)

apt-get的upgrade不会安装新的软件包,只会升级原有的软件包的版本,要升级整个系统,可能要安装新的软件包,这可以通过 dist-upgrade 完成,比如升级stable到testing,建议要升级stable到unstable,先升级到testing,以减小风险。

使用 apt-get clean 可以释放被 apt-get 所占用的缓存空间也可以使用 autoclean 命令,这样仅仅删去已经不可能被再次下载的文件。

也可以使用 remove 命令删除软件包。(注:如果要连配置文件也一起删除,需要使用 --purge 参数)

有时也会出问题,可以用下面一些办法解决:
* -f 修复依赖关系
* -m 忽略有问题的包 (这个不像是解决问题的态度哦)
* -ignore-hold 忽略有问题的 hold
* -s 报告软件包状态

当然,如果你的技巧和耐心不够的话,还是小心使用系统吧,正常的使用通常不会造成很多需要解决的问题。

多年以来,apt-get有了很多前端,除了商业版本外,其他的都可以通过apt-get来安装。文本界面下,aptitude 还不错,浏览软件包比较方便。对于图形界面 synaptic是个不错的选择,比较原汁原味的apt,而kpachage就不那么像apt了。大部分的桌面用 linux版本都有摒弃命令行的倾向,不过,apt-get 是一个命令行是最好的的特例。它的存在正是那些基于debian的系统大行其道的原因。而且apt-get甚至已经被移植到rpm 系统之中了。

常用的APT命令参数:

搜索包

apt-cache search package

获取包的相关信息,如说明、大小、版本等

apt-cache show package

安装包

sudo apt-get install package

重新安装包

sudo apt-get install package - - reinstall

修复安装"-f = ——fix-missing"

sudo apt-get -f install

删除包

sudo apt-get remove package

删除包,包括删除配置文件等

sudo apt-get remove package - - purge

更新源

sudo apt-get update

更新已安装的包

sudo apt-get upgrade

升级系统

sudo apt-get dist-upgrade

使用 dselect 升级

sudo apt-get dselect-upgrade

了解使用依赖

apt-cache depends package

是查看该包被哪些包依赖

apt-cache rdepends package

安装相关的编译环境

sudo apt-get build-dep package

下载该包的源代码

apt-get source package

清理无用的包

sudo apt-get clean && sudo apt-get autoclean

检查是否有损坏的依赖

sudo apt-get check

您可以选择一种方式赞助本站

目前评论:1   其中:访客  1   博主  0

  1. avatar 小强 3

    这些都没有接触过嘞!

评论加载中...

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: