rpm软件包安装与管理

一、软件包分类

1、软件包分类
  • 源码包
  • 二进制包
2、源码包
2.1 源码包什么样

直接由编程语言写成,没经过编译。类似于java的 .calss 文件,c的 .c文件。

[root@love2 ~]#  vim  hello.c
#include <stdio.h> int main (void) {
      printf ("hello world\n"); 
} 
 
[root@love2 ~]# gcc -c hello.c 
# - c 生成“ .o ”头文件。这里会生成 hello.o 头文件,但是不会生成执行文件 
[root@love2 ~]# gcc -o hello hello.o 
# - o 生成执行文件,并制定执行文件名。这里生成的 hello 就是可执行文件 
[root@love2 ~]# ./hello
hello world
# 执行 hello 文件
2.2 源码包特点

源码包的优点:

  • 开源,如果有足够的能力,可以修改源代码
  • 可以自由选择所需的功能
  • 软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高
  • 卸载方便

源码包有缺点:

  • 安装过程步骤较多,尤其安装较大的软件集合时(如 LAMP 环境搭建),容易出现错误
  • 编译过程时间较长,安装比二进制安装时间长
    -因为是编译安装,安装过程中出现问题比较难以解决
3、二进制包
3.1 二进制包分类

DPKG 包:是由 Debian Linux 所开发出来的包管理机制,通过 DPKG 包,Debian Linux 就可以进行软件包管理。主要应用在 Debian 和 unbuntu 中。
RPM 包:是由 Red Hat 公司所开发的包管理系统。功能强大,安装、升级、查询和卸载 都非常简单和方便。目前很多 Linux 都在使用这种包管理方式,包括 Fedora、CentOS、 SuSE 等。

3.2 特点

RPM 包的优点:

  • 包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载
  • 安装速度比源码包安装快的多 RPM 包的

缺点:

  • 经过编译,不再可以看到源代码
  • 功能选择不如源码包灵活
  • 依赖性。有时候复杂一点的软件包依赖于别的软件包才能安装,而别的软件包有依赖于另外的软件包。非常麻烦。
3.3 RPM包依赖

1)树形依赖 a---->b---->c
2)环形依赖 a---->b---->c---->a
以上两种情况,我们可以用命令一次将所需要的软件包全部安装,就不需要考虑依赖性问题。
3)函数库依赖 :a软件包依赖与另外软件包中的函数库或者模块,我们需要找到该模块或者该函数库对应的软件包。可通过该网站查询www.rpmfind.net

二、rpm安装

1.rpm包命名规则
httpd-2.2.15-15.el6.centos.1.i686.rpm 
#httpd 软件包名 
#2.2.15 软件版本 
#15  软件发布的次数 
#el6  软件发行商。el6 是 RedHat 公司发布,适合 RHEL6.x(Red Hat Enterprise Linux)和 CentOS6.x 下使用 i686 适合的硬件平台。
RPM 包可以在不同的硬件平台安装,选择适合不同 CPU 的软件版本,可以最大化的发挥 CPU 性能,所以出现了所谓的 i386(386 以上计算机都可以安装)、
i586(586 以上的计算机都可以安装)、i686(奔腾 II 以上计算机都可以安装,目前所有的 CPU 都是 奔腾 II 以上,所以这个软件版本居多)、
x86_64(64 位 CPU 可以安装)和 noarch(没有硬 件限制)等文件名了。 
#rpm  包的扩展名 Linux 下文件不是靠扩展名区分文件类型,也就是 Linux 中扩展 名没有任何含义。可是这里怎么又出现了扩展名呢?
原因很简单,如果我不把 RPM 的扩展名 叫做“.rpm”,管理员很难知道这是一个 RPM 包,当然也就无法正确安装了。
也就是说如果 RPM 包不用“.rpm”作为扩展名,系统可以正确识别没有问题,可是管理员很难识别这是个什么样的软件。 
 

包全名:如果操作的是未安装软件包,则使用包全名,而且需要注意绝对路径
包名:如果操作的是已经安装的软件包,则使用包名即可,系统会生产 RPM 包的数据库(/var/lib/rpm/)。

