Saltar al contenido principal

🐧 Comandos, estructura, usuarios y permisos

📣 Hoy arrancamos con uno de los superpoderes más importantes de DevOps: la terminal.

Ya sea que estés en Linux, macOS o Windows, vas a poder seguir sin problema. Si no tenés Linux instalado, acá van algunas opciones para que puedas practicar sin instalar nada:

💻 Opciones para usar una terminal:

⚠️ Recomendación Roxs: si vas en serio con DevOps, instalá una terminal real en tu máquina. ¡Te vas a sentir más poderoso y libre! 💪🐧


📦 Parte 1: Comandos Básicos de Linux que TODO DevOps debe dominar


🔥 Comandos TOP para DevOps

1. alias – Atajos para comandos

Crea alias para ahorrar tiempo:

alias ll='ls -lah --color=auto'  # Lista archivos con detalles  
alias ..='cd ..' # Sube un directorio
alias gs='git status' # Ver estado de Git

📌 Tip: Guárdalos en ~/.bashrc o ~/.zshrc para que sean permanentes.

2. whoami – ¿Quién soy?

whoami  # Muestra el usuario actual  

Útil en scripts para verificar permisos:

if [ "$(whoami)" != "root" ]; then  
echo "¡Error! Necesitas ser root."
exit 1
fi

3. ssh – Conexión remota segura

ssh usuario@servidor          # Conexión básica  
ssh -p 2222 usuario@servidor # Puerto personalizado
ssh -i ~/.ssh/mi_llave usuario@servidor # Usar clave privada

4. scp – Copiar archivos de forma segura

scp archivo.txt usuario@servidor:/ruta/  # Copiar un archivo  
scp -r carpeta/ usuario@servidor:/ruta/ # Copiar una carpeta (recursivo)

5. nc (Netcat) – El "navaja suiza" de redes

nc -zv servidor.com 80-100    # Escanear puertos  
nc -l 1234 > archivo_recibido # Recibir un archivo

6. ss – Estadísticas de sockets (reemplaza a netstat)

ss -tuln    # Ver puertos abiertos (TCP/UDP)  
ss -tunlp | grep nginx # Ver si Nginx está escuchando

7. systemctl – Gestión de servicios (systemd)

systemctl restart nginx    # Reiniciar Nginx  
systemctl status nginx # Ver estado
systemctl enable nginx # Activar en el arranque

8. service – Alternativa antigua (para sistemas init.d)

service apache2 restart   # Reiniciar Apache (en sistemas viejos)  

9. uptime – Tiempo de actividad del sistema

uptime  # Muestra: "16:12 up 20 days, load: 0.20, 0.18, 0.08"  

10. top / htop – Monitor en tiempo real

top     # Monitoreo básico (CPU, RAM, procesos)  
htop # Versión mejorada (colorida y más intuitiva)

📌 Tip: En top, presiona:

  • 1 → Ver todos los núcleos CPU.
  • m → Ordenar por uso de memoria.

🛠️ Comandos Avanzados (pero útiles)

11. ps – Listar procesos

ps aux | grep nginx  # Buscar procesos de Nginx  

12. journalctl – Ver logs de systemd

journalctl -u nginx  # Logs de Nginx  
journalctl -xe # Últimos logs críticos

13. ping – Probar conectividad

ping -c 5 google.com  # Hacer 5 pings a Google  

14. telnet – Probar puertos (¡pero usa nc mejor!)

telnet servidor.com 80  # Ver si el puerto 80 responde  

15. sed – Editar texto en stream

sed -i 's/old/new/g' archivo.conf  # Reemplazar "old" por "new"  

16. awk – Procesamiento de texto avanzado

awk '{print $1, $3}' access.log  # Extraer columnas 1 y 3  

17. grep – Buscar patrones en archivos

grep -r "ERROR" /var/log/  # Buscar "ERROR" en logs  

📂 Comandos por Categoría

Sistema de Archivos

df -hT       # Espacio en discos  
du -sh * # Tamaño de archivos/carpetas
tree -a # Estructura de directorios

Procesos

lsof -i :80       # Ver qué usa el puerto 80  
kill -9 PID # Matar proceso (¡cuidado!)

Paquetes (Ubuntu/Debian)

apt update && apt upgrade  # Actualizar todo  
apt install docker.io # Instalar Docker

Trucos de Terminal

comando1 && comando2   # Ejecuta comando2 SOLO si comando1 funciona  
comando1 || comando2 # Ejecuta comando2 SOLO si comando1 falla

🐧 Parte 2: El Sistema de Archivos de Linux


🌳 ¿Qué es el Filesystem Hierarchy Standard (FHS)?

Es el "mapa" que sigue Linux para organizar archivos. ¡Todos los distros lo usan!

📌 Key Point: En Linux, todo parte del directorio raíz / (no hay "C:" como en Windows).


🗂️ Estructura Básica: Directorios Clave

Directorio¿Qué contiene?Ejemplo Importante
/Raíz del sistema¡El punto de partida de todo!
/binComandos básicosls, cp, bash
/sbinComandos de admin (root)iptables, fdisk
/etcArchivos de configuración/etc/passwd, /etc/nginx/
/devDispositivos (discos, USB)/dev/sda1 (tu disco duro)
/homeDirectorios de usuarios/home/tu_usuario
/varDatos variables (logs, cachés)/var/log/nginx/
/tmpArchivos temporales(Se borra al reiniciar)
/bootArchivos de arranquevmlinuz (el kernel)
/optSoftware de terceros/opt/google/chrome/
/procInfo de procesos (virtual)/proc/cpuinfo
/usrAplicaciones y librerías/usr/bin/python3

🔍 Profundizando en Directorios Clave

1. /etc – El "panel de control" de Linux

📌 Aquí viven TODAS las configuraciones:

  • /etc/passwd: Usuarios del sistema.
  • /etc/fstab: Discos montados al iniciar.
  • /etc/ssh/sshd_config: Configuración de SSH.

2. /var – Donde Linux guarda lo que cambia

  • /var/log: Logs (¡tu mejor amigo para debuggear!).
  • /var/lib: Bases de datos (Ej: /var/lib/mysql/).
  • /var/www: Sitios web (en algunas distros).

3. /proc y /sys – El "cerebro" de Linux

  • Virtuales: No ocupan espacio en disco.
  • /proc/cpuinfo: Info del CPU.
  • /proc/meminfo: Uso de RAM.
  • /sys/class/net/: Config de red.

4. /home vs /root

  • /home/tu_usuario: Tus archivos (documentos, descargas).
  • /root: El "home" del admin (no confundir con /).

💽 Tipos de Filesystems en Linux

Tipo¿Para qué sirve?
ext4El estándar (equilibrado).
XFSAlto rendimiento (servidores).
BtrfsSnapshots y RAID moderno.
Swap"Memoria virtual" en disco.

📌 Comando útil: Ver discos y espacio

df -hT  # Espacio libre en human-readable  

🛠️ Herramientas para DevOps

1. Ver uso de disco

du -sh /var/log  # ¿Cuánto ocupan los logs?  
du -sh * | sort -h # Ordenar por tamaño

2. Buscar archivos grandes

find / -type f -size +100M  # Archivos >100MB  

3. Monitorear logs en tiempo real

tail -f /var/log/syslog  # ¡Como Netflix para logs!  

🚀 Conclusión

  • /etc: Configuraciones.
  • /var/log: Logs (¡aprende a leerlos!).
  • /proc y /sys: Diagnóstico del sistema.
  • df -h y du -sh: Tus aliados para espacio en disco.

🐧 Parte 3: Gestión de Usuarios y Permisos en Linux


¿Por qué debería importarte los usuarios y permisos?

Imagina tu sistema Linux como un gran castillo. Los usuarios son tus nobles invitados, cada uno con sus roles y responsabilidades. Los permisos son las llaves que dan acceso a diferentes áreas del castillo, protegiendo el tesoro (tus datos valiosos) de invasores (software malicioso o miradas indiscretas).

Sin una gestión adecuada, tu castillo podría caer en el caos.


El reparto: Usuarios, Grupos y Roles

Usuarios: Los habitantes de tu sistema

