class: center, middle, inverse, title-slide .title[ # Introducción a la Bioinformática ] .institute[ ### Licenciatura en Ciencias Genómicas,UNAM ] --- <style type="text/css"> /* From https://github.com/yihui/xaringan/issues/147 */ .scroll-output { height: 80%; overflow-y: scroll; } /* https://stackoverflow.com/questions/50919104/horizontally-scrollable-output-on-xaringan-slides */ pre { max-width: 100%; overflow-x: scroll; } </style> ## 🎯 Objetivo .content-box-yellow[ El participante comprenderá los conceptos fundamentales de conexión a internet, protocolos de comunicación, sistemas operativos y formas de interacción (GUI y CLI), de manera que pueda establecer conexiones remotas a servidores mediante el protocolo SSH y ejecutar sus primeros comandos en un sistema tipo Unix aplicados a la bioinformática. ] ##### 🎯 Objetivos específicos de la sección .tiny[ Al finalizar la sección, el participante será capaz de: - Identificar los recursos necesarios para conectarse a internet y trabajar con sistemas remotos en bioinformática. - Distinguir las características y diferencias entre los sistemas operativos y sus formas de interacción (GUI vs CLI). - Ejecutar comandos básicos en la terminal (pwd, hostname, whoami, tree) para explorar el entorno Unix. - Aplicar el protocolo SSH para establecer conexiones remotas seguras a un servidor y validar su acceso mediante comandos iniciales. ] --- class: center, middle # Antes, unos conceptos básicos --- ## Recursos que usaremos - computadora personal - computadora remota (servidor) - acceso a internet <img src="https://aprendelibvrefiles.blob.core.windows.net/aprendelibvre-container/course/creacion_de_sitios_web/image/servinternet_xl.png" width="500px" style="display: block; margin: auto;" /> --- ## 🖥️ Cuando conectas tu computadora a internet… Cada dispositivo que se conecta a internet necesita una “**identidad numérica única**” para poder comunicarse. Esa identidad es la **dirección IP (Internet Protocol)**, algo así como la “dirección postal” de tu computadora en la red. .content-box-yellow[ Dirección IP: **189.183.114.100** Consta de cuatro números separados por puntos [ 0 - 255 ]. ] - IP fija vs IP dinámica - **Por cable (Ethernet)**: el proveedor de internet te asignq una IP fija (no cambia). - **Por Wi-Fi**: normalmente obtienes una IP dinámica, tu dirección puede cambiar cada vez que te reconectas o reinicias el router. --- ## 🌐 Familia de Protocolos de Internet PROTOCOLO: Es el **conjunto de reglas** que permiten que las computadoras se comuniquen entre sí en internet. Los datos viajan de forma ordenada y confiable entre computadoras. Se organiza en **capas**, cada una con funciones específicas: - **Aplicación** → Cómo usamos la red (ej. HTTP, FTP, SSH). - **Transporte** → Asegura que los datos lleguen completos (ej. TCP, UDP). - **Internet** → Direcciona la información con direcciones IP. - **Interfaz de red** → Conecta el hardware (ej. Ethernet, Wi-Fi). <img src="https://upload.wikimedia.org/wikipedia/commons/7/73/Suite_de_Protocolos_TCPIP.png" width="250px" style="display: block; margin: auto;" /> --- ## 🌐 Protocolo HTTP **HTTP (Hypertext Transfer Protocol)** es el protocolo que permite la comunicación en la **World Wide Web.** - Se utiliza para **transferir información** entre usuarios, navegadores y servidores. - Los datos pueden ser archivos **HTML, XML, imágenes, texto**, etc. <img src="img/protocolo-http.png" width="600px" style="display: block; margin: auto;" /> --- ## 📂 Protocolo FTP **FTP (File Transfer Protocol)** es un protocolo de red para **transferir archivos** entre computadoras. Usa la arquitectura **cliente–servidor**: - **Cliente** → solicita o envía archivos. - **Servidor** → guarda los archivos y responde a las peticiones. <img src="https://www.cloudcenterandalucia.es/wp-content/uploads/2021/08/CCA_Protocolo-FTP-1.png" width="500px" style="display: block; margin: auto;" /> .tiny[Source: https://www.cloudcenterandalucia.es/wp-content/uploads/2021/08/CCA_Protocolo-FTP-1.png] --- # Transferencia de Archivos <img src="img/sftp-protocol.png" width="700px" style="display: block; margin: auto;" /> #### 🔹 Acceso a un servidor de archivos - **Navegador (browser)** → permite explorar y descargar archivos desde la URL FTP. - **Cliente FTP (ej. FileZilla)** → facilita subir y bajar archivos mostrando carpetas locales y remotas. --- ## 🔐 Protocolo SSH (Secure Shell) **SSH** es un protocolo y programa para el **acceso remoto seguro** a servidores. - Toda la comunicación viaja **cifrada**, protegiendo usuario, contraseña y datos. - Funciona mediante un **sistema de claves** (pública y privada) para autenticar la conexión. - 👉 Es la forma más usada en bioinformática para trabajar en **servidores Unix/Linux**. <img src="https://i0.wp.com/lab.wallarm.com/wp-content/uploads/2024/05/160.2.jpg?w=770&ssl=1" width="400px" style="display: block; margin: auto;" /> --- ## 🌐 En resumen: Protocolos de Internet - Toda computadora conectada a internet tiene una **dirección IP**. - Los **protocolos** permiten la comunicación: - **HTTP** → acceder a páginas web. - **FTP** → transferir archivos. - **SSH** → conexión remota segura a servidores. - Gracias a estos protocolos, podemos **compartir información, trabajar de manera remota y colaborar en bioinformática**. --- ## 🧪 Práctica: ver los protocolos en acción **Objetivo:** reconocer el protocolo en la URL y distinguir dominio vs IP. 1. **HTTPS (web segura)** .tiny[ Abre **https://www.ncbi.nlm.nih.gov/** → observa el **candado** y el esquema **https://**. ] 2. **HTTP → redirección a HTTPS** .tiny[ Cambia a **http://www.ncbi.nlm.nih.gov/** → recarga. *Qué observar:* suele redirigir a **https** ] 3. **Índice de archivos (FTP servido por web)** .tiny[ Abre **https://ftp.ncbi.nlm.nih.gov/genomes/** → navega un directorio y descarga un archivo pequeño. *Qué observar:* aunque el host dice “ftp”, el **protocolo** real es **https**. ] 4. **IP directa** .tiny[ Escribe **132.248.166.18** en el navegador. *Qué observar:* si no hay servicio web en esa IP, **no cargará**. **Conclusión:** IP identifica el host; el **protocolo** y el **servicio** deben estar activos. ] **Cierre:** .tiny[ - El protocolo define **cómo** se comunica (HTTP/HTTPS/FTP/SSH). - El dominio se **traduce a IP** (DNS). - Una misma IP puede alojar **múltiples servicios**. ] --- ## De la red a la computadora: el rol del Sistema Operativo 👉 Para poder **usar** estos protocolos y manejar la computadora, necesitamos entender primero el Sistema Operativo. Los **protocolos de internet** nos permiten **comunicar computadoras**, transferir archivos y conectarnos a servidores. Pero, ¿qué hace posible que una computadora funcione, organice sus recursos y ejecute programas? .content-box-yellow[ El SO es el “puente” entre el hardware y los programas que usamos. ] --- ## ¿Qué hace funcionar a estos dispositivos? <img src="http://1.bp.blogspot.com/-ZGAVLgs4Aas/UT1arCZsL-I/AAAAAAAAGus/L3-M6-jHm7Q/s280/productos+fragmentados.png" width="500px" style="display: block; margin: auto;" /> --- ## ⚙️ ¿Qué es un Sistema Operativo (SO)? - Es el **conjunto de programas** que hacen funcionar una computadora. - **Administra** los recursos de hardware (memoria, procesador, disco, dispositivos). - **Facilita la comunicación** entre el usuario y la máquina. - Permite que podamos **ejecutar aplicaciones** como navegadores, editores de texto, programas de análisis, etc. <img src="https://ejerciciosdocencia.wordpress.com/wp-content/uploads/2020/01/135-recursos-gestion-so.jpg?w=768" width="400px" style="display: block; margin: auto;" /> --- ## Tipos de sistemas operativos <img src="https://www.areatecnologia.com/informatica/imagenes/so.jpg" width="500px" style="display: block; margin: auto;" /> **Clasificación por uso**: - **Escritorio** → Windows, MacOS, Linux. - **Móvil** → Android, iOS. - **Servidores** → Linux, Unix. **¿Qué sistema operativo usas en tu computadora personal y cuál en tu celular?** Linux y Unix son los más usados en **ciencia y bioinformática**. --- ## 💡 ¿Cómo interactuamos con el Sistema Operativo? <img src="https://miro.medium.com/v2/resize:fit:1400/format:webp/0*9cp4T0Hz-Gmcpku3.png" width="450px" style="display: block; margin: auto;" /> Podemos comunicarnos con el SO de **dos formas principales**: - **GUI (Graphical User Interface)** → usando ventanas, íconos y el mouse 🖱️ - **CLI (Command Line Interface)** → escribiendo comandos en la terminal. 👉 Ambas permiten realizar tareas, pero la **CLI** es la más usada en bioinformática por su potencia y flexibilidad. --- # GUI vs CLI Las interfaces gráficas (GUI) son intuitivas y fáciles de usar, pero tienen limitaciones cuando trabajamos con grandes volúmenes de archivos o tareas repetitivas. .content-box-yellow[ **Escenario 1**. Imagina que tienes muchos **archivos de texto** en tu escritorio y quieres **eliminar** solo aquellos archivos que **inician con a y terminan con n**. Cómo lo harias usando la interfaz gráfica? ] -- .content-box-green[ **Escenario 2**. Imagina que tienes muchos **archivos de texto**, y quieres **buscar** todos aquellos archivos que **contengan cierta palabra o una frase específica**. Cómo lo harias usando la interfaz gráfica? ] --- ## 📌 Resumen de la sección: Conceptos básicos - Toda computadora conectada a internet tiene una **dirección IP**. - La comunicación se realiza mediante **protocolos** (HTTP, FTP, SSH). - El **Sistema Operativo (SO)** es el puente entre el **hardware** y las **aplicaciones**. - Existen distintos **tipos de SO** (Windows, MacOS, Linux, Android…). - Podemos interactuar con el SO mediante: - **GUI** (interfaz gráfica, fácil de usar). - **CLI** (línea de comandos, más potente y flexible). 👉 Estos conceptos son la base para comprender por qué en **bioinformática** se utiliza principalmente **Unix** y su entorno de comandos. --- class: center, middle # Sistema Operativo Unix --- ## 🔹 ¿Qué se requiere en Bioinformática? Necesitamos que la computadora sea una **herramienta de trabajo científico** capaz de manejar grandes volúmenes de datos, ejecutar programas especializados y, muchas veces, aprovechar servidores o clusters de alto rendimiento. 👉 Herramientas esenciales que todo bioinformático debe dominar: 1. 🖥️ **Sistema operativo tipo Unix** → base para el trabajo en servidores y análisis de datos. 2. ⚙️ **Lenguaje compilado (C)** → rápido, eficiente y muy integrado con Linux. 3. 🐍 **Lenguaje interpretado (Python o Perl)** → ideal para escribir scripts y automatizar tareas. 4. 📊 **Lenguaje de análisis y graficación (R)** → manejo de datos y visualización científica. 5. 🖧 **Procesamiento en paralelo / clusters** → para datos muy grandes o complejos. > .tiny[ Nota de referencia: Según [la Cranfield University (2018)](https://blogs.cranfield.ac.uk/agrifood/10-skills-every-bioinformatician-master/?utm_source=chatgpt.com), un bioinformático debe dominar al menos uno de los siguientes: R, Python, Perl, Java o C. ] --- ## 🧰 Sistema Operativo Unix - En bioinformática, **Unix/Linux** es el estándar de facto. - Destaca por: **rendimiento en datos**, **uso eficiente de hardware** y **software libre / abierto**. - Su ecosistema crece gracias a la **comunidad** (universidades, centros, empresas). - Linux evoluciona con **mejoras colaborativas**, no por una sola compañía. <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz7d2lx7ovSFF94vR0YZznml3rjilqeGQTRlt6xeNKj73PnVCh2KPtkdRBx8pt-CviDOolybncQLC9lS4gCIvitDw8v6ycFMWVzNssv679E9__thk2OGt_HX_Ec8DT6JfUKfBwDz5PVEQ/s320/list_640px.jpg" width="370px" style="display: block; margin: auto;" /> --- ## ⚙️ Características de Unix - Origen en los 70 (Ken Thompson, Dennis Ritchie). - **Portabilidad**, **multiusuario**, **multitarea**, **seguridad** y **excelente red**. - Filosofía: **minimalismo** + **modularidad** → _“haz una cosa y hazla bien”_; compón tareas complejas encadenando herramientas. --- ## Un sistema tipo Unix .pull-left[ <img src="https://www.brunoribas.com.br/aed1/2013-1/praticas/1/teoria-img1.png" width="400px" style="display: block; margin: auto;" /> ] .pull-right[ #### 🧩 ¿Qué compone un sistema tipo Unix? - **Kernel**: gestiona CPU, memoria, dispositivos. - **Shell**: interfaz de comandos (bash, zsh). - **Utilidades**: `ls`, `grep`, `awk`, `sed`, etc. - **Sistema de archivos**: jerárquico, rutas y permisos. - **Servicios de red**: SSH, SFTP, demonios/daemons. ] .tiny[ Páginas web de interés: - [Filosofía de Unix.](https://opensource.com/business/14/12/linux-philosophy) - [Shell Style Guides.](https://google.github.io/styleguide/shellguide.html) ] --- ## ⚙️ ¿Qué es _el shell_ (en Unix/Linux)? **El shell es un intérprete de comandos:** lee lo que tecleas, lo traduce y **ejecuta programas**. 🧠 _el shell es la capa de control por texto que te permite “orquestar” Unix a base de comandos y scripts._ - Además de ejecutar, hace **expansiones** (variables, `*.txt`) y **redirecciones/pipes** (`>`, `|`). - Permite **automatizar** tareas como **lenguaje de scripting** (p. ej., bash, zsh). - Actúa como **interfaz de texto** entre el usuario y el **kernel**. - **Terminal ≠ shell**: la _terminal_ es la ventana; el **shell** es el intérprete que corre dentro. .content-box-gray[ ``` Usuario → Terminal → Shell → Programas/Comandos → Syscalls → Kernel → Hardware ↑-----------------------------------------------↓ resultados/errores en texto ``` ] --- ## Tipos de SHELLs `bash`, `zsh`, `sh`, `fish`, `tcsh` (en bioinfo predominan **bash/zsh**). Tu shell actual: `echo $SHELL` **¿Por qué hay varios shells?** - Diferentes **objetivos**: portabilidad, scripting, usabilidad. - **Historia** y comunidades: AT&T, Berkeley, GNU, etc. - **Compatibilidad** con millones de scripts existentes. - **Decisiones de sistema**: macOS → zsh; Linux → bash (frecuente). .content-box-green[ 👉 **Elige** `sh` para scripts portables, `bash` para scripting potente, `zsh/fish` para trabajo interactivo. ] --- ## Tipos de SHELLs - **sh (Bourne / POSIX sh)** El estándar mínimo y más **portátil** para scripts. En muchas distros `/bin/sh` apunta a **dash** (Debian/Ubuntu) o a **bash en modo sh**. Pocas “comodidades”, pero máxima compatibilidad. - **bash (Bourne Again SHell)** El más difundido en Linux. Potente para **scripting** (arrays, `[[ … ]]`, sustitución de procesos) y cómodo interactivo. Gran ecosistema de ejemplos y documentación. - **zsh (Z Shell)** Excelente para uso **interactivo** (autocompletado avanzado, globbing potente, corrección de tipeo). Es el **shell por defecto en macOS**. Bastante compatible con bash, pero tiene diferencias si usas features propias. --- ## 🖥️ ¿Cómo accedemos al shell? **Unix/Linux** - App **Terminal** (atajo frecuente: `Ctrl+Alt+T`). **macOS** - **Terminal** (Aplicaciones → Utilidades) o **iTerm2** (opcional). - Spotlight: `⌘ + Espacio` y escribe “Terminal”. **Windows** - Opción 1 (recomendada): **WSL** (Ubuntu) + **Windows Terminal**. - Opción 2: [**MobaXTerm**](https://mobaxterm.mobatek.net/). (todo-en-uno, incluye SSH/SFTP). - Opción 3: **Git Bash** (sencillo para comandos básicos). --- ## ¿Cómo accedemos al shell? Mac <img src="img/terminal-mac.png" width="600px" style="display: block; margin: auto;" /> --- ## ¿Cómo accedemos al shell? Windows .pull-left[ <img src="img/mobaXTerm.png" width="500px" style="display: block; margin: auto;" /> ] .pull-right[ <img src="img/moba-terminal.png" width="500px" style="display: block; margin: auto;" /> ] --- # La terminal <img src="img/componentes-terminal.png" width="600px" style="display: block; margin: auto;" /> .pull-left[ .tiny[ - **Prompt**: indicador de que el shell espera un comando. *Ej.* `heladia@MacBook:~/network $` - `heladia` = usuario, `MacBook` = equipo, `~/network` = directorio actual - **$** usuario normal - **#** superusuario (root) - **Cursor**: posición donde se escribe. - **Línea de comandos**: tecleas el **comando [opciones] [argumentos]**. - **Salida del programa**: resultados y mensajes (STDOUT/STDERR). ] ] .pull-right[ .tiny[ Tips: • *Enter* ejecuta • **Ctrl+C** interrumpe • `q` cierra `man` • No escribas el **$**. ] ] --- ## Sintáxis de los comandos <img src="img/sintaxis-comando.png" width="800px" style="display: block; margin: auto;" /> --- ## 🧪 Práctica (LOCAL): Primeros comandos en la Terminal **Objetivo:** familiarizarte con la Terminal (macOS/Linux) o MobaXTerm/WSL (Windows), reconociendo usuario, equipo, carpeta actual y manipulando archivos con comandos básicos. **Requisitos:** - macOS/Linux: **Terminal**. - Windows: **MobaXTerm → Terminal** o **Windows Terminal + WSL (Ubuntu)** - *Tip:* No escribas el símbolo del prompt (`$`). Sal del manual con **`q`**. Interrumpe un proceso con **`Ctrl+C`**. ```bash echo $SHELL # shell actual (bash, zsh, etc.) whoami # tu usuario local hostname # nombre de TU equipo pwd # carpeta actual (ruta absoluta) uname -a # tipo de sistema (kernel/arquitectura) ``` --- ## ¿Qué es un servidor? .content-box-blue[ Una computadora (o servicio en la nube) que **ofrece recursos** a otras computadoras (**clientes**) por una red. ] - **Cliente–servidor:** el cliente **pide**, el servidor **responde**. - Puede brindar: **páginas web (HTTP)**, **archivos (FTP/SFTP)**, **acceso remoto (SSH)**. - Permite que **muchas personas** usen datos y programas **desde cualquier lugar**. > **Analogía:** como una **biblioteca**: guarda recursos y los entrega a quien los solicita. --- <img src="img/diagrama-cliente-servidor.jpeg.webp" width="800px" style="display: block; margin: auto;" /> .tiny[Source: https://blog.infranetworking.com/modelo-cliente-servidor/] --- ## ¿Por qué conectarnos a un servidor? - Mayor cantidad de procesadores y memoria RAM que nuestra computadora personal. -- - Muchxs usuarixs se pueden conectar y trabajar al mismo tiempo. Agiliza el trabajo colaborativo. -- - Acceso a los datos e infraestructura desde cualquier parte del mundo. --- ## ¿Cómo conectarnos a un servidor (SSH)? **Objetivo:** reunir los datos necesarios y realizar una **primera conexión SSH** al servidor; verificar identidad y cerrar sesión. **Necesitas:** - **Usuario:** (ej. `user1` o tu usuario asignado) - **Servidor (nombre o IP):** ej. `132.248.220.14` , `132.248.248.139` - **Puerto:** 22 (por defecto) - **Contraseña** de tu cuenta (si no usas llaves SSH) --- ## ¿Cómo conectarnos a un servidor (SSH)? Usando la `Terminal` de MobaXTerm o la de MacOS **Comando**: `ssh` **Argumentos**: `user@SERVER` Información de identificación necesaria para la conexión .content-box[ .remark-inline-code[ $ ssh user@SERVER ] ] Ejemplo .content-box[ .remark-inline-code[ $ ssh mateom@132.248.220.14 ] ] Nota: Después de un comando va **espacio**. --- ## Aprendiendo más sobre un comando .content-box[ .remark-inline-code[ $ man ssh ]] <br> **Opciones** .remark-inline-code[ - -p : Para especificar el puerto de acceso - -X : Para conectarse abriendo un puerto gráfico (X11) ] <br> <br> Las opciones modifican el funcionamiento de un comando .content-box[ .remark-inline-code[ $ ssh -p 8080 -X mateom@132.248.220.14 ] ] --- ## Aprendiendo más sobre un comando Veamos la ayuda de los siguiente comandos - hostname - pwd --- ## Aprendiendo más sobre un comando Donde más buscar ayuda ? - **Web - Google** Estratégias de búsqueda ``` comando pwd en unix qué hace el comando pwd en unix ``` - Chat-gpt Usa el [asistente de chatgpt](https://chatgpt.com/g/g-6893cf2451d88191b11cd0c87de045ab-profeunix-bioinfo). --- ## Nuestros primeros comandos Siempre es bueno saber dónde estamos conectadxs. .content-box[ .remark-inline-code[ $ hostname ]] -- Con qué usuario estamos conectadxs. .content-box[ .remark-inline-code[ $ whoami ]] -- La ruta absoluta del directorio donde estamos paradxs. <code> ssh</code> ingresaria por default al directorio <i>home</i> del usuario .content-box[ .remark-inline-code[ $ pwd ]] -- La estructura de archivos del directorio donde estamos. .content-box[ .remark-inline-code[ $ tree ]] --- ## Práctica: Tu primera conexión **Objetivo:** conectarte al servidor por **SSH**, verificar que estás en el remoto y cerrar sesión. **Necesitas:** tu **usuario** y el **servidor** (nombre o IP). **Formato:** `ssh usuario@servidor` (ej.: `ssh user1@132.248.248.139`) .content-box[ .remark-inline-code[ $ ssh user@SERVER ] ] - **Primera vez:** verás un aviso de autenticidad del host → escribe `yes`. - **Contraseña:** al teclearla **no** se ve (es normal). Prueba los comandos: ``` whoami # tu usuario en el servidor hostname # nombre del servidor pwd # tu HOME remoto echo $SHELL # bash/zsh/etc. uname -a # info del sistema date # fecha/hora del servidor ```