INTRODUCCIÓN A LINUX

Linux

LINUX (o GNU/LINUX, más correctamente) es un Sistema Operativo, así como lo son Mac OS o Windows. Por ende, Linux es el software necesario para que la computadora pueda ejecutar programas como: editores de texto, navegadores de Internet, etc. Linux puede usarse mediante un interfaz gráfico al igual que Windows o Mac OS, pero también puede usarse mediante línea de comandos como DOS. Windows es un sistema operativo claramente orientado a un uso de escritorio, a diferencia de Linux donde la mayor parte de las tareas de configuración y administración deben hacerse a través de una consola o terminal. Por ello, aunque Windows viene con una versión de MS-DOS, las posibilidades de esta son muy limitadas.

MobaXterm

MobaXterm es una terminal para Windows con comandos de Linux. Es totalmente gratuita y de uso doméstico.

  • Así luce la terminal en MobaXterm

Figura 1: Visualización de MobaXterm Figura 1: Visualización de MobaXterm

MobaXterm es una herramienta para que los usuarios de Windows puedan realizar determinadas funciones de Linux como el uso de los comandos más habituales para controlar el sistema operativo desde el teclado y conectarse a servidores de Linux para trabajar.

Actividad:

Descargar MobaXterm, diríjase a la siguiente dirección web https://mobaxterm.mobatek.net/download.html y descargue la versión Home EditionFree (Installer edition). Les descargará una carpeta zip que contiene un archivo instalador que deben ejecutar siguiendo las siguientes indicaciones:

Descarga y configuración de MobaXterm

  1. Descargar MobaXterm desde este enlace.
  2. Siga los pasos de instalación:
    • Paso 1: Next
    • Paso 2: “I accept…” + Next
    • Paso 3: Guardar + Next
    • Paso 4: Install
    • Paso 5: Finish
  3. Configure SSH:
    • Remote host: 190.64.49.20
    • User name: estudiantes
    • Port: 22222

Figura 2: Instructivo de Instalación y acceso a MobaXterm Figura 2: Instructivo de Instalación y acceso a MobaXterm

Luego de ingresar el host y especificar el nombre de usuario dar OK

Conceptos importantes

Linux tiene su origen en Unix (otro sistema operativo).

  1. Linux es un sistema operativo que se basa en un Kernel1.
  2. El Kernel es la base de todas las distribuciones de Linux.
  3. La palabra Linux puede ser utilizada para hablar tanto del Kernel como del sistema operativo.
  4. Linux tiene muchas distribuciones.
  5. Las distribuciones son una colección de aplicaciones empaquetadas dentro del Kernel.
  6. Debian es una de ellas y de las más utilizadas, Ubuntu es otra distribución también muy utilizada.
  7. Linux es un sistema operativo muy seguro y los virus son muy raros en él.
  8. Linux es un sistema operativo libre.
  9. Linux es increíblemente adaptable, como la mayoría del software Open Source.
  10. Linux es un sistema líder que está integrado en muchísimos lugares.

Comandos

Un comando (command) es una instrucción u orden que el usuario proporciona a un sistema informático, desde la línea de comandos (command line) (shell2, en el caso de Linux es habitualmente Bash). Puede ser interno (built-in) o externo (archivo ejecutable). Suele admitir parámetros o argumentos de entrada, lo que permite modificar su comportamiento. A partir de un conjunto de comandos podemos crear herramientas informáticas y ejecutar diferentes tareas. Algunos ejemplos en donde las usaríamos son: - Archivos que son muy grandes para abrir en la PC utilizando un editor de texto o Excel. -Manipulación de datos repetidamente o datos que necesiten cambios que manualmente sea muy laborioso y nos llevaría mucho tiempo de realizar. -Cualquier análisis que un programa diseñado con interfaz gráfica no lo realice.

Sintaxis de comandos

Los comandos pueden ser ejecutados por sí mismo o se pueden agregar argumentos (opciones) adicionales para hacer que produzcan diferentes resultados. La sintaxis típica de un comando puede lucir más o menos así:

