1 Tema 1. Introducción al biocómputo en sistemas GNU/Linux

Este repositorio GitHub fue creado para el Taller de Filoinformática - UNLP, 2-6 Julio 2018, por Pablo Vinuesa, CCG-UNAM.

version: 2018-07-01

Una vez que domines los comandos básicos que se presentarán seguidamente, recomiendo revisar tutoriales mucho más detallados y completos como los siguientes:


1.1 Descarga los apuntes y ejercicios al directorio Descargas tu máquina

  1. Descarga los archivos html y pdf del tema 1 al directorio Descargas de tu máquina.
  2. Ve al directorio Descargas y abre el archivo working_with_linux_commands.html o working_with_linux_commands.pdf para que puedas seguir la práctica.

1.2 Exploremos el sistema en el que estamos trabajando

En este Taller vamos a trabajar en sesiones locales, es decir, directamente sobre tu laptop o en las máquinas del salón de cómputo. Pero para hacer análisis con conjuntos grandes de datos (por ejemplo múltiples genomas), generamlente trabajaremos en servidores con múltimples CPUs y cores, a los cules accedemos estableciendo sesiones remotas con el comando ssh

1.2.1 ssh establecer sesion remota encriptada (segura) via ssh al servidor ivory

un terminal y ejecuta el comando mostrado abajo

ssh -X $USER@***.***.***.19:/home/$USER

1.2.2 hostname muestra el nombre del host (la máquina a la que estoy conectado) y la IP

hostname
hostname -i
## pablo-lap
## 127.0.1.1

1.2.3 uname muestra el sistema operativo del host

uname
uname -a
## Linux
## Linux pablo-lap 4.15.0-23-generic #25-Ubuntu SMP Wed May 23 18:02:16 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

1.2.4 muestra las especificaciones de la distribución del sistema operativo

cat /etc/os-release
## NAME="Ubuntu"
## VERSION="18.04 LTS (Bionic Beaver)"
## ID=ubuntu
## ID_LIKE=debian
## PRETTY_NAME="Ubuntu 18.04 LTS"
## VERSION_ID="18.04"
## HOME_URL="https://www.ubuntu.com/"
## SUPPORT_URL="https://help.ubuntu.com/"
## BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
## PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
## VERSION_CODENAME=bionic
## UBUNTU_CODENAME=bionic

1.2.5 Variables de ambiente: $HOME $PATH $USER

# imprime el contenido de la variable de ambiente $HOME
echo "$HOME"
## /home/vinuesa
# imprime el contenido de la variable de ambiente $USER
echo "$USER"

# Nota que son equivalentes las siguientes expresiones
echo "$HOME" 
echo "/home/$USER"
## vinuesa
## /home/vinuesa
## /home/vinuesa
# imprime el contenido de la variable de ambiente PATH; esto variará de máquina a máquina
echo "$PATH"
## /home/vinuesa/Software_downloads/get_homologues-x86_64-20160504/:/home/vinuesa/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/biotools/bin:/usr/local/biotools/bin/Snap:/usr/local/biotools/phylip-3.69/exe:/usr/local/biotools/FigTree.v1.2.3:/usr/local/biotools/dna2pep-1.1:/home/vinuesa/Software_downloads/get_homologues-x86_64-20170105:/usr/local/genome/bin:/usr/local/genome/lib:/usr/local/biotools/BLOCKS3.7_software/blimps3.7/blimps-3.7/bin/linux:/usr/local/biotools/ViennaRNA/ViennaRNA/bin:/usr/local/biotools/ViennaRNA/bin:/home/vinuesa/Software_downloads/BEASTv1.7.5/bin:/home/vinuesa/Software_downloads/Tracer_v1.5/bin:/home/vinuesa/Software_downloads/artemis:/usr/local/Bioperl_Scripts:/home/vinuesa/Software_downloads/guidance.v1.01/www/Guidance

1.3 EXPLORACIÓN EL SISTEMA DE ARCHIVOS

1.3.1 pwd imprime la ruta absoluta del directorio actual

# dónde me encuentro en el sistema?
pwd
## /home/vinuesa/Cursos/intro2phyloinfo_UNLP_Jul18

1.3.2 ls lista contenidos de un directorio

