Ubuntu 软件包管理详解

选择最佳镜像发布站点加入source.list文件:netselect,netselect-apt

一个新用户经常问到的问题:“该将哪个Debian镜像发布站点加入source.list文件?”。有很多方法来选择镜像发布站点,专家们可能会写一个脚本去测试 不同站点的ping时间。不过其实有一个程序可以帮你: netselect

要安装netselect,通常使用:

     # apt-get install netselect

不带参数运行它时会显示它的帮助信息。运行它时加上以空格分隔的镜像主机列表, 它会返回一个分值和列表中的一个主机名。这个分值通过评估ping时间和hops数(一 个网络请求报文到达目标主机所经过的转发主机的个数)得出,它与镜像站点预计下 载速度成反比(数值越小越好)。返回的主机名是主机列表中得分最低的那个(查看列 表中所以主机的得分情况可使用-vv选项)。看出下的例子:

     # netselect ftp.debian.org http.us.debian.org ftp.at.debian.org download.unesp.br ftp.debian.org.br
       365 ftp.debian.org.br
     #

它表示,在netselect后列出的所有主机中,ftp.debian.org.br是下载速 度最快的主机,其得分为365。(注意!!这是在我电脑上的测试结果,不同的网络 节点网速会大不相同,所以这个分值不一定适用于其它电脑)

现在将netselect找到的连接速度最快的镜像站点加入/etc/apt/sources.list文件(参考/etc/apt/sources.list文件, 第 2.1 节)并按照软件包管理, 第 3 章中的技巧来做。

将CD-ROM加入source.list文件

如果你用APT从CD-ROM上安装及升级软件包,你可以将它加入到sources.list文件中。完成该操作,可使用apt-cdrom程序:

     # apt-cdrom add

将Debian光盘放入光驱,它将加载光盘目录,并在光盘上查找软件包信息。如果你 的光驱需要额外设置,可使用以下选项:

     -h           - program help
     -d directory - CD-ROM mount point
     -r           - Rename a recognized CD-ROM
     -m           - No mounting
     -f           - Fast mode, don't check package files
     -a           - Thorough scan mode

例如:

     # apt-cdrom -d /home/kov/mycdrom add

你还可以扫描一张光盘,但不将其加入列表:

     # apt-cdrom ident

注意,只有当你在系统的/etc/fstab中正确设置了光驱后,该程序才会工作。

PPA:Ubuntu里,PPA代表一种非稳定版本到发布,喜欢尝试鲜到人一般会加入很多PPA源。

关于PPA到详细说明,可以参考https://help.launchpad.net/Packaging/PPA

介绍两个命令,用于添加和删除PPA源

添加一个PPA源

sudo add-apt-repository ppa:user/ppa-name

如添加cairo-dock到weekly update源

sudo add-apt-repository ppa:cairo-dock-team/weekly/ubuntu

删除一个PPA源

sudo add-apt-repository -r ppa:user/ppa-name

sudo add-apt-repository -r ppa:cairo-dock-team/weekly/ubuntu

安装软件包

 # apt-get install xchat

下列apt-get选项也许对你有用:

     -h  这个帮助信息
     -d  只下载——不安装或解压档案
     -f  即便完整性检查失败了仍然继续
     -s  不做什么。只是按顺序模拟
     -y  对于所有问题都假定为Yes,不询问
     -u  显示一系列已经将要更新的包
可以用一条命令安装多个软件包。包文件从网络上下载到本地 /var/cache/apt/archives目录,稍后再安装。

你可以用同样的命令行删除指定软件包,只需在软件包名称后紧跟一个“-”,如下所示:

     # apt-get install nautilus gnome-panel-   

假如你不小心损坏了已安装的软件包而想修复它,或者仅仅想重新安装软件包中某 些文件的最新版本,这是可以做到的,你可以用如下的--reinstall选项:

     # apt-get --reinstall install gdm

移除软件包

要删除软件包只需 输入:apt-get remove package

