Vérifiez le type et la version de la distribution Linux

1.Tout d'abord

Il existe de nombreuses distributions de Linux. Ceux utilisés dans les systèmes d'entreprise sont limités, mais il en existe encore plusieurs types. Puisque la méthode de jugement diffère légèrement selon la distribution, nous avons étudié les principales distributions.

1-1. TL;DR

1-2. Environnement cible

2. Principes de base de la détermination de la distribution

La base pour déterminer le type de distribution Linux est de regarder le fichier / etc / * relax. Les fichiers suivants sont typiques.

Par exemple, pour CentOS, regardez / etc / centos-release. Si vous voyez ce qui suit, vous savez qu'il s'agit de CentOS 8.1.

/etc/centos-release


CentOS Linux release 8.1.1911 (Core)

Cependant, il n'y a pas de / etc / centos-release autre que CentOS. Par conséquent, il est nécessaire de modifier le fichier référencé en fonction de la distribution. De plus, / etc / os-release et / etc / system-release sont des fichiers indépendants de la distribution, mais ils sont incohérents.

3. Enquête sur chaque distribution

Cette fois, nous étudierons les distributions suivantes. Le système RHEL est basé sur 8, mais il est fondamentalement le même pour 6 et 7.

3-1. Red Hat Enterprise Linux Il y a trois fichiers, / etc / system-release est un lien symbolique vers / 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

Dans CentOS, / etc / system-release et / etc / redhat-release sont des liens symboliques vers / etc / centos-release.

$ ls -l /etc/*release
-rw-r--r--.1 racine racine 38 13 mars 04:15 /etc/centos-release
lrwxrwxrwx.1 racine racine 21 mars 13 04:15 /etc/os-release -> ../usr/lib/os-release
lrwxrwxrwx.1 racine racine 14 mars 13 04:15 /etc/redhat-release -> centos-release
lrwxrwxrwx.1 racine racine 14 mars 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"

** Conseils ** </ font> La plupart des distributions RHEL n'ont pas besoin de trop se soucier du chiffre unique de 8.1 ou 8.2. C'est parce que même l'image 8.1 (média) sera la même que la dernière à ce moment-là si vous la mettez à jour avec Yum / DNF. Cette zone est également liée aux paramètres du référentiel, mais ce sera une histoire plus profonde, donc si vous êtes intéressé, veuillez le vérifier vous-même. </ font>

3-3. Oracle Linux

Sur Oracle Linux, / etc / oracle-release a été ajouté.

$ 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

Ce qui est intéressant, c'est la comparaison avec CentOS. Dans CentOS, / etc / redhat-release est un lien symbolique, alors que dans Oracle Linux il ne l'est pas.

$ 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

Puisque / etc / redhat-release n'est pas un lien symbolique, il est identique à RHEL comme suit.

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

Une telle spécification serait une mesure de compatibilité pour les programmes qui vérifient la distribution.

Pour les packages de pilotes fournis par les produits commerciaux et les fournisseurs de matériel, / etc / * -release est souvent utilisé pour déterminer le type et la version de la distribution. En laissant l'original / etc / redhat-release, il peut être confondu avec RHEL et contourner la vérification.

Pseudo code pour la détermination de la version


if /etc/redhat-Y a-t-il une libération
Confirmation de version
else if /etc/centos-Y a-t-il une libération
Confirmation de version

3-4. Amazon Linux 2

Amazon Linux 2 n'a pas de fichier comme / etc / <nom de la distribution> -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 est une distribution basée sur RHEL, mais contrairement à CentOS et Oracle Linux, ce n'est pas une distribution purement compatible RHEL. Par conséquent, le contenu de / etc / os-release est également différent des autres distributions basées sur RHEL.

$ 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

Sur Ubuntu, vous avez les fichiers suivants: J'utilise 20.04 LTS cette fois, mais 18.04 LTS est fondamentalement le même.

$ 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 utilise souvent les commandes / etc / lsb-release et lsb_release -a. Les distributions basées sur RHEL ont également la commande lsb_release, mais elle n'est souvent pas installée par défaut (package redhat-lsb-core).

$ 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 Chez LTS
$ cat /etc/debian_version
bullseye/sid

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

ec2 semble être unique à Amazon EC2, mais il a également été trouvé dans Azure VM et Oracle Cloud Infrastructure Compute.

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

3-6. Bonus (exemple de code)

En fait, je pense qu'il est préférable d'utiliser sed, mais voici un exemple de code indépendant de la distribution qui détermine le type et la version de la distribution.

#!/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%*\.*}   #Version mineure supprimée
echo "VER: " $version

Résultat de sortie


DIST:  Oracle Linux Server
VER:  8

4. Résumé

  • ** Utilisez / etc / * release pour connaître le type et la version de la distribution **
  • ** Vous pouvez utiliser / etc / os-release comme fichier commun à toutes les distributions **

Recommended Posts