2  Terminal en UNIX

2.1 Antecedentes

Los humanos interactúan con las computadoras de diversas formas, como a través del teclado y el ratón, interfaces de pantalla táctil o sistemas de reconocimiento de voz. La forma más común de interactuar con las computadoras personales es a través de una interfaz gráfica de usuario (GUI). Con una GUI, damos instrucciones haciendo clic con el ratón y usando interacciones basadas en menús.

Aunque las GUI son intuitivas para aprender, escalan muy mal para tareas repetitivas. Imagina tener que copiar la tercera línea de mil archivos de texto en mil directorios diferentes y pegarla en un solo archivo. Usando una GUI, pasarías varias horas haciendo clic y podrías cometer errores. Aquí es donde el shell de Unix se vuelve útil. El shell es tanto una interfaz de línea de comandos (CLI) como un lenguaje de scripting, permitiendo realizar tareas repetitivas de forma rápida y automática. Con los comandos adecuados, el shell puede repetir tareas tantas veces como se desee.

2.2 La terminal

La terminal es un programa que permite a los usuarios escribir comandos. Permite ejecutar programas complicados para crear un directorio vacío, crear multiples archivos, o mover archivos de un directorio a otro. Todo esto con unas cuantas líneas de código. La terminal de UNIX más popular es Bash (Bourne Again SHell), el cual es el shell por defecto en la mayoría de las implementaciones modernas de Unix y en muchos paquetes que proporcionan herramientas similares a Unix para Windows.

Además, la línea de comandos es a menudo la forma más fácil de interactuar con máquinas remotas y supercomputadoras. La familiaridad con el shell es esencial para usar herramientas y recursos especializados, incluyendo sistemas de computación de alto rendimiento. A medida que los sistemas de clústeres y computación en la nube se vuelven más populares para el procesamiento de datos científicos, la habilidad de interactuar con el shell es cada vez más necesaria.

2.3 Comandos básicos

Primero tenemos que descargar los archivos de trabajo.

La terminal

$

El comando ls:

ls

Agregar descriptores - / es un directorio - @ es un enlace - * es un ejecutable

ls -F

Obtener ayuda

ls --help
man ls

Comando desconocido

$ ks

Directorio actual

pwd

Direcciones con barra /. Sistema de directorios UNIX y Windows.

Cambia direcciones

cd

Devolución a la posición anterior

cd - 

Otros comandos

cd .
cd /
cd /home/maikol
cd ..
cd ~

Estructura de comando en terminal

commando opciones argumentos

ls -F /

Describa que hace este comando

ls -lart

Uso de TAB

ls north-pacific-gyre/goo

2.3.1 Creación de archivos y directorios

Todos los archivos deben mantener los siguientes principios

  1. Deben ser fácilmente leídos por máquina.
  2. Deben ser fácilmente leídos por humanos.
  3. Deben mantener el orden por defecto
