Dpkg and Apt
APT
Intro
APT(Advanced Package Tools-高级包工具),debian环境下面的系统软件管理工具
基本语法
apt-get [options] command [pkg1 [pkage2 ..]]
Install
- 安装: sudo apt-get install pkg1
- 修复安装(–fix-missing): sudo apt-get -f install pkg1
- 重新安装: sudo apt-get –reinstall install pkg1 pkg2
删除命令
- 移除软件包、保留配置文件: sudo apt-get remove pkg1
- 清除软件包,不保留配置文件(如果配置没有更改的话): sudo apt-get –purge remove
- 移除包以及相应的依赖包,保留配置文件: sudo apt-get autoremove pkg1
- 清除包以及相应的依赖包,不保留配置文件: sudo apt-get –purge autoremove pkg1
清理命令
清理/var/cache/apt下面的除锁之外的文件: sudo apt-get clean
清理过时文件: sudo apt-get autoclean
升级命令
- 更新软件包列表: sudo apt-get update
- 升级所有包: sudo apt-get upgrade
- 升级系统: sudo apt-get dist-upgrade
其中更新命令会从源服务器上下载meta到/var/lib/apt/lists目录中,用于包检索,其中源列表/etc/apt/sources.list
检查
- 搜索包: sudo apt-cache search pkg1
- 检查包: sudo apt-get check
- 下载包源码: sudo apt-get source pkg1
- 安装包的编译环境: sudo apt-get build-dep pkg1
dpkg
apt和dpkg关系
- apt、aptitude都是从网络安装软件包,并自动解决依赖关系,但是dpkg仅仅安装本地软件包,并且不解决依赖关系
- apt从软件源中下载metadata完成软件包/源码的搜索、下载、install、remove
- metadata包含各个软件包的索引、摘要信息文件
- apt的安装步骤:
- apt搜索软件包、下载
- 使用dpkg安装下载的所有软件包
- 所以说,apt是dpkg的前端封装工具
Uninstall
列出所有系统已经存在的软件,dpkg -l |grep xxx, 使用-P、–purge、remove卸载即可;
系统更新、查找软件、软件源的原理
Intro
所有的一切皆在如下文件或者目录中:
/var/lib/dpkg/status
/var/lib/apt/lists目录
Install and Uninstall
信息来源地——/var/lib/dpkg/status文件
Query and Download
/var/lib/apt/lists目录
Update
将/var/lib/dpkg/status文件中的某一个软件信息和/var/lib/apt/lists目录下的metadata对比,判断是否需要更新
源
Format
deb/deb-src url 仓库 包许可类型
deb/deb-src
- deb:二进制包
- deb-src:源码包
资源地址
某一个指定的资源地址,该资源的根目录下一般存在如下两个目录:dists、pool
- pool中存放dists中文件的权限、布局;
- dists中存放各种包结构,即仓库之地
warehouse仓库
目录dists下的各个子目录的命名规则:主版本、主版本-小版本
1 | precise |
包许可类型
- main——官方维护的版本
- universe——社区维护的软件
- restricted——设备专用驱动
- multiverse——非自由软件,但免费试用
dpkg
Install
dpkg -i page.deb
Delete
- 保留配置:dpkg -r pkg
- 不保留配置:dpkg -p pkg
查询
正则查询:dpkg -l pkg_file_pattern
输出:
1 | 第一列的各个期望值含义: |
数据库查询:dpkg-query -l
查询包的安装目录以及文件:dpkg -L pkg
信息
获取软件包的详细信息:dpkg -s pkg
关联文件目录
配置文件: /etc/dpkg/dpkg.cfg——存放默认选项
日志文件: /var/log/dpkg.log
软件包信息: /var/lib/dpkg.available——曾经安装过的软件包信息,即使是卸载的软件
状态信息: /var/lib/dpkg/status——见上面的描述,不保存卸载的软件信息
控制信息
/var/lib/dpkg/info——软件包控制目录的控制信息
包命名规则
格式:包名_版本-修订号_平台.deb
例子:nano_1.3.10-2_i386.deb