软件包安装

1.软件包分类

1.1软件包的分类

  • 源码包
  • 二进制包
  • 脚本安装包

1.2源码包

1.2.1源码包的样子

源码包可以认为是利用不同的计算机语言而写的包, 我们打开相应的文件也能看到相应的源码

1.2.2源码包的特点

源码包的优点: 

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

缺点:

  • 安装过程步骤比较多, 尤其是安装较大软件集合时, 容易出现错误
  • 编译过程较长, 安装比二进制安装时间长
  • 因为是编译安装, 安装过程中出现报错新手很难解决

1.3二进制包

1.3.1二进制包的分类

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

1.3.2特点

RPM包的优点: 

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

RPM包的缺点: 

  • 经过编译, 不能看到源码
  • 功能选择不如源码包灵活
  • 依赖性. 又是我们发现需要安装软件包a是需要先安装软件包b和c, 而安装b时需要安装d和e. 这就需要我们先安装d和e, 在安装b和c, 最后才能安装a. 是有一定顺序的

1.3.3RPM包依赖

1)树形依赖    a-->b-->c

2)环形依赖    a-->b-->c-->a

3)函数库依赖

什么是模块依赖?我们可以安装一下文件进行尝试:

rpm -ivh mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm

错误: 依赖检测失败

        libodbc.so.2()(64bit) 被 mysql-connector-odbc-5.2.5-7.el7.x86_64 需要
        libodbcinst.so.2()(64bit) 被 mysql-connector-odbc-5.2.5-7.el7.x86_64 需要

发现报错, 需要安装libodbc.so.2函数库文件, 这时会发现在光盘中根本找不到这个文件. 那是因为函数库没有单独成包, 是包含在某一个软件包中的. 如果要知道在那个软件包中, 需要查询网站www.rpmfind.net

2.rpm安装

2.1rmp包命名规则

httpd-2.2.15-15.e16.centos.1.i686.rpm

  • httpd软件包名
  • 2.2.15软件版本号
  • 15软件的发布次数
  • e16软件发行商
  • i686适合的硬件平台. RPM包可以在不同的硬件平台安装, 选择适合不同CPU的软件版本, 可以最大化的发挥CPU的性能
  • rpm扩展名

包全名: 如果操作的是未安装的软件包, 则使用包全名, 而且需要注意绝对路径

包名: 如果操作的是已经安装的软件包, 则使用包名, 系统会产生RPM包的数据库(/var/lib/rpm/), 而且可以在任意路径下操作

2.3rpm包手工命令安装

2.3.1默认安装位置

路径介绍
/etc/配置文件安装目录
/usr/bin/可执行命令的安装目录
/usr/lib/程序所使用的函数库保存位置
/usr/share/doc/基本的软件使用手册保存位置
/usr/share/man/帮助文件保存位置

2.3.2RPM包安装

1)安装命令

rpm -ivh 包全名

# 注意一定似乎包全名, 如果包全名要注意路径, 应为软件包在光盘当中

选项: 

        -i: install安装

        -v: 显示更详细的信息

        -h: 打印和显示安装进度

  • --relpacefiles: 替换文件安装. 如果安装软件包, 可是包中文件已经存在, 那么正常安装时, 会报错"某个文件已经存在"从而导致软件无法安装, 使用这个选项可以忽视这个报错, 而覆盖安装
  • --replacepkgs: 替换软件包安装. 如果软件包已经存在, 此选项可以包软件包重复安装一遍
  • --force: 强制安装. 不管是否已经安装, 都重新安装. 就是以上两种的综合
  • --test: 测试安装. 不会实际安装, 只是检测一下依赖性
  • --prefix: 指定安装路径. 一般不会使用

2)服务启动

service 服务名 start|stop|restart|status(查看服务状态)

2.3.3RPM包升级

rmp -Uvh 包全名

选项: 

        -U(大写): 升级安装. 如果没有安装过, 系统直接安装. 如果安装过旧的版本, 就会升级到最新版

        -F(大写): 升级安装, 如果没有安装过, 则不会安装, 必须有旧的版本才能升级

2.3.4卸载

rpm -e 包名

2.3.5查询

1)查询软件包是否安装

rmp -q 包名

选项: 

        -q: 查询

2)查询系统中的所有安装软件包名

rmp -qa

当然我们能用管道符查找我们所需要的内容

rmp -qa | grep httpd

3)查询软件包的详细信息

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

rpm -qi 包名

选项: 

        -i: 查询软件信息

也可以查看没有安装的软件包的详细信息

rpm -qip 包全名

选项: 

        -p: 没有安装的软件包(package)

4)查询软件包中的文件列表

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

rpm -ql 包名

选项: 

        -l: 列出软件包中所有的文件列表和软件所安装的目录

那么, 可以查询还没有安装的软件包中的文件列表和打算安装的位置吗?答案是可以的

rpm -qlp 包全名

选项:

        -p: 查询没有安装软件包的信息

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

rpm -qf 系统文件名(必须是RPM包建立的文件)

选项: 

        -f: 查询系统文件属于哪一个软件包

6)查询软件所依赖的软件包

rpm -qR 包名

选项:        

        -R: 查询软件的依赖性(requires)

可以查询没有暗转的软件包的依赖性吗? 加上"-p"选项即可. 例如, 查看一下还没有安装的bind软件包的依赖性, 可以执行如下命令:

rpm -qRp 包全名

2.3.6验证

1)基本命令

rpm -Va

选项:

        -Va: 校验本机已经安装的所有软件包

rpm -V 已经安装的包名

选项:

        -V: 校验指定RPM包中的文件(verify)

rpm -Vf 系统文件名

选项: 

        -Vf: 校验某个系统文件是否被修改

2)验证举例

出现了提示信息, 我们解释最前面8个信息的内容, 表示检验内容的. 文件名前面的c是表示这个配置文件(configuration). 最后是文件名.验证的内容中的8个信息的具体内容如下:

  • S: 文件大小是否改变
  • M: 文件的类型或文件的权限是否被改变
  • 5: 文件MD5校验和是否改变(可以看成文件的内容是否改变)
  • D: 设备的主从代码是否改变
  • L: 文件的路径是否改变
  • U: 文件的属主(所有者)是否改变
  • G: 文件的属组是否改变
  • T: 文件的修改时间是否改变

2.3.7数字证书

刚刚的校验方法只能对已经安装的RPM包中的文件进行校验, 但是如果RPM包本身被动过手脚, 那么校验就能解决问题. 我们需要数字证书校验了

数字证书有如下特点:

  • 首先必须找到原厂的公钥文件, 然后进行安装
  • 再安装RPM包, 会提取RPM包中证书的信息, 然后和本机安装的原厂证书进行验证
  • 如果验证通过, 则允许安装; 如果验证不通过, 则不允许安装并警告

1)数字证书位置

数字证书在哪里呢?其实在CentOS的第一张光盘中, 当然它默认也会放在系统中:

ll /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

# 系统中数字证书位置

2)数字证书导入

rpm -import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

选项:

        -import: 导入数字证书

2.4rpm包在线安装(yum安装)

2.4.1yum源文件解析

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

这个目录中有5个yum源配置文件, 默认情况下CentOS-Base.repo文件生效. 我们打开这个文件看看:

在CentOS-Base.repo文件中有5个yum源容器, 这里只列出了base容器, 其他容器和base容器类似. 我们来解释一下base这个容器

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

2.4.2搭建本地光盘yum源

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

mkdir /mnt/cdrom             # 创建cdrom目录, 作为光盘的挂载点

mount /dev/cdrom /mnt/cdrom/

mount: block device dev/sr0 is write-protected, mounting read-only

# 挂在光盘到/mnt/cdrom目录下

第二步: 修改其他几个yum源配置文件的扩展名, 让它们失效, 因为只有扩展名是*.repo的文件才能作为yum源配置文件. 当然也可以删除其他几个yum源配置文件, 但是如果删除了, 当你又想用网络作为yum源文件时, 就没有参考文件了, 所以最好还是修改扩展名. 命令如下

cd /etc/yum.repos.d/

