3.4 Linux 软件管理

一. RPM 软件包管理器

1、软件包介绍

RPM(RedHat Package Manager)软件包:扩展名为“.rpm”。RPM本质上就是一个包,包含可以立即在特定机器体系结构上安装和运行的Linux软件。安装RPM软件包需要使用rpm命令或yum命令。

源代码软件包:软件包文件的后缀为.tar.gz、tar.Z、tar.bz2或.tgz。这种软件包是程序开发完成的原始代码,它的内容多是一种可编译运行的源代码。安装源码包需要使用相应的编译工具,如linux中的C/C++语言编译器gcc、gcc-c++。

开放源代码的自由软件绝大多数选择以TarBall的形式发布,而RPM软件包、DEB软件包等则使用了二进制的文件格式,代码相对比较封闭。

RPM软件包命名格式:

  • 2.4.6 是软件的版本号,版本号的格式为:主版本号.次版本号.修正号。
  • 80是版本号发布次数,表示这个RPM包是第几次编译生成的。
  • 硬件平台通常为i386或i686、x86_64、noarch等,表示适用的硬件平台,x86_64表示适用于64位的系统,如果是noarch表示不区分硬件架构。
mount 命令
  • 描述:挂载一个分区或者文件系统到系统目录下
  • 语法:mount [选项] device dir
mkdir /mnt/cdrom			# 创建挂载目录
mount /dev/sr0 /mnt/cdrom	# 挂载sr0至/mnt/cdrom/,sr0写保护,将以只读方式挂载
ls -la /mnt/cdrom/Packages/ | more	# 查看光盘中的rpm包
df 命令
  • 描述:检查文件系统的磁盘空间占用情况
  • 语法:df -h
df -h						# 查看磁盘空间占用情况

umount 命令
  • 描述:卸载以挂载的文件系统
  • 语法:umount 设备或挂载目录
umount /dev/sr0			# 卸载sr0设备
rpm 命令
  • 描述:查询、操作、维护rpm软件包相关信息
  • 语法:rpm [选项] 软件名
  • 查询未安装的rpm 软件信息
    • -qpi:通过.rpm包文件查看该软件的详细信息
    • -qpl:查看.rpm安装包内所包含的目录、文件列表
    • -qpc:查看.rpm安装包内包含的配置文件列表
    • -qpd:查看.rpm安装包内包含的文档文件列表
# 查询未安装的软件包的详细信息
rpm -qpi /mnt/cdrom/Packages/tree-1.6.0-10.el7.x86_64.rpm
# 查询未安装的软件包的目录、文件列表
rpm -qpl /mnt/cdrom/Packages/tree-1.6.0-10.el7.x86_64.rpm
# 查询未安装的软件包的配置文件列表
rpm -qpc /mnt/cdrom/Packages/tree-1.6.0-10.el7.x86_64.rpm
# 查询未安装的软件包的配置文件列表
rpm -qpd /mnt/cdrom/Packages/tree-1.6.0-10.el7.x86_64.rpm
  • 查询已安装的rpm 软件信息
    • -qa:查看系统中已安装的所有RPM软件包列表
    • -qi:查看指定软件的详细信息
    • -ql:查询指定软件包所安装的目录、文件列表
    • -qc:仅显示指定软件包安装的配置文件
    • -qd:仅显示指定软件包安装的文档文件
    • -qf: 查询文件或目录属于哪个RPM软件
rpm -qa | wc -l						# 查询主机已安装的rpm包总数量
rpm -qi kbd-1.15.5-15.el7.x86_64	# 查询已安装的 kbd 软件包的详细信息
rpm -ql kbd-1.15.5-15.el7.x86_64	# 查询已安装的 kbd 软件包的安装路径
rpm -qd kbd-1.15.5-15.el7.x86_64	# 查询已安装的 kbd 软件包的文档文件
rpm -qf /etc/pam.d/vlock			# 查询指定的文件属于哪个rpm软件包
  • 安装或升级rpm软件包
    • -i:安装一个新的rpm软件包
    • -v:显示软件安装过程中的详细信息
    • -h:在安装或升级软件包的过程中,以“#”号显示安装进度
    • -U:升级某个rpm软件,若原本未装,则进行安装
    • -F:更新某个rpm软件,若原本未装,则放弃安装
    • -e:卸载指定的RPM软件,格式:rpm -e 软件名
    • --force:强制安装所指定的rpm软件包
    • --nodeps:安装、升级或卸载软件时,忽略依赖关系
