如何在不使用 lsb_release 的情况下获取 Debian 代号

如何在不使用 lsb_release 的情况下获取 Debian 代号

我正在尝试创建一个脚本,要求我打印 Debian 代号,以便我可以将其回显到文件中sources.list

我试图让这个脚本在任何版本的 Debian 上工作,所以我希望设置一个发布代号的 bash 变量。这很容易做到lsb_release -c。但是,我们的部署映像默认不包含lsb_release- 并且需要此脚本来修复,因此无法选择sources.list安装。lsb-releaseapt-get

我找到了多种方法来获取版本号和有关系统的其他信息,但找不到可靠的地方来获取代号。

(我正在使用 Debian Squeeze 对此进行测试。)

答案1

您可以使用/etc/os-release

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

答案2

对于不附带的 Debian 发行版/etc/os-release(如 Squeeze),您可以使用以下“hack”。它利用该包提供了包含该名称的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,以便我们有一个 shell 来获取 os-release 文件,并运行 echo 命令。
  • -c:告诉bash我们要执行命令而不是启动交互式 shell。
  • . /etc/os-release:将内容源os-release到我们的新环境中。os-release包含几行设置环境变量,这将在我们的新环境中设置这些环境变量。
  • ;:分离该命令并运行下一个命令。
  • echo $VERSION_CODENAME:回显文件设置的代号os-release

答案4

对于系统:

hostnamectl | grep "Operating System"

输出:

  Operating System: Debian GNU/Linux 8 (jessie)

相关内容