Linux系统中常见的几种软件包管理器
软件包管理器
- DPKG
- APT(APT-GET)
- RPM
- YUM
- DNF
Linux软件包管理工具是一组命令的集合,其作用是在操作系统中提供安装、更新、删除及卸载软件的方法,同时提供对系统中所有软件状态信息的查询。不同的Linux发行版会有不同的包管理器,比较常见的包管理工具有DPKG、APT(APT-GET)、RPM、YUM、DNF等。
DPKG
DPKG(Debian Packager)是Debian包管理系统,是Debian Linux家族的基础包管理工具,用于安装、删除deb软件包以及提供deb软件包的信息。
dpkg本身是一个底层工具,如同rpm系统,其上层工具(如apt)被用于从远程获取软件包以及处理复杂的软件包关系。
所有源自Debian的Linux发行版都使用dpkg作为包管理系统,例如Knoppix、Debian、Ubuntu、Linux Mint等。
选项说明:-i -- 安装软件包-r -- 删除软件包-P -- 删除软件包的同时删除其配置文件-l -- 显示已安装软件包列表-L -- 显示软件包关联的文件--unpack -- 解开软件包-c -- 显示软件包内文件列表--configure -- 配置软件包
dpkg -i package.deb # 安装deb软件包
dpkg -r package # 删除软件包
dpkg -P package # 删除软件包(包括配置文件)
dpkg -l # 列出已安装的软件包
dpkg -l package # 显示该软件包的版本
dpkg --unpack package.deb # 解开deb软件包
dpkg -c package.deb # 列出deb软件包的内容
dpkg --configure package # 配置软件包
APT(APT-GET)
apt(advanced packaging tool)是dpkg包管理系统的一个前端工具,是一个非常受欢迎的、自由而强大的命令行包管理器系统,适用于Debian及其衍生版,如Ubuntu、Linux Mint。apt由几个操作软件包的命令行工具组成,包括apt-get、apt-cache和apt-cdrom。
为了解决命令过于分散的问题,引入了命令apt,它包括了命令apt-get使用最广泛的功能选项,以及命令apt-cache和apt-config中常用到的功能。在使用apt命令时,用户不必再由apt-get转到apt-cache或apt-config,而且apt更加结构化,并为用户提供了管理软件包所需的必要选项。简单来说,apt就是apt-get、apt-cache和apt-config中最常用命令选项的集合。
apt install package # 安装包
apt remove package # 删除包
apt autoremove # 检查并清除无用的安装包
apt update&upgrade package # 更新所有的安装包
apt-get upgrade # 更新所有已安装的软件包
apt-get dist-upgrade # 将系统升级到新版本
apt-get install package # 安装包
apt-get remove package # 删除包(保留配置文件)
apt-get --purge remove package # 删除包(同时删除配置文件)
apt-get autoclean package # 移除该软件的旧版本软件包(为了满足其他软件包的依赖而安装,但现在不再需要的软件包)
apt-get clean # 移除下载到本地的已安装的软件包
sudo apt list --installed # 列出已安装的软件包
RPM
RPM(RedHat Package Manager)是RedHat软件包管理工具,是由红帽公司开发的软件包管理方式,是Linux系统里面的打包安装工具,基于这个底层系统,产生了多个前端包管理工具可供使用。
RPM早期被称为RedHat Package Manager,但由于RPM非常流行,大部分的Linux发行版本都使用了RPM来管理软件包,所以它实际上已经成为Linux的工业标准。因此RPM现在又被称为RPM is Package Manager,RPM现在是Linux Standard Base(LSB)中采用的包管理系统。
RPM最大的特点就是需要安装的软件都已经编译过,并都已经打包成RPM机制的安装包,通过默认的数据库记录这个软件安装时需要的依赖软件。当我们在自己的Linux系统上安装时,RPM会先依照软件里头的数据查询Linux主机的相关依赖软件是否满足,若满足则予以安装,若不满足则不予安装。

