# Módulo Experto: Desafíos Prácticos del Administrador Linux

## 🚀 Desafío Práctico: ¡Domina la CLI y la Administración de Sistemas!

Si estás preparándote para obtener tu certificación **LPIC-1, LFCS o RHCSA**, sabes que la teoría solo te lleva a la mitad del camino. La verdadera prueba es la práctica en la **Línea de Comandos (CLI)**.

Basados en los temas esenciales de nuestros *posts* anteriores (FHS, Permisos, LVM, Usuarios, Redirección, etc.), hemos creado 20 ejercicios prácticos que puedes realizar en cualquier máquina virtual **Linux (CentOS, RHEL, Ubuntu, Debian)**.

**Recomendación:** Utiliza una máquina virtual recién instalada o un entorno de laboratorio donde puedas experimentar libremente. Debes tener permisos de `sudo` o acceder como usuario `root` para completar los ejercicios de administración (Volúmenes, Usuarios y Grupos).

| **Categoría de Ejercicios** | **Enfoque Principal** | **Certificaciones Relevantes** |
| --- | --- | --- |
| **I. CLI y Navegación** | FHS, `cp`, `mv`, Comodines | LPIC-1, LFCS, RHCSA |
| **II. Permisos y Propiedad** | `chmod`, SUID, **ACLs** | LPIC-1, **LFCS, RHCSA** |
| **III. Usuarios y** `sudo` | `useradd`, `groupmod`, `visudo` | LPIC-1, **LFCS, RHCSA** |
| **IV. Texto, Redirección y Enlaces** | Pipes, `grep`, `sed`, Enlaces Duros/Blandos | LPIC-1, **LFCS, RHCSA** |
| **V. Almacenamiento (Montaje)** | `lsblk`, `mount`, `/etc/fstab` | LPIC-1, LFCS, RHCSA |
| **VI. Gestión de Volumen Lógico** | PV, VG, LV, `lvextend`, `xfs_growfs` | **LFCS, RHCSA** |

---

## I. Ejercicios de CLI y Navegación

### Reactivo 1: Creación de Estructura y Archivo (FHS)

**Objetivo:** Crear una estructura de directorios simulada para un proyecto en el directorio `/tmp` y un archivo inicial con un solo comando.

<table><tbody><tr><td colspan="1" rowspan="1"><p>1. <strong>Tarea:</strong> En el directorio <code>/tmp</code>, crea la estructura de directorios <code>/proyecto/src</code>, <code>/proyecto/docs</code> y <code>/proyecto/bin</code>. Dentro de <code>/proyecto/src</code>, crea un archivo vacío llamado <code>main.sh</code>. Todo en una sola línea de comando.</p></td></tr><tr><td colspan="1" rowspan="1"><p>2. <strong>Verificación:</strong> Confirma la existencia de la estructura y el archivo.</p></td></tr></tbody></table>

### Reactivo 2: Copia y Comodines

**Objetivo:** Usar comodines para copiar un conjunto específico de archivos.

<table><tbody><tr><td colspan="1" rowspan="1"><p>1. <strong>Configuración:</strong> Crea varios archivos de texto en <code>/tmp/proyecto/docs</code>.</p></td></tr><tr><td colspan="1" rowspan="1"><p>2. <strong>Tarea:</strong> Copia solo los archivos <code>.txt</code> en el directorio <code>/tmp/proyecto/docs</code> que empiezan por la letra <code>c</code> a una nueva carpeta llamada <code>/tmp/backups</code>.</p></td></tr></tbody></table>

### Reactivo 3: Obtención de Ayuda (info)

**Objetivo:** Usar la utilidad `info` para buscar la sección sobre el comando `cp`.

<table><tbody><tr><td colspan="1" rowspan="1"><p>1. <strong>Tarea:</strong> Abre el manual de ayuda de <code>cp</code> usando el comando <code>info</code>.</p></td></tr><tr><td colspan="1" rowspan="1"><p>2. <strong>Tarea:</strong> Una vez dentro, busca la sección sobre la opción <code>-p</code> (preservar atributos).</p></td></tr></tbody></table>

