Kabuk betiğini kullanarak Linux Dağıtım adı nasıl bulunur?

Ben jenerik yapmak için geçerli işletim sistemi adı gereken bir kabuk komut dosyası yazıyorum. Sevmek:

if [ $Operating_System == "CentOS" ]
then
    echo "CentOS";
    # Do this
elif [ $Operating_System == "Ubuntu" ]
then
    echo "Ubuntu";
    # Do that
else
    echo "Unsupported Operating System";
fi

Bu nasıl mümkün olacak? Düzenli ifadeyi lsb_release -a komutuna veya başka bir şeye mi uyguluyorsunuz?

Teşekkürler..

5
veya lsb_release -ds
katma yazar Cyrus, kaynak
Yup - lsb-release kesinlikle bunu yapmanın en sağlam ve genel yoludur. ÖRNEK: lsb_release -d | awk '{print $ 2}' .
katma yazar FoggyDay, kaynak
lsb_release kutusunun dışında CENTOS7'de mevcut değil gibi görünüyor.
katma yazar Axel Werner, kaynak

7 cevap

$ lsb_release -i
Distributor ID: Fedora
$ lsb_release -i | cut -f 2-
Fedora
7
katma
veya lsb_release -is
katma yazar Cyrus, kaynak
Ancak, centos 7'de lsb_release yoktur.
katma yazar Mithril, kaynak
RHEL ve CentOS için manuel kurulum gereklidir.
katma yazar Pratik Patil, kaynak

lsb_release adresinden bilgi alabilirsiniz:

echo "$(lsb_release -is)"

i stands for distributor id.

s stands for short.

For ex. It shows Ubuntu instead of Distributor Id: Ubuntu

Başka seçenekler var:

-r: yayın

     

-d: açıklama

     

-c: kod adı

     

-a: hepsi

You can get this information by running lsb_release --help or man lsb_release

5
katma

I'd use uname -a

[email protected]:/tmp$ uname -a
Linux debian 3.2.0-4-686-pae #1 SMP Debian 3.2.65-1+deb7u2 i686 GNU/Linux
3
katma
DISTRO=$( cat /etc/*-release | tr [:upper:] [:lower:] | grep -Poi '(debian|ubuntu|red hat|centos|nameyourdistro)' | uniq )
if [ -z $DISTRO ]; then
    DISTRO='unknown'
fi
echo "Detected Linux distribution: $DISTRO"
1
katma

bunu dene:

awk '/^ID=/' /etc/*-release | awk -F'=' '{ print tolower($2) }'
1
katma

Hemen hemen tüm linux dağıtımları için, cat/etc/issue hile yapacak.

Düzenleme: Açıkçası, dağıtımlar, istedikleri gibi yapmak için ücretsiz olduğu için, tüm dağıtımlara uygulanamaz.

Daha fazla açıklama: Bu çalışmanın garanti edilemez - hiçbir şey - ama benim tecrübelerimde, bu çoğu zaman işe yarayan yöntemdir. Aslında, tutarlı bir şekilde çalışan sadece yöntemi ( lsb_release , burada belirtilmiştir, genellikle komutu bulunamadı ).

0
katma
Normalde /etc fedora-release veya bir şey-release dosyası bulunduğundan cat/etc/* kolaylığı yapıyorum./code>.
katma yazar fedorqui, kaynak
Özellikle,/etc/issue getty tarafından konsol girişinde görüntülenen bir metin dosyasıdır. Dağıtım hakkında hiçbir anlamlı bilgi içermesi garanti edilmez.
katma yazar duskwuff, kaynak
/ etc/issue, işletim sistemi hakkında bilgi depolamak için kullanılmaz ve yöneticinin beğendiği herhangi bir metin içerebilir. İşletim sistemini veya dağıtımını saptamak için asla güvenmem.
katma yazar Sami Kuhmonen, kaynak
güzel, bilmiyordum
katma yazar jaromrax, kaynak
Bu, güvenilir bir çözüm değildir, çünkü bunlar yöneticinin istediği şeyi koyması için dosyalardır.
katma yazar Axel Werner, kaynak

İşte aldığım şey:

#!/bin/bash

dist=$(tr -s ' \011' '\012' < /etc/issue | head -n 1)

check_arch=$(uname -m)

echo "[$green+$txtrst] Distribution Name: $dist"
0
katma