# 安装tree软件包
rpm -ivh /mnt/cdrom/Packages/tree-1.6.0-10.el7.x86_64.rpm
# 更新tree软件包
rpm -Uvh /mnt/cdrom/Packages/tree-1.6.0-10.el7.x86_64.rpm# 卸载tree软件包
rpm -qa | grep tree					# 查询已安装的 tree 软件包的名称
rpm -evh tree-1.6.0-10.el7.x86_64	# 卸载 tree 软件
tree 命令
  • 描述:以树状格式列出目录的内容, 查看文件系统的结构
  • 语法:tree [选项]… [文件]…
    • -L 目录树的最大显示深度
 tree -L 2 /mnt			# 以树状结构显示文件目录内容,最大深度为2

2、维护RPM数据库

RPM数据库(/var/lib/rpm目录下)用于记录在Linux系统中安装、卸载、升级应用程序的相关信息,由RPM包管理系统自动完成维护,一般不需要用户干预。当RPM数据库发生损坏(误删文件、非法关机、病毒破坏等导致),且Linux系统无法自动完成修复时,将导致无法使用rpm命令正常地安装、卸载及查询软件包。

# 向RPM数据库的文件中写入脏的数据,用来模拟数据库损坏
echo "123" > /var/lib/rpm/__db.001# 使用rpm命令,查看数据库损坏的情况会报什么错
rpm -qa | grep tree

# 清除损坏的rpm数据文件,并重建数据库信息
rm -rf /var/lib/rpm/__db.00*
# 重新使用rpm命令查询数据,命令可以正常使用
rpm -qa | grep tree
# 可以看到被删除的文件已经回复,数据库重建完成

3、导入验证公钥

安装软件包警告:

  • warning: /mnt/cdrom/Packages/lynx-2.8.8-0.3.dev15.el7.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 37017186

这是由于没有导入RedHat提供的公钥所致,导入公钥文件:

rpm --import /mnt/cdrom/RPM-GPG-KEY-CentOS-7		# 导入公钥文件
4、解决软件包依赖关系
  • 树形依赖:A-B-C-D: 安装时要从后往前安装先从D包开始、然后是C包......最后到A包
  • 环形依赖:A-B-C-D-A: 安装时要可以一条命令直接装完如:rpm -ivh A B C D
rpm -qa | grep vim		# 查看软件包依赖,卸载vim

# 卸载vim-common,此时存在依赖关系vim-enhanced依赖vim-common,所以会报错
# 先删除vim-enhanced
rpm -e vim-common-7.4.629-8.el7_9.x86_64

二. YUM 软件包管理器

YUM(Yellow dog Updater Modified), 一个基于RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包。

YUM的特点:

  • yum 提供了查找、安装、删除某一个、一组甚至全部软件包的命令 .
  • 所有软件包全部都在互联网中, 能够实现非常快速的更新、升级
  • 采取的C/S 架构模型
  • 可以同时配置多个资源库(Repository)
  • 简洁的配置文件(/etc/yum.conf)
  • 自动解决增加或删除rpm 包时遇到的依赖性
  • 保持与RPM 数据库的一致性

软件仓库的提供方式:

  • 本地目录:file:///.......
  • FTP服务:ftp://......
  • HTTP服务:http://......
1、YUM的配置文件
  • Yum配置文件:/etc/yum.conf
  • Yum仓库配置文件:/etc/yum.repos.d/
  • Yum日志文件:/var/log/yum.log
  • YUM缓存目录:/var/cache/yum/$basearch/$releasever
2、配置本地Yum仓库

在Centos7的安装光盘中,已经在Packages目录建好了repodata数据,因此我们只需要将centos7系统光盘挂载到指定目录或将光盘全部内容复制到指定即可。

# 将sr0光盘挂载至 /mnt/cdrom
mount /dev/sr0 /mnt/cdrom# 查看yum仓库的配置文件
ls /etc/yum.repos.d/

CentOS-*.repo是centos系统安装好后,系统默认提供的指向centos官方yum软件仓库的配置文件

