Как получить полное кодовое имя дистрибутива 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"

Вывод вышеприведенных команд показывает только частичное кодовое имя (т. Е. trusty). Как получить полное кодовое имя ( trusty tahr ) моей установленной системы Ubuntu?

33
задан 19 April 2014 в 17:05

8 ответов

Используя никакие внешние инструменты:

Вы можете всего источник (исходная команда является точкой .), /etc/os-release, и у Вас будет доступ ко всем переменным определенным там:

$ . /etc/os-release
$ echo "$VERSION"
14.04, Trusty Tahr
<час>

Редактирование. , Если Вы хотите удалить 14.04, часть (как спрошено terdon), Вы могли:

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

Примечание, что это немного неуклюже, с тех пор на других дистрибутивах, VERSION поле, может иметь другой формат. Например, на моем debian,

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

Затем Вы могли вообразить что-то вроде этого (в сценарии):

#!/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
0
ответ дан 19 April 2014 в 17:05

Мой вариант на том, что уже предложено:

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

самое короткое, отвечают Bashiest до настоящего времени.

, Если Вы не хотите загрузиться /etc/os-release содержание в Вашу текущую среду, можно фальсифицировать удар в размышление, что это загружает сценарий довольно легко:

bash <(cat /etc/os-release; echo 'echo ${VERSION/*, /}')
0
ответ дан 19 April 2014 в 17:05

Grep:

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

Объяснение:

  • lsb_release -rs -> Печатает Вашу установленную версию Ubuntu.

  • grep $(lsb_release -rs) /usr/share/python-apt/templates/Ubuntu.info -> Захватывают все строки, который содержит Вашу версию выпуска, в моем случае это 14.04.

  • grep -m 1 "Description: Ubuntu " -> Снова захватывает только подобранную первую строку (из-за -m флаг), который содержит строку Description: Ubuntu.

  • cut -d "'" -f2 -> печатает поле номер 2 согласно одинарной кавычке разделителя '

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

Объяснение:

Объявление и присвоение Переменной в awk сделаны через -v параметр. Так значение lsb_release -rs команда присвоена переменной var какой внутренний изгиб помогает распечатать поле 4, поле 5 от строк содержат строку 14.04 и существует если его найденный тот. Наконец cut команда помогает удалить одинарные кавычки.

5
ответ дан 19 April 2014 в 17:05

Команда, которую Вы ищете:

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

Это очень ужасно и не оптимизированное. Я уверен, что должен быть более легкий метод, и это имеет некоторые проблемы.

0
ответ дан 19 April 2014 в 17:05
. /etc/os-release 
echo $VERSION
0
ответ дан 19 April 2014 в 17:05

Вот еще некоторые варианты. Они все анализируют /etc/os-release файл, который, на моих 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/"

Все решения ниже проанализируют вторую строку для создания Saucy Salamander.

  1. grep

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

    -o означает "печать только часть соответствия строки" и -P включает Perl Совместимые Регулярные выражения. Это позволяет нам использовать \K который отбрасывает то, что было подобрано до той точки, которая объединилась с -o означает "печать только что соответствия после \K. Так, фактическое используемое регулярное выражение распознает последние два слова строки, которая содержит VERSION=.

  2. awk

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

    Установка разделителя полей к " и space средства, что 3-е и 4rth поля строки, содержащей VERSION= строка, которая мы после.

  3. sed

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

    -n переключатель подавляет нормальный вывод, никакие строки не будут распечатаны. -r позволяет расширенные регулярные выражения. Затем на строках то соответствие VERSION=, мы удалим все кроме последних двух слов. p в конце означает печать.

  4. perl

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

    -n означает, 'обрабатывают каждую входную строку со сценарием, данным -e". -l добавляет символ новой строки к каждому вызову печати (и некоторый другой материал, который не является relevevant здесь). Регулярное выражение распознает последние два слова (\b граница слова), и печатает их, если строка содержит VERSION=.

  5. coreutils

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

    Здесь, мы просто grep соответствующая строка и использование cut установка разделителя полей к space (-d ' ') и печать всего от 2-го поля в конец строки. tr -d команда удалит " от конца.

  6. Чистая оболочка (бесстыдно крадущий умный @gniourf_gniourf source идея):

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

    . получает файл, который делает переменные доступными для оболочки, и я использую возможности обработки строк удара удалить номера версий.

1
ответ дан 19 April 2014 в 17:05

Используя regex Вы могли сделать это:

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

Объяснение:

Это ищет строку с VERSION в файле /etc/os-release. Затем это находит 2 последовательных слова разделенными пространством (Perl regex). Флаг-o сохраняет только, что соответствует поиску.

Необходимо использовать [a-zA-Z] вместо 'w' для предотвращения включая цифры.

1
ответ дан 23 November 2019 в 00:33

Ответ актуален как минимум для ubuntu 16.04 и выше:

lsb_release -cs

Если по какой-то причине lsb_release недоступен

cat /etc/os-release | grep UBUNTU_CODENAME | cut -d = -f 2
4
ответ дан 18 December 2019 в 15:21

Другие вопросы по тегам:

Похожие вопросы: