Este tutorial es desarrollado por Pablo Vinuesa, CCG-UNAM (twitter: @pvinmex) a partir de material previo, presentado en diversos cursos y talleres, como Taller 3 - Análisis comparativo de genomas microbianos: Pangenómica y filoinformática de los Talleres Internacionales de Bioinformática - TIB2019, celebrados en el Centro de Ciencias Genómicas de la Universidad Nacional Autónoma de México, del 29 de julio al 2 de agosto de 2019.
Las versión actual (v.2022-09-26) contiene extensiones significativas con respecto a cursos anteriores, así como adaptaciones para el Taller de Ciencias Genómicas: de Moléculas a Ecosistemas, que impartimos investigadores del CCG-UNAM para alumn@s de la Facultad de Ciencias - UNAM, así como para el curso de introducción a Linux que imparto en la Licenciatura en Ciencias Genómicas - LCG de la UNAM.
Si éste es tu primer contacto con Linux, te recomiendo que leas primero esta presentación sobre introducción al biocómputo en sistemas Linux - PDF.
Este documento sirve tanto como un tutorial completo de iniciación a la programación en \(AWK\) y \(Bash\) para bioinformática para los que no han tenido contacto previo con un sistema UNIX o GNU/Linux, como una referencia para usuarios avanzados.
Como muestra el índice, el tutorial avanza desde los aspectos más elementales de conexión a un servidor, navegación del sistema, propiedades de archivos y tuberías de filtrado de texto, a programación avanzada en AWK y BASH. Contiene muchísimos ejemplos prácticos, desde programas simples pero siempre útiles para ejecutar en la consola de comandos (1liners), a scripts avanzados, aptos para el trabajo de investigación en el área como fasta_toolkit.awk, extract_CDSs_from_GenBank.awk y run_phylip.sh. Éstos hacen uso de funciones, banderas, estructuras de control de flujo, estructuras de datos complejas, menús de usuario, y muchos otros atributos propios de programas profesionales. Estos ejemplos te servirán para aprender a programar herramientas bioinformáticas robustas y modulares, siguiendo mejores prácticas. El tutorial te enseña el uso práctico de todos los elementos sintácticos implementados en dichos scripts, los cuales puedes descargar del repositorio GitHub de este curso. Estos programas se describen en detalle en este documento.
Este material didáctico lo distribuyo públicamente a través de este repositorio GitHub intro2linux bajo la Licencia No Comercial Creative Commons 4.0
This
work is licensed under a
Creative
Commons Attribution-NonCommercial 4.0
El código se distribuye bajo la licencia
GNU
General Public License v3
Idealmente debes tener acceso local o remoto a una máquina UNIX o GNU/Linux. Si tienes una máquina Windows, otra opción es instalar mobaXterm home edition, como se explica en el esta sección README del repositorio
Tienes básicamente 2 opciones:
git
pull
, como se explica en el REAEME del
repositorioLa primera es la más conveniente, ya que no sólo descargas el archivo html del curso, sino todos los scripts y datos asociados para que puedas seguir cada ejemplo.
Bienvenid@s al mundo de cómputo y software libre del proyecto GNU. Antes de empezar este tutorial, sugiero que te informes sobre lo que es el proyecto GNU, iniciado por Richard Stallman (rms) en 1983 y desarrollado por una enorme comunidad de programadores, y su relación con Linux, para formar el sistema de cómputo libre GNU/Linux.
Así lo explica rms en su artículo Linux y el sistema GNU, del que cito los primeros dos párrafos abajo:
Muchos usuarios de ordenadores ejecutan a diario, sin saberlo, una versión modificada del sistema GNU. Debido a un peculiar giro de los acontecimientos, a la versión de GNU ampliamente utilizada hoy en día se la llama a menudo «Linux», y muchos de quienes la usan no se dan cuenta de que básicamente se trata del sistema GNU, desarrollado por el proyecto GNU.
Efectivamente existe un Linux, y estas personas lo usan, pero constituye solo una parte del sistema que utilizan. Linux es el núcleo: el programa del sistema que se encarga de asignar los recursos de la máquina a los demás programas que el usuario ejecuta. El núcleo es una parte esencial de un sistema operativo, pero inútil por sí mismo, sólo puede funcionar en el marco de un sistema operativo completo. Linux se utiliza normalmente en combinación con el sistema operativo GNU: el sistema completo es básicamente GNU al que se le ha añadido Linux, es decir, GNU/Linux. Todas las distribuciones denominadas «Linux» son en realidad distribuciones GNU/Linux.
– Richard M. Stallman
Hay que aclarar que destacados miembros de la comunidad de desarrolladores de software libre esgrimen diversos argumentos por los que consideran que el sistema no se debe llamar GNU/Linux, favoreciendo el nombre de Linux.
Sirva de ejemplo uno de los comentario de Linus Torvalds:
Umm, this discussion has gone on quite long enough, thank you very much. It doesn’t really matter what people call Linux, as long as credit is given where credit is due (on both sides). Personally, I’ll very much continue to call it “Linux”, …
The GNU people tried calling it GNU/Linux, and that’s ok. It’s certainly no worse a name than “Linux Pro” or “Red Hat Linux” or “Slackware Linux” …
Lignux is just a punny name—I think Linux/GNU or GNU/Linux is a bit more “professional” …
– Linus Torvalds
Es importante notar que muchas de las distribuciones de Linux, incluyendo Ubuntu, no siguen estrictamente el principio de software libre de GNU. Ubuntu, por ejemplo, incluye el repositorio \(restricted\), que contiene paquetes soportados por los desarrolladores de Ubuntu debido a su importancia, pero que no está disponible bajo ningún tipo de licencia libre. Ejemplos notables son los controladores propietarios de algunas tarjetas gráficas, como los de ATI y NVIDIA. Ello ha permitido que Ubuntu sea una de las distribuciones de Linux con mayor compatibilidad de hardware y facilidad de instalación. Por ello recomiendo y uso esta distro.
En lo personal, soy pragmático y agnóstico en lo que respecta a la controversia. Estoy muy agradecido a toda la comunidad por haber desarrollado, integrado y puesto a nuestra disposición esta maravilla de entorno de cómputo libre: kernel, sistema operativo y software. Por ello gustosamente doy crédito al proyecto GNU y al el núcleo o kernel, desarrollado originalmente por Linus Torvalds y conocido actualmente como núcleo Linux. Desde el año 2004 realizo todo mi trabajo en este entorno.
Como académico coincido plenamente con la visión de rms en que los centros de educación pública deberían de usar el entorno GNU/Linux, idealmente desde la secundaria. En diversos lugares, notablemente en India, este mensaje de rms ha calado hondo. El estado de Kerala fue pionero: desde 2006 toda la educación pública de Kerala se hace en en el entorno GNU/Linux, habiendo eliminado Windows y software privativo de las escuelas estatales. Otros estados como Karnataka, Gujarat, Assam, West Bengal siguieron rápidamente el ejemplo, incorporando software libre y código fuente abierto - OSS´ como una clave de sus sistemas educativos. Es una tendencia respaldada actualmente por el gobierno Indio, como pueden leer aquí: Adoption of Free and Open Source Software in India. El resultado es contundente - la India es actualmente una potencia mundial en cómputo y matemáticas.
Mi modesta pero activa manera de contribuir a la promoción del uso de software libre y código fuente abierto en México y Latinoamérica es divulgando el uso del ambiente de cómputo GNU/Linux a alumnos universitarios mediante cursos en diversos países de habla hispana, y promoviendo su implementación en la universidad, particularmente en la LCG-UNAM. Me referiré a este ambiente de cómputo con ambos nombres (GNU/Linux y Linux), para expresar mi neutralidad al respecto de la controversia arriba mencionada, aunque tiendo a preferir el uso de GNU/Linux para remarcar el crédito a todos los componentes de esta extraordinaria “simbiosis”.
Todo software de calidad debe de estar bien documentado. Sin duda la documentación del software GNU es extraordinaria. No dejes de visitar al menos estos recursos:
Una vez que domines los comandos básicos que se presentarán en este documento, recomiendo revisar tutoriales más detallados y completos como los siguientes: