dnf相当于“ yum update --security”


13

yum update --security仅安装安全更新。我认为这是yum-security插件的扩展。

是否有等效的dnf命令?(dnf取代了Fedora 22中的yum)


1
JFTR:由bugzilla.redhat.com/show_bug.cgi?id=1234930,此功能仅在DNF 2可用的和即将推出的Fedora 26
塞尔吉奥

1
现在DNF升级--enablerepo =更新-测试--advisory = FEDORA-2019-7cafbe66ba
塞尔吉奥

Answers:


7

基于http://forums.fedoraforum.org/showthread.php?t=305905

#!/bin/bash

SECURITY_UPDATES_LIST=$( dnf --refresh -q updateinfo list sec | awk '{print $3}' )
SECURITY_UPDATES_NUM=`echo "$SECURITY_UPDATES_LIST" | sed '/^$/d' | wc -l`

if [ "$SECURITY_UPDATES_NUM" -eq 0 ]; then
  exit
fi

dnf upgrade -y $SECURITY_UPDATES_LIST
  • -刷新强制回购同步
  • -y自动安装
  • SECURITY_UPDATES_NUM改良/固定计数方法,适用于0/1 /无穷大

1
与bash中的一个衬里相同(-y并且--refresh可以添加):up=$(sudo dnf -q updateinfo list sec | awk '{print $3}'); [[ $up ]] && sudo dnf upgrade $up
marcin

作为alias security-update="pkgs=\$(sudo dnf --refresh -q updateinfo list sec | awk '{print \$3}'); [[ \$pkgs ]] && sudo dnf upgrade -y \$pkgs"
单线

10

您可以通过以下三种设置使用dnf-automatic

apply_updates = yes
download_updates = yes
upgrade_type = security

(默认配置文件是/etc/dnf/automatic.conf

或使用:

dnf updateinfo list security

获取所有可用的更新,然后手动更新。


1

您可以dnf updateinfo list updates security在cli或bash脚本上放入for循环。我仍然强烈建议您查看安全更新,但您始终可以允许使用以下-y命令dnf update

这对我来说是有效的,具体取决于一些需求:

for i in $(dnf updateinfo list updates security | grep -Ei ^fedora | cut -d' ' -f3) ; do dnf update $i; done

或用awk短一些(请注意,这不适用于--refresh)

for i in $(dnf updateinfo list updates security | awk 'NR>1 {print $3}') ; do dnf update $i; done

对于dnf-刷新

for i in $(dnf updateinfo list updates security| dnf updateinfo list updates security| awk 'NR>1 {print $3}') ; do dnf update $i; done

0

在我的情况下,之前提出的方法无法满足要求。您可以尝试一下,它可能更完美。创建名称为“ dnfupdate-security”的文件,然后在下面粘贴python行或执行cmd:

cmd1:sudo touch / usr / bin / dnfupdate-security && sudo chmod + x / usr / bin / dnfupdate-security

cmd2:sudo gedit / usr / bin / dnfupdate-security

接下来将python代码粘贴到文件'dnfupdate-security'中,保存

执行cmd:sudo dnfupdate-security

#!/usr/bin/python
"""
DESCRIPTION: Check for security updates and insert all the packages into "dnf update" as argument.
"""
import os

updateList = ''; x = ''

for x in os.popen("dnf -q updateinfo list sec | awk '{print $3}'"):
    x = x.strip()
    updateList = updateList+' '+x

if x != '':
    os.system('dnf update '+updateList)
else:
    print 'No security updates available at this time!'

1
“更完美”?
don_crissti

这更完美的解决方案提供了一个IndentationError(因为import os是不在行(即使你删除每行3个前导空格)的开始,即使我纠正你不一致的缩进,我得到一个SyntaxError。
安森

放弃旧答案不是您应该做的。有些人可能会对您的代码有同样的想法,即很糟糕。
MelBurslan '16

所有批评都被积极接受。我做了很少的编辑。我测试了所有方法,它应该可以在基于fedora / redhat的系统上工作。:)
LecTos Lacius

因此,您将Tomot的答案中的shell命令放入更改为的python脚本dnf upgrade -ydnf update。还有其他实质性差异吗?
marcin '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.