【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- 更新软件包

语法:

bash 复制代码
yum update [软件包名]

案例1:更新所有软件包(⚠️高危操作)

bash 复制代码
# 更新系统所有软件到最新版本
yum update -y
# -y: 自动确认yes,无需交互

# ⚠️ 警告:生产环境务必先测试!可能导致:
# 1. 内核更新需重启
# 2. 软件版本变化导致配置不兼容
# 3. 依赖冲突

案例2:更新指定软件包

bash 复制代码
# 只更新nginx
yum update nginx -y

# 更新多个包
yum update nginx php mysql -y

案例3:检查可更新(不执行)

bash 复制代码
# 只检查哪些包可更新
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- 安装软件包

语法:

bash 复制代码
yum install [选项] 软件包名

核心选项:

  • -y:自动确认
  • --downloadonly:仅下载不安装
  • --downloaddir=路径:指定下载目录

案例1:安装软件

bash 复制代码
# 安装nginx
yum install nginx -y

# 安装多个软件
yum install vim git wget curl -y

案例2:下载RPM包不安装(离线环境必备)

bash 复制代码
# 下载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安装(自动解决依赖)

bash 复制代码
# 在/opt/rpms目录下
yum localinstall nginx-1.20.1-9.el7.x86_64.rpm -y
# 自动查找并安装依赖包

案例4:安装特定版本

bash 复制代码
# 查看可用版本
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- 卸载软件包

语法:

bash 复制代码
yum remove [软件包名]
yum erase [软件包名]  # 同remove

案例1:卸载软件

bash 复制代码
# 卸载nginx
yum remove nginx -y

# 卸载多个
yum remove nginx php-fpm -y

案例2:卸载并删除配置文件

bash 复制代码
# yum remove不会删除/etc下的配置文件
# 要完全清理,需手动删除
rm -rf /etc/nginx
rm -rf /var/log/nginx

⚠️ 卸载注意事项:

  • 🔥依赖链风险:卸载可能连带删除依赖此包的其他软件!
  • 确认提示 :yum会列出将被删除的包,务必仔细检查
  • 系统核心包 :切勿卸载glibckernelsystemd等核心包,系统会崩溃
  • 保护机制 :可用yum versionlock锁定关键包,防止误删

语法:

bash 复制代码
yum search 关键词
yum provides 文件名/命令

案例1:按名称搜索

bash 复制代码
yum search mysql
# 输出所有含mysql的包

案例2:查找命令属于哪个包

bash 复制代码
# 找不到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:查找库文件

bash 复制代码
# 编译时提示缺少libssl.so
yum provides "*/libssl.so*"
# 输出openssl-devel包

⚠️ 搜索技巧:

  • 🔥provides反向查询:非常适合解决"缺少xxx文件"问题
  • search太慢 :可用yum search fast或先yum makecache更新缓存
  • 仓库未索引 :某些仓库支持不全,可尝试epel-release扩展

二、📦 RPM底层命令(YUM的基石)

1. rpm -q- 查询已安装软件包

语法:

bash 复制代码
rpm -q [选项] [软件包名]