# 备份yum仓库的配置文件到 /opt/yum_conf_bak/ 目录下
cp /ect/yum.repos.d/ /opt/yum_conf_bak/

创建本地仓库的配置文件:

# 创建本地仓库的配置文件
vim /etc/yum.repos.d/centos.repo[centos7]                												#仓库名称  
name=centos_7          												  #仓库描述信息 
baseurl=file:///mnt/cdrom  											#URL访问路径,即软件仓库的路径 
enabled=1               															# 启用此软件仓库
gpgcheck=0              															# 关闭gpg软件包签名验证 
#gpgcheck=1             															# 开启gpg软件包签名验证
#gpgkey=file://etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7   # GPG公钥文件的位置
3、yum 命令
  • 语法: yum [options] [command] package
    • 选项:
      • -y, --assumeyes 回答全部问题为是
      • --installroot=[path] 设置安装根目录
      • --enablerepo=[repo] 启用一个或多个软件源(支持通配符)
      • --disablerepo=[repo] 禁用一个或多个软件源(支持通配符)
      • -x [package], --exclude=[package] 采用全名或通配符排除软件包
    • 命令:

clean 删除缓存数据

list 列出一个或一组软件包

help 显示用法提示

history 显示或使用事务历史

info 显示关于软件包或组的详细信息

install 向系统中安装一个或多个软件包

groups 显示或使用、组信息

repolist 显示已配置的源

search 在软件包详细信息中搜索指定字符串

update 更新系统中的一个或多个软件包

upgrade 更新软件包同时考虑软件包取代关系

erase 从系统中移除一个或多个软件包

# 清除yum缓存包
yum clean all# 列出一个或一组软件包
yum list# 显示已配置的源
yum repolist

# 查看list命令帮助
yum help list

# 表示只列出系统中已安装的软件包
yum list installed# 表示只列出软件仓库中可用(尚未安装)的软件包
yum list available# 表示列出可以升级版本的软件包。
yum list update# 显示或使用事务历史
yum history list

# 查看事务为2的详细信息
yum history info 2

# 查看软件包的详细信息
yum list | grep vim
yum info vim-common.x86_64

# 使用yum安装一个软件
yum install -y wget# 安装运维必备工具
yum install -y lrzsz net-tools gcc gcc-c++# 查看yum仓库的软件包组
yum grouplist
yum groups

# 安装一个软件包组
yum help groups
yum groupintall GONME		# 安装GONME桌面
# yum卸载软件
yum help erase

# 卸载 tree
yum remove -y tree
# 查找软件包
yum search ifconfig# 安装net-tools
yum install -y net-tools# 安装 samba
yum install -y samba
4、配置yum网络源

网络源地址:

  • 阿里云:http://mirrors.aliyun.com/repo/Centos-7.repo
  • 网易:http://mirrors.163.com/.help/CentOS7-Base-163.repo
# 下载网络源repo文件
# wget -O,  --output-document=FILE    将文档写入 FILE
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/reps/Centos-7.repo# 更新网络源
yum clean all
yum repolist# 配置扩展源
yum install -y epel-release

三. 源代码编译安装程序

几乎所有的开源软件都支持在Linux下运行,而这些软件一般都以源码形式发放,只需要Linux安装了gcc、make、automake、autoconf都支持源码安装。

1、源代码安装的优缺点

源码安装的优点:

  • 获得最新的软件版本,及时修复bug
  • 根据用户需要,灵活定制软件功能
  • 因为可以定位到代码,所以debug方便
  • 本机兼容性最好(由于是本机编译的,只要编译通过,就没有各种库的依赖的问题)

源码安装的缺点:

  • 编译麻烦
  • 缺乏自动依赖管理,软件升级麻烦
2、源代码安装前的准备工作

源代码下载:.tar.gz和.tar.bz2 格式居多,源代码下载推荐去官网下载

完整性校验:

md5sum校验工具,计算MD5校验和,并与官方提供的值相比较,判断是否一致,若相同则说明该软件包没有被非法改动,对于校验和不一致的软件包,应尽量不要使用,以避免带来病毒、木马等不安全因素。

确定源代码编译环境:需安装支持C/C++程序语言的编译器

rpm -qa | grep gcc
yum install -y gcc gcc-c++

源码包安装流程:

获得所需安装的软件源代码以后,安装的基本过程包括解包、配置(检查安装环境、并对软件的安装目录、功能选择等参数进行预先设置)、编译和安装这几个通用步骤,如图所示,大多数开源软件的安装都遵循这个过程。当然,这四个步骤并不是一成不变的,实际安装时应参考软件自带的相关文档,如INSTALL、README

3、tar 命令
  • 描述:解压缩文件
  • 语法:tar [options] packages

-z, --gzip, --gunzip, --ungzip 通过 gzip 过滤归档

-v, --verbose 详细地列出处理的文件

-x, --extract, --get 从归档中解出文件

-f, --file=ARCHIVE 使用归档文件或 ARCHIVE 设备

-c, --create 创建一个新归档

-C, --directory=DIR 改变至目录 DIR

4、./configure 命令
  • 描述:预编译主要检测当前操作系统软件编译安装环境,如果检测缺少库文件或者软件包,需要手动安装
  • 语法:./configure [options] [VAR=Value]

--help 使用此参数可查看configure支持的详细参数信息

--prefix=PREFIX 指定安装路径,默认安装到/usr/local目录下

--sysconfdir=DIR 指定配置文件路径

5、源码安装 Apache

下载地址:

  • Index of /dist/httpd
  • Download - The Apache HTTP Server Project
a. 下载并解压
# 下载 httpd
wget http://archive.apache.org/dist/httpd/httpd-2.4.54.tar.gz# 解压归档压缩包至/usr/local/src目录下:
tar -zxvf httpd-2.4.54.tar.gz -C /usr/local/src# 进入解压目录查看目录结构
cd /usr/local/src/httpd-2.4.54
b. 编译并安装
# 预编译当前操作系统的软件环境
./configure --prefix=/usr/local/apache
# 检测上一条命令是否执行成果,0是成功,1是失败
echo $?			# 此处输出1,error:ARP not found# 检测并安装apr
yum list | grep apr# 安装Apache依赖包
yum -y install apr apr-devel apr-util apr-util-devel pcre pcre-devel# 再次预编译
./configure --prefix=/usr/local/apache# 编译
make -j 2
echo $?# 安装
make install
c. 启动程序并访问
# 清理安装包
rm -rf /usr/local/src/httpd-2.4.54# 查看apache安装目录
ls /usr/local/apache# 启动apache/usr/local/apache/bin/apachectl start# 查看apache端口号netstat -antup | grep 80# 关闭防火墙systemctl stop firewalld

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

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

相关文章

PC端微信@所有人逻辑漏洞

(一)过程 这个漏洞是PC端微信,可以越权让非管理员艾特所有人,具体步骤如下 第一步:找一个自己的群(要有艾特所有人的权限)“123”是我随便输入的内容,可以更改,然后按c…

Mac M3 芯片安装 Nginx

Mac M3 芯片安装 Nginx 一、使用 brew 安装 未安装 brew 的可以参考 【Mac 安装 Homebrew】 或者 【Mac M2/M3 芯片环境配置以及常用软件安装-前端】 二、查看 nginx 信息 通过命令行查看 brew info nginx可以看到 nginx 还未在本地安装,显示 Not installed …

百望云斩获“新华信用金兰杯”ESG优秀案例 全面赋能企业绿色数字化

近年来,中国ESG蓬勃发展,在政策体系构建、ESG信披ESG投资和国际合作等方面都取得了阶段性成效,ESG生态不断完善。全社会对ESG的认识及实践也在不断深化,ESG实践者的队伍在不断发展壮大。 ESG作为识别企业高质量发展的重要指标&…

Kafka(三)生产者发送消息

文章目录 生产者发送思路自定义序列化类配置生产者参数提升吞吐量 发送消息关闭生产者结语示例源码仓库 生产者发送思路 如何确保消息格式正确的前提下最终一定能发送到Kafka? 这里的实现思路是 ack使用默认的all开启重试在一定时间内重试不成功,则入库&#xff…

VS Code画流程图:draw.io插件

文章目录 简介快捷键 简介 Draw.io是著名的流程图绘制软件,开源免费,对标Visio,用过的都说好。而且除了提供常规的桌面软件之外,直接访问draw.io就可以在线使用,堪称百分之百跨平台,便捷性直接拉满。 那么…

TOUGH系列软件教程