# ¿Dónde estoy en el sistema de archivos? - ruta absoluta
pwd
## /home/vinuesa/Cursos/intro2phyloinfo_UNLP_Jul18
# Qué contiene el directorio actual? - ejecuta el comando en tu terminal
ls
## administration.cmds
## Batch.cmds
## Category.cmds
## C.cmds
## clase3_GET_PHYLO_y_Stenotrophomonas_phylogenomics
## Filesystem.cmds
## Filesystem_commands.tab
## FORTRAN77.cmds
## hist_head.out
## hist_tail.out
## Intro2biocomputo_sistemas_en_sistemas_UNIX-Linux.pdf
## intro2filoinfo
## intro2linux
## intro_biocomputo_Linux_pt1.odp
## introduccion_a_la_pangenomica_microbiana_OMICAS-UAEM_Mar18.pdf
## linux_commands.tab
## linux_very_basic_commands_table.csv
## management.cmds
## Misc.cmds
## Network.cmds
## Pangenomica_y_filogenomica_bacteriana_OMICAS-UAEM_2Mar18.odp
## Phylogenomics_pan-genomics
## Process.cmds
## processing.cmds
## programming.cmds
## Programming.cmds
## README.md
## SCCS.cmds
## Shell.cmds
## System.cmds
## Text.cmds
## utilities.cmds
## working_with_linux_commands.code
## working_with_linux_commands.html
## working_with_linux_commands.pdf
## working_with_linux_commands.Rmd
# mostrar todos (-a all) los archivos, incluidos los ocultos - ejecuta el comando en tu terminal
ls -a
## .
## ..
## administration.cmds
## Batch.cmds
## Category.cmds
## C.cmds
## clase3_GET_PHYLO_y_Stenotrophomonas_phylogenomics
## Filesystem.cmds
## Filesystem_commands.tab
## FORTRAN77.cmds
## hist_head.out
## hist_tail.out
## Intro2biocomputo_sistemas_en_sistemas_UNIX-Linux.pdf
## intro2filoinfo
## intro2linux
## intro_biocomputo_Linux_pt1.odp
## introduccion_a_la_pangenomica_microbiana_OMICAS-UAEM_Mar18.pdf
## linux_commands.tab
## linux_very_basic_commands_table.csv
## management.cmds
## Misc.cmds
## Network.cmds
## Pangenomica_y_filogenomica_bacteriana_OMICAS-UAEM_2Mar18.odp
## Phylogenomics_pan-genomics
## Process.cmds
## processing.cmds
## programming.cmds
## Programming.cmds
## README.md
## .Rhistory
## SCCS.cmds
## Shell.cmds
## System.cmds
## Text.cmds
## utilities.cmds
## working_with_linux_commands.code
## working_with_linux_commands.html
## working_with_linux_commands.pdf
## working_with_linux_commands.Rmd
# mostrar los archivos y sus atributos
ls -l
## total 21184
## -rw-r--r-- 1 vinuesa vinuesa      78 Jul  1 16:33 administration.cmds
## -rw-r--r-- 1 vinuesa vinuesa     492 Jul  1 16:33 Batch.cmds
## -rw-r--r-- 1 vinuesa vinuesa      75 Jul  1 16:33 Category.cmds
## -rw-r--r-- 1 vinuesa vinuesa    2835 Jul  1 16:33 C.cmds
## drwxr-xr-x 2 vinuesa vinuesa    4096 Jun 30 09:20 clase3_GET_PHYLO_y_Stenotrophomonas_phylogenomics
## -rw-r--r-- 1 vinuesa vinuesa    1814 Jul  1 16:33 Filesystem.cmds
## -rw-r--r-- 1 vinuesa vinuesa    1814 Jul  1 16:33 Filesystem_commands.tab
## -rw-r--r-- 1 vinuesa vinuesa      54 Jul  1 16:33 FORTRAN77.cmds
## -rw-r--r-- 1 vinuesa vinuesa       0 Jul  1 16:33 hist_head.out
## -rw-r--r-- 1 vinuesa vinuesa       0 Jul  1 16:33 hist_tail.out
## -rw-r--r-- 1 vinuesa vinuesa 2302077 Jul  1 13:18 Intro2biocomputo_sistemas_en_sistemas_UNIX-Linux.pdf
## drwxr-xr-x 3 vinuesa vinuesa    4096 Jul  1 12:10 intro2filoinfo
## drwxr-xr-x 2 vinuesa vinuesa    4096 Jul  1 13:30 intro2linux
## -rw-r--r-- 1 vinuesa vinuesa 1683925 Jul  1 13:18 intro_biocomputo_Linux_pt1.odp
## -rw-r--r-- 1 vinuesa vinuesa 8755024 Jun 30 09:21 introduccion_a_la_pangenomica_microbiana_OMICAS-UAEM_Mar18.pdf
## -rw-r--r-- 1 vinuesa vinuesa   10193 Jul  1 16:32 linux_commands.tab
## -rw-r--r-- 1 vinuesa vinuesa    1705 Jul  1 13:18 linux_very_basic_commands_table.csv
## -rw-r--r-- 1 vinuesa vinuesa    1042 Jul  1 16:33 management.cmds
## -rw-r--r-- 1 vinuesa vinuesa    2133 Jul  1 16:33 Misc.cmds
## -rw-r--r-- 1 vinuesa vinuesa     215 Jul  1 16:33 Network.cmds
## -rw-r--r-- 1 vinuesa vinuesa 7745946 Jun 30 09:21 Pangenomica_y_filogenomica_bacteriana_OMICAS-UAEM_2Mar18.odp
## drwxr-xr-x 3 vinuesa vinuesa    4096 Jun 30 09:21 Phylogenomics_pan-genomics
## -rw-r--r-- 1 vinuesa vinuesa    1138 Jul  1 16:33 Process.cmds
## -rw-r--r-- 1 vinuesa vinuesa    2000 Jul  1 16:33 processing.cmds
## -rw-r--r-- 1 vinuesa vinuesa    1735 Jul  1 16:33 programming.cmds
## -rw-r--r-- 1 vinuesa vinuesa      81 Jul  1 16:33 Programming.cmds
## -rw-r--r-- 1 vinuesa vinuesa    3590 Jun 30 09:43 README.md
## -rw-r--r-- 1 vinuesa vinuesa     528 Jul  1 16:33 SCCS.cmds
## -rw-r--r-- 1 vinuesa vinuesa    1038 Jul  1 16:33 Shell.cmds
## -rw-r--r-- 1 vinuesa vinuesa    1394 Jul  1 16:33 System.cmds
## -rw-r--r-- 1 vinuesa vinuesa    2000 Jul  1 16:33 Text.cmds
## -rw-r--r-- 1 vinuesa vinuesa     567 Jul  1 16:33 utilities.cmds
## -rw-r--r-- 1 vinuesa vinuesa    6047 Jul  1 13:18 working_with_linux_commands.code
## -rw-r--r-- 1 vinuesa vinuesa  793996 Jul  1 16:33 working_with_linux_commands.html
## -rw-r--r-- 1 vinuesa vinuesa  257162 Jul  1 13:18 working_with_linux_commands.pdf
## -rw-r--r-- 1 vinuesa vinuesa   13718 Jul  1 16:35 working_with_linux_commands.Rmd

