Comment obtenir le nom complet du code de la distribution Ubuntu?

27
$ lsb_release -c
Codename:   trusty

$ cat /etc/issue
Ubuntu 14.04 LTS \n \l

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04 LTS"

Les sorties des commandes ci-dessus ne montrent que le nom de code partiel (c.-à-d. trusty ). Comment puis-je obtenir le nom de code complet ( trusty tahr ) de mon système Ubuntu installé?

    
posée Avinash Raj 19.04.2014 - 06:27
la source

7 réponses

37

Sans outils externes:

Vous pouvez juste source (la commande source est un point . ) le /etc/os-release et vous aurez accès à toutes les variables définies ici:

$ . /etc/os-release
$ echo "$VERSION"
14.04, Trusty Tahr

Modifier. Si vous souhaitez supprimer la partie 14.04, (comme demandé par terdon), vous pouvez:

$ . /etc/os-release
$ read _ UBUNTU_VERSION_NAME <<< "$VERSION"
$ echo "$UBUNTU_VERSION_NAME"
Trusty Tahr

Notez que c'est un peu maladroit, car sur d'autres distributions, le champ VERSION peut avoir un format différent. Par exemple, sur mon debian,

$ . /etc/os-release
$ read _ UBUNTU_VERSION_NAME <<< "$VERSION"
$ echo "$UBUNTU_VERSION_NAME"
(wheezy)

Ensuite, vous pouvez imaginer quelque chose comme ça (dans un script):

#!/bin/bash

if [[ -r /etc/os-release ]]; then
    . /etc/os-release
    if [[ $ID = ubuntu ]]; then
        read _ UBUNTU_VERSION_NAME <<< "$VERSION"
        echo "Running Ubuntu $UBUNTU_VERSION_NAME"
    else
        echo "Not running an Ubuntu distribution. ID=$ID, VERSION=$VERSION"
    fi
else
    echo "Not running a distribution with /etc/os-release available"
fi
    
réponse donnée gniourf_gniourf 19.04.2014 - 12:41
la source
7

Ma variante sur ce qui est déjà offert:

. /etc/os-release; echo ${VERSION/*, /}

La réponse Bashiest la plus courte à ce jour.

Si vous ne voulez pas charger le contenu de /etc/os-release dans votre environnement actuel, vous pouvez simuler le chargement d'un script assez facilement:

bash <(cat /etc/os-release; echo 'echo ${VERSION/*, /}')
    
réponse donnée Oli 19.04.2014 - 13:17
la source
5

Grep:

$ grep $(lsb_release -rs) /usr/share/python-apt/templates/Ubuntu.info | grep -m 1 "Description: Ubuntu " | cut -d "'" -f2
Trusty Tahr

Explication:

  • lsb_release -rs - & gt; Imprime votre version d'Ubuntu installée.

  • grep $(lsb_release -rs) /usr/share/python-apt/templates/Ubuntu.info - & gt; Prenez toutes les lignes qui contiennent votre version de version, dans mon cas c'est 14.04.

  • grep -m 1 "Description: Ubuntu " - & gt; Encore une fois, ne saisit que la première ligne correspondante (à cause de -m flag) qui contient la chaîne Description: Ubuntu .

  • cut -d "'" -f2 - & gt; imprime le numéro de champ 2 selon le guillemet simple '

Awk:

$ awk -v var=$(lsb_release -rs) '~var {print " ";exit;}' /usr/share/python-apt/templates/Ubuntu.info | cut -d"'" -f2
Trusty Tahr

Explication:

Déclarer et attribuer la variable dans awk se fait via le paramètre -v . Si la valeur de la commande lsb_release -rs est affectée à la variable var qui aide à imprimer le champ 4, le champ 5 des lignes contient la chaîne 14.04 et existe si on en trouve un. Enfin, la commande cut permet de supprimer les guillemets simples.

    
réponse donnée Avinash Raj 19.04.2014 - 06:27
la source
3

La commande que vous recherchez est la suivante:

grep -oP '(?<=VERSION\=\"(\d\d)\.(\d\d)\,\ )(.*?)(?="$)' /etc/os-release

Ceci est très laid et non optimisé. Je suis sûr qu'il devrait y avoir une méthode plus facile et que cela pose des problèmes.

    
réponse donnée Braiam 19.04.2014 - 06:38
la source
1
. /etc/os-release 
echo $VERSION
    
réponse donnée MegaBrutal 19.04.2014 - 12:55
la source
1

Voici quelques autres choix. Ils analysent tous le fichier /etc/os-release qui, le 13.10, ressemble à ceci:

NAME="Ubuntu"
VERSION="13.10, Saucy Salamander"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 13.10"
VERSION_ID="13.10"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"

Toutes les solutions ci-dessous analyseront la deuxième ligne pour produire Saucy Salamander .

  1. grep

    grep -oP 'VERSION=.* \K\w* \w*' /etc/os-release
    

    -o signifie "imprimer uniquement la partie correspondante de la ligne" et -P active les expressions régulières compatibles avec Perl. Cela nous permet d'utiliser \K qui rejette tout ce qui a été mis en correspondance jusqu'à présent, ce qui, combiné avec -o , signifie "n'imprimer que ce qui correspond à après le \K . faire correspondre les deux derniers mots d'une ligne contenant VERSION= .

  2. awk

    awk -F'[" ]' '/VERSION=/{print ,}'  /etc/os-release
    

    Définir le séparateur de champs sur " et space signifie que les champs 3d et 4 de la ligne contenant VERSION= sont la chaîne que nous recherchons.

  3. sed

    sed -nr '/VERSION=/{s/.* (\w* \w*)"//;p}' /etc/os-release
    

    Le commutateur -n supprime la sortie normale, aucune ligne ne sera imprimée. Le -r permet des expressions régulières étendues. Ensuite, sur les lignes qui correspondent à VERSION= , nous supprimerons tout sauf les deux derniers mots. Le p à la fin signifie impression.

  4. perl

    perl -lne '/VERSION=.*\b(\w+ \w+)/ && print ' /etc/os-release
    

    Le -n signifie «traiter chaque ligne d'entrée avec le script donné par -e ". Le -l ajoute un caractère de nouvelle ligne à chaque appel d'impression (et d'autres éléments non pertinents ici). correspond aux deux derniers mots ( \b est une limite de mot) et les affiche si la ligne contient VERSION= .

  5. coreutils

    grep VERSION= /etc/os-release | cut -d ' ' -f 2-  | tr -d '"' 
    

    Ici, nous nous contentons de grep la ligne concernée et utilisons cut pour définir le séparateur de champs sur space ( -d ' ' ) et tout imprimer du deuxième champ à la fin de la ligne. La commande tr -d supprime le " de la fin.

  6. Coque pure (voler sans vergogne l’idée source de @gniourf_gniourf):

    . /etc/os-release && echo ${VERSION//[0-9,. ]/ }
    

    Le . source le fichier qui rend les variables disponibles pour le shell et j'utilise les bash capacités de manipulation de chaînes pour supprimer les numéros de version.

réponse donnée terdon 19.04.2014 - 12:27
la source
0

En utilisant regex, vous pouvez le faire:

grep 'VERSION' /etc/os-release | grep -oP "[a-zA-Z]+ [a-zA-Z]+"

Explication:

Ceci recherche la ligne avec VERSION dans le fichier /etc/os-release . Ensuite, il trouve 2 mots successifs séparés par un espace (expression rationnelle Perl). Le drapeau -o conserve uniquement ce qui correspond à la recherche.

Vous devez utiliser [a-zA-Z] au lieu de 'w' pour éviter d'inclure des chiffres.

    
réponse donnée Romain Vincent 29.10.2017 - 22:34
la source

Lire d'autres questions sur les étiquettes