Shell内置与杂项-true-false-sleep / false / sleep 🛠️ — 状态与暂停

作用

true 始终返回退出码 0(成功);false 始终返回退出码 1(失败);sleep 暂停执行指定时间。在 Shell 脚本中用于无限循环、条件占位、延时等待等场景。

true / false

1
2
true
false

true 常用于创建无限循环:while true; do ...; donefalse 常用于禁用某段代码:if false; then ...; fi。配合 || 使用:cmd || true 忽略命令失败。

sleep

1
sleep NUMBER[SUFFIX]...

暂停执行指定的时间长度。支持后缀:s 秒(默认)、m 分钟、h 小时、d 天。支持小数:sleep 0.5。可同时指定多个参数:sleep 1h 30m 10s。脚本中用于等待、限速、定时任务等。

示例

1
2
3
4
5
6
while true; do echo "RUNNING"; sleep 1; done  # 无限循环每秒输出
true # 返回退出码 0
false # 返回退出码 1
sleep 5 # 暂停 5 秒
sleep 0.1 # 暂停 0.1 秒
sleep 1h 30m # 暂停 1 小时 30 分钟

来源:菜鸟教程

🔗 相关文档

exit-clear | Shell内置与杂项-test

Shell内置与杂项-type 🛠️ — 显示命令类型

作用

type 显示指定命令的类型(内置命令、外部程序、别名、函数或关键字),帮助理解 Shell 如何解析和执行命令。

语法

1
type [选项] 命令...

用法

type 比 which 提供更多信息。-a 显示所有匹配位置(别名、内置、PATH 中的外部程序);-p 仅显示外部命令路径(类似 which);-t 仅显示类型名称(简单文本输出);-W 显示类型(别名、关键字、函数、内置、文件)。

常用参数

参数 说明
-a 所有匹配位置
-p 仅外部命令路径
-t 仅类型名称
-W 显示类型

示例

1
2
3
4
5
type ls                             # 显示 ls 命令类型
type -a ls # 显示所有匹配位置
type -p ls # 仅显示外部命令路径
type -t cd # 仅显示类型名称
type -a echo # 显示 echo 所有匹配

来源:菜鸟教程

🔗 相关文档

command-exec | which-whereis | Shell内置与杂项-source

Shell内置与杂项-which-whereis / whereis 🛠️ — 查找命令位置

作用

which 从 PATH 环境变量中查找可执行命令的路径;whereis 查找命令的二进制文件、源代码和 man 手册的位置。用于定位命令所在目录、确认命令是否已安装。

which

1
which [选项] 命令...

在 PATH 中搜索命令路径。-a 显示所有匹配路径(而非仅第一个)。-s 静默模式(仅返回退出码)。适用于脚本中检测命令是否存在。

whereis

1
whereis [选项] 命令...

查找命令的二进制、源码和 man 手册位置。-b 仅查找二进制;-m 仅查找 man 手册;-s 仅查找源码。-u 显示缺少某类文件的条目(unusual entries)。比 which 显示更多信息。

常用参数

参数 说明
-a(which) 所有匹配路径
-s(which) 静默模式
-b(whereis) 仅二进制
-m(whereis) 仅 man 手册
-s(whereis) 仅源码
-u(whereis) 显示缺少某类文件的条目

示例

1
2
3
4
5
6
which python3                       # 查找 python3 命令路径
which -a ls # 显示所有匹配的 ls 路径
which -s python3 && echo "INSTALLED" # 静默检查命令是否存在
whereis ls # 查找 ls 的二进制和 man 手册
whereis -b python3 # 仅查找二进制文件位置
whereis -m ls # 仅查找 man 手册位置

来源:菜鸟教程

🔗 相关文档

Shell内置与杂项-type | command-exec

包管理-apt-get 📦 — Debian/Ubuntu 包管理(传统)

作用

apt-get 是 Debian/Ubuntu 系列的传统包管理工具,用于安装、升级和卸载软件包。配合 apt-cache(搜索)和 apt-mark(管理包状态),组成完整的 APT 工具集。在脚本中使用比 apt 更稳定。

语法

1
apt-get [选项] 操作 [包名]

用法

apt-get 常用操作:install 安装;remove 卸载(保留配置);purge 完全卸载;update 刷新源列表;upgrade 升级所有包;dist-upgrade 发行版升级;autoremove 清除无用依赖;clean 清除下载的包缓存;autoclean 清除过期的包缓存;download 仅下载不安装;source 获取源码。--reinstall 重新安装;-y 自动确认。

