2  Introducción a Bash

En esta sección se aprenderá a usar Bash para ayudarte a implementar flujos de trabajos reproducibles, además de comandos útiles para acceder a elementos en el computador.

2.1 Manipulación de archivos y directorios desde la línea de comandos

Terminales y Bash. Una revisión

Terminal

En los inicios de la computación, el computador que procesaba los datos o realizaba las operaciones se encontraba separado de la herramienta que le daba las instrucciones para hacer el proceso. El asunto era más o menos así:

  • El terminal, el cual era usado para enviar los comandos al computador

  • El computador, el hardware que procesaba los comandos

Hoy en día los computadores pueden tener ambos componentes, entregan las instrucciones y además las procesan, y muchos de esos computadores tienen interfaces gráficas (GUIs) que hacen más fácil realizar las tareas. No obstante, acceder a las líneas de comando o a los terminales, a menudo puede ser más eficiente que usar las GUIs para ciertas tareas. Por ejemplo, trabajar con archivos en los terminales es más eficiente que trabajar con los archivos en un ambiente gráfico como los que proporciona Windows o MAC. Los terminales se pueden usar también para ejecutar herramientas como Python, Jupyter Notebook o Git que serán usados en el curso. Ejemplo de esto lo puede encontrar aquí. Ejecute el archivo descargado y reflexione con el resultado.

Figura 2.1: Un antiguo terminal para enviar las instrucciones a la computadora.

Bash

En la primera parte ya se revisó que Bash es un programa que los computadores usan para recibir información (comandos) y retornar la información resultante de la ejecución de esos comandos (salidas).” Estos comandos pueden ser entrados y ejecutados a través de terminal. Esto permite que puedas controlar el computador digitando los comandos desde el teclado, en lugar de usar los botones y menús del GUI. Bash permite realizar eficientemente muchas de estas tareas. Por ejemplo, realizar operaciones sobre múltiples archivos rápidamente a través de la línea de comandos. Algo muy atractivo es la capacidad de escribir scripts que se pueden ejecutar en distintos sistemas operativos.

¿Por qué Bash es importante para la ciencia reproducible?

Los GUIs y las líneas de comando en Bash son complementarias, al conocerlas a ambas, se expande ampliamente el rango de tareas que puedes llevar a cabo con el computador. Con Bash puedes correr en la línea de comandos, los flujos de trabajo sobre diferentes sistemas operativos. Las tareas comunes que se pueden llevar a cabo desde la línea de comandos incluyen revisar y cambiar el directorio de trabajo, hacer un nuevo directorio, extraer archivos, o encontrar archivos en el computador. Trabajar en el terminal con Bash proporciona la habilidad para:

  • Navegar fácilmente en tu computador, manejando archivos y directorios.

  • Trabajar rápida y eficientemente con muchos archivos y directorios a la vez.

  • Ejecutar programas que proporcionen más funcionalidad a la línea de comandos (ejemplo, Git).

  • Ejecutar programas desde directorios específicos en el computador (Jupyter Notebook).

  • Usar comandos repetibles para tales tareas a través de distintos SO.

Opciones de Terminales para Bash

Ya se revisó que un terminal es una interfaz de línea de comandos (CLI) que permite acceder a Bash. Existen muchos programas que emulan terminales y, en consecuencia, los terminales que se usan en el computador varían de acuerdo al sistema operativo. Por ejemplo, Mac y Linux tienen programas de terminales instalados que le permiten acceder a Bash. Por el contrario, la terminal por defecto de Windows, no permite acceder a Bash. Por esta razón, será necesario si posees un equipo Windows instalar un terminal llamado Git Bash para correr comandos Bash.

Windows

Una vez instalado y configurado Git para Windows, se puede abrir el Terminal buscando el programa Git Bash en la zona de búsqueda o de programas instalados.

Figura 2.2: Ventana de la terminal.