# mostrar todos (-a all) los archivos y sus atributos - ejecuta el comando en tu terminal
ls -la
## total 21192
## drwxr-xr-x  6 vinuesa vinuesa    4096 Jul  1 16:33 .
## drwxr-xr-x 21 vinuesa vinuesa    4096 Jul  1 12:57 ..
## -rw-r--r--  1 vinuesa vinuesa      78 Jul  1 16:33 administration.cmds
## -rw-r--r--  1 vinuesa vinuesa     492 Jul  1 16:33 Batch.cmds
## -rw-r--r--  1 vinuesa vinuesa      75 Jul  1 16:33 Category.cmds
## -rw-r--r--  1 vinuesa vinuesa    2835 Jul  1 16:33 C.cmds
## drwxr-xr-x  2 vinuesa vinuesa    4096 Jun 30 09:20 clase3_GET_PHYLO_y_Stenotrophomonas_phylogenomics
## -rw-r--r--  1 vinuesa vinuesa    1814 Jul  1 16:33 Filesystem.cmds
## -rw-r--r--  1 vinuesa vinuesa    1814 Jul  1 16:33 Filesystem_commands.tab
## -rw-r--r--  1 vinuesa vinuesa      54 Jul  1 16:33 FORTRAN77.cmds
## -rw-r--r--  1 vinuesa vinuesa       0 Jul  1 16:33 hist_head.out
## -rw-r--r--  1 vinuesa vinuesa       0 Jul  1 16:33 hist_tail.out
## -rw-r--r--  1 vinuesa vinuesa 2302077 Jul  1 13:18 Intro2biocomputo_sistemas_en_sistemas_UNIX-Linux.pdf
## drwxr-xr-x  3 vinuesa vinuesa    4096 Jul  1 12:10 intro2filoinfo
## drwxr-xr-x  2 vinuesa vinuesa    4096 Jul  1 13:30 intro2linux
## -rw-r--r--  1 vinuesa vinuesa 1683925 Jul  1 13:18 intro_biocomputo_Linux_pt1.odp
## -rw-r--r--  1 vinuesa vinuesa 8755024 Jun 30 09:21 introduccion_a_la_pangenomica_microbiana_OMICAS-UAEM_Mar18.pdf
## -rw-r--r--  1 vinuesa vinuesa   10193 Jul  1 16:32 linux_commands.tab
## -rw-r--r--  1 vinuesa vinuesa    1705 Jul  1 13:18 linux_very_basic_commands_table.csv
## -rw-r--r--  1 vinuesa vinuesa    1042 Jul  1 16:33 management.cmds
## -rw-r--r--  1 vinuesa vinuesa    2133 Jul  1 16:33 Misc.cmds
## -rw-r--r--  1 vinuesa vinuesa     215 Jul  1 16:33 Network.cmds
## -rw-r--r--  1 vinuesa vinuesa 7745946 Jun 30 09:21 Pangenomica_y_filogenomica_bacteriana_OMICAS-UAEM_2Mar18.odp
## drwxr-xr-x  3 vinuesa vinuesa    4096 Jun 30 09:21 Phylogenomics_pan-genomics
## -rw-r--r--  1 vinuesa vinuesa    1138 Jul  1 16:33 Process.cmds
## -rw-r--r--  1 vinuesa vinuesa    2000 Jul  1 16:33 processing.cmds
## -rw-r--r--  1 vinuesa vinuesa    1735 Jul  1 16:33 programming.cmds
## -rw-r--r--  1 vinuesa vinuesa      81 Jul  1 16:33 Programming.cmds
## -rw-r--r--  1 vinuesa vinuesa    3590 Jun 30 09:43 README.md
## -rw-r--r--  1 vinuesa vinuesa       0 Jul  1 12:54 .Rhistory
## -rw-r--r--  1 vinuesa vinuesa     528 Jul  1 16:33 SCCS.cmds
## -rw-r--r--  1 vinuesa vinuesa    1038 Jul  1 16:33 Shell.cmds
## -rw-r--r--  1 vinuesa vinuesa    1394 Jul  1 16:33 System.cmds
## -rw-r--r--  1 vinuesa vinuesa    2000 Jul  1 16:33 Text.cmds
## -rw-r--r--  1 vinuesa vinuesa     567 Jul  1 16:33 utilities.cmds
## -rw-r--r--  1 vinuesa vinuesa    6047 Jul  1 13:18 working_with_linux_commands.code
## -rw-r--r--  1 vinuesa vinuesa  793996 Jul  1 16:33 working_with_linux_commands.html
## -rw-r--r--  1 vinuesa vinuesa  257162 Jul  1 13:18 working_with_linux_commands.pdf
## -rw-r--r--  1 vinuesa vinuesa   13718 Jul  1 16:35 working_with_linux_commands.Rmd

1.3.2.1 Veamos y filtremos el contenido de direcotorios particulares (ls; ls -a; ls -l, ls -ltr; ls -al)


ls /
## bin
## boot
## cdrom
## dev
## etc
## home
## initrd.img
## initrd.img.old
## lib
## lib64
## libnss3.so
## lost+found
## media
## mnt
## opt
## proc
## root
## run
## sbin
## snap
## srv
## sys
## tmp
## usr
## var
## vmlinuz
## vmlinuz.old
### Lista todos los archivos del directorio /bin
# ejecuta primero este comando
ls /bin
### Veamos ahora los primeros 20 filtrando la salida con | head -20
# ahora filtra la salida añadiendo | head -20 (explicaremos con más detalle el comando '|')
ls /bin | head -20
## bash
## brltty
## bunzip2
## busybox
## bzcat
## bzcmp
## bzdiff
## bzegrep
## bzexe
## bzfgrep
## bzgrep
## bzip2
## bzip2recover
## bzless
## bzmore
## cat
## chacl
## chgrp
## chmod
## chown

1.3.2.2 expansión de caracteres con * y ?

### Lista los programas que inician con b del directorio /bin usando el comodín '*'
ls /bin/b*
## /bin/bash
## /bin/brltty
## /bin/bunzip2
## /bin/busybox
## /bin/bzcat
## /bin/bzcmp
## /bin/bzdiff
## /bin/bzegrep
## /bin/bzexe
## /bin/bzfgrep
## /bin/bzgrep
## /bin/bzip2
## /bin/bzip2recover
## /bin/bzless
## /bin/bzmore
### idem, pero con detalles de permisos etc de los archivos contenidos en /bin

