Linux系统软件包管理介绍
本节索引
软件包基础
RPM包管理
Linux发行版中附带有成千上万的可用包,其中包括了Internet工具、开发工具、办公工具、游戏等,如果
你没有选择完整安装,则只会安装这些包的“子集”,如何安装包,如何删除不想要的包,如何安装遗漏的
包,学习Linux系统的软件包管理将解决你的这些问题。
一、软件包基础
软件运行环境:
程序员代码–>预处理–>编译–>汇编–>链接
静态编译:.a
动态编译:.so
包管理器:
二进制应用程序的组成部分
二进制文件、库文件、配置文件、帮助文件
包命名:
源代码:name-VERSION.tar.gz|bz2|xz
包之间:可能存在依赖性关系,甚至循环依赖
解决依赖包管理工具:
yum:rpm包管理器的前端工具
apt-get:deb包管理器前端工具
zypper:suse上的rpm前端管理工具
dnf:Fedora 18+ rpm包管理器前端管理工具
程序包管理器:
debian:deb文件,dpkg包管理器
redhat:rpm文件,rpm包管理器
rpm:Redhat Package Manager
二、RPM包管理
RPM 全名是 ” RedHat Package Manager ” 简称则为 RPM 啦!顾名思义,当初这个软件管理的机制是由 Red Hat 这家公司发展出来的。 RPM 是以一种数据库记录的方式来将你所需要的软件安装到Linux 系统的一套管理机制。
RPM本质上就是一个包,包含可以立即在特定机器体系结构上安装和运行的Linux软件。最初加载到发行版本中的所有软件都是通过一个RPM来安装的。
RPM 剖析:
RPM是文件包,它包括关于包及其功能和依赖关系(即在该包能够运行之前必须安装
其他哪些包)的信息。还包含包中的文件清单,指定这些文件必须加载到系统中的何
处,以及它们的初始权限如何。RPM还包含安装前脚本,这是由包开发人员编写的。
RPM其次还包含已编译的二进制文件。最后,RPM包含了安装后的脚本。
RPM的优点
由于已经编译完成并且打包完毕,所以软件传输与安装上很方便 (不需要再重新编译);
由于软件的信息都已经记录在 Linux 主机的数据库上,很方便查询、升级与反安装
rpm包格式:
程序报名-版本号-打包号.操作系统号.架构.rpm如:vsftpd-3.0.2-21.el7.x86_64.rpm
如何查看rpm包架构
# 第一种方法
ls *.rpm |rev|cut -d. -f2|rev|sort | uniq -c
1337 noarch
2494 x86_64
# 第二种方法
ls *rpm |egrep -o "[^.]+\.rpm" | cut -d. -f1 |sort |uniq -c
1337 noarch
2494 x86_64
包里面内容:
- path/files 要安装的文件和相对路径
- metadata 元数据
- scripts 脚本(安装前脚本、安装后脚本、卸载前脚本、卸载后脚本)
程序包的来源
系统发版的光盘或官方的服务器;
CentOS官网:https://www.centos.org/download/
阿里云:http://mirrors.aliyun.com
网易:http://mirrors.163.com项目官方站点
举几个例子:
第三方组织
Fedora-EPEL:
Extra Packages for Enterprise Linux
基本上镜像站都提供epel源。
搜索引擎:
自己制作
注意:第三方包建议要检查其合法性
包来源合法性验证和完整性验证:
来源合法性验证:
数字签名:制作者提取加密程序包的特征码,然后将自己的私钥加到特征码后面
完整性验证:获取并导入新人的包制作者的秘钥
格式:rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CENTOS-7
验证:
(1) 安装此组织签名的程序时,会自动执行验证;
(2) 手动验证:rpm -K PACKAGE_FILE
rpm使用方法
安装卸载
-i:install ,安装 -v:verbose,显示详情 -h:显示进度条 -e:erase,删除(卸载) -U upgrade,升级 --force强制安装(不能用于强制卸载) --test: 测试安装,不真正执行安装。 --nodeps:忽略依赖性(一般不忽略) --oldpackage 降级安装(一般不降级)
内核安装默认是不覆盖安装的,装了多个kernel,可以修改grub.conf修改默认启动内核顺序。可以rpm -e卸载旧的kernel
查询
rpm -q PackageName查询某个包 rpm -qa 查询已安装的所有包 rpm -qa |grep xxx 模糊过滤 rpm -qf FILE 硬盘上的文件(file)是来自于哪个rpm包(可以是二进制程序,也可以是配置文件等) rpm -qi xxx.rpm 查询安装包详细信息(information) rpm -ql xxx.rpm 查看某个包安装后在系统里的所有文件 rpm -qc xxx 查询安装包后的配置(config)文件位置 rpm -q --scripts查询程序自带的脚本
rpm校验 (只能校验已安装的包)
rpm {-V|–verify} [select-options] [verify-options]S :(file Size differs) 文件的容量大小是否被改变 M :(Mode differs) 文件的类型或文件的属性 (rwx) 是否被改变?如是否可执行等参数已被改变 5 :(MD5 sum differs) MD5 这一种指纹码的内容已经不同 D :(Device major/minor number mis-match) 装置的主/次代码已经改变 L :(readLink(2) path mis-match) Link 路径已被改变 U :(User ownership differs) 文件的所属人已被改变 G :(Group ownership differs) 文件的所属群组已被改变 T :(mTime differs) 文件的建立时间已被改变 P :(caPabilities differ) 功能已经被改变
RPM数据库重建:
rpm管理器数据库路径:/var/lib/rpm/
查询操作:通过此处的数据库进行
获取帮助:
CentOS 6:man rmp
CentOS 7:man rpmdb
rpm {–initdb | –rebuilddb}
–initdb:初始化数据库,当前无任何数据库可初始化创建一个新的;当前有时不执行任何操作
–rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建通过读取当前系统上所有已经安装过的程序包进行重新创建;