核心选项:

  • -q:查询一个包
  • -qa:查询所有已安装包
  • -qi:显示包详细信息
  • -ql:列出包安装的文件
  • -qc:列出配置文件
  • -qd:列出文档
  • -qf 文件名:查询文件属于哪个包(超有用!

案例1:查询软件是否安装

bash 复制代码
# 查询nginx是否安装
rpm -q nginx
# 输出:nginx-1.20.1-9.el7.x86_64

# 未安装则输出:
# package nginx is not installed

案例2:查询所有已安装包

bash 复制代码
# 统计已安装包数量
rpm -qa | wc -l
# 输出:1200

# 查找所有mysql相关包
rpm -qa | grep mysql

案例3:查看文件属于哪个包(反向查询)

bash 复制代码
# 查询/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:查看包安装了哪些文件

bash 复制代码
# 查看nginx包所有文件
rpm -ql nginx

# 只看配置文件
rpm -qc nginx
# 输出:
# /etc/logrotate.d/nginx
# /etc/nginx/nginx.conf
# /etc/nginx/fastcgi_params

案例5:查看包的详细信息

bash 复制代码
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包

语法:

bash 复制代码
rpm -i 包文件.rpm          # install
rpm -U 包文件.rpm          # upgrade(或安装)
rpm -F 包文件.rpm          # freshen(仅升级已安装的)

案例1:本地安装RPM包

bash 复制代码
# 安装单个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:升级软件

bash 复制代码
# 升级nginx
rpm -Uvh nginx-1.20.1-10.el7.x86_64.rpm

⚠️ RPM安装注意事项:

  • 🔥依赖地狱:rpm不会自动解决依赖,缺少依赖会报错
bash 复制代码
error: Failed dependencies:
        libssl.so.10()(64bit) is needed by nginx-1.20.1-9.el7.x86_64
        libcrypto.so.10()(64bit) is needed by nginx-1.20.1-9.el7.x86_64
  • 解决方案 :用yum localinstall自动解决依赖
  • 覆盖安装--force强制安装(⚠️危险!会覆盖文件)
  • 旧版本--oldpackage降级安装

3. rpm -e - 卸载RPM包

语法:

bash 复制代码
rpm -e 软件包名

案例:

bash 复制代码
# 卸载nginx(只需包名,无需版本)
rpm -e nginx

# 忽略依赖卸载(⚠️会留孤儿包)
rpm -e --nodeps nginx

⚠️ 卸载注意事项:

  • 🔥依赖错误:如果其他包依赖它,会报错
bash 复制代码
error: Failed dependencies:
        nginx is needed by (installed) web-stack-1.0-1.noarch
  • 危险操作rpm -e --nodeps glibc破坏系统

4. rpm -V- 验证软件包文件完整性

案例:

bash 复制代码
# 验证nginx包所有文件
rpm -V nginx
# 无输出=所有文件正常

# 如果文件被篡改
rpm -V nginx
# 输出:
S.5....T.    /etc/nginx/nginx.conf
# 字段含义:
# S=大小改变, 5=MD5改变, T=时间改变

⚠️ 用途:检查系统文件是否被入侵篡改, Particularly重要!**


三、🏛️ 仓库管理(Repository)

1. yum repolist - 查看仓库

语法:

bash 复制代码
yum repolist [选项]

核心选项:

  • all:显示所有(启用的和禁用的)
  • -v:详细信息
  • enabled:仅启用的(默认)
  • disabled:仅禁用的

案例1:查看启用的仓库

bash 复制代码
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:查看所有仓库

bash 复制代码
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)

安装:

bash 复制代码
yum install -y yum-utils

案例1:启用/禁用仓库

bash 复制代码
# 启用centosplus仓库
yum-config-manager --enable centosplus

# 禁用epel仓库(临时)
yum-config-manager --disable epel

# 查看仓库配置
yum-config-manager --save base

案例2:添加新仓库

bash 复制代码
# 添加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添加

bash 复制代码
# 添加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- 清理缓存

语法:

bash 复制代码
yum clean [选项]

选项:

  • all:清理所有缓存
  • metadata:清理元数据
  • packages:清理下载的包
  • expire-cache:过期缓存

案例:

bash 复制代码
# 清理所有缓存(解决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:查看可用软件组

bash 复制代码
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:安装开发工具组(一键装编译环境)

bash 复制代码
yum groupinstall "Development Tools" -y
# 包含:gcc, make, automake, gdb等数十个工具

# 验证
gcc --version
make --version

案例3:安装桌面环境

bash 复制代码
# 安装GNOME桌面
yum groupinstall "Server with GUI" -y

# 启动桌面
systemctl set-default graphical.target
reboot

⚠️ 软件组注意事项:

  • 🔥组名带空格:必须用引号括起来
  • 批量安装:非常适合快速搭建开发、测试环境
  • 组内更新:组内软件可单独更新,不受组影响

五、🔧 源码编译安装(高级)

