【Linux日新月异(三)】CentOS 7软件管理深度指南:从YUM到源码编译
🌌提供:
1. Kimi K2 Thinking(网站: 大语言模型(Large Language Model, LLM),是当前人工智能领域的重要技术分支,专注于自然语言处理和生成任务。)【开源】「AL」〖✿✿✿✿✿〗
🔔说明: 本文内容由Kimi K2生成。AI创作虽经校对,仍难免疏漏或偏颇之处。若您发现错漏、或有任何建议,恳请不吝赐教。您的每一次指正,都是我改进与成长的重要指引。
📓摘要:
略...(有好建议的可以留言哦~~~(✿◕‿◕✿))
📦 CentOS 7软件管理深度指南:从YUM到源码编译
软件管理是Linux系统运维的核心技能!CentOS 7采用YUM(Yellowdog Updater Modified)作为主力包管理器,底层依赖RPM(Red Hat Package Manager),支持仓库、依赖自动解决、软件组等强大功能。掌握这些命令,软件安装卸载游刃有余!
一、🎛️ YUM基础命令(强烈推荐)
1. yum update- 更新软件包
语法:
yum update [软件包名]
案例1:更新所有软件包(⚠️高危操作)
# 更新系统所有软件到最新版本
yum update -y
# -y: 自动确认yes,无需交互# ⚠️ 警告:生产环境务必先测试!可能导致:
# 1. 内核更新需重启
# 2. 软件版本变化导致配置不兼容
# 3. 依赖冲突
案例2:更新指定软件包
# 只更新nginx
yum update nginx -y# 更新多个包
yum update nginx php mysql -y
案例3:检查可更新(不执行)
# 只检查哪些包可更新
yum check-update# 输出:
# Updated Packages
# kernel.x86_64 3.10.0-1160.99.1.el7 updates
# nginx.x86_64 1.20.1-9.el7 epel
⚠️ 更新注意事项:
- 🔥生产环境禁忌:绝不直接
yum update,应在测试环境验证 - 内核更新:如果更新kernel,需重启生效,计划维护窗口
- 版本锁定:重要软件用
yum versionlock锁定版本 - 备份配置:更新前备份
/etc目录,防止配置被覆盖
2. yum install- 安装软件包
语法:
yum install [选项] 软件包名
核心选项:
-y:自动确认--downloadonly:仅下载不安装--downloaddir=路径:指定下载目录
案例1:安装软件
# 安装nginx
yum install nginx -y# 安装多个软件
yum install vim git wget curl -y
案例2:下载RPM包不安装(离线环境必备)
# 下载nginx及依赖到/opt/rpms
yum install --downloadonly --downloaddir=/opt/rpms nginx# 查看下载的文件
ls /opt/rpms
# nginx-1.20.1-9.el7.x86_64.rpm
# nginx-all-modules-1.20.1-9.el7.noarch.rpm
# ...
案例3:从本地RPM安装(自动解决依赖)
# 在/opt/rpms目录下
yum localinstall nginx-1.20.1-9.el7.x86_64.rpm -y
# 自动查找并安装依赖包
案例4:安装特定版本
# 查看可用版本
yum --showduplicates list mysql# 安装指定版本
yum install mysql-5.7.38-1.el7.x86_64 -y
⚠️ 安装注意事项:
- 🔥仓库优先级:多个仓库有同名软件时,先检查
yum repolist all的优先级 - 依赖冲突:如果提示conflicts,用
yum deplist 包名查看依赖树 - 32位库:64位系统安装32位软件需
yum install glibc.i686 - 重复安装:如果已安装,
yum install会提示"already installed"
3. yum remove/yum erase- 卸载软件包
语法:
yum remove [软件包名]
yum erase [软件包名] # 同remove
案例1:卸载软件
# 卸载nginx
yum remove nginx -y# 卸载多个
yum remove nginx php-fpm -y
案例2:卸载并删除配置文件
# yum remove不会删除/etc下的配置文件
# 要完全清理,需手动删除
rm -rf /etc/nginx
rm -rf /var/log/nginx
⚠️ 卸载注意事项:
- 🔥依赖链风险:卸载可能连带删除依赖此包的其他软件!
- 确认提示:yum会列出将被删除的包,务必仔细检查
- 系统核心包:切勿卸载
glibc、kernel、systemd等核心包,系统会崩溃 - 保护机制:可用
yum versionlock锁定关键包,防止误删
4. yum search/yum provides- 搜索软件包
语法:
yum search 关键词
yum provides 文件名/命令
案例1:按名称搜索
yum search mysql
# 输出所有含mysql的包
案例2:查找命令属于哪个包
# 找不到dig命令,查在哪个包
yum provides dig# 输出:
# bind-utils-9.11.4-26.P2.el7_9.9.x86_64 : Utilities for querying DNS name servers
# Repo : base
# Matched from:
# Filename : /usr/bin/dig# 安装
yum install bind-utils -y
案例3:查找库文件
# 编译时提示缺少libssl.so
yum provides "*/libssl.so*"
# 输出openssl-devel包
⚠️ 搜索技巧:
- 🔥provides反向查询:非常适合解决"缺少xxx文件"问题
- search太慢:可用
yum search fast或先yum makecache更新缓存 - 仓库未索引:某些仓库支持不全,可尝试
epel-release扩展
二、📦 RPM底层命令(YUM的基石)
1. rpm -q- 查询已安装软件包
语法:
rpm -q [选项] [软件包名]
核心选项:
-q:查询一个包-qa:查询所有已安装包-qi:显示包详细信息-ql:列出包安装的文件-qc:列出配置文件-qd:列出文档-qf 文件名:查询文件属于哪个包(超有用!)
案例1:查询软件是否安装
# 查询nginx是否安装
rpm -q nginx
# 输出:nginx-1.20.1-9.el7.x86_64# 未安装则输出:
# package nginx is not installed
案例2:查询所有已安装包
# 统计已安装包数量
rpm -qa | wc -l
# 输出:1200# 查找所有mysql相关包
rpm -qa | grep mysql
案例3:查看文件属于哪个包(反向查询)
# 查询/usr/bin/python属于哪个包
rpm -qf /usr/bin/python# 输出:python-2.7.5-89.el7_9.x86_64# 查询配置文件
rpm -qf /etc/nginx/nginx.conf
# 输出:nginx-1.20.1-9.el7.x86_64
案例4:查看包安装了哪些文件
# 查看nginx包所有文件
rpm -ql nginx# 只看配置文件
rpm -qc nginx
# 输出:
# /etc/logrotate.d/nginx
# /etc/nginx/nginx.conf
# /etc/nginx/fastcgi_params
案例5:查看包的详细信息
rpm -qi nginx
# 输出包含:Name, Version, Release, Architecture, Install Date, Group, Size, License, Signature等
⚠️ 查询注意事项:
- 🔥查询精确匹配:
-q必须完整包名,rpm -q mysql不匹配mysql-server - 模糊查询:用
rpm -qa | grep 关键词 - 文件查询:只有rpm安装的文件才能用
-qf查询 - 性能:
rpm -qa会读取整个数据库,首次执行稍慢
2. rpm -i/rpm -U- 安装/升级RPM包
语法:
rpm -i 包文件.rpm # install
rpm -U 包文件.rpm # upgrade(或安装)
rpm -F 包文件.rpm # freshen(仅升级已安装的)
案例1:本地安装RPM包
# 安装单个RPM
rpm -ivh nginx-1.20.1-9.el7.x86_64.rpm
# -i: install
# -v: verbose
# -h: 显示进度条# 输出:
Preparing... ################################# [100%]
Updating / installing...1:nginx-1.20.1-9.el7 ################################# [100%]
案例2:升级软件
# 升级nginx
rpm -Uvh nginx-1.20.1-10.el7.x86_64.rpm
⚠️ RPM安装注意事项:
- 🔥依赖地狱:rpm不会自动解决依赖,缺少依赖会报错
error: Failed dependencies:libssl.so.10()(64bit) is needed by nginx-1.20.1-9.el7.x86_64libcrypto.so.10()(64bit) is needed by nginx-1.20.1-9.el7.x86_64
- 解决方案:用
yum localinstall自动解决依赖 - 覆盖安装:
--force强制安装(⚠️危险!会覆盖文件) - 旧版本:
--oldpackage降级安装
3. rpm -e - 卸载RPM包
语法:
rpm -e 软件包名
案例:
# 卸载nginx(只需包名,无需版本)
rpm -e nginx# 忽略依赖卸载(⚠️会留孤儿包)
rpm -e --nodeps nginx
⚠️ 卸载注意事项:
- 🔥依赖错误:如果其他包依赖它,会报错
error: Failed dependencies:nginx is needed by (installed) web-stack-1.0-1.noarch
- 危险操作:
rpm -e --nodeps glibc会破坏系统!
4. rpm -V- 验证软件包文件完整性
案例:
# 验证nginx包所有文件
rpm -V nginx
# 无输出=所有文件正常# 如果文件被篡改
rpm -V nginx
# 输出:
S.5....T. /etc/nginx/nginx.conf
# 字段含义:
# S=大小改变, 5=MD5改变, T=时间改变
⚠️ 用途:检查系统文件是否被入侵篡改, Particularly重要!**
三、🏛️ 仓库管理(Repository)
1. yum repolist - 查看仓库
语法:
yum repolist [选项]
核心选项:
all:显示所有(启用的和禁用的)-v:详细信息enabled:仅启用的(默认)disabled:仅禁用的
案例1:查看启用的仓库
yum repolist
# 输出:
repo id repo name
base/7/x86_64 CentOS-7 - Base
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64
extras/7/x86_64 CentOS-7 - Extras
updates/7/x86_64 CentOS-7 - Updates
案例2:查看所有仓库
yum repolist all
# 输出:
repo id repo name status
base/7/x86_64 CentOS-7 - Base enabled: 10,072
base-source/7/x86_64 CentOS-7 - Base Sources disabled
centosplus/7/x86_64 CentOS-7 - Plus disabled
epel/x86_64 Extra Packages for Enterprise Linux 7 enabled: 13,500
2. yum-config-manager - 仓库管理(yum-utils)
安装:
yum install -y yum-utils
案例1:启用/禁用仓库
# 启用centosplus仓库
yum-config-manager --enable centosplus# 禁用epel仓库(临时)
yum-config-manager --disable epel# 查看仓库配置
yum-config-manager --save base
案例2:添加新仓库
# 添加nginx官方仓库
nano /etc/yum.repos.d/nginx.repo
# [nginx-stable]
# name=nginx stable repo
# baseurl=http://nginx.org/packages/centos/7/$basearch/
# gpgcheck=1
# enabled=1
# gpgkey=https://nginx.org/keys/nginx_signing.key# 清理缓存
yum clean all# 验证
yum repolist | grep nginx
案例3:使用yum-config-manager添加
# 添加MySQL 8.0仓库
yum-config-manager --add-repo https://repo.mysql.com/yum/mysql-8.0-community/el/7/x86_64/
⚠️ 仓库管理注意事项:
- 🔥仓库冲突:不同仓库有同名软件时,优先级高的生效
- 配置位置:仓库配置文件在
/etc/yum.repos.d/,以.repo结尾 - GPG检查:建议保持
gpgcheck=1验证软件签名,防篡改 - EPEL必备:
yum install epel-release是CentOS第一步!
3. yum clean- 清理缓存
语法:
yum clean [选项]
选项:
all:清理所有缓存metadata:清理元数据packages:清理下载的包expire-cache:过期缓存
案例:
# 清理所有缓存(解决metadata错误)
yum clean all# 只清理软件包(释放磁盘)
yum clean packages# 统计缓存大小
du -sh /var/cache/yum
⚠️ 注意事项:
- 🔥缓存作用:
yum默认缓存元数据和下载的包,加快重复安装 - 空间占用:长期不清理可能占数GB空间
- 错误排查:出现
metadata corrupted时,yum clean all是首选方案 - 自动清理:可配置
/etc/yum.conf中的keepcache=0禁用缓存
四、📚 软件组管理(Group)
yum grouplist / groupinstall - 软件组
案例1:查看可用软件组
yum grouplist
# 输出:
# Available Environment Groups:
# Minimal Install
# Compute Node
# Infrastructure Server
# File and Print Server
# Basic Web Server
# Virtualization Host
# Server with GUI
# Available Groups:
# Compatibility Libraries
# Development Tools
# Scientific Support
# Security Tools
案例2:安装开发工具组(一键装编译环境)
yum groupinstall "Development Tools" -y
# 包含:gcc, make, automake, gdb等数十个工具# 验证
gcc --version
make --version
案例3:安装桌面环境
# 安装GNOME桌面
yum groupinstall "Server with GUI" -y# 启动桌面
systemctl set-default graphical.target
reboot
⚠️ 软件组注意事项:
- 🔥组名带空格:必须用引号括起来
- 批量安装:非常适合快速搭建开发、测试环境
- 组内更新:组内软件可单独更新,不受组影响
五、🔧 源码编译安装(高级)
步骤1:准备编译环境
# 安装开发工具组
yum groupinstall "Development Tools" -y# 安装常用库
yum install zlib-devel openssl-devel pcre-devel -y
步骤2:下载解压源码
# 下载nginx源码
wget http://nginx.org/download/nginx-1.24.0.tar.gz# 解压
tar -xzf nginx-1.24.0.tar.gz
cd nginx-1.24.0
步骤3:配置编译选项
./configure --prefix=/opt/nginx \--with-http_ssl_module \--with-http_v2_module \--with-pcre \--with-zlib# 检查依赖
# 如果缺少库,会报错,根据提示安装
# 如:./configure: error: SSL modules require the OpenSSL library
# 解决:yum install openssl-devel
步骤4:编译安装
# 编译(多核加速)
make -j 4# 安装
make install# 验证
/opt/nginx/sbin/nginx -v
⚠️ 源码安装注意事项:
- 🔥维护成本:源码安装无法yum更新,需手动跟踪安全补丁
- 卸载麻烦:没有
make uninstall,需手动删除文件 - PATH问题:安装到非标准路径需手动添加
/etc/profile - 推荐场景:仅当yum仓库版本太旧或需定制功能时使用
六、📦 查询与信息获取
1. yum info- 查看软件包信息
案例:
yum info nginx
# 输出:
Name : nginx
Arch : x86_64
Epoch : 1
Version : 1.20.1
Release : 9.el7
Size : 1.7 M
Repo : epel
Summary : A high performance web server
URL : https://nginx.org
License : BSD
Description : nginx is a web server
2. yum list- 列出软件包
案例:
# 列出所有nginx包
yum list nginx
# 输出:
# Available Packages
# nginx.x86_64 1.20.1-9.el7 epel# 列出已安装的
yum list installed | grep nginx# 列出可更新的
yum list updates
3. yum history- 查看操作历史
案例:
yum history
# 输出:
ID | Login user | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------10 | root <root> | 2024-11-15 10:30 | Install | 1 9 | root <root> | 2024-11-10 14:20 | Update | 5 8 | root <root> | 2024-11-08 09:15 | Erase | 1 # 查看第10次详情
yum history info 10# 回滚第10次操作(撤销安装)
yum history undo 10
⚠️ history注意事项:
- 🔥回滚限制:只能回滚yum操作,手动rpm安装无法回滚
- 事务完整性:yum以事务为单位,保证操作原子性
- 清理历史:
yum history new清空历史
七、⚠️ 软件管理黄金法则
1. 🔥 生产环境铁律
- 永不
yum update -y:必须指定包名,逐个更新 - 测试先行:所有更新先在测试环境验证
- 版本锁定:关键软件(nginx/mysql)用
yum versionlock锁定 - 定期审计:每月
yum list updates检查安全更新
2. 🔥 仓库管理规范
- EPEL必备:优先安装
epel-release - 官方优先:官方仓库 > EPEL > 第三方
- GPG验证:保持
gpgcheck=1,防止恶意软件 - 内网镜像:生产环境搭建内网yum镜像,加快速度
3. 🔥 查询与验证
- 文件归属:不确定文件来源,
rpm -qf /path/to/file - 完整性检查:定期
rpm -Va验证系统文件完整性 - 安全审计:检查
/var/log/yum.log所有安装记录
4. 🔥 源码安装准则
- 最后手段:优先用yum,源码安装增加维护成本
- 统一路径:统一安装到
/opt或/usr/local - 文档记录:记录安装步骤和版本,便于交接
- 独立用户:服务类软件创建独立用户运行
八、📚 快速命令速查
| 需求 | 命令 | 示例 |
|---|---|---|
| 安装软件 | yum install | yum install nginx -y |
| 卸载软件 | yum remove | yum remove nginx -y |
| 更新系统 | yum update | yum update nginx -y |
| 查询包 | yum info | yum info nginx |
| 搜索包 | yum search | yum search mysql |
| 找文件归属 | yum provides/rpm -qf | yum provides dig |
| 列出已安装 | rpm -qa | rpm -qa | grep nginx |
| 查看文件列表 | rpm -ql | rpm -ql nginx |
| 查看仓库 | yum repolist | yum repolist enabled |
| 安装软件组 | yum groupinstall | yum groupinstall "Development Tools" |
| 清理缓存 | yum clean | yum clean all |
| 查看历史 | yum history | yum history undo 10 |
| 版本锁定 | yum versionlock | yum versionlock add nginx |
| 本地安装 | yum localinstall | yum localinstall *.rpm |
🎓 总结:软件管理的"三字经"
- 优先yum:能用yum不源码,自动解决依赖
- 谨慎更新:生产环境逐个更新,禁止批量update
- 锁定版本:关键服务锁定,避免意外升级
- 善用查询:
rpm -qf和yum provides解决文件归属 - 记录历史:
yum history追踪所有操作
记住:仓库是源泉,YUM是舵手,RPM是根基,源码是终章!
📖原文: 不破不立,破而后立。大破大立,晓喻新生。-- 荒《完美世界》
⌛怡然: ...
