Astronometrı́a II - Año 2011 Breve introducción a LINUX Introducción Elementos técnicos La computadora es capaz de retener información en la memoria, que es un dispositivo interno compuesto por celdas individuales (bytes) capaces de representar información usando el sistema binario, basado en pulsos eléctricos. Durante la ejecución de un programa, la memoria se puede leer y escribir. Los cómputos se realizan en la unidad central de proceso (CPU - Central Processor Unit), que accede y manipula las entradas de las unidades de memoria. La información se puede almacenar de forma permanente en los discos. Éstos son soportes magnéticos de distintos tamaños. Los discos internos de la computadora se llaman discos duros. Otros dispositivos son el teclado, que se utiliza para ingresar datos, y el monitor, que muestra los resultados y hace más fácil el manejo de los programas. Primer contacto Para entrar a la cuenta ”astrometria2” de las máquinas del labopratorio se debe ingresar en la pantalla de inicio el nombre de la cuenta (user): astrometria2. Inmediatamente se le pedirá al usuario que ingrese la palabra clave (password) que en este caso es: astrometria2. En el curso del cuatrimestre se abrirán cuentas personales y se informarán las claves. Lo primero que aparece es una terminal. Las terminales de las plataformas UNIX (o la variante LINUXpara PC) permiten ejecutar comandos. Si no aparece una terminal, se puede abrir una usando el mouse. En la terminal aparecerá una serie de caracteres, el prompt, que puede tener una forma similar a: [astrometria2@clueby6]# Para resolver el ejercicio 1 de la guı́a, primero hay que escribir el archivo de texto. Se puede, por ejemplo, crear y editar el archivo ej01.f90. [astrometria2@tom]#vi ej01.f90 la terminación ”f90” es la que corresponde a los programas escritos en lenguaje FORTRAN. Una vez que hemos terminado de escribir el programa, hay que compilarlo. El compilador es un programa que lee un archivo de texto y lo usa para generar un archivo ejecutable. El nombre del compilador es ifort, y la sintaxis para compilar es: [astrometria2@clueby6]#ifort ej01.f90 -o ej01.exe 1 Breve introducción a LINUX El archivo ej01.f se llama archivo fuente, y ej01.exe es el archivo ejecutable, para ejecutarlo hay que escribir: [astrometria2@clueby6]#./ej01.exe Resulta conveniente tener cierto orden en el manejo de los archivos. Los directorios son muy útiles para eso. Éstos son algunos de los comandos de UNIX para ver y manejar archivos y directorios: ls Lista los archivos que hay en el directorio en el que está posicionado el prompt. cp Copia un archivo de un directorio a otro, o bien crea una copia de un archivo, con otro nombre. mv Mueve un archivo a otro directorio, o le cambia el nombre. mkdir Crea un directorio. rmdir Borra un directorio, si esta vacı́o. cd Cambia de directorio. Para ir a un directorio superior, se escribe cd.., y para ir a uno que está en la parte infeior del árbol de directorios, se escribe cd <nombre del directorio>. ⊲ e.g./ El grupo 1 quiere crear un directorio llamado grupo1, y colocar allı́ una copia del archivo linux tutorial.pdf. [astrometria2@clueby6]#mkdir grupo1 [astrometria2@clueby6]#cp apuntes/linux_tutorial.pdf grupo1/ [astrometria2@clueby6]#cd grupo1 [astrometria2@clueby6]#ls Aparecerá en pantalla la lista de archivos en este directorio, en este caso, sólo el archivo linux tutorial.pdf. Para abrir el archivo se necesita un programa especial, que en este caso se llama gv. En el archivo linux tutorial.pdf (especialmente el cap. 3) el lector podrá encontrar todo el material necesario para un manejo razonable del sistema operativo LINUX El sistema operativo UNIX Desarrollo de UNIX/Linux Una forma simple de definir un Sistema Operativo (SO), es decir que es un programa que administra el software y el hardware de una computadora para el usuario. El usuario interactua con un SO a través de una interfaz de usuario que permite que el SO reciba e interprete instrucciones enviadas por el usuario. Dicha interfaz de usuario puede ser tan simple como ingresar comandos en una linea, o tan compleja como seleccionar menues e iconos. Un SO también administra aplicaciones de software, como por ejemplo, un editor de texto. El editor de texto es un programa que consta de instrucciones que debe ejecutar la computadora; para usarlo, se debe 2 Astronometrı́a II cargar en la memoria de la computadora y después se ejecutan las instrucciones. El SO controla la carga y ejecución de todos los programas. Otra caracterı́sitca común a todos los SO, es la de administrar archivos, programas e interaccionar con el usuario, Linux (al igual que UNIX) agrega las caracterı́sticas de multitarea y multiusuario (el sistema puede realizar varias tareas al mismo tiempo, y varios usuarios pueden conectarse al sistema simultáneamente). En cierto modo, LINUXes un derivado de UNIX, pero para poder comprender la diferencia, debemos entender el entorno en el que se desarrollo UNIX. UNIX surge en un ambiente académico y de investigación, por lo que es ideal para ámbitos de trabajo de este tipo; aunque es sofisticado, fue diseñado desde un principio para ser flexible, de manera que se pueda modificar facilmente. Hoy en dia, distintas compañı́as privadas tienen sus propias versiones oficiales de UNIX (IBM, Sun, HP) para estaciones de trabajo. Dentro de este contexto es que se desarrolló LINUXy, en este sentido, es una versión de UNIX para PC. El hecho de que Linux sea libre puede producir la impresión errada de que es un SO menos profesional, cuando en realidad, es una versión de UNIX para PC y estaciones de trabajo y se lo considera más estable que otros SO más generalizados como Windows. Linux es un SO libre, no gratuito. Muchas compañias pueden ofrecer a la venta distintas versiones de Linux, con distintas utilidades, pero siempre el código estandar bajo la licencia de Software Libre. Surgimiento de UNIX Nota: Esta sección es sólo informativa y se puede omitir. El desarrollo de UNIX comienza a finales de 1960. En 1968, un grupo de investigadores de General Electrics, AT&T Bell Labs., y el Massachusetts Institute of Technology desarrollaron un proyecto de investigación en SOs llamado MULTICS (MULTiplexed Information Computing Systems) que incorporó muchos conceptos nuevos en multitareas, administración de archivos e interacción con el usuario. En 1969, Ken Thompson, Dennis Ritchie e investigadores de AT&T Bell Labs. desarrollaron el SO UNIX incorporando muchas caracterı́sticas de las desarrolladas en MULTICS; desde un comienzo, UNIX fue un SO multitarea y multiusuario y muy eficiente El sistema UNIX se popularizó en los laboratiorios Bell; en 1973 Dennis y Ritchie re-escribieron el código de UNIX en un lenguaje de programación que habı́a creado Ritchie (el lenguaje C), con el fin de ser una herramianta flexible para el desarrollo de programas. El lenguaje C permitió que se escribiera una versión única del SO UNIX que luego podı́a compilarse, por medio de compiladores de C, en diferentes computadoras. Consecuencia: el SO UNIX se volvió portatil, capaz de funcionar en cualquier computadora con poca o ninguna reprogramación. En un principio, UNIX se consideró un producto de investigación. Las primeras versiones se distribuyeron gratuitamente a muchas universidades de prestigio, durante los 70’ Laboratorios Bell comenzó a entregar versiones oficiales con licencia para diferentes usuarios; uno de estos usuarios, fue el departamento de ciencias de la Universidad de California en Berkeley (allı́ se agregaron muchas caracterı́sticas nuevas que luego se volverı́an estándares) que luego lanzarı́a su propia versión de UNIX conocida por Berkeley Software Distribution (BSD).Microsoft también desarrolló una versión de UNIX para PC llamada Xenix. AT&T desarrolló varias versiones de UNIX, a principios de los 80’ sacó al mercado la primera versión comercial 3 Breve introducción a LINUX llamada ’System 3 ’, a la que le siguió la ’SystemV ’. A finales de los 70’, la versión BSD UNIX fue la base del proyecto de investigación de la Advanced Research Projects Agency (DARPA) del Departamento de Defensa de los EE.UU; como resultado, en 1983, Berkeley lanza una versión poderosa de UNIX llamada BSD 4.2 que incluı́a una sofisticada administración de archivos y herramientas de redes (protocolos TCP/IP, usados hoy en dı́a en la red internet). Esta versión fue adoptada también porSun Microsystems. La proliferación de las versiones de UNIX hizo necesario un estándar; a mediados de los 80’, los dos estándares en competencia eran la versión de AT&T y la BSD. AT&T trasladó el desarrollo de UNIX a una nueva organización llamada ’UNIX System Laboratories’ que se dedico a desarrollar el sistema estándar, en 1991 desarrolla el SystemV, versión 4 que incorporaba todas las caracterı́sticas de SystemV, versión 3, SunOS y Xenix. Paralelamente, compañı́as como Digital Equipment Corporation (DEC) y Hewlett-Packard (HP) establecieron la Open Source Fundation (OSF) para crear su propia versión de UNIX, esta co-alición se formó para evitar que AT&T y Sun dominen la titularidad y desarrollo de UNIX (consecuentemente, el futuro de UNIX). Se encontraban entonces dos versiones comerciales: OSF y SystemV, versión 4. En 1993, la UNIX System Laboratories de AT&T pasa a ser “UNIX System Groups” de Novell, entidad que produjo sus propias versiones de UNIX (UnixWare para sistemas NetWare de Novell, etc). Sun Microsystems introdujo el SystemV, versión 4 en sus SO Solaris. Hoy en dı́a, la mayor diferencia entre estas dos lı́neas de UNIX son las plataformas de hardware que soportan y su performance, otras diferencias son meramente ”cosméticas”. En la actualidad, existen más de 50 versiones de UNIX disponibles, la mayorı́a de ellas están diseñadas para aplicaciones especı́ficas (e.g. UNIX UNICOS, diseñado especı́ficamente para las supercomputadoras de Cray Research). Todas estas versiones de UNIX, de alguna manera, estan basadas en las 9 versiones más importantes: Linux, AIX, Digital UNIX, FreeBSD, HP-UX, IRIX, NetBSD, SCO Unixware y Solaris. Linux se diseñó especı́ficamente para computadoras personales basadas en Intel; se inició como un proyecto personal de un estudiante llamado Linus Trovalds en la universidad de Helsinki. En esa época, se utilizaba un programa llamado “Minix”, que fue creado por Andrew Tannebaum y se distribuı́a a todo el mundo a través de Internet, contaba además con diferentes caracterı́sticas de UNIX. La idea de Trovalds fue crear un SO (en particular, para los usuarios de Minix) que tuviera las versatilidades y la potencia de UNIX, pero para PC; decidió llamar a ese SO: LINUX, y en 1991 lanzó la versión 0.11. LINUXse distribuyó ampliamente a través de Internet y durante estos años, otros programadores lo depuraron y le hicieron adiciones incorporando la mayorı́a de las aplicacione y caracterı́sticas que ahora se encuentran en los sitemas UNIX estándar (administradores de ventanas, utilidades de Internet, compiladores, depuradores, etc., etc.). Linux ha sido desarrollado en el entorno abierto y gratuito de Internet, además se ajusta a los estándares oficiales de UNIX. Debido a la proliferación de versiones de UNIX, el Institute of Electrical and Electronics Engineers (IEEE) desarrolló un estándar independiente para el American National Standards Institute (ANSI) que se denominó “Portable Operating System Interface for Computer Enviroments” (POSIX). El estándar define cómo debe operar un sistema UNIX, POSIX define un estándar universal al que deben ajustarse todas las versiones de UNIX. Linux se desarrolló en un principio con base en ese estándar. 4 Astronometrı́a II Anatomı́a de LINUX Linux puede dividirse en tres componentes principales: el kernel (núcleo), el entorno, y la estructura de archivos. El kernel es el programa base que dirige otros programas y administra el hardware. El entorno ofrece una interfaz para el usuario, recibe comandos de éste y envı́a otros comandos al kernel para su ejecución. La estructura de archivos organiza la manera en como se almacenan los archivos en un dispositivo de almacenamiento. Con éstas tres partes básicas del SO, un usuario puede dirigir programas, administrar archivos e interactuar con el sistema. El entorno, es un intérprete de comandos que capta los comandos que introduce el usuario y los envı́a al kernel. Linux ofrece varias clases de entornos: escritorios, administradores de ventanas y shells de lı́nea de comando, tal que el usuario los puede ajustar a sus necesidades especiales. En este sentido, LINUXfunciona más como un entorno operativo que el usuario puede controlar. La interface del shell es muy sencilla; por lo común consta de un prompt en donde el usuario escribe el comando y luego presiona la tecla ENTER del teclado, en cierto sentido, se está ecribiendo el comando en lı́nea de comandos. Dichos comandos pueden ser tan simples como una palabra de dos caracteres (e.g., “ls”), hasta comandos de varias lı́neas de longitud. En la actualidad, los tres shells más importantes son el Bourne Shell (de Bells Laboratories para SystemV), el Korn Shell (una ampliación de Bourne) y el C-shell (de la versión BSD de UNIX). Linux utiliza versiones ampliadas o de dominio público, de dichos shells: Bourne Again (bash), TC-shell (tcsh) y Public Domain Korn (pdksh), entre otros. Distribuciones LINUX Aunque sólo hay un estándar de Linux, en realidad existen diferentes versiones. Distintas compañı́as y grupos han creado paquetes de Linux, y software de Linux, en forma ligeramente diferente. Se diferencian por ejemplo en la forma de instalación, la cantidad y tipo de paquetes que contiene o los programas que se instalan por defecto. Algunas de estas versiones son, por ejemplo, Red Hat, OpenLinux, Suse, Debian, Slackware, Conectiva, Mandrake, Fedora, etc. En Internet, pueden encontrarse numerosos sitios con información a cerca de Linux: http://www.gnu.org http://www.linuxworld.com http://www.linuxdoc.org http://www.linuxtoday.com http://www.linuxpower.org http://www.linuxworld.com http://www.linuxjournal.com http://www.slashdot.org http://www.linuxprogramming.com http://metalab.unc.edu/LDP http://www.lwn.net http://www.linuxfocus.org http://www.linuxmagazine.com http://www.linuxmall.com http://www.linux.org http://www.webwatcher.org Primeros pasos en Sistema Operativo Linux Un SO tiene como tarea principal dirigir el flujo de información de y hacia el hardware; un SO como LINUXse divide en las siguientes partes: 5 Breve introducción a LINUX -Manejador de memoria: Determina cuanta memoria esta disponible para cada programa y soluciona los posibles problemas que esta actividad pueda causar. -Scheduler : Decide qué y cual programa de usuario se ejecutará, y durante cuanto tiempo. -Sistema de archivos: Localiza, maneja y administra los archivos en los medios de almacenamiento. -Controlador de dispositivos: Se encarga de controlar los dispositivos del hardware que están a cargo del SO. La interacción entre el usuario y el SO se realiza a través de tres dispositivos estándar que son los siguientes: -Salida estándar : Dispositivo en el que un dado comando arroja los comandos, generalmente es la pantalla a menos que se especifique otra cosa. -Salida de error estándar : Es el dispositivo en donde los comandos arrojan los mensajes de error. Usualmente, también corresponde a la pantalla. -Entrada estándar : Es el dispositivo del que se espera recibir los datos. Usualmente corresponde al teclado. El kernel es el grupo más importante de programas que hacen al SO. El problema del kernel, es que sólo entiende el lenguaje binario, y es en este punto donde las interfaces de usuario (i.e. shell’s, escritorios e ı́conos) juegan un papel importante. Las interface realizan el trabajo de traductores, y convierten las instrucciones que el usuario le dá al SO (comandos redactados con caracteres ASCII, un click del mouse, etc.) a un lenguaje que el kernel pueda entender. Las funciones más importantes del shell son: Contar con comandos auto-construidos Creación de scripts (lenguaje de programación) Definición de variables: Locales y de ambiente. Poder redireccionar comandos Poseer caracteres comodines Trabajar con ”pipes”: Dar de entrada a un comando, la salida de otro Poder ejecutar sub-shells Permitir procesos de fondo Sustitución de comandos Cuando se crea una cuenta de usuario en el SO, dicha cuenta se crea con los siguientes parámetros -deben definirse obligatoriamente para los usuarios del sistema: login (nombre de la cuenta) 6 Astronometrı́a II UID (User ID: número de identificación del usuario (no existen dos iguales) GID (Grup ID: número de identificación del grupo por defecto al que pertenece el usuario) Nombre Apellido (Nombre completo del usuario) /directorio/home (”home” del usuario: rama de la estructura de directorio en donde estara el usuario en el momento de entrar al sistema) /bin/shell (el shell por defecto que tendrá el usuario al momento de ingresar al sistema). Una vez que el SO ha aceptado el ingreso del usuario al sistema, lo primero que hace es ejecutar el shell definido en la cuenta, con lo que el usuario verá un prompt, que puede cambiar dependiendo del shell asignado al usuario y un cursor en la lı́nea de comandos donde se podrán ejecutar los comandos. Uno de los comandos más utiles del SO, y el que más debe saber usar y conocer cualquier usuario de LINUX, es el comando man que muestra en la salida estándar un manual del comando que se ingresó como argumento: [astrometria2 clueby6]# man man [astrometria2 clueby6]# man -k dvi [astrometria2 clueby6]# man comd -S awk manual del comando man lista de comandos cuyo manual contiene la palabra dvi página n del manual del comando awk Existen una serie de comandos que le permiten al usuario moverse por el sistema y trabajar con archivos, por ejemplo: pwd, cat, ls, cd, mv, mkdir, cp, rm, etc. REFERENCIA RÁPIDA DE COMANDOS UNIX La siguiente lista de comandos pretende ser de utilidad como referencia rápida para utilizar comandos de sistema. Se ha agrupado en dos: los comandos de sistema corrientes y los relacionados con la administracion. Comandos de sistema ls =list. listar contenido de directorios. e.g.: ls, ls -l, ls -fl, ls –color cp =copy. copiar ficheros/directorios. e.g.:cp -rfp directorio /tmp, cp archivo archivoNuevo rm =remove. borrar ficheros/directorios. e.g.: rm -f fichero, rm -rf directorio, rm -i fichero mkdir =make dir. crear directorios. e.g.: mkdir directorio rmdir =remove dir. borrar directorios, deben estar vacios. e.g.: rmdir directorio mv =move. renombrar o mover ficheros/directorios. e.g.: mv directorio directorio, mv fichero nuevoNombre, mv fichero aDirectorio date gestion de fecha de sistema, se puede ver y establecer. e.g.: date, date 10091923 history muestra el historial de comandos introducidos por el usuario. e.g.: history — more more muestra el contenido de un fichero con pausas cada 25 lineas. e.g.: more fichero 7 Breve introducción a LINUX grep filtra los contenidos de un fichero. e.g.:cat fichero — grep cadena cat muestra todo el contenido de un fichero sin pausa alguna. e.g.: cat fichero chmod cambia los permisos de lectura/escritura/ejecucion de ficheros/directorios. e.g.: chmod +r fichero, chmod +w directorio, chmod +rw directorio -R, chmod -r fichero chown =change owner. cambia los permisos de usuario:grupo de ficheros/directorios. e.g.: chown root:root fichero, chown pello:usuarios directorio -R tar =Tape ARchiver. archivador de ficheros. e.g.: tar cvf fichero.tar directorio , tar xvf fichero.tar, tar zcvf fichero.tgz directorio, tar zxvf fichero.tgz gunzip descompresor compatible con ZIP. e.g.: gunzip fichero mount montar unidades de disco duro, diskette, cdrom. e.g.: mount /dev/hda2 /mnt/lnx, mount /dev/hdb1 /mnt -t vfat umount desmontar unidades. e.g.: umount /dev/hda2, umount /mnt/lnx wget programa para descargar ficheros por http o ftp. e.g.: wget http://www.rediris.es/documento.pdf lynx navegador web con opciones de ftp, https. e.g.: lynx www.ibercom.com, lynx –source http://www.ibercom.com/script.s — sh ftp cliente FTP. e.g.: ftp ftp.ibercom.com who muestra los usuarios de sistema que han iniciado una sesion. e.g.: who, w, who am i mail envio y lectura de correo electronico. e.g.: mail pepe@ibercom.com ¡fichero, mail -v pepe@ibercom.com ¡fichero sort ordena el contenido de un fichero. e.g.: cat /etc/numeros — sort, ls — sort ln =link. para crear enlaces, accesos directos. e.g.: ln -s /directorio enlace tail muestra el final (10 lineas) de un fichero. e.g.:tail -f /var/log/maillog, tail -100 /var/log/maillog — more head muestra la cabecera (10 lineas) de un fichero. e.g.: head fichero, head -100 /var/log/maillog — more file nos dice de que tipo es un fichero. e.g.: file ej01.exe, file * Comandos de administración df = disk free. espacio en disco disponible. Muy util. e.g.: df, df -h du =disk use. uso de disco. Muestra el espacio que esta ocupado en disco. e.g.: du *, du -sH /*, du -sH /etc uname =unix name. Informacion sobre el tipo de unix en el que estamos, kernel, etc. e.g.: uname, uname -a 8 Astronometrı́a II ps =proccess toda la informacion sobre procesos en ejecucion. e.g.: ps, ps -axf, ps -A, ps -auxf free muestra el estado de la memoria RAM y el SWAP. e.g.: free ping heramienta de red para comprobar entre otras cosas si llegamos a un host remoto. e.g.: ping mail.oac.uncor.edu Combinaciones útiles Los comandos son muy útiles, pero con el conocimiento búsico del shell y sus comandos tenemos armas muy poderosas que muestran todo el potencial del interprete de comandos Unix. A continuación se muestran algunos ejemplos avanzados de comandos que se usan con cierta frecuencia. comando — grep filtro A la salida de cualquier comando le podemos aplicar grep para que solo nos muestre la informacion que nos interesa. mail pepe@ibercom.com ¡fichero.conf Con esto nos enviamos rapidamente un fichero de sistema a nuestra cuenta. mail -v testing@dominio.com Con el parametro -v, al terminar de escribir (. enter), veremos la traza del correo hasta el servidor, si es aceptado o no. find / -name ’filtro’ -print Find es un buscador de ficheros muy potente y con muchos parametros, todos los que nos podamos imaginar (tamaños, fechas, tipos de archivos, etc..) more Al hacer more: /cadena : podemos hacer busqueda de cadena f : adelante b: volver arriba v: iniciar vi en la linea que estamos 9