我知道检查我的机器上运行的 Linux 机器名称的命令。例如:
Ubuntu
cat /etc/version
CentOS
cat /etc/issue
如何从终端获取输出并比较它是 UBUNTU 还是 CENTOS 并执行以下命令?
apt-get install updates
或者
yum update
Ubuntu 14.04
cat /etc/issue
答案1
不幸的是,没有简单、可靠的方法来获取发行版名称。大多数主要发行版正在朝着/etc/os-release
他们用来存储这些信息的系统。大多数现代发行版也包含这些lsb_release
工具,但这些工具并不总是默认安装的。因此,您可以使用以下方法:
使用
/etc/os-release
awk -F= '/^NAME/{print $2}' /etc/os-release
lsb_release
如果有的话,使用工具lsb_release -d | awk -F"\t" '{print $2}'
使用更复杂的脚本,该脚本应该适用于绝大多数发行版:
# Determine OS platform UNAME=$(uname | tr "[:upper:]" "[:lower:]") # If Linux, try to determine specific distribution if [ "$UNAME" == "linux" ]; then # If available, use LSB to identify distribution if [ -f /etc/lsb-release -o -d /etc/lsb-release.d ]; then export DISTRO=$(lsb_release -i | cut -d: -f2 | sed s/'^\t'//) # Otherwise, use release info file else export DISTRO=$(ls -d /etc/[A-Za-z]*[_-][rv]e[lr]* | grep -v "lsb" | cut -d'/' -f3 | cut -d'-' -f1 | cut -d'_' -f1) fi fi # For everything else (or if above failed), just use generic identifier [ "$DISTRO" == "" ] && export DISTRO=$UNAME unset UNAME
gcc
解析已安装的版本信息:CentOS 5.x
$ gcc --version gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54) Copyright (C) 2006 Free Software Foundation, Inc.
CentOS 6.x
$ gcc --version gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3) Copyright (C) 2010 Free Software Foundation, Inc.
Ubuntu 12.04
$ gcc --version gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 Copyright (C) 2011 Free Software Foundation, Inc.
Ubuntu 14.04
$ gcc --version gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2 Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
答案2
您不需要 bash 来执行这样的任务,我建议使用高级方法来避免处理类似/etc/version
和的文件/etc/issue
(我在 13.10 上没有 /etc/version)。
因此我建议使用这个命令:
python -mplatform | grep -qi Ubuntu && sudo apt-get update || sudo yum update
Python平台模块将在两个系统上运行,该命令的其余部分将检查 Ubuntu 是否由 python 返回并运行apt-get
else yum
。
答案3
检查内核名称中是否存在 Ubuntu:
if [ -n "$(uname -a | grep Ubuntu)" ]; then
sudo apt-get update && sudo apt-get upgrade
else
yum update
fi
答案4
这lsb_release
为此目的,命令被添加到 Linux 标准库 (ISO/IEC 23360) 中:
$ lsb_release -si
Ubuntu
$ lsb_release -sd
Ubuntu 18.04.3 LTS
$ lsb_release -sr
18.04
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.3 LTS
Release: 18.04
Codename: bionic
因此,以下案例陈述
case "`/usr/bin/lsb_release -si`" in
Ubuntu) echo 'This is Ubuntu Linux' ;;
*) echo 'This is something else' ;;
esac
应该做你想做的事。
在基于 systemd 的较新的 Linux 发行版中,还有/etc/os-发布,旨在通过 source (.) 命令将其包含在 shell 脚本中,例如
. /etc/os-release
case "$ID" in
ubuntu) echo 'This is Ubuntu Linux' ;;
*) echo 'This is something else' ;;
esac
但在您给出的用例示例中,您实际上可能更感兴趣的不是发行版的名称,而是它是否有或apt-get
。yum
您可以只测试文件是否存在/usr/bin/apt-get
或... 或是否存在相关的基础设施目录,例如和。/usr/bin/yum
if [ -x /usr/bin/apt-get ]; then
/var/lib/apt
/etc/apt/