ls -l /bin/b*
## -rwxr-xr-x 1 root root 1113504 Apr  4 13:30 /bin/bash
## -rwxr-xr-x 1 root root  748968 Apr 17 05:46 /bin/brltty
## -rwxr-xr-x 3 root root   34888 Jan 29  2017 /bin/bunzip2
## -rwxr-xr-x 1 root root 2022480 Dec 12  2017 /bin/busybox
## -rwxr-xr-x 3 root root   34888 Jan 29  2017 /bin/bzcat
## lrwxrwxrwx 1 root root       6 Jan 29  2017 /bin/bzcmp -> bzdiff
## -rwxr-xr-x 1 root root    2140 Jan 29  2017 /bin/bzdiff
## lrwxrwxrwx 1 root root       6 Jan 29  2017 /bin/bzegrep -> bzgrep
## -rwxr-xr-x 1 root root    4877 Jan 29  2017 /bin/bzexe
## lrwxrwxrwx 1 root root       6 Jan 29  2017 /bin/bzfgrep -> bzgrep
## -rwxr-xr-x 1 root root    3642 Jan 29  2017 /bin/bzgrep
## -rwxr-xr-x 3 root root   34888 Jan 29  2017 /bin/bzip2
## -rwxr-xr-x 1 root root   14328 Jan 29  2017 /bin/bzip2recover
## lrwxrwxrwx 1 root root       6 Jan 29  2017 /bin/bzless -> bzmore
## -rwxr-xr-x 1 root root    1297 Jan 29  2017 /bin/bzmore
# idem, pero ordenando los archivos por fechas de modificacion (-t), listando los mas recientes al final (-r), es decir, en orden reverso
ls -ltr /bin/b*
## -rwxr-xr-x 1 root root    1297 Jan 29  2017 /bin/bzmore
## lrwxrwxrwx 1 root root       6 Jan 29  2017 /bin/bzless -> bzmore
## -rwxr-xr-x 1 root root   14328 Jan 29  2017 /bin/bzip2recover
## -rwxr-xr-x 3 root root   34888 Jan 29  2017 /bin/bzip2
## -rwxr-xr-x 1 root root    3642 Jan 29  2017 /bin/bzgrep
## lrwxrwxrwx 1 root root       6 Jan 29  2017 /bin/bzfgrep -> bzgrep
## -rwxr-xr-x 1 root root    4877 Jan 29  2017 /bin/bzexe
## lrwxrwxrwx 1 root root       6 Jan 29  2017 /bin/bzegrep -> bzgrep
## -rwxr-xr-x 1 root root    2140 Jan 29  2017 /bin/bzdiff
## lrwxrwxrwx 1 root root       6 Jan 29  2017 /bin/bzcmp -> bzdiff
## -rwxr-xr-x 3 root root   34888 Jan 29  2017 /bin/bzcat
## -rwxr-xr-x 3 root root   34888 Jan 29  2017 /bin/bunzip2
## -rwxr-xr-x 1 root root 2022480 Dec 12  2017 /bin/busybox
## -rwxr-xr-x 1 root root 1113504 Apr  4 13:30 /bin/bash
## -rwxr-xr-x 1 root root  748968 Apr 17 05:46 /bin/brltty
# lista los archivos en /bin que empiezan por las letras b y c, y que terminen en 2 y t, respectivamente
ls /bin/b*2
ls /bin/c*t
## /bin/bunzip2
## /bin/bzip2
## /bin/cat
## /bin/chvt
# lista los archivos en /bin que empiezan por la letra c seguida de uno o dos caracteres más
ls /bin/c?
ls /bin/c??
## /bin/cp
## /bin/cat

1.3.4 Generación de directorios y permisos, copiado de archivos y directorios

1.3.4.1 mkdir genera nuevos directorios

# vamos a $HOME y generamos el directorio Cursos/intro2filoinfo
cd
mkdir Cursos && cd Cursos; mkdir intro2filoinfo

# AVANZADO: uso de condicionales: if [ CONDITION_IS_TRUE ]; then DO_THIS; else DOT_THAT; fi
if [ -d intro2filoinfo ]; then 
    echo "found dir intro2filoinfo"
else 
    mkdir intro2filoinfo