comando [-argumentos] [-argumento] [--argumentos] [archivo] 

Ejemplos

  • ls Lista los archivos del directorio de trabajo

  • ls -l La opción/argumento –l Lista los archivos del directorio de trabajo, en un formato donde incluye más información

  • ls -l --human-readable La opción/argumento –-human-readable lista los archivos del directorio de trabajo en un formato más entendible para nosotros. Se puede utilizar versión abreviada: ll.

  • cat [nombrearchivo] Muestra contenidos del archivo, con el número de líneas que posee.

  • cat -n [nombrearchivo] Muestra contenidos del archivo, con el número de líneas que posee.

Actividad:

1.Compare la salida en pantalla de los siguientes comandos y argumentos:

ls -l  --human-readable
ll

2.Explore el comando anterior ls dentro de la terminal.

ll

Estructura de Linux

El disco de tu computadora en el cual corre LINUX es llamado / (slash) o raíz ( root, en inglés). Es el sitio donde están guardados todos los archivos del sistema. Una de las carpetas por debajo de root es home. Por lo tanto, empezando desde la raíz (/), el camino ( path, en inglés) hasta el home es: /home (/ + home). Es importante utilizar el camino a la hora de utilizar o localizar archivos y carpetas.

Por ejemplo, si estamos en /home/prueba para crear un archivo de texto podríamos hacer lo siguiente:

touch prueba.txt 
nano prueba.txt

o

touch /home/prueba/prueba.txt

Sin embargo, si estamos en la carpeta prueba pero queremos crear un archivo llamado prueba.txt en home tenemos que indicar el camino:

  • touch /home/prueba.txt Ruta absoluta

  • touch ../prueba.txt Ruta relativa

Además de home hay muchos otros directorios/carpetas que nos permiten configurar y controlar LINUX (Tabla 1).

Tabla 1: Estructura de Linux

Directorio Descripción
/ Directorio raíz
/bin Programas
/dev Archivos de Hardware
/etc Archivos de configuración de sistema
/home Directorio principal del usuario
/media /mnt Drivers y discos removible
/proc Procesos en ejecución
/tmp /var Archivos temporales
/usr Programas instalados por el usuario

¿Dónde estamos?

Para saber dónde estamos parados dentro de LINUX podemos en la terminal escribir el comando pwd.

pwd

Estamos escribiendo una orden (comando) en la terminal que va a ser interpretada (por Bash) y ejecutada al presionar enter. El comando pwd es el que se utiliza para poder saber cual es el directorio actual (su nombre proviene de: Print Working Directory). El comando pwd es un ejemplo de comando construido internamente (built-in) en el sistema operativo, el cual no tuvimos que instalar previa instalación del OS.

Cambiando de Directorios/Carpetas

Para poder cambiar de directorios desde la terminal es necesario utilizar el comando cd (built-in). Este comando (cd, Change Directory) nos va a permitir movernos dentro de la estructura de sistema de LINUX. Algunos consejos útiles:

cd

En este caso el string .. nos permite movernos una carpeta “arriba” en la estructura de LINUX. Por ejemplo si estamos en un camino que sea /home/carpeta1/carpeta2 y queremos volver a carpeta1 podríamos utilizar cd .. o cd /home/carpeta1 (sería la dirección completa). Si utilizamos un . en lugar de .. estamos indicando el directorio actual. Existen formas rápidas de ir al directorio home, por ejemplo

cd

o

cd ~

Para movernos dentro de directorios es importante saber que la terminal de LINUX posee una función de autocompletado que ejecutada al apretar la tecla Tab. Si hay más de una opción de autocompletado, se imprime en pantalla las diferentes opciones disponibles.

Figura 3: Estructura jerárquica en LINUX Figura 3: Estructura jerárquica en LINUX

Visualizando Directorios/Carpetas

Para saber que archivos/carpetas están presentes dentro de una carpeta dada uno puede utilizar el comando ls (su nombre proviene de listar).

