当前位置: 首页>>技术教程>>正文


如何获得Ubuntu发行版的完整代码名?

, ,

问题描述

$ lsb_release -c
Codename:   trusty

$ cat /etc/issue
Ubuntu 14.04 LTS \n \l

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04 LTS"

以上命令的输出仅显示部分代码名称(即trusty)。如何获得已安装的Ubuntu系统的完整代码名(可信任的tahr)?

最佳办法

不使用外部工具:

您可以仅使用/etc/os-release的源代码(源命令是点.),就可以访问在那里定义的所有变量:

$ . /etc/os-release
$ echo "$VERSION"
14.04, Trusty Tahr

编辑。如果要删除14.04,零件(按terdon的要求),则可以:

$ . /etc/os-release
$ read _ UBUNTU_VERSION_NAME <<< "$VERSION"
$ echo "$UBUNTU_VERSION_NAME"
Trusty Tahr

请注意,这有点笨拙,因为在其他发行版上,VERSION字段可以具有不同的格式。例如,在我的debian上,

$ . /etc/os-release
$ read _ UBUNTU_VERSION_NAME <<< "$VERSION"
$ echo "$UBUNTU_VERSION_NAME"
(wheezy)

然后,您可以想象这样的事情(在脚本中):

#!/bin/bash

if [[ -r /etc/os-release ]]; then
    . /etc/os-release
    if [[ $ID = ubuntu ]]; then
        read _ UBUNTU_VERSION_NAME <<< "$VERSION"
        echo "Running Ubuntu $UBUNTU_VERSION_NAME"
    else
        echo "Not running an Ubuntu distribution. ID=$ID, VERSION=$VERSION"
    fi
else
    echo "Not running a distribution with /etc/os-release available"
fi

次佳办法

我已经提供的变体:

. /etc/os-release; echo ${VERSION/*, /}

迄今为止最短,最差的答案。

如果您不希望将/etc/os-release的内容加载到当前环境中,则可以假装bash认为它很容易加载脚本:

bash <(cat /etc/os-release; echo 'echo ${VERSION/*, /}')

第三种办法

Grep:

$ grep $(lsb_release -rs) /usr/share/python-apt/templates/Ubuntu.info | grep -m 1 "Description: Ubuntu " | cut -d "'" -f2
Trusty Tahr

说明:

  • lsb_release -rs->打印已安装的Ubuntu版本。

  • grep $(lsb_release -rs) /usr/share/python-apt/templates/Ubuntu.info->抓取包含您的发行版本的所有行,在我的情况下为14.04。

  • grep -m 1 "Description: Ubuntu "->再次仅获取包含字符串Description: Ubuntu的匹配的第一行(由于-m标志)。

  • cut -d "'" -f2->根据定界符单引号'打印字段号2

Awk:

$ awk -v var=$(lsb_release -rs) '$3~var {print $4" "$5;exit;}' /usr/share/python-apt/templates/Ubuntu.info | cut -d"'" -f2
Trusty Tahr

说明:

在awk中声明和分配变量是通过-v参数完成的,因此将lsb_release -rs命令的值分配给变量var,这反过来有助于从包含字符串14.04的行中打印字段4,字段5,如果找到一个则存在。 cut命令有助于删除单引号。

第四种办法

您要查找的命令是:

grep -oP '(?<=VERSION\=\"(\d\d)\.(\d\d)\,\ )(.*?)(?="$)' /etc/os-release

这非常丑陋,并且没有优化。我敢肯定应该有一个更简单的方法,这会有一些问题。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/7686.html,未经允许,请勿转载。