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 软件组名
# 卸载指定软件组
rpm软件包安装与管理的更多相关文章
- 尚学linux课程---8、rpm软件包安装
尚学linux课程---8.rpm软件包安装 一.总结 一句话总结: rpm安装软件包的话要解决依赖问题,推荐使用yum安装软件包 1.比如cd /home中的斜线表示什么意思? 表示根目录,linu ...
- centos 软件包安装与管理
http://rpmfind.net/linux/RPM/index.html http://pkgs.org/ https://sourceforge.net/
- CentOS软件管理之源代码以及RPM软件包管理
在Linux系统下,对于软件包的管理有多种机制,有源代码方式.RPM软件包管理方式以及YUM软件管理方式,本篇随笔将详细讲解CentOS下源代码形式安装软件以及RPM软件包管理机制 一.源代码形式 首 ...
- linux笔记:RPM软件包管理-rpm命令管理
rpm包命名原则: rpm包的依赖性: 包名和包全名: rpm软件包安装.升级和卸载: rpm软件包查询: 从rpm包中提取指定文件:
- RPM软件包管理以及使用方法
Red Hat Package Manager(简称RPM)工具包由于其使用简单操作方便,可以实现软件的查询.安装.卸载.升级和验证等功能,为Linux使用者节省大量的时间,所以被广泛的用于Linux ...
- rpm 软件包
rpm 软件包 Linux 中有安装软件方式有两种,源码安装以及软件包安装: 压缩包:源码包,编译后安装 rpm(redhat package manager 红帽软件包管理):需要编译,直接安装 ...
- Linux- RPM与yum软件包安装
Linux安装及管理程序一.Linux应用程序基础1)应用程序与系统命令的关系2)典型应用程序的目录结构3)常见的软件包封装类型二.RPM包管理工具① RPM软件包管理器Red-Hat Package ...
- liunx之:rpm包安装
使用rpm命令查询软件包: 1.查询系统中安装的所有RPM包 $ rpm -qa 查询当前linux系统中已经安装的软件包. 例:$ rpm -qa | grep -i x11 | head -3 察 ...
- 细说Linux下软件包的安装与管理
一 源码安装方式 由于linux操作系统开放源代码,因而在其上安装的软件大部分也都是开源软件,例如apache.tomcat.php等软件.开源软件基本都提供源码下载,源码安装的方式:源码安 ...
随机推荐
- Linux搭建NFS服务
一.NFS服务简单介绍 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中, ...
- 如何在Sublime中打开左侧文件夹导航
Sublime中我们可以通过菜单栏的View->Side Bar->Hide Side Bar(Show Side Bar)来显示和隐藏左侧的导航栏,如下图所示. 但是,这里只会显示当前打 ...
- Elasticsearch系列---搜索分页和deep paging问题
概要 本篇从介绍搜索分页为起点,简单阐述分页式数据搜索与原有集中式数据搜索思维方式的差异,就分页问题对deep paging问题的现象进行分析,最后介绍分页式系统top N的案例. 搜索分页语法 El ...
- hexo + next 搭建博客时Cannot GET /tags/问题处理
原来是要修改新建的index.md文件,不仔细. 此外,愈发觉得百度和谷歌搜索同一问题的差距,谷歌更适合程序员! https://www.zhihu.com/question/29017171 这个可 ...
- 使用Power BI API 向流数据集推送实时数据并在仪表板可视化
使用Power BI 实现实时数据的可视化是大家比较关心的一个话题,在仪表盘上实现推送数据的展示,可以在诸如指挥大屏等场景下使用. 本视频实战内容如下: https://v.qq.com/x/page ...
- .NET Core的JWT认证的学习
今天学习下JWT,遇到了两个坑爹问题,这里记录下.在 ASP.NET Core 中,授权的设置方式有两种,可以使用角色,也可以使用策略,这里也将简单举例角色.策略的使用. JWT这里不做介绍,如果想了 ...
- 简单介绍托管执行和 CLI
目录 CIL 和 ILDASM 查看 myApp.dll 的 CIL 输出 使用 ILSpy 查看 myApp.dll 反编译后的代码 处理器不能直接解释程序集.程序集用的是另一种语言,即公共中间语言 ...
- c++-重载运算符(+-,++,--,+=,-=,cin,cout)
操作符重载 自定义类型需要操作符重载 运算符重载入门技术推演 友元函数和成员函数实现2元运算符重载 友元函数和成员函数实现1元运算符重载(前置++,前置--,后置++,后置--) 友元函数实现运算符重 ...
- isNotBlank()和isNotEmpty()总结
import org.apache.commons.lang.StringUtils; import org.junit.Test; public class Test{ //总结:isNotBlan ...
- 集合系列 Queue(十一):ArrayDeque
从名字我们可以看出,其实一个双向队列实现,而且底层采用数组实现. public class ArrayDeque<E> extends AbstractCollection<E> ...