2.rpm包手工命令安装
2.1 默认安装位置
目录 作用
/etc/ 配置文件目录
/usr/bin/ 可执行命令目录
/usr/lib/ 程序使用的函数库保存位置
/usr/share/doc/ 软件基本使用手册保存位置
/usr/lib/ 帮助文档保存位置
2.2 RPM 包安装

1)安装命令

rpm –ivh 包全名 # 注意一定是包全名。如果跟包全名的命令 要注意路径,因为软件包在光盘当中。
选项:  
-i   install 安装(install)  
-v  显示更详细的信息(verbose)  
-h   打印#显示安装进度(hash)
--nodeps  不检测依赖性安装。软件时会检测依赖性,确定所需的底层软件是否安装。 如果没有安装则会报错。不管依赖性,强行安装。这样不检测依赖性安装的软件基本是不能使用的,所以不建议这样做。 
--replacefiles  替换文件安装。如果安装软件包,可是包中部分文件已经存在,那么 正常安装时候,会报错“某个文件已经存在”从而导致软件无法安装,使用这个选项可 以忽视这个报错,而覆盖安装。
--replacepkgs 替换软件包安装。如果软件包已经安装,此选项可以把软件包重复安装一遍。
--force  强制安装。不管是否已经安装,都重新安装。就是—replacefiles 和 —replacepkgs 的综合。
--test  测试安装。不会实际安装,只是检测一下依赖性。
--prefix  指定安装路径。为安装软件指定安装路径,而不使用默认安装路径。注意: 如果指定了安装路径,软件没有安装到系统默认路径中的话,系统会找不到这些安装的软件,需要进行手工配置才能被系统识别。所以 rpm 包我们一般都采用默认路径安装。

2)服务启动

[root@localhost ~]# service 服务名 start|stop|restart|status 
参数:  
start: 启动服务  
stop:  停止服务
restart: 重启服务
status: 服务状态 
2.3 RPM 包升级
[root@localhost ~]#  rpm –Uvh 包全名 
选项:  
-U(大写) 升级安装,如果没有安装过,系统直接安装。如果安装过的版本较旧,则升级到新版本(upgrade)

[root@localhost ~]#  rpm –Fvh 包全名 
选项: 
-F(大写)  升级安装,如果没有安装过,则不会安装。必须安装有较旧版本,才能升级(freshen)
 
2.4 卸载
[root@localhost ~]# rpm  -e  包名 
选项: 
--nodeps 不检查依赖性  
-e   卸载
2.5 查询

1)查询软件包是否安装
可以查询软件包是否安装

[root@localhost ~]#  rpm –q 包名 
选项:  
-q: 查询(query)

2)查询系统中的所有安装软件包
可以查询 Linux 系统中所有已经安装的软件包

[root@localhost ~]# rpm -qa  
选项:  
-a:所有(all)

3)查询软件包的详细信息
可以查询已经安装的某个软件包的详细信息

[root@localhost ~]#  rpm –qi 包名 
选项:  
-i: 查询软件信息(information)

查询还没有安装的软件包的详细信

[root@localhost ~]#  rpm –qip 包全名 
选项:  
-p: 查询没有安装的软件包(package)

4)查询软件包中的文件列表
可以查询已经安装的软件包中的文件列表和安装的完整目录

[root@localhost ~]#  rpm –ql 包名 
选项:  
-l: 列出软件包中所有的文件列表和软件所安装的目录(list) 

查询还没有安装的软件包中的文件列表和打算安装的位置

[root@localhost ~]#  rpm –qlp 包全名 
选项:  
-p: 查询没有安装的软件包信息(package) 

5)查询系统文件属于哪个 RPM 包

[root@localhost ~]#  rpm –qf 系统文件名 
选项:  
-f: 查询系统文件属于哪个软件包(file)

6)查询软件包所依赖的软件包
查询系统中和已经安装的软件包有依赖关系的软件包

[root@localhost ~]# rpm –qR 包名 
选项:  
-R: 查询软件包的依赖性(requires)
可以查询没有安装的软件包的依赖性吗?加“-p”选项即可。例如,查看一下还没有安装的 httpd 软件包的依赖包,可以执行如下命令: 
[root@localhost ~]# rpm -qpR /mnt/cdrom/Packages/httpd-2.2.15-53.el6.centos.x86_64
2.6 验证

