Hasta ahora hemos tenido una toma de contacto con Linux y DevOps. Tenemos nuestro entorno de laboratorio configurado con Vagrant [(Día 14)](day14.md) y tocamos una pequeña porción de comandos que estarán en nuestro kit de herramientas diarias para nuestras cositas en la terminal [(Día 15)](day15.md).
Hoy vamos a mirar en áreas clave a cuidar en los sistemas Linux con las actualizaciones, la instalación de software en general. También intentaremos explicar un poco sobre las carpetas del sistema y como se utilizan. Por último, echaremos un vistazo al almacenamiento.
Lo primero que vamos a ver es cómo actualizar nuestro sistema operativo. Quizá estes familiarizado con este proceso en un sistema operativo Windows y macOS. Es ligeramente distinto en un Desktop o un servidor Linux.
Generalmente, en las distribuciones derivadas de Debian, se ejecuta este comando para asegurarse de tener las últimas actualizaciones de los repositorios centrales, antes de cualquier instalación de software que pudiera provocar un conflicto de dependencias.
Sin embargo, verás que nos da algunas opciones de instalación `apt` que podríamos probar. Esto es porque en los repositorios por defecto hay un programa llamado figlet. Probemos con `sudo apt install figlet`.
⚠️ _Ten cuidado con borrar cosas que no debes. Normalmente, las distribuciones te avisarán, puedes borrar todos los programas incluidos los que aparentemente no usas, pero en realidad son dependencias de otros._
Si quieres asegurarte de borrar el programa y todas sus dependencias puedes usar la opción `--purge`:
```shell
sudo apt --purge remove figlet
```
Podremos añadir repositorios de terceros, a los que tendremos acceso además de los repositorios por defecto de Ubuntu y de los oficiales.
Si por ejemplo, quisiéramos instalar vagrant en nuestra MV de Ubuntu no podríamos ahora mismo y esto lo podéis ver a continuación en el primer comando emitido. Añadimos la clave para confiar en el repositorio de HashiCorp, y luego añadimos el repositorio a nuestro sistema.
Una vez que tenemos el repositorio de HashiCorp añadido podemos seguir adelante y ejecutar `sudo apt install vagrant` y conseguir instalarlo en nuestro sistema.
Hay tantas opciones cuando se trata de la instalación de software, existen diferentes opciones de gestores de paquetes. Por ejemplo, en Ubuntu también podríamos utilizar snaps para nuestras instalaciones de software.
En Windows, tienes la unidad C: y eso es lo que consideramos la raíz. En Linux tenemos `/`, aquí es donde vamos a encontrar las carpetas importantes de nuestro sistema Linux.
-`/bin` - Abreviatura de binario, en esta carpeta es donde se encuentran los binarios que nuestro sistema necesita, los ejecutables y las herramientas.
-`/dev` - Aquí puedes encontrar información de dispositivos, es donde encontrarás punteros a tus unidades de disco `sda` será tu disco principal del SO.
-`/home` - Aquí es donde encontrarás tus carpetas y archivos de usuario. Tenemos nuestra carpeta de usuario vagrant. Es donde te encontrarás las carpetas para tu Ubuntu Desktop como los `Documentos`, las `Descargas` y el `Escritorio`.
-`/lib` - Hemos mencionado que `/bin` es donde viven nuestros binarios y ejecutables, pues en `/lib` es donde encontrarás las librerías compartidas para estos.
-`/proc` - Información del kernel y de los procesos, similar a `/dev`. Es un sistema de archivos virtual que se crea sobre la marcha cuando el sistema arranca y se disuelve cuando se apaga. Me parece uno de los más importantes para trabajar si quieres dedicarte a la filosofía DevOps. La magía de la contenerización se entiende mejor si trabajas con el sistema de archivos que contiene `/proc`.
Contiene información útil sobre los procesos que se están ejecutando en ese momento, y se considera un centro de control e información para el núcleo. Puedes configurar directamente el kernel desde aquí, pues proporciona un medio de comunicación entre el espacio del kernel y el espacio del usuario.
En este [tutorial](https://prefapp.github.io/formacion/cursos/docker/es/#/./01_que_e_un_contedor_de_software/01_procesos_e_kernel) puedes trabajar con `/proc`
Cuando llegamos a un sistema Linux o a cualquier sistema podemos querer saber los discos disponibles y cuánto espacio libre tenemos en esos discos. Los siguientes comandos nos ayudarán a identificar, utilizar y gestionar el almacenamiento.
-`df` nos da un poco más de detalle sobre las particiones: el total, el usado y el disponible. Puedes usar opciones interesante como `df -h` para darnos una salida humana de los datos.
Si usted estuviera añadiendo un nuevo disco a su sistema, y esto es lo mismo en Windows, necesitarías formatear el disco en la administración de discos. En la terminal de Linux puedes hacerlo usando
```shell
sudo mkfs -t ext4 /dev/sdb
```
Nos deberemos asegurar que sdb es realmente nuestro disco recién añadido y el que queremos formatear, porque es lo que hará, borrarlo y darle un formato ext4 al disco.
A continuación, tendríamos que montar nuestro disco recién formateado para poderlo utilizar.Esto lo hacemos en nuestra carpeta `/mnt` que mencionamos anteriormente. Creamos un directorio allí con
```shell
sudo mkdir /mnt/NewDisk
```
Para montar el disco en esa ubicación usaremos el siguiente comando.
Si no quieres desmontar ese disco y vas a usarlo para, por ejemplo, una base de datos o algún otro uso persistente, querrás que esté ahí cuando reinicies tu sistema. Para que persista necesitamos añadir este disco a nuestro archivo de configuración `/etc/fstab`. Si no lo haces no estará dispobible cuando la máquina se reinicie y tendrás que pasar por el proceso manual de nuevo. Los datos seguirán estando en el disco pero no se montará automáticamente a menos que añadas la configuración al archivo mencionado.
Una vez que hayas editado el archivo de configuración `fstab` ppodrás comprobar su funcionamiento con `sudo mount -a`. Si no hay errores significa que los cambios serán persistentes a través de los reinicios.