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
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.
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)
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
/ etc / * release
pour connaître le type et la version de la distribution **/ etc / os-release
comme fichier commun à toutes les distributions **Recommended Posts