Para revisar si la instalación está correcta podemos digitar “bash” en el terminal y presionar Enter. El terminal solo enviará un mensaje si el comando no fue ejecutado, si el comando es ejecutado, se verá una nueva señal de línea esperando por más entradas. Dependiendo del programa utilizado, puede variar la señal del prompt así como la cadena que indica por ejemplo la posición dentro de la estructura del disco.

Figura 2.3: Activación del comando Bash en la ventana de la terminal.

Para cerrar una sesión de Bash, basta con digitar “exit” y presionar Enter.

2.2 Comandos de Bash para manejar directorios y archivos

Dependiendo de la configuración del computador, el prompt y otro tipo de información que se muestra adelante del prompt (como la ruta actual de trabajo) se podrá ver de forma distinta. Es necesario indicar que cuando se digite un comando no hace falta digitar el signo del prompt, solo el comando que lo sigue. En algunos ejemplos que se muestren, las líneas indentadas que siguen a la señal del prompt y que no se muestren con la señal del \$, significa que son las salidas de ese comando.

Comandos útiles para manejar directorios y archivos

  • Imprimir el directorio actual (pwd)
Figura 2.4: Ejecución del comando pwd.

Como la primera ejecución del pwd se realizó inmediatamente después de ejecutar Bash, se obtiene la ruta hacia el directorio home. El directorio home es el directorio por defecto en el que te encontrarás cada vez que inicies una nueva sesión de Bash. Para los usuarios de Windows, el Terminal usa forward slash (/) para indicar directorios dentro de una ruta. Esto es diferente de lo que hace Windows Explorer que usa back slash (\) para indicar la ruta en un árbol de directorios.

Figura 2.5: Esquema de un árbol de directorios en Windows.
  • Cambiar el directorio actual (cd)

A menudo es necesario cambiar del directorio actual, de manera que puedes acceder a otros directorios o archivos. Para el cambio de directorio se usa el comando cd seguido del nombre del directorio al cual queremos ir. Sin embargo, hay que tener en cuenta que este cambio debe respetar la estructura existente del árbol de directorios. Dicho de otro modo, no podemos pretender pasar directamente de un directorio a otro, sin respetar la ruta que me lleva desde el directorio actual, hasta el directorio donde pretendo ir. Por ejemplo, desde mi ruta actual quiero ir a Documentos.

Figura 2.6: Ejecución del comando cd para ir al directorio Documentos.

El comando cd Documents funcionó de inmediato porque Documents se encuentra anidado directamente al directorio en el que me encontraba. Por otra parte, si quisiera pasar a otro directorio (C:\FUSION) que está en el computador, pero que no está anidado directamente al directorio se produciría un error.

Figura 2.7: Ejecución del comando cd indicando un error de ruta.

Para solucionar este problema se debe reproducir la ruta desde el directorio actual, hasta el que queremos ir. En este caso, es necesario moverse a niveles superiores del árbol de directorios y lo podemos hacer usando el comando cd ...

Figura 2.8: Ejecución del comando cd para retroceder un nivel en el directorio.

También podemos usar el comando cd para movernos rápidamente hacia adelante al directorio que queremos ir, buscando reproducir la ruta completa. El cuidado lo debemos poner al encontrar un espacio en la ruta, el que debe llenarse con un back slash (\).

Figura 2.9: Ejecución del comando cd para movernos usando una ruta completa.

Se puede ir al directorio home usando el comando cd \~

Figura 2.10: Ejecución del comando cd para movernos al directorio HOME.
  • Crear un nuevo directorio (mkdir)

Para crear un nuevo directorio lo más sencillo es navegar hasta el directorio donde se desea crearlo usando cd. Una vez dentro del directorio padre usar el comando mkdir seguido del nombre del directorio.

Figura 2.11: Ejecución del comando mkdir para crear un nuevo directorio.
  • Listar los subdirectorios y archivos (ls)

Para ver una lista de los subdirectorios y archivos que se encuentran en el directorio actual solo basta con digitar ls. En esta implementación los directorios aparecen de un color azul y los archivos con un color de fuente blanco.

Figura 2.12: Ejecución del comando ls para listar subdirectorios y archivos.
  • Eliminar un archivo (rm)

