移植安装脚本:rpm 可以代替 apt 吗?

tat*_*tsu 5 yum rpm apt shell-script software-distribution

我有以下 ubuntu 安装脚本:

#!/bin/bash

sudo apt update
sudo apt full-upgrade -y
sudo apt install jq
sudo apt autoclean -y
sudo apt autoremove
Run Code Online (Sandbox Code Playgroud)

以下是否可以在 fedora、red hat、mageia 或其他基于 rpm 的发行版下工作

...或者语法是否必须更改更多?

#!/bin/bash

sudo rpm update
sudo rpm full-upgrade -y
sudo rpm install jq
sudo rpm autoclean -y
sudo rpm autoremove
Run Code Online (Sandbox Code Playgroud)

我也可以做些什么来达到以下效果吗?:

#!/bin/bash
if [ $(command -v yum) ]
then
    sudo yum update
    sudo yum full-upgrade -y
    sudo yum install jq
    sudo yum autoclean -y
    sudo yum autoremove
else
    sudo rpm update
    sudo rpm full-upgrade -y
    sudo rpm install jq
    sudo rpm autoclean -y
    sudo rpm autoremove
fi
Run Code Online (Sandbox Code Playgroud)

Ste*_*itt 14

rpm大体上等价于dpkg,不apt;的apt当量是yum(在RHEL和CentOS以释放7),或dnf(在Fedora,和RHEL和开始释放8 CentOS的),或zypper(在SuSE) 。对于您的特定命令:

sudo dnf distro-sync
sudo dnf install jq
sudo dnf clean all
sudo dnf autoremove
Run Code Online (Sandbox Code Playgroud)

或者

sudo yum upgrade
sudo yum install jq
sudo yum clean all
Run Code Online (Sandbox Code Playgroud)

(这jq是可行的,因为在两种情况下都以相同的名称打包。这并不总是正确的;给定的软件可以在不同的发行版甚至给定发行版的不同版本中以不同的名称打包。)

有关详细信息,请参阅Pacman RosettaUbuntu RHEL 迁移指南

您可能想要查看配置管理工具,它们将帮助您抽象出差异(或者至少,更稳健地处理它们)。

您的if [ $(command -v yum) ]测试有缺陷,因为yum可以安装在 Debian 衍生产品(包括 Ubuntu)上;它的存在并不意味着它是包管理器。您可能应该检测正在运行的操作系统并以此为基础进行选择;请参阅如何可靠地获取操作系统的名称?详情。

  • 因为它们是不同的发行版,具有不同的包装实践、命名规则等。 (2认同)

rus*_*ord 5

不,选项和参数apt,并yum是不同的,所以在很多情况下,包名。

您也似乎变得rpmyum困惑,yum是等效的aptrpm是等效的dpkgdpkg是 的后端aptrpm是 的后端yum

您必须查看man两者的页面aptyum找到等效的选项。或者,您可以查看配置管理工具,例如puppet它可以抽象出发行版之间的许多操作系统差异,但这对于您正在做的事情来说可能有点过头了。