Genómica evolutiva 2021


Objetivos:


  1. Familiarizarse con la línea de comando de Linux
  2. Moverse en el sistema de archivos desde la línea de comando
  3. Comandos básicos
  4. Explorar y editar archivos
  5. Redireccionar la entrada y la salida. Pipelines
  6. Comandos útiles
  7. Trabajo de forma remota: ssh, scp, y sftp


  1. La línea de comando


La línea de comandos es una interfaz basada en texto que se usa para operar software e interactuar con el sistema operativo escribiendo comandos en la interfaz y recibiendo una respuesta de la misma manera. Hay varias razones por las que usamos la línea de comandos en lugar de usar una interfaz gráfica.

Muchas herramientas bioinformáticas solo se pueden usar a través de una interfaz de línea de comandos o tienen capacidades adicionales en la versión de línea de comandos que no están disponibles en la interfaz gráfica. Un ejemplo es BLAST, que en su versión de línea de comando ofrece muchas funciones avanzadas no disponibles en la web.

Los comandos están diseñados para trabajar en secuencia. Cada uno de los comandos de Linux está diseñado para hacer algo particular y hacerlo bien. La filosofía detrás de este diseño es agregar más funcionalidad al agregar otro comando que se pueda encadenar a la salida del anterior generando lo que llamamos una tubería o pipeline. Esto lo vamos a ver en detalle más adelante.

Las personas tenemos tendencia a cometer errores. Las secuencias de comandos permiten estandarizar un conjunto de instrucciones que se van a ejecutar de la misma manera cada vez que se ejecute la secuencia de comandos.

La línea de comando también permite que tareas repetitivas sean ejecutadas en una única acción.

El scripting de shell nos permite automatizar tareas o comandos, que alternativamente tendrían que ejecutarse una por una por un operador humano.

Muchos problemas bioinformáticos requieren mucho poder computacional y no pueden ejecutarse de manera realista en nuestras máquinas personales. En estos casos vamos a trabajar en servidores remotos, y la línea de comando permite trabajar de forma remota con mayor facilidad que la interfaz gráfica; la interfaz gráfica remota es muy lenta.


Terminal, shell y línea de comando


Para explicar un poco la jerga, la terminal es la ventana que se abre en el entorno de escritorio. Al abrir una terminal se ejecuta un segundo programa, el shell, que es el interpretador de comandos. El shell interpreta lo que escribimos en la terminal y lo convierte en instrucciones para el sistema. En la mayor parte de los sistemas tipo Unix/Linux, el shell por defecto para las cuentas de usuario es Bash (Bourne-again shell).

La interfaz de línea de comando es una forma de pasar instrucciones a la computadora en forma de líneas de texto, que serán interpretadas por el shell.

El prompt es el carácter o conjunto de caracteres el shell nos muestra para indicar que está a la espera de instrucciones. En los sistemas tipo Unix/Linux el prompt incluye el símbolo $ para los usuarios y # para el administrador (root), además de información acerca del usuario, equipo y directorio de trabajo en el cual estamos “parados”. Por ejemplo:

estudiantes@equipo:~$
root@equipo:/media#

En el primer ejemplo, “estudiantes” es el nombre de usuario, seguido de @ y el nombre de la máquina (“equipo”), el símbolo tilde (~) que representa el home del usuario, el directorio actual en este ejemplo, y el carácter $ que indica que es una cuenta de usuario. En segundo ejemplo, el usuario es el root, lo que también se indica con el carácter #, y el directorio de trabajo es /media.

En un sistema Ubuntu 18.04, que es el que está ejecutándose en su máquina virtual, puede encontrar un lanzador para el terminal haciendo clic en el elemento “Actividades” en la parte superior izquierda de la pantalla o en el elemento “Mostrar aplicaciones” en la parte inferior izquierda, luego escribiendo las primeras letras de “terminal”, “comando”, “prompt” o “shell”.


Shortcut: puede abrir una ventana de terminal usando la combinación de teclas Ctrl+Alt+T.


Independientemente de la forma en que abra la terminal, se van a encontrar con una ventana de este tipo:


¿Cómo usamos la línea de comando?


Los comandos se ejecutan invocándolos por su nombre desde el prompt. Además, éstos suelen tener opciones y argumentos. Los argumentos son las entradas que le pasamos al programa al momento de ejecutarlo para que sean procesadas. Las opciones modifican la forma en que funciona el programa, y suelen estar representados por una letra precedida de un guión. Si un programa tiene tanto opciones como argumentos, primero se pasan las opciones y después los argumentos.

