如何获取“上帝”的系统版本
在对技术支持过程中,每个公司都难免会遇到这样一个困扰:我们的程序明明在内部环境中测试的好好的,但是到了客户手里总会出现各种问题。
从以往累计的经验来看,这类问题通常和客户的系统环境有关。所以,今天我们就来聊聊如何获取“上帝”(也就是我们尊贵的客户)的系统版本信息。
鉴于 Linux 的发行版本众多,我们只选取嵌入式领域比较常用的 Ubuntu 和 CentOS 举例,其他的版本差别不大,可以借鉴。
Ubuntu 系统
cat /proc/version
linux@ubuntu:~$ cat /proc/version
Linux version 5.4.0-147-generic (buildd@lcy02-amd64-043) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #164~18.04.1-Ubuntu SMP Tue Apr 4 00:20:20 UTC 2023
通过 /proc/version 文件,我们可以获取到 Linux 内核版本、gcc 版本和 Ubuntu 版本 3 项重要信息。
从命令的执行结果可以看出,我使用的是 Ubuntu 18.04 系统,Linux 内核版本为 5.4.0-147-generic,gcc 版本是 7.5.0。
uname -a
linux@ubuntu:~$ uname -a
Linux ubuntu 5.4.0-147-generic #164~18.04.1-Ubuntu SMP Tue Apr 4 00:20:20 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
uname -a
命令能获取 Linux 内核版本和 Ubuntu 版本 2 项信息。
lsb_release -a
linux@ubuntu:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.6 LTS
Release: 18.04
Codename: bionic
相对于前两种方式,lsb_release -a
命令只能获取 Ubuntu 版本信息。
CentOS 系统
cat /etc/redhat-release
[linux@localhost ~]$ cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
cat /etc/redhat-release
命令可以获取 CentOS 版本信息。
从执行结果可以看出,我使用的是 CentOS 7.5.1804 系统。
cat /etc/centos-release
[linux@localhost ~]$ cat /etc/centos-release
CentOS Linux release 7.5.1804 (Core)
cat /etc/centos-release
命令和cat /etc/redhat-release
的功能完全相同。
cat /proc/version
[linux@localhost ~]$ cat /proc/version
Linux version 3.10.0-862.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ) #1 SMP Fri Apr 20 16:44:24 UTC 2018
cat /proc/version
命令与在 Ubuntu 系统下的表现有些差别,虽然它同样能显示出 Linux 内核版本和 gcc 版本,但是系统版本显示的是 Red Hat 4.8.5-28,而不是 CentOS 发行版本。当然,CentOS 系统就是用 RedHat 源码编译出来的,所以显示这样的结果好像也正常。
uname -a
[linux@localhost ~]$ uname -a
Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
uname -a
命令与 Ubuntu 系统下的表现也不一样。在 CentOS 系统,我们只能看出 Linux 内核版本是 3.10.0-862,看不出 CentOS 版本信息。
hostnamectl
[linux@localhost ~]$ hostnamectl
Static hostname: localhost.localdomain
Icon name: computer-vm
Chassis: vm
Machine ID: 4c50114e142442a9aa889058800c8f36
Boot ID: f96742c953d84bffbd6a78c6fa858986
Virtualization: vmware
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-862.el7.x86_64
Architecture: x86-64
hostnamectl
命令列出的信息比较丰富,除了能看出当前使用的是 CentOS 7 和 Linux 内核 3.10.0-862.el7.x86_64,甚至还能看出当前系统运行的环境是 VMware 虚拟机。
lsb_release -a
[linux@localhost ~]$ lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.5.1804 (Core)
Release: 7.5.1804
Codename: Core
CentOS 系统默认是不包含lsb_release
命令的,需要通过yum install -y redhat-lsb
安装。其执行结果与 Ubuntu 系统基本相同,可以显示 CentOS 版本信息。