程序包管理器不同公司的发行版:
debian:dpt管理器 以”.dpkg“结尾
redhat:rpm管理器 以”.rpm“结尾
S.u.S.E:rpm管理器 以”.rpm“结尾
-
rpm包的特点:
一个程序包的运行,依赖于其他程序包的存在,包与包之间存在很严重的依赖关系,因此我们在用rpm安装某个包时,会提示我们安装其他的 包,安装完所有依赖的包之后才能安装成功,当然我们也可是使用–nodeps选项忽略依赖关系,但可能导致我们的安装包程序不完整,程序不能正常使用,那么如何解决呢?就需要程序包的前端管理工具,yum啦。
-
rpm包的命名格式:
name-version-release.arch.rpm
release:rpm包的发型号
release.os.2.el17.i386.arch.rpm :兼容redhat7 32位第二次制作的程序包
arch:架构 i386 x64 ppc
noarch:跟平台无关
-
二进制程序包的组成部分:
二进制文件、库文件、帮助文件、配置文件
查看二进制程序所依赖的库文件:ldd `which cmd`
查看本机装在的所有可用库文件名及文件路径映射关系:/sbin/ldconfig -p
配置文件:.conf 结尾
缓存文件:.cache结尾
-
源代码的命名格式:
name-version.tar.gz
version:major minor.release
-
程序包管理器的功能:
将各个编译好的应用程序的各个组成文件打包成一个或几个程序包文件,从而更方便的实现程序的安装、卸载、升级、校验等操作。
-
程序包的获取途径:
1、系统发型版的光盘或者官方服务器
https://www.centos.org/download
2、项目官方站点
3、第三方组织
EPEL:
搜索引擎:
http://rpmfind.net
http://rpm.pbone.net
-
rpm命令:rpm option.. packagefile
安装:-i –install
卸载:-e –erase
升级:-U –update -F –freshen
查询:-q –query
校验:-V –verify -K
数据库维护:–builddb –initdb
安装详解:
rpm -i [install-option] packagefile….
一般选项:
-v:安装过程显示信息
-vv:安装过程显示详细信息
-h:输出显示进度条,每个#表示2%的进度
install-option:
–test:测试安装,可以检查包的依赖性
–nodeps:忽略依赖关系,可以安装成功,但不确定是否能正常使用
–replacepkgs:重新安装,可以配合–force使用
–nosignature:不做检查包签名信息及来源合法性
–nodigest:不检查包完整性信息
rpm包以可以自带脚本,我们也可以针对脚本的安装执行操作:
–noscripts:不安装脚本
preinstall:安装过程开始之前运行脚本,%pre –nopre
postinstall:安装过程完成之后运行脚本,%post –nopost
preuninstll:卸载过程真正开始执行之前的脚本,%preun –nopreun
postuninstall:卸载过程完整之后运行脚本,%postun –nopostun
当我们误删除一个如/bin/tree 文件,然后使用rpm -ivh 安装时提示如下:
root@cenots6.8 ~ # which tree /usr/bin/tree root@cenots6.8 ~ # rm -rf /usr/bin/tree root@cenots6.8 ~ # rpm -ivh /media/CentOS_6.8_Final/Packages/tree-1.5.3-3.el6.x86_64.rpm Preparing... ########################################### [100%] package tree-1.5.3-3.el6.x86_64 is already installed ###提示该包已经安装,此时通过rpm -ivh不能安装
root@cenots6.8 ~ # rpm -ivh /media/CentOS_6.8_Final/Packages/tree-1.5.3-3.el6.x86_64.rpm --force Preparing... ########################################### [100%] 1:tree ########################################### [100%] ##此时可通过--force强制安装
如上图所示我们可以使用–relpacepkgs 或–force 重新安装,但是此时会覆盖配置文件,那么我们可以采取下面所示的方法:
root@cenots6.8 /media/CentOS_6.8_Final/Packages # rpm2cpio tree-1.5.3-3.el6.x86_64.rpm | cpio -tv(预览包内文件) -rwxr-xr-x 1 root root 41136 Jan 14 2015 ./usr/bin/tree drwxr-xr-x 2 root root 0 Jan 14 2015 ./usr/share/doc/tree-1.5.3 -rw-r--r-- 1 root root 18009 Aug 13 2004 ./usr/share/doc/tree-1.5.3/LICENSE -rw-r--r-- 1 root root 4167 Oct 20 2009 ./usr/share/doc/tree-1.5.3/README -rw-r--r-- 1 root root 3375 Jan 14 2015 ./usr/share/man/man1/tree.1.gz 132 块
root@cenots6.8 /media/CentOS_6.8_Final/Packages # rpm2cpio tree-1.5.3-3.el6.x86_64.rpm | cpio -idv ~/ (释放包内文件到指定路径内) 132 块 root@cenots6.8 ~ # cp ~/usr/bin/tree /usr/bin/ root@cenots6.8 ~ # ls /usr/bin/tree /usr/bin/tree
升级详解:
rpm -U [install-options] PACKAGE_FILE
rpm -F [install-options] PACKAGE_FILE
-U:如果包存在则升级,不存在则安装
-F:升级
–oldpackage:降级为老版本
–force:强制升级
注意:1、不要对内核做升级操作,linux支持多版本内核并存,直接安装新版本内核即可
2、如果源程序包的配置文件安装后被修改,升级时,新版本的程序包提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供。
查询详解:
rpm -q [select-option][query-options]
[select-option]
-a:查询所有已经安装过的包,直接输入包名即可
root@cenots6.8 /var/lib/rpm # rpm -qa tree tree-1.5.3-3.el6.x86_64
-f file:查看指定指定的文件是由哪个程序包安装的
rpm -qf `which ifconfig`
-g:包组
-p:对于未安装的程序包执行查询操作,此时需要输入包的路径及文件名
root@cenots6.8 /var/lib/rpm # rpm -qpl /media/CentOS_6.l_Final/Packages/tree-1.5.3-3.el6.x86_64.rpm /usr/bin/tree /usr/share/doc/tree-1.5.3 /usr/share/doc/tree-1.5.3/LICENSE /usr/share/doc/tree-1.5.3/README /usr/share/man/man1/tree.1.gz
–whatprovides capability:查看指定的能力由哪个程序包提供
root@cenots6.8 ~ # rpm -q --whatprovides grep grep-2.20-3.el6_7.1.x86_64
–whatrequires capability:查询指定的能力被哪些包所依赖
root@cenots6.8 ~ # rpm -q --requires grep /bin/sh /bin/sh /sbin/install-info /sbin/install-info libc.so.6()(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.3.4)(64bit) libc.so.6(GLIBC_2.4)(64bit)
[query-option]
–changelog:查询rpm包的changlog日志
-l,–list:查询指定安装包所生成的文件有哪些
-i,–info: 查询安装包的信息,版本号,大小,所属的包组等。
-c,–configfiles:查询指定程序包提供的配置文件
-d,–docfiles:查询指定的程序包提供的帮助文档
–provides:列出指定程序包所提供的能力
root@cenots6.8 ~ # rpm -qa --provides grep bundled(gnulib) grep = 2.20-3.el6_7.1 grep(x86-64) = 2.20-3.el6_7.1
-R,–requires:查询自己依赖与哪些包
root@cenots6.8 ~ # rpm -qR tree libc.so.6()(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.3.4)(64bit
–scripts:查看程序包自带的脚本片段
卸载详解:
rpm -e [install-option] package(文件名即可)
–allmatches:卸载所有匹配指定名称的程序包的个版本
–nodeps:忽略依赖关系
–test:测试卸载,查看依赖关系
校验:
rpm -V bash 查看这个bash文件是否被修改过 (Va查询所有)
S file Size differs
M Mode differs (includes permissions and file type) 权限
5 digest (formerly MD5 sum) differs md5改变
D Device major/minor number mismatch 初次设备号不匹配
L readLink(2) path mismatch
U User ownership differs 属主改了
G Group ownership differs
T mTime differs 时间戳
P caPabilities differ
-
包校验:
包来源合法性验正及完整性验正:
完整性验正: SHA256
来源合法性验正: RSA
数字签名:加入我们自己制作一个rpm包,制作者第一步使用单项加密技术获取这个包的特征码,特征码是定长的,然后第二步,他会用自己的公钥去加密这段特征码,把特征码加密后附加到文件的后面。
使用者拿到包后首先验证其来源合法性,首先拿到制作者的公钥去解密特征码,如果能解密那么就是作者加密的,但是这个包的内容有没有改变查不到,然后我们用
同样的单项加密技术给这个包做计算也会计算出来一个特征码,解密出来也会有一个特征码,二者比较,如果数据没遍,则二者一样
公钥加密:
对称加密:加密、解密使用同一密钥;
非对称加密:密钥是成对儿的
public key: 公钥,公开所有人
secret key: 私钥, 不能公开
完整性验证:光盘上面的公钥
rpm –import /media/cdrom/RPM-GPG-KEY-Centos-7导入公钥
rpm -K package.rpm 手动验证
验证:
安装此组织签名的程序时,会自动执行验证。
手动验证:rpm -k packagefile
-
rpm数据库:
数据库重建:
/var/lib/rpm
rpm {–initdb|–rebuilddb}
initdb: 初始化
如果事先不存在数据库,则新建之,否则,不执行任何操作
rebuilddb:重建
无论当前存在与否,直接重新创建数据库
原创文章,作者:Naruto,如若转载,请注明出处:http://www.178linux.com/38495
评论列表(1条)
态度端正,rpm包管理工具中的查询选项需要区别开来,这是比较常用的,需要多加练习,熟练掌握。