Veamos un ejemplo con el comando ls, (de list), que nos lista en pantalla los nombre de los archivos de un directorio dado. Este comando, por defecto lista los nombre de los archivos contenidos en el directorio de trabajo actual. De esta manera, si escribimos en la terminal ls, vamos a obtener una lista de los archivos y directorios que se encuentran en donde estamos parados.

estudiantes@equipo:~$ ls
busco_downloads  Descargas  Documentos  Escritorio  igv  Imágenes  Programas  R

Es posible que querramos listar el contenido de otro directorio o archivo, por ejemplo, podemos listar el contenido del directorio /home. En los sistemas linux, este directorio contiene el home personal de cada usuario, por lo que vamos a obtener una lista con el home de cada usuario.

estudiantes@equipo:~$ ls /home
estudiantes
falvarez
lucia
luisa

Pero también es posible que querramos obtener más detalles del contenido del directorio, por ejemplo, información de permisos, tamaño, o fecha de modificación. Para eso, usamos la opción “-l” (de long list).

estudiantes@equipo:~$ ls -l /home
total 16
drwxr-xr-x 20 estudiantes estudiantes 4096 abr  7 01:57 estudiantes
drwxr-xr-x 23 falvarez    falvarez    4096 mar 20 13:42 falvarez
drwxr-xr-x 20 lucia       lucia       4096 mar 23 18:42 lucia
drwxr-xr-x  2 luisa       luisa       4096 feb 12  2020 luisa

En este ejemplo, ls es el comando, -l es una opción, ya que cambia la forma en que funciona el comando, y /home es un argumento.

Distintos comandos tienen distinto número de argumentos, que pueden ser obligatorios u opcionales. Vamos a ir viendo ejemplos de ello a medida que avancemos en el práctico. También vamos a ver más sobre la información que nos da ls -l, en particular la parte de permisos de acceso.


  1. El sistema de archivos de Linux


En Unix los archivos están organizados en directorios (equivalentes a las carpetas de Windows). Esto, que llamamos el sistema de archivos, tiene una estructura jerárquica o de árbol con la raíz en la parte superior. La raíz o root está simbolizada por el carácter /.


El directorio en el que nos encontramos al abrir una terminal es el home de nuestro usuario, que se encuentra dentro del directorio /home. Como se mencionó anteriormente, este directorio está simbolizado por el carácter ~, como puede ver en su prompt.

Para conocer el directorio de trabajo actual (es decir, en dónde nos encontramos en el sistema de archivos), usamos el comando pwd (por print working directory). Para cambiar de directorio usamos el comando cd (change directory), dándole como argumento el directorio hacia el que nos queremos mover. Además, puede acceder al home de su usuario en cualquier momento en forma instantánea usando el comando cd sin ningún argumento. El programa asumirá como argumento por defecto su directorio personal. Por ejemplo:

Para conocer el directorio de trabajo actual (es decir, en dónde nos encontramos en el sistema de archivos), usamos el comando pwd (por print working directory). Para cambiar de directorio usamos el comando cd (change directory), dándole como argumento el directorio hacia el que nos queremos mover. Además,puede acceder al home de su usuario en cualquier momento en forma instantánea usando el comando cd sin ningún argumento. El programa asumirá como argumento por defecto su directorio personal. Por ejemplo:

# imprimimos el directorio de trabajo actual
estudiantes@equipo:~$ pwd
/home/estudiantes

# nos movemos con el comando cd
estudiantes@equipo:~$ cd /media

# verificamos que nos movimos imprimiendo el directorio de trabajo
estudiantes@equipo:/media$ pwd
/media

# volvemos a nuestro home
estudiantes@equipo:/media$ cd
estudiantes@equipo:~$

Puede ver que a medida que nos movimos, el prompt fue cambiando para indicar el nuevo directorio de trabajo.


Permisos de acceso


Entender cómo funcionan los permisos es fundamental para trabajar cómodamente en sistemas multi-usuario, además de proveer de un nivel fundamental de seguridad a nuestros archivos y directorios.

