`
被触发
  • 浏览: 34504 次
文章分类
社区版块
存档分类
最新评论

Linux的程序包管理器RPM

 
阅读更多
在早期我们使用源代码的方式来安装软件时,都需要先把源程序代码编译成可执行的二进制安装程序,然后进行安装。这就意味着每次安装软件都需要经过预处理-->编译-->汇编-->链接-->生成安装文件--> 安装,这个复杂而艰辛的过程。为简化安装步骤,便于广大用户的安装部署程序,程序提供商就在特定的系统上面编译好相关程序的安装文件并进行打包,提供给大家下载,我们只需要根据自己的系统去下载相应的安装包进行安装即可,其类似 Windows 的安装方式,由程序开发者直接在已知的系统上面编译好,再将该程序直接给用户来安装,如此而已。但是,程序包该怎么管理呢,这就是我们程序包管理器的事啦!
什么是程序包管理器
用于管理Linux 下软件包的软件,其主要功能为:将编译好的程序打包成一个文件或有限的几个文件,可用于实现安装、卸载、升级、查询等功能。
程序包管理器的两大主流
dpkg: 最早是由 Debian Linux 社群所开发出来的, 只要是衍生亍 Debian 的其他 Linux distributions 大多使用 dpkg 这个机制来管理软件的, 包括B2D, Ubuntu 等等,其前端工具有apt-get。
RPM: 最早是由 Red Hat 这家公司开发出来的,后来实在太好用,因此很多distributions 就使用其来作为软件安装的管理方式。包括 Fedora, CentOS, SUSE 等等,其前端工具有yum。
程序包的组成格式与存放路径:
1、二进制程序
主要存放的路径:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin, /usr/local/APP/{bin,sbin}
注意:有些特殊的应用程序放置于libexec目录中;有些第三方应用默认安装于/opt目录。
2、库文件(开发库、运行库)
主要存放的路径:/lib64, /usr/lib64, /usr/local/lib64, /usr/local/APP/lib
3、配置文件
主要存放的路径:/etc, /usr/local/APP/etc或conf目录
4、帮助文件
主要存放的路径:/usr/share/man, /usr/local/share/man, /usr/local/APP/man
RPM程序包管理器使用详解
RPM包的命名格式:
Linux系统之程序包管理器-RPM
但对于一个程序来说,其可能具有很多功能,其中有些是常用功能,有些是特殊功能,有些是二次开发相关的功能,如果把所有的功能打包在一块,无疑程序包会增大很多,对一些普通用户无需使用的功能都需一并下载安装,无形间就造成了资源的浪费,特此在对程序包的打包就衍生出了分包机制,一般把程序分包成主包与子包。例如一个bash程序有20个功能:常用功能有10个,特殊A:4个,特殊B:3个,二次开发相关功能:3个,那么包的命名方式如下:
核心包,主包:命名与源程序一致
bash-4.2.3-3.centos7.x86_64.rpm
子包:
bash-a-4.2.3-3.centos7.x86_64.rpm
bash-b-4.2.3-3.centos7.x86_64.rpm
bash-devel-4.2.3-3.centos7.x86_64.rpm

RPM-安装程序包:
命令格式: rpm [option] /path/to/package_file...
常用选项说明:
        -i:安装程序;
        -v:显示安装执行过程;
      -vv:详细显示安装执行过程;
      -vvv:更详细的显示安装执行过程;
      -h:用#来标记安装进度
        常用组合选项:-ivh
        --test: 仅作测试,没有真正执行安装
        --nodeps:忽略依赖关系,强制安装,能安装上,但有可能无法运行
        --replacepkgs:重新安装,如果原有配置文件作了修改,很有可能不执行替换,而是将应该安装生成的配置文件重命名为 .rpmnew
[root@CentOS6 Packages]# rpm -ivh zsh-4.3.10-7.el6.i686.rpm --test
Preparing...                ########################################### [100%]
[root@CentOS6 Packages]# rpm -ivh zsh-4.3.10-7.el6.i686.rpm 
Preparing...                ########################################### [100%]
1:zsh                    ########################################### [100%]
[注意]:该命令后面接的是RPM包文件,可以用空格做分割同时安装多个程序,如电脑可以上网的话,也可以直接指定网络上的RPM包,进行安装。
RPM-卸载程序包:
命令格式:rpm [option] package_name
常用选项说明:-e: 卸载程序
              --nodeps:忽略依赖关系,强行卸载,其他依赖于此包的程序可能无法正常运行
[root@CentOS6 Packages]# rpm -e zsh
warning: /etc/zshrc saved as /etc/zshrc.rpmsave  #对/etc/zshrc做过修改,提示文件不会被删会被保存为/etc/zshrc.rpmsave
[root@CentOS6 Packages]# rpm -e httpd  #卸载httpd,提示有其他程序依赖于该程序,无法卸载,如需卸载先卸载相依赖的程序
error: Failed dependencies: 
httpd >= 2.2.0 is needed by (installed) gnome-user-share-2.28.2-3.el6.i686
[root@CentOS6 Packages]# rpm -e httpd --nodeps #忽略依赖关系,强行卸载
[root@CentOS6 Packages]#
[注意]:如果包的配置文件安装后曾被改动过,卸载时,此文件将不会卸载,而是被重命名并保留,例如
warning: /etc/zshrc saved as /etc/zshrc.rpmsave

RPM-升级程序包
命令格式:rrpm [-Uvh | -Fvh] /path/to/package_file
常用选项说明:-Uvh: 升级或安装,后面的程序安装此电脑已安装则进行升级,如没有安装则现在安装;
              -Fvh: 升级,只对电脑上已安装的程序进行升级,如没有安装则不进行安装;
            --force:强制升级
[注意]:为了保证系统的正常运行,不要对内核进行升级操作,而应该对内核进行安装,系统允许多个内核共存。

RPM-查询操作
命令格式:rpm [option] package_name|file
常用选项说明:
-q: 查询某包是否安装,可以一次查询多个,彼此间用空格隔离;
[root@CentOS6 cd]# rpm -q zsh
zsh-4.3.10-7.el6.i686
-qa: 查询所有已经安装的包,可以通过管道按条件进行过滤(rpm -qa |  grep 'PATTERN')
[root@CentOS6 cd]# rpm -qa
libaio-0.3.107-10.el6.i686
perl-URI-1.40-2.el6.noarch
kbd-1.15-11.el6.i686
gnome-speech-0.4.25-3.1.el6.i686
cas-0.15-1.el6.1.noarch
tzdata-2013g-1.el6.noarch
libsss_autofs-1.9.2-129.el6.i686
.........
[root@CentOS6 cd]# rpm -qa | grep "zs.*"
zsh-4.3.10-7.el6.i686
-qi: 查询包的描述信息(只能查询已经安装的包的描述信息);
[root@CentOS6 cd]# rpm -qi zsh
Name        : zsh                          Relocations: (not relocatable)
Version    : 4.3.10                            Vendor: CentOS
Release    : 7.el6                        Build Date: Sun 24 Nov 2013 12:37:44 PM EST
Install Date: Tue 21 Apr 2015 11:29:57 AM EDT      Build Host: c6b9.bsys.dev.centos.org
Group      : System Environment/Shells    Source RPM: zsh-4.3.10-7.el6.src.rpm
Size        : 4777026                          License: BSD
Signature  : RSA/SHA1, Sun 24 Nov 2013 02:30:40 PM EST, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL        : http://zsh.sunsite.dk/
Summary    : A powerful interactive shell
Description :
The zsh shell is a command interpreter usable as an interactive login
shell and as a shell script command processor.  Zsh resembles the ksh
shell (the Korn shell), but includes many enhancements.  Zsh supports
command line editing, built-in spelling correction, programmable
command completion, shell functions (with autoloading), a history
mechanism, and more.
[root@CentOS6 cd]#
-ql: 查询某包安装生成了哪些文件(所有);
-qc: 查询某包安装生成了哪些配置文件;
-qd: 查询某包安装生成了哪些帮助文件;
--q --scripts package_name: 查询程序包的相关脚本;
  脚本有四类:
      preinstall:安装前脚本,包安装之前就需安装的脚步
      postinstall: 安装后脚本
      preuninstall: 卸载前脚本
[root@CentOS6 cd]# rpm -qc zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc
[root@CentOS6 cd]# rpm -qd zsh
/usr/share/doc/zsh-4.3.10/BUGS
.....
/usr/share/man/man1/zshall.1.gz
....
[root@CentOS6 cd]# rpm -q --scripts zsh
postinstall scriptlet (using /bin/sh):
if [ ! -f /etc/shells ] ; then
.....
[root@CentOS6 cd]#

查询没有安装的包的相关信息,只需要在选项里加入-p即可,如下:
-qpi  包的描述信息
-qpl  包安装会生成的文件
-qpc  包安装会生成的配置文件
-qpd  包安装会生成的帮助文件
查询某文件是由哪个包安装生成的:rpm -qf /path/to/some_file
[root@CentOS6 cd]# rpm -qf /bin/vi 
vim-minimal-7.2.411-1.8.el6.i686  #显示/bin/vi文件是由该安装包生成
[root@CentOS6 cd]#
RPM-校验
用于检查包安装生成的文件属性是否发生变化
命令格式:rpm [option] package_name|file
常用选项说明:
-V :后面加的是程序名称,若该程序属有的文件发生改变就会显示;
-Va :显示目前系统上面所有可能被修改过的文件;
-Vp :后面加的是文件名,显示该程序内可能被更改过的文件;
-Vf :后面加的是文件名,显示某个文件是否被修改过。
[root@CentOS6 cd]# rpm -V zsh
S.5....T.  c /etc/zshrc
[root@CentOS6 cd]#
对应属性位说明:
S file Size differs 表示文件大小发生改变
M Mode differs (includes permissions and file type)  文件的权限或类型被修改
5 digest (formerly 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    文件的修改时间发生改变
P caPabilities differ 包的能力发生改变
【注意】在文件属性发生某项属性变化时,对应属性位的标识才会显示,若属性无变化,则显示为.
RPM包的校验与数字签名说明:
RPM包的校验主要有来源合法性验证与包的完整性验证。
数字签名:包的制作者使用单向加密提取原始数据的特征码,而后使用自己的私钥加密这段特性码,附加原始数据后面。
验正过程:
前提:必须有可靠机制获取到包制作者的公钥;
1、使用制作者的公钥解密加密的特征码,能解密则意味着来源合法;
2、使用与制作者同样的意向加密算法提取原始数据的特征码,并与解密出来的特征作比对,相同,则意味着完整性没问题;
rpm包来源合法性及完整性检验:
在当前系统上导入包的制作者的公钥:
rpm --import /path/to/key_file
显示所有已经导入的gpg格式的公钥:
rpm -qa gpg-pubkey*       
[root@CentOS6 cd]# rpm -qa gpg-pubkey*
gpg-pubkey-c105b9de-4e0fd3a3
[root@CentOS6 cd]#
显示密钥的详细信息
rpm -qi gpg-pubkey-NAME       
[root@CentOS6 cd]# rpm -qi gpg-pubkey-c105b9de-4e0fd3a3
Name        : gpg-pubkey                  Relocations: (not relocatable)
Version    : c105b9de                          Vendor: (none)
......
-----END PGP PUBLIC KEY BLOCK-----
【注意】安装过程中会自动用已经导入的的公钥,对程序包进行检验,一般无需进行手动校验。
手动检查:
rpm {-K|--checksig} [--nosignature] [--nodigest] PACKAGE_FILE
选项说明:
-K :等同于 --checksig ,进行检查并显示结果;
--nodigest:不检查包完整性;
--nosignature:不检查来源合法性。
[root@CentOS6 cd]# cd Packages/
[root@CentOS6 Packages]# rpm -K zsh-4.3.10-7.el6.i686.rpm 
zsh-4.3.10-7.el6.i686.rpm: rsa sha1 (md5) pgp md5 OK
[root@CentOS6 Packages]# rpm --checksig zsh-4.3.10-7.el6.i686.rpm 
zsh-4.3.10-7.el6.i686.rpm: rsa sha1 (md5) pgp md5 OK
[root@CentOS6 Packages]# rpm -K --nodigest zsh-4.3.10-7.el6.i686.rpm 
zsh-4.3.10-7.el6.i686.rpm: rsa (md5) pgp OK
[root@CentOS6 Packages]# rpm -K --nosignature zsh-4.3.10-7.el6.i686.rpm 
zsh-4.3.10-7.el6.i686.rpm: sha1 md5 OK

RPM- 数据库重建:
数据库目录:/var/lib/rpm
重建数据库:
rpm --initdb:初始化
如果事先没有库,会新建一个;如果有,则不新建;
rpm --rebuilddb : 重建
直接重建,覆盖原有的数据库
分享到:
评论

相关推荐

    linuxRPM包管理及linux for QQ的安装过程

    LinuxRPM包管理命令,以及linux for QQ的安装为例进行的讲解(配图)。

    linux zip unzip RPM安装包,亲测可用.rar

    linux zip unzip RPM安装包,亲测可用

    linux之程序包管理

    Linux程序包管理 API: Application Program Interface ABI: Application Binary Interface 程序包管理器: 源代码-&gt;目标二进制格式(二进制程序、库文件、配置文件、帮助文件) -&gt;组织成为一个或有限几个“包”文件 ...

    xdm远程连接linux所需的RPM包

    xdm远程连接linux所需的RPM包

    Linux中CodeBlocks开发环境全套RPM包

    Linux环境下的CodeBlocks开发工具,全套。 在OpenSUSE Linux下测试通过。...如果还需要其他RPM包,请到相应的Linux官方网站上寻找配套程序。 注意:此工具只是IDE,安装之前确保系统中含有GCC和GDB。

    实验七 linux软件包管理.doc

    1执行rpm –qa|less命令,查询了解当前系统所安装的软件包程序,查看完后用q命令退出less。 2.查询显示当前所安装的软件包中,包含tel关键字的软件包。 3.查询已安装的telnet-0.17-25软件包所包含的文件及其安装位置...

    Linux上安装和卸载rpm软件包的方法

    Linux上安装和卸载rpm软件包的方法如下所示: 1.如何安装rpm软件包 rmp软件包的安装可以使用程序rpm来完成。执行下面的命令 rpm -i your-package.rpm 其中your-package.rpm是你要安装的rpm包的文件名,一般置于当前...

    JDK8版本jdk-8u202-linux-x64(rpm).zip

    jdk-8u202-linux-x64.rpm,Oracle-jdk8,JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

    jdk-8u162-linux-x64.rpm

    JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。

    jdk-8u261-linux-x64.rpm

    JDK全称Java SE Development kit(JDK),即java标准版开发包,是Oracle提供的一套用于开发java应用程序的开发包,它提供编译,运行java程序所需要的各种工具和资源,包括java编译器,java运行时环境,以及常用的java...

    JDK8版本jdk-8u202-linux-i586(rpm).zip

    jdk-8u202-linux-i586.rpm,Oracle-jdk8,JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

    JDK7版本jdk-7u80-linux-i586(rpm).zip

    Oracle-jdk7,JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

    Linux32位下安装Oracle所需程序包2

    此rar包有以下文件: gcc-c++-4.1.1-52.el5.i386.rpm glibc-2.5-12.i386.rpm glibc-devel-2.5-12.i386.rpm glibc-headers-2.5-12.i386.rpm libaio-0.3.106-3.2.i386.rpm libaio-devel-0.3.106-3.2.i386.rpm libgcc-...

    linuxptp-2.0-5.el8_4.1.x86_64.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    oracle10g在linux安装oracleasmlib程序包集

    包含以下程序包: compat-libcwait-2.1-1.i386.rpm compat-libstdc++-egcs-1.1.2-1.i386.rpm compat-oracle-el5-1.0-5.i386.rpm openmotif21-2.1.30-11.EL5.i386.rpm openmotif21-debuginfo-2.1.30-11.EL5.i386.rpm ...

    Linux程序设计 第4版.haozip01

    Linux程序设计 分卷文件共有以下2个: Linux程序设计 第4版.haozip01.zip Linux程序设计 第4版.haozip02.zip 基本信息 原书名: Beginning Linux Programming 原出版社: Wrox 作者: (英)Neil Matthew Richard ...

    Ansible-2.9.15-el7 rpm离线安装包

    ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。内网环境下,yum不能用,于是就想离线安装,准备了这些包,此rpm仅限于...

    基于ipkg包管理程序嵌入式Linux的构建与维护.pdf

    基于ipkg包管理程序嵌入式Linux的构建与维护.pdf

    Linux程序设计 第4版.haozip02

    Linux程序设计 分卷文件共有以下2个: Linux程序设计 第4版.haozip01.zip Linux程序设计 第4版.haozip02.zip 基本信息 原书名: Beginning Linux Programming 原出版社: Wrox 作者: (英)Neil Matthew Richard ...

    JDK6版本jdk-6u45-linux-x64-rpm(bin).zip

    Oracle-jdk,JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Global site tag (gtag.js) - Google Analytics