上例中运行apt-get会删除指定软件包以及与之有依赖关系的软件 包,但它们的配置文件,如果有的话,会完好无损地保留在系统里。如果想彻底删 除这些包及其配置文件,运行:

     # apt-get --purge remove gnome-panel

更新软件包

软件包更新是APT最成功的特点。只需一条命令即可完成更新: apt-get upgrade。你可以使用这条命令从相同版本号的发布版中更新 软件包,也可以从新版本号的发布版中更新软件包,尽管实现后一种更新的推荐 命令为apt-get dist-upgrade 在运行该命令时加上-u选项很有用。这个选项让APT显示完整的可更新 软件包列表。不加这个选项,你就只能盲目地更新。APT会下载每个软件包的最新 更新版本,然后以合理的次序安装它们。注意在运行该命令前应先运行 apt-get update更新数据库

移除无用软件包文件:apt-get clean and autoclean

当你需要安装某个软件包时,APT从/etc/apt/sources.list中所列的主机下载所 需的文件,将它们保存到本机软件库(/var/cache/apt/archives/), 然后开始安装,参考安装软件包, 第 3.2 节

本地软件库会不断膨胀占用大量硬盘空间,幸运的是,APT提供了工具来管理本地 软件库:apt-getclean方法和autoclean方法。

apt-get clean将删除/var/cache/apt/archives目录 和/var/cache/apt/archives/partial目录下锁文件以外的所有文件。 这样以来,当你需要再次安装某个软件包时,APT将重新下载它。

apt-get autoclean仅删除那些不需要再次下载的文件。总之,apt-get autoclean仅删除那些过时的文件。

在dselect中操作APT

想深入学习dselect的用法,请到Debian网站查阅dselect文档页面http://www.debian.org/doc/ddp.

以root省份运行dselect,在dselect中选好了软件包后,运行:

     # apt-get -u dselect-upgrade
我们看到在前例中许多软件包被安装是其它软件包“推荐”或“建议”的结果。另外一 些软件包被安装或删除(例如lbxproxy软件包)是我们通过dselect工具作出的决定。 由此可见dselect与APT结合起来将是一个功能强大的工具。

dselect工具帮助用户选取想要安装的Debian软件包。它有点复杂甚 至令人望而生厌,但经过实践你就能掌握它恐怖的终端界面。

dselect高级功能之一就是它知道利用Debian软件包的“推荐”和“建议”能力。

如何保持一个混合系统

人们有时会对这种情况有兴趣——使用一个版本的Debian作为其主发行版,但从另一 个分支上安装一个或多个包。

要设定你的Debian主版本,应当修改/etc/apt/apt.conf文件,并加 入:

     APT::Default-Release "version";

其中version是你希望作为主发行版使用的Debian版本。你可以使用的 版本有stabletestingunstable。 要从另外一个版本中安装软件包,你必须按照如下方式执行APT:

     # apt-get -t distribution install package

为了使其可以个工作,在你的/etc/apt/sources.list中至少有一行 是关于你要使用的那个版本的,而且要使用的软件包也必须存在于该版本中。

你也可以要求使用某个特定把本的软件包,如下所示:

     # apt-get install package=version

例如,下面的命令将会安装2.2.4-1版的nautilus软 件包:

     # apt-get install nautilus=2.2.4-1

如何从Debian的专用版本下升级软件包

apt-show-versions提供了一个安全的途径,让那些使用混合系统的 用户放心升级他们的系统,不必担心升级会将原来属于stable的包升级成了unstable包。 例如,在安装了apt-show-versions软件包之后, 使用这条命令将只升级你的unstable软件包:

     # apt-get install `apt-show-versions -u -b | grep unstable | cut -d ' ' -f 1`

我们从apt-cache开始,APT系统使用 这个程序来维护它的数据库。

获得软件包名称

假设你十分怀念玩Atari 2600的好日子,你决定用APT安装一个Atari emulator, 随后再下载几个游戏,你可以这样:

     # apt-cache search atari

想进一步获得某个软件包的 详细信息,你可以运行:

     # apt-cache show stella  

