Introducción a Linux. I. 1. ¿por qué Unix en bioinformática? o Razones históricas Unix es un SO académico las herramientas centrales – FASTA, BLAST, CLUSTALW, MAPMAKER – están escritas para Unix la web está escrita para Unix el manejo de las bases de datos más “pesadas” empezó bajo Unix o Razones prácticas Unix tiene un modelo I/O simple Unix posee buenas herramientas de programación tiene una aproximación “building block” a la programación no requiere de interfaces gráficas para los usuario o Características claves multitarea se pueden correr múltiples programas simultáneamente multiusuario múltiples usuarios pueden ingresar al mismo tiempo “network-ready” fue concebido para el trabajo en redes, por lo que maneja a los usuarios remotos de igual modo que a los locales o Variantes de Unix Comerciales Solaris, SCO UNIX, Tru64 Unix.... Open source (libre) FreeBSD, Linux 2. entonces Linux... Linux es un sistema operativo (un conjunto de instrucciones que nos permiten realizar tareas en nuestro ordenador) iniciado por Linus Trovalds en 1991. Sus caracterísitcas más notables son: o proviene de Unix (otro sistema operativo), y por ello es potente, seguro y estable (resultando un sistema operativo ideal para o o servidores pero también excelente como sistema de oficina o escritorio) por esta misma razón, es un sistema multiusuario real y multitarea, y funciona de manera muy productiva en redes es parte del proyecto GNU, lo que significa que es libre (aunque no necesariamente gratuito) y se puede modificar su código fuente, tanto para adaptarlo a tus propias necesidades como para contribuir en su continuo desarrollo Tiempo después, con el fin de adaptar el sistema operativo y facilitar su instalación, nacieron las compañías distribuidoras de Linux. Si bien pueden cobrar por ofrecer sus productos en CD o algún otro soporte, deben poner su código a disposición del público en la medida en que han utilizado software GNU (bajo licencia GPL). o Mandrake, RedHat/Fedora, Debian, SuSE Las diferentes distribuciones difieren en los scripts de instalación, paquetes, manejo del escritorio... No existe una mejor que las demás sino alguna que se adapta mejor a tus necesidades. 3. algunos links de utilidad o proyecto GNU: http://www.gnu.org o sitio principal: http://www.linux.org o texto más completo: RUTE Linux Tutorial and Exposition 4. archivos y sistema de archivos o nombres de archivos “case sensitive”, distinguen mayúsculas de minúsculas • e.g. Rhizobium, RHIZOBIUM, rhizobium, RHIZObium... son archivos diferentes y por tanto pueden estar en la misma ubicación no es necesario que tengan una extensión, aunque suele existir a modo orientativo; asignar la misma extensión a los archivos de un mismo tipo puede resultar útil para agruparlos fácilmente los nombres pueden llegar a ser muy largos • caracteres recomendados: A-Z, a-z, 0-9, el punto (.), el guión (-) y el guión bajo (_) • o no se permiten nombres con: espacios (se suelen sustituir por guión bajo), acentos y otros signos de puntuación (excepto el punto), ni la ñ sistema de archivos – directorios en Linux (como en cualquier Unix) no existe el concepto de “unidad” para cada unidad física del disco o partición como en Windows el equivalente a una “carpeta” es el directorio, donde se ubican los archivos todos los discos duros o de red se montan bajo un sistema de directorios en árbol • / es la raíz del sistema de directorios • /etc contiene los archivos de configuración de la mayoría de los programas • /home contiene los archivos personales de los usuarios • /bin contiene comandos básicos y muchos programas • /tmp ficheros temporales o de recursos de programas • /usr programas y librerías instalados con la distribución • /usr/local programas y librerías instalados por el admiistrador • /lib librerías varias y módulos del kernel 5. usuarios y permisos Linux es un sistema operativo multiusuario. Cada usuario tiene su directorio en /home/usuario. Por defecto, sólo puede escribir, modificar y borrar archivos dentro de ese directorio. Ningún otro usuario podrá acceder a los archivos de su directorio, ni siquiera puede ver cuáles son. Además, todos los programas recuerdan las preferencias de cada usuario. La excepción es el root, o administrador del sistema. Es el usuario que tiene acceso a todos los directorios y archivos, así como a la configuración del sistema. Es el que puede hacer todo con la máquina, incluso “romperla”. Todos y cada uno de los archivos y directorios del árbol jerárquico tienen permisos. Estos permisos indican, para cada usuario del sistema, si puede ejecutarlo, si puede ver su contenido o si puede borrarlo o modificarlo. Del mismo modo, cada elemento del sistema de archivos tiene un dueño. Por defecto, este dueño del elemento (tanto archivo como directorio) tiene acceso total a él y puede realizar todas las acciones posibles permitidas. o o todos los archivos de las carpetas de sistema y configuración suelen tener a root como propietario los de la carpeta personal de cada usuario tienen a ese usuario como propietario, y el resto de los usuarios normales no tienen ningún permiso sobre estos elementos Si bien los permisos parecen algo extraños, después de un rato aprendes a leerlos. La primer columna indica el “flag” y se relaciona con el tipo de archivo. Luego vienen tres grupos de tres columnas, donde el primer grupo indica los permisos del propietario del fichero, el segundo los permisos del “grupo” de usuarios al que pertenece el propietario y el último grupo de columnas refiere a los permisos que tienen todos los otros usuarios (algo así como owner – group - world). Los permisos para leer, escribir y ejecutar se indican como r, w y x respectivamente. Cuando se refieren a un directorio, r significa que puedes listar su contenido, w que puedes crear y borrar archivos en él, mientras que x indica que puedes “meterte” (cd) en ese directorio. Más sobre usuarios, grupos y permisos en el archivo PermisosLinux.pdf que se encuentra en la página 6. terminal o shell Las versiones actuales de Linux utilizan entornos gráficos similares a las interfaces de Microsoft Windows o Macintosh. No obstante, la manera más habitual de administrar una máquina Linux es desde una terminal o intérprete de comandos, que es en modo texto y generalmente presenta un PROMPT. o o Un PROMPT es lo que el shell escribe automáticamente en cada línea, habilitándonos a que le demos instrucciones las instrucciones se dan como una línea de comandos, opciones y argumentos y finalmente un INTRO para que sea recibido por la máquina y ejecutado o existen diferentes tipos de shell, con nombres como bash, sh, csh, tcsh... cada una con sus particularidades PROMPT Hay diferentes visualizaciones posibles: o o o o tlaloc> natalia@tlaloc 1:12PM natalia@tlaloc Bioinformatics/Vol_12 $ [natalia@tlaloc Vol_12] # El prompt indica que la terminal está pronta para aceptar un comando. Mientras un comando de ejecución larga esté corriendo, el prompt no va a reaparecer hasta que este finalice y el sistema quede pronto para el siguiente pedido. Línea de comandos: Mientras no se presione INTRO, te puedes mover sobre la línea de comandos y editarla usando el teclado. o o o o o o suprimir, backspace, flechas izquierda y derecha control-A: inicio de la línea control-E: final de la línea control-K: borra desde la posición del cursor hasta el fin de la línea flechas arriba y abajo: permite moverte entre las líneas de comandos utilizadas anteriormente (historial); en general se editan y vuelven a utilizar TAB: permite completar nombres de archivos, directorios, comandos que conoce la máquina; además de agilizar la escritura, ayuda a evitar errores de tipeo, entre otros Existen diferentes tipos de comandos, algunos como ls devuelven rápidamente una salida en la pantalla (en este caso una lista de los archivos existentes) y liberan el prompt, mientras que otros como clustalx abren una nueva interfaz, dejando inhabilitado el prompt hasta salir del programa ClustalX. Wildcards: o o o o o o o o * se refiere a entre 0 y más caracteres (nº indeterminado) e.g. *.txt se refiere a todos los archivos de extensión txt e.g. gen*.txt incluye genomics_course.txt y también genes.txt ? se refiere a un único caracter e.g. genIg?.txt incluye genIgG.txt y genIgM.txt [0-9]* se refiere a cualquier combinación de números [a-d]* se refiere a cualquier combinación de a, b c y d [^a-d]* se refiere a cualquier combinación de caracteres excepto los especificados [ad] se refiere a la letra a ó d, una sola de ellas [ad]* se refiere a cualquier combinación de los caracteres a y/o d [A-Za-z] se refiere a cualquier par de letras, siempre y cuando la primera sea en mayúscula y la segunda minúscula 7. logging Cuando ingreses como usuario a la máquina (va a ser necesario ingresar una contraseña) vas a estar en un lugar del sistema conocido como “the home directory”. Aquí podrás libremente crear y eliminar archivos y directorios (cosa que no podrás hacer en cualquier parte del sistema). El path (una variable que indica la ruta de directorios) en este caso es /home/nombreusuario. Como es un poco tedioso de escribir, el shell te permite abreviarlo a ~. Una vez finalizadas tus tareas, cierras la sesión en la terminal usando el comando exit. 8. algunos comandos básicos de la terminal BASH El comando cd Es un comando que permite cambiar nuestro directorio de trabajo (“change directory”). Cuando trabajas con un archivo debes indicar el path en el que se encuentra. Alternativamente, puedes cambiarte a su directorio (usando cd) y por lo tanto ya no va a ser necesario indicar el path. Para ir a un nuevo directorio puedes usar una referencia absoluta o una relativa. Usas una referencia abosluta si estando en /home/natalia te cambias al directorio /home/natalia/leptosiras/secuencias. Como en realidad ya estás “parado” en /home/natalia/, puedes ir directamente a leptospiras/secuencias (usando sólo una referencia relativa). De mucha utilidad, son dos complementos de la referencia relativa, el punto (.) que indica el directorio actual y los dos puntos (..) que indican el directorio inmediatamente superior. Mientras .. es muy usado para moverse entre los directorios, . se utiliza más en referencia a archivos ejecutables. Una vez que te loggees en la máquina, descarga de la página del curso el fichero TallerBioinfo al escritorio de tu máquina y luego ubícate en el directorio en el que se encuentra el archivo Monica.txt. Para construir el path puedes ayudarte viendo el navegador gráfico primero. [usuario@maquina ~] $ cd Desktop/TallerBioinfo/Linux/ ¿qué otros archivos se encuentran en el directorio? [usuario@maquina Linux] $ ls ¿cuántos directorios tienen a TallerBioinfo como su directorio superior? [usuario@maquina Linux] $ cd .. [usuario@maquina TallerBioinfo] $ ls o también puedes hacer (más rápido): [usuario@maquina Linux] $ ls .. El comando ls Este comando lista la información de los archivos y directorios contenidos en el directorio indicado (por defecto el actual). Tiene diferentes opciones, como ser -1 (muestra un solo fichero por línea de salida), -l (la salida tiene un formato largo, indicándose dueño, permisos, tamaño, fecha de modificación) y -R (lista subdirectorios recursivamente). Para saber sobre otras opciones, tu puedes recurrir a la ayuda de este comando, usando la opción -–help. El comando help Este comando, usado bajo la forma comando --help, despliega información acerca del comando requerido. Indica cuáles son las opciones y argumentos asociados a cada comando. Prueba de obtener ayuda sobre el comando ls. [usuario@maquina Linux] $ ls --help Intenta obtener una lista de los ficheros contenidos en el Desktop. Prueba con diferentes opciones del comando ls. Recuerda que puedes ubicarte en el directorio Desktop, pero también puedes lograr la lista desde dónde te encuentres en este momento. Importante, recuerda ayudarte con el tabulador para completar las rutas. Un camino: [usuario@maquina Linux] $ ls -R ~/Desktop/ Otro: [usuario@maquina Linux] $ cd ~/Desktop/ [usuario@maquina Desktop] $ ls -R Las diferentes opciones pueden utilizarse juntas (al menos en el caso del comando ls). Prueba de realizar ls -Rl y ls -lR. ¿Los outputs son iguales? ¿Qué permisos tienes sobre cada fichero? El comando mkdir Este comando sirve para crear directorios dentro del espacio de la máquina donde tienes permiso para hacerlo (usualmente en /home/usuario). Puedes señalar la ubicación del nuevo directorio con un path absoluto o relativo. Queremos crear los directorios pruebas y Pruebas dentro del directorio nuevo mis_pruebas. [usuario@maquina Desktop] $ mkdir mis_pruebas [usuario@maquina Desktop] $ cd mis_pruebas una opción: [usuario@maquina mis_pruebas] $ mkdir pruebas otra: [usuario@maquina Desktop] $ mkdir mis_pruebas/Pruebas Los comandos mv y cp Con el comando mv puedes cambiar archivos y directorios de lugar. La sintaxis de estos comandos es: mv/cp fichero_origen fichero_destino. Como otras veces, puedes usar referencias absolutas o relativas. Prueba copiar Monica.txt hasta la carpeta Pruebas. Una alternativa es, estando en TallerBioinfo: [usuario@maquina TallerBioinfo] $ cp ./Linux/Monica.txt ../mis_pruebas/Pruebas Intenta alguna otra alternativa y verifica con ls que efectivamente se hayan copiado al directorio indicado. Si observas atentamente, el comando mv (y también cp) puede utilizarse para renombrar archivos. Sólo es necesario indicar un nuevo nombre para ese archivo en el destino. [usuario@maquina Desktop] $ mv mis_pruebas Mispruebas Intenta un cambio de nombre usando cp. Los comandos rmdir y rm El comando rmdir permite borrar directorios vacíos. En caso contrario sale una advertencia. El comando rm permite borrar uno o varios archivos. La opción -R hace que el comando opere con recursividad, esto es, que se vaya adentrando nivel por nivel y borrando todo lo que encuentra. La opción -i hace la eliminación interactiva (pide confirmación antes de proseguir). Muy importante, trabajando desde una terminal, los ficheros una vez eliminados, son prácticamente imposibles de recuperar. Además, recuerda que puedes utilizar los wildcards para borrar múltiples ficheros al unísono o alguno cuyo nombre no recuerdas exactamente. Genera una copia del directorio Mispruebas y su contenido, utilizando un nuevo nombre, por ejemplo Mis_Pruebas. Además genera nuevas copias del archivo Monica.txt, con los nombres Monica2.txt, Juan.txt, Monica_Juan.txt, MonicaJuan, Juan2. Ahora: [usuario@maquina Desktop] $ cd Mis_Pruebas/Pruebas [usuario@maquina Pruebas] $ ls [usuario@maquina Pruebas] $ rm *.txt [usuario@maquina Pruebas] $ ls ¿cuáles archivos se borraron? ¿cuántos restan en el directorio? Ahora vuelve al desktop y borra toda la carpeta Mis_Pruebas. Primero intenta: [usuario@maquina Desktop] $ rm Mis_Pruebas [usuario@maquina Desktop] $ rmdir Mis_Pruebas ¿qué ocurrió? Ahora prueba: [usuario@maquina Desktop] $ rm -Ri Mis_Pruebas ¿Te sientes confuso? Prueba ver que hacen los comandos whoami (Who am I?), pwd (“print working directory” o Where am I?). Y si estás perdido del todo puedes usar el comando hostname para averiguar What am I?