【Linux】RPM软件包和Yum软件仓库、apt

2023-11-04

RPM

简介

  • RPM Package Manager,RPM 包管理器
    由红帽公司提出,Redhat、SUSE 等系列采用
    建立集中数据库,记录软件包安装/卸载等变化信息,分析软件包依赖关系
  • RPM 包 文件名特征
    软件名-版本信息.操作系统.硬件架构.rpm
    bash-4.2.46-30.el7.x86_64.rpm
    操作系统:e 代表企业版,l 代表 linux

常见的软件封包类型

封包类型 说明
rpm软件包 扩展名.rpm,适用于RedHat系列
deb软件包 拓展名.deb,适用于Debian系列
源代码软件包 以.tar.gz,.tar.bz2格式的压缩包提供包含程序的原始代码啊文件
其他 提供install.sh,setup, *.bin, *.pl等安装文件,绿色免安装、提供一边一号的程序及文件

常见安装位置

RPM包的一般安装位置(分散)
在这里插入图片描述

查询已安装 RPM 包软件信息

格式:rpm -q[子选项] 软件名#查询软件当前系统是否安装
常用的子选项
-a:列出已安装所有软件包
-i:查看指定软件的详细信息
-l:查看指定软件的文件安装清单

# csdn @ edu in ~ [21:18:42] 
$ rpm -q firefox 
package firefox is not installed

# csdn @ edu in ~ [21:19:22] C:1
$ rpm -q zip
package zip is not installed

# csdn @ edu in ~ [21:19:29] C:1
$ rpm -qi firefox
package firefox is not installed

# csdn @ edu in ~ [21:19:35] C:1
$ rpm -ql firefox
package firefox is not installed
# csdn @ edu in ~ [21:20:06] 
$ rpm -qa | wc -l
210

# csdn @ edu in ~ [21:20:17] 
$ rpm -qa | grep vim
vim-minimal-7.4.629-6.el7.x86_64

rpm -qf [文件路径]... 查询某个文件、目录是哪个RPM包带来的,即便目录文件被删除,也可以查询

[root@localhost ~]# rpm -qf /bin/bash /etc/inittab
bash-4.4.19-10.el8.x86_64
systemd-239-29.el8.x86_64

查询未安装的 RPM 安装软件

格式:rpm -q[子选项] [RPM 包文件(包名必须打完整)]

常用的子选项

-pi:查看指定软件的详细信息
-pl:查看指定软件的文件安装清单

[root@localhost ~]# ls /mnt/Packages/vsftpd-*
[root@localhost ~]# rpm -qpi /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm #详细信息
[root@localhost ~]# rpm -qpl /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm #安装清单

安装/卸载 RPM 包软件

安装:

格式:rpm -i rpm 包文件

选项:

-v:显示安装细节
-h:以#号显示安装进度

  • 安装软件包 vsftpd:
[root@localhost ~]# rpm -q vsftpd #查看,未安装 vsftpd
[root@localhost ~]# rpm -ivh /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm #安装 vsftpd 软件
包,会有警告,忽略即可
[root@localhost ~]# rpm -q vsftpd #再次查看已经安装
  • 若想解决警告问题,直接直接导入红帽签名信息即可
[root@localhost ~]# rpm --import /mnt/RPM-GPG-KEY-CentOS-7 #导入签名信息
[root@localhost ~]# rpm -e vsftpd #卸载 vsftpd 软件包
[root@localhost ~]# rpm -ivh /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm #重新安装

卸载

格式:rpm -e 软件名 ...

[root@localhost ~]# rpm -e lynx iptraf
error: package lynx is not installed
error: package iptraf is not installed
[root@localhost ~]# rpm -q lynx iptraf
package lynx is not installed
package iptraf is not installed

查询已安装的软件包某个目录/文件是哪个 RPM 带来的

格式:rpm -qf [文件路径]...(即使目标文件被删除也可以查询)