mv CentOS-Base.repo CentOS-Base.repo.bak

mv CentOS-Debuginfo.repo CentOS-DeBuginfo.repo.bak

mv CentOS-Vault.repo CentOS-Vault.repo.bak

第三步: 修改光盘yum源配置文件CentOS-Media.repo

2.4.3yum命令

1)查询

  • 查询yum源服务器上所有可安装的软件包列表

yum list    # 查询所有可用的软件包列表

Installed Packages     # 已经安装的软件包

  • 查询yum源服务其中是否包含某个软件包

yun list 包名         # 查询单个软件包

  • 搜索yum源服务器上所有的关键字相关的软件包

yum search 关键字

yum search搜索可以用于确定某个软件在哪个软件包当中. 此例子可以确定"ifconfig"命令需要安装"net-tools"包

  • 查询指定软件包的信息

yum info samba    #查询samba软件包的信息

2)安装

yum -y install 包名

选项:

        install: 安装

        -y: 自动回答yes

举例: yum -y install gcc     # 使用yum自动安装gcc

3)升级

yum -y -update 包名

选项:

        update: 升级

        -y: 自动回答yes

注意:进行升级操作的时候, yum源服务器中软件包的版本要比本机安装的软件包的版本高

yum -y update   #升级本机所有软件包

4)卸载

除非你确定卸载的软件的依赖包不会对系统产生影响, 否则不要执行yum卸载, 因为很有可能在卸载软件包的同时卸载的依赖包也是重要的系统文件, 这可能导致系统崩溃. 卸载命令如下:

yum remove 包名     # 卸载指定的软件包

2.4.4yum组管理命令

  • 查询可以安装的软件组

yum grouplist      # 列出所有可用的软件组列表

  • 查询软件组内包含的软件

yum groupinfo 软件组名      # 列出软件组中包含的软件

  • 安装软件组

yum groupinstall 软件组名     # 安装指定软件组, 组名可以由grouplist查询出来

例如:

yum groupinstall "Web Server"

  • 卸载软件组

yum groupremove   软件组名        #卸载指定软件组

3.源码包安装

3.1注意事项

3.1.1应当选择哪种软件包

  • 如果软件包是给大量客户提供访问, 建议使用源码包
  • 如果软件包是给Linux底层访问, 或只给少量客户访问, 建议使用rpm包安装, 因为rpm包简单

3.1.2源码包哪里来的?

rpm包是光盘中直接包含的, 所以不需要用户单独下载. 而源码包是通过官方网站下载的, 如果需要使用, 是需要单独下载的

3.2安装过程

我们来解释一下源码包安装的具体步骤

  1. 下载软件包
  2. 解压缩
  3. 进入解压缩目录
  4. ./configure         编译前准备
    这一步主要有三个作用:
    ​​​​​​​①在安装之前检测系统环境是否符合安装要求
    ②定义需要的功能选项. "./configure"支持的功能较多, 可以执行"./configure --help"命令查询其支持的功能. 一般都会通过"./configure --prefix=安装路径"来指定安装路径.
    ③把系统环境检测结果和定义好的功能选项写入Makefile文件, 后续的编译和安装需要依赖这个文件的内容
  5. make 编译
    make会调用gcc编译器, 并读取Makefile文件中的信息进行系统软件编译. 编译的目的就是把源码程序转变成能被Linux识别的可执行文件, 这些可执行文件保存在当前目录下, 编译过程较为耗时, 需要有足够的耐心
  6. make clean: 清空编译的内容(非必要步骤)
    如果在"./configure"或"make"编译中报错, 那么我们在重新执行命令之前一定要记得执行make clean 命令, 它会清空Makefile文件或这编译产生的".o"头文件
  7. make install    编译安装
    这才是真正的安装过程, 一般会写清楚程序的安装位置. 如果忘记指定安装目录, 则可以把这个命令的执行结果记录下来, 以备将来删除使用

3.3删除

源码包没有删除命令, 如果需要删除, 可以直接删除安装目录

3.4打入补丁

3.4.1补丁的生成

diff 选项 old new

#比较old和new文件的不同

