¿Cómo puedo saber qué versión de Linux estoy ejecutando?

209

¿Hay alguna manera de determinar qué versión (distribución y versión del núcleo, supongo) de Linux se está ejecutando (desde la línea de comandos), que funciona en cualquier sistema Linux?

Daryl Spitzer
fuente

Respuestas:

267

El núcleo se detecta universalmente con uname:

$ uname -or
2.6.18-128.el5 GNU/Linux

Realmente no hay una forma de distribución cruzada para determinar en qué distribución y versión estás. Ha habido intentos de hacer esto consistente, pero finalmente varía, desafortunadamente. Las herramientas LSB proporcionan esta información, pero, irónicamente, no están instaladas de forma predeterminada en todas partes. Ejemplo en un sistema Ubuntu 9.04 con el lsb-releasepaquete instalado:

$ lsb_release -irc
Distributor ID: Ubuntu
Release:        9.04
Codename:       jaunty

De lo contrario, el método más ampliamente disponible es verificar archivos. Estos existen en la mayoría de las plataformas comunes y en sus derivados (es decir, Red Hat y CentOS)./etc/something-release

Aquí hay unos ejemplos.

Ubuntu tiene /etc/lsb-release:

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=9.04
DISTRIB_CODENAME=jaunty
DISTRIB_DESCRIPTION="Ubuntu 9.04"

Pero Debian tiene /etc/debian_version:

$ cat /etc/debian_version
5.0.2

Fedora, Red Hat y CentOS tienen:

Fedora: $ cat /etc/fedora-release
Fedora release 10 (Cambridge)

Red Hat/older CentOS: $ cat /etc/redhat-release
CentOS release 5.3 (Final)

newer CentOS: $ cat /etc/centos-release
CentOS Linux release 7.1.1503 (Core)

Gentoo

$ cat /etc/gentoo-release
Gentoo Base System release 1.12.11.1

No tengo un sistema SUSE disponible en este momento, pero creo que sí /etc/SuSE-release.

Slackware tiene /etc/slackware-releasey / o /etc/slackware-version.

Mandriva tiene /etc/mandriva-release.

Para la mayoría de las distribuciones populares entonces,

$ cat /etc/*{release,version}

con mayor frecuencia funcionará. Las instalaciones de "servidor" simplificadas y simples pueden no tener instalado el paquete 'release' para la distribución.

Además, dos programas de terceros que puede utilizar para obtener automáticamente esta información son Ohai y Facter .

Tenga en cuenta que muchas distribuciones tienen este tipo de información en /etc/issueo /etc/motd, pero algunas políticas de seguridad y mejores prácticas indican que estos archivos deben contener pancartas de notificación de acceso.

Relacionado: ¿Cómo encontrar la versión del paquete de software instalado en el nodo? , .

jtimberman
fuente
3
Lol aquí estaba pensando en sugerir: ¡busca Acerca de!
Ivo Flipse
2
Slackware tiene / etc / slackware-version
Ken Keenan
Gracias Ken, tampoco tengo un sistema slackware.
jtimberman
44
OIA: ls / etc / * {versión, la versión} y examinar lo que viene de vuelta ...
Freiheit
1
La mayoría también tiene / etc / issue
Drew Stephens
41

También puedes probar:

$ cat /etc/issue

Sin embargo, generalmente (no siempre) le dirá qué distribución está utilizando. /etc/issuees el archivo utilizado para la pantalla de inicio de sesión.

Pablo Santa Cruz
fuente
2
Este es el único que lo logró en un servidor compartido de Media Temple. ¡¡Gracias!!
Try TryAgain
2
Ja, en RedHat, eso es solo\S[newline]Kernel \r on an \m
ruffin
20

Núcleo: uname -a

raspi
fuente
+1. Para sistemas similares, como MinGW , se requiere "-a" para obtener la información de la versión, por ejemplo, "MINGW32_NT-5.1 LAP065 1.0.17 (0.48 / 3/2) 2011-04-24 23:39 i686 Msys".
Peter Mortensen
15
cat /etc/os-release

como mínimo para Ubuntu, Fedora y OpenSUSE.

No funciona para OS X al menos hasta 10.9 (Mavericks). Utilice sw_vers en su lugar.

OpenSUSE tenía cat / etc / SuSE-release hasta 13.1 pero está en desuso a favor de os-release.

Redhat 6.1 tiene cat / etc / redhat-release

sweetfa
fuente
14

lsb_release -a, cuando esté disponible, es útil.

CesarB
fuente
12

cat /proc/version me encontró Red Hat en un VPS compartido.

iono
fuente
6

Núcleo: uname -r

Distro: lsb_release -a

Estos se ejecutarán en la mayoría de los sistemas Linux

Albert Z.
fuente
5

Un trazador de líneas

lsb_release -a && uname -r
Serge Stroobandt
fuente
1
Esto podría ser más apropiado como un comentario sobre la respuesta de Albert Z.
Fixer1234
1
respuesta poderosa para concluir todas las respuestas! Debo votar por el esfuerzo :)
B.Kocis
1

Este problema también se puede resolver usando Python con el platformmódulo :

Usando la platform()función:

python -c 'import platform; print platform.platform()'
# Linux-4.9.0-8-amd64-x86_64-with-debian-9.6

El comando anterior devuelve una sola cadena que identifica la plataforma subyacente con tanta información útil como sea posible.

O usando la uname()función:

python -c 'import platform; print platform.uname()'
# ('Linux', 'debian', '4.9.0-8-amd64', '#1 SMP Debian 4.9.130-2 (2018-10-27)', 'x86_64', '')

El comando anterior devuelve un namedtuple()contengan seis atributos: system, node, release, version, machine, y processor.

O usando la dist()función:

python -c 'import platform; print platform.dist()'
# ('debian', '9.6', '')

El último comando intenta determinar el nombre de la distribución del sistema operativo Linux , pero está en desuso desde Python 3.5 y se eliminará en Python 3.8 .

simhumileco
fuente