Linux, Shell, Contenedores, WSL: ¿qué son?

Introducción

En este capítulo, vamos a centrarnos en lo que constituye la corriente principal de los entornos de trabajo de los desarrolladores actuales. Su contexto profesional será, sin duda, diferente, pero los siguientes elementos forman parte integrante de la cultura común de los desarrolladores actuales en materia de sistemas operativos.

Encontrará una lista de instrucciones básicas de Linux, junto con breves ejemplos de sintaxis, en el capítulo Prontuario, al final del libro.

Así que vamos a centrarnos en Linux y «sus amigos», sobre todo porque macOS y Windows (a través de WSL o Docker) se utilizan a menudo como estaciones de trabajo ¡para desarrollar aplicaciones en Linux!

La elegancia de Linux radica en su versatilidad, tanto para ordenadores de sobremesa como para servidores o sistemas integrados. Destaca en términos de estabilidad y seguridad, lo que lo convierte en la opción preferida en entornos críticos.

La interfaz de línea de comandos (CLI/shell) de Linux es cada vez más popular. Sus sistemas de gestión de paquetes/software, como apt, snap, yum y pacman, simplifican la instalación y actualización de software con buenas garantías de integridad, gracias a su capacidad para gestionar eficazmente las dependencias e interacciones entre componentes.

Android no se basa directamente en Linux, pero...

Sobrevivir con Linux - Lo mínimo que hay que saber

1. Puntos de referencia

El comando más utilizado de Linux, ls, permite listar archivos y directorios que no están ocultos.

ls  
 
bin boot dev etc home lib lib32 lib64 libx32 media   
mnt opt proc root run sbin srv sys tmp usr var 

Nuestro uso cotidiano se basará en los siguientes elementos.

Directorio

Contenido

bin

Binarios (ejecutables) de programas del sistema y comandos de usuario.

boot

Arranque del sistema, gestor de arranque (bootloader), configuración del kernel.

etc

Configuración del sistema y de las aplicaciones.

home

Directorio personal del usuario actual.

lib x

Bibliotecas compartidas.

opt

Paquetes de software opcionales instalados por el usuario o por aplicaciones de terceros.

root

Directorio personal del usuario root (superusuario).

tmp

Directorio temporal donde las aplicaciones pueden almacenar archivos temporales. Los archivos de este directorio suelen borrarse al reiniciar el sistema.

usr

Archivos y programas utilizados por los usuarios, como aplicaciones instaladas, bibliotecas, etc.

var

Datos variables, como archivos de registro, archivos de base de datos, archivos de caché, etc.

Utilizando el comando cd (change directory), vamos a situarnos en nuestro propio espacio personal, que no es el de nuestros compañeros.

cd home/ 

La / no es obligatoria aquí, pero se utiliza para llamar su atención sobre la estructura de las rutas de acceso en Linux.

En nuestro espacio, ahora vamos a crear una carpeta y luego borrarla.

mkdir provisional/  
ls 

Esto da:

provisional 

Destruyamos este directorio:

rmdir temporary/  
ls 

¡Ya no queda nada en nuestro home!

 

He aquí otros comandos cotidianos:

  • Desde una carpeta, cd .. permite subir un nivel en su jerarquía.

  • La instrucción cd ~ le lleva a su home.

  • La instrucción cd / permite ir a la parte superior del árbol de carpetas.

  • Si se pierde, teclee pwd y whoami y sabrá dónde está y en qué cuenta ha iniciado sesión (es decir, su login).

En caso de duda sobre los procesos en curso, utilice esto:

ps 

Devuelve una lista de procesos y otra información, como sus identificadores (PID), que a veces es muy útil conocer, aunque solo sea para poder matar un proceso usando la instrucción kill valor_del_pid.

PID TTY          TIME...

Daemons (servicios residentes o demonios) y cron

¿Se ha preguntado alguna vez cómo «espera» su sistema a recibir diversas peticiones antes de procesarlas, o cómo conseguir que realice tareas sin su intervención?

¡Ese es el propósito del daemon!

Un daemon es un proceso o servicio en segundo plano que se ejecuta continuamente en un sistema informático, por lo general sin interacción directa con el usuario («se ejecuta en segundo plano»).

