GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu získat název distribuce a číslo verze v jednoduchém skriptu shellu?

Chcete-li získat OS a VER , nejnovější standard se zdá být /etc/os-release .Předtím zde bylo lsb_release a /etc/lsb-release . Předtím jste museli hledat různé soubory pro každou distribuci.

Zde je to, co bych navrhoval

if [ -f /etc/os-release ]; then
    # freedesktop.org and systemd
    . /etc/os-release
    OS=$NAME
    VER=$VERSION_ID
elif type lsb_release >/dev/null 2>&1; then
    # linuxbase.org
    OS=$(lsb_release -si)
    VER=$(lsb_release -sr)
elif [ -f /etc/lsb-release ]; then
    # For some versions of Debian/Ubuntu without lsb_release command
    . /etc/lsb-release
    OS=$DISTRIB_ID
    VER=$DISTRIB_RELEASE
elif [ -f /etc/debian_version ]; then
    # Older Debian/Ubuntu/etc.
    OS=Debian
    VER=$(cat /etc/debian_version)
elif [ -f /etc/SuSe-release ]; then
    # Older SuSE/etc.
    ...
elif [ -f /etc/redhat-release ]; then
    # Older Red Hat, CentOS, etc.
    ...
else
    # Fall back to uname, e.g. "Linux <version>", also works for BSD, etc.
    OS=$(uname -s)
    VER=$(uname -r)
fi

Myslím, že uname získat ARCH je stále nejlepší způsob. Ale příklad, který jste uvedl, se zjevně zabývá pouze systémy Intel. Buď bych to nazval BITS takhle:

case $(uname -m) in
x86_64)
    BITS=64
    ;;
i*86)
    BITS=32
    ;;
*)
    BITS=?
    ;;
esac

Nebo změňte ARCH být běžnější, přesto jednoznačné verze:x86 a x64 nebo podobně:

case $(uname -m) in
x86_64)
    ARCH=x64  # or AMD64 or Intel64 or whatever
    ;;
i*86)
    ARCH=x86  # or IA32 or Intel32 or whatever
    ;;
*)
    # leave ARCH as-is
    ;;
esac

ale to je samozřejmě na vás.


Jako první krok bych použil toto:

ls /etc/*release

Gentoo, RedHat, Arch &SuSE mají soubor nazvaný např. /etc/gentoo-release . Zdá se, že je populární, podívejte se na tento web o souborech vydání.

Debian a Ubuntu by měly mít /etc/lsb-release který obsahuje také informace o vydání a zobrazí se s předchozím příkazem.

Další rychlý je uname -rv . Pokud je nainstalovaným jádrem skladové distro jádro, obvykle někdy tam najdete jméno.


lsb_release -a . Funguje na Debianu a tuším Ubuntu, ale u zbytku si nejsem jistý. Normálně by měl existovat ve všech distribucích GNU/Linux, protože souvisí s LSB (Linux Standard Base).


Linux
  1. Jak získat název aktuální větve git do proměnné v shell skriptu?

  2. Jak získat PID z rozvětveného podřízeného procesu ve skriptu shellu

  3. Jak najdu svou verzi shellu pomocí příkazu Linux?

  1. Jak mohu získat svou externí IP adresu v shell skriptu?

  2. Jak zjistím, jakou verzi Linuxu používám?

  3. Jak mohu spolehlivě získat název operačního systému?

  1. Jak porovnávat čísla a řetězce ve skriptu Linux Shell

  2. Jak najít verzi Ubuntu, kódové jméno a architekturu OS v Shell Script

  3. Jak získat vlastní IP adresu a uložit ji do proměnné ve skriptu Shell?