Guía de laboratorio de conceptos básicos de Linux
Dificultad: Principiante Tiempo estimado: 45 minutos Última actualización: February 11, 2026
Objetivos de aprendizaje
- Practicar comandos de gestión de procesos en Linux
- Observar directamente el efecto de aislamiento de los namespaces de Linux
- Entender los límites de recursos mediante cgroups
- Practicar la gestión de permisos y propiedad de archivos
Prerrequisitos
- [ ] Acceso a una terminal Linux (se recomienda Ubuntu 20.04+)
- [ ] Privilegios sudo
- [ ] Haber completado el aprendizaje Conceptos básicos de Linux
Ejercicio 1: Gestión de procesos
Objetivo
Practicar el listado de procesos, la ejecución en segundo plano y el envío de señales.
Pasos
Paso 1.1: Comprobar los procesos que se están ejecutando actualmente
# Processes in the current terminal
ps aux | head -20
# View process relationships in tree format
ps auxf | head -30Paso 1.2: Ejecutar un proceso en segundo plano
# Run a sleep process in the background
sleep 300 &
echo "PID: $!"
# Check background jobs
jobs -lPaso 1.3: Enviar una señal a un proceso
# Get the process ID
SLEEP_PID=$(pgrep -f "sleep 300")
echo "Sleep PID: $SLEEP_PID"
# Request termination with SIGTERM
kill $SLEEP_PID
# Verify the process has terminated
ps aux | grep "sleep 300" | grep -v grep¿Necesitas una pista?
- Usa
kill -lpara ver una lista de las señales disponibles kill -9 PIDtermina forzosamente con SIGKILLpkill -f "pattern"permite la terminación basada en el nombre
Verificación
# The sleep process should not exist
pgrep -f "sleep 300" && echo "Still running" || echo "Termination complete"Ejercicio 2: Aislamiento de namespaces de Linux
Objetivo
Crear namespaces para observar el aislamiento de procesos y de red.
Pasos
Paso 2.1: Verificar el aislamiento del PID namespace
# Run bash in a new PID namespace
sudo unshare --pid --fork --mount-proc bash -c '
echo "PID list inside the new namespace:"
ps aux
echo "Current process PID: $$"
'Salida esperada:
PID list inside the new namespace:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 ... ... ... S ... 0:00 bash -c ...
root 2 0.0 0.0 ... ... ... R ... 0:00 ps aux
Current process PID: 1Paso 2.2: Aislamiento del network namespace
# Create a network namespace
sudo ip netns add test-ns
# List namespaces
sudo ip netns list
# Check network inside the isolated namespace
sudo ip netns exec test-ns ip addr
# Cleanup
sudo ip netns delete test-ns¿Necesitas una pista?
- Las interfaces de red del host no son visibles dentro del network namespace
- Solo existe la interfaz
lo(loopback), y está DOWN de forma predeterminada - Este es el principio detrás del aislamiento de red de los contenedores
Verificación
# Verify the namespace has been deleted
sudo ip netns list | grep test-ns && echo "Still exists" || echo "Deletion complete"Ejercicio 3: Límites de recursos de cgroup
Objetivo
Usar cgroups para limitar el uso de memoria de los procesos.
Pasos
Paso 3.1: Comprobar la información de cgroup
# Check cgroup v2 mount
mount | grep cgroup
# Check cgroup of current process
cat /proc/self/cgroup
# Check cgroup controllers
cat /sys/fs/cgroup/cgroup.controllers 2>/dev/null || echo "Using cgroup v1"Paso 3.2: Comprobar el uso de memoria
# System memory information
free -h
# Memory usage of specific processes
ps aux --sort=-%mem | head -10Paso 3.3: Conexión con los límites de recursos de Kubernetes
# This is how resources.limits works in K8s
# Let's look at a Pod manifest example
cat << 'EOF'
apiVersion: v1
kind: Pod
metadata:
name: memory-demo
spec:
containers:
- name: memory-demo
image: nginx
resources:
requests:
memory: "64Mi"
limits:
memory: "128Mi"
EOF¿Necesitas una pista?
- K8s
resources.limits.memoryse traduce en límites de memoria de cgroup para el contenedor - Superar el límite da como resultado el estado OOMKilled
- Puedes comprobar los límites de recursos con
kubectl describe pod
Ejercicio 4: Gestión de permisos de archivos
Objetivo
Practicar la gestión de permisos y propiedad de archivos.
Pasos
Paso 4.1: Crear un archivo y comprobar los permisos
# Create a test file
mkdir -p /tmp/linux-lab
echo "Hello Linux" > /tmp/linux-lab/test.txt
# Check current permissions
ls -la /tmp/linux-lab/test.txtPaso 4.2: Cambiar permisos
# Add execute permission
chmod +x /tmp/linux-lab/test.txt
ls -la /tmp/linux-lab/test.txt
# Set with numeric mode (read/write - read - none)
chmod 640 /tmp/linux-lab/test.txt
ls -la /tmp/linux-lab/test.txt
# Set the same permissions as K8s Secret volume defaults
chmod 0644 /tmp/linux-lab/test.txtPaso 4.3: Cambiar la propiedad
# Check current user and group
id
# Change group (if executable)
sudo chown $USER:root /tmp/linux-lab/test.txt
ls -la /tmp/linux-lab/test.txtVerificación
# Verify permissions are -rw-r--r--
stat -c "%a %U %G" /tmp/linux-lab/test.txtLimpieza
# Delete test files
rm -rf /tmp/linux-lab
# Clean up remaining processes
pkill -f "sleep 300" 2>/dev/nullSolución de problemas
El comando unshare no se encuentra
Instala el paquete util-linux:
sudo apt-get install util-linux # Ubuntu/Debian
sudo yum install util-linux # CentOS/RHELEl comando ip netns no funciona
Se requiere el paquete iproute2:
sudo apt-get install iproute2 # Ubuntu/Debian
sudo yum install iproute # CentOS/RHEL