A veces es necesario determinar rápidamente detalles como el nombre del kernel, la versión, el nombre de host, etc. de la caja de Linux que está utilizando.
Aunque puede encontrar todos estos detalles en los archivos respectivos presentes en el sistema de archivos proc, es más fácil usar la utilidad uname para obtener esta información rápidamente.
La sintaxis básica del comando uname es:
uname [OPTION]...
Ahora veamos algunos ejemplos que demuestran el uso del comando 'uname'.
uname sin ninguna opción
Cuando el comando 'uname' se ejecuta sin ninguna opción, imprime solo el nombre del kernel. Entonces, el resultado a continuación muestra que es el kernel 'Linux' el que usa este sistema.
$ uname Linux
También puede usar uname -s, que también muestra el nombre del núcleo.
$ uname -s Linux
Obtenga el nombre de host del nodo de red usando la opción -n
Use la opción uname -n para obtener el nombre de host del nodo de red de su caja de Linux.
$ uname -n dev-server
El resultado anterior será el mismo que el resultado del comando hostname.
Obtenga la versión del kernel usando la opción -r
El comando uname también se puede usar para obtener la información de lanzamiento del kernel. La opción -r puede usarse para este propósito.
$ uname -r 2.6.32-100.28.5.el6.x86_64
Obtenga la versión del kernel usando la opción -v
El comando uname también se puede usar para obtener la información de la versión del kernel. La opción -v puede usarse para este propósito.
$ uname -v #1 SMP Wed Feb 2 18:40:23 EST 2011
Obtenga el nombre del hardware de la máquina usando la opción -m
El comando uname también se puede usar para obtener el nombre del hardware de la máquina. La opción -m se puede utilizar para este propósito. Esto indica que es un sistema de 64 bits.
$ uname -m x86_64
Obtenga el tipo de procesador usando la opción -p
El comando uname también se puede usar para obtener la información del tipo de procesador. La opción -p puede usarse para este propósito. Si el comando uname no puede obtener la información del tipo de procesador, entonces produce "desconocido" en la salida.
$ uname -p x86_64
A veces, es posible que vea "desconocido" como resultado de este comando, si uname no pudo obtener la información sobre el tipo de procesador.
Obtenga la plataforma de hardware usando la opción -i
El comando uname también se puede usar para obtener la información de la plataforma de hardware. La opción -i puede usarse para este propósito. Si el comando uname no puede obtener la información de la plataforma de hardware, entonces produce "desconocido" en la salida.
$ uname -i x86_64
A veces, es posible que vea "desconocido" como resultado de este comando, si uname no pudo obtener la información sobre la plataforma.
Obtenga el nombre del sistema operativo usando la opción -o
El comando uname también se puede usar para obtener el nombre del sistema operativo. La opción -o puede usarse para este propósito.
Por ejemplo:
$ uname -o GNU/Linux
Obtenga toda la información usando uname -a opción
Toda la información a la que hasta ahora hemos aprendido a acceder usando diferentes banderas se puede obtener de una sola vez. La opción -a se puede utilizar para este propósito.
$ uname -a Linux dev-server 2.6.32-100.28.5.el6.x86_64 #1 SMP Wed Feb 2 18:40:23 EST 2011 x86_64 x86_64 x86_64 GNU/Linux
Valor desconocido en la salida uname
Mientras escribía este artículo, tenía un poco de curiosidad por saber por qué la utilidad uname devuelve "desconocido" para el tipo de procesador (-p) y la plataforma de hardware (-i) en mi computadora portátil que ejecuta Ubuntu. Investigué un poco sobre este tema.
Una explicación que encontré fue que el comando uname usa la función uname() (man 2 uname) que lee toda la información de la siguiente estructura del kernel:
struct utsname { char sysname[]; /* Operating system name (e.g., "Linux") */ char nodename[]; /* Name within "some implementation-defined network" */ char release[]; /* OS release (e.g., "2.6.28") */ char version[]; /* OS version */ char machine[]; /* Hardware identifier */ #ifdef _GNU_SOURCE char domainname[]; /* NIS or YP domain name */ #endif };
Dado que la información sobre el tipo de procesador y la plataforma de hardware no está presente en esta estructura, el comando uname devuelve "desconocido" para ellos.
La otra explicación que encontré fue que dentro de uname.c el manejo de la opción -p es como:
... ... ... char const *element = unknown; #if HAVE_SYSINFO && defined SI_ARCHITECTURE { static char processor[257]; if (0 <= sysinfo (SI_ARCHITECTURE, processor, sizeof processor)) element = processor; } #endif ... ... ...
Las macros HAVE_SYSINFO y SI_ARCHITECTURE no están definidas en ninguna parte del kernel y, por lo tanto, se devuelve unknown. Lo mismo podría ser cierto para la opción -i.
No estoy seguro del problema exacto, pero podemos asumir con seguridad que las opciones -p e -i no son estándar y simplemente extensiones y, por lo tanto, deben evitarse al usar el comando uname en un script.