Juan Diego Andrés PRADA··RAMÍREZ Entrar
Lección 4 de 7

Permisos y procesos

¿Qué es?

Esta lección trata de dos cosas que todo sistema Unix controla a la vez: los permisos (quién puede leer, modificar o ejecutar cada archivo) y los procesos (qué programas están corriendo en tu máquina en este momento). Los permisos son las reglas de acceso que el sistema asocia a cada archivo y carpeta. Un proceso es simplemente un programa en ejecución, identificado por un número llamado PID. Entender ambos te quita el miedo a los mensajes «Permission denied» y al comando sudo.

¿Cómo funciona?

Cada archivo guarda tres permisos (leer, escribir, ejecutar) para tres clases de usuario (dueño, grupo y otros); los lees con ls -l y los cambias con chmod, ya sea en notación simbólica (u+x) o numérica (755). sudo ejecuta una sola orden con poderes de administrador, no es un modo permanente. Para los procesos, los ves con ps o top, los mandas a segundo plano con &, y los detienes enviándoles señales con Ctrl+C, kill o, en último recurso, kill -9.

¿Para qué sirve?

Sin permisos de ejecución, ningún script funciona: por eso esta lección termina haciendo ejecutable tu primer archivo con chmod u+x, exactamente el paso que repetirás en cada herramienta de tu proyecto final «Tu kit de automatización personal». Saber gestionar procesos te permitirá lanzar tus automatizaciones en segundo plano, vigilarlas y detenerlas con seguridad. Y controlar permisos protege tus secretos, como las claves SSH que tu kit usará para conectarse a otras máquinas.

Esta lección cubre dos pilares de cualquier sistema Unix: quién puede hacer qué con cada archivo (permisos) y qué se está ejecutando en tu máquina (procesos). Entenderlos te quita el miedo a sudo, te explica los "Permission denied" y te prepara para que tus scripts sean ejecutables.

Leer los permisos

Ejecuta ls -l y mira la primera columna:

ls -l
# -rwxr-xr-- 1 ana staff 2048 Jun 22 10:00 script.sh
# │└┬┘└┬┘└┬┘
# │ │ │ └── otros (resto del mundo): r--
# │ │ └───── grupo: r-x
# │ └──────── dueño (ana): rwx
# └────────── tipo: - archivo, d directorio, l enlace

Cada terna son tres permisos: r (read, leer), w (write, escribir/modificar) y x (execute, ejecutar). Se aplican a tres clases: dueño (user), grupo (group) y otros (others). En el ejemplo, Ana puede leer/escribir/ejecutar; su grupo puede leer y ejecutar; los demás solo leer.

En un directorio, x no significa "ejecutar" sino "poder entrar" (hacer cd y atravesarlo). Sin x en una carpeta, no puedes acceder a su contenido aunque tengas r.

Cambiar permisos con chmod

Hay dos notaciones. La simbólica es legible:

chmod u+x script.sh # dar ejecución al dueño (u)
chmod g-w archivo.txt # quitar escritura al grupo (g)
chmod o-r secreto.txt # quitar lectura a otros (o)
chmod a+r publico.txt # dar lectura a todos (a = all)

La octal es compacta. Cada permiso vale un número: r=4, w=2, x=1. Se suman por clase:

chmod 755 script.sh # rwx (7) para dueño, r-x (5) para grupo y otros
chmod 644 datos.txt # rw- (6) dueño, r-- (4) grupo y otros
chmod 600 ~/.ssh/id_ed25519 # solo el dueño lee/escribe (claves privadas)

755 para programas/scripts y carpetas; 644 para archivos de datos normales; 600 para secretos (claves SSH, tokens). SSH rechaza una clave privada con permisos demasiado abiertos.

Dueño, grupo y sudo

whoami # qué usuario soy
id # mi uid, gid y grupos
chown ana archivo.txt # cambiar dueño (requiere sudo)
chown ana:staff archivo.txt # cambiar dueño y grupo

