web-dev-qa-db-fra.com

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

$ 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'est-à-dire trustyname__). Comment obtenir le nom de code complet (trusty tahr) de mon système Ubuntu installé?

33
Avinash Raj

Ne pas utiliser d'outils externes:

Vous pouvez simplement 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

Edit. 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 ceci 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 ceci (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
43
gniourf_gniourf

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

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

La réponse la plus courte et la plus modeste à ce jour.

Si vous ne vous souciez pas de charger le contenu de /etc/os-release dans votre environnement actuel, vous pouvez simuler bash en pensant qu'il est en train de charger un script assez facilement:

bash <(cat /etc/os-release; echo 'echo ${VERSION/*, /}')
8
Oli

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 -> Imprime la version de votre Ubuntu installée.

  • grep $(lsb_release -rs) /usr/share/python-apt/templates/Ubuntu.info -> Saisissez toutes les lignes contenant votre version, dans mon cas, il s'agit de 14.04.

  • grep -m 1 "Description: Ubuntu " -> Encore une fois, saisit uniquement la première ligne correspondante (en raison de l'indicateur -m) qui contient la chaîne Description: Ubuntu.

  • cut -d "'" -f2 -> imprime le champ numéro 2 selon le délimiteur guillemet simple '

Awk:

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

Explication:

La déclaration et l'affectation de variable dans awk sont effectuées à l'aide du paramètre -v.Pour que la valeur de la commande lsb_release -rs soit affectée à la variable var qui, à son tour, aide à imprimer le champ 4, le champ 5 des lignes contient la chaîne 14.04 et existe si elle a été trouvée. la commande cut permet de supprimer les guillemets simples.

5
Avinash Raj

La commande que vous recherchez est:

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

C'est très moche et non optimisé. Je suis sûr qu'il devrait y avoir une méthode plus facile et cela a quelques problèmes.

4
Braiam

En utilisant regex, vous pouvez faire ceci:

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 ne garde que ce qui correspond à la recherche.

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

1
Romain Vincent

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

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 générer Saucy Salamander.

  1. grepname__

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

    -o signifie "n'imprimer que la partie correspondante de la ligne" et -P active les expressions régulières compatibles Perl. Cela nous permet d’utiliser \K qui supprime tout ce qui a été mis en correspondance jusqu’à ce point, ce qui, combiné à -o signifie "affiche uniquement ce qui correspond après le \K. L’expression régulière utilisée correspond aux deux derniers mots d’une ligne contenant VERSION=.

  2. awkname__

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

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

  3. sedname__

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

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

  4. Perlname__

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

    -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 à imprimer (et quelques autres éléments qui ne sont pas pertinents ici). L'expression régulière correspond aux deux derniers mots (\b est un 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 ne faisons que grepla ligne pertinente et utilisons cuten définissant le séparateur de champ sur space(-d ' ') et en imprimant le tout, du deuxième champ à la fin de la ligne. La commande tr -d supprimera le " de la fin.

  6. Pure Shell (voler sans vergogne l'idée géniale de sourcede @ gniourf_gniourf):

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

    Le . source le fichier qui met les variables à la disposition du shell et j'utilise les bash capacités de manipulation de chaîne pour supprimer les numéros de version.

1
terdon
. /etc/os-release 
echo $VERSION
1
MegaBrutal