软件安装
软件安装
yum命令
软件包管理
yum命令是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理RPM软件包,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
语法
yum(选项)(参数)选项
-h:显示帮助信息;
-y:对所有的提问都回答"yes";
-c:指定配置文件;
-q:安静模式;
-v:详细模式;
-d:设置调试等级(0-10);
-e:设置错误等级(0-10);
-R:设置yum处理一个命令的最大等待时间;
-C:完全从缓存中运行,而不去下载或者更新任何头文件。参数
install:安装rpm软件包;
update:更新rpm软件包;
check-update:检查是否有可用的更新rpm软件包;
remove:删除指定的rpm软件包;
list:显示软件包的信息;
search:检查软件包的信息;
info:显示指定的rpm软件包的描述信息和概要信息;
clean:清理yum过期的缓存;
shell:进入yum的shell提示符;
resolvedep:显示rpm软件包的依赖关系;
localinstall:安装本地的rpm软件包;
localupdate:显示本地rpm软件包进行更新;
deplist:显示rpm软件包的所有依赖关系。yum 常用命令详解
# ====== 安装软件 ======
yum install nginx # 安装单个包
yum install -y nginx # 安装,自动确认
yum install -y nginx vim htop git # 同时安装多个包
# ====== 安装软件组 ======
yum grouplist # 查看所有可安装的软件组
yum groupinstall "Development Tools" # 安装开发工具组
yum groupinstall "Base" # 安装基础组
yum groupinstall -y "GNOME Desktop"
# ====== 更新与升级 ======
yum update # 更新所有已安装的包
yum update nginx # 更新指定包
yum check-update # 检查可用的更新
yum upgrade # 升级包(包括依赖变更)
# ====== 删除与卸载 ======
yum remove nginx # 删除指定包
yum erase nginx # 同 remove
yum remove -y nginx # 删除,自动确认
yum autoremove # 删除不再需要的依赖包(谨慎使用)
yum history list # 查看历史事务记录
yum history undo 1 # 撤销第 1 步操作
yum history redo 1 # 重做第 1 步操作
# ====== 查询与搜索 ======
yum list # 列出所有已安装的包
yum list installed # 只列出已安装的包
yum list available # 列出可安装的包
yum list updates # 列出可更新的包
yum info nginx # 查看包的详细信息
yum search nginx # 搜索包含 nginx 的包
yum provides /usr/bin/nginx # 查看哪个包提供了指定文件
yum whatprovides /usr/bin/nginx # 同上(别名)
yum deplist nginx # 查看包的依赖列表
# ====== 缓存管理 ======
yum clean all # 清理所有缓存
yum makecache # 重建缓存
yum clean headers # 清理头文件缓存
yum clean packages # 清理软件包缓存
yum clean metadata # 清理元数据缓存
# ====== 查看仓库 ======
yum repolist # 列出所有配置的仓库
yum repolist enabled # 列出已启用的仓库
yum repolist all # 列出所有仓库
# ====== 安装本地 RPM 包 ======
yum localinstall /path/to/package.rpm # 安装本地 RPM 包
yum localupdate /path/to/package.rpm # 检查本地包更新
# ====== 交换源 ======
# 临时禁用某个源
yum-config-manager --disable repo-name
yum-config-manager --enable repo-name
# 添加 EPEL 仓库
yum install -y epel-release
# ====== 下载但不安装 ======
yum install --downloadonly nginx # 只下载不安装
# ====== 查看事务历史 ======
yum history # 查看所有历史
yum history info 5 # 查看第 5 步详情
yum history undo 3 # 撤销第 3 步
yum history redo 3 # 重做第 3 步
# ====== 插件管理 ======
yum list extras # 列出额外插件
yum install -y yum-utils # 安装 yum 工具集
yum install -y yum-plugin-versionlock # 安装版本锁定插件
# 版本锁定
yum versionlock nginx-1.24.0-1 # 锁定 nginx 版本实例
部分常用的命令包括:
- 自动搜索最快镜像插件:yum install yum-fastestmirror
- 安装yum图形窗口插件:yum install yumex
- 查看可能批量安装的列表:yum grouplist
安装
yum install #全部安装
yum install package1 #安装指定的安装包package1
yum groupinsall group1 #安装程序组group1更新和升级
yum update #全部更新
yum update package1 #更新指定程序包package1
yum check-update #检查可更新的程序
yum upgrade package1 #升级指定程序包package1
yum groupupdate group1 #升级程序组group1rpm命令
软件包管理
rpm命令是RPM软件包的管理工具。rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。
rpm 常用命令详解
# ====== 安装 ======
rpm -ivh package.rpm # 安装并显示进度
rpm -Uvh package.rpm # 升级已安装的包
rpm -ivh --nodeps package.rpm # 忽略依赖强制安装
# ====== 查询 ======
rpm -qa # 列出所有已安装的包
rpm -qa | grep nginx # 搜索包含 nginx 的包
rpm -qi nginx # 查看已安装包的详细信息
rpm -qip package.rpm # 查看未安装包的信息
rpm -ql nginx # 列出包中的所有文件
rpm -qlp package.rpm # 列出未安装包中的文件
rpm -qc package.rpm # 列出包中的配置文件
rpm -qf /usr/bin/nginx # 查看文件属于哪个包
rpm -qf `which mysql` # 查看程序所属的包
# ====== 验证 ======
rpm -V package.rpm # 验证包的完整性和签名
rpm -K # 导入 GPG 公钥
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centos-official
# ====== 删除 ======
rpm -e package-name # 卸载指定包(不含版本号)
rpm -e nginx-1.24.0-1 # 卸载指定版本
rpm -e --nodeps nginx # 忽略依赖强制卸载(危险)
# ====== 查询已安装包的文件 ======
rpm -ql nginx # 列出包安装的文件
rpm -qc nginx # 列出包的配置文件
rpm -qd nginx # 列出包的文档文件
# ====== 提取 RPM 包中的文件 ======
rpm2cpio package.rpm | cpio -idmv # 提取所有文件
rpm2cpio package.rpm | cpio -t # 列出包中的文件
# ====== 包信息查询 ======
rpm -qi nginx # 已安装包详细信息
rpm -qip package.rpm # 未安装包详细信息
rpm -qp package.rpm # 包的提供者信息
rpm -qpi package.rpm # 包的所有信息
# ====== 依赖关系查询 ======
rpm -qR package.rpm # 查看包的依赖
rpm -q --whatrequires nginx # 查看谁依赖 nginx
rpm -q --whatprovides nginx # 查看谁提供 nginx 功能
# ====== 源码包处理 ======
rpm -ivh src.rpm # 安装源码包参数
软件包:指定要操纵的rpm软件包。
实例
如何安装rpm软件包
rpm软件包的安装可以使用程序rpm来完成。执行下面的命令:
rpm -ivh your-package.rpm其中your-package.rpm是你要安装的rpm包的文件名,一般置于当前目录下。
安装过程中可能出现下面的警告或者提示:
... conflict with ...可能是要安装的包里有一些文件可能会覆盖现有的文件,缺省时这样的情况下是无法正确安装的可以用rpm --force -i强制安装即可
... is needed by ...
... is not installed ...此包需要的一些软件你没有安装可以用rpm --nodeps -i来忽略此信息,也就是说rpm -i --force --nodeps可以忽略所有依赖关系和文件问题,什么包都能安装上,但这种强制安装的软件包不能保证完全发挥功能。
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm如何安装.src.rpm软件包
有些软件包是以.src.rpm结尾的,这类软件包是包含了源代码的rpm包,在安装时需要进行编译。这类软件包有两种安装方法:
方法一:
rpm -i your-package.src.rpm
cd /usr/src/redhat/SPECS
rpmbuild -bp your-package.specs #一个和你的软件包同名的specs文件
cd /usr/src/redhat/BUILD/your-package/ #一个和你的软件包同名的目录
./configure #这一步和编译普通的源码软件一样,可以加上参数
make
make install方法二:
rpm -i you-package.src.rpm
cd /usr/src/redhat/SPECS前两步和方法一相同
rpmbuild -bb your-package.specs #一个和你的软件包同名的specs文件这时在/usr/src/redhat/RPM/i386/(根据具体包的不同,也可能是i686,noarch等等)在这个目录下,有一个新的rpm包,这个是编译好的二进制文件。
执行rpm -i new-package.rpm即可安装完成。
如何卸载rpm软件包
使用命令rpm -e包名,包名可以包含版本号等信息,但是不可以有后缀.rpm,比如卸载软件包proftpd-1.2.8-1,可以使用下列格式:
rpm -e proftpd-1.2.8-1
rpm -e proftpd-1.2.8
rpm -e proftpd-
rpm -e proftpd不可以是下列格式:
rpm -e proftpd-1.2.8-1.i386.rpm
rpm -e proftpd-1.2.8-1.i386
rpm -e proftpd-1.2.8
rpm -e proftpd-1有时会出现一些错误或者警告:
... is needed by ...这说明这个软件被其他软件需要,不能随便卸载,可以用rpm -e –nodeps强制卸载
如何不安装但是获取rpm包中的文件
使用工具rpm2cpio和cpio
rpm2cpio xxx.rpm | cpio -vi
rpm2cpio xxx.rpm | cpio -idmv
rpm2cpio xxx.rpm | cpio --extract --make-directories参数i和extract相同,表示提取文件。v表示指示执行进程,d和make-directory相同,表示根据包中文件原来的路径建立目录,m表示保持文件的更新时间。
如何查看与rpm包相关的文件和其他信息
下面所有的例子都假设使用软件包mysql-3.23.54a-11
1、我的系统中安装了那些rpm软件包。
rpm -qa 讲列出所有安装过的包如果要查找所有安装过的包含某个字符串sql的软件包
rpm -qa | grep sql2、如何获得某个软件包的文件全名。
rpm -q mysql可以获得系统中安装的mysql软件包全名,从中可以获得当前软件包的版本等信息。这个例子中可以得到信息mysql-3.23.54a-11
3、一个rpm包中的文件安装到那里去了?
rpm -ql 包名注意这里的是不包括.rpm后缀的软件包的名称,也就是说只能用mysql或者mysql-3.23.54a-11而不是mysql-3.23.54a-11.rpm。如果只是想知道可执行程序放到那里去了,也可以用which,比如:
which mysql4、一个rpm包中包含那些文件。
一个没有安装过的软件包,使用rpm -qlp ****.rpm
一个已经安装过的软件包,还可以使用rpm -ql ****.rpm
5、如何获取关于一个软件包的版本,用途等相关信息?一个没有安装过的软件包,使用rpm -qip ****.rpm
一个已经安装过的软件包,还可以使用rpm -qi ****.rpm
6、某个程序是哪个软件包安装的,或者哪个软件包包含这个程序。
rpm -qf `which 程序名` #返回软件包的全名
rpm -qif `which 程序名` #返回软件包的有关信息
rpm -qlf `which 程序名` #返回软件包的文件列表注意,这里不是引号,而是,就是键盘左上角的那个键。也可以使用rpm -qilf`,同时输出软件包信息和文件列表。
7、某个文件是哪个软件包安装的,或者哪个软件包包含这个文件。
注意,前一个问题中的方法,只适用与可执行的程序,而下面的方法,不仅可以用于可执行程序,也可以用于普通的任何文件。前提是知道这个文件名。首先获得这个程序的完整路径,可以用whereis或者which,然后使用rpm -qf例如:
whereis ftptop
ftptop: /usr/bin/ftptop /usr/share/man/man1/ftptop.1.gz
rpm -qf /usr/bin/ftptop
proftpd-1.2.8-1
rpm -qf /usr/share/doc/proftpd-1.2.8/rfc/rfc0959.txt
proftpd-1.2.8-1源码编译
1、下载源码
2、下载安装Nginx编译环境
yum install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel3、执行源码编译
make4、安装编译好的软件
make install源码编译详解
# ====== 三步编译法 ======
# 1. configure:检查环境并生成 Makefile
./configure --prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre
# 2. make:编译
make -j$(nproc)
# 3. make install:安装
make install
# ====== configure 常用选项 ======
./configure --prefix=/usr/local/app # 指定安装目录
./configure --enable-shared # 启用共享库
./configure --with-xxx # 启用指定功能
./configure --without-xxx # 禁用指定功能
./configure --host=aarch64-linux-gnu # 交叉编译目标架构
# ====== 常见编译依赖 ======
# C/C++ 编译器
yum install -y gcc gcc-c++ make
# Web 服务编译依赖
yum install -y pcre pcre-devel zlib zlib-devel openssl-devel
# 图形界面编译依赖
yum install -y gtk2-devel libX11-devel qt-devel
# 数据库开发依赖
yum install -y mysql-devel postgresql-devel sqlite-devel
# 网络开发依赖
yum install -y libcurl-devel libxml2-devel libevent-devel
# ====== 编译故障排查 ======
# configure: error: C compiler cannot create executables
yum install -y gcc gcc-c++ make
# checking for OpenSSL... not found
yum install -y openssl-devel
# configure: error: PCRE library not found
yum install -y pcre-devel
# make: *** No targets specified and no makefile found
# 需要先运行 ./configure
# make: cc: Command not found
yum install -y gcc
# 权限不足
# Permission denied -> 使用 sudo 或切换到 root
# 编译优化
make CFLAGS="-O2" CXXFLAGS="-O2" -j$(nproc)第三方仓库管理
# ====== EPEL 仓库 ======
yum install -y epel-release
yum repolist # 查看已添加的仓库
yum --disablerepo epel # 禁用 EPEL
# ====== RPM Fusion 仓库 ======
yum install -y https://download1.rpmfusion.io/free/fedora/rpmfusion-free-release-7.noarch.rpm
# ====== Remi 仓库(PHP 最新版本) ======
yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum --enablerepo remi-php73 # 启用 Remi PHP 7.3 模块
yum install -y php php-cli php-mysqlnd # 从 Remi 安装 PHP
# ====== Nginx 官方仓库 ======
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install -y nginx
# ====== Docker 官方仓库 ======
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
# ====== MySQL 官方仓库 ======
rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
yum install -y mysql-community-server
# ====== 自定义仓库 ======
cat > /etc/yum.repos.d/myrepo.repo << 'EOF'
[myrepo]
name=My Custom Repository
baseurl=https://myrepo.example.com/packages/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://myrepo.example.com/RPM-GPG-KEY
EOF版本锁定与回退
# ====== yum 版本锁定 ======
# 安装版本锁定插件
yum install -y yum-plugin-versionlock
# 锁定指定版本
yum versionlock nginx-1.24.0-1.el7
# 锁定多个版本
yum versionlock nginx-1.24.0-1.el7 mysql-community-server-8.0.36-1.el7
# 查看已锁定的版本
yum versionlock list
# 解除版本锁定
yum versionlock delete nginx-1.24.0-1.el7
# ====== 历史事务回退 ======
# 查看历史事务
yum history list
# 撤销指定事务
yum history undo 3
# 重做指定事务
yum history redo 3
# 撤销最后一次事务
yum history undo last
# ====== 降级到指定版本 ======
# 方法 1:使用 downgrade
yum downgrade nginx-1.24.0-1.el7
# 方法 2:卸载后安装指定版本
yum remove -y nginx
yum install -y nginx-1.24.0-1.el7常见问题排查
# ====== 依赖冲突 ======
# 错误: Protected multilib versions of packages
# 解决:安装 --allower-downgrade
yum update --allower-downgrade
# 错误:Requires: libc.so.6(GLIBC_2.17)(64bit)
# 解决:更新 glibc 或安装兼容版本
# 错误:conflicts with file from package
# 解决:使用 yum replace 或 yum swap 移除冲突包
# ====== GPG 密钥问题 ======
# 错误:Header V3 RSA/SHA256 Signature, key ID ...
# 解决:重新导入 GPG 密钥
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centos-official
rpm --import https://www.centos.org/centos/RPM-GPG-KEY-CentOS-Official
# ====== 仓库问题 ======
# 错误:Cannot retrieve metalink for repository
# 解决:检查网络连接和 DNS,清理缓存
yum clean all && yum makecache
# 错误:repodata/primary.xml.gz could not be read
# 解决:清理缓存并重建
rm -rf /var/cache/yum
yum clean all
yum makecache
# 错误:No package xxx available
# 解决:检查仓库名称拼写,确认仓库已启用
yum repolist关键知识点
- 部署类主题的核心不是"装成功",而是"稳定运行、可排障、可回滚"。
- 同一个服务通常至少要关注版本、目录、端口、权限、数据、日志和备份。
- Linux 问题经常跨越系统层、网络层、服务层和应用层。
- yum 自动处理依赖关系,rpm 需要手动处理。
- yum history 支持事务回退,是误操作的救命工具。
项目落地视角
- 把安装步骤补成可重复执行的清单,必要时写成脚本或配置文件。
- 把配置目录、数据目录、日志目录和挂载点明确拆开。
- 上线前检查防火墙、SELinux、时区、磁盘、系统服务和健康检查。
- 将常用安装命令写成自动化脚本,纳入版本控制。
常见误区
- 使用 latest 或未固定版本,导致环境不可复现。
- 只验证启动成功,不验证持久化、开机自启和故障恢复。
- 遇到问题先改配置而不是先看日志和依赖链路。
- 卸载包时不检查依赖关系,导致系统组件异常。
进阶路线
- 继续补齐 systemd、性能监控、安全加固和备份恢复。
- 把单机操作升级成 Docker、Kubernetes 或 IaC 方案。
- 建立标准化运维手册,包括巡检、扩容、回滚和灾备演练。
- 学习 Ansible 批量管理服务器软件包安装。
适用场景
- 当你准备把《软件安装》真正落到项目里时,最适合先在一个独立模块或最小样例里验证关键路径。
- 适合单机环境初始化、中间件快速搭建、测试环境验证和生产部署前准备。
- 当服务稳定性依赖端口、权限、目录、网络和系统参数时,这类主题会直接影响成败。
落地建议
- 固定版本号与镜像标签,避免"latest"带来的不可预期变化。
- 把配置、数据、日志目录拆开管理,并记录恢复步骤。
- 上线前确认端口、防火墙、SELinux、时区和磁盘空间。
- 所有安装操作写入自动化脚本,便于批量部署。
排错清单
- 先查 systemctl、容器日志和应用日志,确认失败发生在哪一层。
- 检查端口占用、目录权限、挂载路径和网络连通性。
- 如果是新环境问题,优先对比与已知正常环境的差异。
复盘问题
- 如果把《软件安装》放进你的当前项目,最先要验证的输入、输出和失败路径分别是什么?
- 《软件安装》最容易在什么规模、什么边界条件下暴露问题?你会用什么指标或日志去确认?
- 相比默认实现或替代方案,采用《软件安装》最大的收益和代价分别是什么?
