Unidad 5. Comandos básicos de Bash y monitoreo de recursos
Comandos básicos de Bash (Exploración de datos)
En bioinformática, gran parte del trabajo consiste en inspeccionar archivos de texto masivos (como archivos FASTQ o tablas de abundancia) sin abrirlos completamente para no saturar la memoria RAM.
echo: Imprime texto en la terminal o redirige mensajes a archivos.
echo "Inicio de ensamble" > bitacora.txt
echo "Paso 2: alineamiento" >> bitacora.txt
>sobrescribe y>>agrega al final
cat: Muestra todo el contenido de un archivo. Cuidado: No usar con archivos de secuenciación gigantes.
cat metadatos.csv- `tail`: Muestra las últimas líneas de un archivo (por defecto 10).
tail error.log
tail -n 20 error.logIdeal para logs: “¿qué fue lo último que pasó?”
grep: El buscador de patrones más potente.
El comando grep (Global Regular Expression Print) es, posiblemente, la herramienta de filtrado más importante para un bioinformático.
Aquí tienes los ejemplos más útiles, clasificados por su aplicación en el análisis de datos y administración de servidores:
Filtros Esenciales (Los más usados)
- Buscar un patrón exacto:
grep "Homo sapiens" anotaciones.txtUso: Extraer solo las líneas que contienen una especie específica.
- Búsqueda insensible a mayúsculas (-i):
grep -i "atp6" genes.fasta- Contar coincidencias (-c):
grep -c "^@" lecturas.fastqUso: Cuenta cuántas lecturas (reads) hay en un archivo FASTQ (buscando el símbolo @ al inicio de línea).
- Invertir la búsqueda (-v):
grep -v "Unclassified" taxonomia.tsvUso: Limpia tus datos eliminando todas las líneas que digan “Unclassified”.
- Buscar recursivamente e indicar en que línea esta (-rn):
grep -rn "texto_a_buscar" /home/mauricioBúsquedas Avanzadas y Expresiones Regulares
- Buscar al inicio de la línea (^):
grep "^>" genoma.fastaUso: Extraer únicamente los encabezados (headers) de un archivo FASTA.
- Buscar al final de la línea ($):
grep "STOP$" secuencias.txtUso: Filtrar secuencias que terminan con un codón de paro específico.
Contexto de la coincidencia (Visualización)
A veces no solo quieres la línea encontrada, sino lo que hay alrededor (muy útil para archivos GFF o de anotación):
- Ver líneas posteriores (-A de After):
grep -A 3 "chr1" anotacion.gff Muestra la línea y las 3 siguientes
- Ver líneas anteriores (-B de Before):
grep -B 2 "ERROR" pipeline.log Muestra el error y las 2 líneas previas para saber qué causó el fallo
- Ver ambos lados (-C de Context):
grep -C 1 "COX1" mitocondria.gbkMuestra la línea de COX1 con una línea arriba y una abajo
Monitoreo de recursos y rendimiento
Cuando corremos alineamientos o ensambles, es vital saber si el hardware está siendo utilizado correctamente o si nos estamos quedando sin recursos.
Monitoreo de CPU y RAM
top/htop: Muestran los procesos en tiempo real. htop es la versión interactiva y visual recomendada.- Uso: Identificar si un proceso de BLAST está consumiendo el 100% del CPU.
free: Muestra el estado de la memoria RAM (total, usada y libre).- Uso: free -h (formato legible para humanos).
Monitoreo de Almacenamiento y Red
df/du:df -h: Espacio disponible en los discos duros del servidor.du -sh carpeta/: Tamaño total que ocupa una carpeta de datos específica.
netstat/tcpdump: Para monitorear el tráfico de red y conexiones activas.
sudo nestat -ntlp # nos dice que programas están usando que puertosPara saber si realmente hay conexión durante una descarga
sudo tcpdump -i any host 130.14.29.110
sudo tcpdump -A -i any -c 10iotop/iostat: Monitorean la velocidad de lectura/escritura en el disco (E/S). Esencial si el sistema se siente lento al leer archivos grandes.lsblk-e 7 nos lista los discos que tenemos de entrada salida que tenemos para monitorizar cada disco:
Trabajar con procesos
Un proceso es un programa en ejecución. A veces necesitamos gestionarlos manualmente si se quedan “trabados”.
ps: Lista los procesos actuales del usuario.- Uso:
ps aux | grep "samtools"para encontrar el ID (PID) de una tarea específica.
- Uso:
kill: Detiene un proceso forzosamente usando su PID.- Uso:
kill -9 1234(el -9 es una terminación inmediata y definitiva).
- Uso:
niceyrenice: Ajusta la prioridad de un proceso.Uso: Si vas a correr un análisis pesado pero no quieres que el servidor se vuelva lento para los demás, usa
nicepara darle una prioridad baja.nicees cuando se ejecuta,renicecuando ya se inició y requiere elpid
nice -n 15 blastn -query seq.fa -db nt -out resultados.txt
renice +10 -p 8420| Valor Nice | Nivel de Prioridad | Uso Típico en Biocómputo |
|---|---|---|
| -20 | Máxima | Procesos críticos del sistema operativo (Kernel). |
| -10 a -1 | Alta | Tareas en tiempo real que no pueden tener lag. |
| 0 | Normal | Ejecución estándar de comandos, navegadores, editores. |
| 10 | Baja | Scripts de Python o R que tardan varias horas. |
| 19 | Mínima | Procesos de fondo que no tienen prisa (ej. copias de seguridad). |
Ejemplo de flujo de trabajo real: “El Servidor Lento”
Imagina que el servidor BEAGLE del Instituto de Biología responde muy lento mientras trabajas:
Diagnóstico rápido: Ejecutas
htopy ves que un proceso llamadobwaestá al 100%.Revisar RAM: Ejecutas
free -hy notas que casi no queda memoriaSwap.Identificar culpable: Usas
ps aux | grep bwapara obtener el ID del proceso (ej. 5560).Acción: Si el proceso es tuyo y se trabó, lo detienes con
kill 5560. Si quieres que siga pero consuma menos, usasrenice.