什么是软件包
软件包是包含计算机程序和软件部署(deployment)所需元数据(metadata)的存档文件(archive file)。
包元数据包括包描述,包版本和依赖关系(需要预先安装的其他包)。
deb是Debian软件包格式,文件扩展名为.deb。与Debian的命名一样,deb也是因Debra Murdock(Debian创始人Ian Murdock的前妻)而得名。Debian软件包是Unix ar归档的标准文件,将包文件信息以及包内容用gzip和tar打包而成。处理这些包的主要程序是dpkg,实际经是通过apt调用。通过Alien工具可以将deb包转换成其他形式的软件包。
包管理工具主要有:dpkg,apt,aptitude,synaptic,dselect,tasksel等。这些工具的关系如下:
dpkg是最基础原始的安装与管理软件包程序,其它工具均以其为基础。
apt是dpkg的前端,用于从远程获取软件包以及处理复杂的包依赖关系,增加了自动下载,配置,安装二进制或者源代码格式等功能,因此简化了Unix系统上管理软件的过程。
dselect是使用菜单界面的包管理工具,基于apt和dpkg。相对于apt,操作起来更简单。
aptitude也是使用菜单界面的包管理工具,整合了 dselect 和 apt-get的所有功能,并提供更多特性,特别在依赖关系的处理上更佳。举例来说,aptitude删除一个包时,会同时删除其依赖的包。这样,系统中不会残留无用的包,整个系统更为干净。
synaptic是图形界面的apt前端。
tasksel基于apt-get和dpkg。和其它工具比它不允许用户选择要安装的软件包,而是让用户选择任务。在Debian的术语中,一个任务实际是一个软件包的集合。例如,X Window系统的XFree86实现由许多不同的软件包所构成,包括核心软件,各种视频卡的驱动模块和字体文件。
Debian有“任务”的概念,可以允许发行版本将软件包集合分组,例如将XFree86放入一个虚拟包中。当用户选择一个任务,实际上他选择一个包含多个Debian deb软件包的集合。
下面分别介绍各工具
dpkg是Debian软件包管理系统的中流砥柱,负责安全卸载软件包,配置,以及维护已安装的软件包.也是Debian系统中众多软件包管理工具的后端。
dpkg --help 列出所有选项。
dpkg --info foo_VVV-RRR.deb 列出特定软件包的控制文件(和其它信息)。
dpkg --install foo_VVV-RRR.deb 安装软件包。
dpkg -R foo_VVV-RRR.deb 安装一个目录下面所有的软件包
dpkg --unpack foo_VVV-RRR.deb 解压 (但不配置)包。
注:这个操作产生的文件不可用,除非对一些文件进行进一步设置。 它移除已安装软件并运行preinstal脚本。
dpkg --configure foo 配置已解压的包:
注:它运行postinst脚本,更新conffiles包含的文件。 它以软件名(foo)为参数,而不是软件包名(foo_VVV-RRR.deb)。
dpkg --remove foo 移除软件 (不包括配置文件):。
dpkg --purgefoo 移除软件 (包括配置文件)
dpkg --list 'foo*' 列出名字包含字符串(或正则表达式)"foo*"软件包的安装信息。
dpkg --fsys-tarfile foo_VVV-RRR.deb | tar -xf -blurf 不从软件包中抽取名字包含“blurf”的文件。
APT由以下的几个主要的命令构成:apt-get,apt-cache,apt-file。在Debian系統中,APT建构于dpkg之上。
apt-cache是一个apt软件包管理工具,它可查询apt的二进制软件包缓存文件可查询软件包的状态信息。
-
apt-cache show package_name 显示软件的信息,包括版本号,安装状态和包依赖关系等。
-
apt-cache search package_name 搜索软件包,可用正则表达式。
-
apt-cache showpkg package_name 显示软件包的依赖关系信息。
-
apt-cache policy package_name 显示软件包的安装状态和版本信息。
-
apt-cache depends package_name 显示指定软件包所依赖的软件包。
-
apt-cache rdepends package_name 显示软件包的反向依赖关系,即有什么软件包需依赖你所指定的软件包。
apt-file是一个软件包查找工具,可以查到软件包所含的文件和安装的位置。
apt-file update 更新软件包的文件库,第一次使用或apt-get update后都需运行一次。
apt-file search file_name 查找该文件存在于哪些软件包中。
apt-file list package_name 显示该软件包的文件。
关于apt-get的缓存目录:默认的缓存目录是/var/cache/apt/archives/
apt-get update 在修改/etc/apt/sources.list或/etc/apt/preferences之後运行该命令。此外您需要定期运行这一命令以确保您的软件包列表是最新的。
apt-get install packagename 安装一个新软件包(参见下文的aptitude)
apt-get remove packagename 卸载一个已安装的软件包(保留配置文档)
apt-get --purge remove packagename 卸载一个已安装的软件包(删除配置文档)
apt-get autoremove packagename 同上,比上面的要删除的彻底一点
dpkg --force-all --purge packagename 有些软件很难卸载,而且还阻止了别的软件的应用,就能够用这个,但是有点冒险。
apt-get autoclean apt会把已装或已卸的软件都备份在硬盘上,所以假如需要空间的话,能够让这个命令来删除您已删掉的软件
apt-get clean 这个命令会把安装的软件的备份也删除,但是这样不会影响软件的使用。
apt-get upgrade 可以使用这条命令更新软件包,apt-get upgrade不仅可以从相同版本号的发布版中更新软件包,也可以从新版本号的发布版中更新软件包,尽管实现后一种更新的推荐命令为apt-get dist-upgrade;
在运行apt-get upgrade命令时加上-u选项很有用(即:apt-get -u upgrade)。这个选项让APT显示完整的可更新软件包列表。不加这个选项,你就只能盲目地更新。APT会下载每个软件包的最新更新版本,然后以合理的次序安装它们。注意在运行该命令前应先运行 apt-get update更新数据库。更新任何已安装的软件包。
apt-get dist-upgrade 将系统升级到新版本
你需要安装某个软件包时,APT从/etc/apt/sources.list中所列的主机下载所需的文件,将它们保存到本机软件库(/var/cache/apt/archives/),然后开始安装。
本地软件库会不断膨胀占用大量硬盘空间,幸运的是,APT提供了工具来管理本地软件库:apt-get的clean方法和autoclean方法。
apt-get clean将删除/var/cache/apt/archives目录和/var/cache/apt/archives/partial目录下锁文件以外的所有文件。这样以来,当你需要再次安装某个软件包时,APT将重新下载它。
apt-get autoclean仅删除那些不需要再次下载的文件。