DNF/YUM cheat sheet

 

RedHat 8 DNF 仓库新特性

An introduction to AppStream and BaseOS in Red Hat Enterprise Linux 8

RHEL-YUM-Repo-Illustration

DNF 文档

文件路径

  • /etc/yum.conf/etc/dnf/dnf.conf 主配置文件,对应全局仓库设置,例如设置全局代理。

  • /etc/yum.repos.d/,仓库文件所在目录,仓库文件用 .repo 做为扩展名。

命令中的注意事项

所有 yum 命令用到通配符的地方,都需要使用 \单引号 来防止 Shell 转义。例如:

yum list nginx\*

yum module list 'postgresql*'

Yum 仓库管理

假设当前系统有以下三个 Yum 仓库

repo id repo name status
base/x86_64 CentOS-7 - Base enabled
epel/x86_64 Extra Packages for Enterprise Linux enabled
nginx-stable nginx stable repo disabled

列出 Yum 仓库

# 列出已启用仓库
yum repolist [enabled]

# 列出未启用仓库
yum repolist disabled

# 列出所有已启用和未启用的仓库
yum repolist all

# 列出所有仓库详细信息
yum repolist -v all

# 可以使用 glob_expression 来匹配仓库名
# 例如列出 epel 和 nginx-stable 仓库
yum repolist epel nginx\*

注意:仓库名称前出现感叹号 ! 的话,说明仓库信息已经过期,可以使用 yum makecache fast 命令更新。

显示 Yum 仓库详细信息

类似于命令 yum repolist -v

# 显示已启用仓库的详细信息
yum repoinfo

# 显示所有仓库的详细信息
yum repoinfo all

根据 yum 手册页中 yum repolist 的解释,仓库标识前有感叹号 !,表示该仓库的元数据已经过期,yum 会自动重新下载 repomd.xml。如果希望强制重新同步 repomd.xml,可以使用命令

yum clean expire-cache

该命令会删除 /var/cache/yum/x86_64/*/*/ 下的 cachecookies 文件,在下次执行 yum repolist 命令时,repomd.xml 文件会被重新下载。

dnf config-manager

RedHat 6 or 7

使用 yum-config-manager

sudo yum install -y yum-utils
# 显示全局配置参数 (main) 和所有已启用仓库配置参数
yum-config-manager

# 显示全局配置参数
yum-config-manager main

# 显示全局配置参数和仓库 nginx-stable 配置参数
yum-config-manager main nginx\*

RedHat 8

使用 dnf config-manager

sudo dnf install -y dnf-utils
# 显示全局配置参数 (main)
dnf config-manager --dump

# 显示 nginx-stable 配置参数
dnf config-manager --dump nginx\*

以下如果没有特殊说明,均可以使用 dnf config-manager 替代 yum-config-manager

修改 Yum 仓库配置信息

可以使用 dnf config-manager --setopt=option=value 修改 yum configrepo 文件中的配置。

  • 修改全局配置使用 --setopt=option=value;
  • 修改 repo 配置使用 --setopt=repoid.option=value。repoid 可以使用通配符 * 匹配多个仓库。(注意:* 要转义或使用引号以避免被 shell 解析)
# 修改 docker-ce-stable 仓库的 bash_url 配置
sudo dnf config-manager --setopt='docker-ce-stable.baseurl=https://download.docker.com/linux/centos/7/x86_64/stable' --save

# 修改匹配 docker-ce-* 的仓库中的 bash_url 配置
sudo dnf config-manager --setopt='docker-ce-*.baseurl=https://download.docker.com/linux/centos/7/x86_64/stable' --save

加速 dnf 下载

sudo dnf config-manager --setopt=max_parallel_downloads=5 --setopt=fastestmirror=true --save

设置 Yum 仓库代理

# 设置全局代理,修改 /etc/dnf/dnf.conf 中的配置
sudo dnf config-manager --setopt=proxy=http://127.0.0.1:7890 --save

# 设置单独仓库代理
dnf config-manager --setopt=epel.proxy=http://127.0.0.1:7890 --save

# 设置多个仓库代理
dnf config-manager --setopt='*.proxy=http://127.0.0.1:7890' --save epel nginx-stable

# 设置所有已启用仓库代理
dnf config-manager --setopt='*.proxy=http://127.0.0.1:7890' --save

# 设置所有仓库代理,包含未启用的仓库
dnf config-manager --setopt='*.proxy=http://127.0.0.1:7890' --save '*'

添加 Yum 仓库

dnf config-manager --add-repo http://www.exmaple.com/example.repo

启用 Yum 仓库

dnf config-manager --enable epel

# 支持 glob_expression
dnf config-manager --enable nginx\*

禁用 Yum 仓库

dnf config-manager --disable epel

删除 Yum 仓库

进入 /ect/yum.repos.d 目录,删除对应的 repo 文件即可。

创建 Yum 仓库

  1. 安装 createrepo

     yum install createrepo
    
  2. 将需要的 rpm 包复制到某个目录,例如 /var/www/rpms/rhel/7Server/x86_64/

  3. 根据此目录下的所有 rpm 包生成 Yum 仓库的元数据(会创建一个 repomd 目录,里面是 xml-based rpm metadata)

     createrepo /var/www/rpms/rhel/7Server/x86_64/
    
  4. 添加 repo 文件

     [my_repo]
     name=my packages for $releasever - $basearch
     baseurl=https://www.example.com/rpms/rhel/$releasever/$basearch
     enabled=1
     gpgcheck=0
     sslverify=false
    

更新 Yum 仓库

如果 Yum 仓库中添加或删除了 rpm 包,可以使用 createrepo --update 来更新 Yum 仓库元数据。

createrepo --update /var/www/rpms/rhel/7Server/x86_64/

缓存 Yum 仓库数据

# 下载并缓存 yum 仓库数据
yum makecache

# 确保仓库数据是最新的,类似于使用 yum clean expire-cache 命令
yum makecache fast

安装包管理

查看 Yum 仓库中的安装包

# 列出所有已安装和可获取的包
yum list all

# 列出匹配 glob_expression 的已安装和可获取的包
yum list 'nginx*'
yum list --showduplicate 'nginx*'

# 列出匹配 glob_expression 的已安装的包
yum list installed 'nginx*'

# 列出匹配 glob_expression 的可获取的包
yum list available 'nginx*'

查看安装包信息

# 显示包信息,可使用 glob_expression
yum info nginx

查看安装包依赖

# 显示包的依赖
yum deplist nginx

查看安装包所在仓库

# 显示与包相关的仓库信息
yumdb info nginx

查询包含某个命令的安装包

# 显示包含 ip 命令的包
yum provides ip

# 显示包含 top 命令的包
yum provides '*/bin/top'

# 显示包含 'top.README' 文件的包
yum provides '*/top.README'

查询已经安装的命令属于哪个安装包

yum whatprovides /usr/bin/psql

搜索包含某个关键字的安装包

# 搜索名称或描述中包含 samba 的包
yum search samba

安装

# 安装 nginx 包
yum install nginx

# 从本地 rpm 安装包
yum install /tmp/nginx.rpm

# 从指定仓库安装特定版本的安装包
yum install postgresql96-server --repo pgdg96

更新

# 更新所有可更新的包
yum update

# 更新 nginx 的包
yum update nginx

卸载

# 卸载 nginx 的包和其依赖
yum remove nginx

remove 会连同该软件的依赖包一起删除,不同不希望删除这些依赖包,应该执行以下命令

rpm -e --nodeps nginx

卸载不再需要的包

# 卸载不再需要的包,这些包通常为 orphaned packages
yum autoremove

# 卸载 nginx 包和 orphaned packages
yum autoremove nginx

Module 管理

查看可用的 Module

dnf module list [module-name]

查看 module 详细信息

dnf module info module-name

安装 module

使用默认的 streamprofile

dnf module install module-name

dnf install @module-name

安装特定的 module stream

使用默认的 profile

dnf module install module-name:stream

dnf install @module-name:steram

安装特定的 module stream profile

dnf module install module-name:stream/profile

dnf install @module-name:stream/profile

禁用默认的 module

dnf -qy moudle disable postgresql

列出文件安装位置

如果需要知道安装包的文件路径,可以通过 rpm 命令来检查

# 列出系统中的所有安装包
rpm --query --all

# 找出相关安装包
rpm -qa | grep postgresql

# 列出安装包中的文件位置
# rpm --query --list
rpm -ql postgresql94-server-9.4.26-1PGDG.rhel8.x86_64