Chinaunix首页 | 论坛 | 博客
  • 博客访问: 710635
  • 博文数量: 112
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 1192
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-12 16:46
文章分类

全部博文(112)

文章存档

2009年(4)

2008年(108)

我的朋友

分类: LINUX

2008-12-01 16:02:32

 在Linux厂商推广包管理之前,软件都是以源代码包的形式发布的,这对普通用户来说相当麻烦。早在Red Hat提出rpm的概念之前,Debian便推出了dpkg这一软件包管理工具。后来,Debian又推出APT(Advanced Packaging Tool)自动解决依赖性、配置文件、升级以使软件包的安装更加便利。apt被许多Linux发行商所采用,本文介绍apt的有关使用。
    我所使用的系统:Ubuntu5.10, 它是基于Debian开发的,使用apt管理软件包,所以针对Debian的文档也同样实用于Ubuntu。本文来自: debian.org的

(一)基本配置


1.1, /etc/apt/sources.list文件

    Ubuntu对网络的依赖性很强,它的许多软件安装、系统更新都要在线进行,那么,新的软件包从哪里下载来的呢?软件包的来源就列在/etc/apt/sources.list文件中。
    在该list文件中,会出现类似的格式:
    下面是Ubuntu5.10安装后系统默认的源列表文件:

deb cdrom:[Ubuntu 5.10 _Breezy Badger_ - Release i386 (20051012)]/ breezy main restricted

## Uncomment the following two lines to fetch updated software from the network
# deb breezy main restricted
# deb-src breezy main restricted

## Uncomment the following two lines to fetch major bug fix updates produced
## after the final release of the distribution.
  deb breezy-updates main restricted
  deb-src breezy-updates main restricted

## Uncomment the following two lines to add software from the 'universe'
## repository.
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## universe WILL NOT receive any review or updates from the Ubuntu security
## team.
# deb breezy universe
# deb-src breezy universe

## Uncomment the following two lines to add software from the 'backports'
## repository.
## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
# deb breezy-backports main restricted universe multiverse
# deb-src breezy-backports main restricted universe multiverse

# deb http://security.ubuntu.com/ubuntu breezy-security main restricted
# deb-src http://security.ubuntu.com/ubuntu breezy-security main restricted

# deb http://security.ubuntu.com/ubuntu breezy-security universe
# deb-src http://security.ubuntu.com/ubuntu breezy-security universe

NOTES   
    (1)以#开头的语句是注释。
    (2)每行的开头定义了来源的类型,
     deb    : 已经编译好的二进制软件包。
     deb-src: 源代码包,含有原始的源代码、Debian控制文件(.dsc)、标记须针对Debian所做的改动的diff.gz文件。
    (3)每行紧接deb, deb-src之后定义了源的类型,apt支持http, ftp, file(本地文件,比如含有加载iso文件系统的目录)和ssh。
    (4)针对cdrom,使用apt-cdrom管理工具,而非apt-get。
    (5)对sources.list作出改动后,运行"apt-get update"使 apt从你设定的源获取软件包列表。

1.2, 确定最优的源

    用户在sources.list中加入源(一般为离开用户比较近的镜像),那么,哪个源更好呢?
    有人写一个脚本,测量各镜像的ping延时。其实可以使用netselect工具:
    (1)若未安装netselect, "sudo apt-get install netselect".
    (2)使用netselect找出多个源中随度最快的源,添加到sources.list中。

    另外还有使用本地化源、使用光驱中的源。这里就不做介绍了,可参考debian.org的apt-howto。谁会不愿意用网上最新的源呢?:)

(二)管理软件包


2.1 更新软件包列表

    系统使用一个数据库来管理软件包,数据库跟踪哪些包安装了、哪些包没被安装、哪些包可以被安装。当用户要安装某程序时,apt使用这个数据库来决定哪些包需要被安装。

    正如1.1中所说,使用"sudo apt-get update"命令来更新软件包列表,推荐经常使用该命令,以了解可用的系统更新。

2.2 安装软件包  

    ok,万事俱备,介绍完软件包源列表的设置,就该进入重点,介绍利用APT安装软件包了。
    语法: "apt-get install package"。
    例:"apt-get insatll emacs21"。
    它将安装emacs21,APT首先在它的数据库中搜索emacs21的最新版本,然后从源列表sources.list中所标注的源取得该包。然后处理依赖性,安装emacs21所必须的包。
    运行"apt-get -h",查看apt-get的帮助。
    APT从网上下载这些包,稍后进行安装,这些包存放在:/var/cache/apt/archives目录中。
    如果安装包被毁坏,或者想重新安装,则只需加上:--reinstall选项。
    例:"apt-get --reinstall install emacs21"

2.3 卸载软件包

    有装必有卸,APT也有此功能。
    语法: apt-get remove package.
    例:"apt-get remove emacs21"
    这里就要注意到依赖性问题,比如,A依赖于B,而A未删除,则无法利用APT删除B。

    安装软件时,不光安装了软件包,还可能有配置文件,上述的命令无法删除配置文件,如何删得干干净净呢?——用"purge(净化, 清除, 泻药)"选项。
    例: "apt-get --purge remove emacs21"

NOTES:实际上,用安装软件包的命令也可以卸载软件包,只需在命令末端加上"-"。
       例:要卸载emacs21,"apt-get install emac21-"
       同样地,用卸载软件包的命令也可以安装软件包,在命令末端加"+"。
       例:              "apt-get remove emacs21+"

2.4 升级软件包

    正如前面所说,当更改sources.list之后,运行"apt-get update"更新源。可以加上-u选项,这样,APT会列出将要升级的软件包清单。
    例: "apt-get -u update"

2.5 升级至新的发行版

    "apt-get upgrade"能够更新同一发行版内的软件包,也可以将整个系统更新到新的发行版。APT能从网络或者新的发行CD一下升级整个系统,要想将系统更新到一个新的发行版,还是用这一节的方法比较好!
    我是个懒人,直接重装算鸟...关于更新至新发行版的方法,去相关网站查询...

2.6 删除未使用的包文件: apt-get clean & autoclean

    正如前面所说,APT先将sources.list中对应源的安装包下载到本地(/var/cache/apt/archives/),然后进行安装。这 些安装包会占用大量的磁盘空间/var/cache/apt/archives,可以利用APT删除这些安装包。
    apt-get clean:删除/var/cache/apt/archives/、/var/cache/apt/archives/partial/目录中除锁文件之外的所有文件。要想重装对应的软件包,需要重新从源获取。
    apt-get autoclean:删除过时的包(源中;了更新的包时,删除目录中对应的旧包;或者目录中有多个包时,删除旧版本的包)。
   
  

___________________________________________________________________________

Ubuntu.cn.org上也有简单的关于apt-get的介绍:

使用apt来进行包管理

介绍
    首先,.tar.gz.的用户如果希望在自己的GNU/Linux 系统下使用这些软件必须编译每个项目。Debian的诞生,使人们有理由相信这个系统拥有一种管理安装包裹(package)的方法,使得这些包裹可以安 装到机器上。这个系统被叫做dpkg。由此安装包裹(package)第一次被引入到了GNU/Linux上,而此时的红帽子自己的’rpm’系统还在酝 酿之中。

    一个新的难题挡在了GNU/Linux的设计者面前。他们需要一个快速,实效性强,并且有效率的方式来安装这些安装包裹,并且希望它能够在升级时自 动而独立的配置这些安装包裹升级中的文件。在这里重申一下,Debian直接导致了APT的诞生,即 Advanced Packaging Tool。 从那时起它就和rpm一起被使用在Conectiva中,同时它也被不少其他的分布式系统所采用。

怎样使用Debian的APT

可使用的命令

所有的这些命令都需要sudo!

  • apt-get update - 在改变了/etc/apt/sources.list或者/etc/apt/preferences之后运行。你也应该定期的运行它以保证你的source list是最新的。

  • apt-get install packagename - 安装一个新的安装包裹(参见下面的aptitude行)

  • apt-get remove packagename - 移除一个已经安装了的安装包裹(运行后configfiles仍然会留下来)

  • apt-get --purge remove packagename - 移除一个已经安装了的安装包裹(运行后configfiles也会被删除)

  • apt-get upgrade - 更新所有已经安装了的安装包裹

  • apt-get dist-upgrade - 更新整个系统到一个更新的发行版本

  • apt-cache search string - 在一系列已知的安装包裹中找寻字符串

  • dpkg -l package-name-pattern - 列出匹配模式的安装包裹

  • aptitude - 详细的查看已经安装或者可以使用的安装包裹。 Aptitude能够使用和apt-get相类似的方式用在命令行中,但是只有一些命令可用-最常用的安装和移除命令。但是因为aptitude比起 apt-get来保留了更多的跟踪信息,它在安装和移除系统时拥有更好的表现。

  • apt-cache showpkg pkgs - 显示安装包裹的信息。

  • apt-cache dumpavail - 打印一个可用的安装包裹名单。

  • apt-cache show pkgs - 显示安装包裹的记录,和dpkg –print-avail功能相似。

  • apt-cache pkgnames - 快速列出每个在系统中的安装包裹。

  • dpkg -S file - 哪个已经安装的安装包裹包含这个文件。

  • dpkg -L package - 列出在这个包裹中所有文件。

  • apt-file search filename - 查找包含此文件名的安装包裹(不需要是已经安装的)。apt-file是一个包含自身的安装包裹。你必须先用apt-get install来安装,然后还需要运行apt-file update。如果apt-file search filename一次显示了过多的内容,使用apt-file search filename|grep –w filename(这样只会显示包含文件名字的内容)或者使用apt-file search filename|grep /bin/ 那些在固定文件夹中的文件,比如/bin或者/usr/bin,如果你查找一个特殊的执行文件的话,这会非常有帮助)。

  • apt-get autoclean - 定期运行这个命令来清除那些已经不在你的系统中的安装包裹中的.deb文件夹。你通过这个方式能够重新获得不少的磁盘空间。如果你狂热的对磁盘空间有需求 的话,apt-get clean是十分激进的,它甚至会移除那些现在已经安装了的安装包裹中的.deb文件。但是大部分的时间你不需要.debs,所以如果你为磁盘空间感到焦 头烂额,运行它还是很值得的。

其余的安装包裹

deborphan和debfoster是查找可以被移除的没有什么用处的安装包裹的良好工具。

注意

    通过编辑/etc/apt/sources.list你能够调出一个不同的库。具体的方法是替换其中的’stable’为’unstable’(或 者其他什么文字)然后运行/apt-get update。但是这种方法是一种老方法,更新的办法是pinning(销连接)。下面是一个unstable配置文件的例子。

用命令行来加速我们的工作吧,^_^

    命令行是很有有效,不过打字太慢了,所以把你的命令变得更小巧吧。你最好把以下的内容输入*~/.bashrc*

    alias acs='apt-cache search'
alias agu='sudo apt-get update'
alias agg='sudo apt-get upgrade'
alias agd='sudo apt-get dist-upgrade'
alias agi='sudo apt-get install'
alias agr='sudo apt-get remove'

    但是看看上面有关aptitude的介绍,我们有理由使用alias agi='sudo aptitude install'来替代alias agi='sudo apt-get install'

链接

阅读(1107) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

ideasy2008-12-03 19:34:54

很全面,谢谢分享。CU上总能找到我需要的东西。