Capítulo 1
L
INUX
E
L
S
ISTEMA
O
PERATIVO
A mediados de los años 70, durante la guerra fría, el gobierno norteamericano escogió un sistema operativo muy popular entre las universidades llamado Unix para crear un sistema de comunicación remota que fuera inmune a ataques y usara la línea telefónica como vía. Esto hizo que se implementara diversos protocolos de conexión a red, haciendo de Unix el sistema operativo sobre el cual se creó Internet. Con el tiempo han surgido varios sistemas operativos tipo Unix creados por diversas empresas: AIX (IBM), Solares (Sun), IRIX (Silicon Graphics), HP-UX (HP), Tru64 (Compaq), MacOSX (Apple), entre otros.
Dentro de los sistemas operativos Unix para computadores personales destacan Linux y BSD (OpenBSD, FreeBSD, NetBSD) los cuales son de código fuente abierto (open source), gratuitos y de gran potencia no sólo para trabajo en red, sino que para uso general del computador y hoy por hoy está sumando gran cantidad de adeptos, disminuyendo con esto el monopolio que ejerce Microsoft Co. con sus mediocres productos (líneas Windows, Office, IE entre otros).
Arranque
Al encender el equipo (estación de trabajo), el
hardware lee el mbr del disco duro maestro o primario
donde se encuentra el gestor de arranque. Este es un pequeño programa que contiene información sobre particiones existentes, a que corresponden (a que sistemas operativos) y la ubicación de su kernel. Luego de la carga del kernel se monta el sistema de archivos y comienza el proceso init el cual es un conjunto de instrucciones, que es propia de cada sistema operativo, y que regula la conexión a red, los software a utilizar, la activación del modo multiusuario, la ejecución del modo X-Window, el comportamiento frente al usuario, etc.
En el caso de Linux, una vez que se ha finalizado el proceso de arranque, se pide la identificación del usuario. A pesar de que es posible dejar el computador sin un usuario determinado (en algunas distribuciones) lo más recomendado es que sea obligatorio el uso de un usuario con su correspondiente contraseña.
Entonces escribimos el login (nombre del usuario) y el password (contraseña).
login: username password: ********
Luego hay dos posibilidades, que se obtenga un símbolo del sistema ($) y el sistema operativo queda funcionando solo con la shell (para la interacción con el usuario) o que parta el X Window y luego un entorno de escritorio o gestor de ventanas como Gnome, KDE, XFCE u otro.
Distribuciones Linux
Existen distintas versiones de Linux, que tienen en común el modo de arrancar, el sistema de archivos, el sistema de permisos, el kernel, la shell, entre otros. Sus diferencias son básicamente el modo de configuración, la forma de descargar e instalar programas externos y el entorno de escritorio que utiliza (aunque se puede cambiar). Existen muchas distribuciones, pero las más grandes (y de las que derivas la mayoría) son Debian, SuSe, Slackware, Gentoo y RedHat.
Hardware Son las partes físicas del
computador, incluye todas las piezas y accesorios.
Software Datos y programas que se
encuentran almacenados en la memoria del computador y que existen en y gracias al hardware.
mbr Viene del inglés “master boot record” y es un pequeño sector de memoria al principio del disco duro que contiene información sobre la tabla de particiones.
Partición Es una división lógica del disco
duro que le permite a un software acceder a su información.
Sistema Operativo Conjunto de softwares que
básicamente permiten la vinculación del usuario con el hardware, proporcionando una interfaz de comunicación que permita gestionar los recursos de manera eficiente.
Kernel Es el núcleo del sistema
operativo. Es el nexo directo con el hardware, gestiona todos sus recursos. Es quien decide que software utilizará que hardware y por cuanto tiempo.
Shell Es el llamado intérprete de
comandos. Es el encargado de “entender” y ejecutar las órdenes básicas de manejo del sistema. La shell típica de Linux es bash.
X Window Es el encargado de dar una
interfaz gráfica. Funciona como servidor máquina-usuario ya que contiene todo un conjunto de softwares que permiten el manejo de accesorios (monitor, teclado, mouse, etc). El más usado actualmente es el Xorg-X11
Entorno de escritorio Es el conjunto de software que
funciona sobre el X Window y da una interfaz amigable entre el software y el usuario.
Sistema de Archivos
Es sistema de archivos de Linux y la forma de trabajar con las particiones funciona de un modo muy distinto al de MS Windows, al que la mayoría está acostumbrado. Por está razón se hará una analogía entre ambos sistemas operativos.
En MS Windows cuando se tiene una partición, ésta se nombra C: y si se tienen más particiones, unidades de CD o DVD, pendrives, etc. se nombran D: E: etc.
En Linux los dispositivos de memoria (particiones, unidades de CD o DVD, pendrives) no tienen una ubicación fija, ya que uno los define (o se definen automáticamente por el software). En Linux el sistema de archivos se monta en “/” que vendría a ser como “Mi PC” de MS Windows. Luego se pueden crear directorios (carpetas) o almacenar archivos allí. Si se crea una carpeta “boot” esta se identifica por su ubicación: /boot. A su vez si creamos otra carpeta en boot o guardamos un archivo este se nombra: /boot/carpeta o /boot/grub.conf
En Linux existen varios directorios típicos como boot (se almacenan archivos del arranque), root, bin (archivos ejecutables), usr (programas), dev (dispositivos), home (archivos de usuarios), proc (mensajes del kernel), mnt (montajes temporales), etc (archivos de configuración), tmp (archivos temporales), var, lib (librerías), entre otras.
Una partición puede estar en cualquier directorio, así como los dispositivos de memoria también pueden ser “montados” en un directorio a elección. Generalmente los dispositivos de memoria se montan en la carpeta /mnt como /mnt/cdrom, /mnt/floppy, /mnt/usbmem, etc.
Los archivos propios de cada usuario se guardan en /home/usuario, y aquí se encuentran los archivos de configuración propios para cada usuario así como su escritorio y su papelera.
Línea de Comando
En el caso de que se entre a un entorno de escritorio (Gnome, KDE), para poder acceder a la línea de comando es necesario ejecutar un programa llamado
terminal que abre una ventana con la línea de comando
dentro del gestor de ventanas. En el caso que no se entre a un entorno de escritorio directamente, la shell está lista para “escuchar” los comandos que el usuario digite.
El formato GNU de línea de comandos consiste en el comando en sí (o sea el programa a usar), argumentos opcionales o parámetros y el operando sobre el cual se trabaja el comando (como un archivo). Por ejemplo
$ comando -opciones -parámetros operando
(cuando aparezca el signo peso $, quiere decir que lo que aparece a continuación es un comando y al escribirlo en el computador, no es necesario agregar el signo $, porque ya está)
Los sistemas operativos basados en Unix (como Linux) funcionan con un sistema llamado input/output (I/O). Este sistema consiste simplemente en que todo programa o comando requiere un parámetro de entrada (input) con el que trabajará el programa, algo así como la materia prima y un parámetro de salida, que es donde se entregarán los resultados del programa (output) en el caso que los haya. A veces si no se da un parámetro de salida (como un nombre de archivo) donde “poner” los resultados, estos solo se muestran en pantalla, lo que se conoce como stadard out o stdout. Muchos programas de Linux usan el stdout como salida por defecto.
Comandos: Archivos y directorios
pwd - “print working directory”
Este comando sirve para imprimir en pantalla el pathname completo del directorio de trabajo actual. Solo se escribe el comando, no tiene opciones ni parámetros.
cd – cambiar directorio de trabajo
Cambia el directorio de trabajo. El único argumento que necesita es el pathname de l directorio al que se desea trabajar.
$ cd /home/bioinfo
mkdir – crear directorios
Crea subdirectorios en el directorio de trabajo actual
$ mkdir bqa449
ls – saber que archivos tengo
Entrega en pantalla una lista de los subdirectorios y archivos que existen en el directorio de trabajo, a no ser que se especifique otro. Se puede utilizar el comodín * que vale por un número indeterminado de caracteres. El modificados -l entrega un informe detallado.
$ ls *.txt
Entregará los archivos terminados en “.txt” del directorio de trabajo.$ ls -l /usr
Entregará todos los archivos del directorio /usr con información más detallada de cada uno de ellosrm – eliminar archivos
Elimina los archivos o directorios. La opción -f evita confirmar la eliminación de cada archivo, el modificador -R elimina todos los archivos y subdirectorios en forma recursiva.
rmdir – elimina directorios vacíos cp – copiar
Copiar archivos y directorios desde una ubicación especificada hacia un destino especificado.
$ cp original destino
mv – mover o cambiar nombre
Funciona igual que copiar, solo que mv es como cortar de MS Window. Si se da el mismo directorio de origen y destino, pero otro nombre solo cambia el nombre del archivo.
Ambiente de Trabajo Multiusuario
Para tener acceso a un sistema Unix, se requiere estar registrado como usuario. Esto genera una identificación como usuario, verificado mediante un nombre de usuario y una contraseña, otorgándonos dominio sobre una parte del sistema (directorio /home/usuario) y acceso a pertenecer a grupos. El acceso a los recursos es controlado a partir de permisos que poseen los archivos y directorios asociándolos a distintos usuarios y grupos definidos. Estos permisos generan el modo de acceso sobre los archivos y directorios, pudiendo ser representados de forma simbólica. Existe un usuario en todo sistema Unix llamado el superusuario, quien tiene acceso a todos los archivos y directorios, así como es capaz de modificar los permisos de estos. Este superusuario se llama root y para acceder como él, desde la línea de comando se digita el comando su, que pide la contraseña correspondiente.
Existen tres tipos de permisos que un usuario puede tener para un archivo (o directorio):
r (4) – permiso de lectura w (2) - permiso de escritura x (1) - permiso de ejecución
Para conocer los permisos de un archivo se utiliza normalmente: ls -l
El primer bloque se caracteres se indican los permisos correspondientes a cada nivel de uso, luego aparece el dueño y el grupo y finalmente la fecha de creación del archivo y su nombre.
Los permisos están agrupados en un primer caracter que define si es un archivo (-), directorio(d) o enlace (l),. El segundo grupo de tres caracteres se aplican al usuario dueño del archivo (en este caso felipe), los siguientes tres caracteres se aplican al grupo (o sea todos los usuarios que pertenezcan al grupo users) y los últimos tres caracteres se aplican a los usuarios que no pertenezcan a este grupo.
Los permisos se ajustan con el comando chmod y el dueño y grupo con el comando chown.
Comandos - Avanzados
man – manuales de programas
Este sencillo programa permite ver el manual de cualquier programa de Unix
$ man grep
Muestra el manual del programa grep.tar – empaquetado de archivos y directorios
Es un programa que permite agrupar archivos y directorios en un solo paquete, así como comprimirlos utilizando otros programas. Los modificadores más usuales son:
-f Especifica los archivos a utilizar -c Crea un paquete de archivos -x Desempaqueta
-v Muestra en pantalla los archivos que se están procesando -z Comprime o descomprime utilizando gzip.
head – encabezado de archivos
Permite ver las primeras líneas de un archivo, por defecto entrega 10 líneas, pero se puede ajustar para ver más.
tail – final de un archivo
Muestra las últimas 10 líneas de un archivo. Funciona igual que head.
more – paginador de archivos
Imprime en pantalla el contenido de un archivo. Si este es muy grande y no alcanza a salir en la pantalla, more, lo va mostrando de página en página
grep – búsqueda de secuencias de caracteres en archivos
Busca expresiones regulares en uno o varios archivos, permitiendo encontrar archivos por algún contenido conocido.
$ grep ATOM 3nos.pdb
Este comando busca y muestra todas las líneas que contengan la palabra ATOM dentro del archivo 3nos.pdb awk - extracción de columnas
Este programa extrae los valores de una columna en particular desde un set de varias columnas. $ awk datos.txt ‘{print$0}’
Con este comando se extrae la primera columna del archivo datos.txt. Se comienza a contar desde 0.
Redirección de comandos
En Unix, muchos comandos leen desde una entrada estándar y derivan el resultado a una salida estándar. En las shells de Unix es posible manejar estos flujos en forma previa, proporcionando una manera uniforme de realizar estas tareas. Entre los mecanismos de redirección de entrada y salida estándar de comandos Unix están:
> Redirecciona la salida de un comando hacia un archivo
$ ls -l /home/felipe
Este comando muestra todos los archivos de la carpeta /home/felipe. Pero:$ ls -l /home/felipe > /home/felipe/lista.txt
Con este comando lo mismo que antes iba a la salida estándar (lo muestra en pantalla) ahora se almacena como texto en el archivo lista.txt que se ubica en /home/felipe.
>> Anexa a un archivo existente
Hace lo mismo que el anterior, pero en este caso agrega al final de archivo que ya existía.
| (pipe) Envía la salida de un comando como entrada de otro
Ejemplos:
$ dmesg
Este comando muestra todos los mensajes del kernel (es muy grande y no alcanza salir completoen la pantalla)
Editores de texto
La edición de textos permite la modificación de los contenidos de un archivo en sus caracteres, sin asignarlo a un programa específico, lo que se conoce como “texto plano”. Esta independencia respecto a un programa lo hace diferente a los procesadores de texto como MS-Word, OpenOffice, los cuales agregan encabezados de reconocimiento a los archivos. En bioinformática a menudo es necesario crear o modificar archivos de este tipo, así como archivos de configuración en Linux. Para esto son útiles los editores de texto, los cuales vienen incluidos en los distintos sistemas Unix y entre los más frecuentes de encuentran:
vi y vim pico joe emacs nano
El más recomendable es nano pues entrega los comandos de manejo directamente en pantalla y es muy sencillo de usar, aunque emacs está dentro de los preferidos de los usuarios Linux, por su flexibilidad y capacidad de extensión.
Linux como Sistema Operativo de Red
Entendemos por trabajo en red (o remoto), todo lo que implique la conexión de dos o más máquinas separadas físicamente para transferir información de cualquier tipo. Dentro de esta definición podemos considerar el mismo Internet, así como todos los protocolos que se explicarán a continuación.
En el ámbito del Internet o trabajo remoto, siempre debe haber por lo menos un computador que sirva como cliente y otro de servidor. El cliente es la máquina que solicita el servicio, es normalmente el computador que uno como usuario está utilizando, por ejemplo al conectarse al Internet. El servidor el la máquina que recibe la solicitud y entrega lo solicitado, como un servicio interactivo (Internet y HTTP), archivos (FTP y PPP), o una shell (Telnet y SSH).
Existen muchos protocolos que nos permiten conectarnos a máquinas remotas, entre las cuales están: TCP/IP (Transmission Control Protocol / Internet
Protocol), http (Hypertext Transfer Protocol), FTP (File Transfer Protocol), PPP (Point-to-Point Protocol), Telnet,
DHCP, SLIP, entre otros.
Dirección IP y Hostname
Para poder usar la red en cualquier sistema, debemos identificar la máquina que uno usa dentro del sistema completo. Para eso se usa normalmente el protocolo IP (Internet Protocol) que establece un sistema de numeración para identificar a las computadoras en el Internet. Esta dirección IP consta de cuatro números entre 0 y 255 separados por puntos, permitiendo a nuestro software de red conectarse al sitio deseado a través de esta dirección, la cual es propia de mi máquina. Para facilitar el acceso a estas direcciones, se asocia un hostname a una dirección IP, para facilitar las cosas a los usuarios.
FTP – Transferencia de archivos
FTP es un protocolo de transferencia de archivos a través de la red. Un servidor FTP permite a los clientes conectarse de manera anónima y navegar y descargar los archivos disponibles. Existe un gran número de aplicaciones FTP para Linux, tanto para consola como en ambiente X-Window.
Telnet y SSH
Telnet es un protocolo que permite a un usuario conectarse a un computador remoto como si estuviese realmente allí, permitiendo el acceso a nuestros archivos y trabajar con ellos desde cualquier parte del mundo a través de una conexión por Internet. Sin embargo, frente a Telnet, SSH (secure shell) ofrece sesiones remotas encriptadas que permiten una conexión mucho más segura (aunque no infalible) y con la misma funcionalidad.
Comandos - Trabajo remoto
lynx – navegador web por consola
Es un navegador de uso general, muy sencillo y liviano, que funciona bajo consola, muy útil cuando no se tiene acceso a X-Window. Lynx solo muestra texto en un formato simple, sin imágenes, animaciones, applets, banners o add-ons.
$ lynx www.google.cl
ssh – secure shell (conexión segura por shell)
Es la mejor forma de trabajar de forma remota en la shell de un computador (llamado servidor) al que no se tiene acceso físico a través de otro computador (llamado cliente). Otorga una interfaz por consola, de la misma manera que si uno estuviera trabajando físicamente en ese computador. Funciona mediante cuentas de usuario existentes en el computador a cual conectarse, y lo identifica por su IP. Además existe la opción de activar la transferencia de gráficos (X-Forwarding), o sea utilizar programas que usen el servidor X.
$ ssh –l felipe 158.251.6.4 –X
Con la opción –l, se indica el nombre de usuario, y con la opción –X, se activa la transferencia de gráficos. El IP indicado corresponde a la dirección del servidor al cual deseamos conectarnos.
scp – transferencia de archivos por ssh
Este programa forma parte de las aplicaciones de ssh y permite copiar archivos de un computador a otro. Muy útil cuando se quieren respaldar archivos del servidor por medio de disquetes, pendrives o cds (puesto que no se tiene acceso físico al servidor pero sí al computador cliente).
$ scp felipe@158.251.6.4:/home/felipe/conf.d /home/bioinfo
Con este comando estamos copiando el archivo “conf.d” que se encuentra en el directorio “/home/felipe” del usuario “felipe” en el computador “158.251.6.4” hasta el directorio local (en el computador cliente) “/home/bioinfo”. Puede usarse para copiar carpetas con todo su contenido (modo recursivo) con el modificador –r.
wget – descarga de archivos desde Internet
Programa ampliamente usado Linux para descargar a través de consola un archivo desde Internet. Puede utilizar protocolo http como ftp.