RPM常用的前端工具有如下几种:
- yum:作为RHEL及CentOS的软件包前端工具
- dnf:作为Fedora的软件包前端工具
- zypper:作为SUSE发行版的软件包前端管理工具
- urpmi:作为Mandriva Linux及相关派生版的软件包前端管理工具
RPM包的名称格式:Apache-1.3.23-11.i386.rpm
- Apache – 软件名称
- 1.3.23-11 – 软件的版本号,主版本和此版本
- i386 – 是软件所运行的硬件平台,Intel 32位处理器的统称
- rpm – 文件扩展名,代表RPM包
选项说明:-a -- 查询所有套件-e -- 删除指定套件-h -- 安装套件时列出标记-i -- 安装指定的套件档,或显示套件的相关信息-p -- 查询指定的套件档-q -- 使用询问模式,当遇到任何问题时,rpm指令会先询问用户-R -- 显示套件的关联性信息-U -- 升级指定的套件档-l -- 显示套件的文件列表-v -- 显示指令的执行过程-vv -- 详细显示指令的执行过程,便于排错
rpm -qa # 查询已安装的所有rpm软件包
rpm -qa | grep package # 查询相应软件包
rpm -qi 软件名 # 查询已安装软件对应的rpm软件包的详细信息
rpm -ivh package.rpm # 安装rpm软件包
rpm --force -ivh package.rpm # 强制安装rpm软件包
rpm -Uvh package.rpm # 升级rpm软件包
rpm -e rpm软件包 # 卸载rpm软件包
rpm -e --nodeps rpm软件包 # 卸载软件包时,不检查依赖,这样做可能会导致一些与该软件包存在依赖关系的软件无法正常工作
YUM
YUM(Yellow dog Updater, Modified)是一个在Fedora、RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并进行安装,可以自动处理依赖关系,并能一次安装所有依赖的软件包,无须繁琐地进行一次又一次的下载和安装。
YUM原理:
-
Server端先对程序包进行分类后存储到不同的repository容器中,再收集大量RPM软件包的数据库文件中关于描述程序包之间依赖关系的数据,然后根据这些数据生成描述RPM软件包的依赖关系及所需文件在服务端的存放位置的说明文件(.xml格式),并将此说明文件存放在服务器端的repodata目录下供Client端取用。
-
Cilent端通过yum命令安装软件时发现缺少某些依赖性程序包,Client会根据本地的配置文件(/etc/yum.repos.d/*.repo)找到指定的Server端,然后从Server端repodata目录下获取说明文件(xxx.xml)后,存储在本地/var/cache/yum中方便以后读取。通过xxx.xml文件查找到需要安装的依赖性程序包在Server端的存放位置,再进入Server端yum库中的指定repository容器中获取所需程序包,下载完成后在本地实现安装。
主要特点:
- 可以自动解决软件包的依赖关系
- 可以对RPM包进行分组,基于组进行安装操作
- 引入仓库概念,支持多个仓库(即可以同时配置多个资源库),可以从发行官方存储库和其他第三方存储库安装RPM软件包
- 简洁的配置文件(/etc/yum.conf)
YUM类似java中的maven和python中的pip,可以从镜像网站上下载应用程序,并直接安装。
YUM是一个在线软件管理工具,所以使用YUM进行的操作大都需要在联网的条件下才能正常使用。
YUM和RPM的区别:
YUM只是一个前端用来便捷管理RPM软件包的工具,而RPM则是一个软件包管理系统(软件包管理器、软件包管理组件),RPM会把软件打包成以.RPM为扩展名的文件,并且也提供简单的命令来管理软件包,只不过RPM的命令工具没有YUM的命令强大罢了。
而YUM则是在RPM的基础上对软件包进行管理,实现了RPM软件包管理器在功能上的扩展,YUM必须依赖于RPM,因此YUM是不能脱离RPM而独立运行的。
| RPM | YUM |
|---|---|
| 红帽于 1995 年推出了RPM | Yellowdog Updater(YUP)于1999-2001年开发,YUM 在 2003 年取代了原始的 YUP |
| RPM 代表 RPM 软件包管理器(以前称为 Red Hat 软件包管理器) | YUM 代表经过修改的 Yellowdog Updater |
| RPM 命令工具不能解决依赖关系,您必须手动安装它们 | YUM 命令工具可以自动解决软件包的依赖关系并同时安装它们 |
| 允许同时安装同个软件包的多个版本 | 不允许,会提示该软件包已经安装,但是你可以更新和升级 |
| 使用 RPM 命令安装软件包时,必须提供软件包的确切位置 | 可以安装存储库中可用的任何软件包,只需要知道软件包名称 |
| RPM 不依赖 YUM | YUM 是一个 RPM 软件包的前端工具,在后端依旧使用 RPM 软件包管理器来管理软件包 |
| RPM 命令工具只能安装已经下载到本地机器上的软件包 | YUM 能在线下载并安装软件包,而且能在线快速更新/升级已安装的软件 |
| RPM 不允许您将整个系统升级到最新的可用版本 | YUM 允许您将系统升级到最新的可用版本 |
| RPM 不允许您自动更新/升级系统上安装的软件包 | YUM允许您自动更新/升级系统上安装的软件包 |
| 它不使用在线存储库执行任何操作 | 它完全依靠在线存储库来完成所有工作 |
| RPM 属于低级软件包管理器,不仅提供基础的软件包管理功能,而且还负责将软件打包成以 .RPM 为扩展名的文件 | YUM 属于高级的软件包管理前端工具,YUM 是在 RPM 的基础上对软件包进行管理的,也就是说 YUM 是依赖于 RPM 的 |
| RPM 适用于所有环境 | YUM 要搭建本地 YUM 源才可以使用 |
| RPM 是底层管理工具 | YUM 是上层管理工具 |
# yum [选项] [参数]
# 选项为-y时,表示在安装过程中遇到的系统提问都默认回答yes,这样就不用在安装应用时停下来手动继续
参数说明:install # 安装rpm软件包update # 更新rpm软件包check-update # 检查是否有可更新的rpm软件包remove # 删除指定的rpm软件包list # 显示软件包信息clean # 清理yum过期的缓存deplist # 显示yum软件包的所有依赖关系localinstall # 安装本地的rpm软件包localupdate # 更新本地的rpm软件包yum -y install firefox # 使用yum安装firefox
DNF
DNF是一个基于RPM包管理系统的包管理工具,是下一代的YUM,Fedora 18引入了它,它是Fedora 22及更新版本的默认包管理器,Rhel 8和CentOS 8也在应用。
dnf install package # 安装软件包
dnf update package # 升级软件包
dnf update && dnf upgrade # 升级所有软件
dnf check-update # 检查可更新的软件包
dnf remove package # 删除软件包
dnf erase package # 删除软件包
dnf autoremove # 删除无用孤立的软件包
dnf clean all # 删除缓存的无用软件包
dnf repolist # 查看系统中可用的DNF软件库
dnf repolist all # 查看系统中可用和不可用的所有DNF软件库
dnf list # 列出所有的rpm软件包
dnf list installed # 列出所有已安装的rpm软件包
dnf list available # 列出所有可供安装的rpm软件包
dnf search package # 搜索软件库中的rpm包
dnf provides /bin/bash # 查找某一文件的提供者(查找bash的提供者)
dnf info package # 查看软件包详情
dnf grouplist # 查看所有的软件包组
相关文章:
Linux系统中常见的几种软件包管理器
软件包管理器 DPKGAPT(APT-GET)RPMYUMDNF Linux软件包管理工具是一组命令的集合,其作用是在操作系统中提供安装、更新、删除及卸载软件的方法,同时提供对系统中所有软件状态信息的查询。不同的Linux发行版会有不同的包管理器&…...
python异步IO完全指南
原地址:https://flyingbyte.cc/post/async_io/ python异步IO完全指南 做为一种并行编程的範式,异步IO在Python中非常受重视,从Python3.4到3.7快速演进。 我们已经有多线程,多进程,并发(concurrency&#x…...
打造企业或者个人IP引流法
打造企业或者个人IP引流法. 大家好,我是百收网SEO编辑:狂潮老师,今天给大家分享企业IP打造的方法 首先我们想让人知道你的企业叫什么,怎么找到你的企业 这个时候我们就需要去各大平台发布信息,客户想了解直接去搜索…...
TMC Self-Managed 提升跨多云环境安全性
作为云原生技术栈的关键技术之一,Kubernetes 被企业用户广泛试用并开始支撑实际业务应用运行,实现技术先进性带来的生产力提升。但与此同时,随着 Kubernetes 技术的不断广泛与深化使用,企业用户也开始面临诸多技术上的挑战&#x…...
并发编程 - 线程间三种常见的通信手段
线程间通信是指多个线程之间通过某种机制进行协调和交互,例如:线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中有以下三种实现线程等待的手段 : Object 类提供的 wait(),notify() 和 notifyAll() 方法;C…...
iperf3命令使用说明
iperf3 是一款网络性能测试工具,用于在TCP和UDP数据流之间测量最大带宽。它可以帮助您测试网络连接的速度、延迟、丢包等参数。以下是一些常用的选项和参数的解释: 通用选项: -s 或 --server:运行服务器模式。-c 或 --client &l…...
华纳云:美国Linux服务器磁盘分区备份的操作方式
在美国的Linux服务器上进行磁盘分区备份可以通过以下步骤进行操作: 了解磁盘分区情况: 在开始备份之前,首先需要了解服务器上的磁盘分区情况。可以使用命令 fdisk -l 或 lsblk 查看当前的磁盘和分区信息。 安装备份工具: 如果服务…...
Arrays类
Arrays类位于 java.util 包中,主要包含了操作数组的各种方法。 int[] arr new int[5];//新建一个大小为5的数组Arrays.fill(arr,4);//给所有值赋值4String str Arrays.toString(arr); // Arrays类的toString()方法能将数组中的内容全部打印出来System.out.print(s…...
lua ipairs pairs
这两个函数都是用来遍历表格数组的,性能几乎没有区别,其他区别如下: iparis只会遍历数字索引,并在遇到第一个非数字索引时终止 paris则会遍历所有 local t {22,33,44,name沧浪水,urlwww.freecls.com,55,66}t[10] 100 for k,v…...
swift3.0 废弃 swift 4.0 以后字符串截取
截取前 n 个字符: let str "Hello, Swift!" let prefix str.prefix(5) print(prefix) // "Hello" 截取后 n 个字符: let str "Hello, Swift!" let suffix str.suffix(6) print(suffix) // "Swift!" 截取指…...
休息是不可能休息的
654.最大二叉树 分析:相比较遍历顺序构建二叉树,这个相对简单。 思路:每次找到数组最大值,然后分割数组 class Solution { public:TreeNode*judge(vector<int>&nums){if(nums.size()0) return nullptr;int maxNum0,in…...
Java面向对象(内部类)(枚举)(泛型)
内部类 内部类是五大成员之一(成员变量、方法、构造方法、代码块、内部类); 一个类定义在另一个类的内部,就叫做内部类; 当一个类的内部,包含一个完整的事物,且这个事务不必单独设计…...
macOS - 安装 GNU make、cmake
文章目录 关于 cmake使用 brew 安装 关于 GNU make方式一:brew方式二:下载源码 关于 cmake 官网:https://cmake.org/ 使用 brew 安装 brew 安装 cmake: https://formulae.brew.sh/formula/cmake安装使用 brew : https://blog.csdn.net/lovec…...
vue中style scoped属性的作用
一、为什么要给style 节点加 scoped 属性(vue) 1、作用:当style标签里面有scoped属性时,它的css只作用于当前组建的元素。在单页面项目中可以使组件之间互不污染,实现模块化(实现组件的私有化,不…...
【ARM 嵌入式 编译系列 10.2 -- 符号表与可执行程序分离详细讲解】
文章目录 符号表与可执行程序分离方法一 使用eu-strip方法二 使用 objcopy上篇文章:ARM 嵌入式 编译系列 10.1 – GCC 编译缩减可执行文件 elf 文件大小 下篇文章:ARM 嵌入式 编译系列 10.3 – GNU elfutils 工具小结 符号表与可执行程序分离 接着上篇文章 ARM 嵌入式 编译…...
Gin各种参数接收
Gin参数接收 文章目录 Gin参数接收1.各个参数的接收方法Gin中发送JSON数据Gin接收querystring数据Gin接收Form的参数Gin接收URI参数 2.参数绑定方式接收(更加方便)推荐一款软件 1.各个参数的接收方法 声明: 这里的c都是c *gin.Context中的c Gin中发送JSON数据 在传输或接受JS…...
【Python】进阶之 MySQL入门教程
文章目录 数据库概述Mysql概述Mysql安装与使用Navicat安装和使用Mysql终端指令操作Mysql和python交互订单管理案例实现 数据库概述 数据库的由来 发展历程说明人工管理阶段用纸带等进行数据的存储文件系统阶段数据存储在文件中数据库阶段解决了文件系统问题高级数据库阶段分布式…...
Word 2019打开.doc文档后图片和公式不显示(呈现为白框)的解决办法
Word 2019打开.doc文档后图片和公式不显示(呈现为白框)的解决办法 目录 Word 2019打开.doc文档后图片和公式不显示(呈现为白框)的解决办法一、问题描述二、解决方法1.打开 WORD 2019,点击菜单中的“文件”;…...
三个整数排序
描述 给定三个整数,请将它们按从小到大的顺序输出。 输入 输入为一行,包含三个整数,用空格分隔。 输出 输出为一行,包含三个整数,用空格分隔,表示排序后的结果。 输入样例 1 9 3 7 输出样例 1 3 …...
Nginx反向代理出现错误 502 bad gateway 案例解析
场景描述 Nginx uwsgi flask Flask框架写的程序,使用uwsgi启动,Nginx作为反向代理调用Flask应用。 Flask应用有些操作时间比较长,会超过1分钟,在网页端访问会出现错误: 502 bad gateway。 Nginx的错误日志中会出现错误…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
