RPM(RedHat Package Manager)

RPM(RedHat Package Manager)

RPM安装包管理器作为redhat开发的用于在互联网或者是cd上进行下载包安装和管理,非常好用的。在CentOS上来说,它通常生成以.rpm结尾的文件。

通常这些程序包由下列四部分组成

part1、一些二进制格式的程序(这是指编译完成的)

它们在CentOS5、6等环境下通常在/bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin等目录下,还有一些第三方的二进制应用也安装在/opt下。其实对于RPM包管理我们也可以自己创建一个目录,比如说在/usr/local/你要安装的程序名字/bin或者sbin

part2、库文件! (这些库文件没有办法直接运行,只能靠其他程序进行调用它们来贡献力量)

这些库文件通常在linux下是以.so文件结尾的。库文件从编译角度上来分为两种。

1.静态编译的库文件,编译后将所有的代码、函数都嵌入到程序中。

2.动态编译的库文件,这些动态链接库是程序运行时加载的库。

在CentOS为例,它们在/lib64(我这里是64位主机)若是32位主机则是/lib或/usr/lib64 /usr/local/lib64 /usr/local/你要安装的程序名字/lib64下

part3、配置文件

这些文件通常记录RPM程序包的配置信息,它们在CentOS环境下通常在/etc 或者/usr/local/你要安装的程序名字/etc or /conf

part4、帮助文件

这些帮助文件记录RPM程序的帮助信息,它们在CentOS环境下通常在/usr/share/man或者是/usr/local/share/man下。

这里告诉大家一个查看命令的库依赖关系的命令

ldd

ldd [OPTION]... FILE...

选项有多个,后面的文件也可以接几个。如

[[email protected] lib64]# ldd /bin/ls /bin/grep
    /bin/ls:
    linux-vdso.so.1 =>  (0x00007fff907ff000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003842a00000)
    librt.so.1 => /lib64/librt.so.1 (0x0000003841a00000)
    libcap.so.2 => /lib64/libcap.so.2 (0x0000003844a00000)
    libacl.so.1 => /lib64/libacl.so.1 (0x000000384be00000)
    libc.so.6 => /lib64/libc.so.6 (0x0000003841200000)
    libdl.so.2 => /lib64/libdl.so.2 (0x0000003840e00000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003840a00000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003841600000)
    libattr.so.1 => /lib64/libattr.so.1 (0x0000003851200000)
    /bin/grep:
    linux-vdso.so.1 =>  (0x00007fff12308000)
    libpcre.so.0 => /lib64/libpcre.so.0 (0x0000003474000000)
    libc.so.6 => /lib64/libc.so.6 (0x0000003841200000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003840a00000)

大家发现没有这里有一个linux-vdso.so.1的库文件,它并没有显示后面有任何链接的库文件,但是几乎哪个命令都会出现它,它其实是链接其他库文件的库文件。大家可以使用这个命令,查看各个库文件之间的依赖关系。

而RPM包里面的程序是有依赖关系的,这个只能借助yum,它的前端工具自行消除这些依赖关系。所谓依赖关系,就是在你安装A.rpm的时候,提醒你还要安装B.rpm才可以,反反复复直至你安装完这个程序,假如你打算安装一个几百K的小程序时候,你发现其实没有你想那么简单,还要安装这个,那个。最后费时费力的安装完成以后发现十几M。

下面让我们来看看rpm包什么样子

前提:本人是在CentOS6.5环境下,把系统光盘挂载到/media/cdrom

[[email protected] cdrom]# ll
    total 682

