當前位置: 首頁>>技術教程>>正文


如何獲得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/zh-tw/article/7686.html,未經允許,請勿轉載。