¿De dónde uname -isaca la información?
¿Existen los detalles en /etc/?
¿Existen los detalles en /proc/?
Si es así, ¿a qué archivo hace referencia para generar esos detalles?
command-line
kernel
Roy Hernández
fuente
fuente

Respuestas:
unameusa la llamadauname(2)al sistema para obtener la información relacionada con el núcleo que muestra.La sinopsis es:
donde
uname(2)devuelve información en la estructura señalada porbuf. También se puede leer el archivo de cabecerautsname.hde/usr/include/"$(arch)"-linux-gnu/sys/utsname.hcavar más profundo.Echa un vistazo
man 2 unamepara tener más idea sobre esto.fuente
locate --regex '^/usr/include/.*/sys/utsname.h$'?uname -ila salida esx86_64. Cuando ejecutolocate --regex '^/usr/include/.*/sys/utsname.h$'la salida vuelve/usr/include/x86_64-linux-gnu/sys/utsname.hEl programa
stracenos permite ver las llamadas al sistema que puede hacer una aplicación. Conuname -aque es evidente que las únicasopenllamadas van a las bibliotecas del sistema, por lo que técnicamente no hay ningún archivo en el sistema de archivos que launameabre para la lectura. Más bien realiza llamadas al sistema utilizando las bibliotecas C.Como heemayl señaló correctamente, existe una llamada sys para recuperar la información almacenada en la
unameestructura. Es la página de manual, sugiere lo siguiente:/procsin embargo, el sistema de archivos es virtual, lo que significa que existe solo mientras el sistema operativo se está ejecutando. Por lo tanto, hasta cierto punto, se establece dentro del núcleo o las bibliotecas del sistema.Finalmente, leyendo el código fuente del
uname.ccual se puede obtenerapt-get source coreutils, podemos ver que de hecho usa lautsname.hbiblioteca (impresa con números de línea):stracesalida:fuente
uname.c, no necesariamente necesita usar una biblioteca para eso; podemos mirar el código fuente, por supuesto, para estar seguros.machine.hmachine.hparece estar salpicada en todo el sistema. ¿En quémachine.harchivo se basa?machine.hen mi sistema parecen estar en el/usr/src/linux-headers-3.19.0-33directorio. Es muy probable que use la biblioteca proporcionada por el núcleo actualmente en ejecuciónPor supuesto, la respuesta de heemayl es correcta.
Solo por diversión, aquí hay un fragmento de C en funcionamiento que muestra los datos devueltos por
uname()(una especie de caserounamesi lo desea): compílelogcc uname.c -o unamey ejecútelo con./uname:fuente
printf("%\n", utsname.machine);saca la información?utsname, que se rellena durante la llamada auname(). El ejemplo probablemente no sea demasiado sencillo para alguien sin los conceptos básicos de C, pero aquí está más o menos lo que sucede: se declara unstruct(tipo de datos C) de tipoutsnamellamadoutsname(tipo definido en<sys/utsname.h>); luegoutsname_ptrse declara un puntero al nombre (ya queuname()acepta un puntero a unstructtipoutsnamecomo argumento, aunque esto podría haberse evitado en este caso, pero esa es otra historia).uname()tiene el efecto de llenar la estructurautsname, que en el momento de laprintf()llamada contiene los diversos valores dentro de los diversos campos. Desafortunadamente, si no está familiarizado con C, esto probablemente no será fácil de comprender en detalle, pero el punto es queuname()puebla una estructura de datos construida a propósito, cuyos campos se imprimen más tardeprintf().Como una adición a la respuesta de heemayl, puede obtener información como en el
unamecomando/proc/version.fuente