Überprüfen Sie den Linux-Verteilungstyp und die Version

1. Zuallererst

Es gibt viele Distributionen von Linux. Die in Unternehmenssystemen verwendeten sind begrenzt, es gibt jedoch noch verschiedene Typen. Da sich die Beurteilungsmethode je nach Verteilung geringfügig unterscheidet, haben wir die Hauptverteilungen untersucht.

1-1. TL;DR

1-2. Zielumgebung

2. Grundlagen der Verteilungsbestimmung

Die Grundlage für die Bestimmung des Typs der Linux-Distribution ist das Betrachten der Datei "/ etc / * relax". Die folgenden Dateien sind typisch.

Schauen Sie sich für CentOS beispielsweise "/ etc / centos-release" an. Wenn Sie Folgendes sehen, wissen Sie, dass es sich um CentOS 8.1 handelt.

/etc/centos-release


CentOS Linux release 8.1.1911 (Core)

Es gibt jedoch keine andere "/ etc / centos-release" als CentOS. Daher ist es notwendig, die referenzierte Datei entsprechend der Verteilung zu ändern. Außerdem sind "/ etc / os-release" und "/ etc / system-release" verteilungsunabhängige Dateien, die jedoch inkonsistent sind.

3. Übersicht über jede Verteilung

Dieses Mal werden wir die folgenden Verteilungen untersuchen. Das RHEL-System basiert auf 8, ist jedoch für 6 und 7 grundsätzlich gleich.

3-1. Red Hat Enterprise Linux Es gibt drei Dateien: / etc / system-release ist ein symbolischer Link zu / etc / redhat-release.

