Comandos Básicos de Linux 3
Bloques 8–10: Procesos · Red básica · Redirecciones y tuberías
08 Procesos
En Linux, cada programa en ejecución es un proceso. El sistema operativo asigna a cada proceso un identificador único llamado PID (Process ID). Saber gestionar los procesos es esencial para controlar qué está haciendo el sistema en cada momento.
8.1 ps — Listar procesos
El comando ps (Process Status) muestra una instantánea de los procesos que están corriendo en el sistema en el momento de ejecutarlo.
Sintaxis: ps [opciones]
| Uso | Descripción |
|---|---|
| ps | Muestra solo los procesos de la sesión actual |
| ps aux | Muestra TODOS los procesos del sistema (formato BSD) |
| ps -ef | Muestra TODOS los procesos en formato completo (estilo Unix) |
| ps -u usuario | Muestra los procesos de un usuario concreto |
| ps -p PID | Muestra información de un proceso concreto por su PID |
Columnas de la salida de ps aux
| Columna | Descripción |
|---|---|
| USER | Usuario propietario del proceso |
| PID | Identificador único del proceso |
| %CPU | Porcentaje de CPU que consume |
| %MEM | Porcentaje de memoria RAM que consume |
| STAT | Estado: R=corriendo, S=dormido, Z=zombie… |
| COMMAND | Comando que inició el proceso |
$ ps aux → todos los procesos del sistema
$ ps aux | grep firefox → busca el proceso de Firefox
$ ps -u alumno → procesos del usuario alumno
$ ps -p 1234 → info del proceso con PID 1234
ps aux | grep nombre es la forma más habitual de localizar el PID de un proceso concreto para después actuar sobre él.8.2 top y htop — Monitor de procesos en tiempo real
A diferencia de ps, top y htop muestran los procesos actualizándose continuamente, como un monitor de actividad en tiempo real.
top
| Tecla | Acción dentro de top |
|---|---|
| q | Sale de top |
| k | Mata un proceso (pide el PID) |
| r | Cambia la prioridad de un proceso (renice) |
| M | Ordena por uso de memoria |
| P | Ordena por uso de CPU (por defecto) |
| u | Filtra por usuario |
| 1 | Muestra el uso individual de cada núcleo de CPU |
| h | Muestra la ayuda |
htop (versión mejorada de top)
htop es una versión mejorada y más visual de top. Muestra barras de color para CPU y RAM, permite usar el ratón y es más fácil de usar. Puede que necesites instalarlo primero.
$ htop → lanza el monitor
| Tecla | Acción dentro de htop |
|---|---|
| F3 / / | Busca un proceso por nombre |
| F4 | Filtra procesos |
| F5 | Vista de árbol (muestra procesos padre-hijo) |
| F6 | Cambia el criterio de ordenación |
| F9 | Matar proceso (muestra señales disponibles) |
| F10 / q | Sale de htop |
htop es mucho más cómodo que top. Si no está instalado en tu sistema, instálalo: lo usarás constantemente.8.3 kill y killall — Terminar procesos
Cuando un proceso se queda bloqueado o queremos detenerlo, usamos kill (por PID) o killall (por nombre). En realidad, estos comandos envían señales al proceso.
Señales más importantes
| Señal | Descripción |
|---|---|
| SIGTERM (15) | Pide al proceso que termine de forma ordenada (por defecto) |
| SIGKILL (9) | Fuerza la terminación inmediata. El proceso no puede ignorarla |
| SIGHUP (1) | Hace que el proceso relea su configuración (reinicio suave) |
kill — Terminar por PID
Sintaxis: kill [señal] PID
$ kill -9 1234 → fuerza el cierre del proceso 1234
$ kill -15 1234 → equivalente al kill sin señal
$ kill -SIGKILL 1234 → igual que kill -9
killall — Terminar por nombre
Sintaxis: killall [opciones] nombre_proceso
$ killall -9 firefox → fuerza el cierre de Firefox
$ killall -u alumno → termina todos los procesos del usuario alumno
kill (SIGTERM) antes de recurrir a kill -9 (SIGKILL). SIGTERM permite al proceso guardar datos y cerrar limpiamente; SIGKILL no da esa oportunidad.8.4 Procesos en segundo plano
Linux permite ejecutar procesos en segundo plano (background) para poder seguir usando la terminal mientras el proceso corre.
| Operador / Comando | Descripción |
|---|---|
| comando & | Lanza el comando en segundo plano desde el inicio |
| Ctrl + Z | Pausa el proceso actual y lo manda al fondo |
| bg | Reanuda en segundo plano el proceso pausado |
| fg | Trae el proceso de fondo al primer plano |
| jobs | Lista los procesos en segundo plano de la sesión actual |
[1] 5678 → [número de trabajo] PID asignado
$ jobs → lista trabajos en segundo plano
[1]+ Ejecutando sleep 100 &
$ fg 1 → trae el trabajo 1 al primer plano
$ bg 1 → reanuda en background el trabajo 1
nohup comando & permite que el proceso siga corriendo aunque cerremos la terminal. Muy útil para tareas largas en servidores.09 Red básica
Linux incluye herramientas muy potentes para diagnosticar y gestionar conexiones de red. Conocerlas es fundamental tanto para administrar sistemas como para resolver problemas de conectividad.
9.1 ping — Comprobar conectividad
El comando ping envía paquetes ICMP a un host para comprobar si está accesible y medir el tiempo de respuesta. Es la primera herramienta de diagnóstico de red.
Sintaxis: ping [opciones] host
| Opción | Descripción |
|---|---|
| -c N | Envía solo N paquetes (sin esto, ping no para) |
| -i N | Intervalo en segundos entre paquetes (por defecto 1s) |
| -t N | TTL (Time To Live): número máximo de saltos en la red |
| -s N | Tamaño del paquete en bytes |
| -q | Modo silencioso: solo muestra el resumen final |
$ ping -c 4 google.com → envía exactamente 4 paquetes
$ ping -c 4 192.168.1.1 → comprueba si el router responde
$ ping -c 3 -i 0.5 google.com → 3 paquetes con 0.5s de intervalo
$ ping -c 3 google.com
PING google.com (142.250.185.46): 56 bytes de datos
64 bytes de 142.250.185.46: icmp_seq=0 ttl=118 time=12.4 ms
64 bytes de 142.250.185.46: icmp_seq=1 ttl=118 time=11.8 ms
64 bytes de 142.250.185.46: icmp_seq=2 ttl=118 time=12.1 ms
— google.com estadísticas de ping —
3 paquetes transmitidos, 3 recibidos, 0% pérdida de paquetes
ping no funciona hacia internet pero sí hacia el router (192.168.1.1), el problema es del proveedor o la conexión exterior, no de tu equipo.9.2 ip e ifconfig — Ver la configuración de red
Estos comandos muestran y gestionan las interfaces de red del sistema: direcciones IP, máscaras de subred, estado de las interfaces, etc.
ip — Moderno y recomendado
Sintaxis: ip [opciones] objeto comando
| Comando | Descripción |
|---|---|
| ip a | Muestra todas las interfaces y sus direcciones IP |
| ip a show eth0 | Muestra solo la interfaz eth0 |
| ip r | Muestra la tabla de rutas |
| ip link | Muestra el estado de las interfaces (up/down) |
| ip link set eth0 up | Activa la interfaz eth0 |
| ip link set eth0 down | Desactiva la interfaz eth0 |
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP>
inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
inet6 fe80::1/64 scope link
ifconfig — Comando clásico
$ ifconfig eth0 → muestra solo eth0
$ sudo ifconfig eth0 up → activa la interfaz
$ sudo ifconfig eth0 down → desactiva la interfaz
ip es el comando moderno y recomendado. ifconfig pertenece al paquete net-tools, que ya no viene instalado por defecto en muchas distribuciones.9.3 curl — Transferir datos por red
curl (Client URL) permite hacer peticiones a servidores web y APIs, descargar archivos, enviar datos y mucho más. Es una herramienta indispensable para trabajar con servicios web.
Sintaxis: curl [opciones] URL
| Opción | Descripción |
|---|---|
| -o archivo | Guarda la respuesta en un archivo con ese nombre |
| -O | Guarda con el nombre original del archivo remoto |
| -L | Sigue redirecciones HTTP automáticamente |
| -I | Muestra solo las cabeceras HTTP de la respuesta |
| -X metodo | Especifica el método HTTP: GET, POST, PUT, DELETE… |
| -d ‘datos’ | Envía datos en el cuerpo de la petición (POST) |
| -H ‘cabecera’ | Añade una cabecera HTTP personalizada |
| -u user:pass | Autenticación básica HTTP |
| -s | Modo silencioso: no muestra progreso ni errores |
| -v | Modo verbose: muestra todos los detalles de la conexión |
$ curl -O https://ejemplo.com/archivo.zip
$ curl -o mi_nombre.zip https://ejemplo.com/archivo.zip
# Ver cabeceras de una web
$ curl -I https://www.google.com
# Consultar una API
$ curl https://api.example.com/usuarios
# Enviar datos (POST)
$ curl -X POST -d ‘nombre=Juan&edad=17’ https://api.example.com/registro
# Con cabecera de autenticación
$ curl -H ‘Authorization: Bearer TOKEN’ https://api.example.com/datos
# Seguir redirecciones
$ curl -L https://bit.ly/enlace-corto
curl es fundamental para trabajar con APIs REST. Cualquier petición que hagas desde un navegador puedes replicarla y automatizarla con curl.9.4 wget — Descargar archivos de internet
wget está especializado en la descarga de archivos y páginas web. A diferencia de curl, es más sencillo para descargas y soporta reanudar descargas interrumpidas.
Sintaxis: wget [opciones] URL
| Opción | Descripción |
|---|---|
| -O archivo | Guarda con el nombre indicado |
| -c | Continúa una descarga interrumpida |
| -q | Modo silencioso |
| -r | Descarga recursiva (sigue enlaces) |
| -P directorio | Guarda en el directorio indicado |
| –limit-rate=N | Limita la velocidad de descarga (ej: 500k) |
$ wget -O linux.iso https://ejemplo.com/ubuntu.iso → con nombre propio
$ wget -c https://ejemplo.com/archivo.iso → reanuda descarga
$ wget -P /home/alumno/descargas/ https://ejemplo.com/doc.pdf
wget para descargar archivos de forma sencilla, y curl cuando necesites interactuar con APIs o controlar los detalles de la petición HTTP.10 Redirecciones y tuberías
Una de las características más potentes de Linux es la capacidad de encadenar comandos y redirigir la entrada y salida de datos. Esto permite crear combinaciones muy poderosas a partir de comandos simples.
Primero es importante entender que en Linux cada proceso tiene tres flujos de datos estándar:
| Flujo | Descripción |
|---|---|
| stdin (0) | Entrada estándar: por donde el proceso recibe datos (teclado por defecto) |
| stdout (1) | Salida estándar: por donde el proceso muestra resultados (pantalla por defecto) |
| stderr (2) | Salida de error: por donde se muestran los mensajes de error (pantalla por defecto) |
10.1 > y >> — Redirigir la salida a un archivo
El operador > redirige la salida de un comando a un archivo en lugar de mostrarla en pantalla. Si el archivo ya existe, lo sobreescribe. El operador >> añade al final sin borrar el contenido previo.
comando > archivo → redirige stdout al archivo (sobreescribe)
comando >> archivo → añade stdout al final del archivo
comando 2> archivo → redirige solo stderr al archivo
comando 2>> archivo → añade stderr al archivo
comando > archivo 2>&1 → redirige stdout y stderr al mismo archivo
comando &> archivo → forma corta de redirigir stdout y stderr juntos
$ ls -l > listado.txt → guarda el listado en listado.txt
$ date > fecha_actual.txt → guarda la fecha actual en un archivo
# Añadir sin sobreescribir
$ echo ‘Entrada 1’ > registro.txt
$ echo ‘Entrada 2’ >> registro.txt → añade al final
$ cat registro.txt
Entrada 1
Entrada 2
# Redirigir errores
$ ls /ruta/inexistente 2> errores.txt → guarda el error en un archivo
$ ls /ruta/inexistente 2> /dev/null → descarta el error (lo ‘silencia’)
# Redirigir todo (salida + errores)
$ comando_largo &> log_completo.txt
/dev/null es un dispositivo especial que descarta todo lo que se le envíe. Se usa habitualmente para silenciar errores o salidas no deseadas.10.2 < — Redirigir la entrada desde un archivo
El operador < hace que un comando lea su entrada desde un archivo en lugar del teclado.
Sintaxis: comando < archivo
$ wc -l < documento.txt → cuenta las líneas de documento.txt
$ mail [email protected] < mensaje.txt → envía un email desde un archivo
Heredoc (<<) — Escribir texto multilínea
El heredoc permite introducir varias líneas de texto directamente en la terminal hasta encontrar la palabra clave final.
> Esta es la primera línea
> Esta es la segunda línea
> EOF
$ cat mi_archivo.txt
Esta es la primera línea
Esta es la segunda línea
10.3 | — La tubería (pipe)
El operador | (tubería o pipe) conecta la salida de un comando directamente con la entrada del siguiente. Es uno de los conceptos más poderosos de Linux: construir herramientas complejas encadenando comandos simples.
Sintaxis: comando1 | comando2 | comando3 …
$ ls -la /etc | less → navega por el listado de /etc
# Filtrar resultados
$ ps aux | grep firefox → busca el proceso de Firefox
$ cat /etc/passwd | grep alumno → busca el usuario alumno
# Contar resultados
$ ls /etc | wc -l → cuenta los archivos en /etc
$ ps aux | grep -c python → cuántos procesos python hay
# Ordenar y eliminar duplicados
$ cat nombres.txt | sort → ordena el contenido
$ cat nombres.txt | sort | uniq → ordena y elimina duplicados
Comandos de apoyo más usados con tuberías
| Comando | Descripción |
|---|---|
| wc -l | Cuenta el número de líneas de la entrada |
| wc -w | Cuenta el número de palabras |
| sort | Ordena las líneas alfabéticamente |
| sort -n | Ordena numéricamente |
| sort -r | Ordena en orden inverso |
| uniq | Elimina líneas duplicadas consecutivas (usar tras sort) |
| head -n N | Muestra las N primeras líneas |
| tail -n N | Muestra las N últimas líneas |
| cut -dX -fN | Extrae el campo N usando X como delimitador |
| tr ‘a’ ‘b’ | Reemplaza caracteres (transliterar) |
| tee archivo | Muestra la salida en pantalla Y la guarda en archivo a la vez |
Ejemplos avanzados combinados
$ du -sh /var/* | sort -rh | head -5
# Los 3 usuarios con más procesos activos
$ ps aux | awk ‘{print $1}’ | sort | uniq -c | sort -rn | head -3
# Buscar una palabra en varios archivos y guardar resultado
$ grep -r ‘error’ /var/log/ | grep -v ‘debug’ > errores.txt
# Ver y guardar al mismo tiempo con tee
$ ls -la | tee listado.txt
# Contar cuántas líneas contienen ‘error’ en el log
$ cat /var/log/syslog | grep ‘error’ | wc -l
10.4 Operadores de control de flujo
Además de las redirecciones, existen operadores que permiten ejecutar comandos de forma condicional según el resultado del anterior.
| Operador | Descripción |
|---|---|
| cmd1 && cmd2 | Ejecuta cmd2 SOLO si cmd1 tuvo éxito (código de salida 0) |
| cmd1 || cmd2 | Ejecuta cmd2 SOLO si cmd1 falló (código de salida distinto de 0) |
| cmd1 ; cmd2 | Ejecuta cmd2 siempre, independientemente del resultado de cmd1 |
$ mkdir proyecto && cd proyecto → entra solo si se creó bien
$ apt update && apt upgrade → actualiza solo si la lista se descargó bien
# || : el segundo se ejecuta solo si el primero falló
$ ping -c1 google.com || echo ‘Sin conexión’
# ; : el segundo se ejecuta siempre
$ cd /tmp ; ls → va a /tmp y lista su contenido pase lo que pase
# Combinados
$ mkdir carpeta && echo ‘Creada correctamente’ || echo ‘Error al crear’
$? puedes ver el código de salida del último comando ejecutado.