GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo puedo saber qué versión de Linux se está ejecutando?

Solución 1:

No hay forma de distribución cruzada. Sin embargo:

  • Redhat y amigos:prueba para /etc/redhat-release , comprobar contenidos
  • Debian:prueba para /etc/debian_version , comprobar contenidos
  • Mandriva y amigos:prueba para /etc/version , comprobar contenidos
  • Slackware:prueba para /etc/slackware-version , comprobar contenidos

Etc. En términos generales, busque /etc/*-release y /etc/*-version .

Editar:Encontré un script bash antiguo (más de 1 año) por ahí que debo haber improvisado a lo largo de los años (tiene un impresionante registro de CVS que se remonta a 6 años). Es posible que ya no funcione correctamente tal como está y puedo No se moleste en encontrar distribuciones instaladas para probar, pero debería proporcionarle un buen punto de partida. Funciona bien en CentOS, Fedora y Gentoo. gyaresu lo probó con éxito en Debian Lenny.

#!/bin/bash

get_distribution_type()
{
    local dtype
    # Assume unknown
    dtype="unknown"

    # First test against Fedora / RHEL / CentOS / generic Redhat derivative
    if [ -r /etc/rc.d/init.d/functions ]; then
        source /etc/rc.d/init.d/functions
        [ zz`type -t passed 2>/dev/null` == "zzfunction" ] && dtype="redhat"

    # Then test against SUSE (must be after Redhat,
    # I've seen rc.status on Ubuntu I think? TODO: Recheck that)
    elif [ -r /etc/rc.status ]; then
        source /etc/rc.status
        [ zz`type -t rc_reset 2>/dev/null` == "zzfunction" ] && dtype="suse"

    # Then test against Debian, Ubuntu and friends
    elif [ -r /lib/lsb/init-functions ]; then
        source /lib/lsb/init-functions
        [ zz`type -t log_begin_msg 2>/dev/null` == "zzfunction" ] && dtype="debian"

    # Then test against Gentoo
    elif [ -r /etc/init.d/functions.sh ]; then
        source /etc/init.d/functions.sh
        [ zz`type -t ebegin 2>/dev/null` == "zzfunction" ] && dtype="gentoo"

    # For Slackware we currently just test if /etc/slackware-version exists
    # and isn't empty (TODO: Find a better way :)
    elif [ -s /etc/slackware-version ]; then
        dtype="slackware"
    fi
    echo $dtype
}

Tenga en cuenta que esto probablemente solo funcionará correctamente en Bash. Podrías reescribirlo para otros shells.

Dicho esto, es posible que desee probar las funciones, no las distribuciones. Ya no uso esto simplemente porque se convirtió en una carga de mantenimiento. Es más fácil confiar en las herramientas y soluciones de distribución cruzada.

Conceptualmente, lo que hace es, en orden:

  • Acceda a un tipo de archivo conocido de "función de secuencia de comandos de inicio común". Esos son específicos de la distribución. Si no existe, pase a la siguiente verificación de distribución.
  • Verifique la existencia de una función específica, que se sabe que existe, que se usa con frecuencia y que es poco probable que cambie de nombre de esa secuencia de comandos principal. Hacemos eso usando el type Bash incorporado. type -t devuelve function si ese símbolo es una función. Anteponemos zz a la salida de type -t 2>/dev/null porque si el nombre no está definido, la cadena de salida estaría vacía y obtendríamos un error de sintaxis sobre la falta de la mano izquierda en el == operador. Si el nombre que acabamos de verificar no es una función, pase a la siguiente verificación de distribución; de lo contrario, encontramos el tipo de distribución.
  • Finalmente, haga eco del tipo de distribución para que la salida de la función se pueda usar fácilmente en un bloque case .. esac.

Edite en caso de que intente ejecutar esto como una secuencia de comandos directa:se supone que esta secuencia de comandos se obtiene o se incluye desde otras secuencias de comandos. No genera nada por sí solo si lo ejecuta tal como está. Para probarlo, consígalo y luego invoque la función, por ejemplo:

source /path/to/this/script.sh
get_distribution_type

en el aviso de bash.

Editar:tenga en cuenta que este script no requiere privilegios de root. Le insto a que no lo ejecute como root. No debería dañar nada, pero no es necesario.

Encontré un enlace a una publicación de lista de correo relevante en el registro de CVS. Debería ser útil para desenvolver los espaguetis del script de inicio.

Solución 2:

No intente hacer suposiciones basadas en la distribución en cuanto a lo que puede y no puede hacer, porque de esa manera es una locura (consulte también "Detección de agente de usuario"). En su lugar, detecte si lo que desea hacer es compatible y cómo lo hace el comando o la ubicación del archivo que desea usar.

Por ejemplo, si desea instalar un paquete, puede detectar si está en un sistema similar a Debian o un sistema similar a RedHat verificando la existencia de dpkg o rpm (verifique primero si hay dpkg, porque las máquinas Debian pueden tener el comando rpm en ellos...). Tome su decisión sobre qué hacer basándose en eso, no solo en si es un sistema Debian o RedHat. De esa manera, admitirá automáticamente cualquier distribución derivada que no programó explícitamente. Ah, y si su paquete requiere dependencias específicas, pruébelas también y dígale al usuario lo que se está perdiendo.

Otro ejemplo es jugar con las interfaces de red. Averigüe qué hacer en función de si hay un archivo /etc/network/interfaces o un directorio /etc/sysconfig/network-scripts, y vaya desde allí.

Sí, es más trabajo, pero a menos que desee rehacer todos los errores que los desarrolladores web han cometido durante la última década o más, lo hará de manera inteligente desde el principio.

Solución 3:

Puede encontrar la versión del kernel ejecutando uname -a , encontrar la versión de distribución depende de la distribución.

En Ubuntu y algunos otros sistemas operativos, puede ejecutar lsb_release -a o lea /etc/lsb_release

Debian almacena la versión en /etc/debian_version

Solución 4:

La mayoría de las distribuciones tienen un método único para determinar la distribución particular.

Por ejemplo:

Redhat (And derivatives): /etc/redhat-release

SUSE: /etc/SUSE-release

Existe un estándar conocido como Linux Standard Base o LSB. Define que debe haber un archivo llamado /etc/lsb-release o un programa llamado lsb_release que devolverá información sobre su distribución de Linux.

lsb_release -a

Solución 5:

python -c 'import platform ; print platform.dist()[0]'

código:http://hg.python.org/cpython/file/2.7/Lib/platform.py


Linux
  1. Cómo verificar la versión del Kernel en Linux

  2. Linux:¿cómo averiguar qué discos duros hay en el sistema?

  3. Cómo comprobar la versión de MySQL en Linux

  4. Cómo verificar la versión de su sistema operativo Linux

  5. ¿Cómo verificar la versión de Linux X11?

Cómo verificar la versión del kernel en Linux

Cómo averiguar la versión del kernel de Linux que se ejecuta en su PC

Cómo saber cuánto tiempo ha estado ejecutándose un proceso en Linux

Cómo comprobar qué versión del kernel de Linux estoy ejecutando

Cómo encontrar qué versión de Linux está ejecutando

Cómo comprobar la versión de PHP en Linux