Juan Diego Andrés PRADA··RAMÍREZ Entrar
Lección 4 de 7
Contenido de la lección 11 tramos

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.

¿Le sirvió esta lección?

Sirve para saber qué reescribir. Se puede cambiar cuando quiera.

0 votos
Sin nombre todavía

Su avance y su nombre se guardan en este navegador. No hace falta registrarse.

¿Va por el certificado?

Practicar y comentar no exige nada. Para el certificado sí hace falta verificar el correo, el nombre completo, la institución, el grado, porque el certificado dice quién es usted.

Comentarios (0)

Pregunte lo que no entendió. Alguien más tiene la misma duda y no se atreve.

  • Todavía no hay comentarios. Estrene usted.