Linux 软件包管理深度实战:从 RPM/YUM 到源码编译,解锁企业级运维核心技能
Linux 软件包管理深度实战:从 RPM/YUM 到源码编译,解锁企业级运维核心技能
摘要:本文全面介绍了Linux系统中的软件包管理技术,从基础的RPM包结构分析、rpm命令的查询/验证/安装/卸载操作,到高级的yum仓库配置与管理,最后深入讲解了源码编译安装的完整流程。通过实际案例演示了nginx和cmatrix的源码安装过程,帮助读者掌握企业级运维中软件管理的核心技能,包括依赖解决、版本控制、仓库配置等关键知识点。
Windows 中软件包管理
- 控制面板中程序和功能。通过安装,将信息注册到系统中。

- 用户下载的绿色软件。例如U盘启动盘工具rufus。
软件包来源:应用商城,第三方官方网站(qq、微信)。
分析 RPM 包
Linux 发行版本
- 以 RHEL 为代表的发行版本,使用rpm包管理系统:
- RHEL (Red Hat Enterprise Linux)
- Fedora(由原来的RedHat桌面版本发展而来,免费版本)
- CentOS(RHEL的社区克隆版本,免费)
- CentOS Stream(RHEL的社区克隆版本,免费)
- Rocky(RHEL的社区克隆版本,免费)
- OEL(Oralce Enterprise Linux)
- 以 Debian 为代表的发行版本,使用deb包管理系统:
- Debian,社区Linux的典范,迄今为止最遵循GNU规范的Linux系统。
- Ubuntu,Debian 衍生版,是一个以桌面应用为主的Linux操作系统。
- Kali Linux,Debian 衍生版,旨在渗透测试和数字取证。
- 其他版本:ArchLinux Gentoo 等等…

RPM 包文件名格式
redhat 开发了 rpm 包管理,提供一个标准的软件版本管理方法,比从归档包解压文件到系统简单多了。CentOS 提供的所有软件都是rpm格式。
RPM软件包文件名格式:name-version-release.architecture.rpm
示例:lrzsz-0.12.20-36.el7.x86_64.rpm
- name,是描述其内容的一个或多个词语(lrzsz)。
- version,是原始软件的版本号(0.12.20)。
- release,是基于该版本的发行版号,由软件打包商设置,后者不一定是原始软件开发商(36.el7)。
- architecture,是编译的软件包运行的处理器架构。
- noarch,表示此软件包不限定架构。
- x86_64,表示此软件包限定x86 64位。
- aarch64,表示此软件包限定ARM 64位。
RPM 包组成
每个rpm包涵三个部分:
- 需要安装的文件。
- 包的元数据信息,包括包的名称、版本、架构等;软件包说明;软件包依赖关系;许可证;更变日志;其他信息。
- 脚本:软件包安装,更新,卸载需要执行的脚本。
通常,软件提供商使用GPG密钥对RPM软件包进行数字签名(Red Hat会对其发布的所有软件包进行数字签名)。 RPM系统通过确认包由相应的GPG密钥签名来验证包的完整性。 如果GPG签名不匹配,RPM系统拒绝安装包。
复习:非对称加密
非对称加密:有一对公钥和私钥。
- 公钥:分享给别人,用来加密数据。
- 私钥:自己保留,用来解密公钥加密的数据。
Linux中rpm包会被私钥签名,客户端使用公钥验证签名,确保文件的完整性。
RPM 包安装和更新
- 如果同一个软件有多个版本,只需安装最高版本。
- 在大多数情况下,一个软件只能安装一个版本。 kernel是个例外。如果构建包的文件名没有冲突,则可以安装多个版本。 由于只能通过引导到该内核来测试新内核,因此特定设计了包,以便可以一次安装多个版本。如果内核无法启动,则旧内核仍然可用且可引导。
- 软件包升级只需要安装最新版本,不需要逐步升级。
- 升级RPM包将删除旧版本的软件包并安装新版本,通常会保留配置文件。
rpm 命令
查询(重点)
基本语法:
rpm {-q|--query} [select-options] [query-options]
select-options
[PACKAGE_NAME] [-a,--all] [-f,--file FILE]
[-g,--group GROUP] {-p,--package PACKAGE_FILE]
[--hdrid SHA1] [--pkgid MD5] [--tid TID]
[--querybynumber HDRNUM] [--triggeredby PACKAGE_NAME]
[--whatprovides CAPABILITY] [--whatrequires CAPABILITY]
query-options
[--changelog] [-c,--configfiles] [--conflicts]
[-d,--docfiles] [--dump] [--filesbypkg] [-i,--info]
[--last] [-l,--list] [--obsoletes] [--provides]
[--qf,--queryformat QUERYFMT] [-R,--requires]
[--scripts] [-s,--state] [--triggers,--triggerscripts]
示例:
# 查询系统中安装了哪些软件包
[root@server ~ 14:56:39]# rpm -qa
virt-what-1.18-4.el7_9.1.x86_64
grub2-common-2.02-0.87.0.1.el7.centos.9.noarch
firewalld-filesystem-0.6.3-13.el7_9.noarch
setup-2.8.71-11.el7.noarch
sg3_utils-1.37-19.el7.x86_64
# 查询系统中某个软件包是否安装
[root@server ~ 14:56:47]# rpm -q httpd
httpd-2.4.6-99.el7.centos.1.x86_64
[root@server ~ 14:57:22]# rpm -q kernel
kernel-3.10.0-1160.71.1.el7.x86_64
# 查询系统中某个已安装的软件包元数据信息
[root@server ~ 14:57:43]# rpm -q coreutils -i
Name : coreutils
Version : 8.22
Release : 24.el7_9.2
Architecture: x86_64
Install Date: 2026年05月13日 星期三 23时48分41秒
Group : System Environment/Base
Size : 14594210
License : GPLv3+
Signature : RSA/SHA256, 2020年11月18日 星期三 22时16分51秒, Key ID 24c6a8a7f4a80eb5
Source RPM : coreutils-8.22-24.el7_9.2.src.rpm
Build Date : 2020年11月17日 星期二 06时24分59秒
Build Host : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.gnu.org/software/coreutils/
Summary : A set of basic GNU tools commonly used in shell scripts
Description :
These are the GNU core utilities. This package is the combination of
the old GNU fileutils, sh-utils, and textutils packages.
# 查询系统中某个已安装的软件包包涵哪些文件
[root@server ~ 14:58:06]# rpm -q openssh-server -l
/etc/pam.d/sshd
/etc/ssh/sshd_config
/etc/sysconfig/sshd
/usr/lib/systemd/system/sshd-keygen.service
/usr/lib/systemd/system/sshd.service
/usr/lib/systemd/system/sshd.socket
/usr/lib/systemd/system/sshd@.service
/usr/lib64/fipscheck/sshd.hmac
/usr/libexec/openssh/sftp-server
/usr/sbin/sshd
/usr/sbin/sshd-keygen
/usr/share/man/man5/moduli.5.gz
/usr/share/man/man5/sshd_config.5.gz
/usr/share/man/man8/sftp-server.8.gz
/usr/share/man/man8/sshd.8.gz
/var/empty/sshd
# 查询系统中某个已安装的软件包包涵哪些配置文件
[root@server ~ 14:58:54]# rpm -q openssh-server -c
/etc/pam.d/sshd
/etc/ssh/sshd_config
/etc/sysconfig/sshd
# 查询系统中某个已安装的软件包包涵哪些文档文件
[root@server ~ 14:59:18]# rpm -q openssh-server -d
/usr/share/man/man5/moduli.5.gz
/usr/share/man/man5/sshd_config.5.gz
/usr/share/man/man8/sftp-server.8.gz
/usr/share/man/man8/sshd.8.gz
# 查询系统中某个某个文件属于哪个已安装的软件包
[root@server ~ 15:00:06]# rpm -q -f /etc/ssh/sshd_config
openssh-server-7.4p1-22.el7_9.x86_64
# 查询系统中某个已安装的软件包包涵的脚本
[root@server ~ 15:00:25]# rpm -q openssh-server --scripts
preinstall scriptlet (using /bin/sh):
getent group sshd >/dev/null || groupadd -g 74 -r sshd || :
getent passwd sshd >/dev/null || \
useradd -c "Privilege-separated SSH" -u 74 -g sshd \
-s /sbin/nologin -r -d /var/empty/sshd sshd 2> /dev/null || :
postinstall scriptlet (using /bin/sh):
if [ $1 -eq 1 ] ; then
# Initial installation
systemctl preset sshd.service sshd.socket >/dev/null 2>&1 || :
fi
......
# 查询系统中某个已安装的软件包变更日志
[root@server ~ 15:01:27]# rpm -q openssh-server --changelog
* 四 9月 30 2021 Dmitry Belyavskiy <dbelyavs@redhat.com> - 7.4p1-22 + 0.10.3-2
- avoid segfault in Kerberos cache cleanup (#1999263)
- fix CVE-2021-41617 (#2008884)
* 二 6月 25 2019 Jakub Jelen <jjelen@redhat.com> - 7.4p1-21 + 0.10.3-2
- Avoid double comma in the default cipher list in FIPS mode (#1722446)
* 二 5月 21 2019 Jakub Jelen <jjelen@redhat.com> - 7.4p1-20 + 0.10.3-2
- Revert the updating of cached passwd structure (#1712053)
* 一 3月 04 2019 Jakub Jelen <jjelen@redhat.com> - 7.4p1-19 + 0.10.3-2
- Update cached passwd structure after PAM authentication (#1674541)
......
# 下载 httpd 软件包,以及依赖的其他软件包
[root@server ~ 15:02:53]# yum install -y yum-utils
[root@server ~ 15:03:12]# yumdownloader httpd
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
httpd-2.4.6-99.el7.centos.1.x86_64.rpm | 2.7 MB 00:00:02
[root@server ~ 15:04:03]# ls httpd*
httpd-2.4.6-99.el7.centos.1.x86_64.rpm
# 查询系统中某个软件包(package)文件包涵哪些配置文件
[root@server ~ 15:05:33]# rpm -q -p httpd-2.4.6-99.el7.centos.1.x86_64.rpm -c
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
......
###-p, --package 查询/验证一个软件包 补充
# 同样-l -d -i也可以配合-p使用
# 查询系统中某个软件包组中包涵哪些软件包
[root@server ~ 15:07:13]# rpm -qg 'System Environment/Base'
grub2-common-2.02-0.87.0.1.el7.centos.9.noarch
centos-release-7-9.2009.1.el7.centos.x86_64
setup-2.8.71-11.el7.noarch
......
扩展
# 查看软件包所在仓库精确位置
[root@server ~ 15:08:08]# repoquery --location httpd
http://mirrors.aliyun.com/centos/7/updates/x86_64/Packages/httpd-2.4.6-99.el7.centos.1.x86_64.rpm
# 此时可以通过 wget 下载特定文件
[root@server ~ 15:12:53]# wget http://mirrors.aliyun.com/centos/7/updates/x86_64/Packages/httpd-2.4.6-99.el7.centos.1.x86_64.rpm
验证
基本语法:
rpm {-V|--verify} [select-options] [verify-options]
select-options
[PACKAGE_NAME] [-a,--all] [-f,--file FILE]
[-g,--group GROUP] {-p,--package PACKAGE_FILE]
[--hdrid SHA1] [--pkgid MD5] [--tid TID]
[--querybynumber HDRNUM] [--triggeredby PACKAGE_NAME]
[--whatprovides CAPABILITY] [--whatrequires CAPABILITY]
verify-options
[--nodeps] [--nofiles] [--noscripts]
[--nodigest] [--nosignature]
[--nolinkto] [--nofiledigest] [--nosize] [--nouser]
[--nogroup] [--nomtime] [--nomode] [--nordev]
[--nocaps] [--noconfig] [--noghost]
示例:
# 查看openssh-server软件安装是否有问题
[root@server ~ 15:14:23]# rpm -V openssh-server
S.5....T. c /etc/ssh/sshd_config
# 修改(change)
[root@server ~ 15:17:20]# sed -i 's/PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config
[root@server ~ 15:17:48]# rpm -V openssh-server
S.5....T. c /etc/ssh/sshd_config
[root@server ~ 15:18:04]# sed -i 's/PermitRootLogin no/PermitRootLogin yes/g' /etc/ssh/sshd_config
# 移走 /etc/ssh/sshd_config 文件,再次查看sesed
[root@server ~ 15:18:53]# mv /etc/ssh/sshd_config .
[root@server ~ 15:19:01]# rpm -V openssh-server
遗漏 c /etc/ssh/sshd_configla
# 恢复该文件到原来位置
[root@server ~ 15:19:06]# mv sshd_config /etc/ssh/sshd_config
[root@server ~ 15:19:58]# rpm -V openssh-server
S.5....T. c /etc/ssh/sshd_config
安装和卸载
基本语法:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
install-options
[--allfiles] [--badreloc] [--excludepath OLDPATH]
[--excludedocs] [--force] [-h,--hash]
[--ignoresize] [--ignorearch] [--ignoreos]
[--includedocs] [--justdb] [--nocollections]
[--nodeps] [--nodigest] [--nosignature] [--noplugins]
[--noorder] [--noscripts] [--notriggers]
[--oldpackage] [--percent] [--prefix NEWPATH]
[--relocate OLDPATH=NEWPATH]
[--replacefiles] [--replacepkgs]
[--test]
示例:
# 下载软件包
[root@server ~ 15:21:02]# repoquery --location lrzsz
http://mirrors.aliyun.com/centos/7/os/x86_64/Packages/lrzsz-0.12.20-36.el7.x86_64.rpm
[root@server ~ 15:22:28]# wget http://mirrors.aliyun.com/centos/7/os/x86_64/Packages/lrzsz-0.12.20-36.el7.x86_64.rpm
lrzsz-0.12.20-36.el7.x86_64.rpm
# 安装
[root@server ~ 15:22:50]# rpm -i lrzsz-0.12.20-36.el7.x86_64.rpm
[root@server ~ 15:23:44]# rpm -q lrzsz
lrzsz-0.12.20-36.el7.x86_64
# 卸载
[root@server ~ 15:23:55]# rpm -e lrzsz
[root@server ~ 15:25:13]# rpm -q lrzsz
未安装软件包 lrzsz
# 友好方式安装
[root@server ~ 15:25:22]# rpm -ivh lrzsz-0.12.20-36.el7.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:lrzsz-0.12.20-36.el7 ################################# [100%]
# 友好方式卸载
[root@server ~ 15:25:49]# rpm -evh lrzsz
准备中... ################################# [100%]
正在清理/删除...
1:lrzsz-0.12.20-36.el7 ################################# [100%]
# 安装 httpd,报错如下,下一节讲解如下解决
# 安装准备:确保系统中没有提供httpd需要的依赖包
[root@server ~ 15:32:21]# rpm -e apr apr-util httpd-tools mailcap
[root@server ~ 15:33:46]# rpm -ivh httpd-2.4.6-99.el7.centos.1.x86_64.rpm
错误:依赖检测失败:
/etc/mime.types 被 httpd-2.4.6-99.el7.centos.1.x86_64 需要
httpd-tools = 2.4.6-99.el7.centos.1 被 httpd-2.4.6-99.el7.centos.1.x86_64 需要
libaprutil-1.so.0()(64bit) 被 httpd-2.4.6-99.el7.centos.1.x86_64 需要
重新安装
rpm {--reinstall} [install-options] PACKAGE_FILE ...
示例:
[root@server ~ 15:35:34]# rpm --reinstall -vh lrzsz*
准备中... ################################# [100%]
正在升级/安装...
1:lrzsz-0.12.20-36.el7 ################################# [ 50%]
正在清理/删除...
2:lrzsz-0.12.20-36.el7 ################################# [100%]
提取 RPM 包中文件
Windows 提取
使用压缩工具(例如360压缩)打开rpm包,浏览和提取。
Linux 提取(了解)
- 方法一:分步骤提取
```bash # 将文件转换为cpio格式 [root@centos7 ~]# rpm2cpio httpd-2.4.6-99.el7.centos.1.x86_64.rpm > httpd-2.4.6-99.el7.centos.1.x86_64.cpio
# 查询 cpio 格式(一种打包格式)文件中有哪些文件 [root@centos7 ~]# cpio -t < httpd-2.4.6-99.el7.centos.1.x86_64.cpio ./etc/httpd ./etc/httpd/conf ./etc/httpd/conf.d ./etc/httpd/conf.d/README ./etc/httpd/conf.d/autoindex.conf …
# 配置管道查询特定文件 [root@centos7 ~]# cpio -t < httpd-2.4.6-99.el7.centos.1.x86_64.cpio |grep ‘httpd.conf’ ./etc/httpd/conf/httpd.conf ./usr/lib/tmpfiles.d/httpd.conf 19331 blocks
# 提取所有文件,-d选项指明提取过程中创建对应的目录分层结构 [root@centos7 ~]# cpio -id ‘*’ < httpd-2.4.6-99.el7.centos.1.x86_64.cpio
# 提取特定文件 [root@centos7 ~]# cpio -id ./etc/httpd/conf/httpd.conf < httpd-2.4.6-99.el7.centos.1.x86_64.cpio ```
- 方法二:一步提取所有文件
bash [root@centos7 ~]# rpm2cpio httpd-2.4.6-99.el7.centos.1.x86_64.rpm | cpio -id '*'
使用 yum 管理软件包
yum 介绍
- rpm 命令是一个管理软件包的工具,不适用于软件包存储库或自动解决来自多个源的依赖项。
- Yum(Yellowdog Updater Modified)旨在成为管理基于RPM的软件安装和更新的更好系统。yum命令允许安装,更新,删除和获取有关软件包及其依赖项的信息。
yum 命令
help
作用:
# 查看yum命令帮助信息
[root@server ~ 15:35:50]# yum help
info
作用:查看仓库中某个软件包信息
# 查看仓库中httpd包信息
[root@server ~ 15:36:36]# yum info httpd
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
可安装的软件包
名称 :httpd
架构 :x86_64
版本 :2.4.6
发布 :99.el7.centos.1
大小 :2.7 M
源 :updates/7/x86_64
简介 : Apache HTTP Server
网址 :http://httpd.apache.org/
协议 : ASL 2.0
描述 : The Apache HTTP Server is a powerful, efficient, and extensible
: web server.
list
作用:查询软件包清单
# 查看仓库中http开头的包有哪些
[root@server ~ 15:37:01]# yum list 'http*'
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
可安装的软件包
http-parser.i686 2.7.1-9.el7 base
http-parser.x86_64 2.7.1-9.el7 base
http-parser-devel.i686 2.7.1-9.el7 base
http-parser-devel.x86_64 2.7.1-9.el7 base
httpcomponents-client.noarch 4.2.5-5.el7_0 base
httpcomponents-client-javadoc.noarch 4.2.5-5.el7_0 base
httpcomponents-core.noarch 4.2.4-6.el7 base
......
# 查看仓库中httpd包有哪些版本
[root@server ~ 15:37:47]# yum list httpd --showduplicates
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
可安装的软件包
httpd.x86_64 2.4.6-95.el7.centos base
httpd.x86_64 2.4.6-97.el7.centos updates
httpd.x86_64 2.4.6-97.el7.centos.1 updates
httpd.x86_64 2.4.6-97.el7.centos.2 updates
httpd.x86_64 2.4.6-97.el7.centos.4 updates
httpd.x86_64 2.4.6-97.el7.centos.5 updates
httpd.x86_64 2.4.6-98.el7.centos.6 updates
httpd.x86_64 2.4.6-98.el7.centos.7 updates
httpd.x86_64 2.4.6-99.el7.centos.1 updates
search(了解)
作用:根据关键字搜索软件包
# 查看简介包含关键字的软件包
[root@server ~ 15:40:33]# yum search 'web server'
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
# 查看描述和简介包含关键字的软件包
[root@server ~ 15:41:13]# yum search all 'web server'
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
provides
作用:查看仓库中哪个包可以提供相应文件
# 查看仓库中哪个包可以提供文件sar程序
[root@server ~ 15:42:12]# yum provides sar
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
base/7/x86_64/filelists_db | 7.2 MB 00:00:19
epel/x86_64/filelists_db | 15 MB 00:00:21
extras/7/x86_64/filelists_db | 305 kB 00:00:00
updates/7/x86_64/filelists_db | 15 MB 00:00:14
sysstat-10.1.5-19.el7.x86_64 : Collection of performance monitoring tools for Linux
源 :base
匹配来源:
文件名 :/usr/bin/sar
# 备用查询命令
[root@centos7 ~]# yum provides '*bin/sar'
# 安装sar工具对应的软件包
[root@server ~ 15:45:21]# yum install -y sy
install
作用:安装软件包
# 安装软件包
[root@server ~ 15:46:03]# yum install -y sysstat
# 只下载不安装,将依赖软件包一并下载
# 前提是系统中没安装对应软件包,才会下载
[root@server ~ 15:50:01]# yum install vsftpd --downloadonly --downloaddir=/root/
已加载插件:fastestmirror
#vsftpd 已安装,yum 不重复下载
[root@server ~ 15:50:25]# ls vsftpd-*
vsftpd-3.0.2-29.el7_9.x86_64.rpm
localinstall
作用:安装本地文件系统中软件包
# 安装本地文件系统中vsftpd包
[root@server ~ 15:53:30]# yum localinstall ./vsftpd-3.0.2-29.el7_9.x86_64.rpm
downgrade
作用:软件包降级
# 降级 vsftpd 版本为 3.0.2-28.el7
[root@server ~ 15:54:50]# yum downgrade -y vsftpd-3.0.2-29.el7_9.x86_64
# 降级的时候,要一并降级依赖软件包
依赖降级示例:
# 环境准备:安装最新版httpd
[root@centos7 ~]# yum install -y httpd
# 降级到特定版本:降级失败,因为已安装的 httpd-tools 无法满足当前httpd版本
[root@server ~ 15:56:09]# yum downgrade -y httpd-2.4.6-97.el7.centos
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 httpd.x86_64.0.2.4.6-97.el7.centos 将被 降级
--> 正在处理依赖关系 httpd-tools = 2.4.6-97.el7.centos,它被软件包 httpd-2.4.6-97.el7.centos.x86_64 需要
---> 软件包 httpd.x86_64.0.2.4.6-99.el7.centos.1 将被 删除
--> 解决依赖关系完成
错误:软件包:httpd-2.4.6-97.el7.centos.x86_64 (updates)
需要:httpd-tools = 2.4.6-97.el7.centos
已安装: httpd-tools-2.4.6-99.el7.centos.1.x86_64 (@updates)
httpd-tools = 2.4.6-99.el7.centos.1
可用: httpd-tools-2.4.6-95.el7.centos.x86_64 (base)
httpd-tools = 2.4.6-95.el7.centos
可用: httpd-tools-2.4.6-97.el7.centos.x86_64 (updates)
httpd-tools = 2.4.6-97.el7.centos
可用: httpd-tools-2.4.6-97.el7.centos.1.x86_64 (updates)
httpd-tools = 2.4.6-97.el7.centos.1
可用: httpd-tools-2.4.6-97.el7.centos.2.x86_64 (updates)
httpd-tools = 2.4.6-97.el7.centos.2
可用: httpd-tools-2.4.6-97.el7.centos.4.x86_64 (updates)
httpd-tools = 2.4.6-97.el7.centos.4
可用: httpd-tools-2.4.6-97.el7.centos.5.x86_64 (updates)
httpd-tools = 2.4.6-97.el7.centos.5
可用: httpd-tools-2.4.6-98.el7.centos.6.x86_64 (updates)
httpd-tools = 2.4.6-98.el7.centos.6
可用: httpd-tools-2.4.6-98.el7.centos.7.x86_64 (updates)
httpd-tools = 2.4.6-98.el7.centos.7
您可以尝试添加 --skip-broken 选项来解决该问题
您可以尝试执行:rpm -Va --nofiles --nodigest
# 解决方法:httpd-tools与httpd一起降级到相同版本
[root@server ~ 15:57:27]# yum downgrade -y httpd-tools-2.4.6-97.el7.centos httpd-2.4.6-97.el7.centos
update
作用:软件包升级
# 升级 vsftpd 版本为 3.0.2-29.el7_9
[root@server ~ 15:58:00]# yum update vsftpd-3.0.2-29.el7_9
# 升级系统中所有软件为最新版本
[root@server ~ 16:00:02]# yum update
remove
作用:软件包卸载
# 卸载软件包
[root@server ~ 16:00:43]# yum remove -y vsftpd
history 子命令
list
作用:查询yum事务历史记录
[root@server ~ 16:00:56]# yum history list
已加载插件:fastestmirror
ID | 登录用户 | 日期和时间 | 操作 | 变更数
-------------------------------------------------------------------------------
16 | root <root> | 2026-05-23 16:00 | Erase | 1
15 | root <root> | 2026-05-23 15:57 | Downgrade | 2
[root@centos7 ~]# yum install -y vsftpd
[root@centos7 ~]# yum downgrade -y vsftpd
# list 可以省略
[root@server ~ 16:02:20]# yum history
已加载插件:fastestmirror
ID | 登录用户 | 日期和时间 | 操作 | 变更数
-------------------------------------------------------------------------------
18 | root <root> | 2026-05-23 16:02 | Downgrade | 1
17 | root <root> | 2026-05-23 16:02 | Install | 1
16 | root <root> | 2026-05-23 16:00 | Erase | 1
15 | root <root> | 2026-05-23 15:57 | Downgrade | 2
info
作用:特定yum事务详情
[root@server ~ 16:03:30]# yum history info 2
已加载插件:fastestmirror
事务 ID: 2
起始时间 : Thu May 14 09:06:37 2026
启动 RPM 数据库 : 312:499b8befefcbbb73843ba57c528196865f88451d
结束时间 : 09:06:43 2026 (6 秒)
结束 RPM 数据库 : 348:bc9b692c0e326e6ab21641fc36c579df62811fe9
用户 : root <root>
返回码 : 成功
命令行 : install -y bash-completion vim open-vm-tools lrzsz unzip rsync sshpass
事务完成属主:
已安装 rpm-4.11.3-48.el7_9.x86_64 @anaconda
已安装 yum-3.4.3-168.el7.centos.noarch @anaconda
已安装 yum-plugin-fastestmirror-1.1.31-54.el7_8.noarch @anaconda
已变更的包:
安装 bash-completion-1:2.1-8.el7.noarch @base
依赖安装 gpm-libs-1.20.7-6.el7.x86_64 @base
undo
作用:反向操作第4个事务
[root@server ~ 16:06:27]# yum history undo 4
redo
作用:重做操作第4个事务
[root@server ~ 16:07:46]# yum history redo 4
软件包组管理
# 查看仓库中软件包组清单
[root@server ~ 16:07:59]# yum grouplist
已加载插件:fastestmirror
没有安装组信息文件
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
可用的环境分组:
最小安装
基础设施服务器
计算节点
文件及打印服务器
Cinnamon 桌面环境
MATE 桌面环境
基本网页服务器
虚拟化主机
带 GUI 的服务器
[root@server ~ 16:09:30]# yum grouplist -v
加载 "fastestmirror" 插件
Config time: 0.005
Yum version: 3.4.3
没有安装组信息文件
Maybe run: yum groups mark convert (see man yum)
设置软件包群集
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
pkgsack time: 0.009
group time: 0.051
可用的环境分组:
最小安装 (minimal)
基础设施服务器 (infrastructure-server-environment)
计算节点 (compute-node-environment)
文件及打印服务器 (file-print-server-environment)
Cinnamon 桌面环境 (cinnamon-desktop-environment)
MATE 桌面环境 (mate-desktop-environment)
基本网页服务器 (web-server-environment)
虚拟化主机 (virtualization-host-environment)
带 GUI 的服务器 (graphical-server-environment)
GNOME 桌面 (gnome-desktop-environment)
KDE Plasma Workspaces (kde-desktop-environment)
[root@server ~ 16:10:09]# unset LANG
[root@server ~ 16:11:40]# yum group list -v
Loading "fastestmirror" plugin
Config time: 0.004
Yum version: 3.4.3
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Setting up Package Sacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
pkgsack time: 0.009
group time: 0.049
Available Environment Groups:
Minimal Install (minimal)
Compute Node (compute-node-environment)
Infrastructure Server (infrastructure-server-environment)
# 查看仓库中软件包组信息
[root@server ~ 16:11:52]# yum groupinfo <tab><tab>
[root@server ~ 16:13:26]# yum groupinfo 'Server with GUI'
# 安装仓库中软件包组
[root@server ~ 16:13:40]# yum groupinstall 'Server with GUI'
# 卸载仓库中软件包组
[root@server ~ 16:14:55]# yum groupremove 'Server with GUI'
配置 yum 仓库
yum 仓库配置
yum 工具的配置文件是 /etc/yum.conf,该文件包括两部分:
- 全局配置:main 块,提供每个仓库默认配置。
- 每个仓库的独立配置。
[root@server ~ 16:15:05]# cat /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
# This is the default, if you make this bigger yum won't see if the metadata
# is newer on the remote and so you'll "gain" the bandwidth of not having to
# download the new metadata and "pay" for it by yum not having correct
# information.
# It is esp. important, to have correct metadata, for distributions like
# Fedora which don't keep old packages around. If you don't like this checking
# interupting your command line usage, it's much better to have something
# manually check the metadata once an hour (yum-updatesd will do this).
# metadata_expire=90m
# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d
使用如下命令查看完整的配置内容:
[root@server ~ 16:16:07]# yum install -y yum-utils
# 导出 yum 完整配置
[root@server ~ 16:16:16]# yum-config-manager
Loaded plugins: fastestmirror
========================================== main =======================================
[main]
alwaysprompt = True
assumeno = False
assumeyes = False
autocheck_running_kernel = True
autosavets = True
bandwidth = 0
......
install
======================================= repo: base======================================
[base]
async = True
bandwidth = 0
base_persistdir = /var/lib/yum/repos/x86_64/7
main 部分设置全局配置:
- enabled = 1,仓库默认启用。
- gpgcheck = 1,仓库默认启用gpg校验。
- keepcache = 0,不保存缓存。
- cachedir = /var/cache/yum,缓存文件保存的位置。
- reposdir = /etc/yum.repos.d, /etc/yum/repos.d,yum仓库配置文件。
yum管理的软件包存放在yum仓库,yum仓库配置文件存放在/etc/yum.repos.d目录。
[root@server ~ 16:16:34]# ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-Media.repo CentOS-fasttrack.repo
CentOS-CR.repo CentOS-Sources.repo CentOS-x86_64-kernel.repo
CentOS-Debuginfo.repo CentOS-Vault.repo epel.repo
ls
[root@server ~ 16:18:24]# ls /etc/yum.repos.d/ /etc/distro.repos.d
ls: cannot access /etc/distro.repos.d: No such file or directory
yum 仓库管理
查看 yum 仓库
# 查看启用的yum仓库
[root@server ~ 16:20:09]# yum repolist
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
源标识 源名称 状态
base/7/x86_64 CentOS-7 - Base - mirrors.aliyun.com 10,072
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 13,791
extras/7/x86_64 CentOS-7 - Extras - mirrors.aliyun.com 526
updates/7/x86_64 CentOS-7 - Updates - mirrors.aliyun.com 6,173
repolist: 30,562
#[root@server ~ 16:20:14]# export LANG=zh_CN.UTF-8
#中文
# 查看 yum 所有仓库,包括未启用的仓库
[root@centos7 ~]# yum repolist all
启用和禁用仓库
# 启用
[root@server ~ 16:20:14]# yum-config-manager --enable epel-debuginfo
# 禁用
[root@server ~ 16:21:39]# yum-config-manager --disable epel-debuginfo
也可以编辑仓库配置文件,将仓库中enabled值设置为1启用,设置为0禁用。
# 查看禁用的仓库清单
[root@server ~ 16:22:46]# vim /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://mirrors.aliyun.com/epel/7/$basearch
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
baseurl=http://mirrors.aliyun.com/epel/7/$basearch/debug
failovermethod=priority
enabled=1
#从0改为1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=0
[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
baseurl=http://mirrors.aliyun.com/epel/7/SRPMS
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=0
~
仓库缓存管理
更新缓存后,yum install命令可补全软件包名称。
# 清理缓存数据
[root@server ~ 16:23:52]# yum clean <tab><tab>
all dbcache headers packages
cache expire-cache metadata
# 清理所有缓存数据
[root@server ~ 16:23:52]# yum clean all
已加载插件:fastestmirror
正在清理软件源: base epel epel-debuginfo extras updates
Cleaning up list of fastest mirrors
# 创建缓存数据
[root@server ~ 16:24:25]# yum makecache
已加载插件:fastestmirror
Determining fastest mirrors
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
base | 3.6 kB 00:00:00
epel | 4.3 kB 00:00:00
epel-debuginfo | 3.0 kB 00:00:00
extras
...
元数据缓存已建立
添加 kubernetes 仓库
[root@server ~ 16:27:41]# yum-config-manager --add-repo=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
[root@server ~ 16:28:06]# cat /etc/yum.repos.d/mirrors.aliyun.com_kubernetes_yum_repos_kubernetes-el7-x86_64_.repo
[mirrors.aliyun.com_kubernetes_yum_repos_kubernetes-el7-x86_64_]
name=added from: https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
# 安装 kubectl 包
[root@server ~ 16:29:01]# yum install kubectl --nogpgcheck
添加 docker-ce 仓库
[root@server ~ 16:32:46]# cat << 'EOF' > /etc/yum.repos.d/docker-ce.repo
> [docker-ce-stable]
> name=Docker CE Stable - $basearch
> baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable
> enabled=1
> gpgcheck=0
> EOF
# 查看docker版本
[root@server ~ 16:33:19]# yum list docker-ce
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
docker-ce-stable | 3.5 kB 00:00:00
(1/2): docker-ce-stable/7/x86_64/updateinfo | 55 B 00:00:00
(2/2): docker-ce-stable/7/x86_64/primary_db | 152 kB 00:00:01
可安装的软件包
docker-ce.x86_64 3:26.1.4-1.el7 docker-ce-stable
epel 仓库
EPEL(Extra Packages for Enterprise Linux),是由Fedora Special Interest Group维护的Enterprise Linux(RHEL、CentOS)中经常用到的包。
# 直接使用aliyun的源
[root@server ~ 16:33:44]# curl -s -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
源码安装软件
源码安装 nginx
介绍
Nginx是一个高性能的HTTP和反向代理web服务器。
官方地址:https://nginx.org
安装
# 安装依赖
[root@server ~ 16:36:46]# yum install gcc make pcre-devel zlib-devel
# 下载
[root@server ~ 16:37:44]# wget https://nginx.org/download/nginx-1.24.0.tar.gz
# 解压
[root@server ~ 16:40:17]# tar -xf nginx-1.24.0.tar.gz
# 配置
[root@server ~ 16:40:46]# cd nginx-1.24.0/
[root@server nginx-1.24.0 16:41:04]# ./configure --prefix=/usr/local/nginx
# 将所有的nginx相关文件存放在/usr/local/nginx
# 编译安装
[root@server nginx-1.24.0 16:41:39]# make && make install
[root@server nginx-1.24.0 16:48:21]# ls /usr/local/nginx
conf html logs sbin
#一般make install产生目录
# 配置环境变量
[root@server nginx-1.24.0 16:48:28]# export PATH=$PATH:/usr/local/nginx/sbin/
[root@server nginx-1.24.0 16:49:02]# echo 'export PATH=$PATH:/usr/local/nginx/sbin/' >> ~/.bashrc
使用
# 启动服务
[root@server nginx-1.24.0 16:52:13]# nginx
# 验证
[root@server nginx-1.24.0 17:05:26]# curl -X GET http://localhost
<p><em>Thank you for using nginx.</em></p>
# 退出服务
[root@server nginx-1.24.0 17:05:54]# nginx -s quit
命令总结:
- nginx,启动服务
- nginx -s quit,待nginx进程处理任务完毕进行停止。
- nginx -s stop,查出nginx进程id再使用kill命令强制杀掉进程。
- nginx -s reload,重新加载服务。
配置 nginx 服务
[root@server nginx-1.24.0 17:06:09]# cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/nginx.service
[root@server nginx-1.24.0 17:06:46]# vim /etc/systemd/system/nginx.service
[Unit]
Description=Nginx server daemon
[Service]
Type=forking
antedBy=multi-user.targe
ad=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
[Install]
WantedBy=multi-user.target
[root@centos7 ~]# systemctl daemon-reload
[root@centos7 ~]# systemctl enable nginx.service --now
源码安装 cmatrix
介绍
Cmatrix 是一款 Linux 环境下的炫酷屏保软件其效果类似于黑客帝国电影中的代码雨。

项目地址:https://github.com/abishekvashok/cmatrix
安装
# 安装依赖包
[root@centos7 ~]# yum -y install gcc make autoconf ncurses-devel
# 下载
[root@server nginx-1.24.0 17:10:02]# wget https://laoma.cloud/course-materials/softwares/stage01/cmatrix-1.2.tar.gz
# 解压
[root@server nginx-1.24.0 17:11:33]# tar -xf cmatrix-1.2.tar.gz
# 配置软件
[root@server nginx-1.24.0 17:11:56]# cd cmatrix-1.2/
[root@server cmatrix-1.2 17:12:06]# ./configure --prefix=/usr/local/cmatrix
# 编译并安装
[root@server cmatrix-1.2 17:12:55]# make install
使用
# 配置环境变量
[root@server cmatrix-1.2 17:13:02]# export PATH=$PATH:/usr/local/cmatrix/bin
# 帮助信息
[root@server cmatrix-1.2 17:13:37]# cmatrix --help
Usage: cmatrix -[abBfhlsVx] [-u delay] [-C color]
-a: Asynchronous scroll
-b: Bold characters on
-B: All bold characters (overrides -b)
-f: Force the linux $TERM type to be on
-l: Linux mode (uses matrix console font)
-o: Use old-style scrolling
-h: Print usage and exit
-n: No bold characters (overrides -b and -B, default)
-s: "Screensaver" mode, exits on first keystroke
-x: X window mode, use if your xterm is using mtx.pcf
-V: Print version information and exit
-u delay (0 - 10, default 4): Screen update delay
-C [color]: Use this color for matrix (default green)
# 执行
[root@server cmatrix-1.2 17:13:42]# cmatrix
# 效果如下:

[root@server cmatrix-1.2 17:15:02]# cmatrix -b -u 5 -C cyan
# -b 加粗字体
# -u 滚动速度
# -C 字体颜色 绿色(green)、红色(red)、蓝色(blue)、白色(white)、黄色(yellow)、青色(cyan)、洋红色(magenta)以及黑色(black)这些颜色。

随时改变颜色
当然,你无需重新启动程序,就可以随时改变显示的颜色。但需要记住,不同的键位对应着不同的颜色。在 Cmatrix 未关闭的情况下,如果你按下了存储在键位上的指令,显示的颜色将会直接变更。
| 颜色 | 相应键位 | 对应数字键 |
|---|---|---|
| 红色 | ! | shift+1 |
| 绿色 | @ | shift+2 |
| 黄色 | # | shift+3 |
| 蓝色 | $ | shift+4 |
| 洋红色 | % | shift+5 |
| 青色 | ^ | shift+6 |
| 白色 | & | shift+7 |
| 黑色 | ) | shift+8 |
自由调整速度
在 Cmatrix 运行的过程中,你可以按 0 到 9 的任何一位数字键来随意改变当前的更新速度。
更多推荐




所有评论(0)