ls

Para visualizar los parámetros que se pueden utilizar junto a cualquier comando built-in se puede utilizar el comando man antes de la instrucción de interés.

man ls

Para obtener ayuda también se puede utilizar el argumento help (ls --help o more -h; depende del comando a usar la forma de implementarlo. Otra opción es utilizar el comando info.

info ls

Salida de opciones del comando ls:

  • -u + -lt : ordenar por tiempo de acceso y mostrar;

    • +l: mostrar el tiempo de acceso y ordenar por nombre.
  • -U : no ordenar; listar las entradas en el orden del directorio.

  • v : ordenar por versión (útil para archivos con números en sus nombres).

  • -w , --width = COLS : suponer un ancho de pantalla de COLS columnas en lugar del valor actual.

  • -x : listar las entradas en filas en lugar de en columnas.

  • -X : ordenar alfabéticamente por la extensión de los archivos.

  • -l : mostrar un archivo por línea.

Más comandos

  • Se puede utilizar el comando whoami para ver que usuario soy en el sistema:
whoami
  • Para saber que otro usuario está en el sistema se puede utilizar:
who
  • Para saber la fecha y hora actual se puede utilizar el comando date:
date
  • Para crear un nuevo directorio/carpeta se utiliza el comando mkdir (make directory:
mkdir [nombre de la carpeta a crear]
  • Ejemplo
mkdir prueba
ls

En este caso creamos una carpeta llamada prueba en el directorio de trabajo.

  • Para remover un archivo se utiliza el comando rm (remove), cuidado con su uso!:
rm [nombre del archivo que deseen eliminar]
  • Y para remover un directorio se utiliza el comando:
rmdir [nombre del directorio/carpeta que deseen eliminar]
  • Para copiar un archivo se utiliza:
cp [nombre del archivo que deseen copiar] [destino donde desean copiar el archivo]
- Supongamos que tenemos un archivo llamado `prueba.txt` (lo podemos crear utilizando el comando `touch` seguido por el nombre del archivo. Ejemplo: `touch prueba.txt`) y si lo queremos copiar y asignar un nuevo nombre, por ejemplo `prueba2.txt`:
cp prueba.txt prueba2.txt
  • Si deseamos cambiar el nombre que le asignamos al archivo podemos utilizar el comando mv (move):
mv prueba2.txt temporal.txt

Ahora el archivo prueba2.txt se llama temporal.txt

  • El comando mv es útil también para cambiar la localización de los archivos. Por ejemplo, para cambiar la localización del archivo temporal.txt del directorio de trabajo al home, se utiliza:
mv temporal.txt /home

Actividad:

Pruebe los comandos anteriores y vea su ayuda con el argumento help y utilizando info y man.

Conectándose al servidor

Nosotros trabajaremos remotamente en un servidor de LINUX. Esto quiere decir que utilizaremos nuestra computadora como base para enviar ordenes (comandos) para que las realice el servidor. Al setear el servidor en MobaXterm nos permite logearnos rápidamente sin tener que hacer los pasos que describimos a continuación. En LINUX la sintaxis es sencilla, en una terminal se escribirá:

ssh nombre_usuario:contraseña@maquina_a_la_cual_nos_conectaremos

o alternativamente

ssh nombre_usuario@maquina_a_la_cual_nos_conectaremos

(en este caso, la maquina nos pedirá que ingresemos la contraseña)

  • En caso que necesitemos indicarle el puerto utilizaremos el comando -p:
ssh -p22 nombre_usuario@maquina_a_la_cual_nos_conectaremos
  • En caso que necesitemos utilizar un programa con interfaz gráfica utilizaremos el comando -Y:
ssh -Y nombre_usuario@maquina_a_la_cual_nos_conectaremos

Vale aclarar que en lugar de indicarle el nombre del host podemos indicarle el IP.

Para conectarse al servidor Torito:

ssh -p 22222 estudiantes@190.64.49.20

Para transferir archivos entre una maquina local y servidor se utiliza el comando scp ( secure copy ) scp remote_user@remote_host:/camino/al/archivo/remoto /camino/al/archivo/local ( copia en remoto y pega en local)

Y vice versa:

scp /camino/al/archivo/local remote_user@remote_host:/camino/al/archivo/remoto

Permisos de archivos

LINUX utiliza permisos de archivos para prevenir el borrado accidental de archivos o para impedir la manipulación de ciertos archivos por otros usuarios. Cada archivo y directorio está asociado con tres tipos de permisos: user, group, y others. Para ver los permisos de los archivos en un directorio se utiliza el comando ya visto ls pero con el parámetro -l.

ls -l

Un ejemplo de salida es:

drwxr-xr-x 2 juan usuarios 4096 Agosto 20 16:40 genomica
-rw-r--r-- 1 juan usuarios 0 Agosto 20 16:45 fasta

En este caso el user es juan y el group es usuarios (creado por el administrador de sistemas). El siguiente número luego de usuarios indica el peso del archivo.

La primer columna es la información asociada (tipo y permisos) al archivo/directorio. En el primer ejemplo vemos un directorio de nombre genómica. Sabemos que es un directorio ya que la primer columna comienza con d indicando que es un directorio. Por otro lado, la primer columna de fasta comienza con un -, lo que indica que es un archivo. Los primeros tres caracteres luego de la primer letra, indican los permisos del usuario (juan): rwx, donde: - r : permiso de lectura; el archivo se puede leer, en el caso de una carpeta su contenido se puede listar. - w: permiso de escritura; el archivo o carpeta puede ser modificado - x: permiso de ejecución; el archivo puede ser ejecutado ó en el caso del directorio, este se puede fijar como el directorio de trabajo.

Es importante aclarar que el orden del tipo de permiso siempre se mantiene, y en el caso de que un usuario/grupo/otros no tenga un tipo de permisos se indican con un -. Los segundos tres caracteres indican el grupo y los últimos tres indican los permisos del resto de los usuarios fuera del grupo que integra juan.

1. ¿Qué permisos tiene sobre el archivo fasta el grupo usuario?

2. ¿Qué parámetros por defecto se otorgan al crear un archivo?

3. ¿Y una carpeta?

4. ¿Cuál es la diferencia?

Para cambiar los permisos de un archivo/carpeta se utiliza el comando chmod. Por ejemplo, en orden de cambiar los permisos del archivo fasta en orden de que solo el dueño del archivo (juan) pueda leerlo se utiliza el siguiente comando: - chmod go-r fasta (donde go indican los niveles en los cuales quiero cambiar el permiso (go= group y others), mientras que el indica sacar, y r indica permiso de lectura). Para agregarle el permiso lectura solo al nivel grupo: -chmod g+r fasta (donde g indica el nivel (g = group), mientras que el + indica agregar, y r indica permiso de lectura) Para agregarle el permiso lectura solo a todo nivel: - chmod a+r fasta (a significa todos los usuarios (juan, usuarios, y otros)).

Actividad:

Crear una carpeta de nombre prueba, cambiar el permiso para que el grupo solo pueda leerla, luego agregar el permiso de escritura. Crear un archivo dentro de prueba llamado prueba.txt y luego elimina la carpeta y su contenido. Pista: para remover una carpeta y todo su contenido se utiliza el parámetro -r.

Redirigiendo la Salida

Muchos comandos que se utilizan en bioinformática devuelven información a la terminal en forma textual. Muchas veces esa información es de vital importancia y nos gustaría conservarla. Para redirigir la información textual a un archivo hay que utilizar el carácter >. La sintaxis sería la siguiente:

man echo > manual_echo.txt

(recordar que los espacios separan archivos por lo que es conveniente utilizar otro caracter es sustitución) - Si se utiliza >> en lugar de > en vez de reescribir un archivo se añade al archivo original.

Actividad:

1. Explore los comandos more, less, tail y head. ¿Para qué sirven?

Utilice estos comandos para explorar el archivo manual_echo.txt

2. ¿Cuál es la utilidad del comando echo?

3. ¿Cuál es la última línea de este archivo?

Concatenando Salidas

Con los pipes, representado por el carácter |, es posible mandar el output de un programa a otro programa para que lo utilice como input. Por ejemplo, en el siguiente comando:

cat /etc/services | sort | tail -n 10

En el ejemplo de arriba utiliza el comando cat (concatenar) para extraer la información del archivo services dentro de la carpeta etc. Esa información es luego tomada por el comando sort que las ordena alfanuméricamente. Finalmente, la información ordenada es tomada por el programa tail, el cual nos muestra las últimas 10 líneas de la información.

cat es un comando muy útil para concatenar archivos, por ejemplo:

echo “Hola” > A.txt
echo “Mundo” > B.txt
cat A.txt B.txt > C.txt
less C.txt
     Hola 
     Mundo
rm A.txt B.txt

En este ejemplo se concatena la palabra Hola del archivo A.txt con la palabra Mundo del B.txt y se guardan en un nuevo archivo llamado C.txt. En el manejo de datos bioinformáticos es una práctica común concatenar archivos.

Actividad:

El comando wc ( word count_) se utiliza para contar palabras, caracteres y líneas de un archivo.

1. ¿Cuántas líneas posee el archivo /etc/services?

2. ¿Cuántas líneas por defecto muestra el comando head?

Trabajando con archivos comprimidos con extensiones .tar y .zip

Muchas veces queremos comprimir archivos o grupos de archivos para ahorrar espacio en nuestro disco duro (o en el servidor). Es una práctica frecuente en bioinformática ya que se suele trabajar con datasets muy grandes. Los archivos .tar son muy similares a los archivos .zip, y se usan frecuentemente en LINUX. Sin embargo, el archivo .tar no es un archivo comprimido por sí mismo, sino más bien que es un tipo de archivo contenedor.

Para explorar estos comandos vamos a crear un archivo:

wget www.google.com.uy -O google.html

Con wget estamos pidiendo a LINUX que nos descargue cierta información alojada en una dirección web. El -O es el parámetro que indica que el output se guardado en google.html.

  • Para crear un archivo .zip que contenga google.html utilizamos el comando zip y luego eliminaremos el archivo no comprimido:
zip -r google.zip google.html
rm google.html

La opción -r no es necesaria, pero si lo es en caso de querer comprimir un directorio, ya que -r es un acrónimo de recursivo.

  • Para crear un archivo .tar:
tar -cvf google.tar google.html

La opción -c le inidica al tar que tiene que crear un archivo (y no extraerlo), la opción -v le indica que tiene que mostrar mensajes de progreso y error y la opción -f indica que el nombre del archivo a crear va a ser dado (google.tar). Para extraerlo se sustituye la c por una x:

tar -xvf google.tar 
  • Para crear un archivo .tar que a su vez este comprimido se utiliza la opción -z:
tar -cvzf google.tar.zip google.html
  • Y para extraerlo
tar -xvzf google.tar.zip

Para visualizar archivos zipeados podemos utilizar los comandos zcat, zless o zmore.

Utilizando el carácter *

El carácter * es muy utilizando para indicar cualquier texto. Supongamos que queremos mover todos los archivos .fasta de una carpeta a otra:

mkdir seq_fas
touch a.fasta
touch b.fasta
touch c.fasta
mv *.fasta seq_fas 

En este caso creamos una carpeta denominada seq_fas en la cual vamos a guardar los archivos .fasta creados.

Actividad:

Borrar la carpeta seq_fas y todo su contenido.

grep

Un comando muy útil para buscar contenidos dentro de un archivo de texto es el comando grep. Grep puede ser utilizado para buscar un texto específico dentro de uno o más archivos. Es importante notar que hay caracteres especiales que no se pueden utilizar literalmente a menos que se indique. Por ejemplo, grep * no es igual a grep “*”, en el segundo caso va a buscar todas las líneas que posean el carácter *. Otros ejemplos son: [; >; ^; {;.; etc. No entraremos en detalles de la sintaxis particular, pero lo pueden buscar bajo el nombre de expresiones regulares.

Algunos parámetros útiles de grep: - -c : cuenta las líneas en las que aparece el texto especificado. - -v : imprime en pantalla toda las líneas en la cual no aparece el texto especificado. - -o: imprime en pantalla todas las ocurrencias del texto especificado - -i: ignora mayúsculas/minúsculas

  • Ejemplo con archivo .gff (archivo típico de anotación):
    • grep “Helix” P68871.gff (me devuelve todas las líneas en que la palabra helix aparece)
    • grep –v “Helix” P68871.gff (devuelve todas las líneas en que la palabra helix no aparece)
    • grep -c “Helix” P68871.gff (cuenta todas las líneas en que las cuales la palabra hélix aparece)
    • grep –vc “Helix” P68871.gff (cuenta todas las líneas en que la palabra helix no aparece)
    • grep -o “Helix” P68871.gff (devuelve todas las ocurrencias de la palabra helix en líneas separadas)
    • grep –oci “helix” P68871.gff (cuenta las ocurrencias de la palabra helix sin importar si aparece en mayúscula o minúscula)

Editando Texto con el comando nano

Hay muchos editores de texto ya sean gráficos como gedit o en terminal como nano. Nano es de alguna manera difícil de usar ya que para todos los comandos se tienen atajos de teclado, pero conociéndolos se puede modificar texto fácilmente. Es muy útil cuando queremos hacer pequeños cambios o cuando estamos trabajando en un servidor que no nos permite visualizar gráficos. A la hora de usar nano es recomendable que leas la lista de comandos a utilizar. En la siguiente imagen pueden visualizar estos comandos:

Figura 4: Atajos de teclado de nano
Figura 4: Atajos de teclado de nano

Otros comandos útiles

  • uniq
  • cut
  • find
  • locate
  • awk
  • sed

Aplicando lo Aprendido (Tareas):

1. Descargar (utilizando wget) el siguiente archivo fasta:

https://tritrypdb.org/common/downloads/release-53/TcruziCLBrener/fasta/data/TriTrypDB-53_TcruziCLBrener_AnnotatedCDSs.fasta

a. ¿Qué permisos tiene?

b. ¿Cuantas veces aparece la secuencia GGCCA? ¿En cuantas líneas?

c. ¿Cuantos genes hay?

d. ¿Cuál es el último gen? ¿Y el primero?

2. Cree un archivo que tenga solo las primeras 200 líneas del archivo original

a. ¿Cuantos genes hay?

b. ¿Cuantas veces aparece la secuencia GGCCA?

c. ¿Cuantas veces aparece la secuencia GGCCA en el primer gen?

3. Cree un archivo que contenga solo el primer y último gen

a. ¿Cuánto pesa el archivo?

b. ¿Como cambiaría los permisos para que sólo usted pueda modificar ese archivo?

~~~~~~~~~~~~~~~~~~

1Kernel: en informática, un núcleo o kernel es un software que constituye una parte fundamental del sistema operativo, y se define como la parte que se ejecuta en modo privilegiado (conocido también como modo núcleo). Es el principal responsable de facilitar a los distintos programas acceso seguro al hardware de la computadora o en forma básica, es el encargado de gestionar recursos, a través de servicios de llamada al sistema. Como hay muchos programas y el acceso al hardware es limitado, también se encarga de decidir qué programa podrá hacer uso de un dispositivo de hardware y durante cuánto tiempo.

2Shell: en informática, el shell o intérprete de órdenes o intérprete de comandos es el programa informático que provee una interfaz de usuario para acceder a los servicios del sistema operativo. En nuestro caso utilizaremos del tipo texto, CLI (command line interface).