Uczę się podstaw pisania skryptów i próbuję napisać skrypt, aby zdecydować, jaki smak Linux ma uruchamiać. Opracowałem następującą prostą wersję:
#!/bin/sh
which yum >/dev/null && { echo Fedora flavour; exit 0; }
which zypper >/dev/null && { echo Suse of sorts; exit 0; }
which apt-get >/dev/null && { echo Debian based; }
Czy jest bardziej wdzięczny sposób, aby zdecydować, na którym smaku Linuxa używam? Czy istnieje sposób na włączenie Uniksa - lub uczynienie go generycznym dla Xnix?
Wielkie dzięki.
Edycja: nie jest to duplikat Jak rozpoznać używaną dystrybucję Linuksa? z następujących powodów: W przypadku Ubuntu cat /etc/lsb-release
działa jak urok, w przypadku RedHata tak nie jest.
ls /etc/*release
robi, ale wyświetla trzy foldery. cat /proc/version
wygląda obiecująco, ale potrzebuje magii wyrażeń regularnych.
/etc/lsb-release
będzie działać na dystrybucjach rodziny Red Hat, jeśli zainstalujesz pakiety LSB - ale my domyślnie nie.Odpowiedzi:
Próbowałem z:
Mam to także z Ubuntu i Centos.
źródło
less /etc/os-release | grep "^ID="
robi wszystko na wszystkich trzech. Dzięki. Zdecydowanie +1.Podzielę się kodem skryptu, który wykonuję, który obsługuje ponad 12 różnych systemów Linux i wykrywa, czy system jest oparty na uzbrojeniu. Na początku jest tablica, na której musisz umieścić obsługiwany system Linux. Ma dwie fazy. Pierwszym z nich jest przeszukanie słów w tablicy na podstawie wyniku polecenia uname. Drugim jest sprawdzenie specjalnej istniejącej w / etc, która zależy od dystrybucji.
Oczywiście można to poprawić ... może zmienić łańcuch „elif” na skrzynkę lub coś w tym rodzaju… ale to w pełni działa. Mam nadzieję, że ci to pomoże.
źródło
uname -a
polecenia Suse AWS i wydaje się też, że nie maSuSE-release
pliku w / etc. Aby to zmodyfikować, aby wykryć, że musisz sprawdzić, jaka jest nazwa pliku istniejącego w / etc i dodać „elif” o tej nazwie w fazie 2 wykrywania. W przypadku Red Hat chyba działa, ponieważ serwery Red Hat zawsze mająredhat-release
plik w / etc, prawda?/etc/redhat-release
ale uname -all nie zwraca nazwy / rodziny dystrybucji. Ani Suse. Zobacz poniżej: RHEL -Linux <servername> <xx.xx.xx>.20.1.el7.x86_64 #1 SMP Thu Sep 24 12:23:56 EDT 2015 x86_64 x86_64 x86_64 GNU/Linux
Suse -Linux ip-<xx.xx.xx.xx>.us-west-2.compute.internal 4.4.21-69-default #1 SMP Tue Oct 25 10:58:20 UTC 2016 (9464f67) x86_64 x86_64 x86_64 GNU/Linux
Ubuntu -Linux ip-<xx.xx.xx.xx> 4.4.0-53-generic #74-Ubuntu SMP Fri Dec 2 15:59:10 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Więc rozłączyłem się i po dniu kopania znalazłem to: http://linuxmafia.com/faq/Admin/release-files.html
Następnie praca / scalenie i testowanie następnego dnia zaowocowało uruchomieniem następującego skryptu, który został przetestowany
Jeśli ktoś z was ma sposób na sprawdzenie innych dystrybucji, byłbym bardzo zobowiązany.
źródło
Na współczesnych Fedorach i Debianie (oraz Arch, CentOS, CoreOS, Mageia, openSUSE, Red Hat Enterprise Linux, SUSE Linux Enterprise Server, Ubuntu i inne) najłatwiej jest spojrzeć na
/etc/os-release
lub uruchomićhostnamectl status
.W skrypcie możesz po prostu zrobić
Oczywiście, jeśli chcesz zidentyfikować również stare wersje lub niesystemowe dystrybucje, możesz po prostu zacząć od powyższego, ale jeśli
/etc/os-release
nie istnieje, przejdź do dalszej heurystyki.Aby uzyskać więcej informacji, zobacz Wykrywanie nazwy i wersji dystrybucji systemu Linux w dokumentacji przepełnienia stosu.
źródło