Linux(CentOS)系统管理入门笔记(第十二期)------系统管理工具与软件包管理(上篇):Cockpit 与 RPM 包管理
Linux系统管理入门系列更多文章欢迎访问:
Linux入门------系统管理1、Linux入门------系统管理2
我的主页:AOwhisky,这里有更多运维系统性知识整理和其他有趣内容,欢迎与我一起探讨学习~
引言:从"黑框框"到"仪表盘"------Linux 管理的两条路
前十一期,我们一直在终端里摸爬滚打------敲命令、看输出、翻日志。这是 Linux 管理的基本功,也是"硬核"的必经之路。但有一个问题始终存在:有没有更直观的方式来管理服务器?
想象一下,你是一架飞机的机长。你面前有密密麻麻的仪表盘(命令行),每一个旋钮和开关都对应一个精确的功能。熟练之后,你可以在几秒钟内完成复杂操作。但如果你只是想快速看一眼"飞行高度""油量""发动机温度"呢?这时候,一块综合仪表盘(Web 管理界面) 就派上了用场------它把关键信息可视化,让你一目了然。
Cockpit 正是 Linux 服务器的"综合仪表盘"------一个轻量级的 Web 管理工具。通过浏览器就能查看系统状态、管理服务、监控日志、操作容器和虚拟机,甚至管理 Kubernetes 集群。
但"仪表盘"只能帮你"看"和"点",真正要理解系统的底层运作,还得回到命令行。本期另一个核心主题是 RPM 软件包管理------Linux 生态中软件安装、更新、卸载的底层机制。你将学会如何查询、验证、提取 RPM 包,理解"软件包"这个概念的来龙去脉。
本期分为两大模块:
- Cockpit:部署、登录与各项管理功能
- RPM 包管理:包名解析、查询验证、安装卸载与文件提取
读完这一期,你将掌握两种管理风格:"仪表盘"式的 Web 可视化管理 + 底层"手术刀"式的 RPM 包操作。
--- Compiled and Authored by Whisky --- July 25 th, 2026
目录
- Cockpit:Linux 的 Web 管理仪表盘
- 1.1 部署与启动
- 1.2 Web 控制台功能介绍
- 1.3 Cockpit 扩展包
- RPM 包管理:Linux 软件安装的基石
- 2.1 Linux 发行版与包管理体系
- 2.2 RPM 包文件名格式解析
- 2.3 RPM 包组成与数字签名
- 2.4 rpm 命令:查询(重点)
- 2.5 rpm 命令:验证
- 2.6 rpm 命令:安装与卸载
- 2.7 提取 RPM 包中的文件
- 总结与速查手册
1. Cockpit:Linux 的 Web 管理仪表盘
1.1 Cockpit 是什么?
Cockpit 是 Red Hat 主导开发的开源项目,通过 Web 浏览器为 Linux 服务器提供图形化管理界面。它轻量、安全、易于部署,是系统管理员快速"看一眼"服务器状态的首选工具。
核心优势:
- 开箱即用 :无需额外配置,安装后即可通过
https://hostname:9090访问 - 轻量级:对系统资源消耗极小
- 安全:使用系统账户密码认证,支持 HTTPS 加密
- 可扩展:通过插件支持 Docker、Kubernetes、KVM 虚拟机等管理
1.2 部署 Cockpit
bash
# 1. 安装 Cockpit
[root@centos7 ~]# yum -y install cockpit
# 2. 启用并启动服务(--now 表示立即启动并设置开机自启)
[root@centos7 ~]# systemctl enable cockpit.socket --now
# 3. 配置防火墙放行 Cockpit 服务(默认端口 9090)
[root@centos7 ~]# firewall-cmd --add-service=cockpit
success
[root@centos7 ~]# firewall-cmd --add-service=cockpit --permanent
success
1.3 登录 Cockpit
打开浏览器访问:https://<服务器IP或域名>:9090
| 登录要素 | 说明 |
|---|---|
| 用户名 | 操作系统中的系统账户(root 或普通用户) |
| 密码 | 该账户的系统密码 |
| 注意 | 首次访问会提示证书不受信任,选择"继续访问"即可 |
💡 安全提示:生产环境中,建议使用有效的 SSL 证书替换自签名证书。
1.4 Web 控制台功能概览
Cockpit 的主界面按功能模块划分,以下是最核心的几大板块:
| 功能模块 | 核心能力 | 适用场景 |
|---|---|---|
| 系统概览 | 查看 CPU、内存、磁盘、网络实时使用情况;设置主机名、系统时间、性能配置集 | 日常巡检 |
| 日志 | 按严重级别(错误/警告/信息)检索系统日志,支持关键词过滤 | 故障排查 |
| 存储 | 查看磁盘分区、文件系统使用率;创建/删除分区;管理 LVM 和 RAID | 存储管理 |
| 网络 | 监控收发带宽;配置防火墙规则;管理网络接口(IP、DNS、路由) | 网络配置 |
| 账户 | 创建、修改、删除本地用户账户;管理用户组 | 用户管理 |
| 服务 | 管理系统服务(systemd 单元:服务、套接字、计时器等);启动/停止/启用/禁用 | 服务管理 |
| 终端 | 在浏览器中直接打开 Shell 终端 | 快速执行命令 |
| 诊断报告 | 生成系统诊断报告(含硬件、内核、服务等详细信息) | 问题定位 |
| 内核转储 | 配置内核崩溃时的内存转储(kdump) | 内核调试 |
1.5 扩展 Cockpit 功能
Cockpit 支持通过安装扩展包来增强功能。查看可用扩展包:
bash
[root@centos7 ~]# yum list cockpit-*
| 扩展包 | 功能 |
|---|---|
cockpit-dashboard |
多服务器统一仪表盘,集中管理多台主机 |
cockpit-docker |
Docker 容器管理(界面化查看/启动/停止容器) |
cockpit-kubernetes |
Kubernetes 集群管理 |
cockpit-machines |
KVM 虚拟机管理(创建/启动/停止/克隆 VM) |
cockpit-packagekit |
软件包管理(yum/dnf 图形化界面) |
cockpit-storaged |
高级存储管理(LVM、RAID、iSCSI) |
cockpit-composer |
容器镜像构建(类似 buildah) |
cockpit-doc |
Cockpit 官方文档(本地访问) |
bash
# 一键安装常用扩展包
[root@centos7 ~]# yum install cockpit-dashboard cockpit-docker \
cockpit-kubernetes cockpit-machines cockpit-packagekit cockpit-storaged
安装完成后,注销重新登录即可在左侧菜单栏看到新增功能模块。
1.6 Cockpit 的使用场景与定位
| 场景 | 推荐使用 Cockpit? | 说明 |
|---|---|---|
| 日常快速巡检 | ✅ 是 | 可视化查看 CPU/内存/磁盘状态,比命令行更直观 |
| 初学者学习 Linux | ✅ 是 | 降低入门门槛,结合终端命令对照学习 |
| 生产环境紧急故障排查 | ⚠️ 辅助 | 可用 Cockpit 快速定位问题,但最终修复仍需命令行 |
| 自动化运维脚本 | ❌ 否 | Cockpit 是交互式工具,自动化应使用 CLI 命令 |
| 大规模集群管理 | ✅ 配合 Dashboard | 通过 cockpit-dashboard 统一管理多台主机 |
2. RPM 包管理:Linux 软件安装的基石
2.1 Linux 发行版与包管理体系
Linux 发行版主要分为两大包管理流派:
| 流派 | 包格式 | 包管理命令 | 代表发行版 |
|---|---|---|---|
| RPM 系 | .rpm |
rpm、yum、dnf |
RHEL、CentOS、Fedora、Rocky、AlmaLinux、OpenSUSE |
| DEB 系 | .deb |
dpkg、apt、apt-get |
Debian、Ubuntu、Kali Linux |
| 其他 | 源码/自定义 | pacman、emerge |
Arch Linux、Gentoo |
RPM (Red Hat Package Manager)是红帽系发行版的核心包管理工具。CentOS 提供的所有软件都以 .rpm 格式打包。
2.2 RPM 包文件名格式
RPM 软件包的文件名遵循标准格式:
bash
name-version-release.architecture.rpm
实战解析:
bash
# 示例:lrzsz-0.12.20-36.el7.x86_64.rpm
| 部分 | 值 | 含义 |
|---|---|---|
| name | lrzsz |
软件名称(描述内容的一个或多个词语) |
| version | 0.12.20 |
原始软件的版本号(由上游开发者定义) |
| release | 36.el7 |
发行版号(由打包商设置,表示该软件包的第几次构建,.el7 表示面向 CentOS 7) |
| architecture | x86_64 |
编译运行的处理器架构 |
常见架构标识:
| 架构 | 含义 |
|---|---|
x86_64 |
64 位 x86 架构(Intel/AMD) |
aarch64 |
64 位 ARM 架构 |
noarch |
不限定架构(如脚本、配置文件) |
i686 |
32 位 x86 架构 |
2.3 RPM 包的组成
每个 RPM 包包含三个核心部分:
| 组成部分 | 说明 |
|---|---|
| 文件清单 | 软件包安装时需要释放到系统的所有文件 |
| 元数据 | 包名、版本、架构、依赖关系、许可证、变更日志、描述信息等 |
| 脚本 | 安装前(pre)、安装后(post)、卸载前(preun)、卸载后(postun)需要执行的脚本 |
数字签名与 GPG:
软件提供商使用 GPG 私钥对 RPM 包进行数字签名 ,客户端使用对应的 GPG 公钥验证签名,确保包的完整性 (未被篡改)和来源可信。
bash
# 查看 CentOS 的 GPG 公钥
[root@centos7 ~]# rpm -q gpg-pubkey --qf '%{name}-%{version}-%{release}\n'
gpg-pubkey-f4a80eb5-53a7ff4b
非对称加密复习:
| 密钥类型 | 持有者 | 用途 |
|---|---|---|
| 私钥 | 软件提供商(如 Red Hat) | 对 RPM 包进行签名 |
| 公钥 | 客户端系统 | 验证 RPM 包签名是否有效 |
2.4 rpm 命令:查询(重点)
rpm -q(query)是日常最常用的操作,用于查询软件包信息。其基本语法:
bash
rpm {-q|--query} [select-options] [query-options]
选择选项(select-options):定位要查哪个包
| 选项 | 作用 | 示例 |
|---|---|---|
-a |
查询所有已安装的包 | rpm -qa |
-f FILE |
查询某个文件属于哪个包 | rpm -qf /etc/passwd |
-p PACKAGE_FILE |
查询一个未安装 的 .rpm 文件 |
rpm -qpi package.rpm |
-g GROUP |
查询某个包组中的所有包 | rpm -qg 'System Environment/Base' |
查询选项(query-options):显示什么信息
| 选项 | 作用 | 示例 |
|---|---|---|
-i |
显示包的详细信息(Name、Version、Description 等) | rpm -qi coreutils |
-l |
列出包安装的所有文件 | rpm -ql openssh-server |
-c |
仅列出配置文件 | rpm -qc openssh-server |
-d |
仅列出文档文件 | rpm -qd openssh-server |
--scripts |
显示包安装/卸载时的脚本 | rpm -q --scripts openssh-server |
--changelog |
显示包的变更日志 | rpm -q --changelog openssh-server |
-R |
显示包的依赖关系 | rpm -qR httpd |
实战示例
bash
# 1. 查询系统中是否安装了 httpd
[root@centos7 ~]# rpm -q httpd
未安装软件包 httpd
# 2. 查询系统中所有已安装的包(数量通常几百到几千)
[root@centos7 ~]# rpm -qa | head -10
libgcc-4.8.5-44.el7.x86_64
setup-2.8.71-11.el7.noarch
...
# 3. 查询某个已安装包的详细信息
[root@centos7 ~]# rpm -qi coreutils
Name : coreutils
Version : 8.22
Release : 24.el7_9.2
Architecture: x86_64
Install Date: 2025年07月18日 星期五 10时29分40秒
Group : System Environment/Base
Size : 14594210
License : GPLv3+
Summary : A set of basic GNU tools commonly used in shell scripts
Description :
These are the GNU core utilities...
# 4. 查询某个包安装了哪些文件
[root@centos7 ~]# rpm -ql openssh-server
/etc/pam.d/sshd
/etc/ssh/sshd_config
/etc/sysconfig/sshd
/usr/lib/systemd/system/sshd.service
/usr/sbin/sshd
...
# 5. 查询某个文件属于哪个包
[root@centos7 ~]# rpm -qf /etc/ssh/sshd_config
openssh-server-7.4p1-22.el7_9.x86_64
# 6. 查询未安装的 RPM 包文件信息
[root@centos7 ~]# rpm -qpi httpd-2.4.6-99.el7.centos.1.x86_64.rpm
Name : httpd
Version : 2.4.6
Release : 99.el7.centos.1
Architecture: x86_64
...
# 7. 查询未安装的 RPM 包包含哪些配置文件
[root@centos7 ~]# rpm -qpc httpd-2.4.6-99.el7.centos.1.x86_64.rpm
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf/httpd.conf
...
# 8. 查询包的安装/卸载脚本
[root@centos7 ~]# rpm -q --scripts openssh-server
preinstall scriptlet (using /bin/sh):
...
postinstall scriptlet (using /bin/sh):
...
2.5 rpm 命令:验证
rpm -V(verify)用于校验已安装软件包的文件是否被修改。
bash
rpm {-V|--verify} [select-options] [verify-options]
验证结果格式:如果文件未被修改,无输出;如果被修改,输出一行状态码:
text
S.5....T. c /etc/ssh/sshd_config
| 状态码 | 含义 |
|---|---|
S |
文件大小(Size)改变 |
M |
文件权限(Mode)改变 |
5 |
MD5 校验和改变(内容改变) |
D |
设备号改变 |
L |
符号链接路径改变 |
U |
文件所有者(User)改变 |
G |
文件所属组(Group)改变 |
T |
文件修改时间(mTime)改变 |
c |
该文件是配置文件(config file) |
d |
该文件是文档文件(doc file) |
实战示例:
bash
# 1. 验证 openssh-server 包(默认无输出表示一切正常)
[root@centos7 ~]# rpm -V openssh-server
# 2. 修改 sshd_config 配置文件后再次验证
[root@centos7 ~]# sed -i 's/PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config
[root@centos7 ~]# rpm -V openssh-server
S.5....T. c /etc/ssh/sshd_config
# S:大小改变,5:内容改变,T:时间改变,c:配置文件
# 3. 移走配置文件后验证
[root@centos7 ~]# mv /etc/ssh/sshd_config /tmp/
[root@centos7 ~]# rpm -V openssh-server
缺失 c /etc/ssh/sshd_config
# "缺失"表示该文件已被删除
# 4. 恢复文件
[root@centos7 ~]# mv /tmp/sshd_config /etc/ssh/
[root@centos7 ~]# rpm -V openssh-server
# 无输出,验证通过
2.6 rpm 命令:安装与卸载
安装(-i)
bash
rpm {-i|--install} [install-options] PACKAGE_FILE ...
| 常用选项 | 作用 |
|---|---|
-v |
显示详细过程(verbose) |
-h |
显示进度条(hash) |
--nodeps |
忽略依赖关系(不推荐) |
--force |
强制安装(覆盖冲突文件) |
bash
# 下载一个 RPM 包
[root@centos7 ~]# wget http://mirrors.aliyun.com/centos/7/os/x86_64/Packages/lrzsz-0.12.20-36.el7.x86_64.rpm
# 友好方式安装(-ivh 是最常用组合)
[root@centos7 ~]# rpm -ivh lrzsz-0.12.20-36.el7.x86_64.rpm
Verifying... ################################# [100%]
准备中... ################################# [100%]
正在升级/安装...
1:lrzsz-0.12.20-36.el7 ################################# [100%]
# 验证安装
[root@centos7 ~]# rpm -q lrzsz
lrzsz-0.12.20-36.el7.x86_64
依赖问题示例
bash
# 尝试安装 httpd 但缺少依赖会报错
[root@centos7 ~]# rpm -ivh httpd-2.4.6-99.el7.centos.1.x86_64.rpm
错误:依赖检测失败:
/etc/mime.types 被 httpd-... 需要
httpd-tools = 2.4.6-99.el7.centos.1 被 httpd-... 需要
libapr-1.so.0()(64bit) 被 httpd-... 需要
...
这就是为什么实际工作中更常使用 yum------它会自动解决依赖关系(下一期详细讲解)。
卸载(-e)
bash
# 卸载软件包(-e = erase)
[root@centos7 ~]# rpm -e lrzsz
[root@centos7 ~]# rpm -q lrzsz
未安装软件包 lrzsz
⚠️ 注意 :
rpm -e不会检查依赖关系(除非使用--nodeps),卸载时需谨慎。推荐使用yum remove。
重新安装(--reinstall)
bash
[root@centos7 ~]# rpm --reinstall -vh lrzsz-0.12.20-36.el7.x86_64.rpm
2.7 提取 RPM 包中的文件
有时我们需要从 RPM 包中提取某个文件(如配置文件模板、二进制工具),而不进行完整安装。
方法一:分步提取
bash
# 1. 将 RPM 包转换为 cpio 归档格式
[root@centos7 ~]# rpm2cpio httpd-2.4.6-99.el7.centos.1.x86_64.rpm > httpd.cpio
# 2. 查看 cpio 中包含哪些文件
[root@centos7 ~]# cpio -t < httpd.cpio | head -10
./etc/httpd
./etc/httpd/conf
./etc/httpd/conf.d
./etc/httpd/conf.d/README
./etc/httpd/conf.d/autoindex.conf
...
# 3. 提取所有文件(-id:extract + create directories)
[root@centos7 ~]# cpio -id '*' < httpd.cpio
# 文件被提取到当前目录下的 ./etc、./usr 等目录中
# 4. 提取特定文件(如 httpd.conf)
[root@centos7 ~]# cpio -id ./etc/httpd/conf/httpd.conf < httpd.cpio
[root@centos7 ~]# cat ./etc/httpd/conf/httpd.conf
# 配置文件内容...
方法二:一行命令一步到位
bash
[root@centos7 ~]# rpm2cpio httpd-2.4.6-99.el7.centos.1.x86_64.rpm | cpio -id '*'
3. 总结与速查手册
3.1 核心知识点一览
| 主题 | 关键点 |
|---|---|
| Cockpit | Web 管理工具,端口 9090,systemctl enable cockpit.socket --now |
| RPM 包名格式 | name-version-release.architecture.rpm |
| RPM 组成 | 文件 + 元数据 + 脚本,GPG 数字签名保证完整性 |
| rpm -q | 查询已安装包:-qi(信息)、-ql(文件列表)、-qf(文件归属) |
| rpm -V | 验证文件完整性:输出状态码表示修改类型 |
| rpm -ivh | 安装 RPM 包(含进度条) |
| rpm -e | 卸载 RPM 包 |
| rpm2cpio | 提取 RPM 包中的文件(不安装) |
3.2 rpm 查询命令速查表
| 需求 | 命令 |
|---|---|
| 查询所有已安装包 | rpm -qa |
| 查询包是否安装 | rpm -q 包名 |
| 查看包详细信息 | rpm -qi 包名 |
| 列出包安装的所有文件 | rpm -ql 包名 |
| 列出包的配置文件 | rpm -qc 包名 |
| 列出包的文档文件 | rpm -qd 包名 |
| 查看包安装/卸载脚本 | rpm -q --scripts 包名 |
| 查看包变更日志 | rpm -q --changelog 包名 |
| 查询文件属于哪个包 | rpm -qf /path/to/file |
| 查询未安装的 RPM 文件 | rpm -qpi file.rpm |
| 查询未安装包的配置文件 | rpm -qpc file.rpm |
3.3 rpm 验证输出状态码
| 状态码 | 含义 |
|---|---|
S |
文件大小改变 |
M |
权限改变 |
5 |
MD5 校验和改变(内容改变) |
D |
设备号改变 |
L |
符号链接路径改变 |
U |
所有者改变 |
G |
所属组改变 |
T |
修改时间改变 |
3.4 常见错误排查
| 错误信息 | 原因 | 解决方案 |
|---|---|---|
未安装软件包 |
包未安装 | 用 yum install 安装 |
依赖检测失败 |
缺少依赖包 | 用 yum 安装(自动解决依赖) |
file conflicts |
文件冲突 | 使用 --force 或先卸载冲突包 |
GPG 签名验证失败 |
缺少 GPG 公钥或包被篡改 | 导入对应的 GPG 公钥 |
cpio: premature end of archive |
RPM 文件损坏 | 重新下载 RPM 包 |
3.5 思考与拓展(原课后作业转化)
rpm -qa | wc -l的作用是什么?
→ 统计系统中已安装的 RPM 包数量。通常在 CentOS 7 最小安装中约有 150-200 个包,完整安装可达 1000+。- 为什么 RPM 包需要 GPG 签名?
→ 确保包的完整性和来源可信。防止软件包在传输过程中被篡改,或安装恶意伪造的软件包。 rpm -ql和rpm -qc的区别是什么?
→-ql列出包安装的所有文件;-qc只列出配置文件(如/etc/下的 .conf 文件)。- 如何查看某个命令(如
ls)属于哪个 RPM 包?
→which ls找到命令路径,然后rpm -qf /usr/bin/ls。 - Cockpit 的默认端口是多少?如何修改?
→ 默认端口是 9090。修改需要编辑/etc/systemd/system/cockpit.socket.d/中的端口配置,或者通过systemctl edit cockpit.socket覆盖。
3.6 生产环境最佳实践
| 场景 | 建议 |
|---|---|
| 日常包查询 | 使用 rpm -qi 查看包信息,rpm -ql 查看文件归属 |
| 验证包完整性 | 定期执行 rpm -Va 检查所有包的文件是否被篡改(适合安全审计) |
| 安装新包 | 优先使用 yum 而非 rpm -ivh,自动解决依赖 |
| 提取配置文件模板 | 用 rpm2cpio 从 RPM 包中提取文件,而不安装完整包 |
| Cockpit 管理 | 日常巡检使用 Cockpit,深度管理回到命令行 |
| 生产环境安全 | Cockpit 建议配置有效的 SSL 证书,并限制访问 IP |
下期预告 :本期我们了解了 RPM 包的基本操作,但 rpm 命令最大的痛点是------无法自动解决依赖关系 。安装一个软件需要手动下载十几个依赖包,这在生产环境中几乎不可行。下一期我们将深入学习 YUM 软件包管理 ------它会自动分析依赖、从软件仓库中下载所需包、一键安装。此外,我们还将学习 源码编译安装 (如 Nginx 从源码编译)和 自建 YUM 仓库,让你彻底掌握 Linux 软件管理的全貌。敬请期待第十三期!
--- Compiled and Authored by Whisky --- July 25 th, 2026