Cómo aprender más sobre el kernel de Linux desde su propia máquina



Pruebe Nuestro Instrumento Para Eliminar Los Problemas

Aprender a trabajar con GNU / Linux generalmente implica aprender a trabajar con un entorno de escritorio. La tecnología de temas permite que estos entornos de escritorio imiten las interfaces de los dispositivos iOS, Microsoft Windows y OS X. Esto ayuda a minimizar esto por así decirlo. Mucha gente va más allá y aprende la administración de la línea de comandos de Unix con los shells Bash o tcsh. Sin embargo, conocer los aspectos internos del kernel de Linux puede ayudarlo a comprender mejor cómo interactúan las diferentes piezas de código de operación entre sí.



Algunas personas argumentarían que sería mejor ir varios pasos más allá y aprender además cómo los compiladores transmutan el código C en instructores de máquina para un microprocesador. Los defensores del código ensamblador argumentarían que es mejor aprender ASM para comprender realmente la programación en las plataformas x86 y x86_64. Independientemente de estas posiciones, los comandos básicos de Linux pueden proporcionar una gran cantidad de información sobre cómo ve el kernel su computadora. Aprender a través de un paradigma de mirar pero no tocar es una excelente manera de dominar el núcleo en sí. Si bien se usó la cuenta raíz para los ejemplos de esta página, se recomienda encarecidamente que solo vea los directorios vinculados al kernel a través de una cuenta de usuario.



Método 1: el directorio / proc

El directorio / proc se encuentra en una de las regiones principales del directorio raíz de nivel superior en cualquier estructura de archivos Unix. Contiene lo que se llama el sistema de archivos proc, más conocido como procfs, que contiene información sobre la forma en que los diferentes recursos acceden a la memoria del kernel. Se asigna a / proc en el momento en que se inicia el sistema. Dado que esta estructura de archivos proxy sirve como una interfaz para la estructura de datos interna dentro del kernel de Linux, una vez más, es mejor explorar esto a través de una cuenta de usuario. La mayoría de los archivos se clasifican según la estructura de archivos del sistema visible como de solo lectura de todos modos, pero es mejor estar en el lado seguro.



Dicho esto, cada uno de estos es un archivo de texto, por lo que puede verlos si lo desea. Use el comando cd para ingresar al directorio / proc y luego emita ls para ver lo que hay allí. Utilice el comando gato, menos o más con cualquiera de los archivos para mirarlos. El archivo cpuinfo es un buen lugar para comenzar, ya que muestra cómo el kernel ve su microprocesador. Mire el archivo de estadísticas para ver los procesos en ejecución.

2016-11-25_020006

Escribir dispositivos para gatos le permitirá ver qué cosas están conectadas a su máquina.



2016-11-25_020109

Por cierto, siempre puede ejecutar el comando man proc para obtener un resumen de cómo se relaciona la estructura del archivo / proc con el kernel. La página mostrada proviene del Manual del programador de Linux.

2016-11-25_020156

Método 2: el directorio / sys

Su próxima parada en el recorrido por su kernel es / sys, que es otro directorio asignado a una estructura de archivo ficticia. Esto sigue el mismo concepto general de Unix que / proc, pero en su lugar exporta activamente información sobre las unidades de dispositivo asociadas y una serie de subsistemas del kernel. Si alguna vez ha trabajado con un sistema basado en BSD, es posible que esté más familiarizado con sysctl que proporciona estas funciones. Los dispositivos de bus PCI, USB y S / 390 se asignan al directorio / sys.

Use cd / sys para dirigirse al directorio y luego emita el comando ls o dir. Es posible que tenga directorios titulados block, class, devices, fs, kernel y tal vez otros. Puede explorarlos para obtener más archivos planos que contengan información sobre el sistema, pero una vez más, hágalo desde una cuenta de usuario y eche un vistazo, pero sin tocar la mentalidad sobre usted mismo.

Método 3: el directorio / dev

Utilice el comando cd / dev para dirigirse al directorio / dev, que podría ser la única estructura virtual del kernel con la que ya está más familiarizado. El nombre significa dispositivos y contiene una representación de archivos de los dispositivos conectados a su sistema. Un comando ls en este directorio devolverá muchos archivos incluso en la distribución de servidor más simple.

2016-11-25_020242

Algunos de estos son muy especiales. El archivo / dev / null es un dispositivo nulo que no hace nada. Si escribe cat / dev / null, no obtendrá nada. Se llama cubo de bits y la salida se puede redirigir a él para mantener limpia la pantalla. Un archivo llamado / dev / zero no contiene nada más que datos cero, que se pueden escribir en un disco para ponerlos a cero. Los archivos aleatorios y urandom contienen datos basura aleatorios para crear hashes de seguridad.

Si alguna vez ha formateado un disco, entonces probablemente tenga al menos algo de experiencia con la forma en que el kernel de Linux los ve. Cada disco conectado al sistema recibe un nombre como sda, sdb, etc. para cada disco. Los diferentes tipos de discos reciben diferentes nombres. Tenga en cuenta que el directorio / dev utiliza una posible definición formal informática de disco en lugar de la forma en que normalmente usamos ese término. Esto significa que un disco duro, un SSD, una tarjeta SD, una tarjeta microSDHC, un sistema de archivos de teléfono inteligente montado conectado a través de USB, memorias USB e incluso tabletas montadas son todos discos para el kernel.

Cada nombre de disco en Linux recibe luego un número que indica un número de partición. Si tenía un SSD con dos particiones principales, entonces podría tener / dev / sda1 y / dev / sda2 como volúmenes válidos. Lo más probable es que si está ejecutando Linux desde una computadora de escritorio o computadora portátil con particiones de estilo MBR, entonces tiene / dev / sda1 configurado en la partición ext4 que realmente tiene Linux instalado. Lo más probable es que / dev / sda2 sea una partición extendida que luego contenga / dev / sda5 como partición de intercambio. Este esquema es común, pero de ninguna manera necesario. Tenga en cuenta que dado que la partición de intercambio en este ejemplo común es un disco lógico dentro de una partición extendida, recibe 5 en lugar de 3 como su número.

Si desea obtener más información sobre la forma en que el kernel ve y formatea las particiones, puede ver una lista de particiones compatibles con el comando fdisk. Mientras fdisk no escribe tablas de partición hasta que usted se lo indique, es mejor intentar esto con algo que no le interese brindar. Se recomienda apuntarlo a algo como una memoria USB en blanco que podría reformatear fácilmente.

Supongamos que su bastón aparece como / dev / sdc , entonces podrías usar sudo fdisk / dev / sdc para cargarlo. Si tiene una partición válida en ella, escriba t para cambiar el tipo y escriba L para cargar una lista de códigos hexadecimales. Tenga en cuenta que los esquemas de partición MBR y GUID se comunican con el kernel de manera diferente y, por lo tanto, tienen asignaciones diferentes.

2016-11-25_020331

La mayoría de las veces, tendrá unidades configuradas en el tipo 83, que es para unidades Linux, 82, que es para particiones de intercambio de Linux, o uno de los tipos de archivo FAT. FAT se remonta de una forma u otra a 1977, y todavía se prefiere para muchos tipos de dispositivos móviles, así como para muchas unidades extraíbles. Tenga en cuenta que algunos tipos de partición, como el tipo 0x0c, cuentan con algo llamado soporte LBA.

Cuando un programador diseña un kernel para un sistema operativo, tiene algunas formas diferentes de ver los discos. Uno es dividir los platos en cilindros, cabezales y sectores. Esta fue la forma clásica de referirse a los discos duros durante más tiempo. La geometría de disco genuina nunca ha sido realmente importante para Linux y, desafortunadamente, este esquema se queda sin direcciones después de aproximadamente 8 Gigabytes binarios. La segunda forma es usar el direccionamiento lógico C / H / S, que hace esto, pero luego permite que el controlador de disco mapee los números de cilindro, cabezal y sector donde quiera. Esta es la razón por la que un sistema operativo podría teóricamente afirmar que hay cabezas en una tarjeta SD o una memoria USB cuando esto es físicamente imposible.

El tercer método es a través del direccionamiento de bloques lógicos, que es lo que significa LBA. Cada bloque físico de un volumen recibe un número en este esquema. El sistema operativo le dice al controlador de disco que escriba en un determinado bloque numerado, pero en realidad no sabe si ese es el bloque directo en el disco. Este es el esquema más utilizado hoy en día, y ciertamente se ha utilizado en la gran mayoría de discos duros desde mediados de la década de 1990.

Linux ofrece soporte de kernel para montar una amplia variedad de tipos de particiones sin entrada directa, pero es mejor no ser demasiado extravagante al seleccionarlos. Podría brindar por sus datos si eligiera un tipo de partición muy extraño para el sistema de archivos.

Método 4: llamadas al sistema desde el manual del programador de Linux

Los lectores de páginas de manual integrados incluidos en la mayoría de las distribuciones de Linux pueden ofrecerle un curso intensivo sobre llamadas al sistema, lo que puede ayudar enormemente a aprender sobre el kernel. Inicie el navegador de páginas de manual gráfico de xman desde un enlace .desktop si tiene uno, o alternativamente manteniendo presionada la tecla super y R al mismo tiempo, luego escribiendo xman y presionando enter. Seleccione la opción “Página manual” y luego elija “Secciones” y finalmente “(2) Llamadas al sistema” en el menú desplegable.

2016-11-25_020430

Una vez que una opción de lectura ' intro ”Aparece, selecciónelo. Una página del Manual del programador de Linux que le enseñará bastante sobre las llamadas al sistema le dará la bienvenida.

2016-11-25_020518

6 minutos de lectura