---

## II. Ejercicios de Permisos y Propiedad

### Reactivo 4: Permisos con Notación Octal

**Objetivo:** Aplicar un conjunto de permisos preciso usando la notación octal.

<table><tbody><tr><td colspan="1" rowspan="1"><p>1. <strong>Configuración:</strong> Crea un archivo en <code>/tmp/secreto_de_permisos.conf</code>.</p></td></tr><tr><td colspan="1" rowspan="1"><p>2. <strong>Tarea:</strong> Aplica los permisos <code>rwxr-x---</code>. Esto significa: Propietario: Lectura, Escritura, Ejecución (7); Grupo: Lectura, Ejecución (5); Otros: Sin Permisos (0).</p></td></tr><tr><td colspan="1" rowspan="1"><p>3. Verificación: Muestra los permisos aplicados.</p></td></tr></tbody></table>

### Reactivo 5: El Sticky Bit en Directorios (LFCS/RHCSA)

**Objetivo:** Configurar un directorio compartido para que los usuarios puedan crear archivos, pero solo ellos puedan eliminarlos.

<table><tbody><tr><td colspan="1" rowspan="1"><p>1. <strong>Configuración:</strong> Crea el directorio <code>/tmp/compartido</code> y establece permisos <code>rwxrwxrwt</code>.</p></td></tr><tr><td colspan="1" rowspan="1"><p>2. <strong>Tarea:</strong> Asegúrate de que el Sticky Bit (el 1 inicial del 1777) esté aplicado.</p></td></tr></tbody></table>

### Reactivo 6: Cambio de Grupo Propietario

**Objetivo:** Cambiar el grupo de un archivo a un grupo existente (`sysadmin`) sin modificar el propietario.

<table><tbody><tr><td colspan="1" rowspan="1"><p>1. <strong>Configuración:</strong> Crea el grupo <code>sysadmin</code> y el archivo <code>/tmp/archivo_grupo.txt</code>.</p></td></tr><tr><td colspan="1" rowspan="1"><p>2. <strong>Tarea:</strong> Cambia el grupo propietario del archivo a <code>sysadmin</code>.</p></td></tr></tbody></table>

### Reactivo 7: Uso de ACLs para Acceso Fino (RHCSA/LFCS)

**Objetivo:** Conceder acceso de lectura a un usuario específico (`ana`) utilizando Listas de Control de Acceso (ACLs).

<table><tbody><tr><td colspan="1" rowspan="1"><p>1. <strong>Configuración:</strong> Asegúrate de que tienes el paquete de ACLs (<code>acl</code>) instalado y crea el usuario <code>ana</code>.</p></td></tr><tr><td colspan="1" rowspan="1"><p>2. <strong>Tarea:</strong> Usa <code>setfacl</code> para dar permiso de solo lectura (<code>r--</code>) al usuario <code>ana</code> sobre el archivo <code>/tmp/archivo_grupo.txt</code>.</p></td></tr><tr><td colspan="1" rowspan="1"><p>3. <strong>Verificación:</strong> Muestra la ACL para confirmar el permiso.</p></td></tr></tbody></table>

---

## III. Ejercicios de Gestión de Usuarios y `sudo`

### Reactivo 8: Creación de Usuario Personalizada

**Objetivo:** Crear un usuario con un directorio *home* personalizado.

<table><tbody><tr><td colspan="1" rowspan="1"><p>1. <strong>Tarea:</strong> Crea el directorio <code>/data/usuarios</code> (si no existe).</p></td></tr><tr><td colspan="1" rowspan="1"><p>2. <strong>Tarea:</strong> Crea un usuario llamado <code>analista</code> y establece su directorio home en <code>/data/usuarios/analista</code>.</p></td></tr><tr><td colspan="1" rowspan="1"><p>3. <strong>Verificación:</strong> Confirma la ruta del home en <code>/etc/passwd</code>.</p></td></tr></tbody></table>

