我有以下 ubuntu 安装脚本:
#!/bin/bash
sudo apt update
sudo apt full-upgrade -y
sudo apt install jq
sudo apt autoclean -y
sudo apt autoremove
以下内容可以在 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
我还可以做一些事情来达到以下效果吗? :
#!/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
答案1
rpm
大部分相当于dpkg
, 不apt
;等效apt
项是yum
(在 RHEL 和 CentOS 上版本 7 之前),或者dnf
(在 Fedora 上,以及 RHEL 和 CentOS 从版本 8 开始),或者zypper
(在 SuSE 上)。对于您的特定命令:
sudo dnf distro-sync
sudo dnf install jq
sudo dnf clean all
sudo dnf autoremove
或者
sudo yum upgrade
sudo yum install jq
sudo yum clean all
(这jq
是有效的,因为在两种情况下都以相同的名称打包。这并不总是正确的;给定的软件可以在不同的发行版甚至给定发行版的不同版本中以不同的名称打包。)
看吃豆人罗塞塔和Ubuntu RHEL 迁移指南了解详情。
您可能想研究一下配置管理工具,它们将帮助您抽象出差异(或者至少更稳健地处理它们)。
你的if [ $(command -v yum) ]
测试是有缺陷的,因为yum
可以安装在Debian衍生品上(包括Ubuntu);它的存在并不意味着它是包管理器。您可能应该检测正在运行的操作系统并根据该操作系统进行选择;看如何可靠地获取操作系统的名称?了解详情。
答案2
不, 和 的选项和参数apt
是yum
不同的,在很多情况下包名称也是不同的。
你似乎也感到rpm
困惑yum
,yum
相当于apt
,rpm
相当于dpkg
。dpkg
是 的后端apt
,rpm
是 的后端yum
。
您必须查看man
两者的页面apt
并yum
找到等效的选项。或者,您可以查看配置管理工具,puppet
该工具可以抽象发行版之间的许多操作系统差异,但这对于您正在做的事情来说可能有点过头了。