1)基本命令

[root@localhost ~]# rpm –Va  
选项:  
-Va 校验本机已经安装的所有软件包 
[root@localhost ~]# rpm –V 已安装的包名 
选项:  
-V 校验指定 RPM 包中的文件(verify) 
[root@localhost ~]# rpm –Vf 系统文件名 
选项:  
-Vf 校验某个系统文件是否被修改

2)验证举例

[root@localhost ~]# rpm -V httpd 
S.5....T.      c   /etc/httpd/conf/httpd.conf 
验证内容   文件类型  最后是文件名。
那么验证内容中的 8 个信息的具体内容 如下:
S 文件大小是否改变 
M 文件的类型或文件的权限(rwx)是否被改变 
5 文件 MD5 校验和是否改变(可以看成文件内容是否改变) 
D 设备的主从代码是否改变 
L 文件路径是否改变 
U 文件的属主(所有者)是否改变 
G 文件的属组是否改变 
T 文件的修改时间是否改变  
apache 配置文件的文件类型是 c,那么还有哪些文件类型呢?
c 配置文件(config file)
d 普通文档(documentation)
g “鬼”文件(ghost file),很少见,就是该文件不应该被这个 RPM 包
l 授权文件(license file)
 r 描述文件(read me)
2.7 数字证书

上面的校验方法只能对已经安装的 RPM 包中的文件进行校验,但是如果 RPM 包本身就被动过手脚, 那么校验就不能解决问题了。
我们就必须使用数字证书验证了。首先必须找到原厂的公钥文件,然后进行安装 ,再安装 RPM 包是。
用rpm命令安装软件时会去提取 RPM 包中的证书信息,然后和本机安装的原厂证书进行验证,如果验证通过,则允许安装;如果验证不通过,则不允许安装并警告。
1)数字证书位置

[root@love2 yum.repos.d]# ll  /mnt/cdrom/RPM-GPG-KEY-CentOS-6 
-r--r--r-- 2 root root 1706 11月 27 2013 /mnt/cdrom/RPM-GPG-KEY-CentOS-6

2)数字证书导入

[root@localhost ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 
选项:  
--import 导入数字证书

#查询已经安装的证书
[root@love2 yum.repos.d]# rpm -qa | grep  gpg-pubkey
gpg-pubkey-c105b9de-4e0fd3a3

2.8 RPM包中文件的提取

有时候我们会将某些软件的文件误删,所以我们可以通过命令提取特定文件。
1)使用命令 rpm2cpio+ cpio

[root@localhost ~]# rpm2cpio 包全名 | cpio -iduv .文件绝对路径   
rpm2cpio  将 rpm 包转换为 cpio 格式的命令
cpio      是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件
cpio还原时,命令解释。
-i:copy-in 模式,还原  
-v:显示还原过程  
-c:使用较新的 portable format 存储方式  
-d:还原时自动新建目录  
-u:自动使用较新的文件覆盖较旧的文件 

2)示例、假如我们不小心 将位于 /bin/find 删掉了。我们可以通过以下步骤恢复

1、先查出该命令对应的软件包名
[root@love2 ~]# rpm -qf /bin/find
findutils-4.4.2-9.el6.x86_64
2、提取文件到当前文件下
[root@love2 ~]# rpm2cpio /mnt/cdrom/Packages/findutils-4.4.2-9.el6.x86_64.rpm | cpio -iduv  ./bin/find
3、将find命令移动到/bin目录下
[root@love2 ~]# mv bin/find  /bin/

三 、rpm包在线安装(yum安装)

3.1 yum源文件解析

yum 源配置文件保存在/etc/yum.repos.d/目录中,文件的扩展名一定是“.repo”。也就是说, yum 源配置文件只要扩展名是“.repo”就会生效。

[root@love2 ~]# ls /etc/yum.repos.d/
bak  CentOS-Media.repo
#由于我配置了光盘yum源,所以将其他 .repo 文件移动了一下。

配置文件详情如下