En Linux, cada persona (o script) que interactúa con el sistema es un usuario. Hay tres tipos principales:

  • Root (superusuario): El mago todopoderoso con acceso ilimitado. Úsalo con precaución: un hechizo mal lanzado (comando) puede convertir tu castillo en una calabaza.
  • Usuarios normales: Caballeros, damas y bufones con roles específicos y acceso limitado.
  • Usuarios del sistema: Los sirvientes invisibles que gestionan servicios y demonios. Normalmente no necesitan permisos de inicio de sesión.

Grupos: Formando tu comunidad

Los grupos son como gremios que agrupan usuarios según roles o proyectos. Por ejemplo, un grupo admin podría incluir a todos los usuarios que pueden realizar tareas administrativas.

Roles: Las responsabilidades asignadas

Asignar roles es como repartir tareas en una corte medieval. Puedes tener roles como desarrollador, tester o invitado, cada uno con permisos específicos.


Niveles de permisos: ¿Quién puede hacer qué?

Los permisos en Linux se dividen en tres tipos:

  • Lectura (r): Puede ver el contenido.
  • Escritura (w): Puede modificar o borrar el contenido.
  • Ejecución (x): Puede ejecutar el archivo como programa.

Estos permisos se asignan a tres categorías:

  1. Dueño (Owner): El usuario propietario del archivo.
  2. Grupo (Group): Miembros del grupo asignado al archivo.
  3. Otros (Others): Todos los demás.

El poderoso comando chmod

Para controlar los permisos, usamos chmod (change mode). ¡Es como tu varita mágica para configurar accesos!

Sintaxis:

chmod [opciones] modo archivo

Ejemplo:

chmod 755 mi_script.sh

Desglose de 755:

  • 7 (Dueño): Lectura + Escritura + Ejecución (rwx)
  • 5 (Grupo): Lectura + Ejecución (r-x)
  • 5 (Otros): Lectura + Ejecución (r-x)

Regla mnemotécnica:

  • 7 = 4 (r) + 2 (w) + 1 (x) = rwx
  • 5 = 4 (r) + 1 (x) = r-x

Cambiando la propiedad con chown

Si necesitas transferir la propiedad de un archivo o directorio, usa chown (change owner).

Sintaxis:

chown [opciones] nuevo_dueño:nuevo_grupo archivo

Ejemplo:

chown alice:desarrolladores codigo_proyecto.py

Este comando asigna la propiedad de codigo_proyecto.py al usuario alice y al grupo desarrolladores.


Creando y gestionando usuarios: ¡Hagamos nuevos personajes!

Añadir un nuevo usuario

sudo adduser juan_perez

Eliminar un usuario

sudo deluser juan_perez

Pro-tip: Si juan_perez dejó archivos regados por el castillo, bórralos también:

sudo deluser --remove-home juan_perez
# O también:
userdel -r juan_perez

Modificar un usuario

Para añadir juan_perez al grupo sudo (dándole poderes administrativos):

sudo usermod -aG sudo juan_perez

Otros ejemplos útiles:

# Cambiar directorio home
usermod -d /nuevo/home -m usuario

# Cambiar shell de inicio
usermod -s /bin/zsh usuario

# Renombrar usuario
usermod -l nuevo_nombre antiguo_nombre

# Bloquear/desbloquear cuenta
usermod -L usuario # Bloquea
usermod -U usuario # Desbloquea

Gestión de grupos: Reuniendo al equipo adecuado

Crear un nuevo grupo

sudo groupadd desarrolladores

Añadir usuarios a un grupo

sudo usermod -aG desarrolladores juan_perez

Ver miembros de un grupo

getent group desarrolladores

sudo: El poder de gobernar con responsabilidad

El comando sudo permite ejecutar comandos con privilegios de superusuario. ¡Es como darle a alguien la llave de la bóveda real!

Ejemplo:

sudo apt update

Configurar sudoers (editar con visudo):

sudo visudo

Ejemplo de entrada:

alice ALL=(ALL:ALL) ALL

(Esto le da a alice todos los permisos de sudo).


Errores comunes con permisos: Evitando las artes oscuras

El temido permiso 777

Dar permiso 777 a un archivo es como dejar las puertas del castillo abiertas durante un ataque de dragones. ¡Evítalo!

