

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Identification des instances et des versions d'Amazon Linux
<a name="identifying"></a>

 Il peut être important de pouvoir déterminer quelle distribution Linux et quelle version de cette distribution est une image ou une instance de système d'exploitation. Amazon Linux fournit des mécanismes permettant d'identifier Amazon Linux par rapport aux autres distributions Linux, ainsi que de déterminer de quelle version d'Amazon Linux il s'agit de l'image. 

 Cette section couvre les différentes méthodes qui peuvent être utilisées, leurs limites, et passe en revue quelques exemples de leur utilisation. 

**Topics**
+ [Utilisation de la `os-release` norme](ident-os-release.md)
+ [Spécifique à Amazon Linux](ident-amazon-linux-specific.md)
+ [Exemple de code pour la détection du système d'exploitation](ident-example-code.md)

# Utilisation de la `os-release` norme
<a name="ident-os-release"></a>

 Amazon Linux est conforme à la [`os-release`norme](https://www.freedesktop.org/software/systemd/man/latest/os-release.html) d'identification des distributions Linux. Ce fichier fournit des informations lisibles par machine concernant l'identification du système d'exploitation et les informations de version. 

**Note**  
 La norme indique que `/etc/os-release` l'analyse doit être tentée en premier, suivie de. `/usr/lib/os-release` Il faut veiller à suivre la norme concernant les noms et les chemins des fichiers. 

**Topics**
+ [Principales différences d'identification](#ident-key-differences)
+ [Types de champs : lisibles par machine ou lisibles par l'homme](#ident-os-release-field-types)
+ [Exemples pour l’`/etc/os-release`](#ident-os-release-examples)
+ [Comparaison avec d'autres distributions](#ident-other-distributions-comparison)

## Principales différences d'identification
<a name="ident-key-differences"></a>

 Le se `os-release` trouve à`/etc/os-release`, et s'il n'est pas présent, à`/usr/lib/os-release`. Consultez la [`os-release`norme](https://www.freedesktop.org/software/systemd/man/latest/os-release.html) pour obtenir des informations complètes. 

 La méthode la plus fiable pour déterminer si une instance exécute Amazon Linux est de cocher le `ID` champ`os-release`. 

 Le moyen le plus fiable de faire la distinction entre les versions consiste à cocher le `VERSION_ID` champ dans `os-release` : 
+ AMI Amazon Linux : `VERSION_ID` contient une version basée sur la date (par exemple,`2018.03`)
+ AL2: `VERSION_ID="2"`
+ AL2023 : `VERSION_ID="2023"`

**Note**  
 N'oubliez pas qu'`VERSION_ID`il s'agit d'un champ lisible par machine destiné à un usage programmatique, alors qu'`PRETTY_NAME`il est conçu pour être affiché aux utilisateurs. Consultez [Types de champs : lisibles par machine ou lisibles par l'homme](#ident-os-release-field-types) pour plus d'informations sur les types de champs. 

## Types de champs : lisibles par machine ou lisibles par l'homme
<a name="ident-os-release-field-types"></a>

 Le `/etc/os-release` fichier (ou `/usr/lib/os-release` s'il `/etc/os-release` n'existe pas) contient deux types de champs : les champs lisibles par machine destinés à un usage programmatique et les champs lisibles par l'homme destinés à être présentés aux utilisateurs. 

### Champs lisibles par machine
<a name="ident-machine-readable-fields"></a>

 Ces champs utilisent des formats standardisés et sont destinés à être traités par des scripts, des gestionnaires de packages et d'autres outils automatisés. Ils ne contiennent que des lettres minuscules, des chiffres et une ponctuation limitée (points, traits de soulignement et tirets). 
+ `ID`— Identifiant du système d'exploitation. Amazon Linux `amzn` l'utilise dans toutes les versions, ce qui le distingue des autres distributions telles que Debian (`debian`), Ubuntu (`ubuntu`) ou Fedora () `fedora`
+ `VERSION_ID`— Version du système d'exploitation pour une utilisation programmatique (par exemple,`2023`)
+ `ID_LIKE`— Liste séparée par des espaces des distributions associées (par exemple,) `fedora`
+ `VERSION_CODENAME`— Nom de code de publication pour les scripts (par exemple,) `karoo`
+ `VARIANT_ID`— Identifiant de variante pour les décisions programmatiques
+ `BUILD_ID`— Identifiant de build pour les images du système
+ `IMAGE_ID`— Identifiant d'image pour les environnements conteneurisés
+ `PLATFORM_ID`— Identifiant de plateforme (par exemple,`platform:al2023`)

### Champs lisibles par l'homme
<a name="ident-human-readable-fields"></a>

 Ces champs sont destinés à être affichés aux utilisateurs et peuvent contenir des espaces, des majuscules et du texte descriptif. Ils doivent être utilisés lors de la présentation des informations du système d'exploitation dans les interfaces utilisateur. 
+ `NAME`— Nom du système d'exploitation à afficher (par exemple,`Amazon Linux`)
+ `PRETTY_NAME`— Nom complet du système d'exploitation avec version à afficher (par exemple,`Amazon Linux 2023.8.20250721`)
+ `VERSION`— Informations de version adaptées à la présentation par l'utilisateur
+ `VARIANT`— Nom de la variante ou de l'édition à afficher (par exemple,`Server Edition`)

### Autres champs d'information
<a name="ident-other-fields"></a>

 Ces champs fournissent des métadonnées supplémentaires sur le système d'exploitation : 
+ `HOME_URL`— URL de la page d'accueil du projet
+ `DOCUMENTATION_URL`— URL de la documentation
+ `SUPPORT_URL`— URL des informations de support
+ `BUG_REPORT_URL`— URL de signalement de bogue
+ `VENDOR_NAME`— Nom du fournisseur
+ `VENDOR_URL`— URL du fournisseur
+ `SUPPORT_END`— End-of-support date au YYYY-MM-DD format
+ `CPE_NAME`— Identifiant d'énumération de plate-forme commune
+ `ANSI_COLOR`— Code couleur ANSI pour l'affichage du terminal

 Lorsque vous écrivez des scripts ou des applications qui doivent identifier Amazon Linux par programmation, utilisez les champs lisibles par machine tels que et. `ID` `VERSION_ID` Lorsque vous affichez des informations sur le système d'exploitation aux utilisateurs, utilisez des champs lisibles par l'homme tels que`PRETTY_NAME`. 

## Exemples pour l’`/etc/os-release`
<a name="ident-os-release-examples"></a>

 Le contenu du `/etc/os-release` fichier varie selon les versions d'Amazon Linux : 

------
#### [ AL2023 ]

```
[ec2-user ~]$ cat /etc/os-release
```

```
NAME="Amazon Linux"
VERSION="2023"
ID="amzn"
ID_LIKE="fedora"
VERSION_ID="2023"
PLATFORM_ID="platform:al2023"
PRETTY_NAME="Amazon Linux 2023.8.20250721"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2023"
HOME_URL="https://aws.amazon.com/linux/amazon-linux-2023/"
DOCUMENTATION_URL="https://docs.aws.amazon.com/linux/"
SUPPORT_URL="https://aws.amazon.com/premiumsupport/"
BUG_REPORT_URL="https://github.com/amazonlinux/amazon-linux-2023"
VENDOR_NAME="AWS"
VENDOR_URL="https://aws.amazon.com/"
SUPPORT_END="2029-06-30"
```

------
#### [ AL2 ]

```
[ec2-user ~]$ 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/"
SUPPORT_END="2026-06-30"
```

------
#### [ Amazon Linux AMI ]

```
[ec2-user ~]$ cat /etc/os-release
```

```
NAME="Amazon Linux AMI"
VERSION="2018.03"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2018.03"
PRETTY_NAME="Amazon Linux AMI 2018.03"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2018.03:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
```

------

## Comparaison avec d'autres distributions
<a name="ident-other-distributions-comparison"></a>

 Pour comprendre comment Amazon Linux s'intègre dans l'écosystème Linux au sens large, comparez son `/etc/os-release` format à celui d'autres distributions majeures : 

------
#### [ Fedora ]

```
[ec2-user ~]$ cat /etc/os-release
```

```
NAME="Fedora Linux"
VERSION="42 (Container Image)"
RELEASE_TYPE=stable
ID=fedora
VERSION_ID=42
VERSION_CODENAME=""
PLATFORM_ID="platform:f42"
PRETTY_NAME="Fedora Linux 42 (Container Image)"
ANSI_COLOR="0;38;2;60;110;180"
LOGO=fedora-logo-icon
CPE_NAME="cpe:/o:fedoraproject:fedora:42"
DEFAULT_HOSTNAME="fedora"
HOME_URL="https://fedoraproject.org/"
DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/f42/system-administrators-guide/"
SUPPORT_URL="https://ask.fedoraproject.org/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_BUGZILLA_PRODUCT="Fedora"
REDHAT_BUGZILLA_PRODUCT_VERSION=42
REDHAT_SUPPORT_PRODUCT="Fedora"
REDHAT_SUPPORT_PRODUCT_VERSION=42
SUPPORT_END=2026-05-13
VARIANT="Container Image"
VARIANT_ID=container
```

------
#### [ Debian ]

```
[ec2-user ~]$ cat /etc/os-release
```

```
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
```

------
#### [ Ubuntu ]

```
[ec2-user ~]$ cat /etc/os-release
```

```
PRETTY_NAME="Ubuntu 24.04.2 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.2 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
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"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo
```

------

 Remarquez comment les champs lisibles par machine fournissent une identification cohérente entre les distributions : 
+ `ID`— Identifie de manière unique le système d'exploitation : `amzn` pour Amazon Linux, `fedora` pour Fedora, `debian` pour Debian, `ubuntu` pour Ubuntu
+ `ID_LIKE`— Affiche les relations de distribution : Amazon Linux utilise `fedora` (AL2023) ou `centos rhel fedora` (AL2), tandis qu'Ubuntu affiche `debian` pour indiquer son héritage Debian
+ `VERSION_ID`— Fournit des informations de version analysables par machine : `2023` pour AL2 023, pour Fedora, `42` pour Debian, pour Ubuntu `12` `24.04`

 En revanche, les champs lisibles par l'homme sont conçus pour être affichés aux utilisateurs : 
+ `NAME`— Nom du système d'exploitation convivial :`Amazon Linux`,`Fedora Linux`,`Debian GNU/Linux`, `Ubuntu`
+ `PRETTY_NAME`— Nom d'affichage complet avec version :`Amazon Linux 2023.8.20250721`,`Fedora Linux 42 (Container Image)`,`Debian GNU/Linux 12 (bookworm)`, `Ubuntu 24.04.2 LTS`
+ `VERSION`— Version lisible par l'homme avec un contexte supplémentaire tel que des noms de code ou des types de versions

 Lorsque vous écrivez des scripts multiplateformes, utilisez toujours les champs lisibles par machine (`ID`,`VERSION_ID`,`ID_LIKE`) pour la logique et les décisions, et utilisez les champs lisibles par l'homme (`PRETTY_NAME`,`NAME`) uniquement pour afficher des informations aux utilisateurs. 

# Spécifique à Amazon Linux
<a name="ident-amazon-linux-specific"></a>

 Certains fichiers spécifiques à Amazon Linux peuvent être utilisés pour identifier Amazon Linux et sa version. Le nouveau code doit utiliser la [`/etc/os-release`](ident-os-release.md) norme afin d'être compatible avec les distributions croisées. L'utilisation de fichiers spécifiques à Amazon Linux est déconseillée. 

**Topics**
+ [le fichier `/etc/system-release` ;](#ident-system-release)
+ [Fichier d'identification d'image](#ident-image-id-file)
+ [Exemples de fichiers spécifiques à Amazon Linux](#ident-version-examples)

## le fichier `/etc/system-release` ;
<a name="ident-system-release"></a>

 Amazon Linux contient un fichier `/etc/system-release` qui spécifie la version actuelle qui est installée. Ce fichier est mis à jour à l'aide des gestionnaires de packages et sur Amazon, Linux fait partie du `system-release` package. Bien que certaines autres distributions comme Fedora aient également ce fichier, il n'est pas présent dans les distributions basées sur Debian comme Ubuntu. 

**Note**  
 Le `/etc/system-release` fichier contient une chaîne lisible par l'homme et ne doit pas être utilisé par programmation pour identifier un système d'exploitation ou une version. Utilisez plutôt les champs lisibles par machine `/etc/os-release` (ou `/usr/lib/os-release` s'ils `/etc/os-release` n'existent pas). 

 Amazon Linux contient également une version lisible par machine `/etc/system-release` qui suit la spécification CPE (Common Platform Enumeration) figurant dans le fichier. `/etc/system-release-cpe` 

## Fichier d'identification d'image
<a name="ident-image-id-file"></a>

 Chaque image Amazon Linux contient un `/etc/image-id` fichier unique qui fournit des informations supplémentaires sur l'image d'origine telle que générée par l'équipe Amazon Linux. Ce fichier est spécifique à Amazon Linux et ne se trouve pas dans d'autres distributions Linux telles que Debian, Ubuntu ou Fedora. Ce fichier contient les informations suivantes sur l’image : 
+ `image_name`,`image_version`, `image_arch` — Valeurs issues de la recette de construction utilisée pour créer l'image.
+ `image_stamp` — Valeur hexadécimale aléatoire unique qui a été générée pendant la création de l’image.
+ `image_date`— L'heure UTC de création de l'image, au *YYYYMMDDhhmmss*format.
+ `recipe_name`, `recipe_id` — Le nom et l'ID de la recette de construction utilisée pour créer l'image.

## Exemples de fichiers spécifiques à Amazon Linux
<a name="ident-version-examples"></a>

 Les sections suivantes fournissent des exemples de fichiers d'identification spécifiques à Amazon Linux pour chaque version majeure d'Amazon Linux. 

**Note**  
Dans n'importe quel code du monde réel, `/usr/lib/os-release` doit être utilisé si le `/etc/os-release` fichier n'existe pas.

### AL2023
<a name="ident-image-id-amazon-linux-2023"></a>

Les exemples suivants montrent les fichiers d'identification pour AL2 023.

Exemple de `/etc/image-id` pour AL2 023 :

```
[ec2-user ~]$ cat /etc/image-id
```

```
image_name="al2023-container"
image_version="2023"
image_arch="x86_64"
image_file="al2023-container-2023.8.20250721.2-x86_64"
image_stamp="822b-1a9e"
image_date="20250719211531"
recipe_name="al2023 container"
recipe_id="89b25f7b-be82-2215-a8eb-6e63-0830-94ea-658d41c4"
```

Exemple de `/etc/system-release` pour AL2 023 :

```
[ec2-user ~]$ cat /etc/system-release
```

```
Amazon Linux release 2023.8.20250721 (Amazon Linux)
```

### AL2
<a name="ident-image-id-amazon-linux-2"></a>

Les exemples suivants présentent les fichiers d'identification pour AL2.

Exemple de `/etc/image-id` pour AL2 :

```
[ec2-user ~]$ cat /etc/image-id
```

```
image_name="amzn2-container-raw"
image_version="2"
image_arch="x86_64"
image_file="amzn2-container-raw-2.0.20250721.2-x86_64"
image_stamp="4126-16ad"
image_date="20250721225801"
recipe_name="amzn2 container"
recipe_id="948422df-a4e6-5fc8-ba89-ef2e-0e1f-e1bb-16f84087"
```

Exemple de `/etc/system-release` pour AL2 :

```
[ec2-user ~]$ cat /etc/system-release
```

```
Amazon Linux release 2 (Karoo)
```

### AMI Amazon Linux
<a name="ident-image-id-amazon-linux-1"></a>

Les exemples suivants présentent les fichiers d'identification de l'AMI Amazon Linux.

Exemple d'AMI `/etc/image-id` pour Amazon Linux :

```
[ec2-user ~]$ cat /etc/image-id
```

```
image_name="amzn-container-minimal"
image_version="2018.03"
image_arch="x86_64"
image_file="amzn-container-minimal-2018.03.0.20231218.0-x86_64"
image_stamp="407d-5ef3"
image_date="20231218203210"
recipe_name="amzn container"
recipe_id="b1e7635e-14e3-dd57-b1ab-7351-edd0-d9e0-ca6852ea"
```

Exemple d'AMI `/etc/system-release` pour Amazon Linux :

```
[ec2-user ~]$ cat /etc/system-release
```

```
Amazon Linux AMI release 2018.03
```

# Exemple de code pour la détection du système d'exploitation
<a name="ident-example-code"></a>

 Les exemples suivants montrent comment détecter par programmation le système d'exploitation et sa version à l'aide du fichier `/etc/os-release` (ou `/usr/lib/os-release` s'il `/etc/os-release` n'existe pas). Ces exemples montrent comment faire la distinction entre Amazon Linux et les autres distributions, ainsi que comment utiliser le `ID_LIKE` champ pour déterminer les familles de distribution. 

 Le script ci-dessous est implémenté dans plusieurs langages de programmation différents, et chaque implémentation produira le même résultat. 

------
#### [ Shell ]

```
#!/bin/bash

# Function to get a specific field from os-release file
get_os_release_field() {
    local field="$1"
    local os_release_file
    
    # Find the os-release file
    if [ -f /etc/os-release ]; then
        os_release_file='/etc/os-release'
    elif [ -f /usr/lib/os-release ]; then
        os_release_file='/usr/lib/os-release'
    else
        echo "Error: os-release file not found" >&2
        return 1
    fi
    
    # Source the file in a subshell and return the requested field.
    #
    # A subshell means that variables from os-release are only available
    # within the subshell, and the main script environment remains clean.
    (
        . "$os_release_file"
        eval "echo \"\$$field\""
    )
}

is_amazon_linux() {
    [ "$(get_os_release_field ID)" = "amzn" ]
}

is_fedora() {
    [ "$(get_os_release_field ID)" = "fedora" ]
}

is_ubuntu() {
    [ "$(get_os_release_field ID)" = "ubuntu" ]
}

is_debian() {
    [ "$(get_os_release_field ID)" = "debian" ]
}

# Function to check if this is like Fedora (includes Amazon Linux, CentOS, RHEL, etc.)
is_like_fedora() {
    local id="$(get_os_release_field ID)"
    local id_like="$(get_os_release_field ID_LIKE)"
    [ "$id" = "fedora" ] || [[ "$id_like" == *"fedora"* ]]
}

# Function to check if this is like Debian (includes Ubuntu and derivatives)
is_like_debian() {
    local id="$(get_os_release_field ID)"
    local id_like="$(get_os_release_field ID_LIKE)"
    [ "$id" = "debian" ] || [[ "$id_like" == *"debian"* ]]
}

# Get the main fields we'll use multiple times
ID="$(get_os_release_field ID)"
VERSION_ID="$(get_os_release_field VERSION_ID)"
PRETTY_NAME="$(get_os_release_field PRETTY_NAME)"
ID_LIKE="$(get_os_release_field ID_LIKE)"

echo "Operating System Detection Results:"
echo "=================================="
echo "Is Amazon Linux: $(is_amazon_linux && echo YES || echo NO)"
echo "Is Fedora: $(is_fedora && echo YES || echo NO)"
echo "Is Ubuntu: $(is_ubuntu && echo YES || echo NO)"
echo "Is Debian: $(is_debian && echo YES || echo NO)"
echo "Is like Fedora: $(is_like_fedora && echo YES || echo NO)"
echo "Is like Debian: $(is_like_debian && echo YES || echo NO)"
echo
echo "Detailed OS Information:"
echo "======================="
echo "ID: $ID"
echo "VERSION_ID: $VERSION_ID"
echo "PRETTY_NAME: $PRETTY_NAME"
[ -n "$ID_LIKE" ] && echo "ID_LIKE: $ID_LIKE"

# Amazon Linux specific information
if is_amazon_linux; then
    echo ""
    echo "Amazon Linux Version Details:"
    echo "============================="
    case "$VERSION_ID" in
        2018.03)
            echo "Amazon Linux AMI (version 1)"
            ;;
        2)
            echo "Amazon Linux 2"
            ;;
        2023)
            echo "Amazon Linux 2023"
            ;;
        *)
            echo "Unknown Amazon Linux version: $VERSION_ID"
            ;;
    esac
    
    # Check for Amazon Linux specific files
    [ -f /etc/image-id ] && echo "Amazon Linux image-id file present"
fi
```

------
#### [ Python 3.7-3.9 ]

```
#!/usr/bin/env python3

import os
import sys

def parse_os_release():
    """Parse the os-release file and return a dictionary of key-value pairs."""
    os_release_data = {}
    
    # Try /etc/os-release first, then /usr/lib/os-release
    for path in ['/etc/os-release', '/usr/lib/os-release']:
        if os.path.exists(path):
            try:
                with open(path, 'r') as f:
                    for line in f:
                        line = line.strip()
                        if line and not line.startswith('#') and '=' in line:
                            key, value = line.split('=', 1)
                            # Remove quotes if present
                            value = value.strip('"\'')
                            os_release_data[key] = value
                return os_release_data
            except IOError:
                continue
    
    print("Error: os-release file not found")
    sys.exit(1)

def is_amazon_linux(os_data):
    """Check if this is Amazon Linux."""
    return os_data.get('ID') == 'amzn'

def is_fedora(os_data):
    """Check if this is Fedora."""
    return os_data.get('ID') == 'fedora'

def is_ubuntu(os_data):
    """Check if this is Ubuntu."""
    return os_data.get('ID') == 'ubuntu'

def is_debian(os_data):
    """Check if this is Debian."""
    return os_data.get('ID') == 'debian'

def is_like_fedora(os_data):
    """Check if this is like Fedora (includes Amazon Linux, CentOS, RHEL, etc.)."""
    if os_data.get('ID') == 'fedora':
        return True
    id_like = os_data.get('ID_LIKE', '')
    return 'fedora' in id_like

def is_like_debian(os_data):
    """Check if this is like Debian (includes Ubuntu and derivatives)."""
    if os_data.get('ID') == 'debian':
        return True
    id_like = os_data.get('ID_LIKE', '')
    return 'debian' in id_like

def main():
    # Parse os-release file
    os_data = parse_os_release()
    
    # Display results
    print("Operating System Detection Results:")
    print("==================================")
    print(f"Is Amazon Linux: {'YES' if is_amazon_linux(os_data) else 'NO'}")
    print(f"Is Fedora: {'YES' if is_fedora(os_data) else 'NO'}")
    print(f"Is Ubuntu: {'YES' if is_ubuntu(os_data) else 'NO'}")
    print(f"Is Debian: {'YES' if is_debian(os_data) else 'NO'}")
    print(f"Is like Fedora: {'YES' if is_like_fedora(os_data) else 'NO'}")
    print(f"Is like Debian: {'YES' if is_like_debian(os_data) else 'NO'}")
    
    # Additional information
    print()
    print("Detailed OS Information:")
    print("=======================")
    print(f"ID: {os_data.get('ID', '')}")
    print(f"VERSION_ID: {os_data.get('VERSION_ID', '')}")
    print(f"PRETTY_NAME: {os_data.get('PRETTY_NAME', '')}")
    if os_data.get('ID_LIKE'):
        print(f"ID_LIKE: {os_data.get('ID_LIKE')}")
    
    # Amazon Linux specific information
    if is_amazon_linux(os_data):
        print()
        print("Amazon Linux Version Details:")
        print("=============================")
        version_id = os_data.get('VERSION_ID', '')
        if version_id == '2018.03':
            print("Amazon Linux AMI (version 1)")
        elif version_id == '2':
            print("Amazon Linux 2")
        elif version_id == '2023':
            print("Amazon Linux 2023")
        else:
            print(f"Unknown Amazon Linux version: {version_id}")
        
        # Check for Amazon Linux specific files
        if os.path.exists('/etc/image-id'):
            print("Amazon Linux image-id file present")

if __name__ == '__main__':
    main()
```

------
#### [ Python 3.10\$1 ]

```
#!/usr/bin/env python3

import os
import sys
import platform

def is_amazon_linux(os_data):
    """Check if this is Amazon Linux."""
    return os_data.get('ID') == 'amzn'

def is_fedora(os_data):
    """Check if this is Fedora."""
    return os_data.get('ID') == 'fedora'

def is_ubuntu(os_data):
    """Check if this is Ubuntu."""
    return os_data.get('ID') == 'ubuntu'

def is_debian(os_data):
    """Check if this is Debian."""
    return os_data.get('ID') == 'debian'

def is_like_fedora(os_data):
    """Check if this is like Fedora (includes Amazon Linux, CentOS, RHEL, etc.)."""
    if os_data.get('ID') == 'fedora':
        return True
    id_like = os_data.get('ID_LIKE', '')
    return 'fedora' in id_like

def is_like_debian(os_data):
    """Check if this is like Debian (includes Ubuntu and derivatives)."""
    if os_data.get('ID') == 'debian':
        return True
    id_like = os_data.get('ID_LIKE', '')
    return 'debian' in id_like

def main():
    # Parse os-release file using the standard library function (Python 3.10+)
    try:
        os_data = platform.freedesktop_os_release()
    except OSError:
        print("Error: os-release file not found")
        sys.exit(1)
    
    # Display results
    print("Operating System Detection Results:")
    print("==================================")
    print(f"Is Amazon Linux: {'YES' if is_amazon_linux(os_data) else 'NO'}")
    print(f"Is Fedora: {'YES' if is_fedora(os_data) else 'NO'}")
    print(f"Is Ubuntu: {'YES' if is_ubuntu(os_data) else 'NO'}")
    print(f"Is Debian: {'YES' if is_debian(os_data) else 'NO'}")
    print(f"Is like Fedora: {'YES' if is_like_fedora(os_data) else 'NO'}")
    print(f"Is like Debian: {'YES' if is_like_debian(os_data) else 'NO'}")
    
    # Additional information
    print()
    print("Detailed OS Information:")
    print("=======================")
    print(f"ID: {os_data.get('ID', '')}")
    print(f"VERSION_ID: {os_data.get('VERSION_ID', '')}")
    print(f"PRETTY_NAME: {os_data.get('PRETTY_NAME', '')}")
    if os_data.get('ID_LIKE'):
        print(f"ID_LIKE: {os_data.get('ID_LIKE')}")
    
    # Amazon Linux specific information
    if is_amazon_linux(os_data):
        print()
        print("Amazon Linux Version Details:")
        print("=============================")
        version_id = os_data.get('VERSION_ID', '')
        if version_id == '2018.03':
            print("Amazon Linux AMI (version 1)")
        elif version_id == '2':
            print("Amazon Linux 2")
        elif version_id == '2023':
            print("Amazon Linux 2023")
        else:
            print(f"Unknown Amazon Linux version: {version_id}")
        
        # Check for Amazon Linux specific files
        if os.path.exists('/etc/image-id'):
            print("Amazon Linux image-id file present")

if __name__ == '__main__':
    main()
```

------
#### [ Perl ]

```
#!/usr/bin/env perl

use strict;
use warnings;

# Function to parse the os-release file and return a hash of key-value pairs
sub parse_os_release {
    my %os_release_data;
    
    # Try /etc/os-release first, then /usr/lib/os-release
    my @paths = ('/etc/os-release', '/usr/lib/os-release');
    
    for my $path (@paths) {
        if (-f $path) {
            if (open(my $fh, '<', $path)) {
                while (my $line = <$fh>) {
                    chomp $line;
                    next if $line =~ /^\s*$/ || $line =~ /^\s*#/;
                    
                    if ($line =~ /^([^=]+)=(.*)$/) {
                        my ($key, $value) = ($1, $2);
                        # Remove quotes if present
                        $value =~ s/^["']|["']$//g;
                        $os_release_data{$key} = $value;
                    }
                }
                close($fh);
                return %os_release_data;
            }
        }
    }
    
    die "Error: os-release file not found\n";
}

# Function to check if this is Amazon Linux
sub is_amazon_linux {
    my %os_data = @_;
    return ($os_data{ID} // '') eq 'amzn';
}

# Function to check if this is Fedora
sub is_fedora {
    my %os_data = @_;
    return ($os_data{ID} // '') eq 'fedora';
}

# Function to check if this is Ubuntu
sub is_ubuntu {
    my %os_data = @_;
    return ($os_data{ID} // '') eq 'ubuntu';
}

# Function to check if this is Debian
sub is_debian {
    my %os_data = @_;
    return ($os_data{ID} // '') eq 'debian';
}

# Function to check if this is like Fedora (includes Amazon Linux, CentOS, RHEL, etc.)
sub is_like_fedora {
    my %os_data = @_;
    return 1 if ($os_data{ID} // '') eq 'fedora';
    my $id_like = $os_data{ID_LIKE} // '';
    return $id_like =~ /fedora/;
}

# Function to check if this is like Debian (includes Ubuntu and derivatives)
sub is_like_debian {
    my %os_data = @_;
    return 1 if ($os_data{ID} // '') eq 'debian';
    my $id_like = $os_data{ID_LIKE} // '';
    return $id_like =~ /debian/;
}

# Main execution
my %os_data = parse_os_release();

# Display results
print "Operating System Detection Results:\n";
print "==================================\n";
print "Is Amazon Linux: " . (is_amazon_linux(%os_data) ? "YES" : "NO") . "\n";
print "Is Fedora: " . (is_fedora(%os_data) ? "YES" : "NO") . "\n";
print "Is Ubuntu: " . (is_ubuntu(%os_data) ? "YES" : "NO") . "\n";
print "Is Debian: " . (is_debian(%os_data) ? "YES" : "NO") . "\n";
print "Is like Fedora: " . (is_like_fedora(%os_data) ? "YES" : "NO") . "\n";
print "Is like Debian: " . (is_like_debian(%os_data) ? "YES" : "NO") . "\n";
print "\n";

# Additional information
print "Detailed OS Information:\n";
print "=======================\n";
print "ID: " . ($os_data{ID} // '') . "\n";
print "VERSION_ID: " . ($os_data{VERSION_ID} // '') . "\n";
print "PRETTY_NAME: " . ($os_data{PRETTY_NAME} // '') . "\n";
print "ID_LIKE: " . ($os_data{ID_LIKE} // '') . "\n" if $os_data{ID_LIKE};

# Amazon Linux specific information
if (is_amazon_linux(%os_data)) {
    print "\n";
    print "Amazon Linux Version Details:\n";
    print "=============================\n";
    my $version_id = $os_data{VERSION_ID} // '';
    
    if ($version_id eq '2018.03') {
        print "Amazon Linux AMI (version 1)\n";
    } elsif ($version_id eq '2') {
        print "Amazon Linux 2\n";
    } elsif ($version_id eq '2023') {
        print "Amazon Linux 2023\n";
    } else {
        print "Unknown Amazon Linux version: $version_id\n";
    }
    
    # Check for Amazon Linux specific files
    if (-f '/etc/image-id') {
        print "Amazon Linux image-id file present\n";
    }
}
```

------

 Lorsqu'il est exécuté sur différents systèmes, le script produit le résultat suivant : 

------
#### [ AL2023 ]

```
Operating System Detection Results:
==================================
Is Amazon Linux: YES
Is Fedora: NO
Is Ubuntu: NO
Is Debian: NO
Is like Fedora: YES
Is like Debian: NO

Detailed OS Information:
=======================
ID: amzn
VERSION_ID: 2023
PRETTY_NAME: Amazon Linux 2023.8.20250721
ID_LIKE: fedora

Amazon Linux Version Details:
=============================
Amazon Linux 2023
Amazon Linux image-id file present
```

------
#### [ AL2 ]

```
Operating System Detection Results:
==================================
Is Amazon Linux: YES
Is Fedora: NO
Is Ubuntu: NO
Is Debian: NO
Is like Fedora: YES
Is like Debian: NO

Detailed OS Information:
=======================
ID: amzn
VERSION_ID: 2
PRETTY_NAME: Amazon Linux 2
ID_LIKE: centos rhel fedora

Amazon Linux Version Details:
=============================
Amazon Linux 2
Amazon Linux image-id file present
```

------
#### [ Amazon Linux AMI ]

```
Operating System Detection Results:
==================================
Is Amazon Linux: YES
Is Fedora: NO
Is Ubuntu: NO
Is Debian: NO
Is like Fedora: YES
Is like Debian: NO

Detailed OS Information:
=======================
ID: amzn
VERSION_ID: 2018.03
PRETTY_NAME: Amazon Linux AMI 2018.03
ID_LIKE: rhel fedora

Amazon Linux Version Details:
=============================
Amazon Linux AMI (version 1)
Amazon Linux image-id file present
```

------
#### [ Ubuntu ]

```
Operating System Detection Results:
==================================
Is Amazon Linux: NO
Is Fedora: NO
Is Ubuntu: YES
Is Debian: NO
Is like Fedora: NO
Is like Debian: YES

Detailed OS Information:
=======================
ID: ubuntu
VERSION_ID: 24.04
PRETTY_NAME: Ubuntu 24.04.2 LTS
ID_LIKE: debian
```

------
#### [ Debian ]

```
Operating System Detection Results:
==================================
Is Amazon Linux: NO
Is Fedora: NO
Is Ubuntu: NO
Is Debian: YES
Is like Fedora: NO
Is like Debian: YES

Detailed OS Information:
=======================
ID: debian
VERSION_ID: 12
PRETTY_NAME: Debian GNU/Linux 12 (bookworm)
```

------
#### [ Fedora ]

```
Operating System Detection Results:
==================================
Is Amazon Linux: NO
Is Fedora: YES
Is Ubuntu: NO
Is Debian: NO
Is like Fedora: YES
Is like Debian: NO

Detailed OS Information:
=======================
ID: fedora
VERSION_ID: 42
PRETTY_NAME: Fedora Linux 42 (Container Image)
```

------