注意,首先列出的是可用软件包,接着列出的是已安装软件包。获取某个软件包的 常规信息可运行:

     # apt-cache showpkg penguin-command

如果仅想了解某软件包的与哪些软件包关联,可运行:

     # apt-cache depends penguin-command

使用dpkg查找软件包名称

另一个定位软件包的方法是知道软件包中某个关键文件的名称。例如,你编译时需 要某个“.h”头文件,查找提供该文件的软件包,你可以运行:

     # dpkg -S stdio.h

了解系统中已安装软件的软件包名称十分有用,譬如当你想清理硬盘空间时,可以运行:

     # dpkg -l | grep mozilla

如何“按需”安装软件包

你正在编译某段程序,突然,停住了!一条错误信息报告说你没有它需要的.h头文件。让auto-apt来救你吧,它问你是否要安装需要 的软件包,然后挂起编译进程,安装好软件包后再恢复编译进程。

你所要做的仅仅是:

     # auto-apt run command

这里“command”指在运行过程中可能出现“需求文件不存在”问题的命令。例如:

     # auto-apt run ./configure

一会儿,它就会告诉你要安装所需的软件包并自动转到apt-get处理。如果你正在 运行X,就会一个图形界面提示窗口。

为了提高效率auto-apt所用的数据库需要实时更新。可调用 auto-apt updateauto-apt updatedbauto-apt update-local来完成更新。

如何知道文件属于哪个软件包

如果你想安装某个软件包,但用apt-cache查不出它的名称,不过你 知道这个程序的文件名,或这个软件包中某些文件的文件名,那么你可以用apt-file来查找软件包名称。如下所示:

     $ apt-file search filename

它用起来很象dpkg -S,不过它还会列出包含该文件的已删除软件包。它 也可以用来查找哪个软件包包含编译时所缺的文件,当然,解决这类问题auto-apt可能是更好的方案,

用这个命令,你可以列出软件包的内容:

     $ apt-file list packagename

apt-file用一个数据库来存放所有软件包的内容信息,和auto-apt 一样,这个数据库也需要实时更新,完成更新可以运行:

     # apt-file update

缺省情况下,apt-fileauto-apt使用同一个数据库,

如何掌握软件包的变化情况

在每个软件包被安装以后,都会在文档目录(/usr/share/doc/packagename) 生成一个changelog.Debian.gz的文件,这个文件记录了该软件包最后一 次更新对系统做了哪些修改,你可以用zless阅读这些信息。不过当你对 整个系统进行升级以后,逐个查看软件包的更新信息可不是件容易事。

有一个工具能帮你完成这项任务,它就是apt-listchanges。首先你 要装上apt-listchanges软件包。在安装的过程中,为了进行配 置,Debconf会问你一些问题,按你的要求回答它们就行了。

第一个问题是问你希望apt-listchanges如何来显示修改日志。你可以让它把信息 通过邮件的方式发送给你,这对于自动更新是非常有用的。或者你可以让它在less等程序中显示修改日志,这样在继续升级前你就可以查看它们了。如果 你不希望apt-listchanges在升级的时候自动的运行,可以 回答none

安装了apt-listchanges后,每当apt下载软件包之后(不论来源是Internet、光盘 或是硬盘)都会显示这些软件包的系统更新信息。

下载源码包

用下面的命令下载源码包:

     $ apt-get source packagename

通常会下载三个文件:一个.orig.tar.gz、一个.dsc和一个.diff.gz。对于Debian专用的软件包,不会下载最后一个文件,第一个文件的文 件名中没有“orig”项。

dpkg-source通过.dsc文件中的信息,将源码包解包到 packagename-version目录,下载下来的源码包中有一个 debian/目录,里面是创建.deb包所需的文件。

想要下载的源码包自动编译成软件包,只需在命令行中加上-b,如下:

     $ apt-get -b source packagename

编译源码包所需的软件包

通常,编译源码包时要用到某些头文件和共享库,所有的源码包的控制文件中都 有一个域“Build-Depends:”,域中指出了编译该源码包需要哪些附加包。