[root@localhost ~]# rm -rf /usr/bin/hostname
[root@localhost ~]# ls /usr/bin/hostname
ls: 无法访问/usr/bin/hostname: 没有那个文件或目录
[root@localhost ~]# rpm -qf /usr/bin/hostname
[root@localhost ~]# rpm -ivh /mnt/Packages/hostname-3.13-3.el7.x86_64.rpm
[root@localhost ~]# ls /usr/bin/hostname
ls: 无法访问/usr/bin/hostname: 没有那个文件或目录
[root@localhost ~]# rpm -ivh --force /mnt/Packages/hostname-3.13-3.el7.x86_64.rpm
#--force: 强制安装
[root@localhost ~]# ls /usr/bin/hostname #有程序文件

软件依赖关系

解决依赖关系

  • 先安装/卸载要求的包
  • 如果RPM包齐全但比较多,可以使用通配符*

忽略依赖关系(不推荐)

  • 可能导致软件运行异常
  • 辅助选项 --nodeps

安装失败:

[root@localhost ~]# rpm -ivh /mnt/Packages/bind-chroot-9.9.4-61.el7.x86_64.rpm
错误:依赖检测失败:
bind = 32:9.9.4-61.el7 被 bind-chroot-32:9.9.4-61.el7.x86_64 需要

安装成功:

[root@localhost ~]# rpm -ivh /mnt/Packages/bind-9.9.4-61.el7.x86_64.rpm
准备中… ################################# [100%]
正在升级/安装…
1:bind-32:9.9.4-61.el7 ################################# [100%]
[root@localhost ~]# rpm -ivh /mnt/Packages/bind-chroot-9.9.4-61.el7.x86_64.rpm

Yum仓库

简介

YUM,yellowdog updater modified

  • 基于RPM包构建的软件更新机制
  • 自动解决软件包依赖关系
  • 所有软件包由集中的YUM软件仓库提供

准备本地YUM仓库

软件仓库的提供方法

  • 本地目录:file://…
  • FTP或HTTP服务:ftp://…、http://…

RPM软件包的来源

  • Red Hat 发布的RPM包集合
  • 第三方、用户定义的RPM包集合

Yum仓库构建(既做服务端又做客户端)

在这里插入图片描述
在这里插入图片描述

