欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

马哥 12_02 _Linux软件管理之二 rpm 有大用

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:初始化数据库 完全从头开始初始化重做;;没有才建立,有就不用建立

image.png



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,不是红帽做的验证不来,因为它签名的时候不是红帽签的)




image.png














# man rpm 


image.png




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

image.png

image.png

-v 显示详细信息

-vv 显示更详细信息

-vvv 显示更更详细信息

image.png




# lftp 172.16.0.1   (lftp 进入到交互模式)


image.png

image.png

image.png

Server Cluster ClusterStorage 一般就是 软件包存放的目录


image.png

image.png

image.png

 get 下载到本地 (mget 文件名1 文件名2) (mget是下载多个文件)


image.png  bye 退出 lftp


# ls 

image.png


# rmp -ivh zsh-4.2.6-6.el5.i386.rpm

image.png



# lftp 172.16.0.1

image.png

image.png


image.png


# ls 

image.png




# rpm -ivh php53-mysql-5.3.3-5.el5.i386.rpm           (error,因为有依赖关系,而依赖的不存在,所以不能安装)

image.png



# man rpm 

image.png

--nodeps 忽略依赖关系

image.png

image.png

--replacepkgs:重新安装,替换原有的安装

--replacefiles:替换文件

--oldpackage:降级安装

--force:   强行安装--replacepkgs,--replacefiles,--oldpackage



# rmp -ivh zsh-4.2.6-6.el5.i386.rpm

image.png

# rmp -ivh --replacepkge zsh-4.2.6-6.el5.i386.rpm  (--replacepkge可以改为 --force)

image.png



# rmp -ivvh --replacepkge zsh-4.2.6-6.el5.i386.rpm   (vv更详细)

image.png

下面是更详细的信息

image.png

# man rpm

image.png



# rpm -q  zsh-4.2.6-6.el5.i386.rpm   (全路径查不到)


# rpm -q zsh  (只有名字才查到) (查当前目录,如果没有的话,就是查系统的)

image.png

# rpm -q z*  (这个星是通配符,当作包含所有了,包含文件的所有,所以也查不到) (

此时表示查的是当前目录下的文件)

(如果 当前目录下 没有z开头的文件,*就不是通配符了)

image.png


# rpm -qa z*  (此时是所有的不仅仅指的是当前目录下的)

(好像各个版本不一样,也的版本 *指通配符,也有不是仅指*字符)

(这里马哥的linux(redhat5)应该是指单个*字符)

image.png


# rpm -qa 查询所有的安装包

image.png

image.png


# rpm -qa | grep "^z"  查询所有以z开头的安装包

image.png



#rpm -qi zsh


 Relocations: (not relocatable)【是否支持用户自定义安装路径】

image.png



# rpm -qi nfs-utils-lib

image.png


# rpm -ql zsh

image.png

image.png


image.png

image.png



# rpm -qf /etc/inittab

image.png

# rpm -qf /bin/ls

image.png


# rpm -qc zsh

image.png


# rpm -q --scripts zsh

(postinstall 表示安装后要执行的脚本)

(preuninstall 表示卸载前要执行的脚本)

(postuninstall 表示卸载后要执行的脚本)

image.png




#rpm -qpi 


image.png

image.png


image.png


image.png

image.png

# rpm -q httpd-devel

image.png


# rpm -qpi httpd-devel-2.2.3-63.el5.i386.rpm

image.png

# rpm -qpl httpd-devel-2.2.3-63.el5.i386.rpm

image.png


# rpm -q nano

# lftps

image.png

image.png

image.png

# ls

image.png

# rpm -q nano

image.png


# rpm -ivh nano-1.3.12-1.1.1.gls.i386.rpm

image.png

# rpm -ivh --force nano-1.3.12-1.1.1.gls.i386.rpm (强行装是可以的,这里没有敲回车)

image.png


# rpm -Uvh nano-1.3.12-1.1.1.gls.i386.rpm (-Uvh或者-Fvh都可以)

image.png

(升级可能导致冲突)(所以此时要降级)


# lftp

image.png

image.png

# ls 

image.png

# man rpm 

image.png



# rpm -ivh --oldpackage nano-1.3.12-1.1.1.gls.i386.rpm (这个方式 降级不行)

image.png


# rpm -Uvh --oldpackage nano-1.3.12-1.1.1.gls.i386.rpm (这个方式 降级可以)

image.png


# rpm -q nano

image.png


#rpm -e zsh   (卸载完了,没有任何信息提示出来)(没有信息就是最好的信息)

image.png



# rmp -ivh zsh-4.2.6-6.el5.i386.rpm

image.png



# rpm -V zsh (没有任何信息  就是没有任何问题)

image.png


# rpm -ql 

image.png

image.png


# rm /usr/share/zsh/4.2.6/functions/zfls

image.png


# vim /usr/share/zsh/4.2.6/functions/zkbd (随便修改一下)

image.png

# rpm -V zsh (此时看到校验发生问题)

image.png


# man rpm (S.5....T的意义)

image.png

       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

image.png

# rpm -K  zsh-4.2.6-6.el5.i386.rpm  (此时验证失败了)

image.png


# 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是验证来源合法性的,验证签名)

image.png

# rpm -K  zsh-4.2.6-6.el5.i386.rpm  (不验证完整性,只验证签名)

image.png


# ls /var/lib/rpm

image.png

name 软件包的名字

package  软件包的类名

Group 组

Filemd5s 文件的md5码

Pubkeys 密钥信息

__db.000 锁文件

__db.001 锁文件

__db.002 锁文件

__db.003 锁文件



# man rpm 

image.png

普通分类: