一、软件包分类

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软件包安装与管理的更多相关文章

  1. 尚学linux课程---8、rpm软件包安装

    尚学linux课程---8.rpm软件包安装 一.总结 一句话总结: rpm安装软件包的话要解决依赖问题,推荐使用yum安装软件包 1.比如cd /home中的斜线表示什么意思? 表示根目录,linu ...

  2. centos 软件包安装与管理

    http://rpmfind.net/linux/RPM/index.html http://pkgs.org/ https://sourceforge.net/

  3. CentOS软件管理之源代码以及RPM软件包管理

    在Linux系统下,对于软件包的管理有多种机制,有源代码方式.RPM软件包管理方式以及YUM软件管理方式,本篇随笔将详细讲解CentOS下源代码形式安装软件以及RPM软件包管理机制 一.源代码形式 首 ...

  4. linux笔记:RPM软件包管理-rpm命令管理

    rpm包命名原则: rpm包的依赖性: 包名和包全名: rpm软件包安装.升级和卸载: rpm软件包查询: 从rpm包中提取指定文件:

  5. RPM软件包管理以及使用方法

    Red Hat Package Manager(简称RPM)工具包由于其使用简单操作方便,可以实现软件的查询.安装.卸载.升级和验证等功能,为Linux使用者节省大量的时间,所以被广泛的用于Linux ...

  6. rpm 软件包

    rpm 软件包   Linux 中有安装软件方式有两种,源码安装以及软件包安装: 压缩包:源码包,编译后安装 rpm(redhat package manager 红帽软件包管理):需要编译,直接安装 ...

  7. Linux- RPM与yum软件包安装

    Linux安装及管理程序一.Linux应用程序基础1)应用程序与系统命令的关系2)典型应用程序的目录结构3)常见的软件包封装类型二.RPM包管理工具① RPM软件包管理器Red-Hat Package ...

  8. liunx之:rpm包安装

    使用rpm命令查询软件包: 1.查询系统中安装的所有RPM包 $ rpm -qa 查询当前linux系统中已经安装的软件包. 例:$ rpm -qa | grep -i x11 | head -3 察 ...

  9. 细说Linux下软件包的安装与管理

    一 源码安装方式      由于linux操作系统开放源代码,因而在其上安装的软件大部分也都是开源软件,例如apache.tomcat.php等软件.开源软件基本都提供源码下载,源码安装的方式:源码安 ...

随机推荐

  1. NodeJS1-1 NodeJS是什么?

    Node.js is a JavaScript  runtime built on Chrome's V8  Node.js uses an event-driven,non-blocking I/O ...

  2. Vue项目无法使用局域网IP直接访问的配置方法

    一般使用 vue-cli 下来的项目是可以直接访问局域网 IP 打开的,比如 192.168.1.11:8080 .但是最近公司的一个项目只可以通过 localhost 访问. 需要配置一下,才可直接 ...

  3. Spark Streaming vs. Structured Streaming

    简介 Spark Streaming Spark Streaming是spark最初的流处理框架,使用了微批的形式来进行流处理. 提供了基于RDDs的Dstream API,每个时间间隔内的数据为一个 ...

  4. 使用Advanced Installer打包工具如何设置是否安装预安装程序包

    要保证我们的程序能在目标机器上正常运行,便需要保证目标机器上提供了程序运行的必要组件. 而在使用Advanced Installer打包工具制作程序安装包时,我们可以通过配置“需求-运行环境-程序包- ...

  5. DC8: Vulnhub Walkthrough

    镜像下载链接: https://www.vulnhub.com/entry/dc-8,367/#download 主机扫描: http://10.10.202.131/?nid=2%27 http:/ ...

  6. 微信小程序之启动页的重要性

    启动页在APP中是个很常见的需求,为什么对于小程序来说也非常重要呢?首先我描述一下我在开发过程中遇到的一些问题以及解决的步骤,到最后为什么要加启动页,看完你就明白了. 小程序的首页需要展示用户关注的小 ...

  7. Spring 常犯的十大错误,(收藏后)永远不要在犯了

    1. 错误一:太过关注底层 我们正在解决这个常见错误,是因为 “非我所创” 综合症在软件开发领域很是常见.症状包括经常重写一些常见的代码,很多开发人员都有这种症状. 虽然理解特定库的内部结构及其实现, ...

  8. 汇编 易混淆指令lea offset

    lea 是机器指令,offset 是伪指令. LEA BX, BUFFER ;在实际执行时才会将变量buffer的地址放入bx MOV BX, OFFSET BUFFER ;在编译时就已经计算出buf ...

  9. NLP标记集资料

    title: 标记集 tags: grammar_cjkRuby: true --- LTP分词标注集 标记 含义 举例 B 词首 __中__国 I 词中 哈__工__大 E 词尾 科__学__ S ...

  10. 《C#并发编程经典实例》学习笔记—2.8 处理 async Task 方法的异常

    异常处理一直是所有编程语言不可避免需要考虑的问题,C#的异步方法的异常处理和同步方法并无差别,同样要借助 try catch 语句捕获异常. 首先编写一个抛出异常的方法 static async Ta ...