Para eliminar un archivo desde el directorio de trabajo solo se debe digitar el comando rm seguido del nombre del archivo con la extensión correspondiente. Es importante mencionar que rm elimina el archivo directamente, sin pasarlo por la papelera.

Figura 2.13: Ejecución del comando rm para eliminar un archivo.
  • Eliminar un directorio (rm -r)

Para eliminar un directorio y todos los subdirectorios y archivos que contiene, vaya hasta el directorio padre que lo contiene y use el comando rm -r seguido del nombre del directorio que quiere eliminar.

Figura 2.14: Ejecución del comando rm-r para eliminar un directorio.
  • Copiar un archivo (cp)

Con Bash es posible también copiar un archivo especifico a un directorio especifico usando el comando cp seguido del nombre del archivo a copiar en el directorio de destino.

Figura 2.15: Ejecución del comando cp para copiar un archivo.
  • Copiar un directorio y sus contenidos (cp -r)

Además de poder copiar un archivo también tenemos la capacidad de copiar directorios con los contenidos de su interior. Para eso solo usar el comando cp -r seguido del nombre del directorio a copiar y la ruta del directorio donde lo queremos copiar.

Figura 2.16: Ejecución del comando cp-r para copiar un directorio.
  • Crear un nuevo archivo (touch)

Es posible crear un nuevo archivo a través de comandos de Bash usando touch y el nombre y extensión del archivo. Esto puede ser útil para generar nuevos archivos que pueden ser posteriormente llenados a través de la programación.

Figura 2.17: Ejecución del comando touch para generar un archivo.
  • Buscar ayuda de los comandos (help)

En Bash también es posible encontrar ayuda sobre los comandos, sus funciones y sintaxis. Para eso solo escribir el comando help. Sin embargo, vale la pena aclarar que en algunas ocasiones no todos los comandos vienen listados y por lo tanto es bueno revisar la internet en busca de algunas páginas

2.3 Prácticas con Bash

En esta sección vamos a practicar las habilidades que hemos adquirido en el uso de los comandos de Bash.

Descargar y configurar Bash para Windows

  1. Ir a la descarga.

  2. Ejecutar el instalador con la siguiente secuencia:

  1. Click en “Run”.

  2. Click en “Next”.

  3. Click en “Next”.

  4. Click en “Next”.

  5. Click en “Next”.

  6. Click en “Next”.

  7. Deja la selección en “Git desde línea de comando y también desde terceras partes”. Luego click en “Next”. Es importante que esta selección se realice, de no ser así, puede que los ejercicios no funcionen. Si esto ocurre, volver a instalar considerando la opción.

  8. Click en “Next”.

  9. Dejar la selección de “Verifique el estilo de Windows, confirme los finales de línea del estilo Unix” y click en “Next”.

  10. Seleccione la segunda opción para “Usar la ventana de la consola predeterminada de Windows y haga click en”Next”.

  11. Click en “Next”.

  12. Click en “Instalar”.

  13. Cuando se complete la instalación, haga click en “Finalizar”.

  14. Para revisar si la instalación está correcta podemos digitar “bash” en el terminal y presionar Enter. El terminal solo enviará un mensaje si el comando no fue ejecutado, si el comando es ejecutado, se verá una nueva señal de línea esperando por más entradas.

Realizar los siguientes ejercicios:

  1. En el directorio home crear un directorio llamado analisis-espacial.

  2. Al interior del directorio analisis-espacial, crear otro llamado datos.

  3. Al interior del directorio datos, generar 3 archivos de texto: texto1.txt, texto2.txt y texto3.txt.

  4. Al interior de un directorio de prueba que generes, copia los archivos del capítulo #2 que se encuentran en SIVEDUC.

  5. Indique a través de un comando Bash en cuales archivos se encuentra el comando imshow, ogr, savefig.

  6. Desde el Terminal, revise el contenido de los archivos .py indicados en el punto 4.

  7. Encuentre desde su disco local C:/, todos los archivos que tengan un tamaño superior a 1 GB.