En primer lugar, los archivos tienen tres tipos de permisos: lectura (r), escritura (w), y ejecución (x). El permiso de lectura se refiere a poder acceder al contenido del archivo y copiar el archivo, el de escritura refiere a poder modificar su contenido, y el de ejecución a poder ejecutarlo (solo tiene sentido para archivos ejecutables). Generalmente sólo el propietario del archivo tiene permiso de escritura, a menos que se modifiquen sus permisos.

Por otro lado, tenemos tres tipos de usuario: usuario (u), grupo (g), y otros (o). Cada archivo es propiedad de un usuario específico y un grupo específico. Los permisos de usuario son los utilizados por el usuario al que pertenece un archivo o directorio, y los permisos de grupo son utilizados por el grupo al que pertenece el archivo o directorio. Los permisos de otros son usados por los usuarios que no son el propietario ni los miembros del grupo que posee el archivo o directorio. De estos tres grupos, los que realmente nos van a importar son los de usuario y los de otros, no nos vamos a preocupar por los grupos.

Cada archivo o directorio tiene tres sets de permisos, uno por cada tipo de usuario, es decir que hay un set (r,w,x) para el usuario, otro para el grupo, y otro para otros, mostrados en ese orden a la izquierda de los detalles del archivo o directorio que se listan con el comando ls -l.



En esta representación, el primer espacio corresponde al tipo de archivo: un guión (-) simboliza un archivo y una (d) simboliza un directorio. Los siguientes tres espacios son los permisos del dueño del archivo, en orden (r,w,x). Un guión representa que no tenemos dicho permiso. En el ejemplo de la imagen, el dueño del archivo tiene permisos de lectura y escritura pero no de ejecución. Tanto los usuarios del grupo como otros usuarios sólo tienen permiso de lectura. Luego de los permisos tenemos la información del usuario al que pertenece el archivo y luego la del grupo.


Como vimos anteriormente, usando la opción ls -l (long list) obtenemos los detalles de permisos de acceso, dueño, grupo, tamaño, y fecha de modificación de los archivos. Para listar los permisos de un directorio y no de su contenido, usamos la combinación de las opciones -l y -d, (o -ld, que es lo mismo).


#listamos los detalles del archivo .bashrc
estudiantes@equipo:~$ ls -l .bashrc
-rw-r--r-- 1 estudiantes estudiantes 3926 mar 20 15:01 .bashrc

#listamos los detalles del contenido del directorio /home
estudiantes@equipo:~$ ls -l /home
total 16
drwxr-xr-x 20 estudiantes estudiantes 4096 abr  7 01:57 estudiantes
drwxr-xr-x 23 falvarez    falvarez    4096 mar 20 13:42 falvarez
drwxr-xr-x 20 lucia       lucia       4096 mar 23 18:42 lucia
drwxr-xr-x  2 luisa       luisa       4096 feb 12  2020 luisa

#listamos los detalles del directorio /home
estudiantes@equipo:~$ ls -l -d /home
drwxr-xr-x 6 root root 4096 mar 17 18:00 /home/


Modificando los permisos de acceso


El comando chmod (change mode) permite cambiar los permisos, mientras que el comando chown (change owner) cambia el usuario al que pertenece el archivo. Tenga en cuenta que sólo puede cambiar los permisos y propiedad de sus propios archivos, a menos que tenga permisos de administrador.

estudiantes@equipo:~$ echo "echo Hola" > file  #escribimos una instrucción ejecutable en un archivo
estudiantes@equipo:~$ chmod u+x file  # damos permisos de ejecución al usuario
estudiantes@equipo:~$ ./file  # ejecutamos el archivo
Hola

En este caso dimos permisos de ejecución al usuario “estudiantes”, que es a quien pertenece el archivo. De forma general, primero decimos a quién le queremos dar permisos y luego qué permiso queremos dar. Por ejemplo, o+w da permisos de escritura a “otros”, y a+x da permiso de ejecución a todos los grupos.

En todos los sistemas Unix, incluido Linux, un superusuario es el usuario del sistema que tiene todos los permisos para poder realizar tareas administrativas.

La forma de Ubuntu de realizar tareas administrativas es ganar temporalmente privilegios de superusuario colocando el comando sudo (por super user do) delante de otro comando que requiere poderes de superusuario. Por ejemplo, vamos a listar el contenido de un directorio al que no tenemos acceso sin dichos permisos con y sin sudo:


estudiantes@equipo:~$ ls /root
ls: no se puede abrir el directorio '/root/': Permiso denegado