[base]:容器名称,一定要放在[]中
name:容器说明,可以自己随便写。
mirrorlist:镜像站点,这个可以注释掉。
baseurl:我们的 yum 源服务器的地址。默认是 CentOS 官方的 yum 源服务器,是可以使用的。 如果你觉得慢,则可以改成你喜欢的 yum 源地址。
enabled:此容器是否生效,如果不写或写成 enabled=1 则表示此容器生效,写成 enabled=0 则表示此容器不生效。 
gpgcheck:如果为 1 则表示 RPM 的数字证书生效;如果为 0 则表示 RPM 的数字证书不生效
gpgkey:数字证书的公钥文件保存位置。不用修改。
3.2 搭建本地光盘yum源

第一步:放入 CentOS 安装光盘,并挂载光盘到指定位置

[root@love2 ~]# mkdir /mnt/cdrom # 创建 cdrom 目录,作为光盘的挂载点 
[root@localhost ~]# mount /dev/sr0  /mnt/cdrom/ #挂载 

第二步:修改其他几个 yum 源配置文件的扩展名,让它们失效,因为只有扩展名是“*.repo”的 文件才能作为 yum 源配置文件。当然你也可以将不需要的移动到另外的目录。

自行选择

第三步:修改光盘 yum 源配置文件 CentOS-Media.repo,参照以下方法修改:

[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///mnt/cdrom/
#       file:///media/cdrom/
#       file:///media/cdrecorder/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

第四步 清除原先yum缓存,并且建立新的缓存

yum clean all && yum makecache
3.3 yum命令

1)查询

查询 yum 源服务器上所有可安装的软件包列表
[root@love2 bak]# yum list

查询 yum 源服务器中是否包含某个软件包。
[root@love2 bak]# yum list bind
已加载插件:fastestmirror,security
Loading mirror speeds from cached hostfile
可安装的软件包
bind.x86_64                                              32:9.8.2-0.47.rc1.el6                                               c6-media

搜索 yum 源服务器上所有和关键字相关的软件包
[root@love2 bak]# yum search apache   #搜索包含有apache关键字软件包
已加载插件:fastestmirror,security
Loading mirror speeds from cached hostfile
======================================================== N/S Matched: apache ========================================================
ant-apache-bcel.x86_64 : Optional apache bcel tasks for ant
ant-apache-bsf.x86_64 : Optional apache bsf tasks for ant

查询指定软件包的信息
[root@love2 bak]# yum info bind
已加载插件:fastestmirror,security
Loading mirror speeds from cached hostfile
可安装的软件包
Name        : bind
Arch        : x86_64
Epoch       : 32
Version     : 9.8.2
Release     : 0.47.rc1.el6
Size        : 4.0 M
Repo        : c6-media
...

2)安装

[root@love2 yum.repos.d]# yum -y install 包名 
选项:  
install  安装  
-y   自动回答 yes。如果不加-y,那么每个安装的软件都需要手工回答 yes

3)升级

[root@love2 yum.repos.d]# yum -y update 包名 
# 升级指定的软件包 
选项:  update:  升级  
-y:   自动回答 yes
[root@love2 yum.repos.d]# yum -y update 
# 升级本机所有软件包

4)卸载

[root@love2 yum.repos.d]# yum remove 包名 
# 卸载指定的软件包
3.4 yum组管理命令

1)查询可以安装的软件组

[root@love2 ~]# yum grouplist 
# 列出所有可用的软件组列表

2)查询软件组内包含的软件

[root@love2 ~]# yum groupinfo 软件组名 
# 列出软件组中包含的软件
例:
[root@love2 bak]# yum groupinfo Emacs
已加载插件:fastestmirror,security
设置组进程
Loading mirror speeds from cached hostfile

组:Emacs
 描述:GNU Emacs 可扩展、可自定义的文本编辑器。
 必要的软件包:
   emacs
 可选的软件包:
   ctags-etags
   emacs-auctex
   emacs-gnuplot
   emacs-nox
 

3)安装软件组

[root@love2 ~]# yum groupinstall 软件组名 
# 安装指定软件组,组名可以由 grouplist 查询出来 

4)移除软件组

[root@love2 ~]# yum groupremove 软件组名 
# 卸载指定软件组

相关文章

linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、...
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别...
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书...
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满...
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的...
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线...