fi
## mkdir: no se puede crear el directorio «Cursos»: El archivo ya existe
## mkdir: no se puede crear el directorio «intro2filoinfo»: El archivo ya existe
## found dir intro2filoinfo
### comprueba los **permisos** del nuevo directorio con ls -l
pwd
ls -l
## /home/vinuesa/Cursos/intro2phyloinfo_UNLP_Jul18
## total 21184
## -rw-r--r-- 1 vinuesa vinuesa      78 Jul  1 16:33 administration.cmds
## -rw-r--r-- 1 vinuesa vinuesa     492 Jul  1 16:33 Batch.cmds
## -rw-r--r-- 1 vinuesa vinuesa      75 Jul  1 16:33 Category.cmds
## -rw-r--r-- 1 vinuesa vinuesa    2835 Jul  1 16:33 C.cmds
## drwxr-xr-x 2 vinuesa vinuesa    4096 Jun 30 09:20 clase3_GET_PHYLO_y_Stenotrophomonas_phylogenomics
## -rw-r--r-- 1 vinuesa vinuesa    1814 Jul  1 16:33 Filesystem.cmds
## -rw-r--r-- 1 vinuesa vinuesa    1814 Jul  1 16:33 Filesystem_commands.tab
## -rw-r--r-- 1 vinuesa vinuesa      54 Jul  1 16:33 FORTRAN77.cmds
## -rw-r--r-- 1 vinuesa vinuesa       0 Jul  1 16:33 hist_head.out
## -rw-r--r-- 1 vinuesa vinuesa       0 Jul  1 16:33 hist_tail.out
## -rw-r--r-- 1 vinuesa vinuesa 2302077 Jul  1 13:18 Intro2biocomputo_sistemas_en_sistemas_UNIX-Linux.pdf
## drwxr-xr-x 3 vinuesa vinuesa    4096 Jul  1 12:10 intro2filoinfo
## drwxr-xr-x 2 vinuesa vinuesa    4096 Jul  1 13:30 intro2linux
## -rw-r--r-- 1 vinuesa vinuesa 1683925 Jul  1 13:18 intro_biocomputo_Linux_pt1.odp
## -rw-r--r-- 1 vinuesa vinuesa 8755024 Jun 30 09:21 introduccion_a_la_pangenomica_microbiana_OMICAS-UAEM_Mar18.pdf
## -rw-r--r-- 1 vinuesa vinuesa   10193 Jul  1 16:32 linux_commands.tab
## -rw-r--r-- 1 vinuesa vinuesa    1705 Jul  1 13:18 linux_very_basic_commands_table.csv
## -rw-r--r-- 1 vinuesa vinuesa    1042 Jul  1 16:33 management.cmds
## -rw-r--r-- 1 vinuesa vinuesa    2133 Jul  1 16:33 Misc.cmds
## -rw-r--r-- 1 vinuesa vinuesa     215 Jul  1 16:33 Network.cmds
## -rw-r--r-- 1 vinuesa vinuesa 7745946 Jun 30 09:21 Pangenomica_y_filogenomica_bacteriana_OMICAS-UAEM_2Mar18.odp
## drwxr-xr-x 3 vinuesa vinuesa    4096 Jun 30 09:21 Phylogenomics_pan-genomics
## -rw-r--r-- 1 vinuesa vinuesa    1138 Jul  1 16:33 Process.cmds
## -rw-r--r-- 1 vinuesa vinuesa    2000 Jul  1 16:33 processing.cmds
## -rw-r--r-- 1 vinuesa vinuesa    1735 Jul  1 16:33 programming.cmds
## -rw-r--r-- 1 vinuesa vinuesa      81 Jul  1 16:33 Programming.cmds
## -rw-r--r-- 1 vinuesa vinuesa    3590 Jun 30 09:43 README.md
## -rw-r--r-- 1 vinuesa vinuesa     528 Jul  1 16:33 SCCS.cmds
## -rw-r--r-- 1 vinuesa vinuesa    1038 Jul  1 16:33 Shell.cmds
## -rw-r--r-- 1 vinuesa vinuesa    1394 Jul  1 16:33 System.cmds
## -rw-r--r-- 1 vinuesa vinuesa    2000 Jul  1 16:33 Text.cmds
## -rw-r--r-- 1 vinuesa vinuesa     567 Jul  1 16:33 utilities.cmds
## -rw-r--r-- 1 vinuesa vinuesa    6047 Jul  1 13:18 working_with_linux_commands.code
## -rw-r--r-- 1 vinuesa vinuesa  793996 Jul  1 16:33 working_with_linux_commands.html
## -rw-r--r-- 1 vinuesa vinuesa  257162 Jul  1 13:18 working_with_linux_commands.pdf
## -rw-r--r-- 1 vinuesa vinuesa   13718 Jul  1 16:35 working_with_linux_commands.Rmd
### generemos un subdirectorio por debajo del que acabamos de crear y movámonos a él
mkdir -p intro2filoinfo/lunes/sesion1_linux && cd intro2filoinfo/lunes/sesion1_linux

1.3.4.2 asignación de variables: guardemos el directorio de trabajo actual en una variable para su fácil acceso; var=$(pwd)

# imprime la ruta absoluta del directorio en el que nos encontramos ahora
pwd

# almacena la ruta (path) en una variable de nombre arbitrario (wkdir en este caso)
wkdir=$(pwd)

# imprime el contenido de la variable con echo, e interpolando el contenido de la misma con $
echo "$wkdir"
## /home/vinuesa/Cursos/intro2phyloinfo_UNLP_Jul18
## /home/vinuesa/Cursos/intro2phyloinfo_UNLP_Jul18

1.3.5 copiar, mover, renombrar y borrar directorios y archivos: cp; mv

Vamos a copiar los archivos que necesitamos para lo que sigue de las prácticas a subdirectorios de nuestro directorio de trabajo

### copia el archivo $HOME/Descargas/linux_commands.tab al directorio actual
# Noten el punto al final del comando, significa: copia X al directorio actual

cp $HOME/Descargas/linux_commands.tab .
ls
## administration.cmds
## Batch.cmds
## Category.cmds
## C.cmds
## clase3_GET_PHYLO_y_Stenotrophomonas_phylogenomics
## Filesystem.cmds
## Filesystem_commands.tab
## FORTRAN77.cmds
## hist_head.out
## hist_tail.out
## Intro2biocomputo_sistemas_en_sistemas_UNIX-Linux.pdf
## intro2filoinfo
## intro2linux
## intro_biocomputo_Linux_pt1.odp
## introduccion_a_la_pangenomica_microbiana_OMICAS-UAEM_Mar18.pdf
## linux_commands.tab
## linux_very_basic_commands_table.csv
## management.cmds
## Misc.cmds
## Network.cmds
## Pangenomica_y_filogenomica_bacteriana_OMICAS-UAEM_2Mar18.odp
## Phylogenomics_pan-genomics
## Process.cmds
## processing.cmds
## programming.cmds
## Programming.cmds
## README.md
## SCCS.cmds
## Shell.cmds
## System.cmds
## Text.cmds
## utilities.cmds
## working_with_linux_commands.code
## working_with_linux_commands.html
## working_with_linux_commands.pdf
## working_with_linux_commands.Rmd

1.3.5.1 Copiado recursivo de un directorio: cp -r dir1 dir2

### Copia el directorio $HOME/intro2filoinfo/sesion1_linux/ a tu $HOME
# 1 vamos a nuestro $HOME
cd
pwd

# 2. Noten  cp -r (recursively) y el punto '.' (directorio de destino), necesarios para copiar directorios completos
cp -r $wkdir .
ls -ltr

#  usando rutas absolutas, abreviadas mediante el uso de la variable de ambiente $HOME
# cp -r /home/$USER/intro2filoinfo/lunes/sesion1_linux/ $HOME/Descargas

1.3.6 generar un directorio, mover un archivo/directorio a un directorio, y borrar un directorio (rm -rf; recursively and force)

# generamos un nuevo directorio con un nombre sospechoso ;)
mkdir borrame

# qué hará este comando?
mv sesion1_linux borrame

# genera un listado recursivo de directorios y archivos con ls -R
ls -R borrame

# borra un archivo particular usando la ruta relativa al mismo
pwd
rm borrame/sesion1_linux/working_with_linux_commands.pdf

# elimina el directorio de nombre sospechoso; 
# inténtalo primero con rm borrame
rm -rf borrame

