Manual del Cmdte.

Bienvenido al Manual del Comandante

Esta es una guía interactiva diseñada para desmitificar la terminal de Linux y la programación en Bash. En lugar de un libro estático, esta aplicación te permite explorar conceptos, buscar comandos y entender el ecosistema de Linux de forma dinámica. Usa la navegación de la izquierda para sumergirte en los diferentes temas.

¿Por qué la Terminal?

En un mundo de interfaces gráficas, la línea de comandos (CLI) sigue siendo la herramienta más potente para un administrador de sistemas o desarrollador. Ofrece una eficiencia, control y capacidad de automatización inigualables. Esta guía se enfoca en darte el poder de la CLI, transformando tareas complejas en comandos simples y repetibles.

La Filosofía del Código Abierto

El código abierto no es solo una forma de desarrollar software; es un paradigma basado en la colaboración, la transparencia y la libertad del usuario. Es el motor que impulsa a Linux y su éxito masivo. Sus principios fundamentales, resumidos en la "Ley de Linus", postulan que "con suficientes ojos, todos los errores son superficiales".

La Catedral y el Bazar

Este ensayo de Eric S. Raymond contrasta el desarrollo cerrado ("La Catedral", construida por un pequeño grupo de expertos en aislamiento) con el modelo abierto de Linux ("El Bazar"), donde el desarrollo es público y cualquiera puede contribuir. Este modelo caótico pero eficiente ha demostrado ser superior para crear software robusto y complejo.

Las Cuatro Libertades

La esencia del software libre y de código abierto se basa en cuatro libertades que el acceso al código fuente proporciona al usuario: la libertad de usar, estudiar, distribuir y mejorar el software. Esto fomenta la innovación y la colaboración a una escala global.

Anatomía de un Sistema Linux

Un sistema operativo Linux no es una pieza única de software, sino un conjunto de componentes que trabajan en conjunto. Comprender estas capas es fundamental para entender cómo funciona el sistema y cómo interactuar con él de manera efectiva.

El Kernel

El corazón del sistema. Actúa como intermediario entre el hardware y el software, gestionando procesos, memoria, dispositivos y el sistema de archivos. Aunque es monolítico (para mayor rendimiento), es altamente modular, permitiendo cargar y descargar controladores dinámicamente.

El Shell

La interfaz a través de la cual interactúas con el kernel. Puede ser una Interfaz de Línea de Comandos (CLI) como Bash (el foco de este manual) o una Interfaz Gráfica de Usuario (GUI) como GNOME o KDE.

El Espacio de Usuario

Todo lo demás: las herramientas del sistema (GNU), las aplicaciones (navegadores, suites ofimáticas), las bibliotecas y el entorno de escritorio. Es la combinación del kernel con el espacio de usuario lo que forma una distribución de Linux completa.

Estructura de Directorios (FHS)

Todo en Linux existe bajo un único árbol de directorios que comienza en la raíz (`/`). El Filesystem Hierarchy Standard (FHS) define el propósito de cada directorio principal. Pasa el cursor sobre cada elemento para ver su descripción.

/
Raíz: El nivel superior. Todo cuelga de aquí.
/bin - Binarios esenciales de usuario
/etc - Archivos de configuración del sistema
/home - Directorios personales de los usuarios
/lib - Bibliotecas esenciales
/sbin - Binarios esenciales de sistema (admin)
/tmp - Archivos temporales
/usr - Utilidades y aplicaciones de usuario
/var - Archivos de datos variables (logs, etc.)

Gestión de Archivos y Directorios

Crear, ver, copiar, mover y eliminar archivos son operaciones diarias. La terminal ofrece herramientas precisas y potentes para cada una de estas tareas.

touch | mkdir

touch: Crea archivos vacíos o actualiza su fecha de modificación.

mkdir: Crea nuevos directorios. Usa mkdir -p para crear directorios anidados de una sola vez.

cp | mv | rm

cp: Copia archivos y directorios. Usa cp -r para directorios.

mv: Mueve o renombra archivos y directorios.

