Ubuntu包管理
APT:Advanced Packaging Tool
1. 关于apt
manual提到,提供包管理系统的高层次命令行接口。相对于更专门的APT工具(apt-get、apt-cache),apt是一个终端用户接口,更适合交互式选项的使用。
- update:从所有配置的源中下载包信息。其他的操作就是根据update获得的信息来操作包。这也就是为什么在apt-install之前最好先update。
- update:通过source.list安装当前系统所有已经安装的包的更新。如果要求满足依赖,新包被安装,但是存在的包不会移除。如果一个更新要求移除一个已安装的包,此包的更新不会执行。
- full-upgrade:执行upgrade。如果需要对系统升级,会删除已安装的包。
- install/reinstall/remove/purge:通过regex/glob执行对指定的一个或多个包的某一动作。
- 包名后添加‘+’安装包,‘-’移除包。‘=’接想要安装的版本。特定版本可以在包名后添加‘/’+包对应的codename。这也会选择此包的依赖选择版本。
- remove会移除包的所有数据,但会保留用户配置文件。
- 此类选项不会相应home目录的配置和数据。
- autoremove:移除安装某些包时需要满足依赖关系的包,可能是依赖关系改变/需要这些依赖的安装包被移除。通过install选项显式安装的包不会提出自动移除。
- satisfy:满足后接的字符串。也能处理冲突,使用“Conflicts”:
apt satisfy “foo, bar (>= 1.0)” “Conflicts: baz, fuzz”
- search:后接regex选项。在可安装包列表中搜索并显示匹配的包。要查找包含具体特征的包可用此选项。要搜索包含一个特定文件的包,尝试apt-file
- show:显示包的信息如依赖关系、安装下载大小、可下载的来源、包内容的描述。
- list:与dpkg-query --list相似,可以显示满足确定标准的一系列包。支持通配符。列举已安装的、可更新的、所有可安装的分别有选项–installed、–upgradeable、–all-versions
- edit-sources:编译source.list文件
apt的所有特征适用于复杂的APT工具:apt-get、apt-cache等
2. apt_preferences
文件/etc/apt/preferences, /etc/apt/preference.d/用于控制安装包的版本。
当source.list包含的引用有多个软件包发行版本(如stable、testing)时,一个软件包的若干版本都可用于安装。APT给每个可用安装包分配了优先级。apt-get会选择最高优先级的包去安装。而APT的preferences会覆盖此默认优先级。
关于/etc/apt/preferences.d下的文件:
字母数字升序;
遵循命名规则:
- 没有文件扩展名,或扩展是‘pref’
- 只包含:连字符-、下划线_、句号.
对于上述所说的多个版本均可用的包,apt-get会下载source.list中最先列出的实例。APT preferences不会影响实例的选择,只会影响版本的选择。
APT默认优先级分配
如果没有特殊版本的pref文件或entry,则优先级就是软件发行版的所属优先级。可能挑选出一个版本“the target release”(可设置在apt-get或/etc/apt/apt.conf),默认比其他版本优先级(包括设置在/etc/apt/preferences中)更高。
其他详情:manual apt_preferences
3. apt-get
处理包的命令行工具,是用户使用APT库的后端。
- update:从软件源同步包索引文件。可用包的索引从/etc/apt/sources.list中取回。比如,使用某个Debian软件包存档,此命令会检索后缀gz的软件包文件,从而获得某些新的包、包更新的相关信息
建议在upgrade/dist-upgrade之前执行update。
- upgrade:从sources.list中的软件源,更新本系统已经安装的所有包的最新版。
每次安装前应该先upgrade,让apt-get知道可安装包的最新版。
- dist-upgrade:除了执行upgrade功能,也会处理一些新版本包的依赖问题。可能会移除一些包。
- dselect-upgrade:与传统Debian包管理前端
dselect
结合,根据dselect对可安装包的状态的改变,执行一些必要动作,如:移除旧包安装新包。 - install:后接一/多个要安装或更新的package。这里的package是包名,不是全称、(例如debian系统中,要的是apt-utils而非apt-utils_2.0.9_amd64.deb)。
- 连字符
-
添加到包名后,该包会被移除;+
是安装某个包;包名后跟随=
和版本,用于安装指定版本的包;/
加发行版本或者Archive name (stable, testing, unstable)用于选择指定的发行版本。 - 同时,install还可用于更新指定的已安装包。它是单独更新某个包,upgrade是更新所有的已安装包。
- ./?/*等字符可用于指定包名。
‘lo.*’
能匹配到‘how-lo’
、‘lowest’
。如果不希望这样匹配,可以配合使用正则表达式的$
、^
。
- 连字符
- reinstall: install --reinstall的别名。
- remove:与install相反,移除包,但保留配置文件。
- purge:除了remove之外,配置文件也会被删除。
- source:寻找软件包的源代码。一些可以通过source.list中的
deb-src
获取包的源码,下载到当前目录下。需要在source.list中配置获取源代码的来源。- 指定
--compile
,该源码会被通过dpkg-buildpackage
编译成.deb后缀的二进制文件,由--host-architecture
指定体系结构。--donwload
使得下载的源码不会被解压。 - 特定版本的源码,需要在源代码名称后加
=
和版本
- 指定
- build-dep:通过安装/删除某些包,满足要编译的源码的一些依赖。
- satisfy:满足给定的依赖字符串。
- check:更新包缓存和检查损坏的依赖。
- download:下载给定的二进制包到当前路径。
- clean:清除本地仓库的包文件,但会锁定
/var/cache/apt/archives/
、/var/cache/apt/archives/partial/
下的文件。 - autoclean:与clean相似,但是清除的是不再被下载、几乎没用的文件。
- autoremove:移除那些之前用于满足某些安装包依赖的包,这些包现在不再需要。
- changelog:下载一个包的更新日志,通过
sensible-pager
显示。默认显示安装的版本。 - indextargets:默认显示deb822格式的数据文件列表信息,这些数据文件会被
apt-get update
下载。可通过--format
更改输出格式。主要用于:外部工具与APT协作时获取信息的接口。