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
- Deben ser fácilmente leídos por máquina.
- Deben ser fácilmente leídos por humanos.
- Deben mantener el orden por defecto
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
[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í
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
- En la carpeta
backup
, un respaldo de todos los archivoscalibration
ydatasets
por separado. - 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.