APT提供了一个简单的方法下载这些附加包,你只需运行apt-get build-dep package,其中“package”就是你打算编译的源码包 名称。见下例:

     # apt-get build-dep gmc

一般错误

如果在安装过程中出现中断,然后你发现该软件包既不能重装又不能删除,试试下 面两个命令:

     # apt-get -f install
     # dpkg --configure -a

再试着安装那个软件包,如果不行再次运行上述命令后再试。这两个命令对于那些 使用unstable的玩家非常有用。

如果你在运行apt-get update时看到“E: Dynamic MMap ran out of room”, 那么在/etc/apt/apt.conf加入如下内容:

     APT::Cache-Limit 10000000;



sudo apt-get dselect-upgrade #------使用 dselect 升级

apt-cache rdepends # ------(package 了解某个具体的依赖?#当是查看该包被哪些包依赖吧...)

sudo apt-get check #-------检查是否有损坏的依赖

Broken Upgrade or Installation

  • What to do if an installation process fails and you find it is no longer possible to install or remove packages:
    • sudo dpkg --configure -a
      sudo apt-get install -f

查找软件包

dpkg --get-selections pattern #查找软件包名称包含 pattern 的软件包,可以在后面用 grep install/deinstall 来选择是否已经被 remove 的包(曾经安装过了的)

apt-cache search pattern #查找软件包名称和描述包含 pattern 的软件包 (可以是安装了也可以是没有安装),可以用参数来限制是否已经安装

aptitude search ~i #查找已经安装的软件包

aptitude search ~c #查找已经被 remove 的软件包,还有配置文件存在

aptitude search ~npattern #查找软件包名称包含 pattern 的软件包 (可以是安装了也可以是没有安装)

aptitude search \!~i~npattern #查找还没有安装的软件包名字包含 pattern 的软件包。(前面的 ! 是取反的意思,反划线是 escape 符号)

注:还有很多用法,可以去看看我在 forum 中写的帖子 aptitude Search Patterns[1]

apt-cache depends package #查找名称是 package 软件包的依赖关系

aptitude search ~R~npackage #查找名称是 package 软件包的依赖关系,可以同时看到是不是已经安装

apt-cache rdepends package #查找哪些软件包依赖于名称是 package 软件包

aptitude search ~D~npackage #查找哪些软件包依赖于名称是 package 软件包

dpkg -I package_name.deb #参数是大写i,查找已经下载但末安装的 package_name.deb 软件包的信息

dpkg -l package #参数是小写L,查找已经安装软件包 package 的信息,精简

apt-cache show pattern ##查找软件包pattern的信息 (可以是安装了也可以是没有安装)

aptitude show ~npattern #显示名称是 pattern 软件包的信息(可以是安装了也可以是没有安装)

apt-cache policy pattern #显示 pattern 软件包的策略(可以是安装了也可以是没有安装)

apt-cache showpkg pattern #显示pattern 软件包的其它信息(可以是安装了也可以是没有安装)

dpkg -S pattern #查找已经安装的文件 pattern 属于哪个软件包

apt-file search pattern #查找文件 pattern 属于哪个软件包(可以是安装了也可以是没有安装)

dpkg -c package_name.deb #查找已经下载但末安装的 package.deb 软件包包含哪些文件

dpkg -L package #查找已经安装 package 软件包包含哪些文件

apt-file show pattern #查找 pattern 软件包(可以是安装了也可以是没有安装)包含哪些文件

下载软件包

apt-get install package -d #下载软件包

aptitude download pattern #同上,不同的是下载的是符合 pattern 的软件包,后面不再指出

安装软件包

dpkg -i package_name.deb #安装本地软件包,不解决依赖关系

apt-get install package #在线安装软件包

aptitude install pattern #同上

apt-get install package --reinstall #重新安装软件包

apitude reinstall package #同上

移除软件包

dpkg -r package #删除软件包

apt-get remove package #同上

aptitude remove package #同上

dpkg -P #删除软件包及配置文件

apt-get remove package --purge #删除软件包及配置文件

apitude purge pattern #同上