Estas son algunas características de los daemons.

  • Procesos en segundo plano: por lo general, se inician automáticamente al arrancar el sistema informático y continúan ejecutándose hasta que se apaga el sistema (a menos que cree su propio daemon...).

  • Varias funciones: gestión de periféricos de hardware (por ejemplo, el daemon de impresión), gestión de servicios de red (por ejemplo, el daemon de servidor web), supervisión de eventos del sistema (por ejemplo, el daemon de registro del sistema)...

  • Programación: algunos daemons se encargan de programar tareas y ejecutarlas en momentos o intervalos específicos. Se denominan «daemons cron» y suelen utilizarse para automatizar tareas rutinarias.

  • Seguridad: los daemons correctamente configurados son esenciales para la seguridad del sistema, por ejemplo, para la monitorización. Sin embargo, los daemons mal configurados o vulnerables...

Sugerencias para un uso más profesional de Linux

A continuación encontrará algunas prácticas o herramientas que a los autores les gusta utilizar. A veces requieren la instalación de diferentes paquetes, algunos de los cuales están disponibles en el contenedor Kali del que hablamos en este capítulo.

1. Aprender el shell de bash

Un shell Linux es un programa que permite al usuario interactuar con el sistema operativo Linux mediante comandos de texto. bash es el shell más utilizado.

Encontrará una lista de instrucciones bash con breves ejemplos de sintaxis en el capítulo Prontuario, al final del libro.

El shell bash está muy bien documentado, pero puede resultarle útil disponer de una pequeña herramienta de depuración como https://www.shellcheck.net/

Este es el código de un script de bash que cuenta los archivos ocultos en un directorio. 

#!/bin/bash  
 
# Pide el nombre de un directorio 
read -p "Introduzca el nombre de una carpeta: " carpeta 
  
# Función recursiva para contar los archivos ocultos  
# en una carpeta y sus subcarpetas 
cuenta_archivos_ocultos() { 
  carpeta_actual="$1"  
  contador=0 
   
  #  Examina todos los archivos del directorio actual    
  for carpeta in "$archivo_actual"/*; do  
      if [["$archivo" == .*]]; then 
          # Comprobar si el archivo está oculto 
          if [[-f "$archivo" ]]; then 
              contador=$((contador + 1)) 
          fi 
          # Comprueba si el archivo es una carpeta 
         if [[-d "$archivo" ]]; then 
            # Llama recursivamente a la función para las subcarpetas 
             contador subcarpeta=$(contador_archivos_ocultos "$archivo") 
       ...

Contenedores y Docker

1. Docker, VM, servicios, en pocas palabras

a. Empezar con Docker

Docker es una tecnología de contenedorización. El objetivo de la contenedorización es virtualizar los procesos. Así, un proceso contenedorizado se ejecuta en un entorno optimizado para sus fines, pero utilizando los recursos del sistema del ordenador anfitrión.

Hay otras tecnologías de contenedorización más difíciles de comprender, como LXC (LXC proporciona contenedores de sistema de alto rendimiento y bajo nivel, mientras que Docker se centra en contenedores de aplicaciones con una interfaz fácil de usar y un ecosistema de herramientas especialmente abundante).

Docker está disponible para Windows, Linux, macOS, etc. Puede utilizar Docker dentro de un contenedor Docker o en una máquina virtual sin que ello afecte al rendimiento del conjunto, lo que significa que puede trabajar con Docker en configuraciones en la nube.

Dentro de un contenedor se pueden alojar servicios «grandes», como un servidor http Apache, o servicios «pequeños», como microservicios, a menudo transportados por API (Application Programming Interfaces) que permiten a distintas aplicaciones de software comunicarse e interactuar entre sí. Las API definen los métodos y formatos de datos que las aplicaciones pueden utilizar para solicitar e intercambiar información.

Un contenedor Docker trata de utilizar el mínimo de recursos de software, es decir, solo lo que le permite prestar el servicio. Cuanto más evolucionan las tecnologías de contenedorización, más se «conectan» al hardware para no verse ralentizadas por las características del host que las aloja.

Docker no es, por tanto, una tecnología de máquina virtual (VM). De hecho, con una tecnología de máquina virtual como VirtualBox, VMWare o WSL, un único ordenador, el host, puede ejecutar varias instancias de VM (Virtual Machine), los invitados. Cada invitado utiliza un gran archivo en el disco para definir su sistema operativo y de archivos aislado y se ejecuta como un único proceso, consumiendo los recursos de CPU del host.

Observe que, si usted es un usuario de Windows y desea utilizar una máquina virtual para invocar una configuración clásica de servidor Linux en su equipo con objeto de desarrollar...