这个问题看起来好像很简单,其实深究起来还有点复杂
网上有人说可以用 uname -a 进行查看,那我们来看看到底能不能使用这个作为判别依据
//各大发行版的 uname -a 输出
CentOS8.2
Linux localhost.localdomain 4.18.0-193.el8.x86_64 #1 SMP Fri May 8 10:59:10 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
Fedora34
Linux localhost-live 5.11.12-300.fc34.x86_64 #1 SMP Wed Apr 7 16:31:13 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
Debian9.6
Linux 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux
OpenSUSE15.3
Linux localhost.localdomain 5.3.18-57-default #1 SMP Wed Apr 28 10:54:41 UTC 2021 (ba3c2e9) x86_64 x86_64 x86_64 GNU/Linux
Ubuntu20.04
Linux ubuntu 5.8.0-59-generic #66~20.04.1-Ubuntu SMP Thu Jun 17 11:14:10 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
除了 Debian 和 Ubuntu ,其他发行版并没有输出特别明显的标识。由此可见,uname -a 的输出并不足以用来标识各大发行版
那么还有其他的方式来识别吗?有的,那就是 cat /proc/version ,我们来看看这个的输出
CentOS8.2
Linux version 4.18.0-193.el8.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC)) #1 SMP Fri May 8 10:59:10 UTC 2020
Fedora34
Linux version 5.11.12-300.fc34.x86_64 (mockbuild@bkernel01.iad2.fedoraproject.org) (gcc (GCC) 11.0.1 20210324 (Red Hat 11.0.1-0), GNU ld version 2.35.1-41.fc34) #1 SMP Wed Apr 7 16:31:13 UTC 2021
Debian9.6
Linux version 4.9.0-8-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.130-2 (2018-10-27)
Ubuntu20.04
Linux version 5.8.0-59-generic (buildd@lcy01-amd64-022) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #66~20.04.1-Ubuntu SMP Thu Jun 17 11:14:10 UTC 2021
OpenSUSE15.3
Linux version 5.3.18-57-default (geeko@buildhost) (gcc version 7.5.0 (SUSE Linux)) #1 SMP Wed Apr 28 10:54:41 UTC 2021 (ba3c2e9)
可以看到,Red Hat系的发行版都会有 Red Hat 的标识,而Debian系的都会有对应的发行版关键词,那么如果 Red Hat系该怎么区分发行版呢?答案就是 cat /etc/redhat-release ,所有Red Hat系的发行版都有这个文件,并且还可以显示版本号
所以整体逻辑就是,先使用 cat /proc/version 查看是Red Hat系还是Debian系。如果是Red Hat系,再使用 cat /etc/redhat-release 查看具体的发行版和版本号
下面是一个可以识别发行版的 shell 脚本
pkg=""
get_release_pkg(){
if [[ $(cat /proc/version | grep -i "Red Hat") != "" ]]
then
pkg="yum"
elif [[ $(cat /proc/version | grep -i "Ubuntu" ) != "" ]] || [[ $(cat /proc/version | grep -i "Debian" ) != "" ]]
then
pkg="apt"
elif [[ $(cat /proc/version | grep -i "SUSE") != "" ]]
then
pkg="zypper"
fi
}
get_release_pkg
echo ${pkg}
网友评论