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.
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.