常用参数

参数 说明
install 安装包
remove 卸载包
purge 完全卸载
update 更新源列表
upgrade 升级包
dist-upgrade 发行版升级
autoremove 清理依赖
--reinstall 重新安装
-y 自动确认

示例

1
2
3
4
5
6
7
sudo apt-get update                # 刷新软件源列表
sudo apt-get install nginx # 安装 nginx 包
sudo apt-get remove nginx # 卸载 nginx(保留配置)
sudo apt-get purge nginx # 完全卸载 nginx
sudo apt-get autoremove # 清除无用依赖包
sudo apt-get --reinstall nginx # 重新安装 nginx
sudo apt-get clean # 清除下载的 .deb 缓存

来源:菜鸟教程

🔗 相关文档

包管理-apt | 包管理-dpkg | snap-flatpak

Shell内置与杂项-command-exec / exec 🛠️ — 执行命令

作用

command 忽略 Shell 函数和别名,直接执行外部命令。exec 用指定命令替换当前 Shell 进程,不创建新子进程。两者都是 Shell 内置命令,用于控制命令执行方式。

command

1
command [选项] 命令 [参数...]

绕过别名和函数,直接执行外部命令。-v 显示命令路径;-p 使用默认 PATH 搜索。适用于脚本中需要确保执行的是系统命令而非别名或函数。

exec

1
exec [选项] 命令 [参数...]

用指定命令替换当前 Shell 进程,原 Shell 进程终止(不会返回)。exec < FILE 重定向当前 Shell 的标准输入;exec > FILE 重定向标准输出。常用于脚本中重定向所有后续输出,或在容器启动时替换 Shell 为主进程。

示例

1
2
3
4
5
6
7
command ls                          # 忽略别名直接执行 ls
command -v ls # 显示命令路径
command -p ls # 使用默认 PATH 查找 ls
exec bash # 用 bash 替换当前 Shell
exec zsh # 用 zsh 替换当前 Shell
exec < FILE.TXT # 重定向当前 Shell 标准输入
exec > OUTPUT.LOG 2>&1 # 重定向当前 Shell 全部输出到文件

来源:菜鸟教程

🔗 相关文档

Shell内置与杂项-source | Shell内置与杂项-type | which-whereis

Shell内置与杂项-echo 🛠️ — 输出文本

作用

echo 将指定文本输出到标准输出,是 Shell 脚本中最常用的输出命令。支持转义字符和变量替换,用于打印信息、调试脚本、生成文件内容等。

语法

1
echo [选项] [字符串...]

用法

echo 默认在输出末尾添加换行符。-n 不输出换行;-e 启用转义字符(如 \n 换行、\t 制表符、\\ 反斜杠)。转义字符需用 -e 选项或在字符串外使用 $'...' 语法。变量替换直接用 $VAR。多个字符串自动用空格连接。

常用参数

参数 说明
-n 不输出换行
-e 启用转义字符

示例

1
2
3
4
5
echo "HELLO WORLD"                  # 输出文本
echo -n "NO NEWLINE" # 输出不换行
echo -e "LINE1\nLINE2" # 启用转义(\n 换行)
echo "USER: $USER" # 输出变量值
echo -e "COL1\tCOL2\tCOL3" # 制表符对齐输出

来源:菜鸟教程

🔗 相关文档

Shell内置与杂项-printf | Shell内置与杂项-read | Shell内置与杂项-test

Shell内置与杂项-eval-trap-shift / trap / shift 🛠️ — Shell 高级用法

作用

eval 将字符串作为 Shell 命令二次解析执行;trap 捕获信号或事件执行自定义操作;shift 移动位置参数(左移丢弃 $1)。三者都是 Shell 脚本中常用的高级控制命令。

eval

1
eval [参数...]

将参数拼接为字符串并作为 Shell 命令执行(二次解析)。适用于构造动态命令或访问间接变量。注意安全风险,不要对不受信任的输入使用 eval。

trap

1
trap [操作] 信号...

捕获指定信号并执行操作。常用信号:INT(Ctrl+C)、TERM(终止)、EXIT(退出)、ERR(命令错误)。trap 'rm -f /tmp/tempfile' EXIT 在脚本退出时清理临时文件。trap '' INT 忽略 Ctrl+C。