查看原文>>>全流程TOUGH系列软件实践技术应用 TOUGH系列软件是由美国劳伦斯伯克利实验室开发的,旨在解决非饱和带中地下水、热运移的通用模拟软件。和传统地下水模拟软件Feflow和Modflow不同,TOUGH系列软件采用模块化设计和有限积分差网格剖分…

(八)Spring源码解析:Spring MVC

一、Servlet及上下文的初始化 1.1> DispatcherServlet的初始化 对于Spring MVC来说,最核心的一个类就是DispatcherServlet,它负责请求的行为流转。那么在Servlet的初始化阶段,会调用init()方法进行初始化操作,在DispatcherSe…

第三天课程 RabbitMQ

RabbitMQ 1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应。 异步通讯:就像发邮件,不需要马上回复。 两种方式各有优劣,打电话可以立即得到响应&am…

数据库事务相关问题

1. 什么是数据库事务? 事务,由一个有限的数据库操作序列构成,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。 假如A转账给B 100 元,先从A的账户里扣除 100 元,再在 B 的账户上加上 100 …

python自动化第一篇—— 带图文的execl的自动化合并

简述 最近接到一个需求,需要为公司里的一个部门提供一个文件上传自动化合并的系统,以供用户稽核,谈到自动化,肯定是选择python,毕竟python的轮子多。比较了市面上几个用得多的python库,我最终选择了xlwings…

SOME/IP学习笔记3

目录 1.SOMEIP Transformer 1.1 SOME/IP on-wire format 1.2 协议指定 2. SOMEIP TP 2.1 SOME/IP TP Header 3.小结 1.SOMEIP Transformer 根据autosar CP 相关规范,SOME/IP Transformer主要用于将SOME/IP格式的数据序列化,相当于一个转换器。总体…

uniapp+vite+vue3开发跨平台app,运行到安卓模拟器调试方法

因为没有使用hbuilder开发uniapp,而是使用了vscode和vite来开发的,所以怎么将这个程序运行到安卓模拟器调试开发呢?其实方法很简单,使用android studio创建一个模拟器或者其他mumu模拟器,然后将项目使用hbuilder打开&a…

macos死机后IDEA打不开,Cannot connect to already running IDE instance.

Cannot connect to already running IDE instance. Exception: Process 573 is still running 解决办法 进入:/Users/lzq/Library/Application Support/JetBrains 找到IDEA的目录删除隐藏文件夹 .lock rm -rf .lock

黑马程序员微服务 第五天课程 分布式搜索引擎2

分布式搜索引擎02 在昨天的学习中,我们已经导入了大量数据到elasticsearch中,实现了elasticsearch的数据存储功能。但elasticsearch最擅长的还是搜索和数据分析。 所以今天,我们研究下elasticsearch的数据搜索功能。我们会分别使用DSL和Res…

入选《人工智能领域内容榜》

入选《人工智能领域内容榜》第 23名 C# OpenCvSharp DNN HybridNets 同时处理车辆检测、可驾驶区域分割、车道线分割-CSDN博客

Playwright UI 自动化测试实战

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

Semantic Kernel 学习笔记1

1. 挂代理跑通openai API 2. 无需魔法跑通Azure API 下载Semantic Kernel的github代码包到本地,主要用于方便学习python->notebooks文件夹中的内容。 1. Openai API:根据上述文件夹中的.env.example示例创建.env文件,需要填写下方两个内…

Vue 简单的语法

1.插值表达式 1.插值表达式的作用是什么? 利用表达式进行插值,将数据渲染到页面中; 2.语法结构? {{表达式}} 3.插值表达式的注意点是什么? (1)使用的数据要存在,在data中&…

错误:ERROR:torch.distributed.elastic.multiprocessing.api:failed

在多卡运行时,会出现错误(ERROR:torch.distributed.elastic.multiprocessing.api:failed),但是单卡运行并不会报错,通常在反向梯度传播时多卡梯度不同步。但我是在多卡处理数据进行tokenizer阶段报错,这竟然…

仿真算法收敛与初值的关系

问题: 当电路中存在大电容时,由于初值设置不合理可能导致的仿真算法不收敛的问题。 解决方法:设置初始节点值。 疑问:Node set和Initial Condition的区别。 [求助] node set 和initial condition有很么区别呢? 注&…