下面給出 5 種可靠方法檢查 CentOS 版本,覆蓋 CentOS 6/7/8 與 CentOS Stream。所有命令均為可複製即用,並在每段後給出解釋。✅
方法一:讀取標準文件 /etc/os-release(首選)
cat /etc/os-release
解釋:/etc/os-release 是 systemd 生態的統一規範文件,會顯示 NAME、VERSION_ID、PRETTY_NAME 等關鍵信息。優點是通用、腳本友好。
要點:生產腳本可用 source /etc/os-release && echo $NAME $VERSION_ID 做機讀。<span style="color:red">優先級最高</span>。🎯
方法二:讀取傳統發行文件(兼容舊版)
# 任一存在即用(不同版本路徑可能不同)
cat /etc/centos-release
cat /etc/redhat-release
解釋:在較舊的 CentOS(如 6/7)或兼容的 RHEL 繫上,發行信息集中在上述文件。若找不到 /etc/os-release,優先嚐試這兩項。
要點:輸出通常包含 “CentOS Linux release X.Y” 等字樣,<span style="color:red">適配老環境</span>。🧩
方法三:用 hostnamectl(systemd 系列)
hostnamectl
解釋:hostnamectl 會展示主機信息,其中 Operating System 一行即為發行版本。需 systemd 環境(CentOS 7/8/Stream 常見)。
要點:不止版本,還能順便看到內核、架構。<span style="color:red">直觀</span>。🖥️
方法四:通過 RPM 查詢發行包(可機讀)
# 查詢發行版元包(不同版本可能是以下其一)
rpm -q centos-release
rpm -q redhat-release
rpm -q rocky-release # 遷移到 Rocky 的機器也可這樣查
解釋:發行版版本通常由一個 “release” 包提供(如 centos-release)。rpm -q 可直接得出版本號,適合腳本和合規審計。
要點:也可 rpm -qi centos-release 查看更詳細信息。<span style="color:red">適合批量/自動化</span>。🤖
方法五:lsb_release(需額外組件)
# 首次使用需安裝
sudo yum install -y redhat-lsb-core # CentOS 7
# 或 dnf install -y redhat-lsb-core # CentOS 8/Stream
lsb_release -a
解釋:lsb_release 是 LSB 接口,輸出 Distributor ID、Release、Codename。在跨發行版腳本中很常見。
要點:如未預裝需先安裝 redhat-lsb-core。<span style="color:red">通用但可能需裝包</span>。📦
對比與選擇(vditor/Markdown 表格)
| 方法 | 命令/文件 | 是否需裝包 | 機讀友好 | 適用範圍 | 備註 |
|---|---|---|---|---|---|
| 方法一 | /etc/os-release |
否 | ⭐⭐⭐⭐ | CentOS 7/8/Stream | <span style="color:red">官方規範,首選</span> |
| 方法二 | /etc/{centos,redhat}-release |
否 | ⭐⭐⭐ | CentOS 6/7/8 | 舊版兼容性強 |
| 方法三 | hostnamectl |
否 | ⭐⭐⭐ | CentOS 7/8/Stream | 需 systemd |
| 方法四 | rpm -q *-release |
否 | ⭐⭐⭐⭐ | CentOS 6/7/8/Stream | <span style="color:red">適合審計與批量</span> |
| 方法五 | lsb_release -a |
是 | ⭐⭐⭐ | CentOS 7/8/Stream | 跨發行腳本常用 |
一鍵機讀示例(腳本化場景)
# 優先使用 os-release,否則回退到 redhat/centos-release
if [ -f /etc/os-release ]; then
. /etc/os-release
echo "${NAME} ${VERSION_ID}"
elif [ -f /etc/centos-release ]; then
cat /etc/centos-release
elif [ -f /etc/redhat-release ]; then
cat /etc/redhat-release
else
rpm -q centos-release 2>/dev/null || rpm -q redhat-release 2>/dev/null || echo "Unknown"
fi
解釋:
- 第 1 段:
source /etc/os-release後直接輸出<名稱> <版本號>,<span style="color:red">標準可靠</span>。 - 第 2/3 段:回退讀取傳統文件,保證舊系統可用。
- 第 4 段:用
rpm -q兜底,儘可能識別。 - 最後一行:仍失敗則返回 “Unknown”。🛡️
診斷流程圖(vditor/Markdown|Mermaid)
補充説明與最新注意事項
<span style="color:red">CentOS Linux 已不再作為 RHEL 的下游長期穩定發行,官方重心轉向 CentOS Stream</span>;很多環境已遷移到 RHEL rebuild(如 Rocky、Alma)或直接使用 Stream。- 不要混淆:
uname -r是內核版本,<span style="color:red">不是發行版版本</span>;只能輔助判斷內核與架構,不代表系統發行版本。 - 批量資產盤點時,建議優先方法一/四並記錄到 CMDB,避免人工解析不一致。📊
小結
在自動化與可靠性優先的場景中,<span style="color:red">先查 /etc/os-release,再回退到傳統 release 文件,必要時用 hostnamectl/rpm 兜底</span>;跨發行腳本可加 lsb_release 作為補充。這 5 種方法互為補位,能覆蓋絕大多數線上環境。🚀