chmod 755 script_importante.sh  # Mejor opción

Confusión de propiedad

Revisa siempre los permisos con:

ls -l archivo.txt

Salida ejemplo:

-rw-r--r-- 1 alice desarrolladores 4096 oct 4 10:00 archivo.txt

(Aquí, alice es el dueño y desarrolladores el grupo).


Tips divertidos para dominar usuarios y permisos

Usa alias para ser más eficiente

Añade esto a tu .bashrc o .zshrc:

alias ll='ls -la'
alias gs='git status'

Aprovecha el poder de los grupos

Asigna permisos a grupos en lugar de a usuarios individuales. ¡Es más fácil de gestionar!

Audita permisos regularmente

Busca archivos con permisos peligrosos:

find / -type f -perm 0777

Principio de mínimo privilegio

Solo da los permisos necesarios. ¡Menos es más!


¡Sigue aprendiendo y no pierdas el humor!
¿Tienes preguntas, anécdotas divertidas de Linux o fails épicos en la terminal? ¡Déjalos en los comentarios!

Disclaimer: Ningún castillo real fue dañado en la creación de este material. Pero si intentas construir uno en Linux, ¡ve con cuidado!


🐧 Parte 4: 📦 Gestión de Paquetes en Linux


En Linux, el software se distribuye principalmente a través de paquetes, que contienen el programa, sus dependencias y metadatos (versión, mantenedor, etc.). Cada distribución usa su propio sistema de paquetes y gestores.


🔍 Formatos de Paquetes

FormatoDistribucionesEjemplo de Gestor
.debDebian, Ubuntu, Mintapt, dpkg
.rpmRHEL, Fedora, CentOSdnf, yum
.pkg.tar.zstArch Linux, Manjaropacman
.txzSlackwareslackpkg

💡 Nota: Los paquetes universales como .tar.gz requieren compilación manual.


🛠️ Gestores de Paquetes por Distribución

1. Debian/Ubuntu (APT)

# Actualizar lista de paquetes  
sudo apt update

# Instalar un programa
sudo apt install nginx

# Buscar paquetes
apt search python3

# Eliminar un paquete
sudo apt remove firefox

# Limpiar paquetes no usados
sudo apt autoremove

--

🔄 Comandos Esenciales

AcciónDebian/UbuntuRHEL/FedoraArch Linux
Actualizar reposapt updatednf check-updatepacman -Sy
Instalarapt installdnf installpacman -S
Eliminarapt removednf removepacman -R
Buscarapt searchdnf searchpacman -Ss
Ver detallesapt showdnf infopacman -Qi

🏗️ Instalación desde Código Fuente

Si no hay paquete disponible:

# 1. Descargar y extraer  
wget https://ejemplo.com/app.tar.gz
tar -xzvf app.tar.gz

# 2. Instalar dependencias
sudo apt build-dep .

# 3. Compilar e instalar
./configure
make
sudo make install

💡 Buenas Prácticas

  1. Usa repositorios oficiales para mayor seguridad.
  2. Evita sudo innecesario (solo para instalaciones globales).
  3. Mantén tu sistema actualizado:
    sudo apt update && sudo apt upgrade -y  
  4. Revisa dependencias antes de eliminar paquetes.

🚀 Caso Práctico: Instalar y Configurar Nginx

# Instalar  
sudo apt install nginx

# Iniciar servicio
sudo systemctl start nginx

# Verificar
curl localhost

Resultado esperado: Verás la página de bienvenida de Nginx.


🌍 Desplegando un "Hola Mundo" en Apache

Aprenderemos a configurar un servidor web Apache en Ubuntu/Debian y publicar una página HTML básica.


🛠️ Requisitos Previos

  • Máquina con Ubuntu/Debian (física o virtual)
  • Acceso a terminal con permisos de sudo

🔄 Paso 1: Actualizar el Sistema

sudo apt update && sudo apt upgrade -y

¿Por qué?
Asegura que todos los paquetes estén actualizados antes de instalar nuevos servicios.


🚀 Paso 2: Instalar Apache

sudo apt install apache2 -y

Verificación:

sudo systemctl status apache2

✅ Debes ver active (running) en verde.


