如何在yum更新时排除特定的软件包的10种方法

Tags: linux redhat yum

当执行yum update时,yum会将系统中所有软件包更新为最新的版本。在有些情况下,我们希望在yum更新时排除一个(或一些)特定的软件包,这种情况我们需要使用yum的软件包排除方法,本文将描述10种排除软件包的方式。

1. 使用-x排除单个软件包

假设我们系统中使用了PHP5.1,并且我们的应用只能在PHP5.1上运行,并未在其他版本PHP上测试过。

#rpm -q php
php-5.1.0-27.el6_5.x86_64

因此,在这种情况下当我们执行更新时希望排除PHP的相关更新。下面命令输出结果告诉我们,如果使用yum update更新系统那么,当前PHP新版会被更新为PHP5.3。

# yum check-update php
php.x86_64    5.3.3-40.el6_6      updates

下面的命令将会在yum更新时排除PHP软件包。

# yum -x php update

2. 使用-x排除多个软件包

我们可以使用多个-x选项排除多个软件包,比如:

yum -x php -x httpd update

当然,使用","也可以达到同样的效果,比如:

yum -x php,httpd update

3. 使用通配符排除多个软件包(比如内核相关的软件包)

很多情况下,我们不希望自动更新系统内核。因此,在我们执行yum update前,我们可以执行yum check-update来检查哪些包会被更新。 如下面的例子,这里有三个内个相关的软件包会在执行yum update时被更新:

# yum check-update | grep -i kernel
kernel.x86_64            2.6.32-504.1.3.el6  updates
kernel-firmware.noarch   2.6.32-504.1.3.el6  updates
kernel-headers.x86_64    2.6.32-504.1.3.el6  updates

相对于针对每个软件包使用单独的-x选项进行进行过滤而言,我们可以使用更简单的通配符进行过滤。下面的命令将在yum update时排除所有内核相关软件包:

yum -x kernel* update

4. 在多个-x选项中使用通配符

我们可以在-x选项中指定多个排除通配符。比如下面的命令,我们可以看到多个PHP相关的软件包会在yum update更新过程中被更新:

# yum check-update | grep -i php
php.x86_64         5.3.3-40.el6_6   updates
php-cli.x86_64     5.3.3-40.el6_6   updates
php-common.x86_64  5.3.3-40.el6_6   updates
php-xml.x86_64     5.3.3-40.el6_6   updates

如果希望在yum update过程中排除PHP和内核相关软件包,可以使用以下命令:

yum -x 'php*' -x 'kernel*' update

5. 使用--exclude替换-x

可以使用--exclude来替换所有的-x

yum --exclude php update
yum --exclude httpd update
yum --exclude kernel update

yum -exclude php*,httpd*,kernel* update

6. 在yum.conf文件中排除软件包

相对于在命令行中排除软件包,我们同样可以在/etc/yum.conf文件中指定要排除的软件包。 比如,如果我们要在yum update更新时排除所有PHP、HTTPD、以及内核相关的软件包,可以在/etc/yum.conf中增加以下配置:

exclude=php* httpd* kernel*

也可以通过以下命令:

echo "exclude=php* httpd* kernel*" >> /etc/yum.conf

7.使用逗号分隔多个排除包定义

多个排除包可以用逗号进行分隔,支持通配符。下面的命令和与前例的命令效果是一样的。

yum -x php*,kernel* update

在/etc/yum.conf中也可以使用同样的方式:

# vi /etc/yum.conf
exclude=php*,httpd*,kernel*

8. 在特定的yum容器配置文件中排除

我们不仅仅可以在全局yun配置文件中指定排出的软件包,还可以针对每个单独的yum容器配置文件指定排除的软件包。 例如,假设我们安装了mongodb,在/etc/yum.repos.d目录下会有mongodb.repo配置文件。我们可以在mongodb.repo配置文件中指定需要排除的软件包列表。

# vi /etc/yum.repos.d/mongodb.repo
exclude=mongo*

9.使用yum check-update进行排除检查和模拟

我们可以在yum check-update命令中使用-x选项,这可以帮助我们检查命令行或者配置文件中的软件包排除配置是否正常工作。 例如,下面输出表示内核相关的包将会被更新:

# yum check-update | grep -i kernel
kernel.x86_64                        2.6.32-504.1.3.el6                  updates
kernel-firmware.noarch               2.6.32-504.1.3.el6                  updates
kernel-headers.x86_64                2.6.32-504.1.3.el6                  updates

下面的命令使用-x选项,并且按照我们的设想工作,内核包不会被更新:

# yum -x kernel* check-update | grep -i kernel

下面是yum.conf的排除配置示例,我们希望不更新PHP、HTTPD和内核相关的包:

# grep exclude /etc/yum.conf
exclude=php*,httpd*,kernel*

使用下面的命令检查我们的yum.conf配置是否正确,check-update在更新列表中并未显示我们希望排除的软件包。

# yum check-update | egrep 'php|httpd|kernel'

10.忽略yum.conf中的软件包排除配置

如果希望忽略yum.conf中的软件包排除配置,可以在命令行中使用--disableexcludes选项。 在前面的例子中,我们排除了PHP、HTTPD和内核包,但是如果你想忽略排除配置,在特定的命令中更新所有PHP、HTTPD和内核相关包,可以执行以下代码:

yum --disableexcludes=all update

下面是--disableexcludes的三个选项: 1. all: 忽略所有排除配置 2. main: 忽略主配置文件yum.conf中的排除配置 3. repoid:忽略指定容器的排除配置 如果你希望忽略指定容器的排除配置,你需要提供repo id(下面命令输出的第一列):

# yum repolist
repo id   repo name           status
mongodb   MongoDB Repository    240
base      CentOS-6 - Base     6,518
extras    CentOS-6 - Extras      35
updates   CentOS-6 - Updates    315

下面的命令会忽略mongodb.conf中配置的软件包排除:

yum --disableexcludes=mongodb update


来源:How to Yum Exclude Kernel Updates

翻译:字节技术

转载请注明出处:如何在yum更新时排除特定的软件包的10种方法

本文链接:http://www.4byte.cn/learning/119995/ru-he-zai-yum-geng-xin-shi-pai-chu-te-ding-de-ruan-jian-bao-de-10-zhong-fang-fa.html