自动移除软件包

apt-get autoremove #删除不再需要的软件包

注:aptitude 没有,它会自动解决这件事

清除下载的软件包

apt-get clean #清除 /var/cache/apt/archives 目录

aptitude clean #同上

apt-get autoclean #清除 /var/cache/apt/archives 目录,不过只清理过时的包

aptitude autoclean #同上

编译相关 apt-get source package #获取源码

apt-get build-dep package #解决编译源码 package 的依赖关系

aptitude build-dep pattern #解决编译源码 pattern 的依赖关系

平台相关

apt-cross --arch ARCH --show package 显示属于 ARCH 构架的 package 软件包信息

apt-cross --arch ARCH --get package #下载属于 ARCH 构架的 package 软件包

apt-cross --arch ARCH --install package #安装属于 ARCH 构架的 package 软件包

apt-cross --arch ARCH --remove package #移除属于 ARCH 构架的 package 软件包

apt-cross --arch ARCH --purge package #移除属于 ARCH 构架的 package 软件包

apt-cross --arch ARCH --update #升级属于 ARCH 构架的 package 软件包

注:慎重考虑要不要用这种方法来安装不同构架的软件包,这样会破坏系统。对于 amd64 的用户可能需要强制安装某些 i386 的包,千万不要把原来 amd64 本身的文件给 replace 了。最好只是安装一些 lib 到 /usr/lib32 目录下。同样地,可以用 apt-file 看某个其它构架的软件包包含哪些文件,或者是文件属于哪个包,不过记得最先要用 apt-file --architecture ARCH update 来升级 apt-file 的数据库,在 search 或 show 时也要指定 ARCH。

  • apt-get autoclean - 如果你的硬盘空间不大的话,可以定期运行这个程序,将已经删除了的软件包的.deb安装文件从硬盘中删除掉。如果你仍然需要硬盘空间的话,可以试试apt-get clean,这会把你已安装的软件包的安装包也删除掉,当然多数情况下这些包没什么用了,因此这是个为硬盘腾地方的好办法。
  • apt-get clean 类似上面的命令,但它删除包缓存中的所有包。这是个很好的做法,因为多数情况下这些包没有用了。但如果你是拨号上网的话,就得重新考虑了。
  • 包缓存的路径为/var/cache/apt/archives,因此,du -sh /var/cache/apt/archives将告诉你包缓存所占用的硬盘空间。
  • dpkg-reconfigure foo - 重新配置“foo”包。这条命令很有用。当一次配置很多包的时候, 要回答很多问题,但有的问题事先并不知道。例如,dpkg-reconfigure fontconfig-config,在Ubuntu系统中显示字体配置向导。每次我安装完一个 Ubuntu 系统,我都会运行这行命令,因为我希望位图字体在我的所有应用程序上都有效。
  • echo "foo hold" | dpkg --set-selections - 设置包“foo”为hold,不更新这个包,保持当前的版本,当前的状态,当前的一切。类似新立得软件包管理器中的“软件包->锁定版本”。
  • 注: apt-get dist-upgrade 会覆盖上面的设置,但会事先提示。 另外,你必须使用 sudo。输入命令echo "foo hold" | sudo dpkg --set-selections而不是sudo echo "foo hold" | dpkg --set-selections
  • echo "foo install -- 删除“hold”“locked package”状态设置。命令行为echo "foo install" | sudo dpkg --set-selections
  • apt-show-versions -u apt-show-versions工具可以告诉你系统中哪些包可以更新以及其它 一些有用的信息。-u选项可以显示可更新软件包列表,这个工具默认没有安装,但是每次update完了以后,用这个工具看看非常方便,值得一装。
  • 2.1 删除多余内核映像

    (1) 查看已安装内核映像

    通过命令sudo dpkg --get-selections | grep linux-image查看已安装内核映像:

    • # linux-image-2.6.32-25-generic install /*linux-xx.xx.xx-xx(-generic)是升级的内核版本,可以删除*/
    • # linux-image-2.6.32-26-generic install
    • # linux-image-2.6.32-27-generic install
    • # linux-image-2.6.32-31-generic install
    • # linux-image-generic install /*Linux发布版完整内核映像,不可删除*/
    (2) 查看当前内核版本

    通过命令uname -r查看当前内核版本,

    • jelline@jelline:~$ uname -r
    • 2.6.32-31-generic
    (3) 删除多余内核映像

    通过命令sudo apt-get purge linux-image-2.6.32-26-generic删除旧的内核映像(只须保留linux-image-generic即可,和当前内核版本即可)。选择Y,而后会弹出对启动项如何操作的选择框,可以选择保留也可以选择自动更新。

    • 解压缩后将会空出 99.3MB 的空间。
    • 您希望继续执行吗?[Y/n]Y
    3.2 删除旧的编译库

    (1) 查看已有的编译库

    通过命令sudo dpkg --get-selections | grep linux-headers查看已有的内核C编译库,即头文件库:

  • apt-cache search foo - 搜索和"foo"匹配的包。
  • apt-cache show foo - 显示"foo"包的相关信息,例如描述、版本、大小、依赖以及冲突。
  • dpkg --print-avail 软件包名称 - 与上面类似。
  • dpkg -l *foo* - 查找包含有"foo"字样的包。与apt-cache show foo类似,但是还会显示每个包是安装了还是没安装。
  • dpkg -l package-name-pattern - 列出名为package-name-pattern的软件包。除非你知道软件包的正确全称,否则可以使用“*package-name-pattern*”.
  • dpkg -L foo - 显示名为“foo”的包都安装了哪些文件以及它们的路径,很有用的命令。
  • dlocate foo - 在已安装的包中搜索“foo”的文件。对于回答“这个文件来源于哪个包”这个问题,是非常实用的。dlocate是一个软件包,必须安装它才能使用本命令。
  • dpkg -S foo - 和上面的命令一样,但相比更慢一些。他只能在Debian或Ubuntu系统下运行。另外,不需要安装dlocate包。
  • apt-file search foo - 类似dlocate和dpkg -S,但搜索所有有效软件包,不单单只是你系统上的已安装的软件包。-- 它所回答的问题是“哪些软件包提供这些文件”。你必须安装有apt-file软件包,并且确保apt-file数据库是最新的。
  • dpkg -c foo.deb - “foo.deb”包含有哪些文件?注:foo.deb是含路径的文件名。-- 这个是针对你自己下载的.deb包。
  • apt-cache dumpavail - 显示所有可用软件包,以及它们各自的详细信息(会产生很多输出)。
  • apt-cache show 软件包名称 - 显示软件包记录,类似dpkg --print-avail 软件包名称
  • apt-cache pkgnames - 快速列出已安装的软件包名称。
  • 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设置http代理

    可以通过三种方法为apt-get设置http代理

    注意:在Ubuntu 10.10及以后版本中,apt-get不再读取$http_proxy变量,因此只能使用方法2设置apt-get代理。另外,如果使用新立得软件包管理器,则可以在新立得中设置网络代理(设置——首选项——网络)

    方法一

    这是一种临时的手段,如果您仅仅是暂时需要通过http代理使用apt-get,您可以使用这种方式。

    在使用apt-get之前,在终端中输入以下命令(根据您的实际情况替换yourproxyaddress和proxyport)。

    export http_proxy=http://yourproxyaddress:proxyport

    方法二

    这种方法要用到/etc/apt/文件夹下的apt.conf文件。如果您希望apt-get(而不是其他应用程序)一直使用http代理,您可以使用这种方式。

    注意: 某些情况下,系统安装过程中没有建立apt配置文件。下面的操作将视情况修改现有的配置文件或者新建配置文件。

    gksudo gedit /etc/apt/apt.conf

    在您的apt.conf文件中加入下面这行(根据你的实际情况替换yourproxyaddress和proxyport)。

    Acquire::http::Proxy "http://yourproxyaddress:proxyport";

    保存apt.conf文件。

    方法三

    这种方法会在您的主目录下的.bashrc文件中添加两行。如果您希望apt-get和其他应用程序如wget等都使用http代理,您可以使用这种方式。

    gedit ~/.bashrc

    在您的.bashrc文件末尾添加如下内容(根据你的实际情况替换yourproxyaddress和proxyport)。

    http_proxy=http://yourproxyaddress:proxyport 
    export http_proxy
    

    保存文件。关闭当前终端,然後打开另一个终端。

    使用apt-get update或者任何您想用的网络工具测试代理。我使用firestarter查看活动的网络连接。

    如果您为了纠正错误而再次修改了配置文件,记得关闭终端并重新打开,否自新的设置不会生效。

    代理服务器的登录

    如果代理服务器需要登录,那么可以在指定代理服务器地址的时候,用如下格式(根据情况把username,password, yourproxyaddress和proxyport替换为相应内容):

    http_proxy=http://username:password@yourproxyaddress:proxyport