影响yum使用的主要文件

  • 基本设置:/etc/yum.conf
  • 仓库配置:/etc/yum.repos.d/*.repo
  • 日志文件:/var/log/yum.log

.repo 基本配置项

  • [源名称]:自定义名称,具有唯一性
  • name:本软件源的描述字串
  • baseurl:指定YUM服务端的URL地址
  • enabled:是否启用此频道
  • gpgcheck:是否验证待安装的RPM包
  • gpgkey:用于RPM软件包验证的密钥文件

Red Hat 具体搭建代码

tips:挂载操作时,需要确保虚拟机连接好镜像文件
具体操作如下:

  1. 在这里插入图片描述

  2. 设置

  3. 在这里插入图片描述

1、部署yum仓库,并设置成开机自动挂载
[root@localhost ~]# mkdir /dvd
[root@localhost ~]# mount /dev/cdrom /dvd
mount: /dvd: WARNING: device write-protected, mounted read-only.
[root@localhost ~]# ls /dvd
AppStream  EULA              images      RPM-GPG-KEY-redhat-beta
BaseOS     extra_files.json  isolinux    RPM-GPG-KEY-redhat-release
EFI        GPL               media.repo  TRANS.TBL
[root@localhost ~]# ls /dvd/AppStream/
Packages  repodata
[root@localhost ~]# ls /dvd/BaseOS/
Packages  repodata
[root@localhost ~]# ls /etc/yum.repos.d/
[root@localhost ~]# vim /etc/yum.repos.d/dvd.repo
[AppStream]							##第一个软件仓库
name=rhel8.2
baseurl=file:///dvd/AppStream
enabled=1
gpgcheck=0
[BaseOS]								##第二个软件仓库
name=rhel8.2
baseurl=file:///dvd/BaseOS
enabled=1
gpgcheck=0
:wq
[root@localhost ~]# yum clean all
[root@localhost ~]# yum repolist -v
... ....
仓库标识                               仓库名称
AppStream                              rhel8.2
BaseOS                                 rhel8.2
[root@localhost ~]# yum list | wc -l		##查看软件包数量
6606


Yum仓库使用

查询软件信息

查看软件列表

yum list [软件名]...

在这里插入图片描述

检索软件及相关信息

-yum search 关键词 查询关键字

-yum info [软件包]... 查看软件的描述

-yum provides 文档路径...

在这里插入图片描述

安装、卸载软件包

软件包基本操作
  • 格式:yum [-y] 指令 [软件名] ...
常用指令
  • install :安装指定软件包,类似于rpm -i
    在这里插入图片描述

  • remove:卸载指定软件包,类似于rpm -e
    在这里插入图片描述
    在这里插入图片描述

清空本地yum缓存

适用于yum缓存存在错误时
再次查询或更新时,会自动重建缓存

在这里插入图片描述

apt

引言

apt(Advanced Packaging Tool)是一个在 Debian 和 Ubuntu 中的 Shell 前端软件包管理器。

apt 命令提供了查找、安装、升级、删除某一个、一组甚至全部软件包的命令。

学习apt的原因是因为做一份作业centos和Ubuntu同时死机!!!!于是安装了kali,没想到kali居然无法用rpm,但其实Ubuntu也没有rpm的内核,kali属于Ubuntu的一种,与Ubuntu一样,拥有apt这样类似于rpm的包管理工具。

apt的权限

一些apt命令需要对/etc/apt, /etc/cache, /var/cache/apt, /var/lib/apt进行读写操作,这些命令需要sudo权限。

而对于下载包、显示包信息、检索包等,则无需sudo权限。

格式

 apt [options] [command] [package ...]

options:可选,选项包括 -h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)等等。
command:要进行的操作。
package:安装的包名。

apt 常用命令

需要sudo权限的操作

列出所有可更新的软件清单命令

sudo apt update

软件包索引是一个保存了deb包的版本(这是与rpm不同的地方)、资源地址等信息的文件。如果长久不更新,那么新版本的软件包将不会被其他apt相关命令下载安装。

实例

在这里插入图片描述

升级
升级软件包,升级前先删除需要更新软件包
sudo apt full-upgrade
实例

在这里插入图片描述

升级单个程序包

格式: sudo apt upgrade package_name

自动升级
sudo apt install unattended-upgrades

安装完成后自动升级服务将自行启动,可以通过systemctl status unattended-upgrades来验证这一点。

安装软件包

格式:sudo apt install <package_name>

  • 在线安装单个或多个软件包
sudo apt install package1 package2...
  • 或是安装本地deb包
sudo apt install /path_to_deb/file.deb/
安装指定版本号
sudo apt install <package_name>=<version_number>
移除软件包
remove

删除软件包
apt remove
格式

  • 移除单个或多个软件包
sudo apt remove package1 package2 ...
purge

移除软件包及配置文件

sudo apt purge package_name
自动移除未使用的包apt autoremove

每安装一个包,其依赖也会被安装。移除此包时会保留这些依赖包,因此需要自动移除未使用的包

sudo apt autoremove
显示已安装的所有软件包清单
sudo apt list

无需sudo权限的apt命令

下载软件包

格式

apt download package_name
查看某个包是否可用:使用grep命令
sudo apt list | grep package_name
查看已安装包
apt list --installed
查看可升级的包
apt list --upgradeable
实例

在这里插入图片描述

由于前面都更新了,所以没有可更新包了

搜索包
apt search package_name
查看包信息
apt show package_name
列出所有已安装的包的版本信息
apt list --all-versions
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Linux】RPM软件包和Yum软件仓库、apt 的相关文章

  • Linux 内核中的 64 位 time_t

    我已经编译了内核 3 19 1 但仍然有问题time t 只是一个简单的程序cout lt lt sizeof time t 给出 4 个字节的大小 而不是我的意图的 8 个字节 我应该在 make menuconfig 期间打开特定选项吗
  • 从哪个 Linux 内核/libc 版本开始,Java Runtime.exec() 在内存方面是安全的?

    在工作中 我们的目标平台之一是运行 Linux 的资源受限的迷你服务器 内核 2 6 13 基于旧 Fedora Core 的自定义发行版 该应用程序是用 Java Sun JDK 1 6 04 编写的 Linux OOM Killer 配
  • 如何从存储在 char* 指针中的 name 调用 c 函数?

    我想通过函数的名称动态调用函数 例如 假设有以下函数和字符串 void do fork printf Fork called n char pFunc do fork 现在我需要打电话do fork 就在 pFunc 那么这可能吗 欢迎 C
  • WSL gprof 报告零次

    我正在尝试在 Windows 10 上的 WSL 中使用 gprof 我没有预料到会遇到任何困难 因为上次我在 Windows 7 上的 Ubuntu 虚拟盒中使用它时它工作得很好 与以前一样遵循来自https www thegeekstu
  • 字符串常量之前的预期标识符

    有一个这样的程序 include
  • 错误:‘:’标记之前需要初始化程序

    我正在尝试编译一些 C 代码 可以在 Windows 上使用 Visual Studio 2012 进行编译 g 4 4 我有这段代码 const std string cnw restoreSession const std vector
  • 如何重新安装cudnn?

    安装Cudnn 4 0 4后 我发现如果我想运行我下载的代码 我需要更高版本的Cudnn 然后我下载 cudnn 7 0 linux x64 v4 0 prod tgz 并直接按以下顺序安装 sudo cp include cudnn h
  • 移动除一个文件之外的所有文件

    如何移动除一个文件之外的所有文件 我正在寻找类似的东西 mv Linux Old Tux png Linux New 我将旧的东西移动到新的东西文件夹中 除了Tux png 符号代表否定 有一些工具可以完成这项工作吗 如果您使用 bash
  • Linux 是否允许从信号处理程序进行任何系统调用?

    我的理解是 一般来说 如果您从信号处理程序调用非异步信号安全函数 则行为是未定义的 但我听说 Linux 允许您安全地调用任何系统调用 这是真的 另外 SIGSEGV 处理程序的唯一可移植行为是中止或退出 但我知道如果返回 linux 实际
  • Linux GCC 上 的 C++ 编译问题

    尝试过谷歌并在这里搜索 但没有运气 我正在尝试将一些使用 Windows 的代码移植到 Linux 上 然后我得到了大量的编译错误 我所做的只是 include
  • 当我执行 pip --version 时,它显示错误为 ImportError:没有名为 pyparsing 的模块

    我尝试安装 卸载py解析以及它不起作用 我被这个问题困住了 我还必须安装额外的库 这是错误消息 Traceback most recent call last File usr bin pip line 5 in
  • Zip 实用程序在 Linux 中每次都给我不同的 md5sum

    当我在 Linux 中压缩 Zip 2 31 同一个文件时 每次都会得到不同的校验和 如何保持上次的 md5sum 相同 我正在使用 yum 提供的最新 zip 更新 生成的存档不仅包含压缩文件数据 还包含 额外的文件属性 如参考zip 文
  • 如何在多行而不是单行输出上打印 Linux 组名称

    我尝试过 getent group 命令 id Gn user 和一些 sed 组合 但我认为我无法实现 因此向其他程序员伸出援手 我希望能够打印此 groups abc123输出 abc123 devops 构建测试设计 预期输出 gro
  • top命令的CPU使用率计算

    我正在尝试使用 GNU coreutil top 的公式来计算 CPU 使用率的百分比 但 top 正在使用一些 half total 来计算百分比 即在百分比上添加 0 5 在top的utils c中 以下行 在 3 8 beta1 中
  • 在Linux服务器中安装ZLIB

    我要安装ZLIB http www techsww com tutorials libraries zlib installation installing zlib on ubuntu linux php在Linux服务器中 我的服务器帐
  • 32 位 x86 汇编中堆栈对齐的职责

    我试图清楚地了解谁 调用者或被调用者 负责堆栈对齐 64 位汇编的情况相当清楚 它是由caller 请参阅系统 V AMD64 ABI 第 3 2 2 节栈帧 输入参数区域的末尾应按 16 对齐 32 如果 m256 在堆栈 字节边界上传递
  • UNIX 域 STREAM 和 DATAGRAM 套接字之间的区别?

    这个问题是NOTSTREAM 类型和 DATAGRAM 类型 INTERNET 套接字之间的区别 我知道 STREAM 套接字使用 TCP 数据报套接字使用 UDP 以及所有 TCP UDP 内容 按顺序到达的数据包 ACK NACK 等
  • H.323,如何制作一个没有媒体的简单环。该脚本遵循 Q.931 设置,但仍然无法正常工作

    谁能帮我解决这个问题吗 当我发送此请求时 我在wireshark中看到数据包将发送到1720 tcp端口中的SJPhone 但 SJPhone 仍然没有响铃 我想让它响起 无论媒体 我非常感谢您的支持 我一定缺少消息协议细节来实现这个 请给
  • 如何安装 Node 和 NPM 以便不必使用 sudo?

    我正在尝试在 Ubuntu 14 04 计算机上设置 Node js 和 NPM 但遇到了一些问题 在我的第一次尝试中 我不断得到EACCES尝试安装软件包时出错 有时甚至使用sudo 所以我彻底卸载了node和npm 现在我正在尝试找出如
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也

随机推荐

  • 计算机视觉基础(十)—— HOG特征描述算子之行人检测

    本次任务将学习一种在深度学习之前非常流行的图像特征提取技术 方向梯度直方图 Histogram of Oriented Gradients 简称HOG特征 HOG特征是在2005年CVPR的会议发表 在图像手工特征提取方面具有里程碑式的意义
  • JAVA基础:线程池的使用

    目录 1 概述 2 线程池的优势 2 1 线程池为什么使用自定义方式 2 2 封装的线程池工具类有什么好处 3 线程池的七大参数 3 线程池的创建 3 1 固定数量的线程池 3 2 带缓存的线程池 3 3 执 定时任务 3 4 定时任务单线
  • Linux查看tomcat安装路径

    查看tomcat安装路径 查看tomcat安装路径 sudo find name tomcat
  • python调用c++之pybind11

    之前一直从事c 相关算法及代码的相关工作 因公司内部代码管理需要 需将算法封装待python平台使用 根据此需求 对python调用c 代码的方式进行了学习 最终综合考虑封装难度及多代码管理使用pybind11进行了相关功能的实现 pybi
  • css实现图片和文字水平居中对齐

    方式一 vertical align middle 通过vertical align middle实现现图片与文字水平对齐 需要区分html是行内元素 还是块状元素 例如 标签img span是行内元素 标签p是块状元素则需要将标签p通过d
  • 【云原生之kubernetes实战】在k8s环境下部署Halo博客系统

    云原生之kubernetes实战 在k8s环境下部署Halo博客系统 一 Halo介绍 1 Halo简介 2 Halo特点 二 环境规划 1 本次实践环境规划 2 本次实践说明 三 环境检查 1 检查工作节点状态 2 检查系统pod状态 四
  • Github注册中,邮箱验证通不过解决办法

    使用谷歌注册的时候 验证收不到消息 1 注册出现如图问题 2 在注册失败的页面 点返回的箭头 点了之后不要动 3 然后进入开启一个新的页面 复制下面的链接 进去页面 可能有点慢 等一等 OctoCaptchahttps octocaptch
  • python爬虫的学习总结

    背景 基于django框架完成jira网页数据的爬取 由于对爬虫知识知道的太少 我开始了新的学习之旅 本文前半部分都是记录这一周主要的错误 如果想直接看最终成果 可以跳到本文 成功爬取 部分浏览 学习爬虫知识 在知道了本项目可能需要爬虫后
  • C语言求解由1,2,3,4,四位数字构成的互不相同且无重复数字的四位数

    采用多重循环的方式即可 首先明确一共有四个数字供选择 组成的是四位数 那么在个 十 百 千的取值上 就只能有一位是1 一位是2 一位是3 一位是4 代码如下 include
  • 【Rust】2、实战:文件、网络、时间、进程-线程-容器、内核、信号-中断-异常

    文章目录 七 文件和存储 7 2 serde 与 bincode 序列化 7 3 实现一个 hexdump 7 4 操作文件 7 4 1 打开文件 7 4 2 用 std fs Path 交互 7 5 基于 append 模式实现 kv数据
  • 2023-9-14 最长公共子序列

    题目链接 最长公共子序列 include
  • oracle导出后 ascii编码转utf-8问题

    1 在设置如下环境变量后 从oracle中导出的中文字符为乱码 export NLS LANG AMERICAN AMERICA ZHS16GBK 2 在Linux上用file i命令查看 编码格式如下 xy w2 backimage tx
  • Mybatis-plus动态条件查询QueryWrapper的使用

    Mybatis plus动态条件查询QueryWrapper的使用 一 queryWrapper介绍 queryWrapper是mybatis plus中实现查询的对象封装操作类 可以封装sql对象 包括where条件 order by排序
  • 【Shell牛客刷题系列】SHELL6 去掉空行:来学习字符转换工具——tr命令

    该系列是基于牛客Shell题库 针对具体题目进行查漏补缺 学习相应的命令 刷题链接 牛客题霸 Shell篇 该系列文章都放到专栏下 专栏链接为 专栏 Linux 欢迎关注专栏 本文知识预告 首先学习了批量字符转换 压缩 删除的文本工具tr命
  • v-model的理解

    原理 1 展示 父组件v model 子组件接受一个props值value 将它展示到子组件自己的input上 2 改变 当子组件自身发生改变时 触发自身的input方法 然后触发父组件的事件方法 改变父组件的vaule 进而改变接受的pr
  • python作业(4)

    5 2 更多地条件测试 代码如下 str1 AAAA str2 BBBB str3 AAAA print str1 str2 str str1 str2 print str1 str3 str str1 str3 num1 10 num2
  • 蓝桥杯单片机14届记录 + 6-13届省赛代码+试题

    客观题 01 一个 8 位的 DAC 转换器 供电电压为 3 3V 参考电压 2 4V 其 1LSB 产生的输出电 压增量是 V A 0 0129 B 0 0047 C 0 0064 D 0 0094 02 IAP15F2K61S2 单片机
  • 编程实现古诗词填空

    编程实现古诗词填空登鹳雀楼 在屏募上品示 楼船 夜雪瓜洲渡 秋风大散关 请用户将缺失的汉宇 铁马 填入空白处 并在屏幕上显示完整的古诗词 楼船夜雪瓜洲渡 铁马秋风大散关
  • Java实现LRU算法

    文章目录 1 内存空间有限 当缓存满的时候 如何淘汰缓存 2 实现LRU demo 1 使用Java容器LinkedHashMap 2 哈希表 HashMap 双向链表 1 内存空间有限 当缓存满的时候 如何淘汰缓存 FIFO First
  • 【Linux】RPM软件包和Yum软件仓库、apt

    RPM 简介 RPM Package Manager RPM 包管理器 由红帽公司提出 Redhat SUSE 等系列采用 建立集中数据库 记录软件包安装 卸载等变化信息 分析软件包依赖关系 RPM 包 文件名特征 软件名 版本信息 操作系