Znam polecenia, aby sprawdzić nazwę maszyny Linux działającej na moim komputerze. Na przykład:
Ubuntu
cat /etc/version
CentOS
cat /etc/issue
Jak uzyskać dane wyjściowe z terminala i porównać, czy jest to UBUNTU lub CENTOS i wykonać następujące polecenia?
apt-get install updates
lub
yum update
Ubuntu 14.04
cat /etc/issue
command-line
bash
scripts
shekhar
źródło
źródło
Odpowiedzi:
Niestety nie ma niezawodnego, prostego sposobu na uzyskanie nazwy dystrybucji. Większość głównych dystrybutorów zmierza w kierunku systemu, w którym
/etc/os-release
przechowują te informacje. Większość współczesnych dystrybucji zawiera równieżlsb_release
narzędzia, ale nie zawsze są one instalowane domyślnie. Oto kilka podejść, których możesz użyć:Posługiwać się
/etc/os-release
Użyj
lsb_release
narzędzi, jeśli są dostępneUżyj bardziej złożonego skryptu, który powinien działać dla większości dystrybucji:
Analiza informacji o wersji,
gcc
jeśli jest zainstalowana:CentOS 5.x
CentOS 6.x
Ubuntu 12.04
Ubuntu 14.04
Zostało to w zasadzie skopiowane bezpośrednio z doskonałej odpowiedzi @ slm na moje pytanie tutaj .
źródło
<—
W ogóle tak nie jest. Na przykład Sylvain Pineau wykazał, że trywialny linijka niezawodnie odpytuje bieżący typ platformy, odraczając do Pythona - który jest fabrycznie zainstalowany na większości platform (w tym Ubuntu). Skrypty powłoki nigdy nie powinny próbować ręcznie sprawdzać metadanych platformy za pomocą niskopoziomowych, nieprzenośnych testów tego rodzaju zaimplementowanych w tej odpowiedzi.awk
albomawk
albo ay inna realizacja będzie działać tak samo dobrze.lsb_release
:lsb_release -d | awk -F"\t" '{print $2}' | awk -F " " '{print $1}'
lsb_release -d | awk '{print $3}'
lubgrep -oP 'VERSION="\K\S+' /etc/os-release
nie potrzebujesz podwójnej rury do awk.Nie potrzebujesz basha, aby wykonać takie zadanie, i sugeruję zastosowanie podejścia wysokiego poziomu, aby uniknąć radzenia sobie z plikami takimi jak
/etc/version
i/etc/issue
(nie mam wersji / etc / w wersji 13.10).Dlatego zalecam użycie tego polecenia:
moduł platformy python będzie działał w obu systemach, reszta polecenia sprawdzi, czy Ubuntu jest zwracane przez python i uruchomi się w
apt-get
inny sposóbyum
.źródło
-i
dogrep
może pomóc.Oto prosta odpowiedź, która według mnie działa we wszystkich wersjach Ubuntu / CentOS / RHEL przez samą obecność plików (oczywiście nie jest to bezpieczne, jeśli ktoś losowo upuszcza / etc / redhat-release na twoje pudełka Ubuntu itp.):
źródło
/etc/lsb-release
istnieje na CloudLinux (CentOS) 6.8, więc zwróci obayum
iapt-get
.Do tych zadań używaj szefa kuchni ;-)
W Chef możesz użyć
platform?
metody:Lub:
Lub:
Lub:
źródło
lsb_release
,/etc/os-release
), to rozwiązanie ma wyraźną wadę, że wymaga Chef - w dużej gramaturze infrastruktury jako kod (Iac) ramy nie domyślnie zainstalowana większość platform i wymagające użycia własny język specyficzny dla domeny (DSL). Krótko mówiąc, większość użytkowników prawdopodobnie po prostu chce odroczyć Python , który jest domyślnie instalowany na większości platform (w tym Ubuntu) i dobrze współpracuje ze skryptami powłoki.Sprawdź Ubuntu w nazwie jądra:
źródło
jeśli są tylko dwie dystrybucje, możesz je skrócić:
w jakiś sposób
yum -v
zwraca wartość niezerową w CentOS, więc użyjwhich
zamiast tego,oczywiście powinieneś rozważyć scenariusz, jeśli nie jest
which
zainstalowany.źródło
Poniższy skrypt powinien powiedzieć, czy to Ubuntu. Jeśli tak nie jest, a jedyną dostępną opcją jest CentOS, powinieneś mieć ją w
else
klauzuli:źródło
lsb_release
narzędzia, które powinno odczytać te same pliki.lsb_release -i
Raporty alboDistributor ID: Ubuntu
czyDistributor ID: CentOS
w tych przypadkach.Wykonaj
/etc/os-release
w podpowłoce i wyświetl jej wartość:źródło
Chciałbym użyć Pythona
źródło
Użycie tego polecenia działa w CentOS, Ubuntu i Debian:
grep "^NAME=" /etc/os-release |cut -d "=" -f 2 | sed -e 's/^"//' -e 's/"$//'
W Debianie daje
Debian GNU/Linux
, w Ubuntu daje,Ubuntu
aw CentOS dajeCentOS Linux
.Korzyści z używania grep, cut i sed zamiast gawk są oczywiste: Debian nie ma domyślnie zainstalowanego gawk, więc nie możesz polegać na losowym pudełku Debiana.
źródło