estudiantes@equipo:~$ sudo ls /root/
[sudo] contraseña para estudiantes:
Descargas  Documentos  Escritorio  igv Imágenes  Música  Plantillas  Público  snap  Vídeos


Al usar sudo, el sistema responderá pidiendo su clave (que es idéntica a su contraseña de inicio de sesión). Mientras escribe la clave, no aparecerá nada en la terminal (no verá asteriscos como en otras interfaces), simplemente escriba su clave y presione Enter.


Rutas (paths) absolutas y relativas


Nos podemos referir a la posición de los archivos en el sistema de archivos de dos formas, la absoluta y la relativa. En la primera indicamos la ubicación absoluta del archivo desde la raíz del sistema de archivos, que es independiente del lugar en el que estamos nosotros. Notar que, como salen de la raíz, las rutas absolutas siempre comienzan con el símbolo / y siempre que una ruta comienza con este símbolo es absoluta.

La ruta relativa refiere a la ubicación del archivo en relación al lugar donde nos encontramos nosotros en el sistema de archivos, es decir el directorio de trabajo actual. Esta ruta dependerá de dónde nos encontramos parados. Para determinarlo, coma fuera mencionado, usamos el comando pwd. Esto nos devolverá el path absoluto del directorio en el que nos encontramos. Para usar las rutas relativas deberemos aprender a movernos hacia arriba en la jerarquía. Para eso usaremos el punto . y el doble punto ...


estudiantes@equipo:~$ pwd
/home/estudiantes
estudiantes@equipo:~$ cd ..
estudiantes@equipo:/home$ pwd
/home
estudiantes@equipo:/home$ cd ../usr/bin/
estudiantes@equipo:/usr/bin$ pwd
/usr/bin
estudiantes@equipo:~$ cd
estudiantes@equipo:~$ pwd
/home/estudiantes


A la hora de nombrar archivos y directorios, hay que tener cuenta:


Para pensar:


  1. Comandos básicos.


Puede crear un directorio nuevo con el comando mkdir seguido del nombre del directorio a crear. De la misma manera, podemos eliminar directorios con el comando rmdir, si el mismo está vacío.

estudiantes@equipo:~$ mkdir nuevo_dir

El comando cp nos permite copiar archivos o directorios. El comando requiere dos argumentos: el primero es la ruta completa del archivo de origen, el segundo es el directorio de destino.

El siguiente comando copia el archivo “refseq_db.faa” desde el directorio “busco_downloads/lineages/saccharomycetes_odb10/” al directorio “Documentos”.

estudiantes@equipo:~$ cp  busco_downloads/lineages/saccharomycetes_odb10/refseq_db.faa Documentos/

Para copiar directorios con todo su contenido, debemos usar la opción -r. El siguiente comando copia el directorio “busco_downloads/lineages/saccharomycetes_odb10/” y todo su contenido al directorio “Documentos”.

estudiantes@equipo:~$ cp -r busco_downloads/lineages/saccharomycetes_odb10/ Documentos/

Use el comando ls para verificar si el contenido de “Documentos” es el esperado después de los comandos anteriores.

Para pensar:


El comando mv nos permite mover archivos o directorios. El siguiente comando copia “refseq_db.faa” desde “Documentos” al directorio de trabajo actual (nuestro home).

estudiantes@equipo:~$ mv Documentos/refseq_db.faa .

mv es un comando flexible que también nos permite renombrar sin cambiar la ubicación, o renombrar y mover a la vez. Esto mueve el directorio “saccharomycetes_odb10” desde “Documentos” hacia donde estamos parados (nuestro home) y además cambia el nombre a “mydir”.

estudiantes@equipo:~$ mv Documentos/saccharomycetes_odb10 mydir

El comando rm se utiliza para eliminar archivos. Podemos utilizarlo también para eliminar directorios no vacíos, con las opciones -rf:

estudiantes@equipo:~$ rm -rf mydir

Esto remueve el directorio “mydir” y todos los archivos y directorios que se encuentran dentro.

Cuidado: Los comandos cp y mv sobrescriben sin preguntar. De la misma manera, rm y rmdir eliminan definitivamente sin preguntar.


  1. Explorar y editar archivos de texto


El comando cat carga todo el contenido del archivo a la memoria y lo manda a la salida estándar (por defecto la pantalla). También es usado para concatenar archivos, para eso le pasamos cada archivo a concatenar como argumento (por ejemplo, cat file1 file2 file3). Este comando es uno de los más frecuentemente utilizados, pero no es la herramienta ideal para visualizar archivos de gran tamaño.

