Ubuntu的软件安装管理---dpkg与apt-*详解
摘要:软件厂商先在他们的系统上面编译好了我们用户所需要的软件,然后将这个编译好并可执行的软件直接发布给用户安装。不同的 Linux 发行版使用不同的打包系统,一般而言,大多数发行版分别属于两大包管理技术阵营: Debian 的”.deb”,和 Red Hat的”.rpm”。也有一些重要的例外,比方说 Gentoo, Slackware,和 Foresight,但大多数会使用这两个基本系统中的一个。这里将要介绍的是Debian系列发行版的dpkg与apt-*的详细使用方法。
注:本人系统版本【Ubuntu 16.04 LTS】(Long Term Support)
一、dpkg
1、简介
dpkg - package manager for Debian (debian系统的包管理工具)。
dpkg is a tool to install, build, remove and manage Debian packages,dpkg是Debian的一个底层包管理工具,主要用于对已下载到本地和已安装的软件包进行管理。
dpkg这个机制最早由Debian Linux社区所开发出来的,通过dpkg的机制,Debian提供的软件就能够简单的安装起来,同时能提供安装后的软件信息,实在非常不错。只要派生于Debian的其它Linux distributions大多使用dpkg这个机制来管理,包括B2D,Ubuntu等。
2、deb软件包名规则
格式为:Package_Version-Build_Architecture.deb
如:nano_1.3.10-2_i386.deb
* 软件包名称(Package Name): nano
* 版本(Version Number):1.3.10
* 修订号(Build Number):2
* 平台(Architecture):i386
3、dpkg软件包相关文件介绍
/etc/dpkg/dpkg.cfg dpkg包管理软件的配置文件【Configuration file with default options】
/var/log/dpkg.log dpkg包管理软件的日志文件【Default log file (see /etc/dpkg/dpkg.cfg() and option --log)】
/var/lib/dpkg/available 存放系统所有安装过的软件包信息【List of available packages.】
/var/lib/dpkg/status 存放系统现在所有安装软件的状态信息
/var/lib/dpkg/info 记安装软件包控制目录的控制信息文件
4、dpkg数据库
dpkg 使用文本文件作为数据库来维护系统中软件,包括文件清单, 依赖关系, 软件状态, 等等详细的内容,通常在 /var/lib/dpkg 目录下。 通常在 status 文件中存储软件状态和控制信息。 在 info/ 目录下备份控制文件, 并在其下的 .list 文件中记录安装文件清单, 其下的 .mdasums 保存文件的 MD5 编码。
例:查询dpkg数据库(显示所有已安装的Deb包)。
lzb@lzb:~$ dpkg -l
期望状态=未知(u)/安装(i)/删除(r)/清除(p)/保持(h)
| 状态=未安装(n)/已安装(i)/仅存配置(c)/仅解压缩(U)/配置失败(F)/不完全安装(H)/触发器等待(W)/触发器未决(T)
|/ 错误?=(无)/须重装(R) (状态,错误:大写=故障)
||/ 名称 版本 体系结构: 描述
+++-==============-============-============-=================================
ii a11y-profile-m 0.1.-0ubun amd64 Accessibility Profile Manager - U
ii account-plugin 0.12+16.04. all GNOME Control Center account plug
ii account-plugin 0.12+16.04. all GNOME Control Center account plug
ii account-plugin 0.12+16.04. all GNOME Control Center account plug
ii accountsservic 0.6.-2ubun amd64 query and manipulate user account
ii acl 2.2.- amd64 Access control list utilities
ii acpi-support 0.142 amd64 scripts for handling many ACPI ev
ii acpid :2.0.-1ub amd64 Advanced Configuration and Power
ii activity-log-m 0.9.-0ubunt amd64 blacklist configuration user inte
ii adduser 3.113+nmu3ub all add and remove users and groups
ii adium-theme-ub 0.3.-0ubunt all Adium message style for Ubuntu
ii gir1.2-pango-1 1.38.1-1 amd64 ..............................
..............................................................................
如上图,每条记录对应一个软件包,注意每条记录的第一、二、三个字符,这就是软件包的状态标识,后边依此是软件包名称、版本号和简单描述。
1)第一字符为期望值(Desired=Unknown/Install/Remove/Purge/Hold),它包括:
u Unknown状态未知,这意味着软件包未安装,并且用户也未发出安装请求.
i Install用户请求安装软件包.
r Remove用户请求卸载软件包.
p Purge用户请求清除软件包.
h Hold用户请求保持软件包版本锁定.
2)第二列,是软件包的当前状态(Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend)
n Not软件包未安装.
i Inst软件包安装并完成配置.
c Conf-files软件包以前安装过,现在删除了,但是它的配置文件还留在系统中.
u Unpacked软件包被解包,但还未配置.
f halF-conf试图配置软件包,但是失败了.
h Half-inst软件包安装,但是但是没有成功.
w trig-aWait触发器等待
t Trig-pend触发器未决
3)第三列标识错误状态,第一种状态标识没有问题,为空. 其它符号则标识相应问题(Err?=(none)/Reinst-required (Status,Err: uppercase=bad))
h 软件包被强制保持,因为有其它软件包依赖需求,无法升级.
r Reinst-required,软件包被破坏,可能需要重新安装才能正常使用(包括删除).
x 软包件被破坏,并且被强制保持.
案例说明:
ii —— 表示系统正常安装了该软件
pn —— 表示安装了该软件,后来又清除了
un —— 表示从未安装过该软件
iu —— 表示安装了该软件,但是未配置
rc —— 该软件已被删除,但配置文件仍在
5、dpkg子命令
为了方便用户使用,dpkg不仅提供了大量的参数选项, 同时也提供了许多子命令。
比如:
dpkg-deb、dpkg-divert、dpkg-query、dpkg-split、dpkg-statoverride、start-stop-daemon
这里将不会对dpkg的命令作详细说明,如需了解可自行查阅资料。
三、dpkg使用手册
1、安装
1)安装相关命令
dpkg -i package-name.deb // --install, 安装软件包,必须是deb包的完整名称。(软件的安装可被拆分为两个对立的过程“解包”和“配置”)
dpkg --unpack package-name.deb // “解包”:解开软件包到系统目录但不配置,如果和-R一起使用,参数可以是一个目录
dpkg --configure package-name.deb //“配置”:配置软件包
dpkg -c package-name.deb //列出 deb 包的内容
2)安装相关选项
-R, --recursive Recursively handle all regular files matching pattern *.deb found at specified directories and all of its
subdirectories. This can be used with -i, -A, --install, --unpack and --avail actions(递归地指向特定目录的所有安装包,可以结合-i,
-A, --install, --unpack 与 --avail一起使用)
2、移除软件包
dpkg -r package-name // --remove, 移除软件包,但保留其配置文件
dpkg -P package-name // --purge, 清除软件包的所有文件(removes everything, including conffiles)
3、查询
dpkg -l package-name // --list 查看系统中package-name软件包
dpkg -L package-name //--listfiles 查看package-name对应的软件包安装的文件及目录
dpkg -s package-name //--status 查看package-name对应的软件包信息
dpkg -S filename // --search 查询系统中某个文件属于哪个软件包
dpkg --info package-name.deb //--列出软件包解包后的包名称
例1:列出系统上安装的与dpkg相关的软件包
dpkg -l \*dpkg*
更多dpkg的使用方法可在命令行里使用man dpkg来查阅 或直接使用dpkg --help。
三、apt
1、apt简介
虽然我们在使用dpkg时,已经解决掉了 软件安装过程中的大量问题,但是当依赖关系不满足时,仍然需要手动解决,而apt这个工具解决了这样的问题,linux distribution 先将软件放置到对应的服务器中,然后分析软件的依赖关系,并且记录下来,然后当客户端有安装软件需求时,通过清单列表与本地的dpkg已存在的软件数据相比较,就能从网络端获取所有需要的具有依赖属性的软件了。
2、工作原理
Ubuntu采用集中式的软件仓库机制,将各式各样的软件包分门别类地存放在软件仓库中,进行有效地组织和管理。然后,将软件仓库置于许许多多的镜像服务器中,并保持基本一致。这样,所有的Ubuntu用户随时都能获得最新版本的安装软件包。因此,对于用户,这些镜像服务器就是他们的软件源。
然而,由于每位用户所处的网络环境不同,不可能随意地访问各镜像站点。为了能够有选择地访问,在Ubuntu系统中,使用软件源配置文件/etc/apt/sources.list列出最合适访问的镜像站点地址。
例1:apt-get的更新过程
)执行apt-get update
)程序分析/etc/apt/sources.list
)自动连网寻找list中对应的Packages/Sources/Release列表文件,如果有更新则下载之,存入/var/lib/apt/lists/目录
)然后 apt-get install 相应的包 ,下载并安装。
即使这样,软件源配置文件只是告知Ubuntu系统可以访问的镜像站点地址,但那些镜像站点具体都拥有什么软件资源并不清楚。若每安装一个软件包,就在服务器上寻找一遍,效率是很低的。因而,就有必要为这些软件资源列个清单(建立索引文件),以便本地主机查询。
用户可以使用“apt-get update”命令刷新软件源,建立更新软件包列表。在Ubuntu Linux中,“apt-get update”命令会扫描每一个软件源服务器,并为该服务器所具有软件包资源建立索引文件,存放在本地的/var/lib/apt/lists/目录中。 使用apt-get执行安装、更新操作时,都将依据这些索引文件,向软件源服务器申请资源。因此,在计算机设备空闲时,经常使用“apt-get update”命令刷新软件源,是一个好的习惯。
例2:apt-get install原理图
3、apt相关文件
var/lib/dpkg/available 文件的内容是软件包的描述信息, 该软件包括当前系统所使用的Debian 安装源中的所有软件包,其中包括当前系统中已安装的
和未安装的软件包.
/etc/apt/sources.list 记录软件源的地址(当你执行 sudo apt-get install xxx 时,Ubuntu 就去这些站点下载软件包到本地并执行安装)
/var/cache/apt/archives 已经下载到的软件包都放在这里(用 apt-get install 安装软件时,软件包的临时存放路径)
/var/lib/apt/lists 使用apt-get update命令会从/etc/apt/sources.list中下载软件列表,并保存到该目录。
4、源文件
apt的源文件由配置文件/etc/apt/sources.list指定,想要具体了解请访问上一篇博客:
https://www.cnblogs.com/liuzhenbo/p/11069285.html
四、apt使用手册
1、apt-get
apt-get is the command-line tool for handling packages, and may be considered the user's "back-end" to other tools using the APT library. Several "front-end" interfaces exist, such as dselect(1), aptitude(8), synaptic(8) and wajig(1).
apt-get 是一个下载安装软件包的简单命令行接口。最常用的命令是update(更新)和install(安装)。
用法: apt-get [选项] 命令
常用选项:
-h 本帮助文件。
-q 输出到日志 - 无进展指示
-qq 不输出信息,错误除外
-d 仅下载 - 不安装或解压归档文件
-s 不实际安装。模拟执行命令
-y 假定对所有的询问选是,不提示
-f 尝试修正系统依赖损坏处
-m 如果归档无法定位,尝试继续
-u 同时显示更新软件包的列表
-b 获取源码包后编译
-V 显示详细的版本号
-c=? 阅读此配置文件
-o=? 设置自定的配置选项,如 -o dir::cache=/tmp
常用命令:
//查询适合当前系统和CPU架构的相关软件包版本
http://manpages.ubuntu.com/manpages/xenial/man1/apt-show-versions.1p.html //查找官方网站
apt-cache madison package_name //将列出版本
apt-cache policy package_name //详细列出信息
//下载,安装
1)apt-get update 更新源
)apt-get dist-upgrade 升级系统到相应的发行版(根据 source.list 的配置)
)apt-get upgrade 更新所有已经安装的软件包
)apt-get install package_name 安装软件包(加上 --reinstall重新安装)
apt-get install package_name=version 安装指定版本的软件包
5) apt-get -f install //安裝依賴
例子:
sudo dpkg -i bcloud-x.x.x.deb
sudo apt-get -f install
//删除,卸载
1)apt-get remove package_name //删除已安装的软件包(保留配置文件),不会删除依赖软件包,且保留配置文件。
)apt-get --purge remove package_name //删除已安装包(不保留配置文件);如软件包a依赖软件包b,执行该命令会删除a,而且不保留配置文件。
3)apt-get autoremove
//删除为了满足依赖而安装的,但现在不再需要的软件包(包括已安装包),保留配置文件。
//清理缓存
1)apt-get autoclean //定期运行这个命令来清除那些已经卸载的软件包的.deb文件。APT的底层包是dpkg, 而dpkg 安装Package时, 会将 *.deb 放在 /var/cache/apt/archives/中,apt-get autoclean 只会删除 /var/cache/apt/archives/ 已经过期的deb。
)apt-get clean //使用 apt-get clean 会将 /var/cache/apt/archives/ 的所有 deb 删掉
2、apt-cache
apt-cache是linux下的一个apt软件包管理工具。APT包管理的大多数信息查询功能都可以由apt-cache命令实现,通过apt-cache命令配合不同的子命令和参数的使用,可以实现查找,显示软件包信息及包依赖关系等功能.
)apt-cache depends packagename 了解使用依赖
)apt-cache rdepends packagename 是查看该包被哪些包依赖
)apt-cache search packagename 搜索软件包,可以按关键字查找软件包,通常用于查询的关键字会使用软件包的名字或软件包的一部分
)apt-cache show packagename 查询指定包的详情,不管是否已经安装。获取包的相关信息,如说明、大小、版本等
)apt-cache showpkg packagename 显示软件包的大致信息
Ubuntu的软件安装管理---dpkg与apt-*详解的更多相关文章
- linux/Ubuntu系统上安装mysql数据库(附图详解)
在前面的文章中,我已经分享了如何在Ubuntu系统中安装以及搭建java开发环境,那么当我们需要跟数据打交道的时候,那么就需要在ubuntu系统中安装一个数据库了,那么废话就不多说了,我们这里主要是分 ...
- Ubuntu sudo apt-get 安装下载更新软件包命令详解
sudo apt-get install package 安装软件包sudo apt-get install package - - reinstall 重新安装 ...
- Linux软件安装管理之——dpkg与apt-*详解 apt命令(dpkg和apt代替rpm)
apt list *python* Nosee123关注赞赏支持 Linux软件安装管理之--dpkg与apt-*详解 [Linux软件安装管理系列]- - 传送门: - -<Linux软件 ...
- Linux软件安装管理之——dpkg与apt-*详解
Linux软件安装管理之--dpkg与apt-*详解 [Linux软件安装管理系列]- - 传送门: - -<Linux软件安装管理之--源码安装详解> - -<Linux软件安装管 ...
- inux软件安装管理之——dpkg与apt-*详解
inux软件安装管理之--dpkg与apt-*详解 Nosee123关注 0.5922017.09.12 17:47:44字数 3,894阅读 8,565 [Linux软件安装管理系列]- - 传送门 ...
- Linux 学习 (十一) 软件安装管理
Linux软件安装管理 学习笔记 软件包简介 软件包分类: 源码包 :脚本安装包 二进制包(RPM 包.系统默认包) 源码包的优点: 开源,如果有足够的能力,可以修改源代码 可以自由选择所需的功能 软 ...
- 全网最详细的Sublime Text 3的安装Package Control插件管理包(图文详解)
不多说,直接上干货! 全网最详细的Windows里下载与安装Sublime Text *(图文详解) 全网最详细的Sublime Text 3的激活(图文详解) 全网最详细的Sublime Text ...
- Ubuntu14.04下Mongodb(离线安装方式|非apt-get)安装部署步骤(图文详解)(博主推荐)
不多说,直接上干货! 说在前面的话 首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu LTS \n \l r ...
- Ubuntu16.04下Mongodb(离线安装方式|非apt-get)安装部署步骤(图文详解)(博主推荐)
不多说,直接上干货! 说在前面的话 首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu LTS \n \l r ...
随机推荐
- WebStorm 使用经验
1.优点 1.1 可自动提示图片的宽高 1.2 标签名字可重构(改名) 1.3 css重命名 1.4 可把内联的style移到外部 1.5 可实现声明提升 1.6 设置项是可搜索的 1.7 有 ...
- CocosCreator - 向上传递事件(冒泡)
/** * 分发事件到事件流中. * this.node.dispatchEvent(new cc.Event.EventCustom("name",是否向上传递)) * ...
- tomcat启动报错The JRE could not be found.Edit the server and change the JRE location
解决: 在Windows->Preferences->Server->Runtime Environments 选择Tomcat->Edit,在jre中选择相应的jdk版本,完 ...
- NOIP2016天天爱跑步解题思路
算法:LCA,树上差分+(乱搞) 如果有写错的地方请大佬更正 对于100%数据: u表示起点,v表示终点 对于一条u到v的路径,先讨论LCA!=u&&LCA!=v的情况: 分为u到LC ...
- 14 SQLite数据库
SQLite数据库SQLite 是一款轻型的数据库SQLite 的设计目标是嵌入式的SQLite 占用资源低SQL 指结构化查询语言SQL 使我们有能力访问数据库SQL 是一种 ANSI 的标准计算机 ...
- yagmail四行代码发送邮件
yagmail四行代码发送邮件 import yagmail # 链接邮箱服务器 yag = yagmail.SMTP(user="xxxx@163.com", password= ...
- P 1016 部分A+B
转跳点:
- NVIDIA TX2--3--NVIDIA Jetson TX2 查看系统版本参数状态及重要指令
NVIDIA Jetson TX2 查看系统参数状态. 当前博主的TX2更新的版本为:Jetpack 3.3, cuda 9.0.252, cudnn7.0, opencv3.3.1, TensorR ...
- 【pwnable.kr】fb
这是pwnable.kr的签到题,记录pwn入门到放弃的第一篇. ssh fd@pwnable.kr -p2222 (pw:guest) 题目很简单,登录上了ssh后,发现了3个文件:fd,fd.c, ...
- 【LeetCode】电话号码的字母组合
[问题]给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:" 输出:["ad ...