GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo puedo obtener el nombre de distribución y el número de versión en un script de shell simple?

Para obtener OS y VER , el último estándar parece ser /etc/os-release .Antes de eso, había lsb_release y /etc/lsb-release . Antes de eso, tenías que buscar diferentes archivos para cada distribución.

Esto es lo que sugeriría

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

Creo que uname para obtener ARCH sigue siendo la mejor manera. Pero el ejemplo que diste obviamente solo maneja sistemas Intel. Yo lo llamaría BITS así:

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

O cambia ARCH para ser las versiones más comunes, pero inequívocas:x86 y x64 o similar:

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

pero, por supuesto, eso depende de ti.


Iría con esto como primer paso:

ls /etc/*release

Gentoo, RedHat, Arch y SuSE tienen un archivo llamado p. /etc/gentoo-release . Parece ser popular, consulte este sitio sobre archivos de lanzamiento.

Debian y Ubuntu deberían tener un /etc/lsb-release que también contiene información de lanzamiento y se mostrará con el comando anterior.

Otro rápido es uname -rv . Si el kernel instalado es el kernel de distribución estándar, normalmente a veces encuentra el nombre allí.


lsb_release -a . Funciona en Debian y supongo que en Ubuntu, pero no estoy seguro del resto. Normalmente debería existir en todas las distribuciones GNU/Linux ya que está relacionado con LSB (Linux Standard Base).


Linux
  1. Cómo encontrar la versión de Ubuntu, el nombre en clave y la arquitectura del sistema operativo en Shell Script

  2. ¿Cómo obtener la dirección IP propia y guardarla en una variable en un script de Shell?

  3. ¿Cómo obtener el nombre y la versión de la distribución de Linux?

  4. Cómo obtener PID del proceso secundario bifurcado en el script de shell

  5. ¿Cómo puedo obtener mi dirección IP externa en un script de shell?

Cómo crear y ejecutar un script de Shell en Debian 10

Cómo crear y ejecutar un script de Shell en CentOS 8

Cómo encontrar el nombre y la versión de la versión de distribución de Linux

Cómo crear y ejecutar un script de shell en Ubuntu 22.04

¿Cómo puedo obtener de forma fiable el nombre del sistema operativo?

¿Cómo obtener el pid de un proceso e invocar kill -9 en el script de shell?