欢迎各位兄弟 发布技术文章
这里的技术是共享的
yum 是依赖于rpm包的,必须要先有rpm,yum才能执行,
所以yum是rpm包的前端工具
rpm命令:
rpm:
数据库: /var/lib/rpm
rpmbuild:
安装,查询,卸载,升级,校验,数据库的重建,验证数据包等工作
md5码是验证软件包 没有被别人修改的,用md5的工具去生成md5码,与给我们的md5比较,看文件是否已经被修改,保证下载的软件包完整安全,未被人动手手脚
putty某些汉化版就是被人植入病毒,可以窃取你的putty的用户名和密码
所以我们要用绿色软件
rpm命名:
包:组成部分
主包:
bind-9.7.1-1.el5.i586.rpm
子包
bind-libs-9.7.1-1.el5.i586.rpm
bind-utils-9.7.1-1.el5.i586.rpm
包名格式:
name-version-release.arch.rpm
bind-major.minor.release-release.arch.rpm
主版本号:重大改造
次版本号:某个子功能发生重大变化
发行号:修正了部分bug,调整了一点功能
bind-9.7.1.tar.gz
编译做成了rpm包
rpm包:
二进制格式,别人已经编译成二进制格式了,装上去就可以直接运行了
源码格式,装上去之后,还得编译 (编译使得安装和维护比较麻烦,但在当前主机上编译,能更好的发挥硬件的性能)
(不作特殊说明,都是以二进制格式为例的)
rpm包作者下载源程序,编译配置完成后,制作成rpm包
第一个major.minor.release是源代码的开发者的发行号
第二个release是rpm包的制作者的发行号
bind-9.7.1-1.el5.i686.rpm
bind-9.7.1-1.el5.noarch.rpm (noarch,跟平台没关系 32位 或 64位都可以装的)
bind-9.7.1-1.ppc.rpm (这是PowerPc)
(el5指的是用在redhat5这个操作系统上的 或 el6 或 suse10等)
(跟平关无关的话 就不带 el5等字符了)
(i686 (即x86)是32位的平台)
(x64或x86_64就是64位的平台)
下载rpm安装的时候 要与软件平台,硬件平台匹配
rpm:
1, 安装:
rpm -i /PATH/TO/PACKAGE_FILE (-i 表示install 安装)
-h: 以# 井号显示进度,每个#表示2%;
(-h, --hash)
Print 50 hash marks as the package archive is unpacked. Use
with -v|--verbose for a nicer display.
-v: (--verbose)显示详细过程
-vv: 显示更详细过程
-vvv: 显示更更详细过程
通常用法 rpm -ivh /PATH/TO/PACKAGE_FILE
--nodeps: (no depends)忽略依赖关系(强行) (但是会导致装上去没法运行)
--replacepkgs:重新安装(替换安装包),替换原有的安装
--replacefiles:替换文件
--oldpackage:降级安装
--force: 强行安装 可以实现重装或降级 --replacepkgs,--replacefiles,--oldpackage
--test 不安装(看看这个软件能不能装上,有没有依赖关系)
2,查询
rpm --changelog 查看软件包的修改日志
rpm -qpi <rpm包名> --changelog |more
rpm --changelog -q <packagename>
rpm -q --changelog openssh | more
rpm -q PACKAGE_NAME 查询指定的包是否已安装 (包名 不是全名称 如 bind-9.7.1-1.el5.i686.rpm 那么PACKAGE_NAME 就是 bind) 查 (q就是查询 query)
rpm -qa:查询已安装的所有包 (a就是all 所有)
rpm -qi PACKAGE_NAME : 查询指定包的说明信息 (-i, --info 的意思)
rpm -ql PACKAGE_NAME : 查询指定包安装后生成的文件列表 (-l, --list List files in package 列出包中的文件的意思)
rpm -qc PACKAGE_NAME:查询指定包安装的配置文件 (c大约就是config的意思吧)
rpm -qd PACKAGE_NAME:查询指定包安装的帮助文件 (d大约就是document文档的意思吧)
rpm -q --scripts PACKAGE_NAME: 查询指定包中包含的脚本 (因为安装的时候,有时可能会执行一些脚本)
四类脚本 (安装前脚本,安装后脚本,卸载前脚本,卸载后脚本)
(安装前做的准备动作)(安装完成后收尾动作)(卸载前动作)(卸载后动作)
rpm -qf /path/to/somefile: 查询指定的文件是由哪个rpm包安装生成的
如果某rpm尚未安装,我们需查询其说明信息,安装以后会生成的文件
rpm -qpi /PATH/TO/PACKAGE_FILE (查询尚未安装的软件包) (p表示package软件包吧,还是pre 未安装的意思,应该是package吧)(PACKAGE_FILE 是尚未安装的软件包的路径)
rpm -qpl /PATH/TO/PACKAGE_FILE
rpm -qpc /PATH/TO/PACKAGE_FILE (用得少)
rpm -qpd /PATH/TO/PACKAGE_FILE (用得少)
3,升级
rpm -Uvh /PATH/TO/NEW_PACKAGE_FILE 如果装有老版本的,则升级,否则,则安装(既能升级,又能安装)(-U|--upgrade 汉字翻译成升级 )
rpm -Fvh /PATH/TO/NEW_PACKAGE_FILE 如果装有老版本的,则升级,否则,则退出(仅能升级,不能安装) (-F|--freshen 汉字翻译成新鲜的 )
--oldpackage 降级(rpm -Uvh --oldpackage /PATH/TO/NEW_PACKAGE_FILE) (虽然叫升级 ,但升为低版本的了)
4,卸载
rpm -e PACKAGE_NAME (只要包名,不要全名全称) ({-e|--erase} 抹去;清除;擦掉 就是卸载 )(如果被依赖是不允许卸载的,) (如果非要卸载的话,依赖就不能用了吧)
--nodeps
没有信息就是最好的信息
5,校验 (校验可以检查文件是不是被非法改过了)
rpm -V PACKAGE_NAME (就是verify校验)
6,重做数据库 在这个 /var/lib/rpm 目录下
rpm
--rebuilddb:重建数据库 坏了,重做 ; 一定会重新建立,覆盖原来的
--initdb:初始化数据库 完全从头开始初始化重做;;没有才建立,有就不用建立
7,检验来源合法性,及软件完整性
加密类型:
对称:加密解密使用同一个密码
公钥:一对密钥,公钥(可以公开的),私钥:(私密人,私人持有的)(公钥加密,私钥解密,,,,私钥加密,公钥解密) (公钥是隐藏于私钥中的,可以从私钥中提取出来,并公开出去)
(公钥加密是为了加密,私钥加密是为了验证的)
(公钥加密速度慢) (加密一般不是加密数据本身)(一般是加密 md5吧)
单向:
# ls /etc/pik/rpm-gpg
RPM-GPG-KEY-redhat-release
rpm -K /APT/TO/PACKAGE_FILE 验证红帽文件 (-K checksig)
dsa,gpg:验证来源合法性,也即验证签名 --nosignature 略过此项
sha1,md5:验证软件包完整性 --nodigest 略过此项
# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release 导入密钥文件
(导入这个密钥只能验证红帽系列的rpm,不是红帽做的验证不来,因为它签名的时候不是红帽签的)
# man rpm
uname 显示电脑以及操作系统的相关信息。
[root@ebs-22618 ~]# uname -r
2.6.32-696.el6.x86_64
[root@ebs-22618 ~]# uname -a (64 或 86_64表示 64位, i386 i586 i686 表示32位)
Linux ebs-22618 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@ebs-22618 ~]#
# man rpm
-v 显示详细信息
-vv 显示更详细信息
-vvv 显示更更详细信息
# lftp 172.16.0.1 (lftp 进入到交互模式)
Server Cluster ClusterStorage 一般就是 软件包存放的目录
get 下载到本地 (mget 文件名1 文件名2) (mget是下载多个文件)
bye 退出 lftp
# ls
# rmp -ivh zsh-4.2.6-6.el5.i386.rpm
# lftp 172.16.0.1
# ls
# rpm -ivh php53-mysql-5.3.3-5.el5.i386.rpm (error,因为有依赖关系,而依赖的不存在,所以不能安装)
# man rpm
--nodeps 忽略依赖关系
--replacepkgs:重新安装,替换原有的安装
--replacefiles:替换文件
--oldpackage:降级安装
--force: 强行安装--replacepkgs,--replacefiles,--oldpackage
# rmp -ivh zsh-4.2.6-6.el5.i386.rpm
# rmp -ivh --replacepkge zsh-4.2.6-6.el5.i386.rpm (--replacepkge可以改为 --force)
# rmp -ivvh --replacepkge zsh-4.2.6-6.el5.i386.rpm (vv更详细)
下面是更详细的信息
# man rpm
# rpm -q zsh-4.2.6-6.el5.i386.rpm (全路径查不到)
# rpm -q zsh (只有名字才查到) (查当前目录,如果没有的话,就是查系统的)
# rpm -q z* (这个星是通配符,当作包含所有了,包含文件的所有,所以也查不到) (
此时表示查的是当前目录下的文件)
(如果 当前目录下 没有z开头的文件,*就不是通配符了)
# rpm -qa z* (此时是所有的不仅仅指的是当前目录下的)
(好像各个版本不一样,也的版本 *指通配符,也有不是仅指*字符)
(这里马哥的linux(redhat5)应该是指单个*字符)
# rpm -qa 查询所有的安装包
# rpm -qa | grep "^z" 查询所有以z开头的安装包
#rpm -qi zsh
Relocations: (not relocatable)【是否支持用户自定义安装路径】
# rpm -qi nfs-utils-lib
# rpm -ql zsh
# rpm -qf /etc/inittab
# rpm -qf /bin/ls
# rpm -qc zsh
# rpm -q --scripts zsh
(postinstall 表示安装后要执行的脚本)
(preuninstall 表示卸载前要执行的脚本)
(postuninstall 表示卸载后要执行的脚本)
#rpm -qpi
# rpm -q httpd-devel
# rpm -qpi httpd-devel-2.2.3-63.el5.i386.rpm
# rpm -qpl httpd-devel-2.2.3-63.el5.i386.rpm
# rpm -q nano
# lftps
# ls
# rpm -q nano
# rpm -ivh nano-1.3.12-1.1.1.gls.i386.rpm
# rpm -ivh --force nano-1.3.12-1.1.1.gls.i386.rpm (强行装是可以的,这里没有敲回车)
# rpm -Uvh nano-1.3.12-1.1.1.gls.i386.rpm (-Uvh或者-Fvh都可以)
(升级可能导致冲突)(所以此时要降级)
# lftp
# ls
# man rpm
# rpm -ivh --oldpackage nano-1.3.12-1.1.1.gls.i386.rpm (这个方式 降级不行)
# rpm -Uvh --oldpackage nano-1.3.12-1.1.1.gls.i386.rpm (这个方式 降级可以)
# rpm -q nano
#rpm -e zsh (卸载完了,没有任何信息提示出来)(没有信息就是最好的信息)
# rmp -ivh zsh-4.2.6-6.el5.i386.rpm
# rpm -V zsh (没有任何信息 就是没有任何问题)
# rpm -ql
# rm /usr/share/zsh/4.2.6/functions/zfls
# vim /usr/share/zsh/4.2.6/functions/zkbd (随便修改一下)
# rpm -V zsh (此时看到校验发生问题)
# man rpm (S.5....T的意义)
S file Size differs
M Mode differs (includes permissions and file type)
5 MD5 sum differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
# ls /etc/pki
# ls /etc/pki/rpm-gpg
# rpm -K zsh-4.2.6-6.el5.i386.rpm (此时验证失败了)
# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
# rpm -K zsh-4.2.6-6.el5.i386.rpm (此时验证成功了) (sha1 md5是验证完整性的)(dsa gpg是验证来源合法性的,验证签名)
# rpm -K zsh-4.2.6-6.el5.i386.rpm (不验证完整性,只验证签名)
# ls /var/lib/rpm
name 软件包的名字
package 软件包的类名
Group 组
Filemd5s 文件的md5码
Pubkeys 密钥信息
__db.000 锁文件
__db.001 锁文件
__db.002 锁文件
__db.003 锁文件
# man rpm