$ ls -l /etc/*release
lrwxrwxrwx. 1 root root 22 Mar 31 07:15 /etc/os-release -> ..//usr/lib/os-release
-rw-r--r--. 1 root root 45 Mar 31 07:15 /etc/redhat-release
lrwxrwxrwx. 1 root root 14 Mar 31 07:15 /etc/system-release -> redhat-release
$ cat /etc/redhat-release
Red Hat Enterprise Linux release 8.2 (Ootpa)
$ cat /etc/os-release
NAME="Red Hat Enterprise Linux"
VERSION="8.2 (Ootpa)"
ID="rhel"
ID_LIKE="fedora"
VERSION_ID="8.2"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Red Hat Enterprise Linux 8.2 (Ootpa)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:redhat:enterprise_linux:8.2:GA"
HOME_URL="https://www.redhat.com/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"

REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 8"
REDHAT_BUGZILLA_PRODUCT_VERSION=8.2
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="8.2"

3-2. CentOS

In CentOS sind "/ etc / system-release" und "/ etc / redhat-release" symbolische Links zu "/ etc / centos-release".

$ ls -l /etc/*release
-rw-r--r--.1 Wurzel Wurzel 38 13. März 04:15 /etc/centos-release
lrwxrwxrwx.1 Wurzel Wurzel 21. März 13 04:15 /etc/os-release -> ../usr/lib/os-release
lrwxrwxrwx.1 Wurzel Wurzel 14. März 13 04:15 /etc/redhat-release -> centos-release
lrwxrwxrwx.1 Wurzel Wurzel 14. März 13 04:15 /etc/system-release -> centos-release
$ cat /etc/centos-release
CentOS Linux release 8.1.1911 (Core)
$ cat /etc/os-release
NAME="CentOS Linux"
VERSION="8 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="8"

** Tipps ** </ font> Die meisten RHEL-Distributionen müssen sich nicht zu viele Gedanken über die einzelne Ziffer 8.1 oder 8.2 machen. Dies liegt daran, dass sogar das 8.1-Image (Medium) mit Yum / DNF aktualisiert werden kann, um dem neuesten Stand zu diesem Zeitpunkt zu entsprechen. Dieser Bereich bezieht sich auch auf die Einstellungen des Repositorys, wird jedoch eine tiefere Geschichte sein. Wenn Sie also interessiert sind, überprüfen Sie ihn bitte selbst. </ font>

3-3. Oracle Linux

In Oracle Linux wurde / etc / oracle-release hinzugefügt.

$ ls -l /etc/*release
-rw-r--r--. 1 root root  32 May  5 02:08 /etc/oracle-release
-rw-r--r--. 1 root root 479 May  5 02:08 /etc/os-release
-rw-r--r--. 1 root root  45 May  5 02:08 /etc/redhat-release
lrwxrwxrwx. 1 root root  14 May  5 02:08 /etc/system-release -> oracle-release

Interessant ist der Vergleich mit CentOS. In CentOS ist / etc / redhat-release ein symbolischer Link, in Oracle Linux nicht.

$ cat /etc/oracle-release
Oracle Linux Server release 8.2
$ cat /etc/os-release
NAME="Oracle Linux Server"
VERSION="8.2"
ID="ol"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="8.2"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Oracle Linux Server 8.2"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:oracle:linux:8:2:server"
HOME_URL="https://linux.oracle.com/"
BUG_REPORT_URL="https://bugzilla.oracle.com/"

ORACLE_BUGZILLA_PRODUCT="Oracle Linux 8"
ORACLE_BUGZILLA_PRODUCT_VERSION=8.2
ORACLE_SUPPORT_PRODUCT="Oracle Linux"
ORACLE_SUPPORT_PRODUCT_VERSION=8.2

Da / etc / redhat-release kein symbolischer Link ist, ist es dasselbe wie RHEL wie folgt.

$ cat /etc/redhat-release
Red Hat Enterprise Linux release 8.2 (Ootpa)

Eine solche Spezifikation wäre eine Kompatibilitätsmaßnahme für Programme, die die Verteilung überprüfen.

Für Treiberpakete, die von kommerziellen Produkten und HW-Anbietern bereitgestellt werden, wird häufig "/ etc / * -release" verwendet, um den Typ und die Version der Distribution zu bestimmen. Wenn Sie das Original "/ etc / redhat-release" belassen, kann es mit RHEL verwechselt werden und die Prüfung umgehen.

Pseudocode zur Versionsbestimmung


if /etc/redhat-Gibt es eine Veröffentlichung?
Versionsbestätigung
else if /etc/centos-Gibt es eine Veröffentlichung?
Versionsbestätigung

3-4. Amazon Linux 2

Amazon Linux 2 verfügt nicht über eine Datei wie "/ etc / -release".

$ ls -l /etc/*release
-rw-r--r-- 1 root root 212 Jun 24 21:10 /etc/os-release
-rw-r--r-- 1 root root  31 Jun 24 21:10 /etc/system-release
$ cat /etc/system-release
Amazon Linux release 2 (Karoo)

Amazon Linux ist eine RHEL-basierte Distribution, aber im Gegensatz zu CentOS und Oracle Linux ist es keine reine RHEL-kompatible Distribution. Daher unterscheidet sich der Inhalt von "/ etc / os-release" auch von anderen RHEL-basierten Distributionen.

$ cat /etc/os-release
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"

3-5. Ubuntu

Unter Ubuntu haben Sie folgende Dateien: Ich benutze diesmal 20.04 LTS, aber 18.04 LTS ist im Grunde das gleiche.

$ ls -l /etc/*release
-rw-r--r-- 1 root root 102 Apr 15 11:09 /etc/lsb-release
lrwxrwxrwx 1 root root  21 Apr 15 11:09 /etc/os-release -> ../usr/lib/os-release

$ ls -l /etc/*version
-rw-r--r-- 1 root root 13 Dec  5  2019 /etc/debian_version
-rw-r--r-- 1 root root 31 Jul 14 15:46 /etc/ec2_version
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

Ubuntu verwendet häufig die Befehle / etc / lsb-release und lsb_release -a. RHEL-basierte Distributionen haben auch den Befehl lsb_release, der jedoch häufig nicht standardmäßig installiert ist (redhat-lsb-core-Paket).

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04 LTS"

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04 LTS
Release:        20.04
Codename:       focal
20.04 Bei LTS
$ cat /etc/debian_version
bullseye/sid

18.04 Bei LTS
$ cat /etc/debian_version
buster/sid

ec2 scheint für Amazon EC2 einzigartig zu sein, wurde jedoch auch in Azure VM und Oracle Cloud Infrastructure Compute gefunden.

$ cat /etc/ec2_version
Ubuntu 20.04 LTS (Focal Fossa)

3-6. Bonus (Beispielcode)

Eigentlich denke ich, dass es besser ist, sed zu verwenden, aber hier ist ein verteilungsunabhängiger Beispielcode, der den Typ und die Version der Verteilung bestimmt.

#!/bin/bash
FILENAME=/etc/os-release
dist=`grep -e ^NAME= ${FILENAME}`
dist=${dist#*\"}
dist=${dist%*\"}
echo "DIST: " $dist

version=`grep -e ^VERSION_ID= ${FILENAME}`
version=${version#*\"}
version=${version%*\"}
version=${version%*\.*}   #Nebenversion entfernt
echo "VER: " $version

Ausgabeergebnis


DIST:  Oracle Linux Server
VER:  8

4. Zusammenfassung

  • ** Verwenden Sie / etc / * release, um den Typ und die Version der Distribution herauszufinden **
  • ** Sie können / etc / os-release als eine Datei verwenden, die allen Distributionen gemeinsam ist **

Recommended Posts