如何才能以传递给命令的参数所需的格式获取 CentOS7 上待处理更新的软件包的空格分隔列表yum update-to
?
我想更新运行 CentOS7 的生产服务器上的所有软件包。在生产服务器上更新它们之前,我想在暂存服务器上更新它们,并验证更改不会破坏我们服务器的应用程序。验证后,我们将为生产安排更改单,并在稍后在生产上运行相同/经过审查的yum update-to
命令(而不是可能不确定和非幂等的命令)。yum update
因此,我尝试 [a] 确定我的服务器上所有具有可用更新的软件包,并 [b] 准备一个命令,使用yum update-to
该命令准确列出要更新的软件包及其版本。
yum update-to
以下是该命令所需语法的示例:
yum update-to dbus-1.10.24-13.el7_6 dbus-libs-1.10.24-13.el7_6 java-1.8.0-openjdk-1.8.0.242.b08-1.el7 java-1.8.0-openjdk-headless-1.8.0.242.b08-1.el7 tzdata-java-2019c-1.el7 unzip-6.0-21.el7
问题在于,yum update --assumeno
和yum list updates
都以与预期完全不同的格式输出包列表yum update-to
。
以下是与上述示例中的包相关的上述命令的输出示例:
[root@cent7 ~]# yum update --assumeno | grep -E 'dbus|java|unzip'
---> Package dbus.x86_64 1:1.6.12-17.el7 will be updated
---> Package dbus.x86_64 1:1.10.24-13.el7_6 will be an update
---> Package dbus-libs.x86_64 1:1.6.12-17.el7 will be updated
---> Package dbus-libs.x86_64 1:1.10.24-13.el7_6 will be an update
---> Package java-1.8.0-openjdk.x86_64 1:1.8.0.181-3.b13.el7_5 will be updated
---> Package java-1.8.0-openjdk.x86_64 1:1.8.0.242.b08-1.el7 will be an update
--> Processing Dependency: gtk2(x86-64) for package: 1:java-1.8.0-openjdk-1.8.0.242.b08-1.el7.x86_64
---> Package java-1.8.0-openjdk-headless.x86_64 1:1.8.0.181-3.b13.el7_5 will be updated
---> Package java-1.8.0-openjdk-headless.x86_64 1:1.8.0.242.b08-1.el7 will be an update
--> Processing Dependency: pcsc-lite-libs(x86-64) for package: 1:java-1.8.0-openjdk-headless-1.8.0.242.b08-1.el7.x86_64
--> Processing Dependency: cups-libs(x86-64) for package: 1:java-1.8.0-openjdk-headless-1.8.0.242.b08-1.el7.x86_64
---> Package tzdata-java.noarch 0:2017b-1.el7 will be updated
---> Package tzdata-java.noarch 0:2019c-1.el7 will be an update
---> Package unzip.x86_64 0:6.0-16.el7 will be updated
---> Package unzip.x86_64 0:6.0-21.el7 will be an update
dbus x86_64 1:1.10.24-13.el7_6 base 245 k
dbus-libs x86_64 1:1.10.24-13.el7_6 base 169 k
java-1.8.0-openjdk x86_64 1:1.8.0.242.b08-1.el7 base 293 k
java-1.8.0-openjdk-headless
tzdata-java noarch 2019c-1.el7 base 187 k
unzip x86_64 6.0-21.el7 base 171 k
[root@cent7 ~]#
[root@cent7 ~]# yum list updates | grep -E 'dbus|java|unzip'
dbus.x86_64 1:1.10.24-13.el7_6 base
dbus-libs.x86_64 1:1.10.24-13.el7_6 base
java-1.8.0-openjdk.x86_64 1:1.8.0.242.b08-1.el7 base
java-1.8.0-openjdk-headless.x86_64 1:1.8.0.242.b08-1.el7 base
tzdata-java.noarch 2019c-1.el7 base
unzip.x86_64 6.0-21.el7 base
[root@cent7 ~]#
我如何将软件包及其版本的输出转换为yum update --assumeno
可接受yum list updates
的格式yum update-to
?
答案1
该解决方案具有sed
以下awk
功能:
[root@cent7 ~]# pkgs=`yum -q list updates 2>&1 | tail -n+2 | awk '{print $1 "|" $2}' | sed 's/\.[^.]*|\(.*\:\)*/-/' | tr "\n" " "`
[root@cent7 ~]# echo "yum update-to $pkgs"
yum update-to dbus-1.10.24-13.el7_6 dbus-libs-1.10.24-13.el7_6 java-1.8.0-openjdk-1.8.0.242.b08-1.el7 java-1.8.0-openjdk-headless-1.8.0.242.b08-1.el7 tzdata-java-2019c-1.el7 unzip-6.0-21.el7
[root@cent7 ~]#
但我希望有人能想出一个更好的解决方案,而不是黑客攻击。理想的解决方案是告诉yum
以更适合批处理的格式输出格式。