Linux 软件包管理详解:从命令到实战
Linux 软件包管理详解:从命令到实战
在 Linux 系统中,软件的安装、管理和维护是日常操作的核心。无论是简单的命令工具还是复杂的应用程序,都离不开一套规范的管理机制。本文将从 Linux 应用程序的组成入手,详细解析 RPM 包管理、YUM 仓库配置及常用操作,帮助你全面掌握 Linux 软件管理技能。
一、Linux应用程序组成
命令与应用程序的区别
- 内部命令:是 Shell 自带的指令,比如
cd
(切换目录)、exit
(退出终端)、history
(查看命令历史)。这些命令不需要单独的执行文件,直接集成在 Shell 中,执行速度极快。 - 外部命令:本质是独立的可执行程序,比如
ls
(列出文件)、cp
(复制文件)。它们有自己的安装文件,通常存放在/bin
或/sbin
目录,系统安装时会默认自带。 - 应用程序:功能更复杂的软件,比如
nginx
(Web 服务器)、mysql
(数据库)。它们需要单独安装,安装路径多为/usr/bin
、/usr/sbin
(系统级)或/usr/local/bin
(用户自定义)。应用程序可能有图形界面(如firefox
),也可能只有命令行(如python
),运行方式由开发者定义,没有固定格式。
应用程序的组成
- 可执行文件:普通用户可用的程序放在
/usr/bin
(如ftp
客户端),管理员专用的放在/usr/sbin
(如vsftpd
服务端)。 - 配置文件:几乎所有应用程序都需要配置文件,统一存放在
/etc
目录。如果配置文件较多,会创建独立子目录,比如nginx
的配置在/etc/nginx/
。 - 日志文件:程序运行中产生的日志(如错误信息、访问记录),默认存放在
/var/log
目录,例如/var/log/vsftpd.log
是vsftpd
的日志。 - 文档资料:用户手册、帮助文档等存放在
/usr/share/doc
,比如vsftpd
的文档在/usr/share/doc/vsftpd-3.0.2/
。 - man 手册:命令的帮助手册(就是你用
man ls
查看的内容),存放在/usr/share/man
目录。
二、RPM包:Linux的“安装包”
什么是RPM包?
RPM 是 RedHat 系列系统(如 CentOS、RHEL)的软件包格式,文件名通常长这样:coreutils-8.30-4.el7.x86_64.rpm
。每个部分都有特殊含义:
coreutils
:软件名称(核心工具集)。8.30-4
:版本号(主版本 8.30,修订版 4)。el7
:适配的 Linux 发行版(这里是 CentOS 7/RHEL 7)。x86_64
:支持的硬件架构(64 位处理器);如果是noarch
,表示不限制架构(比如纯脚本软件)。
RPM 命令:管理软件
rpm
命令是 RPM 包的管理工具,功能强大,常用操作如下:
查询已安装的软件:
列出所有已安装的 RPM 软件:
rpm -qa # qa = query all,结果会非常多,建议配合 grep 筛选
rpm -qa | grep python # 只看包含 python 的软件
查看软件的详细信息:
rpm -qi vsftpd # qi = query info,显示 vsftpd 的版本、作者、描述等
查看软件安装的所有文件:
rpm -ql vsftpd # ql = query list,列出 vsftpd 安装的所有文件和目录
查询某个文件属于哪个软件:
比如想知道 /usr/bin/ls
来自哪个包:
rpm -qf /usr/bin/ls # qf = query file,结果会显示 coreutils-8.30-4.el7.x86_64
安装、卸载与更新软件
安装 RPM 包:
假设下载了 vsftpd-3.0.2-22.el7.x86_64.rpm
,安装命令:
rpm -ivh vsftpd-3.0.2-22.el7.x86_64.rpm
# i = install(安装),v = verbose(显示详细过程),h = hash(用 # 显示进度)
卸载软件:
卸载时只需指定软件名(无需完整文件名):
rpm -e vsftpd # e = erase(卸载)
更新软件:
如果有新版本的 RPM 包,可用 -U
升级:
rpm -Uvh vsftpd-3.0.3-1.el7.x86_64.rpm # U = upgrade(升级),若未安装则自动安装
强制操作:
遇到依赖错误或版本冲突时,可加 --force
(强制安装 / 更新)或 --nodeps
(忽略依赖):
rpm -ivh --force --nodeps somepackage.rpm # 谨慎使用,可能导致软件运行异常
查询未安装的 RPM 包
如果想在安装前查看某个 RPM 包的信息(比如包含哪些文件),可用:
查看未安装包的详细信息:
rpm -qpi /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm # qpi = query package info
查看未安装包会安装哪些文件:
rpm -qpl /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm # qpl = query package list
三、YUM:自动化包管理工具
RPM 包虽然方便,但有个头疼的问题:依赖关系。比如安装 nginx
可能需要先安装 openssl
、pcre
等库,手动解决依赖堪称 “噩梦”。而 YUM(Yellowdog Updater Modified)就是为解决这个问题而生的。
YUM 仓库:软件的 “源头”
YUM 通过 “仓库”(Repository)管理软件包,仓库本质是一个存储大量 RPM 包的服务器(本地目录或远程地址)。所有仓库配置文件都放在 /etc/yum.repos.d/
目录,文件名必须以 .repo
结尾(比如 base.repo
)。
一个典型的仓库配置文件(server.repo
)长这样:
[a] # 仓库标识(必须唯一)
name=aa # 仓库名称(自定义,方便识别)
baseurl=file:///mnt/ # 仓库路径(本地目录/file://,HTTP地址/http://,FTP地址/ftp://)
enabled=1 # 是否启用该仓库(1=启用,0=禁用)
gpgcheck=0 # 是否校验软件包签名(0=不校验,1=校验,新手建议设为0)
YUM 常用命令:
YUM 命令简单直观,自动处理依赖关系,常用操作如下:
安装软件:
yum -y install vsftpd # -y 表示自动确认,无需手动输入 y
卸载软件:
yum -y remove vsftpd # 会自动卸载无用的依赖(谨慎,可能误删关联软件)
管理软件包组:
Linux 中有些功能需要多个软件配合(比如开发工具集),这些软件被打包成 “软件包组”:
# 列出所有可用的软件包组
yum group list# 安装“开发工具”组(包含 gcc、make 等编译工具)
yum -y groupinstall "Development Tools"# 卸载软件包组
yum -y group remove "Development Tools"
更新软件:
# 更新指定软件
yum -y update vsftpd# 更新系统中所有可更新的软件(包括内核,谨慎操作,可能导致兼容性问题)
yum -y update
查询软件:
# 查看软件是否已安装
yum list installed vsftpd# 搜索软件(包括已安装和可用的)
yum search vsftpd# 查看软件详情
yum info vsftpd
清理缓存:
YUM 会缓存下载的 RPM 包和仓库信息,长期不清理会占用空间:
yum clean all # 清理所有缓存
yum makecache # 重建缓存(加快后续操作速度)
DNF:YUM 的升级版本
在 CentOS 8、Fedora 等新系统中,YUM 已被 dnf 取代。DNF 兼容 YUM 的所有命令,且性能更好(依赖解析更快)。
常用 DNF 命令示例:
dnf -y install nginx # 安装软件
dnf -y remove nginx # 卸载软件
dnf check-update # 检查更新
dnf repolist enabled # 列出启用的仓库
四、实验:软件安装
需求:用本地光盘作为 YUM 仓库,安装 vsftpd
-
挂载光盘镜像:
假设系统光盘已挂载到/mnt
:mount /dev/cdrom /mnt # 物理机插入光盘,虚拟机需加载 ISO 镜像
-
创建仓库配置文件:
vim /etc/yum.repos.d/local.repo
写入以下内容:
[local] name=Local CDROM Repo baseurl=file:///mnt enabled=1 gpgcheck=0
安装 vsftpd:
yum -y install vsftpd
验证安装:
rpm -q vsftpd # 查看是否安装成功 systemctl start vsftpd # 启动服务