Centos7 的 Yum 包管理

常用操作

查看软件包的可用版本

  • 方法一:使用 yum info 命令
1
sudo yum info <包名> --showduplicates
  • 方法二:使用 yum list 命令
1
sudo yum list <包名> --showduplicates
  • 方法三:使用 yum-utils 工具
1
2
# 安装 yum-utils 工具
sudo yum install yum-utils
1
2
# 查看软件包的历史版本
sudo repoquery --show-duplicates --qf "%{name}-%{version}-%{release}" <包名>

安装指定版本的软件包

在使用 yum 安装软件时,可以指定要安装的版本。以下是安装指定版本软件的方法:

查找可用版本

首先,查看某个软件包的所有可用版本:

1
yum list <包名> --showduplicates

安装指定版本

使用 yum install 命令并指定要安装的版本号:

1
yum install <包名>-<版本号>

例如,要安装 httpd 的特定版本 2.4.6-90.el7.centos,可以使用以下命令:

1
yum install httpd-2.4.6-90.el7.centos

排除其他版本(可选)

如果想确保不会意外升级到其他版本,可以配置 yum 排除其他版本。编辑 /etc/yum.conf 文件,并添加以下行:

1
2
[main]
exclude=<包名>

可以排除多个软件包,使用空格分隔:

1
2
[main]
exclude=<包名1> <包名2>

然后,在需要安装特定版本时,可以使用以下命令:

1
yum install --disableexcludes=all <包名>-<版本号>

降级到指定版本(可选)

如果已经安装了某个包,但想降级到某个特定版本,可以使用 yum downgrade 命令:

1
yum downgrade <包名>-<版本号>

回滚到特定版本(可选)

可以使用 yum history 命令来查看和回滚特定版本:

1
2
3
4
5
6
7
8
# 查看所有的历史记录
yum history list

# 查看指定的历史记录
yum history info <历史ID>

# 回滚到指定的历史记录
yum history undo <历史ID>

特别注意

如果在某个 YUM 历史操作记录中,安装或更新了多个软件包,那么执行回滚后,该历史记录里的所有操作都会回滚(即可能会批量回滚多个软件的版本)。

排除更新指定的软件包

在 CentOS 7 系统中,如果想使用 yum update 更新系统时排除某个软件包,可以通过以下几种方法来实现:

方法一

在运行 yum update 命令时,使用 --exclude 选项来排除特定的软件包。例如,如果想要排除 httpd 软件包,可以运行以下命令:

1
sudo yum update --exclude=httpd

也可以排除多个软件包,例如:

1
sudo yum update --exclude=httpd --exclude=nginx

方法二

如果希望永久性地排除某个软件包的更新,可以编辑 yum 的配置文件 /etc/yum.conf,在 [main] 部分添加 exclude 选项。例如:

1
2
[main]
exclude=httpd

可以排除多个软件包,使用空格分隔:

1
2
[main]
exclude=httpd nginx

这样配置之后,每次运行 yum update 时,都会自动排除指定的软件包。

方法三

可以使用 yum-plugin-versionlock 插件来锁定特定软件包的版本。首先安装该插件:

1
sudo yum install yum-plugin-versionlock

然后锁定想要的版本的软件包,例如:

1
sudo yum versionlock add httpd

这将会锁定当前安装的 httpd 软件包版本,防止它被更新,可以查看当前锁定的软件包列表:

1
yum versionlock list

如果需要取消版本锁定,可以使用以下命令:

1
sudo yum versionlock delete httpd

常见问题

域名无法解析

当执行 yum update 命令时,出现 mirrorlist.centos.org no longer resolve 的错误信息。这是由于域名 mirrorlist.centos.org 已经失效,新的的域名应该是 vault.centos.org。解决方法是使用 sed 命令批量更改 Repo 文件里的域名,如下所示:

1
2
3
sed -i 's/mirror.centos.org/vault.centos.org/g' /etc/yum.repos.d/*.repo
sed -i 's/^#.*baseurl=http/baseurl=http/g' /etc/yum.repos.d/*.repo
sed -i 's/^mirrorlist=http/#mirrorlist=http/' /etc/yum.repos.d/*.repo

YUM 更新系统出错

在 Centos7 上执行 yum update 命令更新系统时,出现 “Invalid version flag: or” 错误,通常是由于 Yum 配置文件或某些第三方软件包配置不正确导致的。以下是解决该问题的一些方法:

  • 方法一:清理缓存。尝试清理 Yum 的缓存,并重新更新。
1
2
3
sudo yum clean all
sudo yum makecache
sudo yum update
  • 方法二:检查并修复软件仓库配置。某些第三方仓库配置文件可能会引起该错误,尝试禁用所有第三方仓库,只使用默认的 CentOS 仓库进行更新。
1
2
# 列出所有启用的仓库
sudo yum repolist enabled
1
2
3
# 禁用所有第三方仓库
1. 打开 `/etc/yum.repos.d/` 目录下的各个 `.repo` 文件。
2. 将 `.repo` 文件里的 `enabled=1` 改为 `enabled=0`,只保留官方仓库启用。
1
2
# 再次尝试更新
sudo yum update
  • 方法三:查看并修复依赖关系。有时依赖关系可能会引起问题,尝试修复:
1
2
3
sudo yum check
sudo package-cleanup --problems
sudo package-cleanup --dupes