Los comandos less y more permiten explorar el contenido del archivo de a una página por vez. La mayor diferencia entre ellos es que less no carga todo el contenido a la memoria a la vez, sino que lo carga a medida que lo vamos explorando. Para salir del modo de exploración de less y more, usamos la tecla Q.

head y tail permiten extraer las primeras y últimas líneas de un archivo, respectivamente. Su uso más habitual es extraer las primeras líneas con head como una forma de exploración rápida. Por defecto nos devuelve las primeras 10 líneas, pero se puede pedir otro número. Por ejemplo, head -20 file nos da las primeras 20 líneas de “file”.

Los comandos anteriores nos permiten explorar pero no editar archivos. Para hacerlo, debemos usar un editor de texto como nano o joe. Simplemente teclee el nombre del editor a usar seguido del nombre del archivo a editar. Las combinaciones de teclas para las funciones más básicas aparecerán en la parte inferior de la pantalla del editor, pero hay muchísimas más funciones y atajos que mejoran la usabilidad de los editores. Puede ver la lista completa de atajos navegando en la ayuda del editor (Ctrl+G en nano, Q para salir de la ayuda).


Preguntas y ejercicios:


  1. Redireccionar la entrada y la salida. Pipelines


Los dispositivos de comunicación entre el usuario y la máquina por defecto son los denominados ‘entrada estándar’ y ‘salida estándar’. Si un programa lee desde la entrada estándar, por defecto estará obteniendo datos desde el teclado. Cuando escribe algún resultado a la salida estándar, lo estará haciendo por defecto a la pantalla. Sin embargo, muchas veces queremos guardar el resultado de un comando en un archivo en lugar de verlo directamente en la pantalla.

Para enviar la salida de un comando a un archivo, redirigimos la salida estándar mediante el operador >. Luego del comando, añadimos el operador y el nombre del archivo. Esto va a sobrescribir cualquier archivo existente con el mismo nombre. Si el archivo no existe, va a crear uno. Si en lugar de sobrescribir, quisiéramos agregar información al final de un archivo existente, usamos el operador >>. Esto adjuntará la salida del comando al final del archivo sin borrar el contenido existente.

Veamos un ejemplo con la herramienta blastn.

Primero invoquemos la ayuda del programa. El programa va a responder mandando a la pantalla la ayuda, que es bastante larga.

estudiantes@equipo:~$ blastn -help

Luego direccionamos la salida a un archivo que creamos al que llamaremos “help.out”.

estudiantes@equipo:~$ blastn -help > help.out

# inspeccionamos las primeras líneas de nuestro archivo con head
estudiantes@equipo:~$ head help.out
USAGE
  blastn [-h] [-help] [-import_search_strategy filename]
    [-export_search_strategy filename] [-task task_name] [-db database_name]
    [-dbsize num_letters] [-gilist filename] [-seqidlist filename]
    [-negative_gilist filename] [-negative_seqidlist filename]
    [-taxids taxids] [-negative_taxids taxids] [-taxidlist filename]
    [-negative_taxidlist filename] [-entrez_query entrez_query]
    [-db_soft_mask filtering_algorithm] [-db_hard_mask filtering_algorithm]
    [-subject subject_input_file] [-subject_loc range] [-query input_file]
    [-out output_file] [-evalue evalue] [-word_size int_value]


Tuberías o pipelines


Una opción muy poderosa es la capacidad de encadenar ejecuciones, redireccionando la salida de un comando a la entrada del siguiente comando. Esto es lo que se conoce como tuberías o pipelines. Para redirigir la salida del primer comando hacia el segundo comando, usamos un pipe, cuyo símbolo es |. Veamos algunos ejemplos.

Vamos a buscar en nuestro historial los últimos comandos que usan la palabra “busco”. Para eso usamos el comando history, que nos muestra todas las instrucciones guardadas en el historial, y la herramienta grep, que busca patrones y devuelve las líneas en las que lo encuentra. Vayamos viendo los comandos de a partes:


estudiantes@equipo:~$ history #la salida suele ser muy larga y puede ser difícil encontrar lo que buscamos
estudiantes@equipo:~$ history | grep busco #esto se acerca a lo que queremos, pero busquemos las últimas veces que usamos el comando
estudiantes@equipo:~$ history | grep busco | tail -4
  380  busco -i nano.contigs.fasta -o busco.out -l busco_downloads/lineages/saccharomycetes_odb10 -m genome --config Programas/busco/config/config.ini --augustus -f
  381  rm -rf busco_2649081714.log
  382  rm -rf busco.out/
  407  busco -h

Esto es útil cuando no recordamos cómo usar un comando.


Para saber cuantas secuencias tiene un fasta, buscamos las líneas que tienen el carácter “>” con grep y enviamos la salida al comando wc (de word count), con el modificador -l para que nos de sólo el número de líneas. Vamos a usar el fasta que copiamos anteriormente a nuestro home.

estudiantes@equipo:~$ grep ">" refseq_db.faa  #esto devuelve los encabezados del fasta, que son las únicas lineas con el carácter ">" 

estudiantes@equipo:~$ grep ">" refseq_db.faa | wc -l  #cuenta el número de líneas 
  23492

Notar que el carácter “>” en el comando grep está entre comillas, ya que, como vimos anteriormente, es también el operador de redireccionamiento. Si olvidamos usar comillas, el archivo fasta existente se va a sobrescribir con un archivo vacío.


Vamos a buscar los archivos con mayor tamaño dentro de un directorio. Para eso, listamos los detalles de los archivos del directorio con ls -l y le pasamos la salida al comando sort, con las opciones -k 5 para ordenar por la columna 5, que corresponde al tamaño de los archivos, y -n para ordenar numéricamente.

estudiantes@equipo:~$ ls -l /usr/bin | sort -n -k 5 | tail
-rwxr-xr-x 1 root root     4551912 ene 13  2020 gnome-control-center
-rwxr-xr-x 1 root root     4992936 abr 30  2020 shotwell
-rwxr-xr-x 1 root root     5276200 feb 16  2018 iqtree
-rwxr-xr-x 1 root root     5276200 feb 16  2018 iqtree-omp
-rwxr-xr-x 1 root root     5390888 feb 16  2018 iqtree-mpi
-rwxr-xr-x 1 root root     5893648 jun 24  2019 ubuntu-report
-rwxr-xr-x 1 root root     7619056 oct 30 08:45 gdb
-rwxr-xr-x 1 root root    12441592 abr 26  2016 prodigal
-rwxr-xr-x 1 root root    18369616 oct 17  2018 node
-rwxr-xr-x 1 root root    19428040 feb  2 05:21 snap


  1. Comandos y programas útiles


Estos son algunos de los comandos y programas más frecuentemente utilizados en Linux.


Comando Descripción
ls Listar el contenido del directorio actual
pwd Imprime el directorio de trabajo actual
cd Cambia el directorio de trabajo
mkdir Crea un nuevo directorio
mv Mueve y renombra archivos
cp Copiar archivos
rm Borrar un archivo
cat Ver el contenido de archivos, concatenar archivos
more Muestra el contenido del archivo página por página
less Muestra el contenido del archivo página por página
head Muestras las primeras n líneas
tail Muestras las últimas n líneas
echo Imprime textos a la salida estándar
wc Contar líneas, palabras y caracteres
cut Corta secciones de cada línea (columnas)
paste Une archivos horizontalmente, generando una salida donde cada columna es un archivo de entrada
sort Ordena líneas (lexicográficamente, numéricamente)
uniq Filtra líneas repetidas
tr Cambiar o borrar caracteres
locate Encuentra archivos por su nombre, devuelve la ruta absoluta
grep Buscar patrones en un archivo
sed Editor de flujo de texto. Puede hacer inserción, eliminación, y sustitución de texto
awk Poderosa utilidad que permite buscar patrones y procesar textos


Shortcuts

- Tab Completar al escribir:
Simplemente comience a escribir un comando, nombre de archivo, o directorio, y presione la tecla tab. Bash completará automáticamente lo que está escribiendo si no hay ambigüedades.

- y Moverse en el historial:
Los comandos ejecutados son guardados en el historial. Puede acceder a sus últimos comandos con la flecha hacia arriba.


Recuerde que siempre puede buscar en Google si no recuerda la forma de uso de un comando.


También puede acceder a la ayuda de los distintos comandos en la linea de comando. La opción a usar para acceder a la ayuda varía de acuerdo al comando, pero por lo general va a ser --help, -h, o -help. Por ejemplo:

