Ubuntu dağıtımının tam kod adını nasıl alabilirim?


33
$ 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"

Yukarıdaki komutların çıktısı yalnızca kısmi kod adını gösterir (örn trusty.). Kurulu Ubuntu sistemimin tam kod adını ( güvenilir tahr ) nasıl edinebilirim ?


1
Dosyanın kaynaklanması için yakınsak bir süreç var gibi görünüyor /etc/os-release. Belki de neyi kastettiğinizi belirtmelisiniz Kurulu Ubuntu sistemimin tam kod adını (güvenilir tahr) nasıl alabilirim? . Sadece terminalde yankılanmak mı istiyorsunuz yoksa bir değişkene atanması mı gerekiyor? Bu, bazı {Ubuntu, Debian} olmayan sistemlerde kullanılacak mı?
gniourf_gniourf

Yanıtlar:


43

Harici araç kullanmamak:

Sadece kaynak yapabilirsiniz (kaynak komut bir noktadır .) /etc/os-releaseve burada tanımlanan tüm değişkenlere erişebilirsiniz:

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

Düzenle. 14.04,Parçayı çıkarmak istiyorsanız (terdon tarafından istendiği gibi):

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

Bunun biraz dağınık olduğuna dikkat edin, çünkü diğer dağıtımlarda VERSIONalan farklı biçimlerde olabilir. Örneğin, debianımda

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

Ardından, böyle bir şeyi hayal edebilirsiniz (bir komut dosyasında):

#!/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

1
(eko olduğunu bu nasıl Tamam yerleşik) ama: . /etc/os-release && echo ${VERSION//[0-9,. ]/ }?
terdon

1
@terdon, bir kedinin ciltlenmesinin birden fazla yolu vardır ;D.
gniourf_gniourf

Buradaki tüm yorumlara ne oldu?
gniourf_gniourf

2
Çok var ve seninki de özellikle iyi biri! Asıl cevapla ilgisi olmayan yorumlar, uyarı yapılmadan silinebilir.
terdon

8

Sunulan teklif hakkındaki varyantım:

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

Bugüne kadarki en kısa, Bashiest cevabı.

/etc/os-releaseİçeriğini mevcut ortamınıza yüklemek istemiyorsanız, kolayca bir komut dosyası yüklediğini düşünerek bash'ı sahte yapabilirsiniz:

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

3
Bugüne kadar herhangi bir şeyden daha bashier demeye ne dersin ? Burada başka tam bash cevapları var :D.
gniourf_gniourf

Neden aşağı oy? bu iyi bir cevap (daha önce verilenlerden kavramsal olarak farklı bir şey olmasa da).
gniourf_gniourf

2
Heh, işlem ikameinin akıllıca kullanımı, +1.
terdon

usta @terdon dan beklediğim gibi :)
Rinzwind

1
Basit bir altkabuk yanı işi yapardı: ( . /etc/os-release && echo ${VERSION/*, /} ).
gniourf_gniourf

5

grep:

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

Açıklama:

  • lsb_release -rs -> Kurulu Ubuntu versiyonunu yazdırır.

  • grep $(lsb_release -rs) /usr/share/python-apt/templates/Ubuntu.info -> Sürüm sürümünüzü içeren tüm satırları alın, benim durumumda bu 14.04.

  • grep -m 1 "Description: Ubuntu "-> Yine, yalnızca -mdizeyi içeren eşleşen ilk satırı ( bayrak nedeniyle ) alır Description: Ubuntu.

  • cut -d "'" -f2 -> sınırlayıcı tekli alıntıya göre 2 numaralı alanı yazdırır '

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

Açıklama:

Awk değişkenini bildirme ve atama -vparametresi ile yapılır. Bu nedenle lsb_release -rs komutun değeri varinturn 4 alanını yazdırmaya yardımcı olan değişkene atanır , satırlardan alan 5 dizeyi içerir 14.04ve eğer bir tane bulunursa var cutolur. tek tırnakları kaldırın.


4

Aradığınız komut şudur:

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

Bu çok çirkin ve optimize edilmiş değil. Eminim daha kolay bir yöntem olmalı ve bunun da bazı sorunları var.


1
. /etc/os-release 
echo $VERSION

3
Numaraları yine de silmeniz gerekir, bkz. @ Gniourf_gniourf'in cevapları tamamen aynı yaklaşımı kullanan.
terdon

1

İşte biraz daha fazla seçenek. Hepsi /etc/os-release, benim 13.10'da şu şekilde görünen dosyayı ayrıştırıyor :

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/"

Aşağıdaki çözümlerin tümü üretilecek ikinci satırı ayrıştırır Saucy Salamander.

  1. grep

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

    -oAraç ve "hattının sadece eşleştirme kısmını yazdırmak" -PPerl Uyumlu Düzenli İfadeler sağlar. Bu bize kullanmanızı sağlar \Kkombine o noktaya, kadar eşleşmiş ne varsa atar hangi -oyollarla "ile eşleşir yalnızca ne yazdırmak sonra\K . So içeren bir satırın son iki kelimeyle eşleşir kullanılan gerçek düzenli ifade VERSION=.

  2. awk

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

    İçin alanlar ayırıcı ayarlanması "ve spaceiçerikli çizgi 3d ve 4rth alanlar demekse VERSION=biz peşinde dize vardır.

  3. sed

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

    -nAnahtarın bastırır normal çıkış, bir hat yazdırılacaktır. -rNormal ifadeler genişletilmiş verir. Ardından eşleşen satırlarda VERSION=, son iki sözcük dışındaki her şeyi sileceğiz. pUç araçları yazdırıp.

  4. perl

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

    -nAnlamına gelen 'süreç tarafından verilen komut ile her giriş hattı -e". -lHer baskı çağrısı (ve relevevant burada değil başka şeyler) için bir satır karakteri ekler. Düzenli ifade ile eşleşen son iki kelime ( \bbir kelime sınırıdır) ve çizgi varsa bunları yazdırır VERSION=.

  5. coreutils

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

    Burada, sadece grepilgili satırı kullanıyoruz cutve alan ayırıcıyı space( -d ' ') olarak ayarlamak ve 2. alandan satırın sonuna kadar her şeyi yazdırmak için kullanıyoruz. tr -dKomut silecektir "ucundan.

  6. Saf kabuk (utanmadan @ gniourf_gniourf'un akıllı sourcefikrini çalmak ):

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

    .Kaynaklar kabuk ve ben kullanım bash en değişkenleri kullanılabilir hale getirir dosya dize manipülasyon yetenekleri sürüm numaraları kaldırmak için.


1

Regex kullanarak bunu yapabilirsiniz:

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

Açıklama:

Bu VERSIONdosyadaki satırı arar /etc/os-release. Sonra bir boşlukla ayrılmış 2 kelime bulur (Perl regex). -O bayrağı yalnızca aramaya uygun olanı tutar.

[a-zA-Z]Rakamları dahil etmekten kaçınmak için `w` yerine kullanmanız gerekir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.