Linux(CentOS)系统管理入门笔记(第十二期)——系统管理工具与软件包管理(上篇):Cockpit 与 RPM 包管理

Linux(CentOS)系统管理入门笔记(第十二期)------系统管理工具与软件包管理(上篇):Cockpit 与 RPM 包管理

Linux系统管理入门系列更多文章欢迎访问:

Linux入门------系统管理1Linux入门------系统管理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

目录

  1. Cockpit:Linux 的 Web 管理仪表盘
    • 1.1 部署与启动
    • 1.2 Web 控制台功能介绍
    • 1.3 Cockpit 扩展包
  2. RPM 包管理:Linux 软件安装的基石
    • 2.1 Linux 发行版与包管理体系
    • 2.2 RPM 包文件名格式解析
    • 2.3 RPM 包组成与数字签名
    • 2.4 rpm 命令:查询(重点)
    • 2.5 rpm 命令:验证
    • 2.6 rpm 命令:安装与卸载
    • 2.7 提取 RPM 包中的文件
  3. 总结与速查手册

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 rpmyumdnf RHEL、CentOS、Fedora、Rocky、AlmaLinux、OpenSUSE
DEB 系 .deb dpkgaptapt-get Debian、Ubuntu、Kali Linux
其他 源码/自定义 pacmanemerge 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 思考与拓展(原课后作业转化)

  1. rpm -qa | wc -l 的作用是什么?
    → 统计系统中已安装的 RPM 包数量。通常在 CentOS 7 最小安装中约有 150-200 个包,完整安装可达 1000+。
  2. 为什么 RPM 包需要 GPG 签名?
    → 确保包的完整性和来源可信。防止软件包在传输过程中被篡改,或安装恶意伪造的软件包。
  3. rpm -qlrpm -qc 的区别是什么?
    -ql 列出包安装的所有文件;-qc 只列出配置文件(如 /etc/ 下的 .conf 文件)。
  4. 如何查看某个命令(如 ls)属于哪个 RPM 包?
    which ls 找到命令路径,然后 rpm -qf /usr/bin/ls
  5. 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

相关推荐
Jerry小杰2 小时前
运维神器|单端口搞定多台内网SSH!frp端口复用终极教程
运维·ssh
无小道2 小时前
深入解析操作系统文件缓冲区:页缓存、基数树与f_pos的协同设计
linux·缓存·文件缓冲区
Python私教2 小时前
Blender模型导入Godot完整教程:GLB、BLEND与继承场景怎么选
运维·godot·blender
雷工笔记3 小时前
KingFusion系列34-KingFusion表格控件翻页问题分析与解决
笔记·低代码
LONGZHIQIN3 小时前
TIA Portal Openness学习笔记
笔记·学习
寒水馨3 小时前
Linux下载、安装godot-4.7.1-stable(附安装包Godot_v4.7.1-stable_linux.x86_64.zip)
linux·游戏引擎·godot·游戏开发·2d游戏·3d游戏·godot engine
小+不通文墨3 小时前
--no-multibyte-chars 解决OLED_data.c移植后中文乱码问题
c语言·经验分享·笔记·学习
念恒123063 小时前
Socket编程UDP(中)
linux·网络协议·udp
深耕运维十八载云架构实务3 小时前
系统故障玄学之内存明明显示空闲,服务器却频繁卡顿卡死?拆解被忽略的 Linux 隐性内存陷阱
linux