选项:

        -a: 将任何文档当作文本文档处理

        -b: 忽略空格造成的不同

        -B: 忽略空白行造成的不同

        -I: 忽略大小写造成的不同

        -N: 当比较两个目录的时候, 如果某个文件只在一个目录中, 则在另一个目录中视作空文件

        -r: 当比较目录时, 递归比较子目录

        -u: 使用同一的输出格式

举例:

比较下两个文件的不同, 并生成补丁文件"txt.patch".

diff -Naur old.txt new.txt > txt.patch        # 比较两个文件的不同, 同时生成补丁文件

#后一个文件比前一个文件多两行(+表示)

3.4.2打入补丁

patch -pn < 补丁文件    # 按照补丁文件进行更新

选项:

        -pn: n为数字, 代表按照补丁文件中的路径, 指定更新文件的位置

接下来, 我们更新下"old.txt"文件,命令如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/621382.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32——高级定时器输出比较模式实验

1高级定时器输出比较模式实验 1.1高级定时器输出比较模式实验原理 1.2高级定时器输出比较模式实验实验配置步骤 1&#xff0c;配置定时器基础工作参数 HAL_TIM_OC_Init() 2&#xff0c;定时器PWM输出MSP初始化 HAL_TIM_OC_MspInit() 配置NVIC、CLOCK、GPIO等 3&#xff0c;配…

ssm基于Java的超市管理系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本超市管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&am…

Vue3 如何使用移动端调试工具vConsole

1、安装 pnpm i vconsole2、在src/utils下新建vconsole.ts&#xff0c;写入以下代码 // 这是移动端控制台调试工具&#xff0c;需要调试就打开,不用就注释 import vConsole from vconsole const vconsole new vConsole()3、src/main.ts 引入&#xff0c;需要调试就打开,&…

高级分布式系统-第9讲 实时调度--静态调度与动态调度

静态调度 在静态调度中&#xff0c;任务组的调度表是通过离线计算得出的。在调度表的生成过程中&#xff0c;必须把所有任务的资源、优先级和同步要求考虑进去&#xff0c;并且确保所有的截止时间要求。这个调度表指明了各个任务的运行起始时间 &#xff0c;一旦生成就不再变化…

vue2配置教程

5.12.3 Vue Cli 文档地址: https://cli.vuejs.org/zh/ IDEA 打开项目&#xff0c;运行项目

Java基本数据类型boolean占用几个字节?

我们知道Java中的基本数据类型有以下几种 char占用2个字节 boolean占用1个字节或者4个字节(稍后解释) byte占用1个字节 short占用2个字节 int占用4个字节 long占用8个字节 float占用4个字节 double占用8个字节 char a a; boolean b false; int c 1; ......当我们在对这些基…

js检测网址是否可访问,javascript检测网址是否可访问,支持跨域;

js检测网址是否可访问&#xff0c;javascript检测网址是否可访问&#xff0c;支持跨域&#xff1b; <!DOCTYPE html> <html> <head><meta name"viewport" content"widthdevice-width" /><title>url检测是否可访问</tit…

从生活入手学编程(1):Edge浏览器设置自动刷新专业教程

一、前言 我们都知道&#xff0c;Edge浏览器运行时的速度卡的实在是感人…… 于是今天&#xff0c;我就突发奇想&#xff0c;来看一看怎么刷新并且还能保留页面内容。 二、探索 首先&#xff0c;我在此提醒您&#xff0c;在使用这种方法时要非常小心。因为更改网页源代…

MySQL——深入数据库原理(事务及锁)

文章目录 锁行级锁共享 (S) 锁排他 (X) 锁间隙锁 表级锁意向锁自增锁Lock Table/DDL 事务ACID 原则1. 原子性 A2. 一致性 C3. 隔离性 I4. 持久性 D 隔离级别1. READ UNCOMMITTED&#xff08;未提交读&#xff09;2. READ COMMITTED&#xff08;提交读&#xff09;3. REPEATABLE…

webpack魔法注释-预获取/预加载模块

