Guía Básica LINUX
Introducción
Unix es el sistema operativo estándar de la mayoría de los grandes sistemas computacionales
utilizados para la investigación científica, de la misma forma en que Microsoft Windows es el
sistema operativo dominante en las PCs de escritorio.
Cada vez más, los resultados de las investigaciones biológicas corresponden a datos in silico,
usualmente en la forma de grandes archivos de texto. Unix es particularmente apropiado para
trabajar con dichos archivos y posee muchos comandos poderosos (y flexibles) para procesar
estos datos. Estos comandos pueden combinarse de una manera casi ilimitada.
Con esta guía aprenderás algunos de los comandos básicos de Linux para moverte entre las
carpetas del sistema de archivos, listar archivos, revisar el contenido de los archivos de texto,
ejecutar programas, etc.
La terminal
Terminal es el nombre común para el programa que hace dos tareas principales: permite ingresar
a la computadora una entrada (por ejemplo, correr programas, mover/ver archivos, etc.) y
también permite ver la salida de estos programas.
Usaremos la terminal para escribir en nuestra línea de comando (command line). La terminal
estará vacía, excepto por el carácter ‘$’ que estará en la parte superior a la izquierda. Este
carácter se denomina prompt (similar a “C:\” en DOS), y puede ser diferente entre
computadoras. Puedes escribir los comandos directamente luego del prompt ‘$’.
UNIX prompt
La línea de comando le dice a la computadora qué hacer. Se pueden incluir argumentos
adicionales (o flags) a los comandos para cambiar la forma en que funcionan.
Algunos comandos útiles
Comando Qué hace?
ls Lista el contenido del directorio actual
mkdir Crea un nuevo directorio
mv Mueve un archivo
cp Copia un archivo
rm Elimina un archivo
cat Concatena archivos
more Muestra el contenido de un archivo, una página a la vez
head Muestra las primeras 10 líneas de un archivo
tail Muestra las últimas 10 líneas de un archivo
cd Cambia de directorio
pwd Muestra directorio actual
find Encuentra archivos que coinciden con una expresión
grep Busca patrones en un archivo
wc Cuenta las líneas, palabras, caracteres y bytes en un archivo
kill Termina un proceso
jobs Lista los procesos que se están ejecutando
Directorios, archivos y paths
Unix organiza los directorios en una jerarquía, todos los directorios son sub-directorios de la raíz
(root) denominada ‘ / ‘. Cada uno de estos directorios puede contener archivos y también sub-
directorios.
Ejemplo de un diagrama en forma de árbol de los directorios
Es importante destacar que siempre se está “en” un directorio al usar la terminal. Al abrir la
misma, el directorio estándar de comienzo es el “home”, el cual contiene los archivos y
directorios que sólo el usuario puede modificar.
El path a un archivo o directorio corresponde a la serie de directorios que se deben atravesar
desde la raíz hasta el archivo o directorio en cuestión. Por ejemplo:
$ cat /home/Natalia/documents/[Link]
Esto muestra el contenido del archivo [Link] contenido en el directorio documents, sin
importar en qué directorio te encuentres. Este es el full path para dicho archivo (también
llamado absolute path). Un full path comienza siempre con el directorio raíz.
Sin embargo, si te encuentras en el directorio documents, puedes simplemente escribir:
$ cat [Link]
Esto se llama relative path.
PUNTOS GENERALES
Linux es sensible a mayúsculas y minúsculas: escribir “ls” NO es lo mismo que escribir “LS”.
Necesitas poner un espacio entre el comando y su argumento, por ejemplo “more myfile”
mostrará el contenido del archivo llamado myfile, pero “moremyfile” sólo dará un error.
Linux no es psíquico! Si escribes mal un comando o el nombre de un archivo, el sistema no te
entenderá.
Muchos de los comandos tienen una longitud de pocas letras, esto puede confundirte hasta
que pienses lógicamente por qué fueron elegidas esas letras. Por ejemplo, ls por list, rm por
remove, etc.
Con frecuencia sucede que si tienes problemas con Linux, se deben a un error de tipeo o por
omitir espacios.
Ejercicios
pwd Muestra el directorio actual de trabajo
Como hemos visto, los directorios se ordenan en una estructura jerárquica. Para determinar
en qué lugar de esa jerarquía estamos se puede usar el comando pwd (Print Working
Directory) para mostrar el nombre del directorio actual de trabajo.
Para saber dónde estás parado:
pwd [enter]
cd Cambia el directorio actual de trabajo
El comando cd (Change Directory) cambiará el presente directorio de trabajo a otro,
permitiendo moverte en la jerarquía de directorios.
Nos movemos al directorio bin:
cd /bin [enter]
Ahora puedes usar pwd para comprobar tu actual ubicación.
ls Lista el contenido de un directorio
El comando ls muestra los archivos y directorios presentes en el directorio actual.
Para saber qué contiene tu directorio actual de trabajo:
ls [enter]
Prueba:
ls -l
ls -lrt
ls --help
cd ../lib [enter]
Los dos puntos (..) te permiten mover hacia arriba un nivel en la jerarquía, es decir al
directorio padre del actual (todos tienen un directorio padre, excepto la raíz). El directorio
actual se indica con un punto simple (.). Al escribir cd solo, se retorna al directorio home.
Tab expansion
Existen cientos de comandos en Linux y no es fácil recordarlos a todos. La propiedad de “tab
expansion” facilita esta tarea. Con sólo escribir las primeras letras del comando y presionar
tab dos veces, se listarán todos los comandos que comiencen con dichas letras.
Esto también funciona para los paths. Suponiendo que quieras ir a /usr/local/bin, si escribes
cd /u y luego presionas tab una vez, esto expanderá el path a /usr/.
cp Copia un archivo
cp file1 file2 Crea una copia de file1 en el directorio actual de trabajo y lo llama file2.
Lo que harás es una copia de my_reads.fasta. Este archivo contiene secuencias en formato
fasta.
cp my_reads.fasta my_copy.fasta [enter]
Si usas ls para ver el contenido del directorio, ahora estarán presente ambos archivos fasta.
rm Elimina un archivo
Este comando elimina de forma permanente un archivo!!
Ahora vas a eliminar el archivo original de secuencias, my_reads.fasta
rm my_reads.fasta [enter]
Si usas ls para ver el contenido del directorio, ahora estará presente sólo my_copy.fasta.
mv Mueve un archivo
Este comando mueve un archivo, no lo copia, por lo tanto siempre habrá una sola copia del
mismo.
Siempre acuérdate de proporcionar el path para que Linux pueda hallar el archivo, si es que
no se encuentra en el directorio actual de trabajo.
Para mover el archivo my_copy.fasta al directorio padre, hacer:
mv my_copy.fasta .. [enter]
El comando mv puede usarse también para renombrar un archivo en el directorio actual de
trabajo. Anteriormente usamos el comando cp, pero mv proporciona una alternativa sin la
necesidad de borrar el archivo original.
Podríamos haber usado:
mv my_reads.fasta my_copy.fasta [enter]
more Muestra el contenido de un archivo
Para ver las secuencias contenidas en el archivo fasta:
more my_copy.fasta [enter]
El contenido del archivo se mostrará de a una pantalla a la vez, para ver la siguiente, hay
que presionar space bar. El porcentaje visto del archivo se mostrará en la parte inferior de
la pantalla. Para dejar de visualizar el archivo, presionar control + c, retornando al prompt
de Linux.
Otro comando con utilidad similar es less (seguro lo encuentras más práctico que more).
less --help [enter]
man less [enter]
head Muestra las primeras 10 líneas de un archivo
tail Muestra las últimas 10 líneas de un archivo
head my_copy.fasta [enter]
tail my_copy.fasta [enter]
La cantidad de líneas a mostrar puede incrementarse usando los argumentos del comando.
Para ver las últimas 20 línas del archivo fasta:
tail -20 my_copy.fasta [enter]
cat Muestra y concatena archivos
Muchas veces sucede que es mejor concatenar archivos de una muestra experimental (o
diferentes muestras) en uno solo. Por ejemplo, la secuenciación masiva de una muestra
de ADN puede originar muchos archivos pequeños conteniendo 4 millones de secuencias
en cada uno, los cuales necesitan unirse para ser procesados.
El orden en el cual se unen los archivos está determinado por el orden en el que aparecen
en la línea de comando.
Por ejemplo, tenemos dos archivos separados de secuencias, my_reads1.fasta y
my_reads2.fasta, si hacemos:
cat my_reads1.fasta my_reads2.fasta > my_reads.fasta [enter]
Los dos primeros archivos se unirán en el archivo my_reads.fasta.
El símbolo > en la línea de comando direcciona la salida del comando cat al archivo
my_reads.fasta.
wc Cuenta líneas, palabras o caracteres
tail -20 my_copy.fasta .. [enter]
Muchas veces es deseable saber qué tan grande es un archivo antes de ejecutar
comandos sobre el mismo. El comando ls -l indica el tamaño del archivo, pero para
muchos propósitos es mejor saber cuántas líneas tiene el archivo, para ello se utiliza el
comando wc (Word Count).
ls | wc -l [enter]
La línea de comando anterior usa wc para contar el número de archivos que son listados
por ls.
El símbolo | (pipe) conecta los dos comandos en una sola operación por simplicidad. Se
pueden conectar todos los comandos que uno desee.
Prueba contar el número de líneas en cada archivo fasta. El archivo my_reads.fasta debe
sumar el número de my_reads1.fasta más my_reads2.fasta.
Prueba:
wc -l *.fasta [enter]
El símbolo * es un comodín y modifica wc para contar todos los archivos presentes en el
directorio actual que terminan con .fasta.
grep Busca patrones en un archivo
En los ejemplos siguientes, usaremos los mismos archivos fasta que en los casos
anteriores. Como hemos visto, un archivo fasta tiene el siguiente formato:
>Sequence Header
CTTAAAATCTATAAAAGGAGCGCGCGTTAAA…
…
Si queremos ver los encabezados de las secuencias, podemos extraer las líneas que
coinciden con el símbolo ‘ > ’:
grep ‘>’ my_reads.fasta [enter]
Si escribimos esta línea de comando:
grep -c ‘>’ my_reads.fasta [enter]
La opción -c cuenta el número de las líneas que coinciden con el patrón. Por lo tanto, en
el ejemplo se muestra el número de secuencias que contiene el archivo fasta.
Una alternativa más larga sería:
grep ‘>’ my_reads.fasta | wc -l [enter]
Prueba:
grep ‘>’ my_reads.fasta | less [enter]
grep -v ‘>’ my_reads.fasta [enter]
find Encuentra archivos que coinciden con una expresión
find . -name “*.fasta” [enter]
Este comando devolverá los archivos cuyos nombres tienen el sufijo “.fasta”.
Es posible buscar de muchas otras maneras, por ejemplo:
-mtime busca archivos por fecha de modificación
-atime busca archivos por la última fecha de acceso
-size busca archivos por tamaño
-user busca archivos que pertenecen a un cierto usuario
Cuidado con el uso de comodines! Se deben usar las comillas dobles.
Editores de texto
Existen numerosos y muy potentes editores de texto en Linux, tanto gráficos (kate,
kwrite, gedit, nedit, etc.) como orientados a la línea de comandos (vim, nano, xemacs,
etc.).
Pruebe generar y guardar un archivo de texto cualquiera:
gedit nombre_archivo.txt [enter]
El editor nano se destaca por su facilidad de uso.
nano nombre_archivo.txt [enter]
Al abrir un archivo con nano veremos el contenido del mismo en la parte superior de la
pantalla y un esquema de los atajos y/o comandos de nano en la parte inferior:
vi o vim es uno de los editores de texto más potentes que existen, aunque su
aprendizaje puede resultar algo complejo.
vi nombre_archivo.txt [enter]
Una vez que se abrió el archivo, podrá desplazarse en él con los cursores o las teclas h, j,
k y l (si el teclado no posee ningún cursor de flecha).
Vi posee tres modos operativos:
El modo regular permite la introducción de comandos. El modo de inserción permite la
inserción de caracteres, pulsando la tecla Insert o la tecla i. El modo de reemplazo
permite reemplazar el texto existente por el texto que captura. Solo
pulse r nuevamente para ir al modo de reemplazo y pulse la tecla Esc para regresar al
modo regular.
Comandos básicos:
:q Salir del editor (sin guardar la información)
Obliga al editor a cerrarse sin guardar la información (incluso si se
:q!
realizaron cambios en el documento)
:wq Guarda el documento y cierra el editor
:filenombre Guarda el documento con el nombre especificado