shift

1
shift [N]

将位置参数左移 N 位(丢弃前 N 个参数,$1 变为原来的第 N+1 个参数)。默认 N=1。在脚本中遍历所有参数时常用:while [ $# -gt 0 ]; do ...; shift; done

示例

1
2
3
4
5
6
CMD="ls -la"                       # 构造命令字符串
eval "$CMD" # 二次解析执行动态命令
trap 'echo "INTERRUPTED"; exit' INT # 捕获 Ctrl+C 后执行
trap 'rm -f /tmp/temp' EXIT # 脚本退出时清理临时文件
shift # 左移一个位置参数(丢弃 $1)
shift 2 # 左移两个位置参数

⚠️ eval 注意安全风险。


来源:菜鸟教程

🔗 相关文档

exit-clear | Shell内置与杂项-source

Shell内置与杂项-exit-clear / clear 🛠️ — 退出 Shell / 清屏

作用

exit 退出当前 Shell 并返回退出码给父进程;clear 清空终端屏幕内容。二者都是 Shell 内置或常用命令。

exit

1
exit [退出码]

终止当前 Shell 进程并返回退出码。exit 0 表示成功,exit 1(或非零)表示出错。不指定退出码时返回上一条命令的退出码。在脚本中用于提前终止或在错误时返回特定状态码。

clear

1
clear

清空终端屏幕(等效于 Ctrl+L 快捷键)。将屏幕内容上卷,终端提示符回到顶部。clear -x 保留滚动缓冲区。-T 终端类型 指定终端类型。

常用参数

参数 说明
-x(clear) 保留滚动缓冲区
-T 类型(clear) 指定终端类型

示例

1
2
3
4
5
exit                                # 退出当前 Shell(沿用上次退出码)
exit 0 # 成功退出
exit 1 # 失败退出
clear # 清屏
clear -x # 清屏(保留滚动缓冲区)

快捷键:Ctrl + L 等效于 clear


来源:菜鸟教程

🔗 相关文档

true-false-sleep | eval-trap-shift

Shell内置与杂项-printf 🛠️ — 格式化输出

作用

printf 根据格式化字符串输出文本,比 echo 功能更强。源自 C 语言的 printf 函数,支持格式说明符、宽度对齐、进制转换等,是 Shell 脚本中表格输出的首选工具。

语法

1
printf 格式 [参数...]

用法

printf 的格式字符串包含普通文本和格式说明符(以 % 开头)。常用说明符:%s 字符串、%d 整数、%f 浮点数、%x 十六进制。\n 换行、\t 制表符。宽度对齐:%10s 右对齐最小宽度 10,%-10s 左对齐。格式字符串会循环应用到所有参数。

常用参数

说明符 说明
%s 字符串
%d 整数
%f 浮点数
%x 十六进制
\n 换行
\t 制表符

示例

1
2
3
4
5
printf "HELLO %s\n" "WORLD"       # 格式化输出字符串
printf "%10s %-10s\n" "NAME" "VALUE" # 右对齐和左对齐
printf "%d\n" 255 # 输出十进制整数
printf "%x\n" 255 # 输出十六进制
printf "%f\n" 3.14 # 输出浮点数

来源:菜鸟教程

🔗 相关文档

Shell内置与杂项-echo | Shell内置与杂项-read

🟠 CentOS 系统详情

参见: 四大服务器系统对比总览 — openEuler / CentOS / Ubuntu / Debian | Linux 发行版系别与差异详解 | openEuler 详情 | Ubuntu 详情 | Debian 详情


📖 一、基本信息

项目 内容
全称 Community Enterprise Operating System
发起方 Red Hat 公司(现属 IBM)
首次发布 2004 年 5 月
所属系别 Red Hat 系(RPM 体系)
包格式 .rpm
包管理器 dnf(CentOS 8+)/ yum(CentOS 7)
治理模式 Red Hat 主导
当前活跃版本 CentOS Stream 9 / 10
官网 https://www.centos.org

⚠️ 重要历史转折

时间 事件
2020.12 Red Hat 宣布终止 CentOS Linux,转向 CentOS Stream
2021.12.31 CentOS Linux 8 停止维护(原定 2029 年)
2024.06.30 CentOS Linux 7 停止维护(最后传统版本终结)
2026.05 CentOS Stream 10 正式发布

CentOS Linux 已彻底退出历史舞台,不再推荐任何新生产环境使用。


🔄 二、CentOS Linux vs CentOS Stream

定位变化

维度 CentOS Linux(已停维) CentOS Stream(当前)
与 RHEL 关系 下游重建版(RHEL 发布后跟进) 上游开发平台(RHEL 的前一站)
更新策略 定点发布 (Point Release) 滚动更新 (Rolling Release)
稳定性 高(跟随已验证的 RHEL) 中等(含即将进入 RHEL 的新特性)
更新节奏 RHEL 发布后数周跟进 提前 1-6 周获得即将进入 RHEL 的更新
适用场景 企业生产环境 开发测试、前沿技术验证
生命周期 ~10 年 ~5 年

红帽生态中的位置

1
2
3
4
5
Fedora (激进创新) → CentOS Stream (技术预览) → RHEL (企业级稳定)
↓ ↓ ↓
每6个月发布 滚动更新 定点发布
最新技术试验 RHEL 的上游 10年支持
社区驱动 Red Hat 主导 付费订阅

🔧 三、技术架构

当前版本技术栈

组件 CentOS Stream 9 CentOS Stream 10
内核 Linux 5.14 Linux 6.12
编译器 GCC 11 GCC 14 / LLVM 19
Rust Rust 1.82
Go Go 1.23
Python 3.9 3.12
Java OpenJDK 11 / 17 OpenJDK 21
Ruby 3.3
PHP 8.3
Node.js 22
Web 服务器 Apache 2.4 / nginx Apache 2.4.62 / nginx 1.26
数据库 PostgreSQL 13 / MariaDB 10.5 PostgreSQL 16 / MariaDB 10.11 / MySQL 8.4
缓存 Redis Valkey 7.2
Init 系统 systemd systemd
安全框架 SELinux (强制) SELinux (强制)
默认文件系统 XFS XFS
容器引擎 Podman Podman

Stream 10 关键特性

  • cgroups v2 原生支持,适配 Kubernetes 1.24+
  • Podman 默认替代 Docker,兼容 OCI 标准
  • Btrfs 文件系统支持更完善
  • 支持 x86_64ARM64 架构
  • eBPF 全面支持,可观测性和网络编程能力增强

默认文件系统与内核

项目 说明
默认文件系统 XFS
支持文件系统 XFS, ext4, Btrfs, NFS, GFS2
内核策略 保守稳定,跟随 RHEL 内核基线
架构支持 x86_64 (主要), ARM64 (有限)

📅 四、版本与生命周期

历史版本时间线

版本 发布日期 停止维护 生命周期 状态
CentOS 6 2011-07 2020-11-30 ~9 年 已停维
CentOS 7 2014-07 2024-06-30 ~10 年 ⛔ 已停维
CentOS 8 2019-09 2021-12-31 ~2 年 (提前终止) ⛔ 已停维
CentOS Stream 8 2019-09 2024-05-31 ~5 年 已停维
CentOS Stream 9 2021-12 ~2027 ~5 年 ✅ 活跃
CentOS Stream 10 2026-05 ~2030 ~5 年 ✅ 最新

CentOS Stream 生命周期政策

  • 每个大版本约 5 年维护周期
  • 滚动更新模式,无小版本号概念
  • dnf system-upgrade 实现跨大版本升级
  • 生命周期结束时停止安全更新

维护终止影响

1
2
3
4
5
6
CentOS 7 (2024.6 EOL)
├── 不再接收安全补丁
├── 不再接收 Bug 修复
├── 软件仓库可能下线
├── 合规审计不可通过
└── 建议立即迁移: Rocky Linux / AlmaLinux / Ubuntu LTS

📦 五、包管理体系

包管理概览

项目 CentOS 7 CentOS Stream 8/9/10
包格式 .rpm .rpm
底层工具 rpm rpm
上层管理器 yum dnf
仓库配置 /etc/yum.repos.d/ /etc/yum.repos.d/
软件包数量 ~10,000 ~15,000

仓库结构

仓库 说明
BaseOS 核心操作系统包
AppStream 应用程序流(多版本支持)
EPEL Extra Packages for Enterprise Linux(社区扩展)
CRB (PowerTools) 开发者工具和库
HighAvailability 高可用集群组件
RT 实时内核

模块化版本流 (Module Streams)

1
2
3
4
5
6
7
8
9
# 查看可用模块流
dnf module list

# 安装特定版本流
sudo dnf module install nodejs:18

# 切换模块流
sudo dnf module reset nodejs
sudo dnf module install nodejs:20

常用命令速查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 刷新仓库索引
sudo dnf makecache

# 安装软件
sudo dnf install nginx

# 搜索软件
dnf search nginx

# 升级所有软件包
sudo dnf upgrade

# 卸载软件
sudo dnf remove nginx

# 清理缓存
sudo dnf clean all

# 查看已安装包
dnf list --installed

# 查看包信息
dnf info nginx

# 查看可用更新
dnf check-update

# 跨大版本升级 (如 9→10)
sudo dnf system-upgrade download --releasever=10
sudo dnf system-upgrade reboot

# 管理服务
sudo systemctl start nginx
sudo systemctl enable nginx

与 RHEL 的包兼容性

  • CentOS Stream 包与 RHEL 包高度兼容但非 100% 二进制一致
  • 第三方软件商通常提供 “RHEL/CentOS 兼容” 的 RPM 包
  • EPEL 提供额外 7,000+ 软件包

🛡️ 五、安全与合规

安全框架

维度 说明
MAC 框架 SELinux(默认 enforcing 模式)
防火墙 firewalld(nftables 后端)
内核加固 Kernel Lockdown、Secure Boot
审计 auditd(内核级审计子系统)
加密策略 system-wide crypto policies(update-crypto-policies

SELinux 关键操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看 SELinux 状态
getenforce

# 临时切换模式
sudo setenforce 0 # Permissive
sudo setenforce 1 # Enforcing

# 永久配置
sudo vi /etc/selinux/config

# 查看 SELinux 拒绝日志
sudo sealert -a /var/log/audit/audit.log

# 恢复文件安全上下文
sudo restorecon -Rv /path/

合规认证(通过 RHEL 生态)

认证 状态
FIPS 140-2/3 ✅ (RHEL 认证,Stream 兼容)
Common Criteria ✅ (RHEL 认证)
DISA STIG ✅ (RHEL 认证)
等保 2.0 通过配置支持,无原生认证
信创/国产化 ❌ 不适用

漏洞响应

  • Red Hat 安全团队负责漏洞评估和修复
  • 严重漏洞通过 Red Hat 安全公告 (RHSA) 发布
  • Stream 用户比 RHEL 用户更早获得修复(提前进入上游)
  • dnf upgrade --security 仅安装安全更新

🌐 六、生态定位与横向对比

与同类系统的关键差异

对比维度 CentOS Stream openEuler Ubuntu LTS Debian Stable
更新模式 滚动更新 LTS + 创新版 LTS 定点发布 稳定版定点发布
生产适用性 ⭐⭐ (开发测试) ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
RHEL 兼容性 ⭐⭐⭐⭐ (上游) ⭐⭐⭐ (RPM 兼容) ⭐ (不同系别) ⭐ (不同系别)
信创合规
云平台支持 ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐
中文生态 ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐

迁移策略

当前系统 推荐迁移目标 理由
CentOS 7 Rocky Linux 9 / AlmaLinux 9 RHEL 1:1 兼容,迁移成本最低
CentOS 8 Rocky Linux 9 / AlmaLinux 9 同系别,包管理一致
CentOS Stream 8 CentOS Stream 10 同系列升级
不想继续 RPM 生态 Ubuntu 24.04 LTS 生态最广,AI/云原生首选
信创需求 openEuler 24.03 LTS 合规唯一选择

适用场景总结

✅ 适合 CentOS Stream:

  • RHEL 生态的开发和测试环境
  • 提前验证应用与下一版 RHEL 的兼容性
  • CI/CD 流水线基础镜像
  • 云原生/容器化场景(Podman、eBPF、cgroups v2)
  • 需要紧跟 RHEL 技术演进的团队

❌ 不适合 CentOS Stream:

  • 对稳定性要求极高的传统企业生产环境
  • 需要 10 年超长生命周期的关键业务
  • 信创合规/国产化项目
  • 希望”装好就忘”的无人值守场景

📝 总结

CentOS Linux 已终结,但 CentOS Stream 作为 RHEL 的上游预览通道有其独特价值——适合开发测试和前沿技术验证。对于生产环境,应选择 Rocky Linux、AlmaLinux(RHEL 兼容替代)或 Ubuntu LTS(跨系别替代)。不要再在任何新项目中使用 CentOS Linux。

0%