sudo ejecuta un comando como administrador (root). No es un modo en el que te quedas; es un permiso puntual.

sudo apt update # Linux: actualizar índices de paquetes
sudo systemctl restart nginx # Linux: reiniciar un servicio

sudo es poder total: puede romper el sistema. Nunca pegues a ciegas un sudo que copiaste de internet sin entender qué hace. En macOS no existe apt; usa Homebrew (brew), que normalmente no necesita sudo. Desconfía de cualquier guía de macOS que te pida sudo brew.

Ver y controlar procesos

Un proceso es un programa en ejecución, identificado por su PID (process id).

ps aux # listado completo de procesos
ps aux | grep node # filtrar los que tienen "node"
top # monitor en vivo (q para salir)
htop # versión mejorada (instálala: brew install htop)

En macOS también tienes la app Monitor de Actividad, pero en la terminal es más rápido filtrar con ps ... | grep.

Primer y segundo plano; señales

Un comando en primer plano (foreground) bloquea tu terminal hasta que termina. Puedes mandarlo a segundo plano (background):

./servidor.sh & # lanzar en segundo plano (& al final)
jobs # ver trabajos en segundo plano de esta sesión
fg %1 # traer el trabajo 1 al primer plano
Ctrl + Z # pausar el proceso actual
bg # reanudarlo en segundo plano

Para terminar procesos se envían señales:

Ctrl + C # enviar SIGINT: pedir que termine (lo normal)
kill 12345 # pedir amablemente al PID 12345 que termine (SIGTERM)
kill -9 12345 # SIGKILL: forzar (último recurso, no limpia nada)
pkill -f "servidor.sh" # matar por nombre/patrón del comando

kill -9 es un martillazo: el proceso muere sin guardar ni cerrar archivos. Úsalo solo cuando un kill normal no responda.

Ejemplo guiado: hacer ejecutable tu primer script

Conectemos permisos y ejecución con lo que viene en el curso.

# 1. Crea un script mínimo
printf '#!/usr/bin/env bash\necho "Hola desde mi kit"\n' > saludo.sh

# 2. Mira sus permisos: NO tiene x
ls -l saludo.sh
# -rw-r--r-- 1 ana staff ... saludo.sh

# 3. Intentar ejecutarlo falla
./saludo.sh
# zsh: permission denied: ./saludo.sh

# 4. Dale permiso de ejecución al dueño
chmod u+x saludo.sh
ls -l saludo.sh
# -rwxr--r-- ... saludo.sh <- ahora hay x

# 5. Ahora sí corre
./saludo.sh
# Hola desde mi kit

La primera línea #!/usr/bin/env bash (el shebang) le dice al sistema con qué intérprete ejecutar el archivo. Sin x, el shebang no sirve de nada; con x pero sin shebang, el sistema no sabe cómo interpretarlo. Ambos hacen falta, y los usarás en cada script de tu kit de automatización.

Tech English: permissions (permisos), owner (dueño), execute (ejecutar), process (proceso), PID (identificador de proceso), signal (señal), foreground/background (primer/segundo plano), shebang (la línea #!).

Ejercicios

  1. Traduce permisos. Sin ejecutar chmod, escribe la notación octal equivalente a estos casos y justifica cada dígito: (a) el dueño puede todo, el grupo lee y ejecuta, otros nada; (b) todos pueden leer, solo el dueño escribe; (c) una clave privada que solo el dueño puede leer y escribir. Luego escribe el chmod simbólico equivalente para el caso (a).

  2. Diagnostica un proceso colgado. Tienes un script procesar.sh que se quedó pegado consumiendo CPU y no responde a Ctrl + C (porque corre en segundo plano). Describe, paso a paso y con los comandos exactos, cómo lo localizarías por su nombre, obtendrías su PID, intentarías terminarlo de forma limpia y, solo si no responde, lo forzarías. Explica por qué ese orden y no al revés.

Tu progreso se guarda en este navegador. Inicia sesión para guardarlo en tu cuenta y verlo desde cualquier dispositivo.