一、Ubuntu 采用 Debian 的软件包管理器 dpkg 来管理软件包, 类似 RPM. 系统中所有 packages 的信息都在 /var/lib/dpkg/

目录下, 其子目录 /var/lib/dpkg/info 用于保存各个软件包的配置文件列表:

(1)*.conffiles 记录了软件包的配置文件列表

(2)*.list 保存软件包中的文件列表, 用户可以从 .list 的信息中找到软件包中文件的具体安装位置.

(3)*.md5sums 记录了软件包的md5信息, 这个信息是用来进行包验证的.

(4)*.prerm 脚本在 Debian 包解包之前运行, 主要作用是停止作用于即将升级的软件包的服务, 直到软件包安装或升级完成.

(5)*.postinst 脚本是完成 Debian 包解开之后的配置工作, 通常用于执行所安装软件包相关命令和服务重新启动.

/var/lib/dpkg/available 文件的内容是软件包的描述信息, 该软件包括当前系统所使用的 Debian 安装源中的所有软件包,

其中包括当前系统中已安装的和未安装的软件包.

/var/cache/apt/archives 目录是在用 apt-get install 安装软件时,软件包的临时存放路径

/etc/apt/sources.list 存放的是软件源站点, 当你执行 sudo apt-get install xxx 时,Ubuntu 就去这些站点下载软件包到本地并执行安装