Webpack v4.6.0 增加了对预获取&#xff08;prefetch&#xff09;和预加载&#xff08;preload&#xff09;的支持。 在声明 import 时&#xff0c;使用下面这些内置指令&#xff0c;可以让 webpack 输出“resource hint”&#xff0c;来告知浏览器&#xff1a; prefetch&…

【JavaWeb】Web程序设计期末复习总结

试题 一. 单选题&#xff08;共24题&#xff0c;24分&#xff09; 二. 多选题&#xff08;共16题&#xff0c;32分&#xff09; 三. 填空题&#xff08;共20题&#xff0c;10分&#xff09; 四. 判断题&#xff08;共30题&#xff0c;15分&#xff09; 五. 论述题&#xf…

基于TOGAF和WAF的企业级架构

TOGAF是技术无关的企业级架构框架&#xff0c;WAF则侧重于云的最佳实践和指导方针&#xff0c;本文介绍了两者的异同。原文: Enterprise Architecture with TOGAF and Well-Architected Frameworks (AWS, Azure and Google) 简介 本文旨在解释TOGAF和云架构框架/良好架构框架(W…

IaC基础设施即代码:使用Terraform 连接 alicloud阿里云

目录 一、实验 1.环境 2.alicloud阿里云创建用户 3.Linux使用Terraform 连接 alicloud 4.Windows使用Terraform 连接 alicloud 二、问题 1.Windows如何申明RAM 相关变量 2.Linux如何申明RAM 相关变量 3. Linux terraform 初始化失败 4.Linux terraform 计划与预览失败…

【LeetCode: 57. 插入区间+分类讨论+模拟】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

blender 导入到 Marvelous Designer

1&#xff09; 将模型的所有部分合并为一个单独的mesh 2&#xff09; 先调整计量单位&#xff1a; 3&#xff09;等比缩放&#xff0c;身高调整到180cm左右 4&#xff09;应用当前scale 首先&#xff0c;选中你要修改的物体&#xff0c;然后按下Ctrl-A键&#xff0c;打开应用…

CSAPP - bomblab 作弊方式2: gdb jump 命令, 以及修改 jne 为 nop 指令

CSAPP - bomblab 作弊方式2&#xff1a; gdb jump 命令&#xff0c; 以及修改 jne 为 nop 指令 厌倦了在 gdb 中一步步顺序执行 bomb 可执行程序。为什么不能自行控制程序的执行呢&#xff1f;跳到特定的函数去执行&#xff0c;又或者把原本要执行的指令改掉&#xff0c;gdb 里…

linux环境下安装postgresql

PostgreSQL: Linux downloads (Red Hat family)postgresql官网 PostgreSQL: Linux downloads (Red Hat family) 环境&#xff1a; centos7 postgresql14 选择版本 执行启动命令 配置远程连接文件 vi /var/lib/pqsql/14/data/postgresql.conf 这里将listen_addresses值由lo…

【位运算】【二分查找】【C++算法】100160价值和小于等于 K 的最大数字

作者推荐 【动态规划】【字符串】扰乱字符串 本文涉及的基础知识点 二分查找算法合集 位运算 LeetCode100160. 价值和小于等于 K 的最大数字 给你一个整数 k 和一个整数 x 。 令 s 为整数 num 的下标从1 开始的二进制表示。我们说一个整数 num 的 价值 是满足 i % x 0 且…

阿里云ingress配置时间超时的参数

一、背景 在使用阿里云k8s集群的时候&#xff0c;内网API网关&#xff0c;刚开始是用的是Nginx&#xff0c;后面又搭建了ingress。 区别于nginx配置&#xff0c;ingress又该怎么设置参数呢&#xff1f;比如http超时时间等等。 本文会先梳理nginx是如何配置&#xff0c;再对比…

优雅的删除链表元

王有志&#xff0c;一个分享硬核Java技术的互金摸鱼侠加入Java人的提桶跑路群&#xff1a;共同富裕的Java人 在数据结构&#xff1a;链表中&#xff0c;我们实现了链表的删除方法&#xff0c;但代码看起来并不“优雅”&#xff0c;那么今天我们就来尝试使用多种方法&#xff0c…