1.3.7 ln -s generación de una liga simbolica

Este comando es muy importante, ya que permite ahorrar mucho espacio en disco al evitar la multiplicación de copias fisicas en el disco duro del mismo archivo de gran tamaño (no es el caso de inux_basic_commands.tab)

# generamos la liga simbólica en nuestro $HOME

ln -s $wkdir/linux_commands.tab comandos_de_linux.tab
# confirmamos que se genero la liga
ls -l

# podemos renombrar la liga
mv comandos_de_linux.tab comandos_basicos.tab
ls

# y eliminarla
rm comandos_basicos.tab
ls

# sin perder el archivo original
ls -l $wkdir/linux_commands.tab

1.3.8 mv para mover o renombrar una la liga o cualquier archivo o directorio

  mv $wkdir/linux_commands.tab .
  ls
  
  rm linux_commands.tab

1.3.9 Visualización de contenidos de archivos

1.3.9.1 head y tail para desplegar la cabecera y cola de archivos

pwd
head linux_commands.tab 
## /home/vinuesa/Cursos/intro2phyloinfo_UNLP_Jul18
## IEEE Std 1003.1-2008 utilities Name  Category    Description     First appeared
## admin    SCCS    Create and administer SCCS files    PWB UNIX
## alias    Misc    Define or display aliases   
## ar   Misc    Create and maintain library archives    Version 1 AT&T UNIX
## asa  Text processing     Interpret carriage-control characters   System V
## at   Process management  Execute commands at a later time    Version 7 AT&T UNIX
## awk  Text processing     Pattern scanning and processing language    Version 7 AT&T UNIX
## basename     Filesystem  Return non-directory portion of a pathname; see also dirname    Version 7 AT&T UNIX
## batch    Process management  Schedule commands to be executed in a batch queue   
## bc   Misc    Arbitrary-precision arithmetic language     Version 6 AT&T UNIX
tail linux_commands.tab
## val  SCCS    Validate SCCS files     System III
## vi   Text processing     Screen-oriented (visual) display editor     1BSD
## wait     Process management  Await process completion    Version 4 AT&T UNIX
## wc   Text processing     Line, word and byte or character count  Version 1 AT&T UNIX
## what     SCCS    Identify SCCS files     PWB UNIX
## who  System administration   Display who is on the system    Version 1 AT&T UNIX
## write    Misc    Write to another user's terminal    Version 1 AT&T UNIX
## xargs    Shell programming   Construct argument lists and invoke utility     PWB UNIX
## yacc     C programming   Yet another compiler compiler   PWB UNIX
## zcat     Text processing     Expand and concatenate data     4.3BSD
# le podemos indicar el numero de lineas a desplegar
head -3 linux_commands.tab
## IEEE Std 1003.1-2008 utilities Name  Category    Description     First appeared
## admin    SCCS    Create and administer SCCS files    PWB UNIX
## alias    Misc    Define or display aliases   
tail -1 linux_commands.tab
## zcat     Text processing     Expand and concatenate data     4.3BSD

1.3.9.2 **cat* despliega uno o más archivos, concatenándolos

# el comando history permite acceder al historial de comandos ejecutados
# guardemos la cabecera y cola de nuestro historial en dos archivos independientes, respectivamente
history | head > hist_head.out
history | tail > hist_tail.out

# ahora concatenamos, es decir, pegamos o juntamos verticalmente un archivo detrás del otro
cat hist*out
# si queremos concatenar los archivos  en un orden particular:
cat hist_tail.out hist_head.out
# si le pasamos a cat un solo nombre de archivo, simplemente lo despliega en pantalla
cat hist_head.out
# podemos numerar las líneas
cat -n hist*out

1.3.10 el paginador less despliega archivos página a página

less linux_commands.tab | head
## IEEE Std 1003.1-2008 utilities Name  Category    Description     First appeared
## admin    SCCS    Create and administer SCCS files    PWB UNIX
## alias    Misc    Define or display aliases   
## ar   Misc    Create and maintain library archives    Version 1 AT&T UNIX
## asa  Text processing     Interpret carriage-control characters   System V
## at   Process management  Execute commands at a later time    Version 7 AT&T UNIX
## awk  Text processing     Pattern scanning and processing language    Version 7 AT&T UNIX
## basename     Filesystem  Return non-directory portion of a pathname; see also dirname    Version 7 AT&T UNIX
## batch    Process management  Schedule commands to be executed in a batch queue   
## bc   Misc    Arbitrary-precision arithmetic language     Version 6 AT&T UNIX

1.4 Edición de archivos con vim o gedit

# vim es un editor muy potente, usado por defecto en los sistemas Linux. 
# Es muy conveniente aprender a usarlo, pero require tiempo del que no disponemos aquí
# pueden usar el comando 'vimtutor' para estudiar el tutorial integrado de vim

# 'gedit' es un editor con ambiente gráfico, que usaremos rutinariamente en nuestras prácticas
# Noten el uso de & al final de la sentencia para enviar el proceso al fondo
# para evitar que bloquee la terminal

gedit linux_commands.tab &

1.5 Uso de tuberias de herramientas UNIX/Linux para filtrado de texto con cut, grep, sort, uniq, wc

1.5.1 wc cuenta lineas, palabras y caracteres

# dame el número de lineas, palabras y caracteres del archivo
wc linux_commands.tab

# Cuántas líneas tiene el archivo linux_commands.tab?
wc -l linux_commands.tab
##   161  1553 10193 linux_commands.tab
## 161 linux_commands.tab

1.5.2 cut, sort, uniq y pipes ‘|’ para procesar datos

  • cut corta líneas de texto/tablas por delimitadores de campo específicos extrayendo campos particulares
  • sort ordena
  • uniq regresa listas de valores únicos
  • el pipe ‘|’ conecta la salida de un comando con la entrada de otro