📂 Paso 3: Crear la Página Web

  1. Navega al directorio raíz de Apache:
cd /var/www/html
  1. Crea un archivo index.html:
sudo nano index.html
  1. Inserta este código HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>¡DevOps en Acción!</title>
<style>
body { font-family: Arial, sans-serif; text-align: center; margin-top: 50px; }
h1 { color: #2c3e50; }
.logo { width: 150px; }
</style>
</head>
<body>
<img src="https://git-scm.com/images/logos/downloads/Git-Logo-1788C.png" alt="Git Logo" class="logo">
<h1>¡Hola Mundo DevOps!</h1>
<p>Servidor Apache funcionando correctamente</p>
<p>🛠️ Próximos pasos: Configurar HTTPS y un reverse proxy</p>
</body>
</html>

🔒 Paso 4: Configurar Permisos

sudo chown www-data:www-data /var/www/html/index.html
sudo chmod 644 /var/www/html/index.html

Explicación:

  • www-data: Usuario por defecto de Apache
  • 644: Permisos de lectura para todos y escritura solo para el dueño

🌐 Paso 5: Acceder al Sitio

  1. Localmente:
    Abre tu navegador en http://localhost

  2. Remotamente:
    Usa la IP pública de tu servidor:

curl ifconfig.me  # Para obtener tu IP pública

Luego visita http://<TU_IP>


🚨 Solución de Problemas Comunes

❌ Error 403 Forbidden

sudo chmod 755 /var/www/html/

❌ Apache no inicia

Revisa logs con:

sudo journalctl -u apache2 --no-pager -n 20

📌 Buenas Prácticas

  1. Eliminar la página por defecto:
sudo rm /var/www/html/index.html  # Si existe una versión por defecto
  1. Habilitar firewall:
sudo ufw allow 80/tcp
  1. Próximos pasos:
    • Configurar dominio con DNS
    • Añadir certificado SSL (Let's Encrypt)

🎓 Reto Adicional

Modifica la página para mostrar:

  • La hora del servidor (usa JavaScript)
  • El resultado del comando uptime (requiere CGI)
<script>
document.write("Hora del servidor: " + new Date().toLocaleString());
</script>

📚 Tarea Opcional del Día 2

Hoy activamos modo terminal: vas a explorar, crear, modificar y proteger archivos como toda persona DevOps debe saber hacer. 🐧💻


🛠️ 1. Exploración básica

  • Abrí la terminal y ejecutá estos comandos. Luego anotá qué hace cada uno:

    whoami
    pwd
    ls -lah
    df -hT
    uptime
  • Navegá por los directorios clave del sistema:

    cd /
    ls
    cd /etc && ls
    cd /home && ls

📂 2. Crea y manipulá archivos

  • Creá una carpeta llamada dia2-devops

    mkdir ~/dia2-devops && cd ~/dia2-devops
  • Creá un archivo de prueba y escribile contenido:

    echo "Hola Roxs DevOps!" > saludos.txt
  • Copialo, renombralo y eliminá uno:

    cp saludos.txt copia.txt
    mv copia.txt hola.txt
    rm saludos.txt

👥 3. Usuarios y permisos

  • Creá un nuevo usuario en el sistema (si estás en Linux real o WSL):

    sudo adduser invitado
  • Creá un grupo y asigná ese usuario:

    sudo groupadd roxsdevs
    sudo usermod -aG roxsdevs invitado
  • Cambiá los permisos de un archivo para que:

    • El dueño pueda leer/escribir/ejecutar
    • El grupo solo leer
    • Otros, nada
    chmod 740 hola.txt
    ls -l hola.txt

🔐 4. Buscá archivos con permisos peligrosos

  • Esto es oro puro en producción:

    find / -type f -perm 0777 2>/dev/null

🧠 5. Reto de comprensión

  • ¿Qué hace este comando?:

    chmod u=rwx,g=rx,o= hola.txt

    Explicalo con tus palabras.


📸 6. Bonus: Compartí tu terminal

Subí una captura con el resultado de estos comandos o mostrá tu carpeta dia2-devops armada con:

tree ~/dia2-devops

Usá el hashtag #DevOpsConRoxs o compartilo en el canal de la comunidad. 🎯