二、相关命令使用示例:

(1)查看某软件包的安装内容

dpkg -L xxx

(2)查找软件库中的软件包

apt-cache search 正则表达式

(3)显示系统安装包的统计信息

apt-cache stats

(12)清除所有已删除软件包的残馀配置文件

dpkg -l | grep '^rc' | awk '{print $2}' | xargs dpkg --purge

(13)编译时缺少h文件的自动处理

sudo auto-apt run ./configure

(15)备份当前系统安装的所有软件包的列表

dpkg --get-selections | grep -v deinstall > ~/somefile

(16)从上面备份的安装包的列表文件恢复所有包

dpkg --set-selections < ~/somefile

sudo dselect

(20)查看软件包在服务器上面的地址

apt-get -qq --print-uris install ssh | cut -d\' -f2

APTITUDE命令

(来自http://linuxtoy.org/archives/aptitude_quick_reference.html

aptitude是基于APT的又一个包管理的前端,aptitude似乎在处理依赖问题上更佳一些。据说aptitude 另外用一份数据量很小的扩展标记来实现所谓更佳的管理,我没有发现有什么比apt命令更加牛逼的功能,不过看起来命令比apt要简洁。

命令作用
aptitude update更新可用的包列表
aptitude upgrade升级可用的包
aptitude dist-upgrade将系统升级到新的发行版
aptitude install pkgname安装包
aptitude remove pkgname删除包
aptitude purge pkgname删除包及其配置文件
aptitude search string搜索包
aptitude show pkgname显示包的详细信息
aptitude clean删除下载的包文件
aptitude autoclean仅删除过期的包文件

参考网址:http://www.debian.org/doc/manuals/apt-howto/ch-novas.zh-cn.html

http://wiki.ubuntu.com.cn

以及相关个人博客