rm: Elimina archivos. Con rm -r, elimina directorios. ¡Úsalo con extremo cuidado! No hay papelera de reciclaje.

find | locate

find: Búsqueda potente y en tiempo real basada en nombre, tamaño, fecha, permisos, etc. Puede ejecutar comandos sobre los resultados.

locate: Búsqueda ultrarrápida por nombre que utiliza una base de datos pre-indexada. Más rápido, pero puede no encontrar los archivos más recientes.

Permisos y Propiedad

La seguridad en Linux se basa en un modelo de permisos para cada archivo y directorio, controlando quién puede leer, escribir o ejecutar. Dominar chmod, chown y sudo es esencial.

Modelo de Permisos

Cada archivo tiene permisos para tres clases: Propietario (user), Grupo (group), y Otros (others). Los permisos son Lectura (r=4), Escritura (w=2), y Ejecución (x=1).

-rwxr-xr-- (754)

  • Propietario: rwx (lectura, escritura, ejecución)
  • Grupo: r-x (lectura, ejecución)
  • Otros: r-- (sólo lectura)

Comandos Clave

  • chmod: Cambia los permisos de un archivo (e.g., chmod 755 script.sh).
  • chown: Cambia el propietario y/o el grupo de un archivo (e.g., chown user:group archivo).
  • sudo: Ejecuta un comando con privilegios de superusuario, de forma segura y auditable.

Procesos y Recursos

Un sistema Linux es un ecosistema dinámico de procesos. Aprender a visualizarlos, gestionarlos y filtrarlos es una habilidad clave para la solución de problemas y la administración del sistema.

ps | top

ps: Ofrece una "instantánea" estática de los procesos actuales. ps aux es el uso más común para ver todos los procesos.

top: Muestra una vista dinámica y en tiempo real del uso de recursos (CPU, memoria) por proceso. Es interactivo.

kill | pkill

kill: Envía una señal a un proceso (usando su PID) para terminarlo. kill -9 PID fuerza la terminación.

pkill/killall: Termina procesos basándose en su nombre, lo cual es más conveniente que usar el PID.

grep

grep: Filtra texto buscando patrones. Es la navaja suiza de la CLI. Su uso más común es encadenado con una tubería (`|`) para filtrar la salida de otros comandos, como ps aux | grep nginx.

Scripting en Bash: Conceptos Básicos

El scripting es el arte de la automatización. Un script de Bash es un archivo de texto que contiene una secuencia de comandos. Aquí están los bloques de construcción fundamentales.

Shebang y Variables

Todo script debe comenzar con #!/bin/bash (el "shebang") para declarar qué intérprete usar.

Las variables almacenan datos. Se declaran sin espacios: NOMBRE="Mundo". Se accede a ellas con $NOMBRE.

Entrada y Salida

echo: Imprime texto en la terminal. Ej: echo "Hola, $NOMBRE".

read: Lee la entrada del usuario y la guarda en una variable. Ej: read -p "Tu nombre: " NOMBRE.

Sustitución de Comandos

Permite capturar la salida de un comando y asignarla a una variable o usarla directamente. La sintaxis moderna y preferida es $(comando).

FECHA_HOY=$(date +%Y-%m-%d)
echo "El backup de hoy es: backup-$FECHA_HOY.tar.gz"

Control de Flujo en Scripts

El verdadero poder de la programación reside en la capacidad de tomar decisiones (condicionales) y repetir acciones (bucles).

if / else / elif

Ejecuta bloques de código basados en si un comando tiene éxito (código de salida 0). Se usa con el comando test o su alias [ ] para comparaciones.

if [ "$NUM" -gt 0 ]; then
    echo "Positivo"
else
    echo "No positivo"
fi

for | while

for: Itera sobre una lista de elementos (archivos, números, palabras).

while: Se ejecuta mientras una condición sea verdadera. Ideal para leer archivos línea por línea o esperar un evento.

Funciones y Tuberías

Las funciones permiten organizar y reutilizar código. Las tuberías y redirecciones son la "magia" de la CLI, permitiendo encadenar comandos para crear flujos de trabajo complejos.

Funciones

Encapsulan bloques de código. Pueden recibir argumentos ($1, $2) y "devolver" valores imprimiendo en la salida estándar, que se captura con $(...).

Tuberías y Redirección

Tubería `|`: Conecta la salida de un comando con la entrada del siguiente.

Redirección `>` y `>>`: Envía la salida a un archivo (sobrescribiendo o añadiendo).

Redirección `<`: Toma la entrada de un archivo.

Ejemplo de Encadenamiento

Esta cadena de comandos lista los 10 procesos que más memoria consumen:

ps aux | sort -nrk 4 | head -n 10

Scripts de Ejemplo del Mundo Real

A continuación se muestran ejemplos completos que combinan muchos de los conceptos vistos para crear herramientas de automatización prácticas.

Script de Copia de Seguridad

Este script realiza una copia de seguridad de directorios especificados, los comprime y los puede transferir a un servidor remoto.

#!/bin/bash
BACKUP_DIRS=("/home/usuario/documentos" "/var/www/html")
DEST_DIR="/tmp/backups"
TIMESTAMP=$(date +%Y-%m-%d_%H-%M-%S)
mkdir -p "$DEST_DIR"
for DIR in "${BACKUP_DIRS[@]}"; do
  BASENAME=$(basename "$DIR")
  FILENAME="$DEST_DIR/${BASENAME}_${TIMESTAMP}.tar.gz"
  echo "Respaldando $DIR..."
  tar -czf "$FILENAME" "$DIR"
done
echo "Backup finalizado."

Script de Monitorización de Recursos

Este script comprueba el uso de CPU, memoria y disco, y muestra una alerta si se superan los umbrales definidos.

#!/bin/bash
CPU_THRESHOLD=85
MEM_THRESHOLD=80
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8}' | cut -d. -f1)
MEM_USAGE=$(free | awk '/Mem/{printf("%.0f", $3/$2*100)}')
echo "CPU: $CPU_USAGE% | Memoria: $MEM_USAGE%"
if [ "$CPU_USAGE" -gt "$CPU_THRESHOLD" ]; then
  echo "ALERTA: Uso de CPU elevado!"
fi
if [ "$MEM_USAGE" -gt "$MEM_THRESHOLD" ]; then
  echo "ALERTA: Uso de Memoria elevado!"
fi

¿Qué es una Distribución de Linux?

Una "distro" es un sistema operativo completo construido sobre el kernel de Linux. Agrupa el kernel con herramientas del sistema (GNU), un gestor de paquetes, un entorno de escritorio (GUI) y aplicaciones. La elección de estos componentes y su configuración es lo que diferencia a una distro de otra.

Las Grandes Familias

Familia Debian

Famosa por su estabilidad y su compromiso con el software libre. Usa paquetes .deb y el gestor apt. Base de Ubuntu y Mint.

Familia Red Hat

Orientada al entorno empresarial. Usa paquetes .rpm y el gestor dnf. RHEL y Fedora son sus exponentes.

Familia Arch

Enfocada en el minimalismo y el control del usuario. Usa pacman y un modelo de *rolling release* (actualización continua).

Guía de Selección de Distribuciones

La "mejor" distro no existe; la elección correcta depende de ti. Usa los filtros para encontrar la distro que mejor se adapte a tu perfil y explora el gráfico para comparar sus filosofías.

Comparativa Filosófica

Ubuntu

Ideal para empezar. Fácil de usar, gran comunidad y respaldo de Canonical.

Linux Mint

Interfaz familiar (similar a Windows). Muy estable y completa de fábrica.

Debian

La roca de la estabilidad. Perfecta para servidores donde la fiabilidad es crítica.

Rocky/AlmaLinux

Clones de RHEL. Estabilidad empresarial sin costo de suscripción.

Fedora

Equilibrio entre innovación y estabilidad. Ideal para desarrolladores que quieren lo último.

Arch Linux

Control total y software de última generación (*rolling release*). Para usuarios experimentados.