步骤1:准备编译环境

bash 复制代码
# 安装开发工具组
yum groupinstall "Development Tools" -y

# 安装常用库
yum install zlib-devel openssl-devel pcre-devel -y

步骤2:下载解压源码

bash 复制代码
# 下载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:配置编译选项

bash 复制代码
./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:编译安装

bash 复制代码
# 编译(多核加速)
make -j 4

# 安装
make install

# 验证
/opt/nginx/sbin/nginx -v

⚠️ 源码安装注意事项:

  • 🔥维护成本:源码安装无法yum更新,需手动跟踪安全补丁
  • 卸载麻烦 :没有make uninstall,需手动删除文件
  • PATH问题 :安装到非标准路径需手动添加/etc/profile
  • 推荐场景:仅当yum仓库版本太旧或需定制功能时使用

六、📦 查询与信息获取

1. yum info- 查看软件包信息

案例:

bash 复制代码
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- 列出软件包

案例:

bash 复制代码
# 列出所有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- 查看操作历史

案例:

bash 复制代码
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. 🔥 生产环境铁律

  1. 永不yum update -y:必须指定包名,逐个更新
  2. 测试先行:所有更新先在测试环境验证
  3. 版本锁定 :关键软件(nginx/mysql)用yum versionlock锁定
  4. 定期审计 :每月yum list updates检查安全更新

2. 🔥 仓库管理规范

  1. EPEL必备 :优先安装epel-release
  2. 官方优先:官方仓库 > EPEL > 第三方
  3. GPG验证 :保持gpgcheck=1,防止恶意软件
  4. 内网镜像:生产环境搭建内网yum镜像,加快速度

3. 🔥 查询与验证

  1. 文件归属 :不确定文件来源,rpm -qf /path/to/file
  2. 完整性检查 :定期rpm -Va验证系统文件完整性
  3. 安全审计 :检查/var/log/yum.log所有安装记录

4. 🔥 源码安装准则

  1. 最后手段:优先用yum,源码安装增加维护成本
  2. 统一路径 :统一安装到/opt/usr/local
  3. 文档记录:记录安装步骤和版本,便于交接
  4. 独立用户:服务类软件创建独立用户运行

八、📚 快速命令速查

需求 命令 示例
安装软件 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
查看文件列表 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

🎓 总结:软件管理的"三字经"

  1. 优先yum:能用yum不源码,自动解决依赖
  2. 谨慎更新:生产环境逐个更新,禁止批量update
  3. 锁定版本:关键服务锁定,避免意外升级
  4. 善用查询rpm -qfyum provides解决文件归属
  5. 记录历史yum history追踪所有操作

记住:仓库是源泉,YUM是舵手,RPM是根基,源码是终章



📖原文: 不破不立,破而后立。大破大立,晓喻新生。-- 荒《完美世界》

⌛怡然 : ...



🪁 LuminKu looks forward to seeing you again 🌌


相关推荐
知识分享小能手2 小时前
openEuler入门学习教程,从入门到精通,云计算与 Linux 操作系统概述(1)
linux·云计算·openeuler
励志成为编程高手2 小时前
在ubuntu中创建根文件系统
linux·ubuntu·rootfs
HIT_Weston2 小时前
31、【Ubuntu】【远程开发】内网穿透:反向隧道建立(三)
linux·运维·ubuntu
skywalk81633 小时前
在FreeBSD 14.3上部署轻量级Linux jail环境 仅仅占用10M内存
linux·运维·服务器·虚拟机·轻量化·freebsd·jail
知南x3 小时前
【STM32MP157 异核通信框架学习篇】(10)Linux下Remoteproc相关API (下)
linux·stm32·学习
Tipriest_3 小时前
Linux 环境变量的添加与查看详解
linux·环境变量
牢七4 小时前
新linux
linux
是Judy咋!4 小时前
RabbitMQ---搭建(自定义数据以及日志目录)
分布式·centos·rabbitmq
keep__go5 小时前
spark 单机安装
大数据·运维·分布式·spark