-r--r--r-- 2 root root     14 Nov 29  2013 CentOS_BuildTag
dr-xr-xr-x 3 root root   2048 Nov 29  2013 EFI
-r--r--r-- 2 root root    212 Nov 28  2013 EULA
-r--r--r-- 2 root root  18009 Nov 28  2013 GPL
dr-xr-xr-x 3 root root   2048 Nov 29  2013 images
dr-xr-xr-x 2 root root   2048 Nov 29  2013 isolinux
dr-xr-xr-x 2 root root 655360 Nov 29  2013 Packages
-r--r--r-- 2 root root   1354 Nov 28  2013 RELEASE-NOTES-en-US.html
dr-xr-xr-x 2 root root   4096 Nov 29  2013 repodata
-r--r--r-- 2 root root   1706 Nov 28  2013 RPM-GPG-KEY-CentOS-6
-r--r--r-- 2 root root   1730 Nov 28  2013 RPM-GPG-KEY-CentOS-Debug-6
-r--r--r-- 2 root root   1730 Nov 28  2013 RPM-GPG-KEY-CentOS-Security-6
-r--r--r-- 2 root root   1734 Nov 28  2013 RPM-GPG-KEY-CentOS-Testing-6
-r--r--r-- 1 root root   3380 Nov 29  2013 TRANS.TBL

大家主要看标红的Packages的安装包目录,这里存放着系统程序安装所需要的安装包。让我们cd到该目录下,查看。

-r--r--r-- 2 root root    52300 Mar 22  2013 qt-sqlite-4.6.2-26.el6_4.i686.rpm
-r--r--r-- 2 root root    52192 Mar 22  2013 qt-sqlite-4.6.2-26.el6_4.x86_64.rpm
-r--r--r-- 2 root root 12866892 Mar 22  2013 qt-x11-4.6.2-26.el6_4.i686.rpm
-r--r--r-- 2 root root 12704556 Mar 22  2013 qt-x11-4.6.2-26.el6_4.x86_64.rpm
-r--r--r-- 2 root root  1109204 Sep 13  2012 quagga-0.99.15-7.el6_3.2.x86_64.rpm
-r--r--r-- 2 root root   205420 Nov 25  2013 quota-3.17-20.el6.x86_64.rpm
-r--r--r-- 2 root root    76828 Jul  3  2011 radvd-1.6-1.el6.x86_64.rpm
-r--r--r-- 2 root root   178316 Jul  3  2011 rasqal-0.9.15-6.1.el6.i686.rpm
-r--r--r-- 2 root root   176872 Jul  3  2011 rasqal-0.9.15-6.1.el6.x86_64.rpm
-r--r--r-- 2 root root   177564 Jul  3  2011 rcs-5.7-37.el6.x86_64.rpm
-r--r--r-- 2 root root    19052 Jul  3  2011 rdate-1.4-16.el6.x86_64.rpm

........

下面会列出很多,这里篇幅有限,不再一一列举

这里我们随便拿一个安装包举例子吧

比如说这个 radvd-1.6-1.el6.x86_64.rpm

它的组成格式是radvd是程序包名字,1.6是radvd源代码的发行号,后面的-1.是radvd这个RPM程序包自身的发行号。后面的el6是指RHEL,这个行业版本的简称。el6是指RHEL下的6.x的系列发行号。x86_64.指的是在x86_64这个硬件平台上。当然有些包会显示noarch,表示没有硬件平台需要虚拟机支持的。

而我们获取RPM包的途径是多种多样的,这里我用的发行版的光盘镜像。下面列举几个常用途径供大家参考

1、某些国内知名的站点服务器

http://mirrors.163.com
    http://mirrors.sohu.com

2、该程序包的官网上会贡献出rpm包或者是源代码写的rpm包

3、很多第三方机构或个人公布的rpm包

如 http://rpmfind.net
   http://rpm.pbone.net

而网上这么多rpm包,难免良莠不齐。为了避免有些不怀好意的篡改rpm的合法性和完整性。建议朋友们通常要验证一下,以我的光盘镜像为例,在这里

-r--r--r-- 2 root root   1706 Nov 28  2013 RPM-GPG-KEY-CentOS-6
-r--r--r-- 2 root root   1730 Nov 28  2013 RPM-GPG-KEY-CentOS-Debug-6
-r--r--r-- 2 root root   1730 Nov 28  2013 RPM-GPG-KEY-CentOS-Security-6
-r--r--r-- 2 root root   1734 Nov 28  2013 RPM-GPG-KEY-CentOS-Testing-6
-r--r--r-- 1 root root   3380 Nov 29  2013 TRANS.TBL
[[email protected] cdrom]# pwd
/media/cdrom