Nunca
myabstract.docx
Joe’s Filenames Use Spaces and Punctuation.xlsx
figure 1.png
fig 2.png
JW7d^(2sl@deletethisandyourcareerisoverWx2*.txt
2014-06-08_abstract-for-sla.docx
joes-filenames-are-getting-better.xlsx
fig01_scatterplot-talk-length-vs-interest.png
fig02_histogram-talk-attendance.png
1986-01-28_raw-data-from-challenger-o-rings.txt

La forma de escribir archivos de datos

2024-08-12--transacciones-tarjetas-de-credito__banco_transacciones.R

Formato es

Formato de archivo
[Fecha en ISO]
--
[título en minúscula separado con -]
__
[etiquetas separados por _]
.
[extensión]

Para archivos de código que se debe ejecutar secuencialmente debe ser así

Nota
01--limpieza-de-datos__tidyverse.R
02--creación-de-tablas.R
03--analisis-exploratorio.R
04--visualización.R
05--guarda-resultados.R

Crear un directorio

cd exercise-data/writing/
mkdir thesis

Crea un archivo

cd thesis
touch bitacoras.qmd
vim limpieza-de-datos.R

Use vim, emacs, nano, o el editor que quiera.

2.4 Eliminar, mover y copiar archivos

Eliminar archivos

rm limpieza-de-datos.R

Mover archivos

mv bitacoras.qmd 01--bitacoras.qmd

Que pasa si haces

mv 01--bitacoras.qmd ../

Como harías para mover este archivo al directorio shell-lesson-data?

Para copiar el comando es cp.

Copia el archivo 01--bitacora.qmd en el directorio exercises-data/writing/thesis

2.5 Operaciones con múltiple directorios y archivos

Existen una lista de expresiones regulares u operadores comodín que usaremos con frecuencia:

  • * es cero o más caracteres.
  • ? es exactamente un carácter.

Corre los siguientes comandos y comente cuál es la diferencia de cada comando

cd shell-lesson-data/exercise-data/alkanes
ls -la

ls *t*ane.pdb
ls *t?ne.*
ls *t??ne.pdb
ls ethane.*

Ejercicio 2.1 Usando la carpeta exercises-data/wrting/calibration

Genere los siguiente

  1. En la carpeta backup, un respaldo de todos los archivos calibration y datasets por separado.
  2. En la carpeta enviar-a-github un respaldo de los datasets del 23 de noviebre y otra de todos los archivos de noviembre.

2.6 Número de caracteres

Arroja lineas, palabras y carateres

cd shell-lesson-data/exercise-data/alkanes
wc *.pdb

Para ver solo líneas wc -l. Y para ver solo palabras o caracteres?

Qué pasa si le das:

wc - l

Use Control-G para escapar.

2.7 Tuberías en la terminal

  • > redirije el resultado del comando a un archivo.
  • >> es igual que > solo que este agrega el resultado al final del archivo.
  • | es la tubería entre comandos. Pasa el resultado del comando de la izquierda hacia la derecha.
wc -l *.pdb > lengths.txt
cat lengths.txt

Ordenar archivos

sort -n lengths.txt
sort -n lengths.txt > sorted-lengths.txt
head -n 1 sorted-lengths.txt

Si podemos reemplazar el mismo archivo

sort -n lengths.txt > sorted-lengths.txt

Comparación de > y >>

cd shell-lesson-data/exercise-data/animal-counts/
head -n 3 animals.csv > animals-subset.csv
tail -n 2 animals.csv >> animals-subset.csv

Ahora, podemos combinar multiple comandos al mismo tiempo

cd shell-lesson-data/exercise-data/alkanes
wc -l *.pdb 
wc -l *.pdb | sort -n
wc -l *.pdb | sort -n | head -n 1

2.8 Caso de uso

Nelle Nemo, una bióloga marina, ha regresado de un estudio de seis meses en el Giro del Pacífico Norte, donde recolectó 1520 muestras de vida marina gelatinosa y los empaquetó en sus archivos de trabajo. Ella ha medido la abundancia relativa de 300 proteínas en estas muestras utilizando una máquina de ensayo. Para analizar los datos, necesita procesar estos 1520 archivos con un programa llamado goostats.sh.

Si Nelle realiza esta tarea manualmente usando una interfaz gráfica (GUI), tendría que seleccionar y abrir cada archivo 1520 veces, lo que tomaría más de 12 horas. Sin embargo, utilizando un shell, puede automatizar este proceso con un script que repita los pasos necesarios, permitiendo que su computadora realice el trabajo mientras ella se enfoca en escribir su artículo.

Nuestro objetivo es ayudar a Nelle cómo usar un shell para automatizar esta tarea, específicamente cómo ejecutar goostats.sh mediante bucles que automatizan la entrada de nombres de archivos. Además, una vez que establezca esta línea de procesamiento, podrá reutilizarla cada vez que recoja más datos.

Para lograr su objetivo, Nelle necesita saber cómo:

  • Navegar a un archivo/directorio
  • Crear un archivo/directorio
  • Verificar la longitud de un archivo
  • Encadenar comandos
  • Recuperar un conjunto de archivos
  • Iterar sobre archivos
  • Ejecutar un script de shell con su pipeline

Las respuestas de esto está en este recurso de Carpentries. El trabajo de ustedes es leer esta página y generar un script en bash con la solución.