GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso ottenere il nome della distribuzione e il numero di versione in un semplice script di shell?

Per ottenere OS e VER , lo standard più recente sembra essere /etc/os-release .Prima c'era lsb_release e /etc/lsb-release . Prima di allora, dovevi cercare file diversi per ogni distribuzione.

Ecco cosa suggerirei

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

Penso uname per ottenere ARCH è ancora il modo migliore. Ma l'esempio che hai fornito ovviamente gestisce solo i sistemi Intel. Lo chiamerei BITS come questo:

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

Oppure cambia ARCH per essere le versioni più comuni, ma non ambigue:x86 e x64 o simile:

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

ma ovviamente dipende da te.


Vorrei procedere con questo come primo passo:

ls /etc/*release

Gentoo, RedHat, Arch e SuSE hanno un file chiamato ad es. /etc/gentoo-release . Sembra essere popolare, controlla questo sito sui file di rilascio.

Debian e Ubuntu dovrebbero avere un /etc/lsb-release che contiene anche informazioni sulla versione e verrà visualizzato con il comando precedente.

Un altro veloce è uname -rv . Se il kernel installato è il kernel della distribuzione standard, solitamente a volte trova il nome lì dentro.


lsb_release -a . Funziona su Debian e immagino Ubuntu, ma non sono sicuro del resto. Normalmente dovrebbe esistere in tutte le distribuzioni GNU/Linux poiché è correlato a LSB (Linux Standard Base).


Linux
  1. Come ottenere il nome della distribuzione e il numero di versione in un semplice script di shell?

  2. Come ottenere l'indirizzo IP esterno in uno script di shell?

  3. Come si ftp e si scaricano file da uno script di shell UNIX

  4. Come ottenere il nome dell'attuale ramo git in una variabile in uno script di shell?

  5. Come ottenere il PID dal processo figlio biforcuto nello script della shell

Come creare ed eseguire uno script di shell in Debian 10

Come creare ed eseguire uno script di shell in CentOS 8

Come trovare il nome e la versione della versione della distribuzione Linux

Come creare ed eseguire uno script di shell in Ubuntu 22.04

Come posso sapere quale versione di Linux sto usando?

Come posso ottenere in modo affidabile il nome del sistema operativo?