### Reactivo 9: Modificación de Grupos

**Objetivo:** Añadir el usuario `analista` a un grupo secundario existente (`desarrollo`).

<table><tbody><tr><td colspan="1" rowspan="1"><p>1. <strong>Tarea:</strong> Añade el usuario <code>analista</code> al grupo <code>desarrollo</code>.</p></td></tr><tr><td colspan="1" rowspan="1"><p>2. <strong>Verificación:</strong> Confirma la membresía de <code>analista</code> en el grupo.</p></td></tr></tbody></table>

### Reactivo 10: Configuración de `sudo` sin Contraseña (LFCS/RHCSA)

**Objetivo:** Usar `visudo` para permitir que el usuario `analista` ejecute un comando específico como `root` sin solicitar su contraseña.

<table><tbody><tr><td colspan="1" rowspan="1"><p>1. <strong>Tarea:</strong> Edita el archivo <code>/etc/sudoers</code> de forma segura.</p></td></tr><tr><td colspan="1" rowspan="1"><p>2. <strong>Tarea:</strong> Añade la línea necesaria para que el usuario <code>analista</code> pueda ejecutar el comando <code>/usr/sbin/service cron restart</code> sin contraseña.</p></td></tr><tr><td colspan="1" rowspan="1"><p>3. <strong>Verificación:</strong> El usuario analista debería poder ejecutar el comando con <code>sudo</code> sin que se le pida la contraseña.</p></td></tr></tbody></table>

---

## IV. Ejercicios de Texto, Redirección y Enlaces

### Reactivo 11: Redirección y Tuberías (`|`)

**Objetivo:** Contar y guardar el número de usuarios que tienen `bash` como *shell* por defecto en `/etc/passwd`.

<table><tbody><tr><td colspan="1" rowspan="1"><p>1. <strong>Tarea:</strong> Utiliza <code>grep</code> para filtrar las líneas con <code>/bin/bash</code> en <code>/etc/passwd</code>.</p></td></tr><tr><td colspan="1" rowspan="1"><p>2. <strong>Tarea:</strong> Usa una tubería (<code>|</code>) para contar las líneas y redirige el resultado a un archivo llamado <code>/tmp/conteo_bash.txt</code>.</p></td></tr><tr><td colspan="1" rowspan="1"><p>3. <strong>Verificación:</strong> Muestra el contenido del archivo resultante.</p></td></tr></tbody></table>

### Reactivo 12: Búsqueda Contextual con `grep`

**Objetivo:** Encontrar la línea del usuario `root` en `/etc/shadow` y mostrar las líneas circundantes para tener contexto.

<table><tbody><tr><td colspan="1" rowspan="1"><p>1. <strong>Tarea:</strong> Busca la cadena <code>root</code> en <code>/etc/shadow</code> y muestra una línea de contexto antes (<code>-B 1</code>) y una línea de contexto después (<code>-A 1</code>) del resultado.</p></td></tr></tbody></table>

### Reactivo 13: Sustitución con `sed` (LFCS/RHCSA)

**Objetivo:** Usar `sed` para reemplazar una cadena de texto en un archivo y mostrar la salida, sin modificar el archivo original.

<table><tbody><tr><td colspan="1" rowspan="1"><p>1. <strong>Configuración:</strong> Crea un archivo de configuración de prueba.</p></td></tr><tr><td colspan="1" rowspan="1"><p>2. <strong>Tarea:</strong> Reemplaza todas las ocurrencias de <code>localhost</code> por <code>produccion.local</code> en <code>/tmp/webserver.conf</code> y muéstralo en pantalla.</p></td></tr></tbody></table>

### Reactivo 14: Enlaces Duros y Blandos

**Objetivo:** Crear y verificar enlaces duros y blandos, observando los números de inodo.

<table><tbody><tr><td colspan="1" rowspan="1"><p>1. <strong>Configuración:</strong> Crea un archivo de texto llamado <code>/tmp/inodo_original.txt</code>.</p></td></tr><tr><td colspan="1" rowspan="1"><p>2. <strong>Tarea:</strong> Crea un enlace duro llamado <code>enlace_duro.txt</code> y un enlace blando llamado <code>enlace_blando.txt</code> hacia el archivo original.</p></td></tr><tr><td colspan="1" rowspan="1"><p>3. <strong>Verificación:</strong> Muestra la lista detallada para ver los números de inodo (<code>-i</code>).</p></td></tr></tbody></table>

---

## V. Ejercicios de Almacenamiento y Montaje

**Nota:** Los ejercicios 15, 16 y 17 asumen la existencia de dispositivos de bloque adicionales como `/dev/sdb` y `/dev/sdb1`, lo cual requiere la configuración previa de la máquina virtual (añadir discos virtuales).

### Reactivo 15: Identificación de Dispositivos

**Objetivo:** Usar `lsblk` para obtener una lista clara de los dispositivos de bloque y sus puntos de montaje.

<table><tbody><tr><td colspan="1" rowspan="1"><p>1. <strong>Tarea:</strong> Muestra un listado de bloques legible por humanos, incluyendo sus tamaños.</p></td></tr><tr><td colspan="1" rowspan="1"><p>2. <strong>Tarea:</strong> Identifica cualquier disco (por ejemplo, <code>/dev/sdb</code>) que no tenga particiones montadas.</p></td></tr></tbody></table>

### Reactivo 16: Montaje Temporal

**Objetivo:** Montar una partición existente (`/dev/sdb1`) en un directorio temporal.

<table><tbody><tr><td colspan="1" rowspan="1"><p>1. <strong>Tarea:</strong> Crea el punto de montaje temporal <code>/mnt/tempdata</code>.</p></td></tr><tr><td colspan="1" rowspan="1"><p>2. <strong>Tarea:</strong> Monta la partición <code>/dev/sdb1</code> (asumiendo formato <code>ext4</code> o <code>xfs</code>) en el punto de montaje.</p></td></tr><tr><td colspan="1" rowspan="1"><p>3. <strong>Verificación:</strong> Muestra el uso del disco en formato legible por humanos.</p></td></tr></tbody></table>

### Reactivo 17: Montaje Persistente con `/etc/fstab`

**Objetivo:** Configurar una partición para que se monte automáticamente al iniciar.

<table><tbody><tr><td colspan="1" rowspan="1"><p>1. <strong>Configuración:</strong> Consigue el UUID de <code>/dev/sdb2</code> (asumiendo que está formateado con <code>xfs</code>).</p></td></tr><tr><td colspan="1" rowspan="1"><p>2. <strong>Tarea:</strong> Crea el punto de montaje <code>/data/archivos</code>.</p></td></tr><tr><td colspan="1" rowspan="2"><p>3. <strong>Tarea:</strong> Añade la entrada necesaria en <code>/etc/fstab</code> para que <code>/dev/sdb2</code> se monte como <code>xfs</code> en <code>/data/archivos</code>, sin errores de inicio si falla (opción <code>nofail</code>), con valores predeterminados y chequeo en el arranque.</p></td></tr><tr></tr><tr><td colspan="1" rowspan="1"><p>4. <strong>Verificación (Sin reiniciar)</strong>: Prueba si la nueva entrada de <code>fstab</code> funciona.</p></td></tr></tbody></table>

---

## VI. Ejercicios de LVM (Énfasis RHCSA/LFCS)

**Nota:** Estos ejercicios requieren al menos dos discos virtuales adicionales sin particionar (`/dev/sdb` y `/dev/sdc`) para simular la infraestructura de LVM.

### Reactivo 18: Creación Completa de LVM

**Objetivo:** Crear un Volumen Físico, un Grupo de Volúmenes y un Volumen Lógico de 10GB.

<table><tbody><tr><td colspan="1" rowspan="1"><p>1. <strong>Tarea:</strong> Crea un PV en <code>/dev/sdb</code> y <code>/dev/sdc</code>.</p></td></tr><tr><td colspan="1" rowspan="1"><p>2. <strong>Tarea:</strong> Crea un VG llamado <code>prod_vg</code> con ambos PV.</p></td></tr><tr><td colspan="1" rowspan="3"><p>3. <strong>Tarea:</strong> Crea un LV llamado <code>lv_data</code> de 10GB, formatéalo como <code>ext4</code> y móntalo en <code>/datos_prod</code>.</p></td></tr><tr></tr><tr></tr></tbody></table>

### Reactivo 19: Ampliación de Volumen (Ext4)

**Objetivo:** Ampliar el LV anterior con 5GB adicionales y redimensionar el sistema de archivos `ext4`.

<table><tbody><tr><td colspan="1" rowspan="1"><p>1. <strong>Tarea:</strong> Amplía el Volumen Lógico <code>lv_data</code> en 5GB.</p></td></tr><tr><td colspan="1" rowspan="1"><p>2. <strong>Tarea:</strong> Redimensiona el sistema de archivos <code>ext4</code> para que ocupe el nuevo espacio del LV.</p></td></tr><tr><td colspan="1" rowspan="1"><p>3. <strong>Verificación:</strong> Muestra el nuevo tamaño del punto de montaje.</p></td></tr></tbody></table>

### Reactivo 20: Ampliación al Espacio Libre Total (XFS - RHCSA)

**Objetivo:** Ampliar el LV para usar todo el espacio libre restante en el VG y redimensionar el sistema de archivos `xfs` (el método de RHCSA).

<table><tbody><tr><td colspan="1" rowspan="1"><p>1. <strong>Configuración:</strong> Asume que el LV anterior fue formateado con xfs y tiene espacio libre en el VG.</p></td></tr><tr><td colspan="1" rowspan="1"><p>2. <strong>Tarea:</strong> Amplía el LV <code>lv_data</code> para usar el 100% del espacio libre restante del <code>prod_vg</code>.</p></td></tr><tr><td colspan="1" rowspan="1"><p>3. <strong>Tarea:</strong> Redimensiona el sistema de archivos XFS para que reconozca el nuevo espacio (usando el punto de montaje).</p></td></tr><tr><td colspan="1" rowspan="1"><p>4. <strong>Verificación:</strong> Muestra el nuevo tamaño del punto de montaje.</p></td></tr></tbody></table>

---

## 💡 Conclusión y Próximos Pasos

Dominar estos 20 ejercicios te posiciona firmemente para enfrentar los laboratorios prácticos de las certificaciones. Los temas de **ACLs,** `sudo` y LVM son especialmente críticos para **RHCSA** y **LFCS**, y a menudo son los que distinguen a un candidato calificado.

**¡Tu turno!** Practica, repite y no solo memorices los comandos, sino que entiende *por qué* y *cómo* funcionan los flujos de datos y la gestión del almacenamiento.

*¿Qué ejercicio te resultó más desafiante? ¡Déjanos un comentario y comparte tu experiencia de práctica!*

✨ **Tip**: Encuentra las soluciones en el repositorio de GitHub.

---

## Invitación a la Comunidad 🚀

Este *post* forma parte de una serie dedicada a la arquitectura y administración de sistemas Linux. ¡Queremos construir el mejor recurso posible **con tu ayuda**!

Te invitamos a:

* **Clonar el Repositorio:** El código fuente de todos nuestros artículos está disponible en **GitHub**.
    
* **Contribuir:** Si encuentras algún error, tienes sugerencias para mejorar la claridad de los conceptos o deseas proponer correcciones técnicas, no dudes en enviar un *Pull Request* (Solicitud de extracción).
    
* **Comentar:** ¿Tienes una pregunta o un punto de vista diferente sobre algún concepto? Abre un *Issue* (Incidencia) en el repositorio para iniciar la discusión.
    

Tu colaboración es vital para mantener este contenido preciso y actualizado.

**¡Encuentra el repositorio y participa aquí:** [github.com/rootzilopochtli/introduccion-a-linux](https://github.com/rootzilopochtli/introduccion-a-linux)
