Muchos programas de bioinformatica no poseen una interfaz grafica, solo usando la terminal como forma de interacción.
Porque la terminal es cool?
.config
A diferencia de la mayor parte de los sistemas Linux, Windows no trae nativamente un gestor de paquetes, aka. una utilidad encargada de instalar programas desde un repositorio central, como apt o CRAN.
Existen alternativas de terceros, como Chocolatey, que nos permiten instalar programas via comandos.
Consideraciones
Para instalar Chocolatey, se usa la linea de comandos de Powershell de Windows
Set-ExecutionPolicy Bypass -Scope Process -Force;
iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
La instalación dura unos pocos segundos, y luego se puede convocar a Chocolatey con el comando choco
. Una lista de comandos se puede convocar con choco help
Más comandos de Chocolatey
choco install <paquete1> <paquete2>
permite instalar multiples paquetes en un comando. --yes
sirve para omitir las confirmaciones. Por ejemplo choco install 7zip chrome -y
choco search <paquete>
busca un programa en el repositorio central. Por ejemplo, choco search cytoscape
choco list --local
lista los paquetes instalados con Chocolatey. choco list
lista todos los disponibles en el repositorio central (+1,300)choco upgrade all
actualiza todos los paquetes actualizables. Recomiendo usar --yes
choco uninstall <paquete>
permite remover cosasLas ultimas versiones de Windows incluyen un Kernel Linux que corre de forma paralela al Kernel Windows NT propio de Windows. Este se denomina Windows Subsystem for Linux, y es capaz de correr aplicaciones para Linux, hasta sistemas operativos como Ubuntu o Mint.
WSL2 es la segunda versión mayor de este, con compatibilidad y rendimiento mejorados.
Consideraciones
Para instalar WSL2, lo más facil es usando Chocolatey desde la consola en modo administrador (como la que usamos para instalarlo). Despues de completar la instalación, es necesario reiniciar la computadora para que pueda iniciar el Kernel Linux.
La opción más efectiva es desde la Tienda de Windows. Tambien es posible usar Chocolatey, pero por limitaciones de interoperabilidad de WSL2, choco no puede usarlo directamente y se ve limitado a usar WSL1.
Luego, es posible acceder a la consola de Ubuntu con el comando ubuntu2004
. Por defecto, esta incluye bash, ssh, git, etc.
Este primer inicio es más lento que los siguientes, dado que el sistema instalara Ubuntu sobre el kernel, y ademas pedira la creación de un usuario para el sistema.
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: USUARIO
New password:
Retype new password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 4.4.0-19041-Microsoft x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Tue Nov 10 14:28:55 -03 2020
Para salir de este ambiente Ubuntu, usamos logout
como en una sesión SSH.
La mayor parte de estos comandos existen tanto en Linux como en Windows Powershell (aunque en este ultimo realmente son alias). La principal diferencia es como las shells manejan directorios, con /
en POSIX y \
en Windows; y como manejan comandos multilinea, \
y `
respectivamente.
La parte más compleja y menos interoperable es cuando usamos comandos con -parametros
.
curl
es C (see) URL, mapeado a Invoke-WebRequest en Powershell.
curl <url> -o <archivo>
descarga una URL para guardarla en un archivocurl -O <url>
descarga la URL a un archvio con su nombre. Usualmente usamos estowget
es Web GET, mapeado a Invoke-WebRequest en Powershell. Es el más facil de usar.
wget <url> <url2…>
descarga la URL a un archvio con su nombrewget -c <url>
permite continuar una descarga interrumpida (muy util para cosas de varios GB)Invoke-WebRequest
requiere un output explicito.
Invoke-WebRequest <url> -OutFile <archivo>
Invoke-WebRequest <url> -Method Get -o <archivo>
funciona igual que Wgetcurl <url> -o <archivo>
es valido en Windows basetar
, no existe en Windows.
… xf …
son parametros para eXtract y Filetar xf <tar.gz.bz2.xz>
desempaca un tar (comprimido) al directorio localtar xf <tar.gz.bz2.xz> -C <directorio>
desempaca el tar a un directorio especificotar cf <nuevo.tar> <archivo1 directorio/*>
crea un archivo tar.tar cgf <nuevo.tar.gz> <archivo1 directorio/*>
crea un archivo tar comprimido.unzip
, no existe en Windows.
unzip <zip>
extrae los contenidos de un zip en el directorio actualunzip <zip> -d <directorio>
extrae el zip a una carpeta especificazip -r <nuevo.zip> <directorio>
comprime un directorio a un zip.Expand-Archive
es una utilidad de Windows que funciona como unzip
Expand-Archive <zip> <directorio>
descomprime un zip en un directorio existente o nuevoCompress-Archive -Path <directorio\*> -DestinationPath <nuevo.zip>
crea un zip con los contenidos de directorio7zip
tiene linea de comandos para Linux, Mac, Windows.unzip ejemplo.zip -d Ejemplo # Linux
Expand-Archive ejemplo.zip Ejemplo # PowerShell
cat
es conCATenate, mapeado a Get-Content en Powershell.
cat <archivo>
pasa los contenidos de archivo a la terminal, mostrandoloscat <archivo1> <archivo2> > <nuevo>
reemplaza los contenidos de nuevo por la concatenación de archivo1 y archivo2cat <achivo3> >> <nuevo>
concatena archivo3 a nuevohead
, no existe en Windows.
head <archivo>
muestra las 10 primeras lineas de archivohead -n <archivo>
muestra las n primeras lineas de archivoGet-Content <archivo> -TotalCount 10
tiene el mismo comportamientotail
, no existe en Windows.
tail <archivo>
muestra las 10 ultimas lineas de archivotail -n <archivo>
muestra las n ultimas lineas de archivoGet-Content <archivo> -Tail 10
tiene el mismo comportamientoGREP significa “global regular expression print”, es utilizado para realizar busqueda de patrones en archivos de textos.
Por defecto el comando grep devolvera todas las lineas en la que la expresion regular hace match. Cabe destacar que se pueden utilizar operadores dentro del argumento de la expresion regular.
grep "expresion_regular" <archivo>
Opciones utiles:
-i
Ignora mayusculas/minusculas -w
Patron de palabra completa -v
Inversion de grep, devuelve las lineas que no tienen match -l
Devuelve el nombre de los archivos que contienen el match -c
Cuenta y devuelve el numero de match para el patrón entregado
Operadores de expresiones regulares mas utilizados:
.
hace match con todos los caracteres.
?
El caracter subsecuente hace match como maximo 1 vez. *
El caracter subsecuente hace match 0 o mas veces.
+
El caracter subsecuente hace match 1 o mas veces.
Por lo general querremos usar el comando grep en conjunto de otros comando utilizando pipes.
Por ejemplo:
grep -i "salmon" try1.csv
grep -w "salmon" try1.csv
grep -v "infected"
grep -c "GSM" try1.csv
grep -w "salmonis" try1.csv
#podemos combinar las opciones
grep -ci "salmon" try1.csv
grep -ciw "salmon" try1.csv
#utilizando algunos operadores para expresiones regulares
grep "inf." try1.csv
grep "GSM[0-9]*" try1.csv
Otro programa que podemos usar para reemplazos rapidos es Scripted EDitting, que tiene una sintaxis similar a grep pero un foco más en scripts para modificación de texto. Osea, esta pensado más para escribir scripts que automatizen un trabajo repetitivo, más que para ser usado continuamente.
Un caso de uso es reemplazar variables como rutas de archivos dentro de un cript o programa que qeuremos correr. Por ejemplo, esta tabla procesar.tsv
incluye una ruta global que no existe en el nuevo sistema.
sample-id | forward-absolute-filepath | reverse-absolute-filepath |
---|---|---|
sample-001 | /home/qiime2/sample001_R1.fastq.gz | /home/qiime2/sample001_R2.fastq.gz |
sample-002 | /home/qiime2/sample002_R1.fastq.gz | /home/qiime2/sample002_R2.fastq.gz |
… | … | … |
sample-478 | /home/qiime2/sample478_R1.fastq.gz | /home/qiime2/sample478_R2.fastq.gz |
En este caso es preferible reemplazar /home/qiime2
por una variable de ambiente $DATOS
que apunta al directorio donde están.
# Probamos el comando
# Significa -recursive substitute/A/B/global <archivo>
sed -r 's/\/home\/qiime2/\$DATOS/g' procesar.tsv | head -5
sample-id | forward-absolute-filepath | reverse-absolute-filepath |
---|---|---|
sample-001 | $DATA/sample001_R1.fastq.gz | $DATA/sample001_R2.fastq.gz |
sample-002 | $DATA/sample002_R1.fastq.gz | $DATA/sample002_R2.fastq.gz |
… | … | … |
sample-478 | $DATA/sample478_R1.fastq.gz | $DATA/sample478_R2.fastq.gz |
Validando que el reemplazo funciona, podemos hacerlo definitivo con -i
in-place
Podemos reemplazar multiples -e
xpresiones en un unico comando sed -e 's/<regex>/<reemplazar>/' -e 's/<regex>/<reemplazar>/' <archivo>
O usar otro caracter que no sea usado en nuestro reemplazo, en lugar de /
sed 's#<regex>#<reemplazar>#' <archivo>
Este es el editor más familiar, con un modo de edición similar a Notepad, Word, cualquier programa general de texto.
^C
significa Ctrl
C
. Por ejemplo, para guardar y salir es ^X
, o Ctrl
x
M-6
significa Macro
6
. Usualmente la tecla macro está mapeada a Alt
Vi es un editor enfocado en código, por lo que el paradigma es distinto a los de un editor comun como Notepad. En primer lugar, vi tiene varios modos operativos.
Esc
en que espera otros modosi
en que inserta texto normalmente, como seria Notepad.R
en que reemplazamos el bufer preexistente, como modo insert:
para comandos asignables como :comando
, por ejemplo :wq!
Writte Quit (all)Luego, existen comandos distintos para hacer cosas en modo Normal
O
y o
señalan crear una nueva linea arriba o abajo de la actualh
o l
para movernos irquierda o derechaj
o k
para movernos arriba o abajox
elimina caracteres. 5x
elimina 5 caracteresdw
elimina palabras. 5dw
elimina 5 palabrasdd
elimina una linea. 5dd
eliminaria 5 lineas.
repite el ultimo comando. Por ejemplo 5dw
.
eliminaria 10 palabrasExisten muchas más opciones para Vi y sus derivados, como Vim. Varios programas, como VS Code, aceptan una sintaxis como Vi, dado que resulta más rapida para escribir código. ss64 tiene un cheatsheet rapido de Vi. Wikibooks tiene un libro sobre Vi y Vim.
Secure SHell es un programa presente en Linux y Windows (activado por defecto en las ultimas versiones), que permite establecer conexion a un host remoto a travez de una linea encriptada.
ssh <USUARIO>@<IP>
permite conectarse mediante contraseña especificando un <USUARIO>
en una maquina con cierta <IP>
ssh <USUARIO>@<DIRECCIÓN>
funciona si la maquina tiene una dirección de DNS, por ejemplo, aws-ec2-us-west-1-14df132ax13122300.com
ssh -i "Downloads/KEY.pem
scp
Secure CoPy permite transferir archivos entre un computador remoto y un local.
scp <remoto>:<archivo-remoto> <archivo-local>
para copiar de un remoto a localscp <archivo-local> <remoto>:<archivo-remoto>
para copiar de un remoto a localscp -r <remoto>:<directorio-remoto> <local>
para copiar un directorio remoto a localManualmente, SCP funciona para transferencias pequeñas, como scripts (.Rmd, .py) o archivos de datos individuales. Para transferir cantidades más grandes de datos (10s GB; 100+ archivos), podemos usar RSync, abrir el servicio SFTP de la maquina Linux, o usar servicios gestionados como Dropbox, Google Drive, OneDrive, etc; que resultan más convenientes.
Guia para conectarse mediante SSH al Laboratorio Nacional para Computación de Alto Rendimiento.
choco install microsoft-windows-terminal -y
instala la nueva terminaltldr apt-get
muestra un ejemplo y caso de uso de apt-get
apt-get install tldr
instala TLDREn la mayor parte de las distros ya viene preinstalado. Sino, se puede instalar siguiendo esta guia.
FONDECYT Postdoctoral Fellow, Universidad de Chile, deepen.data@gmail.com↩︎
Pregrado, Universidad de Chile↩︎