这里标红的就叫RPM-GPG-KEY-CentOS-6则是这个光盘的公钥。通常包的制作者会使用单向加密的方法提取数据的特征码然后使用自己的私钥进行加密这段验证码。

下面我们来说说rpm包的常用步骤:

安装步骤

随便以我们上述一个rpm包为例

我们使用 rpm -i(表示install)

-v 显示详细安装信息

-vv 显示更详细的安装信息

-vvv 显示更更详细的安装信息

-h 用哈希格式#来表示2%的安装符号来显示

这里随便找一个安装包进行实验

[[email protected] Packages]# rpm -ivh yelp-2.28.1-17.el6_3.x86_64.rpm
Preparing...                ########################################### [100%]
    package yelp-2.28.1-17.el6_3.x86_64 is already installed

它告诉我们yelp这个程序包已经安装过了。

再挑选一个

[[email protected] Packages]# rpm -ivh wsdl4j-1.5.2-7.8.el6.noarch.rpm
Preparing...                ########################################### [100%]
   1:wsdl4j                 ########################################### [100%]

显示100%安装好了

rpm包安装格式:rpm -iv(vv|vvv)h 程序包名称(前提是路径一定要在安装包目录下)

如果我们仅是测试安装可以加--test选项,例

[[email protected] Packages]# rpm -ivh --test zsh-4.3.10-7.el6.x86_64.rpm
Preparing...                ########################################### [100%]
[[email protected] Packages]# zsh
-bash: zsh: command not found

这里仅是装模做样的安装了一下, 其实我们还是无法使用zsh命令的。

通常程序包的纷繁复杂让我们头疼,我们想重新安装怎么办?

使用rpm -i --replacepkgs 程序包的名称(路径一定要在安装包目录下)

[[email protected] Packages]# rpm -i --replacepkgs zsh-4.3.10-7.el6.x86_64.rpm
[[email protected] Packages]# zsh
[[email protected]]/media/cdrom/Packages# echo $?
0

shell变成了zsh了!

这里注意一点,当我用rpm -ql zsh 去看它生成的文件里,这里有个叫/etc/zprofile的文件,我们进行编辑

#
# /etc/zprofile and ~/.zprofile are run for login shells
#

PATH="$PATH:$HOME/bin"
export PATH

_src_etc_profile()
{
    #  Make /etc/profile happier, and have possible ~/.zshenv options like
    # NOMATCH ignored.
    #
    emulate -L ksh

# source profile
    if [ -f /etc/profile ]; then
            source /etc/profile
    fi
}
_src_etc_profile

unset -f _src_etc_profile
#cool!

在尾行我们编辑个注释行叫cool!这里保存退出,让我们再重新安装一下zsh

[[email protected] Packages]# rpm -ivh --replacepkgs zsh-4.3.10-7.el6.x86_64.rpm
Preparing...                ########################################### [100%]
   1:zsh                    ########################################### [100%]

让我们再查看下[[email protected] Packages]# vim /etc/zprofile

unset -f _src_etc_profile
#cool!

尾行还存在着cool信息呢!这是为什么?重新安装有可能保留原有配置文件的修改。

卸载步骤

让我们卸载一个已安装的程序包

我们使用rpm -e(erase)程序包的名字即可

[[email protected] Packages]# rpm -e zsh
[[email protected] Packages]# echo $?
0

这里我们将zsh卸载了。如果我们想使用zsh将不太可能

[[email protected] Packages]# zsh
-bash: zsh: command not found

再次提醒,卸载需谨慎!!

因为rpm包是存在程序间的依赖关系,假设我们想忽略依赖关系,就用--nodeps选项(不建议使用,有可能导致一些有关联的程序无法正常运行)

对于上述的zsh我们进行再次卸载,!!!发现warning

[[email protected] Packages]# rpm -e zsh
warning: /etc/zprofile saved as /etc/zprofile.rpmsave

提醒你,配置文件进行过修改,我们不会直接卸载你的配置文件,而是另存为.rpmsave的新文件。文件内容不会修改。

升级步骤

rpm -Uvh/-Fvh 程序包的名字(路径一定要在安装包目录下)

--force 强制升级

查询步骤

任何时候我们都相信查询是万分有用的

1、查询某程序包是否被安装

rpm -q 程序包的名字

这里楼主举个例子:

[[email protected] Packages]# rpm -q zsh-4.3.10-7.el6.x86_64.rpm
package zsh-4.3.10-7.el6.x86_64.rpm is not installed
[[email protected] Packages]# rpm -q grep
grep-2.6.3-4.el6.x86_64

你们发现了么zsh被我删除了,显示not installed,而grep则显示出完整的程序名称,因为虚拟机安装CentOS时,grep是被直接安装进去的。

2、如何查询我们都安装过什么程序包呢?

使用rpm -qa(a有all的意思) 会刷出很多你已经安装过程序包

这个实验做出来基本会刷屏的,楼主很懒的,不展示了。但是如果我们想查询某一项,可以结合grep命令抓取出来,例如:

[[email protected] Packages]# rpm -qa | grep "find"
findutils-4.4.2-6.el6.x86_64

3、查询某个程序包的描述信息

我们使用rpm -qi 程序包名字(不用加.rpm)

如:[[email protected] Packages]# rpm -qi grep(这里直接键入grep)
Name        : grep                         Relocations: (not relocatable)
Version     : 2.6.3                             Vendor: CentOS
Release     : 4.el6                         Build Date: Tue 25 Jun 2013 10:52:30 PM CST
Install Date: Sat 26 Jul 2014 01:42:17 PM CST      Build Host: c6b8.bsys.dev.centos.org
Group       : Applications/Text             Source RPM: grep-2.6.3-4.el6.src.rpm
Size        : 803774                           License: GPLv3+
Signature   : RSA/SHA1, Wed 26 Jun 2013 10:15:56 AM CST, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://www.gnu.org/software/grep/
Summary     : Pattern matching utilities
Description :
The GNU versions of commonly used grep utilities. Grep searches through
textual input for lines which contain a match to a specified pattern and then
prints the matching lines. GNU‘s grep utilities include grep, egrep and fgrep.

GNU grep is needed by many scripts, so it shall be installed on every system.

4、我们来查询某个包生成了什么文件

rpm -ql 程序包名字

例如:[[email protected] Packages]# rpm -ql grep
/bin/egrep
/bin/fgrep
/bin/grep
/usr/share/doc/grep-2.6.3
/usr/share/doc/grep-2.6.3/ABOUT-NLS
/usr/share/doc/grep-2.6.3/AUTHORS
/usr/share/doc/grep-2.6.3/README
/usr/share/doc/grep-2.6.3/THANKS
/usr/share/doc/grep-2.6.3/TODO

....这里还有很多,不进行赘述。

如果仅仅想查看生成那些配置文件、帮助文件、或者是什么脚本。

rpm -qc 程序包名字 配置文件的信息

[[email protected] Packages]# rpm -qc zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc 以上都是zsh生成的配置文件信息啦

rpm -qd 程序包名字 帮助文件的信息

[[email protected] Packages]# rpm -qd grep
/usr/share/doc/grep-2.6.3/ABOUT-NLS
/usr/share/doc/grep-2.6.3/COPYING
/usr/share/doc/grep-2.6.3/README
/usr/share/doc/grep-2.6.3/THANKS
/usr/share/doc/grep-2.6.3/TODO
/usr/share/info/grep.info.gz
/usr/share/man/man1/egrep.1.gz
/usr/share/man/man1/fgrep.1.gz
/usr/share/man/man1/grep.1.gz 可以看出grep的帮助文件很很多。

rpm -q--scripts 查看程序文件生成的脚本

查询某文件由哪个程序包安装的可以用

rpm -qf 文件名如/bin/ls

# rpm -qf /bin/ls
coreutils-8.4-31.el6.x86_64

最后对于尚未安装的程序包执行查看操作就在上述选项中加入-p即可