# saca la segunda columna del archivo y ordenalos 
cut -f2 linux_commands.tab | head
## Category 
## SCCS 
## Misc 
## Misc 
## Text processing 
## Process management 
## Text processing 
## Filesystem 
## Process management 
## Misc
# cuantos elementos unicos tiene?
cut -f2 linux_commands.tab | sort -u | wc -l
## 13
# cuenta las ocurrencias de las diferentes palabras contenidas en la segunda columna del archivo linux_commands.tab
cut -f2 linux_commands.tab | sort | uniq -c
##      11 Batch utilities 
##       1 Category 
##       9 C programming 
##      28 Filesystem 
##       1 FORTRAN77 programming 
##      38 Misc 
##       4 Network 
##      14 Process management 
##       1 Programming 
##      10 SCCS 
##      14 Shell programming 
##       1 System administration 
##      29 Text processing

1.5.3 man despliega el manual de cada comando

# mira las opciones de cut y sort en la manpage
man cut | head -30
## CUT(1)                                                       User Commands                                                      CUT(1)
## 
## NAME
##        cut - remove sections from each line of files
## 
## SYNOPSIS
##        cut OPTION... [FILE]...
## 
## DESCRIPTION
##        Print selected parts of lines from each FILE to standard output.
## 
##        With no FILE, or when FILE is -, read standard input.
## 
##        Mandatory arguments to long options are mandatory for short options too.
## 
##        -b, --bytes=LIST
##               select only these bytes
## 
##        -c, --characters=LIST
##               select only these characters
## 
##        -d, --delimiter=DELIM
##               use DELIM instead of TAB for field delimiter
## 
##        -f, --fields=LIST
##               select only these fields;  also print any line that contains no delimiter character, unless the -s option is specified
## 
##        -n     (ignored)
## 
##        --complement
man sort | head -20
## SORT(1)                                                      User Commands                                                     SORT(1)
## 
## NAME
##        sort - sort lines of text files
## 
## SYNOPSIS
##        sort [OPTION]... [FILE]...
##        sort [OPTION]... --files0-from=F
## 
## DESCRIPTION
##        Write sorted concatenation of all FILE(s) to standard output.
## 
##        With no FILE, or when FILE is -, read standard input.
## 
##        Mandatory arguments to long options are mandatory for short options too.  Ordering options:
## 
##        -b, --ignore-leading-blanks
##               ignore leading blanks
## 
##        -d, --dictionary-order

1.5.4 grep Filtra las lineas de un archivo que contienen (o no) caracteres o expresiones regulares

grep Filesystem linux_commands.tab | head
## basename     Filesystem  Return non-directory portion of a pathname; see also dirname    Version 7 AT&T UNIX
## cat  Filesystem  Concatenate and print files     Version 1 AT&T UNIX
## cd   Filesystem  Change the working directory    Version 6 AT&T UNIX
## chgrp    Filesystem  Change the file group ownership     PWB UNIX
## chmod    Filesystem  Change the file modes/attributes/permissions    Version 1 AT&T UNIX
## chown    Filesystem  Change the file ownership   Version 1 AT&T UNIX
## cksum    Filesystem  Write file checksums and sizes  4.4BSD
## cmp  Filesystem  Compare two files; see also diff    Version 1 AT&T UNIX
## compress     Filesystem  Compress data   4.3BSD
## cp   Filesystem  Copy files  Version 1 AT&T UNIX
# ojo: Linux es sensible a mayúsculas y minúsculas: prueba este comando para comprobarlo
grep filesystem linux_commands.tab

grep Filesystem linux_commands.tab | head