estudiantes@equipo:~$ ls --help | head -5
Modo de empleo: ls [OPCIÓN]... [FICHERO]...
Muestra información acerca de los FICHEROs (del directorio actual por defecto).
Ordena las entradas alfabéticamente si no se especifica ninguna de las
opciones -cftuvSUX ni --sort.


  1. Trabajo de forma remota


Conexión a un servidor remoto por ssh


Durante el curso trabajaremos ocasionalmente en un servidor. A este servidor nos conectaremos usando usando el protocolo SSH (por Secure SHell). Este es el nombre de un protocolo y del programa que lo implementa cuya principal función es el acceso remoto a un servidor por medio de un canal seguro.

Para loguearnos al servidor, debemos conocer la dirección IP o el hostname, y tener un usuario en el servidor al que nos queremos conectar. El formato del comando es ssh usuario@servidor. Por ejemplo:

estudiantes@equipo:~$ ssh estudiantes@rnaseq.fcien.edu.uy

o

estudiantes@equipo:~$ ssh estudiantes@164.73.84.41

En este caso, el nombre del servidor es “rnaseq”. Este es uno de los servidores que vamos a usar en el curso.

La máquina va a responder pidiendo su clave de usuario. La primera vez que intente conectarse al servidor, es probable que vea una advertencia similar a:

The authenticity of host 'rnaseq.fcien.edu.uy (164.73.84.41)' can't be established.
ECDSA key fingerprint is (...)
Are you sure you want to continue connecting (yes/no)?

Su máquina le está diciendo que no reconoce el servidor remoto. Como esta es la primera vez que se conecta, esto es completamente esperado. Teclee “yes” o “y” para continuar.

Una vez se haya conectado, verá que cambia el prompt, mostrando el nombre de la máquina remota y el nombre de su usuario en ella. Por ejemplo:

usuario@rnaseq:~$

Para salir de la máquina remota y volver a la local usamos el comando exit.


Copiar archivos desde o hacia un servidor. scp y sftp


scp (secure copy) es un protocolo para copiar archivos de manera segura desde o hacia servidores remotos. scp no es interactivo y realmente sólo puede copiar archivos, no tiene la capacidad de hacer cosas como listar el contenido de directorios o moverse en el sistema de archivos. Esto determina que para usar el protocolo scp debemos conocer el path de origen/destino en el servidor remoto, ya que debe ser establecido en el comando. Al igual que la herramienta cp, la forma de uso de scp es: scp .

Para copiar el archivo “refseq_db.faa” hacia el servidor remoto “rnaseq”:

estudiantes@equipo:~$ scp refseq_db.faa usuario@rnaseq:~

Para copiar el mismo archivo desde “rnaseq” a su posición actual en su máquina:

estudiantes@equipo:~$ scp estudiantes@rnaseq:~/refseq_db.faa .

El sistema responderá pidiendo la contraseña del usuario en el servidor remoto.

En ambos casos, para copiar un directorio con todo su contenido usamos scp -r.


sftp (Secure File Transfer Protocol) es más elaborado y permite una variedad de operaciones en archivos remotos, como listar el contenido de directorios, crear directorios, eliminar directorios y archivos (todos sujetos a permisos del sistema, por supuesto), etc.

Para iniciar una sesión sftp, ingrese el nombre de usuario y el nombre del servidor remoto o su dirección IP. El sistema nos pedirá el password del usuario en el servidor. Una vez nos autenticamos, el prompt del terminal que antes era usuario\@equipo:~$, cambia a sftp>.

estudiantes@equipo:~$ sftp estudiantes@rnaseq.fcien.edu.uy
estudiantes@rnaseq.fcien.edu.uy's password:
Connected to rnaseq.fcien.edu.uy.
sftp>

Puede verificar los comandos disponibles en sftp tipeando ? o help en el prompt.

Durante la sesión sftp puede ejecutar comandos en la máquina local o en la remota. Para realizar un comando en la máquina local, agregue la letra l de local o el símbolo ! antes del comando. Por ejemplo, ls lista el contenido del directorio de trabajo remoto mientras que lls y !ls listan el contenido del directorio de trabajo local actual.

Para transferir archivos al servidor remoto desde la máquina local, usamos el comando put seguido del path local del archivo a transferir. Para transferir archivos desde el servidor remoto, usamos el comando get seguido del path remoto del archivo a transferir. Para cerrar la sesión sftp usamos el comando exit.