如 rpm -qpi 一个尚未安装的程序包名字(要确保在程序包目录下或者是链接可用)

rpm -qpl/c/d 分别查看尚未安装程序包生成文件、配置文件以及帮助文件。

RPM是linux程序包管理器的重要工具。以上陈述,希望对读者有所帮助,当然楼主也会及时查看,回头有时间把RPM的前端工具yum分享给大家!

RPM(RedHat Package Manager)

时间: 2024-10-22 05:08:08

RPM(RedHat Package Manager)的相关文章

RPM是RedHat Package Manager(RedHat软件包管理工具)

RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序” rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种.二进制包可以直接安装在计算机中,而源代码包将会由RPM自动编译.安装.源代码包经常以src.rpm作为后缀名. 常用命令组合: -ivh:安装显示安装进度--install--verbose--hash -Uvh:升级软件包--Update: -ql:列出RPM软件包内的文件信息[Query Pa

Linux 系统 LVM(Logical Volume Manager)逻辑卷管理

一.前言 每个Linux使用者在安装Linux时都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到 当前某个分区需要的容量,还要预见该分区以后可能需要的容量的最大值.因为如果估计不准确,当遇到某个分区不够用时管理员可能甚至要备份整个系统.清除硬 盘.重新对硬盘分区,然后恢复数据到新分区. 虽然现在有很多动态调整磁盘的工具可以使用,例如PartationMagic等等,但是它并不能完全解决问题,因为某个分区可能会再次被耗尽:另 外一个方面这需要重新

linux 查看文件安装目录命令 locate; whereis ; which ; RPM(Red Hat Package Manager)

locate; whereis ; which 参考:http://blog.csdn.net/tianlesoftware/article/details/5954040 Red Hat Package Manager(简称RPM) 参考:http://www.jb51.net/os/RedHat/1261.html

你需要知道的包管理器(Package Manager)

最近我花了一点时间关注了在不同系统之中所用到的包管理器(Package Manager) .最开始的时候,我是在使用Linux操作系统时,对这种工具以及它背后的想法深深迷恋住了:这真是自由的软件世界.全世界所有的开发人员都可以将自己觉得有用的组件或者软件发布到一个共用的地方,其他的所有人都可以很方便地按需取用. 让我们记住Richard Stallman 以及他提出并创立的GNU计划.http://baike.baidu.com/view/36272.htm   在Linux系统中,包管理器是如

安装VM ware及虚拟机(Redhat 7.0)

一.安装VMware步骤(大略)二.安装虚拟机步骤这里要做的是双网卡一个是用于本地连接(仅主机模式),一个用于外网连接(NAT模式) 下面进行Redhat7.0系统安装这里要安装有桌面化的所以 选择带有GUI的,如果是无桌面的则选择mimal这里是分配磁盘大小然后添加root密码重启,安装完成 原文地址:http://blog.51cto.com/12765384/2170879

使用VMware虚拟机安装RHEL7(RedHat Enterprise Linux7)步骤

准备工具: 1.VMware Workstation 14 2.RedHat Enterprise Linux 7.0镜像文件 在虚拟机内设置操作系统的硬件标准 单击"创建新的虚拟机"选项 在弹出的"新建虚拟机向导"界面中选择"典型"单选按钮,然后单击"下一步"按钮 选中"稍后安装操作系统"单选按钮,然后单击"下一步"按钮 将客户机操作系统的类型选择为"Linux",

Dream------Hadoop--Hadoop HA QJM (Quorum Journal Manager)

In a typical HA cluster, two separate machines are configured as NameNodes. At any point in time, exactly one of the NameNodes is in an Active state, and the other is in a Standby state. The Active NameNode is responsible for all client operations in

PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)

PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++:      欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/problem-sets/994805046380707840/problems 目录 (点击对应题目即可进入相应题解--小声BB--) L1-001 Hello World (5 分) L1-002 打印沙漏 (20 分) L1-003 个位数统计 (15 分) L1-004 计算摄氏温度 (5

CentOS 6.3下配置LVM(逻辑卷管理)

一.简介 LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性. LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用.在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操