web-dev-qa-db-ja.com

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システムの完全なコードネーム(trusty tahr)を取得するにはどうすればよいですか?

33
Avinash Raj

外部ツールを使用しない:

source(sourceコマンドはドット./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
43
gniourf_gniourf

既に提供されているものの私のバリアント:

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

これまでで最も短い、最も簡単な答え。

/etc/os-releaseのコンテンツを現在の環境にロードする必要がない場合は、bashを偽装して、スクリプトをかなり簡単にロードしていると考えることができます。

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

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 "->再度、文字列-mを含む一致する最初の行(Description: Ubuntuフラグのため)のみを取得します。

  • 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と、見つかった場合に存在します。最後にcutコマンドは、単一引用符を削除するのに役立ちます。

5
Avinash Raj

探しているコマンドは次のとおりです。

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

これは非常にいであり、最適化されていません。もっと簡単な方法があるはずだし、これにはいくつかの問題があります。

4
Braiam

正規表現を使用すると、これを行うことができます:

grep 'VERSION' /etc/os-release | grep -oP "[a-zA-Z]+ [a-zA-Z]+"

説明:

これは、ファイル/etc/os-releaseVERSIONを含む行を検索します。次に、スペースで区切られた2つの連続した単語を見つけます(Perl正規表現)。 -oフラグは、検索に一致するもののみを保持します。

数字が含まれないようにするには、 `w`の代わりに[a-zA-Z]を使用する必要があります。

1
Romain Vincent
. /etc/os-release 
echo $VERSION
1
MegaBrutal