lsb_releaseを使用せずにDebianコード名を取得する方法

lsb_releaseを使用せずにDebianコード名を取得する方法

私はDebianコード名を印刷してファイルに再エコーできるスクリプトを書こうとしていますsources.list

私はこのスクリプトをすべてのDebianバージョンで動作させようとしているので、リリースコードのbash変数を設定したいと思います。これは簡単ですlsb_release -c。ただし、展開イメージにはデフォルトで-が含まれておらず、これを変更するにはこのスクリプトが必要なため、インストールlsb_releaseオプションではありません。sources.listlsb-releaseapt-get

バージョン番号とシステムに関するその他の情報を取得するさまざまな方法が見つかりましたが、コード名を取得するための信頼できる場所が見つかりませんでした。

(私はこれをテストするためにDebian Squeezeを使用しています。)

答え1

あなたはそれを使用することができます/etc/os-release

(
  . /etc/os-release
  printf '%s\n' "$VERSION"
)
7 (wheezy)

答え2

付属していない Debian ディストリビューション/etc/os-release(Squeeze など) では、次の「ハッキング」を使用できます。その名前を含むtzdata関数(1)を提供するパッケージを利用してください。

$ dpkg --status tzdata
Package: tzdata
...
Provides: tzdata-squeeze

したがって、後処理して関数名の対応する部分を抽出できます。

dpkg --status tzdata|grep Provides|cut -f2 -d'-'

または、より少ない数のパイプを使用してください。

dpkg --status tzdata|awk -F'[:-]' '$1=="Provides"{print $NF}'

(1)しかし、これは RedHat 用語です。

答え3

からDebianディストリビューションのコード名を取得できます/etc/os-release。現在の環境に影響を与えないように、このファイルを解析するのではなく、新しい環境に入れてecho新しい環境でコマンドを実行できます。

env -i bash -c '. /etc/os-release; echo $VERSION_CODENAME'

それを破壊する:

  • env:新しい環境でコマンドを実行します。
  • -i: 既存の環境から環境変数を継承しません。
  • bash:bashを実行すると、os-releaseファイルをインポートし、echoコマンドを実行できるシェルが生成されます。
  • -cbash対話型シェルを起動するのではなく、コマンドを実行するように指示します。
  • . /etc/os-releaseos-release新しい環境にコンテンツを供給します。os-release新しい環境でこれらの環境変数を設定する環境変数を設定するいくつかの行が含まれています。
  • ;:コマンドを外し、次のコマンドを実行します。
  • echo $VERSION_CODENAME:ファイル設定のコード名をエコーし​​ますos-release

答え4

システムの場合:

hostnamectl | grep "Operating System"

出力:

  Operating System: Debian GNU/Linux 8 (jessie)

関連情報