# grep -i lo hace insensible a la fuente
grep -i filesystem linux_commands.tab | head
## basename     Filesystem  Return non-directory portion of a pathname; see also dirname    Version 7 AT&T UNIX
## cat  Filesystem  Concatenate and print files     Version 1 AT&T UNIX
## cd   Filesystem  Change the working directory    Version 6 AT&T UNIX
## chgrp    Filesystem  Change the file group ownership     PWB UNIX
## chmod    Filesystem  Change the file modes/attributes/permissions    Version 1 AT&T UNIX
## chown    Filesystem  Change the file ownership   Version 1 AT&T UNIX
## cksum    Filesystem  Write file checksums and sizes  4.4BSD
## cmp  Filesystem  Compare two files; see also diff    Version 1 AT&T UNIX
## compress     Filesystem  Compress data   4.3BSD
## cp   Filesystem  Copy files  Version 1 AT&T UNIX
## basename     Filesystem  Return non-directory portion of a pathname; see also dirname    Version 7 AT&T UNIX
## cat  Filesystem  Concatenate and print files     Version 1 AT&T UNIX
## cd   Filesystem  Change the working directory    Version 6 AT&T UNIX
## chgrp    Filesystem  Change the file group ownership     PWB UNIX
## chmod    Filesystem  Change the file modes/attributes/permissions    Version 1 AT&T UNIX
## chown    Filesystem  Change the file ownership   Version 1 AT&T UNIX
## cksum    Filesystem  Write file checksums and sizes  4.4BSD
## cmp  Filesystem  Compare two files; see also diff    Version 1 AT&T UNIX
## compress     Filesystem  Compress data   4.3BSD
## cp   Filesystem  Copy files  Version 1 AT&T UNIX
# filtra las lineas que contienen Filesystem o Text processing
egrep 'Filesyst|Text processing' linux_commands.tab
## asa  Text processing     Interpret carriage-control characters   System V
## awk  Text processing     Pattern scanning and processing language    Version 7 AT&T UNIX
## basename     Filesystem  Return non-directory portion of a pathname; see also dirname    Version 7 AT&T UNIX
## cat  Filesystem  Concatenate and print files     Version 1 AT&T UNIX
## cd   Filesystem  Change the working directory    Version 6 AT&T UNIX
## chgrp    Filesystem  Change the file group ownership     PWB UNIX
## chmod    Filesystem  Change the file modes/attributes/permissions    Version 1 AT&T UNIX
## chown    Filesystem  Change the file ownership   Version 1 AT&T UNIX
## cksum    Filesystem  Write file checksums and sizes  4.4BSD
## cmp  Filesystem  Compare two files; see also diff    Version 1 AT&T UNIX
## comm     Text processing     Select or reject lines common to two files  Version 4 AT&T UNIX
## compress     Filesystem  Compress data   4.3BSD
## cp   Filesystem  Copy files  Version 1 AT&T UNIX
## csplit   Text processing     Split files based on context    PWB UNIX
## cut  Text processing     Cut out selected fields of each line of a file  System III
## dd   Filesystem  Convert and copy a file     Version 5 AT&T UNIX
## df   Filesystem  Report free disk space  Version 1 AT&T UNIX
## diff     Text processing     Compare two files; see also cmp     Version 5 AT&T UNIX
## dirname  Filesystem  Return the directory portion of a pathname; see also basename   System III
## du   Filesystem  Estimate file space usage   Version 1 AT&T UNIX
## ed   Text processing     The standard text editor    Version 1 AT&T UNIX
## ex   Text processing     Text editor     1BSD
## expand   Text processing     Convert tabs to spaces  3BSD
## file     Filesystem  Determine file type     Version 4 AT&T UNIX
## find     Filesystem  Find files  Version 1 AT&T UNIX
## fold     Text processing     Filter for folding lines    1BSD
## head     Text processing     Copy the first part of files    PWB UNIX[citation needed]
## iconv    Text processing     Codeset conversion  HP-UX
## join     Text processing     Merges two sorted text files based on the presence of a common field    Version 7 AT&T UNIX
## link     Filesystem  Create a hard link to a file    Version 1 AT&T UNIX
## ln   Filesystem  Link files  Version 1 AT&T UNIX
## lp   Text processing     Send files to a printer     System V
## ls   Filesystem  List directory contents     Version 1 AT&T UNIX
## mkdir    Filesystem  Make directories    Version 1 AT&T UNIX
## mkfifo   Filesystem  Make FIFO special files     4.4BSD[dubious – discuss]
## more     Text processing     Display files on a page-by-page basis   3BSD
## mv   Filesystem  Move files  Version 1 AT&T UNIX
## nl   Text processing     Line numbering filter   System III
## paste    Text processing     Merge corresponding or subsequent lines of files    Version 32V AT&T UNIX
## patch    Text processing     Apply changes to files  4.3BSD
## pathchk  Filesystem  Check pathnames     
## pr   Text processing     Print files     Version 1 AT&T UNIX
## pwd  Filesystem  print working directory - Return working directory name     Version 5 AT&T UNIX
## rm   Filesystem  Remove directory entries    Version 1 AT&T UNIX
## rmdir    Filesystem  Remove directories  Version 1 AT&T UNIX
## sed  Text processing     Stream editor   Version 7 AT&T UNIX
## sort     Text processing     Sort, merge, or sequence check text files   Version 1 AT&T UNIX
## tail     Text processing     Copy the last part of a file    PWB UNIX[citation needed]
## touch    Filesystem  Change file access and modification times   Version 7 AT&T UNIX
## tr   Text processing     Translate characters    Version 4 AT&T UNIX
## tsort    Text processing     Topological sort    Version 7 AT&T UNIX
## unexpand     Text processing     Convert spaces to tabs  3BSD
## uniq     Text processing     Report or filter out repeated lines in a file   Version 3 AT&T UNIX
## unlink   Filesystem  Call the unlink function    Version 1 AT&T UNIX
## vi   Text processing     Screen-oriented (visual) display editor     1BSD
## wc   Text processing     Line, word and byte or character count  Version 1 AT&T UNIX
## zcat     Text processing     Expand and concatenate data     4.3BSD

1.5.5 > redireccionado de la salida STOUT a un archivo

grep Filesystem linux_commands.tab > Filesystem_commands.tab

1.6 Inicios de programación en Bash

1.6.1 asignación y uso de variables

# vamos a HOME
cd

wkdir=$(pwd)

cadena_loca="cadena arbitraria s dlfdf ladf adf asñldf"

# recuerda, para recuperar el valor de la variable tenemos que dereferenciarla con '$'
# podemos usar echo para imprimir texto junto con variables; toda la cadena debe estar 
# escrita entre comillas para que echo la interprete como un solo argumento
echo "working in: $wkdir"
echo "$cadena_loca"
## working in: /home/vinuesa
## cadena arbitraria s dlfdf ladf adf asñldf

1.6.2 condicionales if/fi if/else/fi

if [ -d intro2filoinfo ]; then
     echo "dir intro2filoinfo exists, will move into it"
     cd intro2filoinfo
else
     mkdir intro2filoinfo && cd intro2filoinfo
fi
## dir intro2filoinfo exists, will move into it

1.6.3 bucles for

#>>> AVANZADO: usa un bucle for, acoplado a las herramientas de filtrado arriba mostradas,
#              para generar archivos que contengan solo los comandos de las diferentes categorias
#              nombrando a los archivos por estas

for type in $(cut -f2 linux_commands.tab | sort -u); do 
   grep "$type" linux_commands.tab > ${type}.cmds
done


# o en una línea for type in $(cut -f2 linux_commands.tab | sort -u); do grep "$type" linux_commands.tab > ${type}.cmds; done

veamos el resultado de ejecutar el bucle anterior:

ls *cmds
## administration.cmds
## Batch.cmds
## Category.cmds
## C.cmds
## Filesystem.cmds
## FORTRAN77.cmds
## management.cmds
## Misc.cmds
## Network.cmds
## Process.cmds
## processing.cmds
## programming.cmds
## Programming.cmds
## SCCS.cmds
## Shell.cmds
## System.cmds
## Text.cmds
## utilities.cmds

1.6.3.1 alinear todos los archivo fasta en el directorio seq_data y modificación de nombres en variables

Este es un ejemplo hipotético. Asumimos que tenemos un directorio seq_data con las secuencias a alinear en formato FASTA.

# 1. ir al directorio con las secuencias
cd $HOME/seq_data

# 2. corremos el alineador muscle dentro de un bucle for
#    pasándole cada archivo fasta del directorio en forma
#    del alias $f; muscle lee $f (muscle < $f) y escribe
#    el lineamiento a un nuevo archivo (> ${f%.*}_musAln.fas)
#    que se llamará así: nombre_de_archivo_original_musAln.fas
for f in *fasta; do muscle < $f > ${f%.*}_musAln.fas; done