Sunteți pe pagina 1din 125

Introduccin a los Sistemas Operativos Informacin General

Un Sistema Operativo (SO) es una coleccin organizada de rutinas o extensiones de software del hardware. Consiste en rutinas de control que hacen funcionar una computadora y proporcionan un entorno para la ejecucin de los programas. Existen otros programas que se apoyan en el SO para poder acceder a los recursos que necesitan. Esto se lleva a cabo a travs de llamadas sistema operativo. Tambin el SO debe brindar una forma de que el usuario se pueda comunicar con l a travs de una interfaz que le brinde una va de comunicacin con el hardware del sistema informtico. El objetivo principal del SO es lograr que el sistema informtico es el lograr que el hardware de la computadora se emplee de modo eficiente, y el objetivo secundario se use de manera cmoda. El SO debe asegurar el correcto funcionamiento del sistema informtico. Para lograr esto el hardware debe brindar algn mecanismo apropiado que impida que los usuarios intervengan en el funcionamiento del sistema y as mismo el SO debe poder utilizar este recurso de hardware de modo que esto se cumpla. El SO debe ofrecer servicios a los programas y sus usuarios para facilitar la tarea de programacin.

Qu es un sistema operativo?
Las clases de sistemas operativos en la que nos basaremos sern los denominados multiusuarios y de multiprogramacin; es decir que varios usuarios podrn correr concurrentemente mltiples programas. Un SO es una parte importante de casi cualquier sistema informtico. Para entender mejor esto veremos que un sistema informtico puede separar en cuatro partes: El hardware El SO Los programas de aplicacin Los usuarios

Estas partes hacen de capas, cada una de las cuales acerca ms al usuario a utilizar los recursos del hardware. El hardware (CPU, memoria y dispositivos) proporciona los recursos de computacin bsicos sobre los que se agregaran estas capas sucesivas. Los programas de aplicacin como los

compiladores, juegos, aplicaciones de negocios, etc. definen la forma en que estos recursos se emplearn para solucionar los problemas del usuario. Puede haber varias clases de usuarios usando el sistema, como ser personas, programas y otras computadoras, tratando de resolver diversos problemas. El SO controla y coordina el uso del hardware entre los diversos programas de aplicacin y los distintos usuarios, administrando todos los recursos como disco, memoria, impresoras, monitor, etc. El SO determina los tiempos en que un determinado programa utilizar un recurso dado. Al comienzo de la era informtica, los sistemas no utilizaban SO's. Estas computadoras de hace 40 aos ejecutaban un programa a la vez que era cargado por un programador. Este cargaba el programa y lo ejecutaba. Si exista algn error que hiciera que el programa se detuviera antes de lo esperado, se tena que comenzar de nuevo con todo el proceso. Recordemos que en esa poca no haba muchas computadoras en funcionamiento, as que el programador tena que esperar de varios das hasta tener nuevamente su turno enfrente de la computadora. Los SO's existen porque son una solucin razonable al problema de crear un sistema informtico til. El objetivo fundamental de los sistemas informticos es ejecutar los programas de los usuarios y facilitar la resolucin de sus problemas. Todo esto se haca a travs de tarjetas perforadas que una persona encargada cargaba en la computadora y luego de algunas horas devolva la salida impresa al programador. Al avanzar la tecnologa informtica, muchos de estos programas se cargaban en una sola cinta, otro programa residente en la memoria de la computadora, cargaba y manipulaba los programas de esa cinta. Este es el ancestro de los SO's de hoy en da. En la dcada del 60 la tecnologa de SO's avanzo mucho y se podan tener mltiples programas al mismo tiempo en la memoria. As surgi el concepto de multiprogramacin. Si un programa necesitaba esperas a que ocurriera algn evento externo, como que una cinta se rebobinara, otro podra tener acceso a la CPU para as poder utilizar el 100% del poder de procesamiento con que contaba la computadora. Esto ahorraba mucho dinero ya que en aquel entonces todo en lo referente a cmputo (memoria, espacio en disco, etc) costaba cientos de miles de dlares. A finales de los 60's, en 1969, naci UNIX, SO que trataremos ms adelante, y es la base de muchos de los SO's de hoy en da, aunque muchos no lo admitan. Definir que forma parte de un SO y que no sera difcil, dada la gran variedad existente, pero una definicin para los SO que nos compete en estos momentos seria que el SO es el programa que ejecuta todo el tiempo en la computadora (conocido usualmente como kernel o ncleo), siendo los programas de aplicacin todo lo dems. En general un SO intenta incrementar la productividad de un recurso de proceso tal como el hardware de la computadora, o de los usuarios de los sistemas informticos. Ahora bien, en lo referente a la utilizacin eficiente de un sistema informtico no siempre se puede lograr que un SO lo logre. Casi siempre resulta contradictorio la comodidad y la eficiencia.

Unix como base de sistemas operativos


Como dijimos antes, en 1969, algo maravilloso sucedi en el mundo de la informtica: naci UNIX. En principio como un trabajo solitario de Ken Thompson, de Bell Labs, y luego en conjunto con Dennis Ritchie (quien junto a Brian Kerningan desarrollaron el lenguaje de programacin C) y otros miembros del Bell Labs que se fueron incorporando. Ritchie ya tenia experiencia dado que haba trabajado en otro proyecto llamado MULTICS, el cual fue de gran influencia sobre el nuevo SO, como por ejemplo en la organizacin bsica del sistema de archivos, la idea de un intrprete de comando (el shell) como un proceso de usuario, etc. La primera versin de UNIX estaba hecha ntegramente en ensamblador. Esto se cambi con la versin posterior, que fue escrita en lenguaje C lo que lo hizo sumamente portable; as mismo tambin se le agrego una caracterstica por dems de importante, la multiprogramacin. Esto y la entrega de licencias gratuitas con fines educativos extendieron su uso, desarrollo y la investigacin en las universidades. El uso de UNIX se fue ampliando a medida que se le fueron adicionando herramientas de software y entornos de programacin, apoyo a protocolos de red Internet (TCP/IP), mejoras en el editor de texto (Vi), compiladores de C, PASCAL y LISP, mejora en el control de congestionamiento de redes y el rendimiento de TCP/IP. Al crecer la popularidad de UNIX, se a transportado a distintas plataformas de hardware (PC, MAC, ALPHA) y se han creado una gran cantidad de SO's UNIX y parecidos a UNIX (XENIX de Microsoft, AIX de IBM, SOLARIS de SunSoft). Las caractersticas principales de este SO es que se dise como un sistema de tiempo compartido. Esto quiere decir que varios usuarios estarn usando el sistema al mismo tiempo, sin notar la presencia de los dems en su mbito de trabajo, lo que logra el SO asignndole un tiempo de atencin para el CPU a cada usuario. La interfaz estndar con el usuario (el shell) puede ser cambiada si se quiere. La mayora del cdigo fuente original est disponible por lo que los usuarios podrn ajustar el SO a sus requerimientos especficos. Es multitarea, es decir que permite que se puedan ejecutar varios procesos al mismo tiempo compartiendo el uso de la CPU. Soporta el procesamiento en tiempo real (ejecucin de procesos en intervalos de tiempo especificados sin retardo), el cual se utiliza en aplicaciones de robtica y base de datos. Los sistemas UNIX son esenciales para la Internet. Los sistemas de archivos con rboles multiniveles permiten que el SO trate tanto a directorios y archivos como simples secuencias de bytes. Posee distintos niveles de seguridad: password's de ingreso y permisos de archivos y directorios. Un proceso puede fcilmente generar otro, tambin es posible el manejo de procesos en determinado tiempo. Puede planearse la utilizacin de la CPU. El kernel y biblioteca del SO estn preparados para que el SO pueda extenderse y crecer, lo que permiti a UNIX mantenerse siempre a la cabeza de los SO's estando permanentemente actualizado.

Procesos
Para poder entender bien el concepto de Proceso deberemos diferenciarlo en el lugar donde se encuentra. Un programa ser un archivo cuando se encuentre en el disco rgido y ser un proceso al encontrarse en memoria; de esta forma se comprender mejor que es un Proceso. Pero tambin es cierto que un proceso es mucho mas que un programa en memoria y sobre todo en la clase de SO que nos compete, con sus funciones de multiusuario y multitarea como lo son los SO Unix.

Cada programa cuenta con un conjunto de datos que usa para hacer su trabajo y en la mayora de los casos estos datos no forman parte del programa. Como ejemplo tomemos un programa de edicin de textos. Los datos del archivos que el programa esta editando no forma parte del programa, pero si del proceso en memoria. Si alguna otra persona utilizara al mismo tiempo el mismo procesador de texto que se encuentra en ese sistema, los dos estaran utilizando el mismo programa, pero no el mismo proceso. Ambas tendran una copia para cada uno del proceso del editor de texto. Es as que los programas podrn ser nicos para todos los usuarios, pero los procesos pertenecern a cada usuario. En Unix varios usuarios podrn estar utilizando el sistema al mismo tiempo. Esto se traduce a que el sistema tendr mltiples procesos cargados en la memoria, y cada uno de ellos requerir de la atencin de la CPU en algn momento. El sistema llevar un control de los procesos que estn funcionando en ese momento, en que terminal y a que usuario pertenece adems de otros datos. Todo ello estar apuntado en una tabla de procesos, en la cual el SO asignar el tiempo que tardar la CPU para atender cada proceso.

Cuando uno entra a un sistema Unix, generalmente obtiene accesos a lo que se denomina intrprete de comandos. La gente que haya utilizado DOS sabr que esto, ya que el C:> es el indicador de shell de su interprete de comando, el COMMAND.COM. En cambio, aqu el indicador ser algo como $, # o %. Este shell es un proceso que esta corriendo y pertenece al usuario que esta corrindolo en ese momento. En realidad es una copia del intrprete de comandos que esta corriendo en memoria. Al cargarse un programa desde el intrprete de comando (shell), este no es reemplazado por dicho proceso, sino que queda a la espera de algn otro mandato. Mientras tanto, para correr el programa, se crea un nuevo proceso, el del programa, que ser hijo del proceso del shell. Un proceso tiene un solo padre pero puede tener mltiples hijos.

Al iniciar una sesin en GNU/Linux el usuario ser propietario de un nico proceso, por ejemplo /bin/bash que es el intrprete de comandos mas usados y el que usaremos nosotros. Luego cada proceso que ejecute a partir del bash, se acomodar en el rbol de procesos como hijo del bash. El bash permanecer atento a que se le de un nuevo mandato, mientras tanto se dice que esta durmiendo. Como habamos dicho antes, mltiples procesos podrn estar ejecutndose al mismo tiempo. Por ello se tendr que asignar un tiempo a cada proceso para recibir la atencin exclusiva la CPU. Es comn que cada proceso tenga por 1/100 segundos la atencin total de la CPU. Esto dar la ilusin al usuario de que es el nico que tiene la atencin del sistema, pero que ocurrira si el proceso se colgase. En un sistema monousuario como el Windows (no el NT) esto seguramente ocasionara el cuelgue del sistema ya que el kernel no podra recuperarse dado que el proceso tiene control absoluto de la CPU. Esto no ocurre en GNU/Linux dado que todos los procesos responden al kernel y es el kernel quien les da permiso de usar la CPU en el momento necesario. Supongamos que queremos guardar nuestro trabajo del editor de textos. Entonces, y con la combinacin de teclas correctas, le damos la orden al proceso del editor de textos para que guarde el trabajo. Esto, para nosotros, se hace instantneamente pero es solo otra ilusin. El proceso del editor de textos emite una peticin al kernel para escritura del disco, el kernel entonces escribir el disco en bloques, dependiendo de cuan libre este, mientras tanto guardara los datos en un espacio secundario de almacenamiento denominado "cache". Esto es beneficioso por varias razones. En caso de que los datos que estemos escribiendo en ese momento sean requeridos un momento despus, estos estaran disponibles en el cache y se ahorrara un viaje al disco. Tambin seria beneficioso por el lado de la eficiencia del sistema, ya que escribir al disco solo cuando el procesador este ocioso, no ocasionando con el proceso de escritura que el sistema funcionara ms lentamente. Suponiendo que alguna otra persona necesitara en ese momento un dato del disco, el proceso de lectura tendra que esperar su turno, entonces es puesto a dormir. El proceso tendr que esperar a que se termine el tiempo asignado al proceso de escritura y luego se le despertara y podr tomar su lugar para acceder al disco. Existe tambin otro tipo de eventos en los que la CPU repara para poder detener a un proceso en curso, estos son las interrupciones. Se ocasionan cundo un dispositivo, lase mouse o teclado, requiere la atencin de la CPU, es asi que se genera una interrupcin que la CPU atender, mandando a dormir al proceso en curso. Por supuesto hay mas complicaciones que las expuestas aqu, entre ellas las prioridades de los procesos que se vern cuando tomemos la parte de 6.7 de Tareas y Procesos. El tema de prioridades lo maneja el kernel de acuerdo a varios aspectos, como el dueo del proceso, si es de sistema o no, etc. Los procesos de sistemas son utilizados para la

administracin de memoria y la calendarizacin de turnos para la CPU, etc. Estos procesos se los conoce como daemon (DEMONIOS) o programas servidores. Funcionan sin la intervencin del usuario y sin que este los vea y hacen su trabajo esperando su turno cuando les llega para actuar.

Archivos, directorios y diferencias


Un archivo no es ms que un conjunto de bytes relacionados que estn en disco u otro medio, a los que se les asigna un nombre que se utilizara para referirse a este archivo. Un directorio no es ms que un archivo comn a los que se les a impuesto una estructura particular. Esto tal vez llame la atencin. En GNU/Linux y UNIX todo es archivo. S, todo es archivo. El teclado, el monitor, el disco rgido y hasta la memoria. El SO trata a los dispositivos como archivos y de esa manera utiliza los mismos mtodos de apertura, escritura, lectura y cierre para todos ellos. La clase de archivos de los que estamos hablando se denomina archivo de dispositivo y es solo una de las clases de archivos que existen en GNU/Linux. En DOS se acostumbraba a que solamente aquellos archivos con extensin .EXE .COM o .BAT se podan ejecutar. En GNU/Linux cualquier archivo puede llegar a ser ejecutable sin importar que extensin tenga. Los archivos ejecutables puede ser de dos clases: aquellos con formato binario ejecutable directamente por el kernel, y aquellos que tienen lo que se denomina un magic cookie, el cual determina la manera en que el sistema ejecutar dicho archivo (script). Un ejemplo de este tipo de ejecutable son los scripts de shell, que recuerdan a los archivos .bat del DOS, pero que son mucho ms poderosos. Otro tipo de archivo es el de canalizacin. Esta clase de archivo sirve de canal donde los datos entran por un extremo y salen por el otro. Son creados por los procesos y desaparecen al morir el proceso, pero mientras tanto estn ocupando un lugar fsico en el disco. Cuando se trate el tema de pipes y canalizacin se entrar ms en detalle. La forma en que se puede nombrar un archivo no esta limitada como en DOS a 8 letras seguido de 3 caracteres de extensin. Los nombres pueden ser de 255 caracteres de longitud y pueden tener puntos, guiones y dems smbolos como separadores. Los nicos nombres que no estn permitidos son los que contienen la / en su nombre debido a que este carcter se utiliza para indicar la ruta a directorios.
nota.txt nota.textual nota.para.julio nota.julio.hoy

Si trabajramos en un sistema DOS solamente el primer archivo seria un archivo reconocido como texto, en cambio en GNU/Linux cualquier archivo de estos podr contener texto. Los archivos que llevan un punto inicial, .nota.textual son denominados archivos de punto y el SO los pondr de manera predeterminada como ocultos. Organizar los archivos en directorios es la forma ms til de trabajar con ellos. Aunque pareciera que los directorios contienen a los archivos, esto no es verdad. En realidad los archivos estn asociados a ese directorio, y solo son mostrados como si estuviesen dentro de l. La forma de referenciar un archivo es ir poniendo los nombres de los subdirectorios seguido por una /, por ejemplo /home/shrek/cartas/carta_fiona. A esto se le denomina ruta del archivo y establece una ruta nica para determinado archivo ya que podra existir otro archivo con el mismo nombre pero con una ruta diferente, por ejemplo

/home/fiona/carta_fiona, pero no seria el mismo, sino otro. A lo sumo podra ser un enlace a la carta del directorio /home/shrek/cartas, pero eso lo veremos luego. Uno puede moverse de arriba abajo en un rbol de directorio por medio del comando cd (cambio de directorio) que forma parte del shell. El SO llevar cuenta del directorio en que estamos parados actualmente, denominado directorio de trabajo, cuando uno cambia de directorio, el SO verifica esta parte de memoria y si es posible efecta el cambio actualizndola con el directorio de trabajo actual. No importa si nos movemos arriba o abajo del directorio de trabajo, solamente esta informacin es la que cambia para que tengamos la ilusin de que nos estamos moviendo a travs del rbol de directorios.

Los directorios tienen informacin que apunta hacia la ubicacin de los archivos reales. Esta informacin, tanto en los archivos y directorios y junto con el nombre del creador, tamao permisos, etc, es guardada en lo que se denomina TABLA DE INODOS. Esta tabla se crea cuando se crea el sistema de archivos en GNU/Linux, comparable al formateo de una particin DOS. Se crea esta tabla que contendr la mayora de la informacin de los archivos. Entender lo que habamos dicho en un principio de que todo es archivo en GNU/Linux puede resultar algo traumtico, pero si vemos que esto resulta en un mejoramiento de cmo el sistema accede a sus recursos, vamos entendiendo que se establece una mayor sencillez. Al ingresar al sistema se abrirn 3 archivos. La entrada estndar (stdin) la salida estndar (stdout) y el error estndar (stderr). Cuando ingresamos datos por el teclado, estamos escribiendo en el archivo stdin y al verlos por la pantalla s esta escribiendo el archivo stdout. Si en algn punto existiera un error saldra por la pantalla, pero se estara escribiendo el archivo stderr.

El sistema operativo en capas


Podemos imaginar a Linux como una cebolla donde cada capa se comunica con la capa inferior. En la parte del centro se encuentra la capa de comunicacin con el hardware. El SO la utiliza para poder controlar los diversos aspectos del hardware. Sobre ella se encuentra la capa de dispositivos. Es un conjunto de funciones denominadas controladores de dispositivo que se encuentra dentro del kernel del SO. Ellas acceden directamente al hardware y hacen el trabajo de lectura, escritura, etc. Es un punto muy sensible del sistema en donde cuando un error surge poco puede hacerse para detener el proceso. Sobre la capa de dispositivos se encuentra la capa de administracin, esta es un conjunto de funciones a las que se hace referencia como sistema operativo tomando la decisin de que se ejecuta y cuando. Son las funciones que administran tambin los procesos, dndoles los turnos pertinentes y mandndolos a dormir cuando no es su turno. La capa que sigue es la de los procesos mismos, por ejemplo el shell del SO. Estos procesos reciben la ordenes directamente del usuario u otros procesos y los traducen al lenguaje de maquina pasndoselos al SO para su ejecucin. A partir del shell se podrn arrancar otrosprocesos, como programas, que forman la capa superior de la cebolla. Estos se comunicaran con el shell para que el SO interprete sus rdenes.

Introduccin a GNU/Linux Historia de GNU/Linux y el copyright


Muchas personas creen que Linux es el primer SO que surge con las caractersticas de libre y con los fuentes a disposicin, pero esto no es tan as. No podramos hablar de la historia de Linux sin incluir a GNU ya que este proyecto de la Free Software Foundation fue el comienzo de lo que es Linux hoy en da. La FSF (Free Software Foundation), fue creada por Richard Stallman, quin una vez que entr en el M.I.T en 1971 comenz a dar muestras de su gran habilidad para la programacin. El proyecto GNU fue el precursor de lo que es el SO Linux de hoy en da. Este proyecto comenz en el ao 1984 dndole el nombre recursivo de GNU que significa GNU no es UNIX (GNU's not UNIX), para crear un sistema operativo compatible con UNIX. Este proyecto es el padre de un sinnmero de programas que actualmente forman parte de cualquier distribucin de Linux y por ello es correcto hablar de GNU/Linux en lugar de Linux a secas. Algunos de los programas que se crearon a partir del proyecto GNU son el GCC, un compilador de lenguaje C, el GNU Emacs, un editor de textos, las libreras GNU de lenguaje C y adems uno de los proyectos ms grandes como lo es el entorno grfico GNOME. La idea era simple; se poda tener todo un SO funcional, libre y gratuito. Pero no hay que engaarnos con el significado de libertad. La libertad del software se basa en que uno es dueo del programa que adquiere y/o desarrolla por ello tiene derecho a obtener sus fuentes y hacer lo que se quiera con l, cambiarlo, mejorarlo y hasta venderlo. Linux esta regido por lo que se denomina Licencia Pblica General de GNU, o GPL por General Public License. La GPL fue desarrollada por la FSF para el proyecto GNU y hace una serie de previsiones sobre la distribucin y modificacin del software. Originalmente Linus Torvalds lanz Linux con una licencia ms restrictiva que la GPL que permita que fuese distribuido libremente pero prohiba lucrar con l. Sin embargo la GPL autoriza a la gente a vender su software, aunque no permite restringir el derecho que tiene el comprador de copiarlo y venderlo a su vez. Hay que aclarar que libre no significa de dominio pblico. El software de dominio pblico pertenece a la humanidad y carece de copyright. El software regido por GPL si tiene copyright que pertenece al autor y esta protegido por estas leyes internacionales. El software GPL tampoco es shareware. El shareware es propiedad del autor y exige a los usuarios que paguen cierta cantidad de dinero por usarlo y/o obtener mayores funcionalidades. En cambio el software GPL puede ser distribudo y usado sin pagar a nadie. La GPL permite a los usuarios el modificar los programas y redistribuirlos. Sin embargo, cualquier trabajo derivado de un programa bajo licencia GPL tambin se tendr que regir por esta licencia. Cuando Linus Torvalds comenz con el desarrollo de Linux, mucho del trabajo ya estaba hecho por el proyecto GNU, y el kernel que Linus Torvalds y un ejrcito de programadores pudo hacer, fue el pegamento que uni todo el sistema que hoy conocemos.

Las bases de GNU/Linux


GNU/Linux es una reimplementacin de la funcionalidad de Unix de libre distribucin. Como habamos dicho, su ncleo o kernel fue desarrollado en sus comienzos por Linus Torvalds. Fue un desarrollo de muchos programadores de todo del mundo, que gracias a Internet pudieron ir

coordinando el proyecto. Una curiosidad es que a pesar de ser en un 95% compatible con la funcionalidad de UNIX, el kernel Linux no usa ni siquiera una lnea del UNIX de la empresa AT&T. Es ms, como antes dijimos, muy buena parte del software del SO GNU/Linux esta bajo licencia GPL. Linus Torvalds se inspir en otro sistema operativo desarrollado por Andrew Tenenbaum, llamado MINIX, un SO pensado con fines educativos y que Andy Tenenbaum explica muy bien en su Libro Sistemas Operativos. La meta de Linus era mejorar este SO que presentaba sus limitaciones por ser un sistema pensado para ensear, no para fines comerciales. El kernel Linux aprovecho en sus comienzos de las caractersticas que contaba de conmutacin de tareas del flamante Intel-386 y fue escrito en su totalidad en ensamblador. La versin original, la 0.0.1, ni siquiera funcion y se tuvo que esperar hasta el 5 de octubre de 1991 cuando Linus anuncio la versin 0.0.2 donde ya se poda ejecutar el shell GNU Bash y el GCC (compilador de C de GNU). Luego de un muy corto tiempo de liberada la versin 0.0.3, se salt gracias a la ayuda de una comunidad de programadores que ayudaron en el proyecto, a la versin 0.10. Se alcanz la versin 0.95 tras muchas revisiones hasta que en el ao 1992 se logr la primer versin libre de errores, la 1.0. Hoy el Kernel se encuentra en una versin estable de la serie 2.4.x, la 2.5.x de la versin inestable y sigue evolucionando, adoptando a su paso toda una serie de nuevas tecnologas, que son probadas y arregladas por los desarrolladores y beta-testers antes de que salgan a las masas. Para entender algo ms acerca de la versiones, hay que decir que una versin con numero de subversin par es estable. Ej. 2.4.x, siendo x el nmero que indica el nivel de revisin o parche. En cambio una versin con nmero de subversin impar Ej. 2.5.x, es una versin inestable que todava no es 100% confiable. Hoy GNU/Linux se perfila como uno de los mejores SO que existen, compitiendo con SO's que fueron lderes hasta el momento. Todo gracias a personas como Richard Stallman y Linus Torvalds que vieron que una empresa como esta era posible. Tambin hay que agradecer a Internet, ya que sin su existencia esta tarea hubiera resultado mucho ms difcil.

Las distintas distribuciones


Uno podra simplemente pensar, porque comprar una distribucin si todo es gratuito. Tenemos que pensar que no todo el mundo tiene acceso a Internet y adems que si tuviramos que bajar todo los programas que podramos tener en una distribucin comn, gastaramos ms dinero que si la comprramos, en la mayora de los casos. Igualmente, y si se quiere, puede bajarse todo el software con licencia GPL y el kernel de Linux totalmente gratis desde Internet. Las empresas que estn distribuyendo GNU/Linux actualmente son muchas y con variadas ofertas que cubren todas las necesidades. Existen muchos puntos a tomar en cuenta para elegir una distribucin y ellos son claves para una buena seleccin. Boot Manager: El boot manager o administrador de inicio es una utilera que reside en el sector de inicio maestro del disco rgido (Master Boot Record o MBR). Este permitir seleccionar entre el sistema GNU/Linux y otro que ya haya esta en el sistema anteriormente como Windows. Existen varios administradores de inicio en el mercado como el GNU Grub, el System Comander de V Communication o el Boot Manager pero GNU/Linux viene con su propio administrador de inicio, el LILO o LInux LOader y que se instala por omisin en la mayora de las distribuciones. En las distribuciones que no es uilizado por defecto se utiliza GNU Grub. Sistema X Window: X Window es el subsistema que soporta la interfaz de usuario grfica. Uno de los servidores X ms comunes es el XFree86. Tambin existe un modelo comercial

llamado simplemente X de la empresa MetroLink. En los ltimos tiempos, debido a un problema de cambio de licencias en XFree86, surgi un derivado llamado X.org, siendo adoptado por la mayora de las distribuciones. Interfaz de usuario: La lnea de comando es la interfaz por omisin de GNU/Linux, pero existen entornos grficos como el KDE (Kool Desktop Environment) y el GNOME (GNU Network Object Model Environment). Existen otros, pero estos dos son los ms populares y utilizados en el momento. Servicio de conectividad: GNU/Linux tiene soporte de TCP/IP desde sus comienzos y adems posee programas servidores y clientes de todos los protocolos Internet comunes como DNS (Domain Name Service), HTTP (Hiper Text Transfer Protocol), SMTP (Simple Mail Transfer Protocol, correo electrnico), NNTP (para foros de noticias) y PPP/SLIP para enlaces serie como el dial-up, y un largo etctera. Servicios de Impresin y de Archivos: Estos servicios permiten al sistema acceder a recursos de red y compartir archivos e impresoras con otros usuarios. Entre los servicios se encuentra el NFS (Network File System) para compartir archivos con otros sistemas Unix, la suite de aplicacin Samba, que hacen que GNU/Linux pueda utilizar recursos de una red Windows, y la suite AppleTalk, que puede comunicarse con el mundo Apple-Macintosh. Aplicaciones: ltimamente gran cantidad de empresas de software se estn volcando a escribir programas para GNU/Linux, como hizo en su momento Netscape y hoy da hacen Oracle, Sun Microsystems y muchas otras. Pero hay un largo camino por seguir hasta que los fabricantes de hardware abran totalmente las puertas de sus arquitecturas lo que facilitar que se gestione software mas til y con mayor calidad. Administracin de Paquetes: El problema de la gestin de instalacin de programas en las distribuciones se ha resuelto de diversas maneras. Actualmente existen en la prctica tres sistemas en uso: paquetes RPM (Red Hat Package Manager), paquetes DEB (Para el administrador de paquetes de Debian) y TGZ o Tarballs. Los RPM fueron creados como una forma de distribuir aplicaciones por la empresa Red Hat y es una de las ms usadas. Los paquetes DEB fueron creados por el grupo que lidera la distribucin Debian y es otra forma muy eficiente de administracin de paquetes. Y los TGZ son la forma primitiva como se distribua el software en el mundo Unix. Existen distribuciones de GNU/Linux muy usadas, como la Slackware, que todava utilizan este sistema. Herramientas para el programador: Las distribuciones incluyen un sin fin de componentes y herramientas para el desarrollo, adems de lenguajes completos como el C, Python, Perl, TCL, Lisp, Fortran, Ada, C++ y un muy largo etctera. Empresas como RedHat, Suse y el grupo de desarrollo Debian, son lderes en este mercado, cubriendo con sus distribuciones la mayora de los nichos disponibles, tanto para las empresas como para los usuarios en el hogar. A continuacin, analizaremos brevemente algunas de estas distribuciones en su ultima versin, detallando sus caractersticas, Para mas informacin visitar la pgina de DistroWatch. RedHat Linux - Fedora Core 1

Para muchos el nombre de Red Hat equivale a Linux, ya que probablemente se trata de la

compaa de linux ms popular del mundo. Fundada en 1995 por Bob Young y Marc Ewing, Red Hat Inc solo ha mostrado beneficios recientemente gracias a otros servicios en lugar de a la distribucin en si. Aun y as, Red Hat es la primera eleccin para muchos profesionales y parece que seguir siendo un peso pesado durante mucho tiempo. Afortunadamente se resistieron a realizar ningn plan de rpida expansin durante el boom de las punto-com durante los aos 1998 - 1999, concentrndose en su negocio principal. Este tipo de gestin prudente si sigue as, es propensa a garantizar estabilidad y dependencia. Qu hace a Red Hat Linux tan especial? Su curiosa mezcla de conservadurismo y paquetes punteros mezclados sobre muchas aplicaciones desarrolladas en casa. Los paquetes no son los ms actuales, una vez se anuncia una nueva versin beta, las versiones de los paquetes se mantienen, excepto para actualizaciones de seguridad. Como resultado se obtiene una distribucin bien probada y estable. El programa de betas y las facilidades para enviar fallos estn abiertas al pblico y hay un gran espritu en las listas de correo pblicas. Red Hat Linux se ha convertido en la distribucin linux dominante en servidores en todo el mundo. Otra de las razones del xito de Red Hat es la gran variedad de servicios populares que ofrece la compaa. Los paquetes de software son fcilmente actualizables usando la Red Hat Network, un repositorio oficial de software e informacin. Una larga lista de servicios de soporte son accesibles en la compaa y, aunque no siempre baratos, tienes virtualmente asegurado un excelente soporte de personal altamente cualificado. La compaa ha desarrollado incluso un programa de certificacin para popularizar su distribucin, el RHCE (Certificado de Ingeniera de Red Hat), academias y centros examinadores estn disponibles en el casi todas partes del mundo. Todos estos factores han contribuido a que Red Hat sea una marca reconocida en el mundo de la industria de las TI. Pros Ampliamente usada, excelente soporte de la comunidad, muchas innovaciones. Cons Limitada vida til de la edicin gratuita, soporte multimedia pobre. Sistema de paquetes RPM Descarga Gratuita Si SuSE Linux

SuSE es otra compaa orientada a los escritorios, aunque una gran variedad de otros productos para empresas estn disponibles. La distribucin ha recibido buenas crticas por su instalador y la herramienta de configuracin YaST, desarrollada por los desarrolladores de la propia SuSE. La documentacin que viene con las versiones comerciales, ha sido repetidas

veces evaluada como la ms completa, til y usable con diferencia a la de sus competidores. SuSE Linux 7.3 recibi el premio "Producto del ao 2001" que entrega el Linux Journal. La distribucin tiene un gran porcentaje de mercado en Europa y Amrica del Norte, pero no se vende en Asia y otras partes del mundo. El desarrollo de SuSE se realiza completamente a puerta cerrada, y no se lanzan betas pblicas para probar. Siguen la poltica de no permitir descargar el software hasta tiempo despus de que salgan a la venta las versiones comerciales. A pesar de todo, SuSE no entrega imagenes ISO de fcil instalacin de su distribucin, usando el software empaquetado para la gran mayora de su base de usuarios. Pros Atencin profesional en cada detalle,herramienta de configuracin de fcil uso (YaST). Cons Solo disponible en algunas partes del mundo en las tiendas de software o mediante instalacin FTP, incluye componentes propietarios, que no permiten su redistribucin. Sistema de paquetes RPM Descarga gratuita SuSE no proporciona imgnes ISO para descraga, no obstante la versin Profesional de su distribucin es accesible para la instalacin FTP normalmente 1 o 2 meses ms tarde de la versin oficial. La instalacin mediante FTP no es dificil, pero requiere una buena conexin. Debian

Debian GNU/Linux inici su andadura de la mano de Ian Murdock en 1993. Debian es un proyecto totalmente no-comercial; posiblemente el ms puro de los ideales que iniciaron el movimiento del software libre. Cientos de desarrolladores voluntarios de alrededor del mundo contribuyen al proyecto, que es bien dirigido y estricto, asegurando la calidad de una distribucin conocida como Debian.En cualquier momento del proceso de desarrollo existen tres ramas en el directorio principal: "estable", "en pruebas" e "inestable" (tambin conocida como "sid"). Cuando aparece una nueva versin de un paquete, se sita en la rama inestable para las primeras pruebas, si las pasa, el paquete se mueve a la rama de pruebas, donde se realiza un riguroso proceso de pruebas que dura muchos meses. Esta rama solo es declarada estable tras una muy intensa fase de pruebas. Como resultado de esto, la distribucin es posiblemente la ms estable y confiable, aunque no la ms actualizada. Mientras que la rama estable es perfecta para servidores con funciones crticas, muchos usuarios prefieren usar las ramas de pruebas o inestable, ms actualizadas, en sus ordenadores personales. Debian es tambin famosa por su reputacin de ser dificil de instalar, a menos que el usuario tenga un

profundo conocimiento del hardware de la computadora. Compensando este fallo est "aptget" un instalador de paquetes Debian. Muchos usuarios de Debian hacen bromas sobre que su instalador es tan malo por que solo lo han de usar una vez, tan pronto como Debian est en funcionamiento, todas las actualizaciones, de cualquier tipo pueden realizarse mediante la herramienta apt-get. Pros 100% libre, web y recursos de la comunidad excelentes, bien probada, instalacin de software sencillisima usando apt-get. Cons Instalador arcaico, la versin estable no est actualizada. Sistema de paquetes DEB Descarga gratuita Si Slackware

Creada por Patrick Volkerding en 1992, Slackware Linux es la distribucin ms antigua que sobrevive hoy en da. No ofrece extras vistosos, y se mantiene con un instalador basado en texto, y sin herramientas de configuracin grfica. Mientras otras distribuciones intentan desarrollar intarfaces fciles de usar para muchas utilidades comunes, Slackware no ofrece nada amistoso, y toda la configuracin se realiza mediante los archivos de configuracin. Es por esto que Slackware solo se recomienda a aquellos usuarios nuevos que deseen perder el tiempo aprendiendo acerca de Linux. A pesar de todo, Slackware tiene una especie de aura mgica para muchos usuarios. Es extremadamente estable y segura, muy recomendada para servidores. Los administradores con experiencia en Linux encuentran que es una distribucin con pocos fallos, ya que usa la mayora de paquetes en su forma original, sin demasiadas modificaciones propias de la distribucin, que son un riesgo potencial de aadir nuevos fallos. Es raro que se produzcan lanzamientos de nuevas versiones (aproximadamente una al ao), aunque siempre se pueden encontrar paquetes actualizados para descarrgar despus del lanzamiento oficial. Slackware es una buena distribucin para aquellos interesados en profundizar en el conocimiento de las entraas de Linux. He oido que, posiblemente, la mejor caracterstica de esta distribucin es: si necesitas ayuda con tu sistema linux, encuentra un usuario de Slackware. Es ms probable que resuelva el problema que otro usuario familiarizado con cualquier otra distribucin. Pros

Alta estabilidad y ausencia de fallos, sigue fielmente los principios de UNIX. Cons Toda la configuracin se realiza mediante la edicin de ficheros de texto, autodeteccin de hardware limitada. Sistema de paquetes TGZ Descarga gratuita Si Mandrake

Mandrake Linux, creada por Gal Duval, es una distribucin que ha experimentado un enorme aumento de popularidad desde su primera versin de julio de 1998. Los desarrolladores partieron de la distribucin de Red Hat, cambiaron el entorno de escritorio predeterminado por KDE, y aadieron un instalador fcil de usar rompiendo el mito de que linux es difcil de instalar. Las herramientas de deteccin de hardware de Mandrake y sus programas para el particionamiento de discos son consideradas por muchos como las mejores de la industria, y muchos usuarios se encotraron usando Mandrake all dode otras distribuciones no haban conseguido entregar la usabilidad necesaria.Desde entonces Mandrake Linux ha madurado y se ha convertido en una distribucin popular entre los nuevos usuarios de linux y aquellos hogares que buscan un sistema operativo alternativo. El desarrollo de Mandrake es completamente abierto y transparente, con paquetes nuevos que se aaden al direcotrio llamado "cooker" a diario. Cuando una nueva versin entra en fase beta, la primera beta se crea a partir de los paquetes que se encuentran en "cooker" en ese momento. El proceso de pruebas de la beta sola ser corto e intensivo, pero desde la versin 9.0 ha pasado ha ser ms largo y exigente. Las listas de correo sobre la versin beta suelen estar saturadas, pero sigue siendo posible recibir una respuesta rpida sobre cualquier fallo o duda que enves. Como resultado de este tipo de desarrollo se obtiene una distribucin puntera y altamente actualizada. Como contrapartida, los usuarios pueden encontrarse con ms fallos que en otras distribuciones. Mucha gente encuentra este 'pero' razonable para sus equipos, ellos obtienen las ltimas versiones de software y los cuelgues ocasionales de las aplicaciones es algo con lo que pueden vivir. Tan pronto como el desarrollo se completa el software se pone a la libre disposicin de la gente desde rplicas en todo e mundo. Pros Amigable para el usuario, herramientas de configuracin grfica, enorme soporte de la comunidad, posibilidad de cambiar el tamao de particiones NTFS. Cons Algunas versiones contienen fallos, la compaa est pasando por problemas

financieros. Sistema de paquetes RPM Descarga gratuita Si

Por que usar GNU/Linux y que nos ofrece


Los usuarios buscan sistemas que puedan satisfacer sus necesidades. Tal vez la curiosidad los ha llevado a buscar en GNU/Linux, pero es bueno saber que la eleccin no solamente puede satisfacer dicha curiosidad. Como estudiantes, tendrn ante ustedes un sistema muy configurable y esa sola opcin hace que sea el preferido de los mbitos acadmicos. El poder tener el cdigo fuente de cada punto de un sistema operativo funcional es un recurso invaluable que no se poda tener hasta no hace mucho. Pero no nos engaemos con que tenemos un sistema solamente didctico. GNU/Linux presenta un sin fin de aplicaciones que generan un ambiente por dems de estable para los negocios de hoy en da. Y este es un punto interesante ya que es en las empresas donde GNU/Linux tiene mayor entrada, debido en gran parte al poder contar con un sistema Unix de bajo costo total de la propiedad (TCO por sus siglas en ingls) y sin las complicaciones de licencias que tienen otros SO. Pongamos un ejemplo. Una empresa compra una distribucin cualquiera por u$s 30, la instala en sus 120 mquinas. Nada lo impide, no es ilegal y sobre todas las cosas, tendrn una plataforma mucho ms estable que con otros SO's. Dirn seguramente que GNU/Linux no cuenta con ningn soporte. Es un gran error. Primero que todo GNU/Linux cuenta con una gran comunidad dispuesta a ayudar y sobre todo, en esa comunidad se podr contactar hasta a los mismos programadores que formaron parte del proyecto. Tal vez a una empresa no le interese el soporte a travs de un contacto que supunen poco confiable. Las empresas necesitan echarle la culpa a alguna organizacin si el servidor no funciona. Muy bien, empresas como IBM, Hewllett-Packard y Compaq ya venden servidores con GNU/Linux preinstalados y con garantas y servicios tcnicos similares a los que ofrecen con otras plataformas. Si eso no basta, numerosas empresas locales de servicio estn entrando en la competencia de brindar asistencia y soporte a aquellas personas que ya posean un sistema GNU/Linux, sin importar si se lo han comprado a ellos. Por parte de las distribuciones, cuentan con soporte permanente, ya sea a travs de la web o correo electrnico, servicio que cuesta muchsimo en otros SO's y ni hablar de SO's Unix. Tambin desde el punto de vista del usuario final, la cantidad de software disponible es ms que suficiente para satisfacer las necesidades en todos los campos. Veamos algunos ejemplos: Estacin de trabajo Internet Contamos en este rea con una enorme variedad de clientes para los ms diversos protocolos. La siguiente lista no intenta ser completa, solamente se listan los programas mas comunes en cada campo: http (web): Navegadores en modo consola puro (lynx, links, w3c, emacs/w3c), en

modo consola con capacidad grfica (links) y para X ( mozilla/netscape, konqueror, links, galen, epiphany) correo y noticias: Clientes para consola (mutt, pine, slrn, tin) y para X (kmail, evolution, sylpheed, balsa, pan, knode) ftp: Clientes de consola (ftp, con este nombre se agrupan varias versiones) y para X (gftp, konqueror). irc (chat): Clientes para consola (BitchX, epicII) y para X (XChat, KSirc, chatzilla) im (mensajera instantnea): Existen una variedad de clientes, siendo la caracterstica saliente que la mayora suele ser cliente de varias redes a la vez (jabber, icq, msn, aim, gadu-gadu, etc.). Hay tanto clientes de consola (centericq, pebrot) como para X (gaim, kopete, amsn, psi). Estacin de trabajo de oficina Encontraremos aqu una gran variedad de software destinado tanto a crear como a transformar y visualizar diferentes tipos de documentos. La siguiente lista es meramente orientativa: Procesadores de texto: Una gran cantidad de programas para X (OpenOffice Writer, Abiword, Ted, PW, Kword). Planillas de clculo: Existen algunas para la consola (GNU Oleo, sc) y tambin para X (OpenOffice Writer, Gnumeric,Kcalc, abs, Siag). Bases de datos: Existen aplicaciones que van desde algunas de gran calibre aplicables a servidores (PostgreSQL, MySQL) hasta mas pequeas comparables con algunas bases de datos personales del mundo Windows (Firefox, MiniSQL). Estas no proveen interfaces grficas en general, sino conectividad con clientes. Algunos clientes destacados son pgacces (interfaz grfica para PostgreSQL) y el front-end de OpenOffice para MySQL y archivos DBF. Programas de presentaciones: Disponibles para X (OpenOffice Impress, Kpresenter). Imagenes vectoriales: Varias opciones disponibles para X (OpenOffice Draw, Xfig, Sodipodi). Imagenes raster (bitmap): Se cuenta con varias aplicaciones con diferentes grados de sofisticacin (Gimp, Xpaint, Kpaint). Diseo 3d: Blender/Blender 3D, PovRay. Formateo de documentos: Esta seccin podra decirse que es casi desconocida en el mundo de Windows y MacOS, si bien los programas que pertenecen a este grupo se destacan por su gran portabilidad y tienen versiones nativas en los sistemas antes mencionados. La idea es escribir en un archivo de texto (sin formato alguno) el texto intercalando instrucciones acerca de que funcin cumple el texto dentro del documento, si es un prrafo, un encabezado, una lista numerada, etc. Luego, el

formateador procesa el archivo fuente y produce una salida formateada que puede ser impresa con una gran calidad, por ejemplo en formato pdf. Los formateadores de texto ms comunes son, en orden de popularidad: TeX-LaTeX: El formateador de Donald Knuth es el estndar de facto para salidas de gran calidad como libros y publicaciones cientficas. Troff-Nroff-Groff: El abuelo de los formateadores, ha quedado un tanto desfasado frente a los dems, pero se destaca por ser el nico que viene instalado en los sistemas base de todas las distribuciones, ya que se utiliza para darle formato a las pginas man. Lout: Sistema similar a LaTeX, distinguindose por ser mucho ms moderno y minimalista. Su salida es por defecto postscript, por lo que puede ser impreso en impresoras que soporten este estndar directamente. Markup languages: Aqu se agrupan una serie de tecnologas bastante recientes, orientadas a la creacin de documentos sobre todo de la rama informtica. Un exponente destacado de este grupo es DocBook, el cual se utiliz para la creacin de este documento. Estacin de trabajo cientfica GNU/Linux cuenta con software para el trabajo en distintas ramas de la ciencia y la tecnologa. Sera muy largo enumerar la cantidad de software disponible en esta rea. Sin dudas, los ms destacados son: Lenguaje de programacin tipo Matlab: GNU Octave, Scilab, Euler. Programas para grficas cientficas: Gri (lenguaje), GNU Plotutils (consola, no interactivo), Gnuplot, xmgrace, SciGraphica. Programas de clculo de elementos finitos: FreeFEM, CalculiX. GIS: Grass, Spring, GMT. Existen una gran cantidad de herramientas para cada rama de la ciencia. Si nuestro trabajo es de este tipo, sin dudas el software disponible llenar nuestras necesidades. Ahora bien, GNU/Linux cuenta adems con una serie de soportes para tecnologas heredadas como podran ser aplicaciones que corren en otro tipo de plataforma. Se cuenta con emuladores de DOS y Windows, estando siendo adems portadas una gran cantidad de aplicaciones tanto de corriente principal como grandes aplicaciones. Esto da la seguridad de no tener que cambiar el software por el que se pag anteriormente, pero hay que decir que este tipo de programas emuladores todava tienen sus fallas, siendo difcil poder ejecutar algunas aplicaciones poco conocidas. Existe una frase que habla por si misma: GNU/Linux lo tiene todo: Estabilidad, soporte y software. Adems en esta poca de recortes GNU/Linux es la clave para mantener nuestro negocio competitivo tanto tecnolgica como econmicamente.

La documentacin en GNU/Linux
La documentacin de todo software es un tema muy preocupante. Las distintas distribuciones comerciales de GNU/Linux poseen documentacin en formato impreso. Pero el mismo no cubre la totalidad de funcionalidades y programas del SO, sino solamente lo que corresponde a su implementacin particular, quedando en manos de los usuarios el adquirir documentacin ms especfica. Sin embargo, existe tanto en la misma distribucin como en Internet infinidad de documentacin que puede ser consultada. El mayor problema al instalar un SO nuevo o un programa, es que los usuarios y administradores no se toman el tiempo necesario para leer la documentacin y es por ello que la mayora de las llamadas a servicio tcnico se deben ms a problemas que estn en la documentacin que a los inesperados. Si se tomara el tiempo necesario para leer la documentacin, el costo de servicio tcnico se reducira notablemente y esto en una empresa se tiene que tener en cuenta tratando que los usuarios y administradores puedan tener el material necesario para informarse de todos los aspectos del sistema. Desde sus inicios los desarrolladores se han preocupado por mantener todo lo que se hizo en este sistema operativo bien documentado. Por esto existen numerosos proyectos que sirven para documentar cada aspecto del sistema y sus aplicaciones. Uno de los proyectos ms conocidos es el LDP (Proyecto de Documentacin de Linux), que se alza como una entidad centralizadora de documentacin. Esto es bueno para tener un solo lugar en donde buscar toda la informacin necesaria. GNU/Linux cuenta con gran cantidad de documentacin en varios formatos y uno de los desarrollados por el LDP son los HOWTO que estn disponibles muchas veces con la misma distribucin o a travs de Internet. En muchos casos estos HOWTO fueron escritos por los mismos autores que los programas y en otros por personas que se han visto en un problema real en una empresa, universidad u otra institucin. Tambin existen lo que se denomina MINI-HOWTO, que son guas rpidas para la pronta implementacin de un servicio o un programa, sin detenerse en aspectos que no se utilizarn o se utilizarn rara vez. Se pueden encontrar, tanto los HOWTO como los MINI-HOWTO, en distintos formatos como en ASCII, PDF, PS, HTML, DocBook, etc. En nuestro pas existe un mirror de documentacin del proyecto LUCAS (LinUx en CAStellano), en el cual se podrn encontrar la mayora de ellos. Uno de las formas de documentacin ms populares y simples de acceder es el uso de las manpages. Estas pginas de manual vienen en todas las distribuciones y cubren con notable detalle el uso de comandos o programas. Adems los programas nuevos que se instalen traern en su mayora man-pages que se podrn acceder de igual manera que a las propias del sistema. Se accede a ellas con el comando
shrek@pantano$ man <comando>

Existen varias opciones que se pueden utilizar y se pueden buscar tecleando


shrek@pantano$ man man

con lo que aparecern las pginas de manual del comando man. Muchas veces las pginas de manual indican un nmero luego del comando Ej. ls(1). Esto indica que la informacin del comando ls puede encontrarse en la seccin 1. Esta forma se remonta a cuando las man-pages de los sistemas Unix venan en libros impresos que se dividan en secciones donde se abordaba el tema de un comando de acuerdo a su aplicacin. Tambin se puede contar con las pginas de INFO de cada comando, utilizando el comando
shrek@pantano$ info <comando>

donde se encontrara informacin menos detallada que en las man-pages pero de pronta utilizacin. Un lugar donde buscar cuando se instale un nuevo programa es los archivos README. Estos explican todo el proceso de instalacin as como tambin los requerimientos necesarios. Adems cada programa cuenta con documentacin propia que se podr encontrar en los directorios /usr/doc y /usr/share/doc, pudiendo haber otros segn el programa y/o la distribucin. Los fuentes del kernel tambin poseen una gran cantidad de informacin sobre aspectos generales del SO y su funcionamiento, siendo una muy buena fuente de informacin al momento de meter mano al sistema, abundando los comentarios tcnicos y los jocosos, dirigidos por los distintos desarrolladores a sus pares. Existen adems muchsimas guas que cubren aspectos muy importantes y de alta complejidad del SO y sus aplicaciones. Cabe destacar que mucha de esta informacin se encuentra en espaol pero existe un nmero mucho mayor que esta en ingls. Proyectos como LuCAS tratan de que se revierta esto, aportando con su trabajo un aporte invaluable para toda la comunidad hispanoparlante. Por todo lo expuesto hasta aqu, puede decirse que GNU/Linux es uno de los sistemas con mayor cantidad de documentacin que existe, tanto libremente como en forma de libros impresos por editoriales de renombre en el campo tcnico. No quedan excusas para no informarse.

Instalacin
Se tiene que tener en cuenta que cuanto ms se conozca de su computadora menos problemas tendr en la instalacin de GNU/Linux. Se tendrn que tener a mano una serie de informacin elemental que le sern requeridas en el momento de la instalacin tales como el idioma del teclado y la zona del tiempo donde se encuentra. Aunque parezca elemental, es aqu donde la mayora se paraliza o pone mal los datos, lo que traer futuros dolores de cabeza. Hemos visto anteriormente las distribuciones ms importantes que existen y la mayora se instala en forma estndar de manera similar. Pero antes de proceder a informar como es la instalacin de alguna de estas, procederemos a ver algunos aspectos generales a tener en cuenta a la hora de realizar dicha instalacin. Antes de comenzar a instalar se tendrn que revisar nuestro sistema siendo lo primero a revisar el hardware de ste y verificar que el mismo est soportado. Para ello se cuenta con un HOWTO especial denominado Hardware HOWTO en el que se detalla una lista de hardware soportado por GNU/Linux. Cuando se habla de soportado significa que existe un controlador para ese dispositivo de hardware. El nmero de dispositivos soportados crece continuamente por ello esta lista esta en constante actualizacin. Si un dispositivo no es soportado, se puede recurrir a la empresa que vende la distribucin que se esta instalando. Ellos saben a quien contactar para encontrar los controladores adecuados para ese dispositivo. Una afirmacin incorrecta que se hace es que si funciona en DOS funciona en GNU/Linux. Esto no es siempre cierto, debido a que el DOS accede al hardware a travs de la BIOS y esta es dejada atrs por GNU/Linux cuando esta en funcionamiento. Linux toma control de cada parte del sistema y de todos los dispositivos, por ello estos debern funcionar de una forma estndar para que Linux los pueda utilizar. Otra afirmacin es que solo el hardware de marca es soportado. Eso no es tan as. Existe una gran cantidad de dispositivos clnicos que funcionan en GNU/Linux, pero como siempre uno es el responsable de lo que pueda ocurrir.

Ocurre en ocasiones que cierto hardware funciona en otro sistema con GNU/Linux y no en el nuestro. Esto puede deberse a que el sistema en el que funciona posee un kernel actualizado que soporta este dispositivo. Esto es algo a tener siempre en cuenta. Se tendrn que tener en cuenta los conflictos que puedan sucederse entre distintos dispositivos ya que GNU/Linux permite que estos funcionen con los valores predeterminados. La forma de instalar GNU/Linux puede ser variada, por ello se tienen que tener los recaudos necesarios para poder instalarlo de la forma en que queremos. Si nuestro sistema no permite el arranque a travs del CD-ROM, se tendrn que crear discos de instalacin para lo que se cuenta con aplicaciones que hacen esto. En un directorio del CD-ROM se encontrara un directorio /dosutils, por supuesto la ubicacin de este estar supeditada a la que le d cada uno de los distribuidores, donde hay un programa llamado RAWRITE.EXE. Es un programa de DOS que sirve para escribir una imagen de disco en un diskette. Tambin se encontrara un directorio llamado /image donde se encontraran las imgenes que necesitemos. En la documentacin de la distribucin se indicara cual imagen tiene el soporte para la clase de dispositivo a usar para la instalacin, as si queremos instalarlo desde un CD-ROM tendremos que usar una imagen que tenga soporte para el CD-ROM que se posee o en otra imagen de diskette se contaran con una serie de driver's para el manejo de dispositivos variados como placas de red, tarjetas PCMCIA, discos rgidos SCSI, etc. En ocasiones no se contara con un CD-ROM para la instalacin, pero podremos hacerla a travs de la red, si es que se cuenta con un servidor que nos provea la instalacin por medio de NFS (Network File Systems) con lo cual deberan saber correctamente la configuracin adecuada de la placa de red que se posee y la direccin del servidor y el directorio donde la instalacin reside. Para poner un ejemplo, supongamos que hemos montado el cd de la instalacin en el directorio /mnt/cdrom y que el servidor se llama Snoopy, esto significa que tendremos que seleccionar como servidor a Snoopy y como directorio donde se encuentra la distribucin a /mnt/cdrom. Cuando se instala un sistema GNU/Linux se podrn elegir, en la mayora de las distribuciones, diferentes formas de instalacin, desde una completamente automtica hasta una completamente configurable. Es de suponer que aquellos administradores expertos elegirn la opcin que les permite la configuracin total del sistema, adems con ello pueden saber a cada momento que es lo que se esta instalando y donde. La opcin automtica es recomendable para aquellas personas noveles que no quieren hacerse problemas por la instalacin. Hasta en algunos casos con solo colocar el CD en el CD-ROM, al cabo de unos 20 minutos, tendrn un sistema funcionando sin mas que un par de preguntas que el sistema les har; hasta la misma instalacin se encarga de particionar el disco rgido por si solo, tema que hablaremos ms adelante.

Requisitos de hardware
La propaganda que surgi hace algn tiempo fue que GNU/Linux poda ejecutarse en un 386/16 sin disco rgido y con 2 MB de memoria. Aunque esto es cierto, no es productivo. Para que GNU/Linux funcione correctamente se tendr que contar con un sistema 486 con disco rgido de por lo menos 500 MB con al menos 8 MB de memoria para las aplicaciones en modo texto y 16 MB para el modo grfico. Si se pensara poner dicha mquina como servidor, tendramos que pensar en por lo menos 1 MB de RAM adicional por usuario en modo texto y 2 MB para modo grfico que aunque parezca demasiado, cuando se cuenta con 100 usuarios usando el entorno grfico se vera que la memoria se evapora como agua en el desierto.

Si el trabajo a realizar requiere de un entorno grfico como el KDE o el GNOME y el uso de aplicaciones ofimticas como el OpenOffice, los requerimientos sern mayores debido a que estos requiere por lo menos de 128 MB para su correcto funcionamiento y de un Pentium de por lo menos 450 MHZ. Un servidor sencillo de pginas WEB puede funcionar correctamente con 16 MB de RAM en un 486 con un disco de 1 GB. Aunque la instalacin del servidor WEB requiere de menos de 65 MB, el espacio restante es para que se cuente con espacio suficiente para las pginas WEB que en un futuro se incorporaran. Igualmente depende de lo que se quiera poner en el servidor. Un tema interesante es la capacidad de almacenamiento. Existen distribuciones con herramientas muy bsicas que ocupan menos de 20 MB de espacio en disco, pero tambin hay distribuciones completas que ocupan ms de 1 GB de disco para todos sus programas, y el nmero de estos va creciendo de distribucin en distribucin. Habamos hablado antes de las compatibilidades con el hardware del sistema. Antes de comenzar a instalar se tendr que armar una libreta o apuntador con todo el Hardware de nuestro sistema, con sus correspondientes interrupciones y DMA as como tambin las caractersticas que vienen puestas de fbrica; con esta lista se buscara en el Hardware-HOWTO si es soportado y este ser el detalle que seguiremos cada vez que se tenga que agregar un dispositivo nuevo. De esta manera estarn seguros de que comprar y como instalarlo antes de que nos demos cuenta que no funciona en nuestro sistema.

Proceso pre-instalacin
Antes de ponerse a instalar el SO se tendrn que tener algunos recaudos para que no sea la ltima vez que se intente realizar esta tarea. Ante todo, se tendr que tomar nota de cada paso que se dio, cada tecla que se apret y que se contesto a las preguntas que el sistema iba haciendo. Cualquier sistema operativo necesita que el disco este dividido en particiones. Se pueden tener hasta cuatro particiones dado que las particiones lgicas de DOS son de hecho subdivisiones de las particiones extendidas. GNU/Linux puede ser instalado en particiones lgicas cosa que no todos los SO lo permiten. Los archivos sern guardados en un sistema de archivo que ocupara toda la particin. Los sistemas de archivos pueden estar en particiones diferentes o hasta en cuatro discos rgidos. Tener diferentes sistemas de archivos ayuda a recuperarse de desastres. Se podra tener el sistema de archivos principal en una particin y el /home, directorio donde los usuarios guardan sus archivos, en otra. De esta manera si el sistema de archivos raz / falla, se podr instalar todo el sistema otra vez y preservar los datos de los usuarios. La vida til de un sistema de archivos depende del uso. Si se debe tener una base de datos que funcione constantemente, seria bueno ubicarla en una particin diferente, para que el trfico no pueda ocasionar daos a la particin donde se encuentra el / o los datos de los usuarios. Para poder particionar la unidad existen muchas utileras, tanto destructivas como no destructivas. Con no destructivas se dice que no se tendrn que perder los datos al reparticionar una unidad que ya este en funcionamiento. Igualmente siempre se recomienda el hacer una copia de seguridad para evitar problemas. En /dosutils se encontrara una utilidad llamada FIPS.EXE que es un particionador no-destructivo. Leer la documentacin de FIPS para mas detalles. Esta utilidad solo puede reparticionar discos que tengan particiones DOS. Si se necesita particionar una unidad que ya tenga GNU/Linux instalado u otro dialecto de UNix, se podr utilizar el FDISK de GNU/Linux, la cual hace mucho ms que su contraparte de DOS, ya que puede cambiar tambin el tipo de particin lo que es de utilidad si las particiones se crearon con el FDISK de DOS.

Hay que recordar algo muy importante a la hora de realizar un particionamiento del disco. GNU/Linux necesita como mnimo 2 particiones. Una principal (raz) y otra de intercambio (swap). En el rea swap se guardaran pginas de memoria para hacer un tipo de memoria virtual y as extender la memoria fsica cuando se necesite. Se podrn tener hasta 16 particiones swap de hasta 128 MB cada una. El tamao recomendado para las particiones swap es del doble que la memoria que tenga el sistema. Esto es as dado que si necesita expandir la memoria ya lo tendremos previsto, y en la mayora de los casos la expansin es de la misma cantidad que tenamos instalada. Si no se hiciera as, el sistema no podra hacer un intercambio del total de la memoria, con lo que podran aparecer problemas de ejecucin. Por ello siempre es mejor desperdiciar un poco de espacio de disco que tener que reinstalar todo el sistema. De todas maneras el tamao de las particiones estar regido de acuerdo al software que se instalara y a la utilizacin que se le de al sistema. Los discos en ocasiones son un problema. Se debe considerar una frontera que se tenia por la BIOS de la computadora y que no poda romperse. La barrera de los 1024 cilindros. Mientras que GNU/Linux no se cargue y tome control completo del sistema, se tendr que acceder al hardware a travs de la BIOS y esta no puede leer el kernel del SO si esta fuera de ellos totalmente o en parte. Si se cuenta con una versin de LILO que no soporte el kernel despus del cilindro 1024, habr avisos del sistema que nos dirn que esto esta pasando. Esta limitacin se ha vencido en las ultimas versiones del programa LILO. Para ms informacin sobre los problemas de discos rgidos leer el Hardware-HOWTO. Hay que conocer algunos aspectos en lo referente a particiones y dispositivos que varan con lo que se esta acostumbrado. En GNU/Linux los dispositivos y particiones tienen nombres muy distintos a los utilizados en otros sistemas operativos. Por ejemplo, en DOS las disqueteras se denominan A: y B:, mientras que las particiones del disco rgido de denominan C:, D:,etc. Bajo GNU/Linux esto difiere dado que los dispositivos son manejados por controladores que estn en el directorio /dev. Estos sirven para comunicar al sistema con los dispositivos como disco rgido, puerto serie y disqueteras. Por ejemplo, si se tiene un mouse en el sistema que se comunique por el puerto serie, se puede acceder a l a travs del dispositivo /dev/mouse, el cual es un enlace simblico al dispositivo del puerto serie donde este conectado, /dev/ttyS0 o /dev/ttyS1. Las disqueteras, discos rgidos y particiones tienen controladores propios y se acceden a travs de archivos de dispositivo. Nos preocuparemos por ellos mas adelante pero veamos como se denominan cada uno. Tabla 1. Nombres de Dispositivos Dispositivo Primera Disquetera (A:) Segunda Disquetera (B:) Primer disco rgido (todo el disco) Primer disco rgido, particin primaria 1 Primer disco rgido, particin primaria 2 Primer disco rgido, particin primaria 3 Primer disco rgido, particin primaria 4 Primer disco rgido, particin lgica 1 Primer disco rgido, particin lgica 2 Segundo disco rgido (todo el disco) Segundo disco rgido, particin primaria 1 Nombre /dev/fd0 /dev/fd1 /dev/hda /dev/hda1 /dev/hda2 /dev/hda3 /dev/hda4 /dev/hda5 /dev/hda6 /dev/hdb /dev/hdb1

Dispositivo Primer disco rgido SCSI (todo el disco) Primer disco rgido SCSI, particin primaria 1 Segundo disco rgido SCSI (todo el disco)

Nombre /dev/sda /dev/sda1 /dev/sdb

Segundo disco rgido SCSI, particin primaria 1 /dev/sdb1 Como puede verse adems, los discos rgidos SCSI se nombran de diferente manera. Los discos IDE,MFM y RLL se acceden a travs de los dispositivos /dev/hda, /dev/hdb, etc. Las particiones se dividen a su vez en /dev/hda1, /dev/hda2, etc. Sin embargo los discos rgidos SCSI se nombran como /dev/sda, /dev/sdb y sus particiones como /dev/sda1, /dev/sd2, etc. Veamos un ejemplo prctico que servir para ilustrar un sistema que este configurado ya con DOS o alguna clase de Windows.
Primera disquetera (A:) Primera particin MS-DOS (C:) Segunda particin MS-DOS (d:) Particion Extendida Primera particin lgica Segunda particin lgica CD_ROM esclavo /dev/fd0 /dev/hda1 /dev/hda2 /dev/hda3 /dev/hda5 /dev/hda6 /dev/hdb

Como vern se salt la particin /dev/hda4 ya que esta pertenece a la cuarta particin primaria. Cada tipo de particin tiene su propio nombre.

Instalacin general y pequeas diferencias


Al instalar GNU/Linux en un sistema nuevo sin ningn otro SO instalado previamente uno puede tener pocos problemas. En todo caso se tendr que empezar el proceso de instalacin desde el comienzo pero no perderemos ningn dato importante. La recomendacin general, y para todo lo que se haga en GNU/Linux, es leer la documentacin relacionada a lo que realizaremos. (RTFM) Los sistemas como Windows han mal acostumbrado a los usuarios al no tener que leer casi nada para tener funcionando su sistema. Pero esto tiene un costo. Cuando un problema se presenta no se sabe que fue lo que paso. En GNU/Linux existe gran documentacin para todo y en los casos ms importantes esta en nuestro idioma. Por esto no hay que desaprovechar esta oportunidad. No se trataran el tema de instalacin a partir de cada una de las distribuciones ya que en cada una de ellas existe la documentacin para poder hacerlo. Lo que se tratara es la instalacin a partir de un sistema que tenga Windows instalado, que ser la mayora de las ocasiones. Los pasos a seguir son los siguientes: 1. Como antes habamos visto, el recabar informacin del sistema ayudara a una buena instalacin. La forma ms sencilla de hacerlo es imprimir la informacin que nos proporciona las Propiedades del Sistema en el panel de control. 2. Luego de que inicie la instalacin a travs del mtodo que se haya elegido, CD-ROM, diskette o NFS, GNU/Linux intentara detectar el hardware del sistema. Si no puede hacerlo

se le tendr que indicar con los datos que se recabaron anteriormente. 3. Se tienen que crear ahora las particiones principal y swap. Si se instala a partir de un disco ya particionado con el fdisk del DOS, se podr cambiar el tipo de particin con la utilera fdisk de GNU/Linux. En otras distribuciones existe otra aplicacin como el DiskDruid de Red Hat que har el trabajo por ustedes. 4. La configuracin de la interfase grfica es todo un tema. Existen diversos ambientes grficos de entre los cuales se puede escoger. En muchos casos la instalacin se har exclusivamente en un entorno grfico preconfigurado pero en otras se tendr que configurar para poder utilizarlo. Se tendr que ingresar informacin sobre mouse, teclado, monitor incluyendo velocidades de refresco e intervalo de barrido adems de la tarjeta de video disponible. Veremos este punto ms en detalle en la seccin de X. En este punto tal vez se pida crear un disco de booteo o rescate. Hay que hacerlo, rotularlo y guardarlo en un lugar seguro. Servir en caso de fallas o que el sistema no arranque al reiniciar la computadora. 5. El arranque del sistema es todo un caso. Se esta contando seguramente con dos SO en el mismo sistema. Los programas que lo guiaran por la instalacin les pedirn que indiquen que sistema operativo quieren que inicie al encender la computadora. Con GNU/Linux se utiliza un programa que reside en el MBR de disco rgido llamado LILO (LInux LOader) el cual administra en que particin se encuentra cada SO y uno puede elegir, presionando la tecla Tab, con cual SO se quiere iniciar. 6. Ahora ya estar dentro, se iniciara el sistema y se pedir que ingrese una clave para el root (que es el sper - usuario, lo trataremos mas adelante). La pequeas diferencias en la instalacin se debe al programa de instalacin que la distribucin utilice. Por ejemplo el programa utilizado por la distribucin SUSE, el YaST, es uno de los mas completos cubriendo gran parte, si no es que todos, los aspectos de la instalacin sistema. Otro es el programa de instalacin de Red Hat y su sistema de configuracin LinuxConf el cual ayudara al usuario, una vez instalado el sistema, a cambiar cualquier aspecto de este. El programa de la distribucin de Debian no se queda atrs, el Dselect, es muy confiable al indicar los paquetes que debern instalarse antes del seleccionado. Un problema que puede presentarse es que no se cuente con espacio suficiente para la instalacin del SO. En muchos casos el programa de instalacin avisara de esto pero en otros casos no y se tendr que esperar a que el programa de instalacin se de cuenta, al no tener mas espacio, para poder comenzar otra vez con el proceso de instalacin.

Proceso post-instalacin y resolucin de problemas


Muy bien, el SO esta instalado y se nos pide reiniciar la computadora. Al cabo de un instante la computadora se reinicia y ... nada. El sistema no arranca y para peor el anterior SO que tenamos instalado tampoco. Puede presentarse este y otros problemas una ves terminada la instalacin y muchas veces se debe a que el LILO no esta bien instalado. Tal vez algn aspecto de la configuracin de este no se hizo bien o se cuenta con un SO anterior que no permite que se cambie el MBR de disco rgido. El LILO puede ser interpretado como un virus por programas como el Norton Antivirus de Windows. Esto se debe a que este programa monitoriza cualquier cambio en el MBR y al momento de que lo encuentra, rescribe el MBR sobreescribiendo el LILO. Si se cuelga el sistema durante el arranque se debe tomar nota de todos los mensajes que aparezcan para as determinar la causa que origino esto. Muchas veces es por hardware que tiene conflictos y

esto hay que solucionarlo radicalmente. Los sistemas nuevos funcionan con dispositivos Plug an Play de configuracin por software y muchas veces originan conflictos con otros dispositivos. En este punto y con destornillador en mano se tendr que proceder a ir quitando cada uno de los dispositivos y comenzar con una mquina casi pelada. Solo placa de video, memoria, rgido, teclado y monitor. Solo lo esencial para que el sistema arranque. Si no arranca, el problema esta en alguno de los cinco puntos anteriores, lo que es muy difcil ya que la mayora de los problemas se debe a tarjetas mal configuradas. Si arranco, se deber ir instalando placa por placa hasta encontrar cual es la que trae problemas. Los errores que pueden generarse por la RAM del sistema se debe en su mayora a falta de esta (aunque se han visto casos de kernel panic originados por memorias descompuestas o que se encuentran mezcladas en los slots). En muchos casos si no se cuenta con la cantidad de RAM necesaria, el sistema se negara a encender ya que GNU/Linux necesita suficiente RAM para crear un sistema de archivos raz en memoria. Los discos SCSI son muy buenos pero ocasionan grandes problemas. Hay que procurar leer toda la documentacin que se encuentre sobre estos y la forma de instalarlos en GNU/Linux.

Empezando con GNU/Linux


Los usuarios que recin comienzan a utilizar un entorno operativo UNIX como es GNU/Linux se sienten intimidados por la complejidad que este SO posee. Existen numerosos libros que ya han tratado el tema de GNU/Linux pero ninguno de ellos puede cubrir en total profundidad todo los temas que este SO tiene para dar. Este parte del curso no tratara de ahondar en detalles y como todo el curso, solo dar las pautas necesarias para que el estudiante pueda investigar los temas que ms les interesen. Lo que trataremos de hacer es ganar conceptos fundamentales para el mejor funcionamiento de esta clase de SO por lo que empezaremos con UNIX. Para ello pasaremos a ver los interpretes de comando y algunos comandos simples pero solo a modo de que se tenga una pequea nocin para comenzar a trabajar. Luego se profundizar en cada uno de estos puntos con mayor detalle. Expondremos el concepto de rbol de directorios y su distribucin as como tambin una lista del comando ms utilizados.

Conceptos bsicos de Unix


Como antes vimos, GNU/Linux posee un 95 % de compatibilidad con el SO UNIX, es por esto veremos que la mayora de las posibilidades de este se aplican. UNIX posee las caractersticas de cualquier sistema operativo multiusuario y multitarea. Esto significa que puede existir ms de una persona usando la computadora a la vez, cada uno de ellos ejecutando un programa diferente. Esta sensacin la da el SO junto con las caractersticas del procesador ya que nos asigna tiempos para cada usuario y cada programa hacindonos pensar que contamos con un procesador solo para nosotros. El sistema de archivos es un rbol multinivel que permite a los usuarios crear sus propios subdirectorios. Tanto los programas escritos por los usuarios, como los del sistema normalmente se ejecutan por medio de un intrprete de comandos, que en Unix o en GNU/Linux es un proceso de usuario como cualquier otro, al cual se le denomina shell. Aunque el shell es un programa, lo podemos observar como tres entes distintos: como programa, como proceso y como ambiente de trabajo. El shell que se tomaba anteriormente como estndar era el Bourne Shell llamado simplemente sh escrito por el desarrollador Steven Bourne. Pero el paso del tiempo a dado lugar a un nuevo estndar, el bash, y se usar de aqu en adelante para referirse al shell dado su gran aceptacin en todos los sistemas UNIX y derivados

Entrando al sistema y creacin de cuentas


Para empezar a ver las caractersticas de que GNU/Linux posee debemos dar algunas pautas generales sobre los usuarios que se ampliarn mas adelante. Pondremos algunas pautas. Nuestro sistema tendr un nombre que lo identificar en la red y este ser "pantano". Y aparecer ante cualquier comando que pongamos como indicativo del sistema con la forma
[usuario@pantano:/directorio_actual]{smbolo}

donde directorio_actual ser el directorio donde estamos parados actualmente. Tendremos que tener dos usuarios mnimos de ejemplo para poder interactuar, que ya bautizaremos shrek y fiona. Dos indicativos que nos dirn con que tipo de usuario estamos trabajando en el lugar de {smbolo},se usar l "#" para el usuario root y "$" para el usuario comn. Por supuesto que esto puede configurarse de manera distinta. Esta es solo una muestra de posibilidades que se podran tener configuradas.
[root@pantano:/home]#

Aqu a entrado en el sistema el usuario "root" y esta parado sobre el directorio /home. Como se habr notado la barra indicativa del directorio raz es / y no la acostumbrada en DOS \. Cuando inicia el sistema lo ms probable es que tenga que ingresar como root o lo que denomina sper usuario. Para esta seccin basta decir que el root es quien tiene poder absoluto sobre el sistema. Es quien puede hacer cualquier cosa que le plazca y ms. Por ello se dice muchas veces "En un sistema eres root o no eres nadie" y con razn. Por ello se deber usar esta cuenta lo menos posible, solo en el caso de tener que utilizar algn comando privilegiado o para mantenimiento del sistema. S, cuanto ms tiempo estemos trabajando como root, tendremos ms posibilidades de cometer un error irreparable que si trabajamos como un simple usuario. Repetiremos esto otra vez, tal vea as se vea mejor USA AL USUARIO ROOT LO MENOS POSIBLE, CUANTO MS TIEMPO ESTEMOS TRABAJANDO COMO ROOT, TENDREMOS MAS POSIBILIDADES DE COMETER UN ERROR IRREPARABLE QUE SI TRABAJAMOS COMO UN SIMPLE USUARIO. Se vera un indicativo en la pantalla que le pedir su nombre de usuario a travs de la palabra login:
Bienvenido. Este sistema es Linux 2.4.26 pantano login:

Poniendo nuestro nombre de usuario y luego presionando Intro o Enter (como ms les guste), se podr pasa a ingresar nuestra contrasea o password que no ser mostrada en la pantalla para evitar que sea vista por alguna persona que este en los alrededores de su sistema, por ello se deber teclear cuidadosamente
Bienvenido. Este sistema es Linux 2.4.26 pantano login: root Password:

Hay que recordar que GNU/Linux es case sensitive por lo que los caracteres en minscula y mayscula son distintos. Si el password es incorrecto se mostrar el siguiente mensaje
Bienvenido. Este sistema es Linux 2.4.26

pantano login: root Password: login incorrect login:

Y se deber intentar de nuevo. Una vez introducido correctamente el nombre de usuario y el password uno es libre de empezar a trabajar con el sistema. Lo primero que se deber hacer al entrar al sistema recin instalado, si no es que se hizo durante la instalacin, es crearnos una cuenta de usuario comn. Para esto podemos utilizar dos script que vienen por defecto en la mayora de las distribuciones adduser y useradd. Ambos realizan el mismo trabajo pero se han nombrado diferente en distintas distribuciones. En muchos casos uno es un enlace del otro. Para la creacin de una cuenta, se deber entrar al sistema como root
pantano login: root password: Last login: Sun Mar 26 19:23:32 on tty1

Luego introduciremos uno de estos comandos seguido por el nombre de usuario que se quiera agregar al sistema.
[root@pantano:~]# adduser shrek [root@pantano:~]#

Este comando crear una entrada en el archivo /etc/password donde la clave estar en blanco, ya veremos por qu, y un subdirectorio en el directorio /home o /usr/home segn se haya instalado. La entrada de la clave en blanco esta dada porque tendremos que asignarle una contrasea para que el usuario pueda entrar al sistema y si le vienen ganas pueda cambiarla luego. Ya veremos en el tema de Administracin Bsica de Sistemas, las diferentes posibilidades que se pueden llegar a tener para la gestin de usuarios. Con el comando passwd seguido del nombre del usuario le asignaremos una contrasea
[root@pantano:~]# passwd shrek New UNIX password: Re-Type UNIX password: [root@pantano:~]#

Algo a tener muy en cuenta en lo que se refiere a la creacin de claves para los usuarios es que muchas veces estos no la cambian durante mucho tiempo. Este es un gran problema de seguridad, por lo que tendremos que darle a esta primera clave un plazo de expiracin corto, no ms de 30 das, para que el usuario se vea obligado a cambiarla inmediatamente. Con respecto a la calidad de la clave, se tendr que tener en cuenta que cuanto ms fcil de recordar sea una clave, ms fcil ser que la descubra otra persona y cuanto ms difcil sea de recordar se anotara en algn lugar que ser menos seguro que si guardase en la memoria. Usar palabras muy conocidas o fechas de cumpleaos u otra cosa relacionada con nosotros es perjudicial para la seguridad de nuestro sistema. Volveremos ms adelante con esto.

Consolas
La consola del sistema es el monitor y teclado conectado directamente al sistema. Como GNU/Linux es un sistema operativo multiusuario, puede tener otros terminales conectados a puertos serie del sistema, pero estos sern consolas fsicas y no el tipo que trataremos ahora. GNU/Linux, como otras versiones de Unix, proporciona acceso a lo que se denominan consolas virtuales o VC's, las cuales permitirn tener ms de una sesin de trabajo abierta desde consola a la vez. Para poder ver esto una vez que estemos dentro del sistema presionen las teclas Alt-F2 y se tendr un nuevo
Bienvenido. Este sistema es Linux 2.4.26 pantano login:

Esta es una segunda consola virtual. Para poder volver a la primer consola, solo hace falta presionar las teclas Alt-F1 y se estar otra vez en la primer sesin. En un sistema que recin se instala se contara con 6 consolas virtuales activas desde Alt-F1 a AltF6. En algunas distribuciones se podrn contar con 8 o ms activas al inicio, pero esto se puede aumentar hasta 12 VC's, una por cada tecla de funcin. El uso de estas consolas es extremadamente potente ya que nos permite tener varias aplicaciones corriendo al mismo tiempo y hasta, lo que veremos en la seccin de Xwindow, podremos tener corriendo el entorno grfico en una consola y otra aplicacin en otra VC. El uso de las VC's, por defecto esta limitado a ver una consola a la vez, pero existen aplicaciones que permiten ver varias consolas al mismo tiempo en un mismo monitor lo que las hace ms provechosas.

Conceptos bsicos de entorno shell


Al hablar de un SO Unix nos ponemos a pensar en un entorno de texto. Pero que hay entre lo que vemos y lo que es realmente? Qu es este entorno de texto que se habla tanto? Este entorno se maneja a travs de lo que se denomina un interprete de comandos. De la misma forma que DOS posee su interprete de comandos, el COMMAND.COM. Unix y GNU/Linux posee los suyos. A travs de estos podremos efectuar una comunicacin entre nosotros y el sistema dndole rdenes a travs de comando que el interprete de comandos descifrara para que el sistema haga lo que le pedimos. Anteriormente ubicamos al interprete de comandos dentro de las capas con la que nos podremos encontrar en un sistema. El interprete de comandos bash es solo una interfase de las muchas que posee Unix o GNU/Linux. Dentro de este tipo de interpretes de comando al que nos estamos refiriendo, existen muchas otras variantes. Tan pronto se entra al sistema, se iniciara l interprete de comando que tengamos configurando, en la mayora de los casos ser el bash y es en el que nos ocuparemos nosotros. En este momento, podremos teclear las ordenes que necesitemos o que tengamos ganas de teclear.
pantano login: shrek Password: Last login: Sun Mar 26 19:23:32 on tty1 Bienvenido al sistema pantano. Que tenga un buen da. [shrek@pantano:~]$

Aqu se ve el prompt del interprete de comandos, [shrek@pantano:~]$ indicndonos que

esta listo para recibir ordenes. Tratemos de decirle al sistema que realice algo interesante
[shrek@pantano:~]$ make love

Bueno, si estamos muy enamorados de nuestro sistema puede resultar lgico que nos sintamos as, pero el sistema no pensara lo mismo de nosotros y nos devolver un mensaje de error indicndonos que no puede ejecutar el comando que le hemos solicitado.
make: *** No hay ninguna regla para construir el objetivo `love'. [shrek@pantano:~]$ Alto.

Con razn dicen que GNU/Linux es poco amigable. Ahora con esto se nos presentan preguntas interesantes. Qu son rdenes? Qu esta ocurriendo cuando tecleamos make love? El programa make realmente existe en el sistema pero no puede interpretar lo que le estamos pidiendo que realice. La primera palabra de la orden, make, es el nombre de la orden a ejecutar. El resto de la orden es tomado como argumento de la orden. Veamos un ejemplo
[shrek@pantano:~]$ cal 10 2004 do lu ma mi ju vi s 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 [shrek@pantano:~]$ octubre de 2004

El comando cal sirve para mostrar un simple calendario, si no se le dan argumentos nos mostrar el mes en curso en el ao actual. Aqu el nombre de la orden es cal y los argumentos que le hemos dado son 10 y 2004. Cuando una orden se ingresa al sistema, el intrprete de comando efecta varias operaciones. Primero que todo, busca el nombre de la orden y comprueba si es una orden interna, propiedad del mismo intrprete de comandos y que este sabe ejecutar por si mismo, existen numerosas de estas rdenes. El interprete de comandos tambin comprueba si la orden es un "alias" o nombre sustituto de otra orden. Si no cumple con ninguno de estos requisitos, l interprete de comandos busca el programa y lo ejecuta pasndole los argumentos especificados en la lnea de comandos. En el ejemplo del make que es un comando que sirve para poder compilar, el intrprete de comandos ve que no es una orden interna ni un alias, as que busca el programa, que est ubicado en /usr/bin, y lo ejecuta pasndole el argumento love como un objeto a compilar. Como make no puede encontrar un objetivo de ese nombre, falla enviando un mensaje de error y devolviendo el control al intrprete de comandos. Para que el intrprete de comandos pueda encontrar los programas a ejecutar, se basa en lo que se denomina path. Este path o ruta es cargado como una variable de entorno, la carga el mismo interprete en memoria desde un archivo de configuracin central llamado /etc/profile y agregndole adems las propias configuraciones de path que cada usuario posea en su directorio personal, en el caso del interprete bash, ser ~/.bash_profile, adems de ~/.profile. Volveremos en el prximo captulo sobre esto. Ahora, que ocurre si tecleamos un comando que el sistema no pueda ni interpretar ni encontrar en la ruta definida
[shrek@pantano:~]$ besame -bash: besame: command not found

[shrek@pantano:~]$

Si no se encuentra el programa con el nombre de la orden que indicamos (en este caso besame), se mostrar un mensaje de error que deber explicar bien ese problema.

Sistema de archivos
La mayora de los sistema Unix tienen una distribucin estndar de ficheros, de esta forma los recursos que el sistema posee y los archivos, sern fcilmente localizados. Esta distribucin forma el rbol de directorios, el cual comienza con /, tambin conocido como directorio raz. Directamente por debajo de este hay algunos subdirectorios muy importantes para el sistema: Estos son /bin, /etc, /dev y /usr, entre otros. Estos a su vez contienen otros directorios con archivos de configuracin del sistema, programas, etc. Cada usuario posee un directorio en el /home que como vimos anteriormente y usualmente tienen el nombre del usuario que es su dueo. En algunas distribuciones puede ser encontrado en /usr/home. Veremos los directorios que se muestran en este rbol
/___bin |___dev |___etc | |___X11 | |___httpd | |___mail | |___ppp | |___sysconfig |___sbin |___home | |___shrek | |___fiona | |___burro |___lib |___proc |___tmp |___usr | |___bin | |___local | |___X11R6 | |___etc | |___include | |___lib | |___man | |___src |___var | |___admin | |___spool | |___run | |___log

/bin bin es la abreviacin de binaries, o ejecutables. Es donde residen la mayora de los programas esenciales del sistema. Use la orden ls -F /bin para listar los ficheros. Podr ver algunas rdenes que reconocer, como cp, ls y mv. Estos son los programas para estas rdenes. Cuando usa la orden cp est ejecutando el programa /bin/cp. Usando ls -F se ver que

la mayora (si no todos) los ficheros de /bin tienen un asterisco aadido al final de sus nombres. Esto indica que son ficheros ejecutables. /dev El siguiente es /dev. Veamos de nuevo con ls -F. Los archivos en /dev son conocidos como controladores de dispositivo (device drivers) son usados para acceder a los dispositivos del sistema y recursos, como discos duros, modems, memoria, etc. Por ejemplo, de la misma forma que puede leer datos de un fichero, puede leerla desde la entrada del ratn leyendo /dev/mouse. Los ficheros que comienzan su nombre con fd son controladores de disqueteras. fd0: es la primera disquetera, fd1 la segunda. Ahora, alguien astuto se dar cuenta de que hay ms controladores de dispositivo para disqueteras de los que hemos mencionado. Estos representan tipos especficos de discos. Por ejemplo, fd1H1440 acceder a discos de 3.5" de alta densidad en la disquetera 1. Aqu tenemos una lista de algunos de los controladores de dispositivo ms usados. Ntese que incluso aunque puede que no tenga alguno de los dispositivos listados, tendr entradas en dev de cualquier forma. /dev/console hace referencia a la consola del sistema, es decir, al monitor conectado directamente a su sistema. Los dispositivos /dev/ttyS* y /dev/cua* son usados para acceder a los puertos serie. Por ejemplo, /dev/ttyS0 hace referencia a "COM1" bajo MS-DOS. Los dispositivos /dev/cua son "callout", los cuales son usados en conjuncin con un modem. Los nombres de dispositivo que comienzan por hd acceden a discos duros. /dev/hda hace referencia a la totalidad del primer disco duro, mientras que /dev/hda1 hace referencia a la primera particin en /dev/hda. Los nombres de dispositivo que comienzan con sd son dispositivos SCSI. Si tiene un disco duro SCSI, en lugar de acceder a l mediante /dev/hda, deber acceder a /dev/sda. Las cintas SCSI son accedidas va dispositivos st y los CD-ROM SCSI va sr. Los nombres que comienzan por lp acceden a los puertos paralelo. /dev/lp0 hace referencia a "LPT1" en el mundo MS-DOS. /dev/null es usado como "agujero negro", cualquier dato enviado a este dispositivo desaparece. Para qu puede ser til esto? Bien, si desea suprimir la salida por pantalla de una orden, podra enviar la salida a /dev/null. Hablaremos ms sobre esto despus. Los nombres que comienzan por /dev/tty[0-9]* hacen referencia a "consolas_virtuales" de su sistema (accesibles mediante las teclas Alt-F1, Alt-F2, etc). /dev/tty1 hace referencia a la primera VC, /dev/tty2 a la segunda, etc. Los nombres de dispositivo que comienzan con /dev/pty* son "pseudoterminales". Estos son usados para proporcionar un "terminal" a sesiones remotas. Por ejemplo, si su mquina est en una red, telnet de entrada usar uno de los dispositivos /dev/pty.

/etc contiene una serie de ficheros de configuracin del sistema. Estos incluyen /etc/passwd (la base de datos de usuarios), /etc/rc (guiones de inicializacin del sistema), etc. /sbin se usa para almacenar programas esenciales del sistema, que usar el administrador del sistema. /home contiene los directorios "home" de los usuarios. Por ejemplo, /home/shrek es el directorio del usuario shrek. En un sistema recin instalado, no habr ningn usuario en este directorio. /lib contiene las imgenes de las libreras compartidas. Estos ficheros contienen cdigo que compartirn muchos programas. En lugar de que cada programa contenga una copia propia de las rutinas compartidas, estas son guardadas en un lugar comn, en /lib. Esto hace que los programas ejecutables sean menores y reduce el espacio usado en disco. /proc es un "sistema de ficheros virtual". Los ficheros que contiene realmente residen en memoria, no en un disco. Hacen referencia a varios procesos que corren en el sistema, y le permiten obtener informacin acerca de que programas y procesos estn corriendo en un momento dado. /tmp Muchos programas tienen la necesidad de generar cierta informacin temporal y guardarla en un fichero temporal. El lugar habitual para esos ficheros es en /tmp. /usr es un directorio muy importante. Contienen una serie de subdirectorios que contienen a su vez algunos de los ms importantes y tiles programas y ficheros de configuracin usados en el sistema. Los directorios descritos arriba son esenciales para que el sistema est operativo, pero la mayora de las cosas que se encuentran en /usr son opcionales para el sistema. De cualquier forma, son estas cosas opcionales las que hacen que el sistema sea til e interesante. Sin /usr, tendra un sistema aburrido, solo con programas como cp y ls. /usr contiene la mayora de los paquetes grandes de programas y sus ficheros de configuracin. /usr/X11R6 contiene el sistema XWindow si se ha instalado. El sistema X Window es un entorno grfico grande y potente el cual proporciona un gran nmero de utilidades y programas grficos, mostrados en "ventanas" en su pantalla. Si est familiarizado con los entornos Microsoft Windows o Macintosh, XWindow le ser muy familiar. Este directorio

contiene todos los ejecutables de XWindow, ficheros de configuracin y de soporte. Esto ser cubierto con ms detalle en la Seccin 9. /usr/bin es el almacn real de programas del sistema Unix. Contiene la mayora de los programas que no se encuentran en otras partes como /bin. /usr/etc Como /etc contiene diferentes ficheros de configuracin y programas del sistema, /usr/etc contiene incluso ms que el anterior. En general, los ficheros que se encuentran aqu no son esenciales para el sistema, a diferencia de los que se encuentran en /etc, que si lo son. /usr/include contiene los ficheros de cabacera para el compilador de C. Estos ficheros (la mayora de los cuales terminan en .h, de "header") declaran estructuras de datos, subrutinas y constantes usados en la escritura de programas en C. Los ficheros que se encuentran en /usr/include/sys son generalmente usados en la programacin de en Unix a nivel de sistema. Si se est familiarizado con el lenguaje de programacin C, aqu encontrarn los ficheros de cabecera , como por ejemplo stdio.h, el cual declara funciones como printf(). /usr/lib contiene las libreras equivalentes "stub" y "static" a los ficheros encontrados en /lib. Al compilar un programa, este es "enlazado" con las libreras que se encuentran en aqu, las cuales dirigen al programa a buscar en /lib cuando necesita el cdigo de la librera. Adems, varios programas guardan ficheros de configuracin en /usr/lib. /usr/local es muy parecido a /usr contiene programas y ficheros no esenciales para el sistema, pero que hacen el sistema ms divertido y excitante. En general, los programas que se encuentran en /usr/local son especficos de su sistema esto es, el directorio /usr/local difiere bastante entre sistemas Unix. Aqu encontrar programas grandes como TeX (sistema de formateo de documentos) y Emacs (gran y potente editor), si se los instala. /usr/man Este directorio contiene las pginas de manual. Hay dos subdirectorios para cada pgina "seccin" de las pginas (use la orden man man para ms detalles). Por ejemplo, /usr/man/man1 contiene los fuentes (es decir, los originales por formatear) de las pginas de manual de la seccin 1, y /usr/man/cat1 las pginas ya formateadas de la seccin 1. /usr/src contiene el cdigo fuente (programas por compilar) de varios programas de su sistema.

El ms importante es /usr/src/linux, el cual contiene el cdigo fuente del Ncleo de Linux. /var contiene directorios que a menudo cambian su tamao o tienden a crecer. Muchos de estos directorios solan residir en /usr, pero desde que estamos tratando de dejarlo relativamente inalterable, los directorios que cambian a menudo han sido llevados a /var. Algunos de estos directorios son: /var/log contiene varios ficheros de inters para el administrador del sistema, especficamente histricos del sistema, los cuales recogen errores o problemas con el sistema. Otros ficheros guardan las sesiones de presentacin en el sistema, as como los intentos fallidos. /var/spool contiene ficheros van a ser pasados a otro programa. Por ejemplo, si su mquina est conectada a una red, el correo de llegada ser almacenado en /var/spool/mail hasta que lo lea o lo borre. Artculos nuevos de las "news" tanto salientes como entrantes pueden encontrarse en /var/spool/news, etc. /var/mail En algunas distribuciones como la RedHat, es donde se guardaran los emails que nos lleguen y mandemos.

Tutorial del Shell Hablando con GNU/Linux a travs del shell


El shell o intrprete de comandos, como antes habamos dicho, es una interfase con nuestro sistema operativo. Gracias a l podremos dar las rdenes y mandatos necesarios para que nuestro sistema informtico realice las tareas que necesitamos. No debemos confundir al intrprete de comandos con el sistema operativo. Este es solo un programa que har de mediador entre nosotros y el kernel del sistema. El shell puede ser tanto grfico (Ej. La interfase X-Window), como de texto (Ej. El bash). En este captulo trataremos el tema de shell al nivel de solo texto y en especial veremos un intrprete de comando que por su utilidad y su gran aceptacin, es l mas usado tanto en Unix como en GNU/Linux. Como veremos luego, el intrprete de comandos no solo tiene la labor de interpretar nuestros mandatos, tambin es un potente lenguaje de programacin que nos ser de gran utilidad a la hora de elaborar guiones (script) para poder automatizar nuestras tareas. Los usuarios de DOS estarn acostumbrados a la utilizacin de los archivos de procesamiento por lotes (.bat) o ms bien denomina "batch". Existen varios tipos de intrpretes de comandos en UNIX de los cuales los ms famosos e

importantes son el "Bourne Shell" (sh) y el "C Shell" (csh). El intrprete de comandos Bourne, usa una sintaxis de comandos usada en los primeros sistemas UNIX, como el System III. El nombre de intrprete Bourne en la mayora de los Unix es /bin/sh (sh por shell). El C Shell posee una sintaxis muy parecida al lenguaje de programacin C y se lo encontrara como /bin/csh. El ms usado en el mundo GNU/Linux, como antes dijimos, es el bash por "Bourne Again Shell y se lo encontrar en /bin/bash. Bash posee toda la funcionalidad del sh con caractersticas avanzadas de C Shell, por esto cualquier guin escrito para un intrprete de comandos sh correr perfectamente en l. Si lo que se prefiere es el uso del intrprete de comandos basado en el lenguaje C, en GNU/Linux se podr encontrar el Tcsh en /bin/tcsh, que es una versin extendida del C Shell. Los gustos de los usuarios son los que deciden que intrprete de comandos se usar, por esto es posible configurar para cada usuario un intrprete de comandos distintos y no afectar el funcionamiento de programas como el ls, cat o cp. Solo se vera afectada la funcionalidad de algn guin que est preparado para ejecutar con un intrprete de comandos determinado, lo que veremos como se puede corregir al ver programacin de script de shell. Para ms informacin respecto a cada uno de estos intrpretes de comandos se recomienda leer las pginas de manual de cada uno de ellos, lo que dar informacin muy detallada de estos.

Caractersticas
Comodines
Hablaremos de algunas caracterstica de mucha utilidad y que harn mucho ms fcil el trabajo, tanto en sh como en bash. Una de las caractersticas que poseen los intrpretes de comandos es el uso de comodines para reemplazar partes de archivos. Con esto, podra referirse a un archivo usando caracteres especiales como el "*" o "?". Supongamos que se desea listar todos los archivos que contengan la letra "" en nuestro directorio. Para ello usaremos el comando ls
[shrek@pantano:~]$ ls **

Esto el intrprete de comandos lo vera como si quisiramos listas todos los archivos que empezaran con ninguno, uno o varios caracteres, tuviesen una letra "" y terminaran con ninguno, uno o varios caracteres.
[shrek@pantano:~]$ ls hola heart texto.form manti.form [shrek@pantano:~]$ ls h* hola heart

Como puede observarse tambin nos es til si se sabe como comienza el archivo pero no como termina. Lo que nuestro intrprete de comando esta haciendo es sustituir el "*" con cualquier combinacin posible que coincida con los archivos que tenemos en el directorio donde estamos buscando. Si se utiliza solamente el "*" con el comando ls, este interpretar que se esta buscando cualquier combinacin posible y listar todo como si se estuviese tratando de ejecutar el comando ls solo
[shrek@pantano:~]$ ls * hola heart texto.form manti.form

Este proceso es llamado "expansin de comodines" y lo efecta el intrprete de comandos. Esto es muy importante ya que los comandos como el ls nunca ven el "*" en su lista de parmetros, es el intrprete de comandos quien expande los comodines para incluir todos los nombres de archivos que se adapten. Es decir que luego que se da la orden
[shrek@pantano:~]$ ls h*

es expandida para obtener


[shrek@pantano:~]$ ls hola heart

Otro comodn es el "?". Este carcter comodn solo expande un nico carcter. Luego ls ? mostrar todos los nombres de archivos con un carcter de longitud. En cambio la orden ls hol? nos mostrar el archivo hola.
[shrek@pantano:~]$ ls ho?a hola [shrek@pantano:~]$ ls h???? heart

Estos caracteres comodn nos permiten referirnos a ms de un archivo al mismo tiempo y en conjunto con los comandos ya aprendidos, podrn ser de gran utilidad para realizar nuestras tareas de forma ms fcil.

Ejecucin de comandos uno detrs del otro


Supongamos que se necesita ejecutar un comando e inmediatamente despus otro. En la forma comn lo que haramos seria ejecutar el primer comando y una vez que este haya finalizado, ejecutaramos el segundo. Existe una segunda forma de hacerlo y es utilizando el carcter ";" inmediatamente despus del primer comando y a continuacin poner el segundo comando. Con esto lograramos que se ejecutara el primer comando y al terminar se ejecutar el segundo.
[shrek@pantano:~]$ ls hola heart texto.form manti.form [shrek@pantano:~]$ date mi jul 14 15:15:25 ART 2004

Utilizando el carcter ";" haremos


[shrek@pantano:~]$ ls;date hola heart texto.form manti.form mi jul 14 15:15:25 ART 2004

Comillas
Este punto viene bien aclararlo antes de empezar a ver caractersticas de alias y script para no tener complicaciones y confusiones. En GNU/Linux existen tres tipos de comillas: las dobles ("), comillas sencillas (') y comillas inversas o tics inversos (`). Empezaremos con las comillas inversas. Estas indican al shell que tendr que remplazar lo que esta encerrado entre ellas con su resultado. Supongamos que quisiramos ver solamente el da de hoy. Entonces teclearamos el comando
[shrek@pantano:~]$ date +%d 15

Ahora bien, cada vez que quisiramos ver el da de hoy tendramos que ingresar este comando nuevamente. Si le asignamos a una variable de entorno el resultado, solo tendramos que mostrar esta variable.
[shrek@pantano:~]$ DIAHOY=`date +%d` [shrek@pantano:~]$ echo $DIAHOY

15

Hay que tener en cuenta que para asignarle un valor a una variable tenemos que solo poner un nombre seguido del signo "=" y luego lo que queramos ponerle dentro. En cambio para mostrarla tendremos que anteponer el signo de dlar "$". Esto seria igual a poner
[shrek@pantano:~]$ DIAHOY=15

Lo nico que el shell hace es expandir el comando para que solo se guarde el resultado de ste. El otro tipo de comillas, la sencilla ('), le dice al sistema que no haga ninguna expansin.
[shrek@pantano:~]$ DIAHOY='date +%d' [shrek@pantano:~]$ echo $DIAHOY date +%d

Lo que se obtiene es exactamente lo que le asignamos a la variable ya que el shell no realizo ninguna expansin y lo nico que asigno fue la cadena 'date +%d' a la variable DIAHOY. El ultimo tipo de comillas son las dobles, este tiene casi la misma funcionalidad que las comillas simples pero con la salvedad de que lo que se incluya dentro de estas estar sujeto a expansin por parte del shell, siendo los caracteres con significado especial los tics inversos (`) el signo de dlar ($), la diagonal (\) y las mismas comillas dobles ("). Por ejemplo podramos ingresar el siguiente comando
[shrek@pantano:~]$ echo "`date`" Sat Apr 15 14:17:01 ART 2000

Alias
La utilizacin de alias nos da la capacidad de poder referenciar a un comando con otro nombre. La diferencia sustancial que podemos encontrar con los script de shell, es que los script para ejecutarse primero lanzaran a un subshell como un proceso hijo del shell que esta ejecutando en ese momento. En cambio un alias funciona en el proceso del shell siendo ejecutado en forma interna con la subsiguiente velocidad que esto otorga al no tener que crearse un nuevo proceso o de buscar en el disco rgido. Por supuesto que pueden usarse un conjunto de comandos para crear otro ms complejos. Con los scripts se puede realizar lo mismo y lo veremos ms adelante, pero para comandos simples y cortos no son necesarios. Los alias pertenecen a cada usuario, pudiendo ste configurarlos como ms le convenga. Supongamos que quisiramos ver solo la hora cada vez que se lo pidamos al sistema y no quisiramos poner el comando date con su modificador cada vez que lo queramos hacer. Lo que haremos ser crear un "alias" al comando "date" con el modificador correspondiente. Para ello contamos con el comando alias, que seguido de argumentos nos permitir crear uno, sin argumentos nos mostrar los alias que tenemos configurados.
[shrek@pantano:~]$ alias hora='date +%r' [shrek@pantano:~]$ hora 02:45:04 PM

Ahora bien, esto funcionar mientras estemos en el sistema, ya que estos datos son cargados en memoria y al salir del sistema se perdern. Para que cada vez que entremos al sistema los alias sigan funcionando deberemos agregarlos a un archivo, que aparece en forma oculta en el directorio de cada usuario, denominado .bashrc o en caso de que se requiera que el alias funcione para todos los usuarios en el /etc/bashrc. Este archivo es ledo por el /bin/bash cada vez que se entra al sistema. En l se tendr que poner la lnea alias en igual forma que lo haramos en la

interfaz de comandos.

Completado de lnea
Se puede hacer que el shell complete la lnea de comandos cuando se introduzca la primeras letras y se presione la tecla Tab. Esta propiedad tambin es til para expandir la ruta a un directorio determinado. Supongamos que dentro del directorio /home existe un subdirectorio llamado /shrek
[shrek@pantano:~]$ cd /home/shr

Si presionamos la tecla Tab se completara la lnea en /home/shrek. Si existiera ms de un directorio que comenzar con "shr", el shell anunciara con una seal audible, "bip", que existen ms de una coincidencia, y al presionar nuevamente la tecla Tab mostrara una lista de todos los directorios que poseen "shr" al comienzo. Si dicha lista excediera la catidad de lineas a motrar en la consola, nos preguntar primero si es que queremos ver la cantidad "X" de posibilidades. Como ejemplo de esto podramos citar el autocompletado de comandos. Si se oprime la tecla Tab sin haber introducido nada antes, el shell nos mostrara primero que existe un nmero "X" de posibilidades y al presionar nuevamente nos mostrara un listado de todos los comandos que son alcanzables.

PATH
Muchas veces ocurre que al tratar de introducir un comando nos damos cuenta de que no tiene efecto y nos da un error en l intrprete de comandos. Tal vez se haya ingresado mal, pero tal vez no se posea el directorio que contiene dicho comando en la "ruta de bsqueda" o PATH. EL PATH es una variable de entorno que contiene un grupo de directorios predefinidos en los cuales el shell buscar el comando o programa a ejecutar. Esto ahorra tiempo ya que el sistema no tendr que buscar en todos los directorios el programa a ejecutar. Por esto el sistema, en caso de que el directorio no figure en el PATH, no podr ejecutar el programa hasta que le demos la ruta exacta en donde se encuentre. Esta variable de entorno llamada PATH, es inicializada con un valor predeterminado en el archivo /etc/profile que es slo modificable por el "root" y funciona como una referencia para todos los usuarios. Adems cada usuario posee en un archivo oculto denominado .bash_profile o .profile, donde se le asigna adems del PATH inicial, cualquier otra modificacin exclusiva para l. Tambin puede modificarse totalmente esta variable. Volviendo a la especificacin de la ruta completa, anteriormente dijimos que los archivos se referenciaban de esta forma, pero los programas tambin podrn referenciarse de la misma forma. Si le damos la ruta completa podremos ejecutar el programa, si es que se cuenta con los permisos adecuados, independientemente del valor de la variable PATH. Como ejemplo, si quisiramos ejecutar el programa date, referencindolo con una ruta completa, la sintaxis es
[shrek@pantano:~]$ /bin/date mi jul 14 15:15:25 ART 2004

Seguramente el directorio /bin estar en nuestra ruta, esto sirve solo como un ejemplo. Existe otra forma de ejecutar el programa, y es haciendo referencia a su ruta relativa, que es la ruta con relacin al directorio donde estamos parados actualmente. Para esto debemos saber que la forma de referenciar al directorio actual es mediante "." y a su directorio padre con ".." (Mencionndose comnmente como "punto" y "punto - punto"). Dado que los directorios estn divididos por una "/", se podra hacer referencia a un archivo en el directorio padre con ../archivo. De esta forma, si se quisiera hacer referencia a un archivo que se encuentra dos niveles encima nuestro, su referencia relativa seria ../../archivo.

Algo que difiere en la forma de ejecutar los programas en GNU/Linux y DOS, es que este ltimo busca primero el archivo a ejecutar en el directorio actual y luego en la ruta de bsqueda. En cambio en GNU/Linux, solo se buscar en la ruta. No es problema ejecutar un archivo que esta en el directorio actual ya que este est incluido en la ruta, pero por seguridad, deber estar agregado como el ltimo directorio en la ruta, por lo menos en la cuenta "root" ya que si algn usuario creara un archivo malicioso que estuviera en el directorio donde esta parado el usuario root en ese momento, y lo nombrara "more", cuando el root ejecute este comando tendra resultados catastrficos. En cambio, si el directorio actual esta a lo ltimo de la ruta, primero se ejecutara el que se encontr en el /bin en lugar que el que est en el directorio actual. Igualmente para poder ejecutar directamente un programa que se encuentra en el directorio en que estamos parados actualmente podramos ingresar la ruta relativa a este, anteponiendo la referencia al directorio actual "./" al programa. Para ejecutar el programa hola que se encuentra en el directorio donde estamos parados actualmente
[shrek@pantano:~]$ ./hola Hola amigos !!!

No busquen el programa "hola" en su sistema, no lo he distribuido an ya que esta en desarrollo :^).

Variables de entorno
Independientemente de shell que estemos usando, se contar con lo que se denomina "variable de entorno" o "variable de ambiente". Estas variables son como las que encontraremos en cualquier lenguaje de programacin. Esto es tan esta forma que tambin podra ser accedidas desde los scripts que creemos. Para distinguir de los comando, la variables se ponen en letra mayscula. Cuando uno entra al sistema, existen ciertas de estas variables ya estn asignadas. Para ver estas variables y su contenidos se cuenta con el comando "set", y para ver el contenido de una de estas variables solo tenemos que usar el comando "echo" seguido del nombre de la variable con el signo "$" antepuesto. Ej. echo $LOGNAME, con lo obtendremos el nombre del usuario. Siguiendo con la ruta de bsqueda o PATH, esta es guardada en una variable llamada "$PATH", con lo que si tecleamos "echo $PATH" veremos algo como esto
[shrek@pantano:~]$ echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/X11/bin:/home/shrek:/:.

Ntese que el ultimo exponente de la ruta es el directorio actual que habamos indicado en el punto anterior sobre "ruta de bsqueda". Como se puede observar cada uno de los directorios esta separado por ":" y en ltimo lugar est la referencia al directorio actual que habamos hablado anteriormente. Otra variable muy importante es el "prompt" que no es ni ms ni menos que la secuencia de caracteres que aparecen justo antes de lo que ingresamos en la interfase de comandos. El entorno bash dispone de 4 prompt's, "PS1", "PS2", "PS3" y "PS4". Estas variables tienen un porqu. La denominacin "PS1" es el prompt principal y es el que vemos al iniciar el sistema. El "PS2" es el que aparece si al introducir algo que sobrepasa la lnea y se va a la siguiente. Su valor por defecto es ">". Se puede comprobar ingresando el carcter "\" en la lnea que estemos ingresando, con lo que pasaremos a la siguiente lnea. El "PS3" aparece cuando se utiliza el comando "select" de la interfase de comandos. El "PS4" aparece cuando se efecta el seguimiento de un comando. El prompt y la mayora de las variables de entorno pueden ser modificados con el comando "export", con el podremos modificar el contenido de las variables.
[shrek@pantano:~]$ export SECONDS=0 [shrek@pantano:~]$ echo $SECONDS 0

La variable $SECONDS cuenta la cantidad de segundos desde que entramos al sistema; con este mandato la seteamos a "0". Existen variables que no pueden ser cambiadas, como UID, EUID o PPID, (se muestra un detalle de las variables ms tiles en la tabla 2). Volviendo al prompt, este puede ser cambiado para que, por ejemplo, nos muestre el nombre de usuario seguido de una "@" y el nombre del sistema, con la ayuda de caracteres especiales.
[shrek@pantano:~]$ export PS1='[\u@\h:\w]\$ '

Se muestra en la tabla los caracteres especiales del prompt. Tabla 1. Caracteres especiales de la variable PROMPT Caracter \t \d \n \s \w \W \u \h \# \! \$ \\ \nnn \[ Que representa La Hora actual en formato HH:MM:SS. La fecha en formato "Da de la Semana Mes Fecha", como por ejemplo, "Sun Feb 4". Salto de lnea. Nombre del shell. El directorio actual. El nombre base del directorio actual. Por ejemplo, del directorio /home/shrek, el nombre base es shrek. Nombre de usuario. Nombre de mquina. Nmero de comando del comando actual. Posicin en el historial de comandos del comando actual. Si la EUID es 0 (root), el carcter '#'. En cualquier otro caso el carcter es '$'. La barra inclinada hacia atrs. El carcter correspondiente al numero octal nnn. Comienza una secuencia de caracteres no imprimibles, como los caracteres de escape o las secuencias de control. Estos caracteres pueden ser usados para definir colores.

\] Fin de la secuencia de caracteres no imprimibles. Tabla 2. Variables ms comunes Variable PPID PWD OLDPWD REPLY UID Definicin Nmero de identificacin del proceso padre de la interfaz de comandos. Directorio de trabajo actual, establecido por el comando cd. Anterior directorio de trabajo, establecido por el comando cd. Cuando se usa el comando read de bash sin argumentos,esta variable recoge el contenido de la lnea leda. Nmero identificativo (ID) del usuario, establecida en el arranque del shell.

Variable EUID BASH BASH_VERSION SHLVL RANDOM

Definicin ID eficaz de usuario, inicializada en el arranque del shell. Nombre completo, incluida la ruta, del archivo que se ejecut para lanzar el shell. Nmero de versin de Bash. Nivel del shell. Incrementa su valor en una unidad cada vez que se lanza una nueva interfaz de comandos. Cada vez que se invoca a esta variable se obtiene un nmero entero aleatorio. La secuencia de nmeros aleatorios proporcionadas por RAMDOM se puede inicializar simplemente asignndole un nuevo valor a esta variable. Mantiene el nmero de segundos que han transcurrido desde que se ejecut el shell. Si asignamos un valor a esta variable, la cuenta indicar los segundos transcurridos desde dicha asignacin, mas el valor asignado. Cuando se hace referencia a esta variable desde un script, indica la lnea dentro del script en la que se le esta haciendo referencia, considerando que la primera lnea se numera como 1. Si se invoca desde la propia interfaz de comandos, el valor que devuelve es el nmero de lnea que hace la orden ejecutada desde que se inici la interfaz de comandos. Contiene la posicin dentro del archivo de historia de comandos que ocupa el comando actual. Se trata de una cadena de texto describiendo el tipo de mquina en la que esta ejecutando el bash. Nombre de la mquina. Se trata de una cadena de texto describiendo el sistema operativo en el que s esta ejecutando el bash. La ruta de bsqueda de comandos. Se trata de una secuencia de directorios en los que localizar los programas, separados entre s por un signo de dos puntos (:). La interfaz de comandos recorrer esta lista en el orden dado buscando los comandos que queramos ejecutar. Directorio raz del usuario actual. Es el argumento usado por defecto cuando ejecutamos el comando cd sin especificar ninguno. Se trata de la ruta de bsqueda para el cd. Tiene una estructura similar a la variable PATH. Lo que indica es donde se deben buscar los directorios especificados como argumentos al comando. Como ejemplo habitual, podra contener :~:/usr. Cuando contiene el nombre de un archivo, bash comprueba en l la llegada de correo nuevo y avisa en caso que se produzca. Determina el intervalo de tiempo en segundos que bash

SECONDS

LINENO

HISTCMD HOSTTYPE HOSTNAME OSTYPE PATH

HOME

CDPATH

MAIL

MAILCHECK

Variable MAILPATH

Definicin tomar para revisar si hay correos nuevos. Al igual que PATH y CDPATH, esta variable contiene una lista, en este caso, de archivos que debern ser comprobados para la posible llegada de correo. Se puede indicar un mensaje especifico para la llegada de correo en diferentes buzones usando el carcter '?' como separador entre el archivo y el mensaje. En ese caso, la variable $_ obtendr el nombre del buzn. Un ejemplo: MAILPATH='/var/spool/mail/nlucas?"Tienes correo":~/mail/buzon?"Ha llegado algo al $_"' Valor del prompt principal. En la tabla 1 se muestran los valores con los que puede expandirse. Valor del prompt secundario. Este prompt es el que aparece cuando partimos una lnea en la interfaz de comandos para continuar introduciendo en la siguiente lnea de la pantalla. Valor del tercer prompt. Este prompt es usado solamente por el comando select. Valor del cuarto prompt y ltimo. Tan solo se usa cuando se esta realizando un seguimiento de los comandos mostrndose para indicar los pasos por los que se va ejecutando el comando. Para entrar en el modo de seguimiento, basta con ejecutar set -x. Entonces veremos como cada comando que ejecutemos se expande, mostrando las sustituciones que se hacen con los alias, las variables, etc. Contiene l nmero de comandos a guardar en el historial de comandos. Contiene el nombre del archivo en el que se almacena el historial de comandos. Por defecto se trata del archivo ~/.bash_history. Nmero mximo de lneas que puede contener el archivo de historial. Tengamos en cuenta que un comando puede ocupar varias lneas. Si esta definido, contiene el comando a ejecutar antes de presentar el prompt. Indica cuantas veces ha de recibir el carcter EOF (End Of File, o la pulsacin de la tecla Crtl-D) antes de salir de bash. Si el valor indicado no es numrico, se toma por defecto el 10. Si no esta seleccionado, una nica pulsacin basta. Si contiene un valor superior a cero, indica el nmero de segundos que se puede estar sin introducir un comando a el shell. Pasado este tiempo, la interfaz de comandos se cerrar. Ruta y nombre del editor usado por defecto para el comando

PS1 PS2

PS3 PS4

HISTSIZE HISTFILE

HISTFILESIZE

PROMPT_COMMAND IGNOREEOF

TMOUT

FCEDIT

Variable FIGNORE

Definicin fc. Por defecto se usa Vi . Lista de sufijos de archivos que se ignoraran al intentar completar un nombre de archivo desde bash. La lista estar formada por los sufijos ignorados, separados por un signo de dos puntos (:). Por ejemplo .0:.tmp En esta variable muchos programas buscaran la ruta y el nombre del editor a usar. Por defecto el editor usado es el Vi. Algunos de los programas que hacen uso de esta variable son crontab (con la opcin -e), edquota y otros muchos. Contiene el tipo de terminal. Esta variable es importante, pues algunos tipos de terminales no son compatibles con algunos programas.

EDITOR

TERM

Expresiones regulares y uso de metacaracteres


Empezaremos ampliando el uso de los comodines que antes mencionamos (* y ?). Es muy frecuente el uso de esta clase de caracteres para que el shell los expanda a fin de que coincidan con cualquier carcter, en el caso de "?", y con cualquier cadena de caracteres, en el caso de "*". La utilizacin de estos ya la definimos anteriormente ysolo nos queda mostrar su utilizacin en funcin de las expresiones regulares. La expresiones regulares son una serie de reglas que de cumplirse se expanden para poder ser utilizadas. Para esto se utiliza tambin otro tipo de metacaracteres "[]" donde los caracteres que se introduzcan dentro sern reemplazados para completar el comando. Supongamos que queremos editar con el programa vi los archivos carta.1, carta.2, carta.3, carta.4 y carta.5. Podramos utilizar tanto el carcter ? como el * para editarlo. Pero tambin puede ser utilizado la serie de nmeros del 1 al 5 encerrados dentro de los corchetes ([]).
[shrek@pantano:~]$ vi carta.*

Con esto editaramos todos los archivos desde carta.1 a carta.5.


[shrek@pantano:~]$ vi carta.[12345]

Con esta expresin, el intrprete de comandos expandir a cada uno de los caracteres encerrados entre los corchetes para que tome el lugar que corresponde en el nombre del archivo a editar. Pero que pasara si solo se quisiera editar el archivo carta.1, carta.2 y carta.5? No podramos utilizar ni el carcter "*" ni el "?" para hacerlo de un solo paso, pero si podremos usar la expresin regular de esta forma
[shrek@pantano:~]$ vi carta.[125]

Con esto, y dado que el intrprete de comandos solo interpreta de un carcter por vez, se editaran solamente los archivos carta.1, carta.2y carta.5. Los nmeros sern tomados dentro de los corchetes como caracteres individuales. La utilidad de las expresiones regulares es muy grande, y existen casos que es solamente con su utilizacin que puede realizarse un trabajo. Las expresiones regulares podrn ser usadas, junto con otros comandos, tambin para identificar grupos de caracteres en un texto y representarlos segn se pida. Por ejemplo, utilizando el comando grep,que casualmente significa Global Regular Expresin Print, se podr buscar dentro de un texto una cadena que se requiera y mostrarla por pantalla.

Supongamos que necesitamos mostrar todas las lneas que posean la palabra carta en el archivo documentos
[shrek@pantano:~]$ grep carta documentos

Lo que nos devolver las lneas que posean la palabra carta, aun aquellas que tengan entre sus letras un grupo de caracteres que sea igual al buscado, por ejemplo "cartas" o "pancarta". Ahora bien, que pasara si la palabra carta estuviese escrita con el primer carcter en maysculas. Entonces el comando grep no la mostrara, para esto podramos usar una expresin regular de esta forma
[shrek@pantano:~]$ grep [Cc]arta documentos

Si lo que necesitramos es buscar las lneas que comiencen con la palabra carta, tanto con la "C" en maysculas o minsculas usaramos el smbolo circunflejo (^) y el comando es
[shrek@pantano:~]$ grep ^[Cc]arta documentos

Con esto indicaramos que mostrar todas las lneas que tuviesen como primer palabra a "carta" tanto con la primera letra en mayscula o minscula. Si lo que quisiramos es mostrar todas las lneas de documentos que terminaran con la palabra "carta", tendramos que usar la funcin que cumple el smbolo "$" (ya habamos visto que era usado para referenciar a una variable de entorno) que en las expresines regulares, colocado al final, indica que esta tendr que ser buscada al final de la lnea. Primero le asignaremos la expresin a una variable para que el mandato sea ms legible y se vea la utilizacin de las dos funciones del smbolo $
[shrek@pantano:~]$ VAR=^[Cc]arta [shrek@pantano:~]$ grep $VAR$ documentos

Explicamos el uso de expresiones regulares solo con el comando grep, pero existe un sin nmero de oportunidades para usarlas con los comandos. Se ver ms adelante que pueden ser muy utilizadas en el editor Vi y nos harn muy fcil el trabajo con ste.

Interpretacin de comandos
Hemos podido apreciar la utilizacin de una serie de comandos junto con aplicaciones comunes de estos, pero es de necesidad poderentender el mtodo por el cual estos comandos son interpretados por el shell, para tener un poco ms de entendimientos a la hora de elaborar nuestros propios script y programas. Lo primero que se nos puede ocurrir averiguar, es el orden en que son interpretados los comandos. Partiremos de la base que se pueden ejecutar ms de un comando en una lnea. Esto se logra separndolos con un punto y coma (;).

Lo primero que el shell realiza es dividir estos comandos en lo que se denomina "tokens". Cada token es un comando, junto con sus argumentos, a ejecutar. Una vez que el shell puede saber cuantos tokens hay, determina su sintaxis. Si existe un error en este punto, ninguno del os tokens se ejecutar y el shell nos advertir de un posible error de sintaxis. Si la sintaxis es correcta, comienza la interpretacin de los comandos. A partir de aqu el shell trata de ver si alguno de los tokens es en realidad una funcin del propio shell. Si existe, esta ser expandida antes de ser ejecutada. Luego, se expanden los alias. Si alguno de los tokens es en realidad un alias, ya sea creado por el usuario o no, este se expandir antes de ejecutarse. Si el alias llama a otro alias, este tambin se expandir antes de ejecutarse. Una vez que se han expandido los alias y funciones el shell comenzar a evaluar las variables y las sustituir con su valor. Al terminar esto, se expandir cualquier comodn utilizado expandindolo al nombre de archivo o comando que concuerde de acuerdo a las reglas antedichas. Ahora, aunque est la mayor parte del comando evaluado, el shell tendr todava que ver si el primero de los tokens corresponde a un comando del shell o a un programa externo. Si esto ocurriera, se tendr que consultar la ruta de bsqueda. Luego evaluar si existe algn tipo de redireccin o canalizacin, tem que veremos ms en detalle en el prximo captulo, por el cual la entrada o salida de un comando este redirigida a otro lugar. Una vez que se ha podido analizar todo el comando o conjunto de comandos a su mnima expresin, el shell efectuar una copia de si mismo, a travs de la llamada a sistema fork() para poder ejecutar el script. Esta copia es un hijo del shell y que depende del shell que lo origin. Luego de esto, el shell hijo, usar una llamada a sistema denominada exec() para poder ejecutar el binario correspondiente. Aunque quien lo ejecuta es en realidad el shell hijo, hay que recordar que el padre todava se encuentra en memoria esperando la finalizacin del proceso hijo. Puede darse el caso que se desee que quien ejecute el comando o script sea el propio shell y no un shell hijo. Esto se logra con la utilizacin del comando "." punto. Al anteponer un punto al comando o script y dejando un espacio entre ellos, el shell entender que es el mismo quin debe interpretar este comando o script.
[shrek@pantano:~]$ . myscript

Este script ser interpretado sin que se genere un sub-shell hijo. Esta es una simplificacin de la ejecucin de un comando tipo, no quiere ser una explicacin total de lo que puede ocurrir dado la gran cantidad de variantes que intervienen, pero servir como base

de entendimiento de lo que el shell realiza una vez que se ha presionado la tecla Enter

Funciones
Uno de las mayores utilidades que posee una shell es el permitirnos crear funciones para realizar tareas repetitivas fcilmente. El funcionamiento de estas funciones es parecido al que posee cualquier lenguaje de programacin, en el cual se agrupan conjunto de comandos y se los llama por un nombre. El formato de las funciones es el siguiente
nombre_funcion(){ primero_a_realizar segundo_a_realizar }

Estas funciones pueden ser definidas en cualquier lugar, incluso en la misma lnea de comandos. Lo que habr que recordar que hechas de esta forma se borraran de la memoria una vez que se a salido del shell. Una forma de hacer que queden disponibles en forma permanente es incorporarla en el archivo de inicio del shell, el .bash_profile, en el cual se pondr la funcin. De esta forma podremos seguir utilizndola dado que ser cargada en memoria cada vez que ejecute el shell. Veamos un ejemplo de una funcin simple
[shrek@pantano:~]$ que_tal() > { > echo "Hola $1, como ests?" > } [shrek@pantano:~]$ que_tal shrek Hola shrek, como ests?

Aqu podemos ver dos factores en la creacin de funciones. Primero se nombra a la funcin, seguida de un par de parntesis "( )" con lo cual se indica al shell que lo que viene a continuacin deber ser tomado como una funcin. Inmediatamente despus de los parntesis se abrir una llave "{", con lo que se indica que comienzan los comandos de la funcin. Al terminar se cierra la llave "}". El otro punto es el reemplazo que efecta el shell de las variables. Aqu la variable se asigna directamente y es un nmero que vendr despus del signo "$". Este nmero indica el nmero del argumento de que tomara su valor y que es dado al invocar a la funcin. En este caso su valor pasa a ser "shrek". Podremos asignar ms variables de este tipo que sern tomadas de acuerdo a su valor numrico como el nmero del argumento.
[shrek@pantano:~]$ que_tal() > { > echo Hola $1 como estas? > echo Espero que ests $2 > } [shrek@pantano:~]$ que_tal shrek bien Hola shrek como estas? Espero que ests bien

Como en la programacin, donde los lmites entre las funciones y los procedimientos esta dada de acuerdo a la funcin que se esta cumpliendo, en el caso de las funciones del shell vara de acuerdo donde se encuentren guardadas. Una funcin est en memoria y puede ser cargada por el shell a partir de un archivo como el .bash_profile que es ledo por l al iniciarse. En caso de que se crear un archivo aparte con permisos de ejecucin, esta funcin pasara a ser un script pero se

necesitara que se llame a la funcin desde dentro del mismo script. Volveremos a esto al tratar el tema de script de shell pero daremos un ejemplo para que se entienda mejor. Supongamos que creamos un archivo llamado saludo.sh y le damos permisos de ejecucin con el comando chmod. El signo # representa un comentario
[shrek@pantano:~]$ cat > saludo.sh (1)que_tal() (2){ echo Hola $1 como estas? echo Espero que ests $2 } que_tal $1 $2 (3) [shrek@pantano:~]$ chmod +x saludo.sh (4)

(1) Con el comando cat y redirigiendo su salida se puede crear un archivo (2) A continuacin se ingresa la funcin (3) Ahora la funcin es llamada desde dentro del script. Al finalizar se presionan las teclas Ctrl-D (4) Le damos los permisos de ejecucin solo para nosotros Lo ejecutamos, dado que estamos parados en el mismo directorio en que lo creamos, anteponiendo un punto y la barra para que el shell sepa que nos estamos refiriendo al directorio actual. El resultado es
[shrek@pantano:~]$ ./saludo.sh shrek bien Hola shrek como estas? Espero que ests bien

Caractersticas adicionales
Depuracin de Script
Es posible depurar un script si se escribe set -x antes de ejecutarlo. De esta forma cada comando se mostrar en pantalla antes de ejecutarse con sus correspondientes argumentos. Se desactiva ingresando set +x. Si lo que se quiere es mandar la salida a un archivo se tendr que tener en cuenta que la salida del set -x no v hacia la salida estndar (stdout) sino hacia el error estndar stderr. Si tomamos que la entrada estndar (stdin) es el "0", la salida estndar (stdout) es el "1", entonces el tercer archivo (sterr) es el "2". Por ello si se quiere depurar el script myscript y mandar la salida a un archivo, se tendr que ingresar lo siguient luego del set -x.
[shrek@pantano:~]$ myscript 2>archivo_salida

Esto indica que se debe mandar el descriptor de archivo 2 (stderr) al archivo archivo_salida.

Creacin de directorios mltiples


Supongamos que queremos crear un subdirectorio en el directorio /home/shrek/cartas/trabajo/mensuales, pero ni el directorio /cartas ni /trabajo estn creados an. A travs del modificador -p del comando mkdir de esta forma parados sobre el directorio /home/shrek

[shrek@pantano /home/shrek]$ mkdir -p /cartas/trabajo/mensuales

De esta forma primero se crear el directorio /cartas, luego /trabajo y por ultimo /mensuales.

Como en UNIX tambin en GNU/Linux


En el captulo anterior vimos el funcionamiento de la interfase de comandos bash y comenzamos viendo el poder que posee Unix para el manejo de la informacin. En este captulo trataremos temas un poco ms especficos, concentrndonos en los aspectos ms importantes que podremos ver en nuestro sistema operativo. El hecho de que estas terminologas empleadas en GNU/Linux, antes se hayan aplicado a Unix, hacen que l saberlas nos abra las puertas a todo un sinfn de particularidades compartidas que hacen mucho ms verstil el trabajo con cualquier entorno que sea equivalente.

Plomera en GNU/Linux
Entrada y salida estndar
Hablamos antes de los 3 archivos que el sistema abra en memoria al iniciarse, estos eran el stdin, el stdout y stderr. El intrprete de comandos configurar estos archivos para que apunten al teclado, en el caso del stdin, y al monitor, en el caso del stdout y stderr. Existen numerosos comandos de Unix que utilizan la entrada estndar para tomar sus datos y la salida estndar para volcarlos a la pantalla. La configuracin esta dada de este modo ya que el shell espera que se ingresen los datos por el teclado y que su resultado o algn error se reflejen en la pantalla. Un ejemplo ser el caso del comando cat. Si usramos el comando cat, sin ningn argumento, todo lo que ingresemos se vera repetido en la pantalla.
[shrek@pantano:~]$ cat Hola (1) Hola (2) Que tal (3) Que tal (4)

(1)(3) Lnea escrita por nosotros. (2)(4) Lnea devuelta a la salida estndar. La entrada se termina presionando Ctrl-D que es el carcter de EOT (end of text) fin de texto.

Canalizacin y redireccin
Existe la posibilidad de desviar la salida o la entrada a un comando para poder realizar funciones complejas u obtener los datos que saldran por la pantalla directamente a otro archivo. Lo primero se denomina canalizacin y lo segundo redireccin. El smbolo que se utiliza para efectuar la canalizacin es el denominado pipe o smbolo de canalizacin (|). Este smbolo permite que se pase la salida de un comando o programa a la entrada de otro. Un ejemplo clsico de la utilizacin de este smbolo es cuando se requiere listar un directorio que ocupa ms de una pantalla. Se podr entonces utilizar el comando clsico para listar ls y enviar su salida a otro programa que lo muestre

de a una pgina de pantalla por vez, por ejemplo el more.


[shrek@pantano:~]$ ls -l | more

Esto servir para realizar lo antedicho ya que la salida del comando ls ser canalizada para que sea la entrada del comando more y este se encargara de mostrar los datos por pantalla. Lo que se esta utilizando es la canalizacin de la entrada estndar y la salida estndar. La salida estndar del comando ls es redireccionada hacia la entrada estndar del comando more que es cambiada para que tambin apunte a la canalizacin. Otros dos smbolos utilizados son el < y el >. Lo que hacen es redirigir tanto la salida como la entrada estndar de o hacia un archivo. Por ejemplo, supongamos que necesitamos guardar en un archivo llamado listado la salida del comando ls.
[shrek@pantano:~]$ ls > listado

Con esto le indicamos al comando ls que redireccione la salida estndar hacia un archivo de nombre listado. En caso de que el archivo exista, ser reemplazado con la nueva informacin. Para agregar contenido a un archivo, inmediatamente despus del contenido que posea, se tendr que poner el smbolo de redireccin dos veces
[shrek@pantano:~]$ ls >> listado

El uso de < es para redireccionar el contenido de un archivo hacia la entrada estndar de un comando o programa. Supongamos que necesitamos ordenar el contenido de un archivo en orden alfabtico, lo que lograremos con el comando sort. Podremos entonces redireccionar el contenido de un archivo a la entrada del comando sort para que ste lo ordene.
[shrek@pantano:~]$ sort < nombres

De esta manera saldra por pantalla la lista de nombres ordenadas alfabticamente. Tambin se podr redireccionar el error estndar para que no salga en pantalla. Si quisieramos realizar un listado de un directorio y, en caso de producirse un error, este fuese redirigido a un archivo, haremos lo siguiente
[shrek@pantano:~]$ ls /bin 2>/tmp/error.ls

Esta simple redireccin solo tendra efecto sobre el error estndar (stderr) o como tambin se denomina, descriptor de archivo n 2. Con esta redireccin los posibles errores seran redirigidos al archivo /tmp/error.ls. Si quisiramos dividir tanto la salida por pantalla como el error en dos archivos separados podemos hacerlo de esta manera
[shrek@pantano:~]$ ls /bin 1>/tmp/salida 2>/tmp/error.ls

La redireccin y la canalizacin pueden combinarse para hacer cosas un poco ms complejas o realizar tareas en un solo paso. Supongamos que necesitbamos obtener las 10 primeras lneas del listado que anteriormente guardamos del directorio /bin. Para esto podramos usar el comando head directamente para que obtenga las 10 primeras lneas del archivo listado, pero para entender el uso combinado de la canalizacin y la redireccin lo haremos de otra forma
[shrek@pantano:~]$ sort < listado | head

Como se puede ver, se a pasado por medio de una redireccin el contenido del archivo listado al comando sort y por medio de la canalizacin hemos pasado la salida estndar del comando sort al comando head.

Permisos de archivos, sus dueos y grupos


Para entender mejor el concepto de permisos se tendr que tener en cuenta que cada usuario puede pertenecer a uno o ms grupos. Cada usuario pertenece por lo menos a un grupo, que es establecido en el momento en que el usuario se crea. El administrador del sistema puede agregar al usuario a otros grupos. Estos grupos son necesarios para poder establecer una poltica de acceso ms organizada dado que en cualquier momento se podra dar a un archivo el acceso a personas de un grupo determinado. Lo nico que se tendra que hacer es agregar a los usuarios que se quieran dar permisos a ese grupo. Para cada objeto (archivo) que se encuentre en el sistema, GNU/Linux guarda informacin administrativa en la tabla de inodos, tema que abarcaremos en mayor detalle ms adelante. Entre los datos que se guardan en esta tabla se encuentran la fecha de creacin del archivo, modificacin del archivo y la fecha en que se cambio el inodo. Pero adems contiene los datos en los que se centra toda la seguridad en Unix. Estos son El dueo de archivo El grupo del archivo Los bits de modo o tambin llamados permisos de archivo En este tramo nos centraremos en primer medida en entender los permisos y en establecer la forma en que pueden trabajar con ellos.

Conceptos
Al ser Unix y GNU/Linux sistemas operativos multiusuario, para que se puedan proteger los archivos se estableci un mecanismo por el cual se otorgan permisos a un determinado usuario y/o grupo. Esto permite, por ejemplo, que si existe un archivo creado por un usuario en particular, este ser propiedad del usuario y tambin tendr el grupo del usuario. Se permite que los archivos sean compartidos entre usuarios y grupos de usuarios. Por ejemplo si shrek quisiera puede prohibir los accesos a un archivo determinado que le pertenezca a todos los usuarios que no pertenezcan a su grupo de usuarios. Los permisos estn divididos en tres tipos: lectura, escritura y ejecucin (rwx). Estos permisos pueden estar fijados para tres clases de usuario: el propietario del archivo, el grupo al que pertenece el archivo y para todo el resto de los usuarios. El permiso de lectura permite a un usuario leer el contenido del archivo o en el caso de que el archivo sea un directorio, la posibilidad de ver el contenido del mismo. El permiso de escritura permite al usuario modificar y escribir el archivo. En el caso de un directorio permite la crear nuevos archivos en l o borrar archivos existentes. El permiso de ejecucin permite al usuario ejecutar el archivo, si tiene algo para ejecutarse. Para los directorios permite al usuario cambiarse a l con el comando cd.

Como se interpretan los permisos


Para poder interpretar los permisos de archivos nada mejor que utilizar el comando ls -la. Con esto vemos un listado largo de un directorio.
[shrek@pantano:~]$ ls -la total 13 drwxr-sr-x 2 shrek user drwxrwsr-x 4 root staff -rw------1 shrek user -rw-r--r-1 shrek user -rw-r--r-1 shrek user

1024 1024 2541 164 55

May 2 09:04 . Apr 17 21:08 .. May 2 22:04 .bash_history Apr 23 14:57 .bash_profile Apr 23 14:44 .bashrc

-rwxrwxr-x -rwxrwxr-x -r--------rwxrw-r--rw-rw-r--rw-rw-r--rwxrwxr-x -rwxrwxr-x

1 1 1 1 1 1 1 1

shrek shrek shrek shrek shrek shrek shrek shrek

user user user user user user user user

0 40 64 337 40 0 175 56

Apr Apr Apr Apr Apr May Apr Apr

14 30 29 29 30 2 30 23

19:29 12:14 14:04 13:57 12:31 09:04 12:30 15:08

a.out hello.pl hola lista listador null prue.pl que.sh

Como se puede apreciar en este listado, tambin estn el directorio actual, representado por un punto . y el directorio padre representado por dos puntos .. . Ellos tambin poseen permisos y atributos que son mostrados. Para ir entendiendo un poco ms vamos a explicar que significan los primeros 10 dgitos. Tomemos como ejemplo el siguiente archivo
-rw-r--r-1 shrek user 337 Apr 29 13:57 lista

Para esclarecer un poco mas que significa cada uno de estos caracteres al inicio, utilizaremos unas tablas. Primero veamos aquellos caracteres que podran aparecer en el primer lugar, que en el ejemplo anterior es un solo guin. Esto nos indica que es un archivo comn. La tabla siguiente explica el significado del primer smbolo de acuerdo al tipo de archivo. Tabla 1. Tipos de archivo Contenido d c b l s p Significado Archivo comn Directorio Dispositivo de caracteres (tty o impresora) Dispositivo de Bloque (usualmente disco rgido o CD-ROM) Enlace simblico Socket Pipe

Los siguientes 9 smbolos se toman en grupos de tres y cada grupo pertenece a una clase de permisos, y se muestran a continuacin Tabla 2. Tipos de permisos

Permiso Significado r w x Permiso de lectura Permiso de escritura Permiso de ejecucin

Tabla 3. Grupos de permisos Columnas 2,3,4 5,6,7 8,9,10 Se aplica a owner group other Significado Establece los permisos para el dueo del archivo Establece los permisos para el grupo del archivo Establece los permisos para los usuarios que no entran en las categoras anteriores

De esta forma podremos interpretar el listado generado a partir de ls -la de mejor manera. Como ya dijimos, el primer smbolo nos esta indicando que el archivo es un archivo comn. El primer grupo de tres smbolos representa los permisos para el dueo del archivo (owner) que en este caso posee permisos de lectura, escritura y ejecucin. El segundo grupo de tres smbolos representa los permisos para el grupo al cual pertenece el archivo (group), que en este caso tienen permisos de lectura y escritura. El tercer grupo de tres smbolos representa los permisos para todo el resto de los usuarios (other) en este caso es solo de lectura. El nmero que sigue (1) representa el nmero de nombres que el archivo posee. Esto indica la cantidad de enlaces que existen a este archivo y lo veremos ms adelante cuando tratemos el tema de enlaces simblicos y duros. A continuacin esta el nombre del dueo del archivo y del grupo al cual pertenece el archivo. El "337" representa el tamao del archivo expresado en bytes. Lo siguiente es la fecha y hora de modificacin del archivo e inmediatamente despus esta el nombre del mismo.

Dependencias
Los permisos de los archivos tambin dependen del directorio donde estn guardados. En un ejemplo comn podramos dar el caso de un archivo que posea todos los permisos, tanto para el usuario, grupo y otros pero no se podr acceder a l si no se cuenta con permisos de lectura y ejecucin en el directorio que los contiene. Esto funciona en el caso que se quiera restringir el acceso a un directorio determinado y a todos los archivos que este contiene. En lugar de cambiar los permisos uno por uno solo tenemos que sacarle los permisos necesarios para que se prohba el acceso mismo al directorio y con esto no podrn ingresar para usarlos. Esto tambin esta dado para toda la ruta del archivo. Es decir que no solo el ltimo directorio, el cual lo contiene, tiene que tener los permisos necesarios, sino que todos los directorios que lo preceden tambin.

Cambiando permisos
En el el captulo de nombre Empezando con GNU/Linux vimos la utilizacin del comando chmod, pero en este entraremos a explicar en mejor forma su utilizacin. Adems trataremos el tema de otro forma de representar los permisos posibles, la representacin octal, que es extremadamente til a la hora de establecer nuevos permisos. El comando chmod se emplea utilizando smbolos como a,u,g,o que representan a todos (a "all"), al usuario (u), al grupo (g) y a todos los dems (o). Existen smbolos para agregar (+) quitar (-) o dejar invariantes los permisos (=). Adems tendrn que usarse los smbolos caractersticos para cada tipo de permiso. Para el permiso de lectura (r), para el permiso de escritura (w) y para el permiso de ejecucin (x). Solo el dueo del archivo puede cambiarlo con l; excepcin del root que tambin lo puede hacer. Para ejemplificar un cambio de permisos usaremos el archivo lista.
[shrek@pantano:~]$ ls -l lista total 1 -rwxrw-r-1 shrek user [shrek@pantano:~]$ chmod a-r lista [shrek@pantano:~]$ ls -l lista total 1 --wx-w---1 shrek user

337 Apr 29 13:57 lista

337 Apr 29 13:57 lista

De esta forma se le ha sacado a todos los grupos y usuarios los permisos de lectura. Algunos ejemplos ms
[shrek@pantano:~]$ chmod u+r lista [shrek@pantano:~]$ ls -l lista total 1 -rwx-w---1 shrek user [shrek@pantano:~]$ chmod o+w lista [shrek@pantano:~]$ ls -l lista total 1 -rwx-w-w-1 shrek user [shrek@pantano:~]$ chmod og-w lista [shrek@pantano:~]$ ls -l lista total 1 -rwx-----1 shrek user

337 Apr 29 13:57 lista

337 Apr 29 13:57 lista

337 Apr 29 13:57 lista

Ahora bien, esta es la forma simblica. Pero existe una forma un poco ms sistemtica que es la forma de representacin octal. El comando chmod permite establecer los permisos de un archivo por medio de un nmero octal. Comnmente nosotros usamos para contar una representacin decimal (0,1,2,3,4,5,6,7,8,9) pero en una representacin octal solo se usan 8 nmeros (0,1,2,3,4,5,6,7). Para establecer el permiso habr que sumar los dgitos octales de acuerdo a una tabla que se dar a continuacin. Dado que no se realiza acarreo, la suma ser trivial. Tabla 4. Permisos en notacin octal Nmero octal Permiso 4000 2000 1000 Establece el nmero de identificacin de usuario al ejecutarse SUID [a] Establece el nmero de identificacin de grupo al ejecutarse SGID[a] Establece el bit adhesivo[a]

Nmero octal Permiso 0400 0200 0100 0040 0020 0010 0004 0002 0001 Lectura por parte del dueo Escritura por parte del dueo Ejecucin por parte del dueo Lectura por parte del grupo Escritura por parte del grupo Ejecucin por parte del grupo Lectura por parte de los otros Escritura por parte de los otros Ejecucin por parte de los otros

Notas: a. Se ver al finalizar el tema Para dar un ejemplo de la suma que se tendr que realizar, tomemos un archivo con los permisos expresados en forma simblica y realicemos la conversin. Para representar -rwxr-x--0400 Lectura por parte del dueo + 0200 Escritura por parte del dueo + 0100 Ejecucin por parte del dueo + 0040 Lectura por parte del grupo + 0010 Ejecucin por parte del grupo ----------------------------------------0750 Resultado De esta forma si lo que quisiramos es cambiar los permisos de un archivo, solo se tendra que efectuar la suma necesaria y establecerlo con el comando chmod. Si quisiramos cambiar los permisos para que el dueo tenga permisos de lectura y escritura y que el grupo y otros solo tengan permisos de lectura, la sintaxis es
[shrek@pantano:~]$ chmod 0644 lista [shrek@pantano:~]$ ls -l lista total 1 -rw-r--r-1 shrek user

337 Apr 29 13:57 lista

Con la prctica se sabrn cuales son las sumas mas utilizadas y podrn ver que es mucho ms sencillo el establecer de esta forma los permisos de archivos.

Cambiando grupos y usuarios


Lo que nos queda por ver es el caso en que se quisiera cambiar el usuario o el grupo del archivo.

Para esto se usa el comando chown y su sintaxis es similar a la de chmod pero con la variante que se dan los nombres del usuario y del grupo. Si quisiramos cambiar el nombre de usuario del archivo lista tendremos
[root@pantano:/home/shrek]# ls -l lista total 1 -rw-r--r-1 shrek user 337 Apr 29 13:57 lista [root@pantano:/home/shrek]# chown fiona lista [root@pantano:/home/shrek]# ls -l lista total 1 -rw-r--r-1 fiona user 337 Apr 29 13:57 lista

Si se quisiera cambiar tambin el nombre del grupo, se tendra que poner un punto entre el nombre de usuario y el grupo
[root@pantano]# ls -l lista total 1 -rw-r--r-1 shrek user 337 Apr 29 13:57 lista [root@pantano]# chown fiona.ventas lista [root@pantano]# ls -l lista total 1 -rw-r--r-1 fiona ventas 337 Apr 29 13:57 lista

Por supuesto que tanto el usuario como el grupo al que se hacen referencia tendrn que existir en el sistema, sino se producir un error. En el caso que solo se quiera cambiar el grupo y no el usuario, se tendr que poner un punto delante del nombre del grupo, omitiendo poner el nombre del algn usuario. O si se quiere, se podr poner el nombre de usuario que estaba anteriormente.
[root@pantano]# ls -l lista total 1 -rw-r--r-1 shrek user [root@pantano]# chown .ventas lista [root@pantano]# ls -l lista total 1 -rw-r--r-1 shrek ventas

337 Apr 29 13:57 lista

337 Apr 29 13:57 lista

Puntos adicionales
Explicaremos algunos puntos sobre permisos que son de gran utilidad para la seguridad de nuestro sistema.

umask
Esta es la abreviatura de user file-creation mode mask o mscara del modo de creacin de archivos de usuario y es un nmero octal de cuatro dgitos que se utilizan para fijar los permisos de los archivos recin creados. Esto puede ocasionar confusin pero en realidad es una utilidad que permite el uso del sistema por mltiples usuarios sin que peligre la privacidad. En la mayora de los Unix los archivos que son creados por el usuario, poseen permisos 0666 que dan permiso de lectura y escritura a cualquier usuario. En relacin con los programas, estos se crean con 0777 donde cualquier usuario puede leer, escribir y ejecutar el programa. Normalmente el administrador del sistema aplica una mscara al usuario en el archivo .bash_profile y esta es usada para la creacin de archivos haciendo una operacin simple "AND" bit por bit con el complemento del valor umask bit por bit. La funcin umask esta integrada al intrprete de comandos. Para ejemplificar el proceso tomemos un archivo creado por el usuario. 0666 Modo predeterminado de creacin de archivos

- 0022 Umask ------------------------------------------------------0644 Modo resultante El modo resultante es que el dueo tiene permisos de lectura y escritura y los dems y el grupo solo de lectura. 0666 Modo predeterminado de creacin de archivos - 0077 Umask ------------------------------------------------------0600 Modo resultante El modo resultante es que el dueo tiene permisos de lectura y escritura y los dems y el grupo no tienen ningn permiso. Una forma de darse cuenta de la forma en que funciona el umask es tener en cuenta que el valor 2 inhabilita el permiso de escritura mientras que el valor 7 inhabilita los permisos de lectura escritura y ejecucin. A continuacin daremos una tabla con los valores comnmente usados para el umask. Tabla 5. Valores usuales de la variable umask Umask Accesos del usuario 0000 0002 0007 0022 0027 0077 Todos Todos Todos Todos Todos Todos Accesos del grupo Todos Todos Todos Lectura y ejecucin Lectura y ejecucin Ninguno Accesos de los otros Todos Lectura y ejecucin Ninguno Lectura y ejecucin Ninguno Ninguno

SUID y SGID
Existen ocasiones que los usuarios necesitan ejecutar algn programa que requiere de privilegios. Un ejemplo de esto es el uso del programa passwd para cambiar la contrasea. Sera un error darle a los usuarios los privilegios necesarios para que puedan ejecutar esta clase de programas ya que el usuario podra cambiarse de grupo o crear una cuenta con privilegios de root. Para que esto no suceda, se implemento en Unix, un sistema por el cual un programa que cuente con SUID o SGID puede ser ejecutado con los privilegios del dueo y/o grupo del programa. Para que quede ms claro se tiene que saber que cada usuario esta identificado por el sistema con un nmero de identificacin tanto para l, como para el grupo. Este nmero se denomina UID (user ID) para el caso de los usuarios y GID para el caso de los grupos. Por ejemplo, un usuario podra tener un UID 100 y un GID 500. En el caso del root, este tiene UID 0 y GID 0. Ms adelante s ver esto en mayor detalle. Lo que se efecta con el sistema SUID es una adquisicin temporal de un UID o GID distinto al propio cuando se est ejecutando el programa. Cuando un programa cambia de UID se denomina SUID (set-UID: se establece UID) y cuando cambia de GID se denomina SGID (set-GID: se establece GID) Un programa puede ser SUID y SGID al mismo tiempo. Para darse cuenta si un programa es SUID o SGID basta con hacer un listado largo con el comando ls -l y se ver que

donde tendra que estar una x, que asigna permisos de ejecucin, va a estar una letra s.
[shrek@pantano:~]$ ls -l /usr/bin/passwd -rwsr-sr-1 root bin 36068 2003-06-23 20:40 /usr/bin/passwd* /usr/bin/passwd

Bit adhesivo
En los antiguos sistemas Unix, la memoria era algo esencial y escasa dado su costo. Para poder aprovechar ms esta, se empleo una tecnologa que mantena parte de programas esenciales en el rea swap de memoria para que pudieran ser usados ms rpidamente dado que si se tendran que ir a buscar al disco se adhesivo o sticky bit y estos archivos as marcados eran los que vala la pena mantener ya que esas partes del programa que se guardaban en memoria tambin podan ser usadas por otros.

Enlaces de archivos
En ocasiones es necesario dar a un mismo archivo distintos nombres o, para mantener la integridad de los datos, se hace necesario que un mismo archivo que va a ser modificado por varias personas pueda estar representado por un nombre distinto con distintos permisos cada uno. Dada la representacin que GNU/Linux le da a los archivos es posible que dos o ms nombres apunten al mismo contenido en el disco rgido. Recordemos que los archivos se representan por el nmero de inodo en el disco y es el nico identificador que el sistema tiene del archivo. Si se quiere ver el inodo que representa un archivo basta solo con agregar el modificador -i al comando ls. Existen dos tipos de enlaces: los duros y los simblicos.

Enlaces duros o hard links


Para crear enlaces entre los archivos se utiliza el comando ln. Para dar un ejemplo, si se quisiera hacer un enlace del archivo hola el comando es
[shrek@pantano:~]$ ln hola saludo

Si ahora hacemos un listado mostrando los inodos


[shrek@pantano:~]$ ls -il total 2 14438 -r-------- 2 shrek 14438 -r-------- 2 shrek

user user

64 Apr 29 14:04 hola 64 Apr 29 14:04 saludo

Como se ve el nmero de nombres que los archivos tienen ahora es 2 dado que hemos creado otro nombre que es un enlace al contenido que tena el archivo hola en el disco. Esto puede verse dado que el primer nmero del listado, 14438, es el nmero del inodo donde comienza el contenido del archivo hola. Aunque parezca que el contenido se a duplicado, esto no es as. Ambos archivos apuntan al mismo sitio. Por esto, un archivo no se borra hasta que se haya borrado el ltimo de sus

nombres. De esta forma tambin podemos decir que un directorio no es ms que un archivo que contiene informacin sobre la translacin enlace a inodo. Tambin que cada directorio tiene dos enlaces duros en l: . (un enlace apuntando a si mismo) y .. (un enlace apuntando a su directorio padre). En el directorio raz / el enlace .. siempre apunta a /.

Enlaces simblicos o symbolic links


A diferencia con los enlaces duros, estos enlaces solo dan otro nombre a un archivo pero no hacen un enlace al nivel de inodo. Se puede hacer una comparacin con los "Accesos directos" de Windows95. La orden ln -s genera un enlace simblico.
[shrek@pantano:~]$ [shrek@pantano:~]$ total 2 14438 -r-------14446 lrwxrwxrwx [shrek@pantano:~]$ ln -s hola saludos ls -il 1 shrek 1 shrek user user 64 Apr 29 14:04 hola 4 May 7 08:33 saludos -> hola

Como se ve, el enlace nos muestra a que archivo esta apuntando. Existen diferencias entre este tipo de enlaces y los duros como que ya no estn apuntando al mismo inodo. Adems los bit de permisos aparecen todos encendidos dado que no son usados. Los permisos que se utilizan son los del archivo al que se esta apuntando. Si nos fijamos bien, en la primera posicin de los permisos veremos una letra l. Esto nos indica que es un enlace simblico. Otra particularidad es que se pueden crear enlaces simblicos de archivos que no existen; pero lo mismo no es cierto para los enlaces duros. Con los enlaces simblicos se puede saber a que archivo estn apuntando, no as con los duros. Los enlaces simblicos son ampliamente usados para las libreras compartidas.

Tareas y procesos
En este punto tendremos que empezar a determinar que es un proceso y una tarea. Anteriormente dijimos que un programa se transformaba en proceso en el momento en que este se ejecutaba y estaba en memoria. Adems del nombre que el proceso recibe, que es el nombre del programa que esta corriendo, recibe tambin un nmero identificativo llamado PID (process ID, o ID de proceso). Si ejecutamos el comando ps veremos los procesos que estn ejecutando en este momento con nuestro UID, es decir que estamos corriendo nosotros mismos
[shrek@pantano:~]$ ps PID TTY STAT TIME COMMAND 172 p0 S 0:00 -bash 184 p0 R 0:00 ps [shrek@pantano:~]$

Se puede ver que estn corriendo dos procesos, el bash (que es el intrprete de comandos) y el proceso ps que es el que estamos usando en este momento en una terminal determinada. Como se puede ver el primer nmero es el PID que el sistema le asigna al proceso y en la columna COMMAND se puede ver el nombre del proceso. De ninguna manera estos son todos los procesos que se estn ejecutando en el sistema. Si se quisieran ver todos los procesos tendran que poner ps -ax con lo que obtendran un listado con todos los procesos que se estn ejecutando. Como se puede apreciar, estn ambos procesos ejecutndose al mismo tiempo, pero solo uno de ellos esta activo, el comando ps. Nos podemos dar cuenta de esto ya que en la columna STAT aparece en la lnea del bash la letra S de SLEEP, ya que en ese momento el intrprete de comandos esta esperando a que el proceso ps termine. Y es aqu donde esta la diferencia entre proceso y tarea.

Aunque ambos son procesos, una tarea se refiere al proceso que esta corriendo. Este calificativo solo lo da el shell del sistema cuando se utilizan los controles de tareas dado que no todos los intrpretes de comandos soportan este tipo de control.

Primer y segundo plano


Cualquier proceso puede estar en primer o segundo plano. Lo nico a tener en cuenta es que solo un proceso estar en primer plano al mismo tiempo y es con el que estemos trabajando e interactuando en ese momento. Un proceso que este en segundo plano no recibir ninguna seal de parte nuestra, es decir que no nos podemos comunicar con l a travs, por ejemplo, del teclado. La utilidad de enviar un programa a segundo plano esta dada por el hecho de que existen tareas que no requieren de nuestro control para que se ejecuten. Por ejemplo, bajar algn archivo de Internet, compilar el kernel u otro programa. Estas son tareas que pueden ser lanzadas tranquilamente en segundo plano. Para lanzar un proceso en segundo plano, tendremos que poner a continuacin del comando el smbolo &. Para ejemplificar esto usaremos el comando find y dejaremos que busque todos los archivos que existen en el disco
[shrek@pantano:~]$ find / -name "*"

Esto nos mostrara una lista bastante larga de archivos por pantalla y nos quedaramos sin el control del intrprete de comandos mientras esta ejecutndose. Podramos usar el dispositivo null, que si recuerdan era como un agujero negro donde todo lo que se enviaba a l desapareca, para redirigir la salida y que no saliera por pantalla
[shrek@pantano~]$ find / -name "*" > /dev/null

Igualmente as no contaramos con la atencin de nuestro interprete de comandos hasta que terminara el trabajo el comando find. La forma de tener la atencin del shell inmediatamente despus de lanzar el proceso find es envindolo en segundo plano
[shrek@pantano:~]$ find / -name "*" > /dev/null & [1] 192 [shrek@pantano:~]$

Como se aprecia, regres de inmediato al shell, pero antes envi un mensaje a la terminal. El [1] representa a un nmero de trabajo que el shell asigna a cada uno de los procesos que pasa a segundo plano. Inmediatamente despus vemos el nmero de PID del proceso. Podremos identificar al proceso por cualquiera de los dos nmeros mientras se encuentre en segundo plano. Para ver cuantos trabajos estn ejecutndose en este momento podemos usar el comando jobs.
[shrek@pantano:~]$ jobs [1]+ Running [shrek@pantano:~]$ find / -name "*" >/dev/null &

Podremos eliminar un proceso que se esta ejecutando con la ayuda del comando kill seguido bien sea del nmero de trabajo precedido de un signo % o del nmero de PID. De esta forma estamos matando al proceso pero puede darse el caso de que este tarde en desaparecer dado que tiene que limpiar el entorno, por esto muchas veces parecer que no nos a hecho caso. En realidad el proceso esta haciendo una limpieza del sistema evitando as el mal funcionamiento del mismo y/o una inconsistencia en los datos con que trabajaba. Como ejemplo usaremos otro comando muy tpico, el comando yes. Este comando enviar a la salida estndar continuamente la letra y. Sirve este comando para que en caso de que se requiera contestar afirmativamente a las peticiones de un programa pudiremos mediante una redireccin contestarle con un y a cada pregunta. Si lo ejecutramos sin redirigir la salida a /dev/null, nos llenara la pantalla con una columna infinita de y. Por esto lo enviaremos a segundo plano redirigiendo la salida y luego lo mataremos con el

comando kill.
[shrek@pantano:~]$ yes > /dev/null & [1] 201 [shrek@pantano:~]$ kill %1 [shrek@pantano:~]$ jobs [1]+ Terminated yes > /dev/null & [shrek@pantano:~]$

Como podrn ver, en el momento en que se mando el comando kill, no hubo ningn mensaje. Solo despus de ejecutar el comando jobs se nos informo que el trabajo nmero 1 haba finalizado (TERMINATED). Podemos tambin hacer lo mismo empleando el nmero de PID con lo que obtendremos idnticos resultados.
[shrek@pantano:~]$ kill 201

Como parar y relanzar tareas


Los procesos pueden ser suspendidos temporalmente hasta que nosotros dispongamos, para as relanzarlos y que continen ejecutando donde se haban quedado. Esto es de gran utilidad. Supongamos que se esta trabajando con el editor de texto Vi y no queremos trabajar en otra consola, solo tenemos que enviar al programa Vi a dormir un rato y tendremos el intrprete de comandos a nuestra disposicin. En la mayora de los programas, se enva una seal de terminacin utilizando las teclas Ctrl-C, para poder enviar un trabajo a dormir utilizaremos otra combinacin de teclas Ctrl-Z. Hay que tener en cuenta que no es lo mismo un trabajo en segundo plano que uno que es enviado a dormir. Un trabajo en segundo plano sigue ejecutndose, en cambio uno que se enva a dormir queda esperando en el lugar donde estaba hasta que sea despertado. Para ejemplificar esto, enviaremos al comando yes a segundo plano y luego lo pondremos a dormir.
[shrek@pantano:~]$ yes >/dev/null & [shrek@pantano:~]$ yes >/dev/null

Ahora presionamos Ctrl-Z


[shrek@pantano:~]$ yes >/dev/null & [shrek@pantano:~]$ yes >/dev/null [2]+ Stopped yes >/dev/null [shrek@pantano:~]$ jobs [1]- Running yes >/dev/null & [2]+ Stopped yes >/dev/null

Como pueden ver, el proceso que se envi a segundo plano todava se esta ejecutando (Running), en cambio la que se mando dormir estaparada esperando que la relancemos (Stopped). Para ponerlo en primerplano o despertarlo a cualquiera de los dos podemos usar el signo "%"seguido del nmero del proceso o bien el comando fg.
[shrek@pantano:~]$ %1 yes >/dev/null &

Ahora presionamos Ctrl-Z


[shrek@pantano:~]$ fg %1 yes >/dev/null

Podremos enviar tambin un comando que esta durmiendo a que ejecute en segundo plano a travs del comando bg

[shrek@pantano:~]$ jobs [1]- Stopped [shrek@pantano:~]$ bg %1 [1]+ yes >/dev/null & [shrek@pantano:~]$ jobs [1]+ Running

yes >/dev/null

yes >/dev/null &

Cabe decir que tanto fg como bg son comandos internos del intrprete de comando. Esto es as porque es el mismo intrprete quien hace el control de tareas. Puede darse el caso de que existan intrpretes de comandos que no tengan soporte para control de tareas.

Programas de seguimiento (ps y top)


Los sistemas GNU/Linux cuentan varios programas para efectuar el seguimiento de los procesos que se estn ejecutando en el sistema. Entre los mas usados en la interfase de texto estn los programas ps y top.

ps
Sin ninguna opcin dar la lista de procesos que estn corriendo desde la terminal donde se ejecuto el ps
[shrek@pantano:~]$ ps PID TTY TIME CMD 9648 tty2 00:00:02 bash 9659 tty2 00:00:00 ps [shrek@pantano:~]$

Las columnas que nos quedan por explicar son TTY y TIME. TTY identifica la consola donde se esta ejecutando el proceso. En este caso es una terminal local. La columna TIME nos indica la cantidad de tiempo total que el proceso se ha estado ejecutando. Como se puede ver el tiempo es de 2 segundos. Aunque este horas el sistema encendido, el bash pasa su mayor parte del tiempo esperando que se le envie algn comando para ejecutar, mientras tanto esta esperando dormido. Puede verse en la columna STAT en que estado se encuentra el programa. Por ejemplo, que vemos que el bash en el momento de ejecutarse el comando ps esta dormido (S) y que el proceso ps esta activo (R). Si aadimos la opcin l tendremos un listado largo del comando ps. En algunas versiones se usa la opcin -l
[shrek@pantano:~]$ ps l F UID PID PPID PRI 4 100 9648 1 9 4 100 9660 9648 17 NI 0 0 VSZ RSS WCHAN STAT TTY 4368 1400 11b1d0 S tty2 2676 732 - R tty2 TIME COMMAND 0:01 -bash 0:00 ps l

Dentro de esta informacin esta la columna del UID que identifica el dueo del proceso. El PID del proceso y tambin el PPID que es el PID del proceso padre. Podemos apreciar que el padre del comando ps l es el -bash. NI viene de nice y es un nivel que se otorga a un proceso para requerir cierto privilegio. En este caso tiene uno muy bajo por ende un proceso que tenga un valor mayor tendr ms tiempo de procesador para trabajar. SIZE es el tamao que tiene el proceso. RSS es la tamao del proceso que se encuentra residente en la memoria. WCHAN es el nombre de la funcin del kernel donde el proceso esta durmiendo. Esta expresado en forma hexadecimal. Otra forma en la que podemos ver el padre de cada proceso es a travs del modificador f.
[shrek@pantano:~]$ ps f PID TTY STAT TIME COMMAND 9648 tty2 S 0:02 -bash

9660 tty2 R [shrek@pantano~]$

0:00

\_ps f

Aqu se puede ver que el comando ps f depende del -bash.

top
Ahora bien, el comando ps nos muestra una radiografa de los procesos en el momento, pero no nos muestra los cambios que se van teniendo. Para esto contamos con el comando top. El mismo muestra en tiempo real la situacin de los procesos que se estn ejecutando en el sistema, ordenados por defecto segn el porcentaje la CPU que estn usando. Al ejecutarlo se podr ver otra informacin adicional, como la cantidad de usuarios que estn en el sistema, cuantos procesos estn corriendo y de estos cuantos estas activos, cuantos durmiendo, cuantos en proceso de terminar (ZOMBIE) y cuantos finalizados. Adems se podr ver la cantidad e memoria fsica total, la cantidad usada y la cantidad libre; as como tambin se podr obtener la misma informacin de la memoria swap. Lo ms importante es que esta informacin de ira actualizando automticamente cada tanto tiempo, por defecto 5 segundos, y que podremos ir alterando lo que va mostrando. Por ejemplo podemos hacer que ordene los procesos de acuerdo a la cantidad de memoria que esta usando con solo presionar la tecla M. U ordenarlos de acuerdo al tiempo que llevan corriendo. Otra utilidad es que podramos matar algn proceso con solo presionar la tecla k y luego darle el nmero de PID. El listado que nos mostrar contendr el nmero de PID, el usuario que lo est ejecutando, la prioridad del proceso (PRI), el valor nice (NI), el tamao del proceso (SIZE), el tamao total del proceso junto con los datos que maneja (RSS), el tamao usado por el proceso en la memoria (SHARE), el estado del proceso(STAT), el tamao de las libreras del proceso (LIB), el porcentaje de CPU ( %CPU) y de memoria (%MEM) as como tambin el tiempo de ejecucin (TIME) y el nombre del proceso (COMMAND).

Escritura de scripts de shell


Hemos llegado a un punto donde podemos realizar tareas ms complejas a partir de los comandos aprendidos y es aqu donde radica el poder del intrprete de comandos bash. Como veremos a continuacin, el intrprete de comandos es un poderoso lenguaje para realizar script que permitan unir varios comandos para realizar una tarea un poco ms compleja (y es el este el poder principal de todo Unix). El nico requisito es tener nociones bsicas de programacin para poder sacar todo el provecho posible de esta caracterstica del intrprete de comandos. En todo caso, con un poco de prctica y un buen sentido de la lgica se podrn hacer tambin script poderosos para desarrollar las tareas que requerimos. Deberemos saber tambin que con la ayuda solamente de la conjuncin de comandos no podremos hacer script verdaderamente interesantes. Por esto se incorporan las construcciones de shell. Estas son las construcciones while, for-in, if-then-fi y case-esac. Existen muchas ms pero estas sern las ms tiles para nosotros en estos momentos. Para mayor informacin sobre otro tipo de construcciones seria mejor revisar las pginas de manual del intrprete de comandos bash (man bash). Empezaremos viendo un uso sencillo de la construccin for-in que tiene la siguiente sintaxis
for var in word1 word2 do commandos

done

Para poder usar esto, podramos realizar una lista de directorios que querramos nosotros de una sola vez
for dir in /bin /etc /lib do ls -R $dir done

Esto har un listado recursivo 3 veces. La primera vez que pase por el ciclo, la variable $dir tomar el valor /bin, la segunda ser /etc y la tercera /lib. Podramos prescindir del par do-done con el uso de llaves ({})
for dir in /bin /etc /lib { ls -R $dir }

Ya hemos visto anteriormente la idea de argumentos en la utilizacin de comandos y programas; pero deberemos ver como se realiza la codificacin de un script para tomar estos argumentos. Como antes dijimos, los argumentos eran pasados a los programas para que estos lo utilizaran. En la construccin de script veremos lo que se llaman variables posicionales cuyo valor corresponde a la posicin del argumento luego del nombre del script. Supongamos que tenemos un script que toma 3 argumentos. El primero ser el nombre de un directorio, el segundo el nombre de un archivo y el tercero es una palabra a buscar. Este script buscar en todos los archivos del directorio, cuyo nombre incluya el nombre de archivo que le pasamos como argumento, la palabra que tambin le estamos pasando. El script se llamara miscript y estar compuesto del siguiente cdigo
ls $1 | grep $2 | while read ARCHIVO do grep $3 ${1}/${ARCHIVO} done

La sintaxis ser miscript [directorio] [nombre_archivo] [palabra] Aqu tenemos varias cosas para ver. Primero que nada, el uso de las variables posicionales. Como se podr apreciar el nmero de la variable, que esta precedido por un signo $, indica la posicin del argumento cuando el script es llamado. Solamente se podrn usar 9 variables de este tipo sin tener que emplear un pequeo truco de corrimiento que veremos luego, dado que el 0 representa al nombre del script mismo. Es decir que en este caso la variable posicional $0 valdr "miscript". Como se puede ver se han utilizado canalizaciones para poner ms de un comando junto. Al final de la construccin se esta usando una construccin while. Esta se usa para repetir un ciclo mientras una expresin sea cierta.
while ($VARIABLE=valor) do commandos done

En este caso esta siendo usada al final de una canalizacin con la instruccin read ARCHIVO. Es decir, mientras pueda leer el contenido de la variable $ARCHIVO, continuar. Esta variable $ARCHIVO contiene el resultado de lo que arrojo la canalizacin del listado con la salvedad de que tenia que contener la palabra que le enviamos como argumento, es as que solo se imprimirn las lneas en las que coincida la palabra a buscar de los archivos que cumplan con los requisitos.

Otra cosa a tener en cuenta es una nueva construccin en este script, ${1}/${ARCHIVO}. Al encerrar un nombre de variable dentro de llaves podemos combinarlas. En este caso forman el nombre del directorio (${1}) y aadimos una / como separador del directorio, y seguido e nombre del archivo donde se aplicara el comando grep con la palabra a buscar $3. Podramos hacer que este script sea un poco ms documentado. Para esto podramos asignar las variables posicionales a otras variables para que se pueda entender mejor su uso.
DIRECTORIO=$1 ARCHIVO_BUS=$2 PALABRA=$3 ls $DIRECTORIO | grep $ARCHIVO_BUS | while read ARCHIVO do grep $PALABRA ${DIRECTRIO}/${ARCHIVO} done

El nmero de las variables posicionales que pueden usarse en un script, como antes dijimos, se encuentra restringido a 10. Qu pasara si tenemos ms de 9 argumentos? Es aqu donde tenemos que usar la instruccin shift. Esta instruccin mueve los argumentos hacia abajo en la lista de parmetros posicionales. De esta manera podramos tener una construccin con esta distribucin de variables
DIRECTORIO=$1 shift ARCHIVO_BUS=$1

De esta manera podramos asignar el valor de la primer variable posicional a la variable DIRECTORIO y luego el siguiente argumento que habamos dado se tomara otra vez con el nombre de $1. Esto solo tiene sentido si asignamos las variables posicionales a otra variable. Si tuviramos 10 argumentos, el dcimo no estara disponible. Sin embargo, una vez que hacemos el que las variables se corran de posicin este se convertir en el noveno y se acceder por la variable posicional $9. Existe una forma tambin de pasar como argumento a la instruccin shift el nmero de posiciones que queremos correr. Por lo cual podemos usar
shift 9

y as se lograra que el dcimo argumento sea el parmetro posicional 1. Lo que ocurre con los anteriores 9 argumentos es que desaparecen si no se los asigno a una variable anteriormente. Podremos cambiar usar un nuevo parmetro que podr contener mas de un parmetro pasado al script. Este se denomina $* y contendr el resto de los argumentos que se pasen al script luego de que se haya realizado un corrimiento determinado. Por ejemplo, si quisiera buscar una frase en lugar de una nica palabra el script podra ser
DIRECTORIO=$1 ARCHIVO_BUS=$2 shift 2 PALABRAS=$* ls $DIRECTORIO | grep $ARCHIVO_BUS | while read ARCHIVO do grep "$PALABRAS" ${DIRECTRIO}/${ARCHIVO} done

Lo que aqu cambio es que luego de haber asignado a variables los parmetros posicionales 1 y 2 las variables fueron desplazadas dos veces, eliminando los dos primeros argumentos. Luego asignamos los argumentos restantes a la variable PALABRAS. Para que sea tomado como una cadena, se lo

encerr entre comillas para ser pasado al comando grep, si no lo hiciramos el bash vera nuestra entrada como argumentos individuales para pasar al grep. Otro parmetro que es de utilidad es el $# que lleva la cuenta de la cantidad de argumentos pasados al script. De esta forma podramos realizar un script que identificara si se le estn pasando la cantidad de parmetros que realmente necesita y anunciar el error si faltaran estos. Para ello utilizaremos la construccin if-then-fi que es muy parecida a la while-do-done, en donde el par if-fi marca el final de un bloque. La diferencia entre estas construcciones es que el if solo evaluara una vez la condicin. La sintaxis es la siguiente
if [ condicin ] then hacer_algo fi

Las condiciones que puede usarse se encuentran en las man page test (man test). Nosotros usaremos una simple condicin para contar argumentos, pero pueden ser usadas distintas condiciones como nombres de archivos, permisos, si son o no directorios, etc. Para saber si la cantidad de argumentos que se nos a pasado en el script es correcta, utilizaremos una opcin aritmtica que compare la cantidad de argumentos pasados ($#) con un nmero que nosotros estipularemos, en este caso 3. Pueden usarse diferentes opciones con el formato arg1 OP arg2, donde OP ser alguno de los siguientes -eq es igual -ne no es igual -lt menor que -le menor que o igual -gt mayor que -ge mayor que o igual Se usar en este caso el -ge (mayor o igual que) dado que si la cantidad de argumentos que siguen al segundo es mayor la tomaremos como una frase a buscar y si es igual como una palabra. Lo nico que haremos en caso de que la cantidad de argumentos sea menor, ser informar de esto y de la forma de usar el script.
DIRECTORIO=$1 ARCHIVO_BUS=$2 shift 2 PALABRAS=$* if [ $# -ge 3 ] then ls $DIRECTORIO | grep $ARCHIVO_BUS | while read ARCHIVO do grep "$PALABRAS" ${DIRECTRIO}/${ARCHIVO} done else echo "Nmero de argumentos insuficientes" echo "Use: $0 <directorio> <archivo_a_buscar> <palabras>" fi

Otra utilidad para del if, es la posibilidad de realizar lo que se denomina if anidados. De esta forma podramos tener varias capas de if-then-else-fi. Como ejemplo podra ser esta una construccin vlida
if [ $condicion1 = "true" ] then if [ $condicion2 = "true" ]

then if [ $condicion3 = "true" ] then echo "las condiciones 1, 2 y 3 son ciertas" else echo "solo son ciertas las condiciones 1 y 2" fi else echo "condicin 1 es cierta, pero no la 2" fi else echo "la condicin 1 no es cierta" fi

Podramos tambin hacer que una sola variable tome diferente valores e interactuar con ella para ver si se cumple la condicin buscada. De esta forma podramos por ejemplo hacer un men de usuario con distintas alternativas. Pero esta forma es til solo para pocas condiciones. Que pasara si tuviramos muchas condiciones mas que agregar? Se nos hara por dems de complicado seguir el esquema armado y sera demasiado cdigo para lo que se trata de realizar. Es aqu es donde se necesita la estructura case-esac. Como se podr ver, al igual que en el if-fi aqu el inverso de case (esac) cierra la construccin. Veamos un ejemplo de una construccin con case
read case a) b) c) *) esac ELECCION $ELECCION in programa1;; programa2;; programa3;; echo "No eligi ninguna opcin valida";;

Hay que tener en cuenta algunas cosas respecto a este tipo de construccin. Por ejemplo el mandato que le damos al principio read indica al bash que tiene que leer lo que se ingrese a continuacin y lo guarde en una variable que se llamara ELECCION. Esto tambin ser til para el uso de otras construcciones ya que el read no es propiedad exclusiva de la construccin esac, sino que pertenece al mismo bash. Como se ve, se le indica que si el valor que la variable contiene es igual a alguna de las mostradas debajo se ejecute determinado programa. (case $ELECCION in). La eleccin se debe terminar con un parntesis ")" para que se cierre las posibilidades. Podramos poner ms posibilidades para cada eleccin; lo nico que hay que recordar es cerrar con un parntesis. El punto y coma nos marca el final de un bloque, por lo que podramos agregar otro comando y se cerrara con punto y coma doble al ltimo. El asterisco del final nos indica que se har en caso de que no coincida lo ingresado con ninguna de las posibilidades. Un ejemplo, sera que nuestra construccin reconozca maysculas y minsculas y adems ejecute ms de un comando por bloque.
read ELECCION case $ELECCION in a|A) programa1 programa2 programa3;; b|B) programa4 programa5;; c|C) programa3;; *) echo "No eligi ninguna opcin valida";;

esac

Tambin se podra haber includo un rango de posibilidades


echo "Ingrese un caracter: " read ELECCION case $ELECCION in [1-9]) echo "Usted ingreso un nmero";; [a-z]) echo "Usted ingreso una letra minscula";; [A-Z]) echo "Usted ingreso una letra mayscula";; esac

Hay que recordar que todos estos script podrn estar en un archivo, pero para que se ejecuten se le deber primero dar los permisos pertinentes. Un par de cosas a tener en cuenta para la construccin de script son la forma en que se quiere que ejecute ste y la captura de teclas. Al ejecutarse un script de shell, se estar creando un bash hijo que lo ejecutar. Dado que las variables y funciones pertenecen al intrprete de comandos que las cre, al finalizar el script el proceso hijo del bash morir y con el todos los seteos de variables y funciones. Por esto, si se quisiera que los cambios de las variables y las funciones que se definieron permanezcan para ser utilizables una vez que el script haya terminado, se deber comenzar a ejecutar el script con un punto "." seguido por un espacio antes del nombre de ste. De esta forma el proceso del intrprete de comando actual sera quien ejecute el script con lo que se conservaran todas las variables y funciones.
[shrek@pantano:~]$ . miscript

Un script puede dejar cosas sueltas antes de terminar si ste es finalizado bruscamente envindole una seal de finalizacin [1] ya sea con la combinacin de teclas Ctrl-C o con un kill -15. Para esto se debern capturar estas seales para poder hacer una limpieza, ya se de variables o archivos, antes de finalizar. La forma de hacerlo es con el uso del comando trap; de esta forma se capturar la seal que se le enve al script y se podr ya sea ignorar la misma o ejecutar otro comando de limpieza. Para demostrar esto haremos un pequeo script que servir de men. La llamada al script del men podra estar en el archivo .profile del usuario o en el .bash_profile. Si lo que no queremos es que el usuario salga del script con usando la combinacin de teclas Ctrl-C, lo que haremos es capturar la seal y hacer que se ejecute nuevamente el script que se llamar simplemente menu.
trap './menu' 2 while : do echo 'a) Listado de archivos' echo 'b) Da y hora actual' echo 'c) Mes actual' echo 'Seleccione: ' read ELECCION case $ELECCION in a|A) ls;; b|B) date;; c|C) cal;; *) echo "No eligi ninguna opcin valida";; esac done

Como se ve al principio del script se utiliza el comando trap que al captura la seal 2 (SIGINT) que produce el Ctrl-C relanza el script. Al final del script se ve que se llama nuevamente dado que al ejecutarse el comando de cada eleccin se quiere que el men siga funcionando. Practicar con estas construcciones ser de gran ayuda para entender el proceso de construccin de script y los preparara para script ms complejos usando otros interpretes como el sed, awk y el lenguaje perl. Para mayor

informacin respecto a la construccin de script, remitirse a las pginas de manual del intrprete de comandos, en este caso man bash.

Notas
[1] Para saber el nombre y nmero de seales teclear kill -l

Programas de edicin de consola


Por ms que queramos convencernos de que el usar el comando cat y redirigirlo a un archivo nos va a ser suficiente para poder trabajar con texto no podremos seguir engandonos por mucho tiempo. Si existe algo que s a apreciado mucho en lo referente a la informtica tanto en el hogar como en la oficina, es la manera ms sencilla que se tiene de editar textos y trabajar con ellos de una forma eficiente, produciendo as tambin una retroalimentacin para que estos entornos vayan mejorando. Existen conjuntos de aplicaciones como el OpenOffice.org auspiciado por de Sun o Abiword que nos permiten hacer el trabajo de edicin de texto mas fcilmente. Pero tambin existe toda una gama de editores de textos, en lnea y fuera de lnea, que permiten hacer el trabajo en ocasiones cuando no se cuenta con ningn otro editor. En este captulo trataremos de proporcionar una gua sobre las principales herramientas para manipular archivos de texto. El cmo los usemos y cual de ellos adoptemos dependern de las circunstancias y los gustos del usuario. Los dos primeros editores son el Vi "Visual Editor" y el Emacs con los cuales podremos interactuar para hacer la edicin del contenido de un archivo. Luego veremos a un editor de texto fuera de lnea y tambin llamado editor de flujo, el Sed. Por ltimo trataremos de ver las caractersticas de un lenguaje de programacin que hace mucho mas que editar texto, el Awk.

Edicin de textos en modo interactivo


Porque es importante el uso de editores de consola?
Muy bien, se cuenta ya con poderosos programas de edicin como los mencionados anteriormente y uno se siente tan cmodo como cuando trabajaba en otro tipo de entorno de ventanas, pero Que ocurre cuando queremos hacer funcionar ese monstruo consumidor de recursos en un 486 DX2 con 8 MB?. No puede funcionar de ninguna manera, ni siquiera el entorno XWindow podra hacerlo de un modo que nos facilite las tareas. Otro ejemplo, salimos de nuestra maquina perfectamente equipada y vamos a configurar otra mquina no tan bien equipada, no podemos dejar de hacer el trabajo porque no tiene interfaz grfica o no tiene el OpenOffice. Por esto es importante el saber usar este tipo de editores, ya que estarn en cualquier sistema GNU/Linux, por lo menos el Vi, y que necesitan de muy pocos recursos o muchos menos que X para funcionar. El entender este tipo de programas nos abren las puertas para poder configurar y trabajar con cualquier computadora que posea un sistema tipo Unix ya que han sido portados a tanto Vi como Emacs a la mayora de las plataformas dada su funcionalidad. Si se les presenta caso que alguna vez se tenga que editar algn archivo a travs Internet en una mquina remota agradecern por mucho la capacidad del editor Vi y su velocidad, dado que es poco el contenido que tendr que pasarse por la conexin y por ende se tendr mucha ms soltura a la hora de trabajar con un archivo, amen de los bajos tiempos de respuesta que el editor tendr. Por supuesto que se tendr que tener en cuenta el gusto personal por cada uno de los editores que pasaremos a explicar, pero de seguro se contar con la suficiente informacin para poder hacer una eleccin de acuerdo a las conveniencias

de cada usuario. Para poder ejemplificar algunos de los puntos fuertes de cada uno de estos editores, podramos decir que Vi es el editor de textos garantizado en todos los equipos con GNU/Linux y Unix. Aunque no es l ms fcil de usar, a esta altura se tendr la experiencia suficiente para armarse de paciencia y obtener el mximo beneficio de l. El editor de textos Emacs es pesado pero muy poderoso. Posee hasta un dialecto del lenguaje de programacin LISP adems de diversas extensiones avanzadas como el Eliza, que es un programa para tareas de Inteligencia Artificial.

El editor Vi
Al verlo por primera vez la gente tiene recuerdos de los primeros editores de textos de DOS, toscos y faltos de muchas caractersticas, pero una vez que se a aprendido a usarlo se encuentra uno ubicado en el sector de la gente que piensa que en verdad es un programa mgico. No es un programa muy difcil de usar, aunque parezca lo contrario en principio, es solo que el aprendizaje inicial suele costar mucho dado que no se contaran con menues descolgables o clic de mouse para ejecutar una funcin del programa y ni siquiera esta en colores en muchos casos. Para ir viendo algunas caractersticas que el Vi posee y a modo de que vayan entrando en el sector de gentes antes mencionado, veremos caractersticas en este editor que lo ponen como uno de los ms completos. Pero tendremos que ver algunos conceptos fundamentales antes de poder hacer esto. Mientras se este usando el editor se estar en uno de tres posibles modos de operacin. Estos modos son: 1. Modo Comando 2. Modo de Insercin 3. Modo de Ultima Lnea Vi puede ser iniciado tanto llamndolo sin argumentos, con lo que se tendr que establecer un nombre a la hora de salir del programa, o con un nombre de archivo, con lo cual si el archivo existe lo abrir y si no existe lo crear. La sintaxis es la siguiente
[shrek@pantano:~]$ vi <archivo>

Donde <archivo> es el nombre del archivo a editar o crear. En caso que no se ponga ningn archivo, se preguntara el nombre de este cuando queramos guardar o cuando salgamos del programa. Al iniciarse, lo har en modo comando por lo que no se podr ingresar texto directamente. Para pasar al modo de insercin, se cuenta con un comando "i" (INSERT) o "a" (ADD). En ese momento nos encontraremos con la posibilidad de escribir el contenido del archivo a crear o a editar. Para volver al modo de comandos vasta solo con oprimir la tecla ESC. El modo ltima lnea sirve para proporcionar al Vi ciertos comandos extendidos que aparecern en la ltima lnea de la pantalla, de aqu su nombre. Por ejemplo, supongamos que quisiramos salir del archivo que estamos editando sin tener que grabar, para ello presionando dos puntos (:) y luego "q!" el Vi saldr sin guardar ningn cambio. Por supuesto que en el modo ltima lnea se tiene que presionar la tecla Enter despus del comando. Para entender un poco estos conceptos trataremos de ejemplificar un poco el proceso de edicin, mostrando como se editara un archivo nuevo. Para esto crearemos un archivo llamado prueba:
[shrek@pantano:~]$ vi prueba

Dado que el archivo no existe, este se crear, lo que se nos indica al final de la pantalla con la lnea como se ve a continuacin

Lo que mostrara el editor Vi al comenzar es una pantalla donde en la primera columna se vern repetidos smbolos de tilde (~). Esto indica que donde est el primero de estos tildes finaliza el archivo y que luego no hay nada ms. En estos momentos estamos en modo de comandos. Para comenzar a trabajar necesitaremos ingresar al modo de insercin para as comenzar a escribir. Esto lo realizamos con el comando i (insert). A la hora de tener que agregar contenido podr tambin pasar al modo de insercin a travs del comando a (add). La diferencia con el comando i es que con el comando a se comenzar a escribir despus del cursor mientras que con el comando i esto se har antes del cursor. Como en otro editores de textos se podr seguir escribiendo lneas sucesivas solo con oprimir la tecla Enter la que generara un EOL (End of line). Si existiese un error lo podremos corregir primero borrando el carcter con error (tecla x sobre el carcter a borrar en modo comando) y luego insertando el correcto (i). Pero podremos por ejemplo reemplazar directamente el carcter con error directamente con el comando (r) (replace).

Pero que pasa si existiesen varios caracteres seguidos que quisiramos corregir. Pondremos entonces el comando R (replace all) lo que nos permitir seguir reemplazando caracteres hasta presionar la tecla Esc para volver al modo comando. Para moverse por el texto puede hacerse directamente con las teclas de cursor que nos llevar al lugar donde est el problema.

Para reemplazar esta palabra lo que hicimos fue posicionarnos con el cursor encima de la letra "" y en modo comando presionar la tecla i, y as insertamos la letra "". Si lo que quisiramos es comenzar a escribir una nueva lnea en blanco, lo lograremos presionando la tecla o en modo comando.

Ya dijimos que para borrar algn carcter en especial tendremos que posicionar el cursor encima de este y, en modo comando, presionar la tecla x. Pero si lo quisiramos es borrar una palabra de 5 letras, lo que haremos es presionar x 5 veces. Esto no es del todo practico. Si queremos borrar una palabra completa bastar con posicionarnos con el cursor en ella y presionar dw (delete word) en modo comando con lo que la palabra ser borrada. Si lo que queremos es borrar una lnea completa tendremos que presionar dd en modo comando encima de la lnea a borrar.

Las modificaciones que le podemos hacer al texto las vimos anteriormente con el comando R y r, pero tambin podremos hacer otro tipo de modificacin como el cambiar el texto a mayscula. Para esto contamos con el comando ~[1], el cual alterna entre maysculas y minsculas.

Para poder mover el cursor de un lado a otro tambin se cuenta con 4 teclas que pueden resultar un poco ms cmodas al este en modo comando. Estas son h, j, k y l que nos permitirn mover el cursor a la izquierda, abajo, arriba y a la derecha. Con la tecla w el cursor se mover al comienzo de cada palabra y con la tecla b se ir al comienzo de la palabra anterior.

Con la orden 0 nos podremos mover al comienzo de la lnea actual y con el $ al final de la lnea actual. En ocasiones el texto que tenemos que editar es por dems de extenso y por ello tendremos que encontrar un mtodo mejor para ir movindonos a travs de este. Dado que no contamos con una barra de desplazamiento que nos permita poder movernos por el documento tendremos que usar los mtodos convencionales de conjunto de comandos. Para ello tenemos que pulsando Ctrl-F se avanzara el cursor una pantalla hacia delante y con Ctrl-B lo llevaremos una pantalla hacia atrs. Si lo que queremos es llegar al final del documento tenemos el comando G y si lo que en realidad se necesitaba es el llegar a una lnea determinada tendremos que anteponer al comando G el nmero de la lnea a la que queremos ir. Por ejemplo si quisiramos llegar a la lnea 25 del documento

teclearamos, por supuesto en modo comando, 25G y el cursor parpadeara debajo de la primer letra de esa lnea. Muy bien, el trabajo esta hecho y se necesita ahora guardarlo. Para esto tendremos que darle una orden desde el modo ltima lnea. Para ello primero ingresaremos ":" los dos puntos, que nos llevara al modo ltima lnea y seguido esto teclearemos la letra w (write) y presionaremos Enter (:w), con esto el documento ser guardado, y en caso de que no hallsemos dado un nombre todava, es decir que hayamos arrancado el vi sin ningn nombre como parmetro, se guardara en un archivo temporal el cual nos indicara. Para darle un nombre, lo tendremos que indicar inmediatamente despus de haber puesto los dos puntos y la letra w. (:w archivo), de esta forma ahora cada vez que se ingrese el comando "w" desde el modo ltima lnea, se guardara el documento en el nombre de archivo que indicamos. Si lo que quisiramos es guardar y salir la forma de indicrselo es a travs del comando "qw" (:qw) que guardara el archivo y saldr del programa. Claro esta que si no indicamos un nombre se tendr que proceder de igual forma que el caso anterior. Podremos hacer lo mismo desde el modo comando presionando dos veces la tecla Z. Para salir sin guardar existen dos formas de acuerdo a lo que se haya hecho. Si no se modifico el documento, bastara que desde el modo ultimo lnea se presione la tecla q seguido de Enter.(:q) Si se modifico el documento, entonces deberemos forzar la salida con ayuda del smbolo ! de esta forma (:q!). Lo formidable que tiene este editor de texto en modo consola que otros no tienen, es la posibilidad de editar ficheros mltiples. Esto permite que podamos editar algn otro archivo con solo indicrselo. De esta forma ser ms rpido que salir del "vi" y arrancarlo con otro nombre de archivo como parmetro. Para esto bastara solo con ingresar :e seguido del nombre del archivo a editar. Si el archivo que actualmente estamos editando no a sido guardado nos lo indicara para que no perdamos los cambios. Si queremos en realidad incluir el contenido de otro archivo, tenemos la orden :r. La forma de emplearlo es (:r archivo) y de esta forma todo el contenido de ese archivo ser incluido en el documento que estamos editando actualmente. Existe una utilidad muy interesante del vi que nos permite ejecutar comandos del bash directamente y que los resultados se incorporen al texto que estamos editando. Con la misma orden :r! y seguido el comando que queremos ejecutar, el comando ser ejecutado y el resultado ser incluido en el documento.

Claro esta que se puede salir del interprete de comandos y ejecutar la orden directamente y una vez

finalizada volver al editor vi. Esto se logra con el smbolo "!". Por ejemplo: :! ls -l . Tambin podremos salir temporalmente del vi regresar al interprete de comandos. Para esto deberemos indicrselo con el comando :shell. Luego una vez que terminemos de usar el interprete de comandos, podremos poner exit y regresaremos al vi. Una utilidad interesante es la de repetir el ltimo comando que se ejecut. Para esto tenemos el comando punto "." que desde el modo comando nos permitir repetir cualquier comando que hayamos ejecutado anteriormente. Por ejemplo si lo que hicimos antes fue el borrar una palabra con el comando "dw", si presionamos el punto "." ser igual que hubisemos tecleado "dw" otra vez. Esto funciona con la mayora de los comando que podamos ejecutar desde el modo comando. Si quisiramos buscar una palabra en especial dentro del texto, bastara solo con presionar la el comando "/" lo que nos ubicar en la ltima lnea para que ingresemos la cadena de texto a encontrar. Vi comenzara a buscar desde el punto donde se encuentre el cursor hasta el final del texto y cada vez que encuentra una coincidencia nos lo indicara poniendo el cursor debajo de esta. Si queremos seguir buscando, bastara con presionar la tecla n (next) para que encuentre la prxima coincidencia. Muchas veces tendremos que reemplazar sucesivamente una palabra en el texto y tendremos que buscarlo una por una y reemplazarlo a mano. Vi cuenta con un mtodo que puede ser til usando la diagonal "/" y luego la cadena que estamos buscado. Una vez que la encontramos solo tendremos que presionar "cw" lo que nos permitir corregir la cadena, reemplazamos la cadena que encontramos con la que queremos y luego repetimos la bsqueda presionando (ESC) que nos pondr en modo comando y presionando la tecla "n" que nos llevara a la prxima coincidencia. En este punto en lugar de repetir lo anterior solo bastara con presionar el comando "." que repetir el reemplazo efectuado anteriormente y as presionando "n" y "." sucesivamente podremos reemplazar todas las coincidencias. Claro esta que no es esto muy til si se quiere reemplazar 100 coincidencias por lo que podremos hacerlo de una sola vez indicando en cuantas lneas se podr encontrar esta cadena. Para ello se ingresan los ":" dos puntos seguido de la primera de las lneas en la que tenemos la palabra a cambiar, seguido una coma y luego la ultima lnea a cambiar. Luego pondremos el comando a usar "s" para sustituir, una diagonal, la palabra a buscar otra diagonal y la palabra con la que ser reemplazada.
:200s/shrek/SHREK

Claro que esto solo cambiara la primer aparicin en la lnea, si existiera otra en la misma lnea seria ignorada. Para que el alcance sea total se deber agregar el comando g (global) al final del comando.
:1,200s/shrek/SHREK/g

Ahora bien si se quiere que vi nos pregunte antes de cambiar se deber agregar el comando "c" al final, que nos pregunte si se quiere realizar el cambio antes de cada una de las coincidencias
:1,200s/shrek/SHREK/gc

Para todo esto deberemos saber cuantas lneas tiene el documento, lo que podemos hacer es indicarle que lo haga desde donde nosotros queramos hasta el final del documento con la ayuda del smbolo "$".
:1,$s/sebas/SEBAS/gc

Si se quiere realizar en todo el documento, podremos directamente indicarlo con el smbolo "%" que es igual a "1,$".

:%s/shrek/SHREK/gc

Por supuesto que los patrones de bsqueda que usamos podrn ser expresiones regulares, que facilitaran mucho el trabajo. Si quisiramos que se reemplace no importa si esta escrito en mayscula o minscula se podr poner algo como esto
:%s/[Ss][Hh][Rr][Ee][Kk]/fiona/gc

Este uso de las expresiones regulares tambin puede incluir el uso de metacaracteres como el "*" para indicar cualquier cantidad de caracteres anterior o "." para cualquier carcter individual
:%s/*[Rr].[Ss]/fiona/gc

Pero si se a hecho algo mal, no preocuparse ya que Vi cuenta con un comando de "undo" el cual por supuesto se activa con el comando "u". Existen muchsimos temas que se han dejado de ver aqu, por lo que se invita al lector a buscar en la documentacin del vi que lo guiara a toda la magia que este editor tiene para brindar.

El editor emacs
En cuanto a poder se refiere, Emacs gana por varios cuerpos a sus competidores. Este desarrollo totalmente GNU ha sabido cubrir el terreno de la edicin de textos de alto nivel en los sistemas UNIX por muchos aos, y sigue siendo un ejemplo del poder real que se puede obtener de este tipo de sistemas. Por supuesto, es un editor ms poderoso que el pequeo "vi" y por ende la curva de aprendizaje es mucho mayor. Pero si lo que se quiere es tener mas que un simple editor de textos y acercarse a lo que una suite de aplicaciones puede dar, Emacs es el lugar donde se tiene que buscar. Y es as de simple, no solo nos encontraremos con un fabuloso editor de textos, sino que tendremos una completa suite de aplicaciones de uso comn, tales como edicin, recepcin y envi de mails, programacin en C, edicin de HTML y SGML, programacin en de macros en lenguaje LISP, correccin ortogrfica en varios idiomas y muchas caractersticas ms. Existe una diferencia en la forma de trabajar con respecto a vi, en lugar de tener que cambiar de modo para poder trabajar con una u otra funcin, modo comando, modo ltima lnea y dems, emacs responde de acuerdo a la funcin que la combinacin de teclas presionada tenga. Este es el mismo comportamiento que poseen otros editores de textos como el OpenOffice o el Word y por lo tanto se tendrn que saber las combinaciones posibles para poder trabajar cmodamente. Al arrancar emacs puede hacerlo de dos formas distintas dependiendo en el ambiente donde se este trabajando. Si se esta trabajando en modo texto, emacs arrancara con lo que se denomina entorno de pantalla completa, es decir se llena toda la pantalla. Si se ejecuta emacs en el entorno X, este lo entender y arrancar la versin de X en lugar de la de texto. Versin X de Emacs: Por supuesto que si se quiere ejecutar la versin de texto en un entorno como X uno puede hacerlo, para ello basta con ejecutar emacs con los modificadores -nw (NO WINDOWS).
[shrek@pantano:~]$ emacs -nw

Ahora bien, si lo ejecutamos con un nombre de archivo como argumento resultara de la misma forma que con el editor vi, si el archivo existe se abrir para ser editado, si no se crear uno nuevo. En el entorno grfico se podr contar con una serie de mens desplegables al igual que otros programas de X y as ser ms fcil llegar a las opciones, y por ello solo trataremos de ver las opciones que se tienen, no todas, para ser usadas en un entorno de texto y luego podrn ser empleadas ya conociendo su funcionamiento en cualquiera de los dos entornos. Para poder usar los men en modo texto, si presionamos la tecla F10 tendremos bajo la pantalla de

edicin los nombres de cada uno de los mens y al elegirlos y presionar Enter entraremos en su contenido y en las diversas ordenes que tienen. Con F1 entraremos al modo de ayuda donde tendremos una resea de los comandos de Emcas Ventana de ayuda Para salir de este cuadro bastara con presionar 3 veces la tecla Esc. Al comenzar, emacs esta en lo que se denomina modo "fundamental" que es uno de los modos en los que puede encontrarse dependiendo del tipo de trabajo que se esta haciendo, determinando esto el comportamiento bsico del programa. Los otros modos sirven para efectuar las distintas tareas antes mencionadas como el leer correo, la edicin de HTML y compilacin de lenguaje C. La forma de saber en que modo se encuentra, es leyendo la lnea de estado. Para movernos dentro del documento tenemos as facilidades de las teclas de cursor o bien dicindole hacia donde tiene que ir el curso mediante un comando. Por ejemplo si quisiera ir hacia adelante palabra a palabra teclearamos Esc-f (f de forward) y nos iremos moviendo de esa manera. A modo inverso teclearemos Esc-b para ir hacia atrs. Para moverse hacia arriba y hacia abajo podremos hacerlo por medio de Ctrl-v para ir una pantalla adelante y Esc-v para ir una pantalla hacia atrs. Solo se tendr que recordar que para ingresar un comando que comienza con la tecla Shift, antes deberemos presionar la tecla Esc. A continuacin mostraremos una tabla bsica de movimientos para emacs. Tabla 1. Resea de teclas en emacs para movimiento Caracter Ctrl-b Ctrl-f Esc-b Esc-f Ctrl-p Ctrl-n Ctrl-a Ctrl-e Ctrl-v Esc-v Esc-> Accin Se mueve atrs un caracter Se mueve adelante un caracter Se mueve atrs una palabra Se mueve adelante una palabra Se mueve a la lnea anterior Se mueve a la lnea siguiente Se mueve al inicio de la lnea Se mueve al final de la lnea Se mueve hacia adelante una pantalla Se mueve hacia atrs una pantalla Se mueve al final del buffer (archivo)

Esc-< Se mueve al inicia del buffer (archivo) La edicin de texto es muy completa, permitiendo marcar un fragmento del texto para copiarlo o cortarlo para pegarlo en otro lugar del documento. El texto cortado o copiado permanece en un buffer del procesador de texto y no tiene que ser nico. Por ende podramos tener varios fragmentos de texto en l y podramos pegar cualquiera de ellos. La diferencia con otros editores de texto esta en que el proceso de pegar el contenido del portapapeles se denomina yanking (jalar). La siguiente tabla muestra los comando para edicin ms comunes. Tabla 2. Resea de teclas en emacs de edicin Caracter Ctrl-d Del Esc-Del Accin Borra el caracter que est debajo del cursor Borra el caracter anterior Borra la palabra anterior

Caracter Esc-d Ctrl-k Ctrl-w Esc-w Ctrl-y Ctrl-@

Accin Borra la palabra sobre la que est el cursor Borra la lnea Borra la regin marcada Copia la regin marcada Inserta el texto en el buffer del portapapeles Asigna el inicio de una regin

Ctrl-Espacio Completar !!!!!!!! Como en el procesador de textos Vi, tendremos la posibilidad de buscar un texto determinado, pero de una forma un poco mas cmoda, ya que emacs incorpora lo que se denomina bsqueda incremental (I-search). Este tipo de bsqueda se ir haciendo en tiempo real a medida que vayamos poniendo caracteres luego de presionar Ctrl-s, lo que inicia la bsqueda, buscando una concordancia. Bajo la lnea inferior aparecer una referencia de esta forma
I-search:

A medida que pongamos caracteres los iremos viendo luego de esa lnea:
I-search: o

Y en el texto el cursor se ira desplazando a la primer palabra que comience con "o". As a medida que se ingresen caracteres, emacs nos llevara hacia la primer palabra que concuerde. Si al terminar de escribir la palabra, todava no se a llegado a la regin donde se quera, bastara con teclear nuevamente Ctrl-s y emacs buscara la prxima ocurrencia de la palabra buscada anteriormente. Por supuesto la bsqueda es mas til si se la puede usar para reemplazar algn texto en el documento, y esto es posible en emacs a travs del comando Shift-% con lo que se pedir primero el texto a buscar y luego el texto por el que ser reemplazado. A continuacin mostraremos una tabla que muestra las posibilidades de bsqueda y reemplazo que emacs posee. Tabla 3. Teclas de emacs en modo bsqueda Caracter Ctrl-s Ctrl-r Esc-o Espacio-o Ctrl-g Del Esc-% Accin Busca hacia adelante en forma incremental Busca hacia atrs en forma incremental Termina la bsqueda Reemplaza la cadena preguntando antes de hacerlo Cancela la bsqueda y regresa al inicio Para borrar un caracter incorrecto en la cadena de bsqueda Se ingresa la cadena a buscar y el reemplazo

Shift-x Cambia todas la ocurrencias del documento Existe muchas funciones ms y queda para el lector si es de su inters el estudio del lenguaje incorporado LISP par la generacin de funciones y macros que sern de mucha ayuda para usar este editor.

Notas
[1] En los teclados espaoles, el smbolo de tilde (~) suele obtenerse presionando AltGr-4

Conceptos de editores fuera de lnea


Existen ocasiones en las que el uso de un editor de textos como el vi o emacs puede ser demasiado o no cumplen con lo que queremos realizar. Tal vez se tengan que hacer cambios repetitivos a archivos o tener que procesar datos de una fuente y enviarlos a otro archivo en un orden correcto o tal vez solo queremos una forma simple de hacer el trabajo desde un script o la lnea de comandos. Es aqu donde entran a trabajar los editores fuera de lnea y para nombrar solo 2 veremos el editor de flujo Sed y el lenguaje de programacin Awk (por Alfred Aho,Peter Weinberg y Brian Kernighan). Lo especial de Awk es que es un lenguaje con todas las letras y muy poderoso, pero en ocasiones nos facilitar tareas tediosas de procesamiento de informacin y por esto lo ponemos en el rango de un editor fuera de lnea. Aunque esto no quiere decir que es lo nico que puede hacer. Para mayor informacin sobre Sed y Awk les sugiero lean "Sed & AWK" de Dale Dougherty que trata el tema con una mayor profundidad.

Sed
Sed No es preciso detallar en demasa el uso de este editor fuera de lnea dada que posee mucha similitud en su uso al editor de textos vi pero si es bueno mostrar algunas de sus funciones y usos tanto en el procesamiento desde un script o en la lnea de comandos. Existen 3 casos especficos en los que se podr usar Sed. 1. Para editar archivos muy largos para editar interactivamente. 2. Para editar archivos de cualquier tamao cuando la secuencia de comandos de edicin es muy complicada para hacer el tipeado confortable en ambiente interactivo. 3. Para usar mltiples funciones globales de edicin eficientemente en un solo paso. Existen diferentes formas de realizar una edicin con el Sed. Puede hacerse desde la lnea de comando o simplemente guardndolos en un archivo para poder ser usado luego. Sed lee la entrada lnea a lnea y realiza los cambios a estas de acuerdo a lo que se le especifique. Luego de hacer estos cambios dirige su salida hacia stdout, la cual puede ser redireccionada. Sed acta en forma similar a filtros como el grep y sort pero con la diferencia que con Sed se podrn crear programas mas complicados y con una mayor cantidad de funciones. Para definir una estructura de uso del Sed veremos 2 formas distintas. La primera es la utilizada en la lnea de comandos a travs de una canalizacin y que tendr esta estructura:

primer_comando | sed <opciones> <descripcin_de_la_edicin>

A continuacin veremos la segunda opcin para su uso a partir de la lnea de comandos:


sed -f script_de_edicin <archivo>

Con la opcin "-f" le decimos a sed que a continuacin le pasaremos un archivo donde encontrara las reglas a aplicar en <archivo>. Sed tiene mucho que ver con el editor vi en el rea de bsqueda y reemplazo donde la estructura es la siguiente:
[direccion1 [,direccion2]] descripcin_de_la_edicin [argumentos]

Las direcciones sern reglas que el sed tendr que encontrar en el texto, si se omitieran estas sed realizara en caso de ser posible los cambios en forma global. La descripcin_de_la_edicin indica a

no haya mas cambios a realizar en una lnea dada, sed enviara el resultado a la salida estndar. Sed posee un contador interno de lneas que se va incrementando de acuerdo al nmero total de lneas ledas y no a las lneas del archivo. Por esto si se editan dos archivos juntos de 50 lneas cada uno, la lnea nmero 60 de sed seria la lnea 10 del segundo archivo. Esto es bueno para tener en cuenta a la hora de realizar ediciones a mltiples archivos. Como dijimos antes cada comando de sed puede tener 0, 1, 2 direcciones y en caso de tener 0, se aplicara a todas las lneas de ser posible:
/shrek/ s/entrada/salida/

El comando "s" indica a sed que debe hacer una sustitucin de los argumentos que son pasados. Este simple comando, que puede estar en un archivo guardado para ser pasado al sed, sustituye la primera aparicin de "entrada" por "salida" en las lneas que contengan "shrek". Cuando se ingresan dos direcciones, el cambio se comenzara a efectuar en la lnea que concuerde la primer direccin y se ira aplicando a todas las siguientes hasta que concuerde con la segunda direccin. Las dos direcciones se separan con coma. Por ejemplo
10,30 s/entrada/salida/

har una sustitucin de "salida" por "entrada" a partir de la lnea n 10 hasta la lnea n 30. Obsrvese que no tiene que existir ningn espacio entre el comando "s" y la segunda direccin. Si las direcciones tiene al final un signo "!" (negado) el comando solo se aplicar a aquellas lneas que no concuerden con la direccin dada. Por ejemplo
10,30! s/entrada/salida/

Este comando se aplicar a todas la lneas, menos a las que estn entre la nmero 10 y la 30 inclusive. Como antes dijimos podremos modificar la salida del sed. Por ejemplo si quisiramos mostrar por la salida estndar las lneas de una archivo que estn entre la 20 y la 40, podremos dar a sed los argumentos necesarios:
[shrek@pantano:~]$ cat archivo | sed -n '20,40p'

El -n indica a sed que imprima solo las lneas que concuerden con los argumentos pasados, dado que evita que se impriman todos los dems. El comando "p" es para imprimir el patrn que encuentra sed. Ya estamos en condiciones de hacer un script rudimentario para imprimir lneas de archivos
[shrek@pantano:~]$ find /home/sebas/cartas/ "*" -print | while read FILE >do echo $FILE >cat $FILE | sed -n '5,15p' >done

A continuacin se mostrara por la salida estndar desde la lnea 5 hasta la 15 inclusive de todos los archivos del directorio /home/shrek/cartas. Existen veces que queremos tener partes de archivos que concuerden con un patrn determinado, por ejemplo, si quisiramos mandar todos los comentarios de un archivo de shell_script a otro y sabemos que las lneas que lo son comienzan con "#" podemos usar un comando en sed que haga el trabajo por nosotros de forma muy simple
[shrek@pantano:~]$ cat archivo | sed -n '/^#/w archivo2'

Debe existir un espacio exacto entre la "w" y el "archivo2" Con el -n indicamos a sed que solo procese las lneas que concuerdan con la direccin que le pasaremos. Con el smbolo "^" le decimos a sed que tiene que encontrar la direccin al principio de la lnea. Y con la w le indicamos que escriba la salida al archivo2. A continuacin pondremos una tabla de los comando que se usan en sed. Se recomiendan que practiquen con ellos y que observen los resultados obtenidos. Tabla 4. Comandos del editor Sed

Caracter a b c d i l n p r s w

Accin aade texto al espacio patrn ramifica a un rotulo, se emplea de forma similar a un goto aade texto borra texto inserta texto lista el contenido del espacio patrn aade una nueva lnea al espacio patrn imprime el espacio patrn lee un archivo sustituye patrones escribe a un archivo

Awk
EL awk es un poderoso lenguaje de programacin que en muchas ocasiones nos sacara de apuros a la hora de tener que hacer script complejos de tratamiento de texto. El awk al igual que el sed lee las lneas completas para realizar sus modificaciones. Uno de los aspectos mas tiles en relacin al awk es que a diferencia del "sed", awk puede dividir las lneas en campos a travs de un separador de campo indicado en el script o en la lnea de comandos. Si no se indica ninguno se tomara como separador de campo un espacio o tabulador. Usando la opcin -F de la lnea de comandos o la variable FS desde un programa hecho en awk se puede especificar un nuevo separador de campo. Por ejemplo si lo que quisiramos es ver los nombres verdaderos que aparecen en el archivo /etc/passwd primero tendramos que saber como separar los campos. En el archivo /etc/passwd se separan por un ":". Ahora tendramos que saber en que campo se encuentra el nombre. Es en el campo numero 5, comenzando a contar como el primero de los campos. El 0 es la lnea completa y ya veremos por que
[shrek@pantano:~]$ cat /etc/passwd | awk -F : '{print $5}' root bin daemon adm lp sync shutdown halt mail news uucp operator games gopher FTP User Nobody X Font Server Named PostgreSQL Server Shrek Ogre Fiona Ogre

[shrek@pantano:~]$

Como vemos lo primero que hicimos fue indicarle al awk cual seria el separador de campo "-F :", luego entre comillas le indicamos que imprima a la salida estndar el campo n 5, '{print $5}'. De esta forma vemos los nombres contenidos en el archivo /etc/passwd. Podramos imprimir mas de un campo a la vez, por ejemplo si queremos mostrar tambin el directorio home de cada uno de los usuarios podramos hacer lo siguiente:
[shrek@pantano:~]$ cat /etc/passwd | awk -F : '{print $5,$6}' root /root bin /bin daemon /sbin adm /var/adm lp /var/spool/lpd . . . PostgreSQL Server /var/lib/pgsql Shrek Ogre /home/shrek Fiona Ogre /home/fiona [shrek@pantano:~]$

De esta simple manera podremos ir completando la lnea a los requerimientos del campo que queramos ver ya que tenemos la posibilidad de hacer comparaciones a un campo de la misma manera que la haramos a una variable en cualquier otro lenguaje. Por ejemplo si quisiramos ver las lneas del /etc/passwd de todos aquellos usuarios que pertenecen al grupo user, representado por el n 100 en el archivo passwd, podramos hacer que el awk comprara el nmero del campo en el que esta el nmero GUID que nosotros buscamos. En el caso particular que cada usuario tuviese su grupo, podramos hacer que se compararan todas las lneas que posean un nmero mayor o igual al nmero de grupo de usuarios mas bajo, por ejemplo 500 es el nmero que por defecto pone Red Hat a al grupo del primer usuario y va incrementndose a medida que incorporamos usuarios. Tendramos que mostrar todas las lneas que en campo donde esta el GUID, el nmero 4, del usuario y que sea mayor o igual a 500. Por ejemplo:
[shrek@pantano:~]$ cat /etc/passwd | awk -F :\ '$4>=500 {print $0}' shrek:x:500:500:Shrek Ogre:/home/shrek:/bin/bash fiona:x:501:501:Fiona Ogre:/home/fiona:/bin/bash [shrek@pantano:~]$

Como vern se indico que mostrara solo aquellas lneas que tuviesen en el campo n 4 un valor mayor o igual a 500, $4>=500.Tambin se ve que mostramos la lnea entera al poner como campo a imprimir el $0. Una acotacin que tendramos que notar. Lo que comparamos en esta oportunidad es un nmero y esto lo hace tremendamente poderoso al awk como lenguaje de programacin. Si se quisieran compara cadenas, se tendran que encerrar ente "". Como ejemplo, si hubisemos encerrado entre "" al 500 lo que awk interpretara es que queremos mostrar todas las lneas que en la posicin 4 tengan un valor alfabticamente mayor o igual a 500.
[shrek@pantano:~]$ cat /etc/passwd | awk -F :\ '$4>="500" {print $0}' lp:x:4:7:lp:/var/spool/lpd: nobody:x:99:99:Nobody:/: shrek:x:500:500:Shrek Ogre:/home/shrek:/bin/bash fiona:x:501:501:Fiona Ogre:/home/fiona:/bin/bash [shrek@pantano:~]$

Como vern si se ordena alfabticamente la posicin 4 el 7 y el 99 son mayores que 500. Los operadores que awk puede manejar son los siguientes:

Tabla 5. Operadores de Awk Operador Significado < <= == != >= menor que menor que o igual que igual a no igual a mayor que o igual que

> mayor que Otra posibilidad es el usar expresiones regulares para efectuar la bsqueda. Pero cuidado ya que es tienen que ser ingresadas de acuerdo a s es mayscula o minscula.
[shrek@pantano:~]$ cat /etc/passwd | awk -F :\ '/Shrek/ {print $0}' shrek:x:500:500:Shrek Ogre:/home/shrek:/bin/bash [shrek@pantano:~]$

Lo nico que tendremos que hacer es encerrarlo entre "/" para que se tomen como expresin regular. Ahora bien, las expresiones podrn ser tan complejas como queramos. Por ejemplo si quisiramos mostrar todas las lneas que tuviesen la cadena "se" pero que no tengan antes la letra "U" y no les siga un espacio la orden es
[shrek@pantano:~]$ cat /etc/passwd | awk -F :\ '/[^U]se[^ ]/ {print $0}' shrek:x:500:500:Shrek Ogre:/home/shrek:/bin/bash [shrek@pantano:~]$

Como ven las cadenas que tenemos que ignorar se preceden antes y despus de la cadena buscada ingresando un smbolo ^ encerrado entre [ ]. De esta manera se podr ir usando las distintas expresiones regulares. En todos estos casos se utilizaron una nica forma para imprimir en pantalla los resultados, pero es bueno saber que contamos con otra forma en la que podremos formatear el texto antes de su salida por pantalla. Para la salida formateada se utiliza el "printf". Por ejemplo si quisiramos podrimos imprimir los datos en una forma ms cmoda:
[shrek@pantano:~]$ cat /etc/passwd | awk -F :\ '$4>=500 {printf"%20s %5s\n",$5,$1}' Shrek Ogre shrek Fiona Ogre fiona [shrek@pantano:~]$

Como se puede ver, pedimos que nos mostrara el nombre completo de l usuario y el nombre de usuario. Como sabemos la extensin aproximada que tendr cada campo le damos 20 posiciones para le primer campo a mostrar, el $5, y 5 posiciones para el segundo campo a mostrar, el $1. Si lo que quisiramos mostrar fuesen nmero en lugar de la "%s" (string) ira una "%d" o "%i" (decimal).Para mas informacin sobre el printf buscar en las pginas de manual del awk. Existen diferentes variables integradas, a parte del FS, que permiten llevar cuentas de distintos aspectos. Por ejemplo existe la variable NR que llevara la cuenta de los registros que mostremos. Por ejemplo supongamos que necesitamos obtener un listado largo de un directorio, pero solo queremos ver los permisos, el nombre del archivo y el nmero de registro que a pasado por el awk.
[shrek@pantano]$ ls -l | awk '{ print NR" "$1" "$9}' 1 total 2 -rw-rw-r-- 146768 3 -rw-rw-r-- Bienvenidos 4 -rw-rw-r-- Bienv 5 -rw-rw-r-- authkey.file

6 drwxr-xr-x Desktop 7 -rw-rw-r-- LUGRo 8 drwxrwxr-x Linux 9 -rw-rw-r-- Listado 10 -rw-rw-r-- Lo 11 drwx------ Mail . . . 49 -rw-rw-r-- pgaccess-report.ps 50 -rw-rw-r-- sed 51 -rw-rw-r-- sed.zip 52 -rw-rw-r-- smtptel.htm 53 -rw-rw-r-- vicky

Como vern, en esta ocasin la variable NR fue llevando la cuenta de los registros que fueron pasando por el awk. De esta forma se podr decirle al awk que me muestre de los registros 5 al 10 solamente. scr Existen muchas ms variables en el awk que son de extrema utilidad. Por ejemplo, en el caso anterior sabamos que el ultimo campo estaba en la posicin nmero 9, pero que ocurre si no sabemos la posicin del ltimo campo o esta varia? Para esto esta la variable NF que lleva la cuenta de la cantidad de campos de cada registro. Por ello en lugar de la anterior forma podramos poner:
[shrek@pantano:~]$ ls -l | awk '{ print NR" "$1" "$NF}'

y obtendramos idnticos resultados. Pero un momento, aqu hay algo raro. La variable NR no tiene el signo $, en cambio la variable NF si lo tiene. Esto esta dado as para que no se reemplazado por el awk. Por ejemplo si hubisemos puesto la variable NF sin signo $ el resultado seria.
[shrek@pantano:~]$ ls -l | awk '{ print NR" "$1" "NF}' 1 total 2 2 -rw-rw-r-- 9 3 -rw-rw-r-- 11 4 -rw-rw-r-- 11 5 -rw-rw-r-- 11 6 drwxr-xr-x 9 . . .

Lo que nos esta mostrando no es el ltimo campo, sino la cantidad de campos que ese registro tiene. Al agregarle el signo $ se reemplazara con el nmero del ltimo campo y ese campo el que ser mostrado. Esto es as para todas las variables integradas. El awk puede ser usado no-solo en una lnea. Podramos usarlo tambin como cualquier otro lenguaje para realizar mltiples tareas en una lnea o realizar algo antes de comenzar la lectura y otra despus. Para demarcar el cdigo se utiliza los pares BEGIN-END. Todo lo que aparece despus de la palabra BEGIN, pero en el mismo rengln, se realiza antes de que comience el ciclo. Cualquier cosa que este despus de END se realiza despus de que se haya ledo la ltima lnea y cerrado el ciclo. Estas lneas tendrn que estar en un archivo que ser utilizado por el awk para procesar en este ejemplo al archivo /etc/passwd. Un ejemplo seria el siguiente:
BEGIN { FS=":"} { printf"Nombre Completo: %s\n",$5 } { printf"Nombre de Usuario: %s\n",$1} { printf"UID: %i,GUID: %i\n\n",$3,$4 } END { printf "\n\nTotal de usuarios: %d \n\n", NR}

Este pequeo programa realizado con el vi ser guardado en el archivo awk.src, el nombre se lo damos nosotros, y nos servir para mostrar algunos datos del /etc/passwd mas detalladamente. La forma de ejecutarlo es a travs del modificado "-f" donde le decimos al awk que a continuacin le pasaremos un archivo con el programa que tiene que usar para procesar el /etc/passwd.

[shrek@pantano:~]$ awk -f awk.src /etc/passwd Nombre Completo: root Nombre de Usuario: root UID: 0,GUID: 0 Nombre Completo: bin Nombre de Usuario: bin UID: 1,GUID: 1 Nombre Completo: daemon Nombre de Usuario: daemon UID: 2,GUID: 2 Nombre Completo: adm Nombre de Usuario: adm UID: 3,GUID: 4 . . . Nombre Completo: PostgreSQL Server Nombre de Usuario: postgres UID: 26,GUID: 26 Nombre Completo: Shrek Ogre Nombre de Usuario: shrek UID: 500,GUID: 500 Nombre Completo: Fiona Ogre Nombre de Usuario: fiona UID: 501,GUID: 501 Total de usuarios: 22

Para finalizar diremos que tambin se podrn hacer operaciones con estas variables, es decir, sumarlas restarlas, multiplicarlas y dividirlas. Por ejemplo si quisiramos saber en cuantos bloques de 4 lneas podramos formar con un archivo de texto dado podramos hacer el siguiente programa:
BEGIN {FS=":"} { print $0 } FNR%4==0 { printf"\n" } END { printf "El archivo %s puede entrar en %i bloques enteros\ de 4 lineas\n",FILENAME,NR/4}

Existen un par de cosas nueva en el. Por ejemplo la variable "FNR" que cuenta el nmero de lneas. En esta ocasin le estamos diciendo que si el modulo de FNR es igual a 4 "FNR%4" imprima un salto de linea "{ printf"\n" }". Y al finalizar el ciclo se mostrara el mensaje que nos informara cuantos bloques de 4 lneas podremos tener. Para obtener el resultado se efecta una divisin del numero total de registros "NR" por el nmero de lneas que queremos armar el bloque, "4". La variable FILENAME indica cual es el archivo sobre el cual se realizo el proceso y es tomada cuando se la pasamos al awk como argumento. El resultado es
[shrek@pantano]$ awk -f awk2.src /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin: daemon:x:2:2:daemon:/sbin: adm:x:3:4:adm:/var/adm: lp:x:4:7:lp:/var/spool/lpd: sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail: news:x:9:13:news:/var/spool/news: uucp:x:10:14:uucp:/var/spool/uucp: operator:x:11:0:operator:/root: games:x:12:100:games:/usr/games: gopher:x:13:30:gopher:/usr/lib/gopher-data: ftp:x:14:50:FTP User:/home/ftp: nobody:x:99:99:Nobody:/: xfs:x:43:43:X Font Server:/etc/X11/fs:/bin/false named:x:25:25:Named:/var/named:/bin/false gdm:x:42:42::/home/gdm:/bin/bash postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash shrek:x:500:500:Shrek Ogre:/home/shrek:/bin/bash fiona:x:501:501:Fiona Ogre :/home/fiona:/bin/bash El archivo /etc/passwd puede entrar en 5 bloques enteros de 4 lineas

Administracin bsica del sistema


En este captulo trataremos de ver los aspectos generales sobre la administracin de nuestro sistema contemplando algunas configuraciones que se tendrn que hacer, tomando como base un sistema pequeo como el de nuestro hogar o de una empresa con pocas mquinas interconectadas. Empezaremos reforzando el concepto de la cuenta root para comprender su alcance y que restricciones y libertades podremos dar a los dems usuarios. Luego veremos varias maneras para poder arrancar nuestro sistema ejemplificando tres mtodos: la utilizacin de un diskette, el uso del LILO o desde la aplicacin para DOS LOADLIN. Nuestro sistema tendr que tener la posibilidad de imprimir y es por ello que ejemplificaremos dos mtodos para imprimir. Uno en la mquina local y otro en una mquina remota. Como todo sistema requerir en algn punto que se instale un kernel nuevo o se actualice parte del mismo, veremos aspectos generales sobre las actualizaciones necesarias para nuestro sistema.

La cuenta root y sus implicaciones


Si no eres root no eres nadie En este punto sabemos que la cuenta raz, que tiene el nombre de usuario root, es el ms importante del sistema y adems es quien tiene los privilegios ms altos para interactuar con l. Tambin sabemos, y esto a fuerza de malas experiencias en muchas ocasiones, que el ser root requiere responsabilidades y el estar conciente de lo que se hace con este tipo de cuentas ya que muchas veces un error cometido ser irreparable. Los usuarios del sistema estn bastante restringidos en lo que pueden realizar, ya sea con los archivos de otros usuario o archivos de sistema, ya que no tienen los permisos necesarios para poder modificarlos o borrarlos e incluso en muchos casos leerlos. Todas estas limitaciones se terminan con la cuenta root ya que posee acceso a cada rea del sistema pudiendo borrar, crear, modificar archivos de cualquier parte del sistema as como cambiar permisos y dueos de estos. Puede ejecutar cualquier programa y hasta incluso si se le ocurriese podra literalmente matar al sistema por completo. Esto es as ya que es necesario que exista por lo menos una persona que pueda intervenir al sistema si es necesario y que tenga los privilegios adecuados para poder forzar al sistema a realizar algo. La idea es que esta cuenta se utilice sobriamente, nicamente cuando es necesario y no en cualquier momento. Para ejemplificar un hecho que seria peligroso si e fuerce root, si un usuario normal de le ocurriese borrar los archivos que se encuentran en el directorio /boot el sistema no lo dejara, en cambio si es el root quien lo pide, lo que este en /boot desaparecer muchas veces, de acuerdo a la configuracin de GNU/Linux que se posea, cargndose al kernel completo con ellos. Para evitar cualquier accidente al utilizar la cuenta root es recomendable los siguientes pasos a seguir 1. Pensarlo dos veces antes de apretar la tecla Enter en un comando que pueda causar algn dao. Por ejemplo si se esta borrando algn archivo de configuracin releer la lnea del comando completo. 2. No acostumbrarse a usar root. Cuando ms confortable se encuentre uno trabajando con el usuario root, ms seguro que se confundirn los privilegios con los de un usuario normal. 3. Usar siempre un marcador distinto para un usuario normal y el root. Esto ya viene por defecto en la mayora de las distribuciones pero siempre esta bien repetirlo. Un signo $ o % representara al usuario normal y un # representara al root.

4. Conectarse como usuario root solo cuando sea absolutamente necesario. Y desconectarse tan pronto como se haya terminado el trabajo. Cuando menos se use la cuenta root, menos posibilidades de cometer un error habr. Existen personas que son verdaderos hackers de Unix que utilizan la cuenta root para todo, pero hay que recordar dos cosas con respecto a esto. Lo primero que no estamos a esa altura de conocimiento sobre Unix y segundo que estas personas en algn momento han hecho algo que les a hecho perder su informacin. La cuenta root es poderosa en el sistema, y ese poder es peligroso muchas veces para el resto de los usuarios del sistema. La tendencia a la destruccin de un usuario con el poder de root es perjudicial para el resto del sistema ya que en sucesivas oportunidades se a sabido de casos en los que los administradores del sistema leen correo de otro usuarios o borran archivos sin avisar a nadie jugando con el sistema informtico como si fuesen nios y no como verdaderos administradores. Por ello se requiere cierto grado de madurez y responsabilidad adems del conocimiento necesario para poder llegar a ser administrador de un sistema y es en nuestros sistemas que tendremos en el hogar o en la oficina con GNU/Linux donde tendremos que aprender a serlo.

Gestin de usuarios
El sistema mantiene una cierta cantidad de informacin acerca de cada usuario. Dicha informacin se resume a continuacin. nombre de usuario El nombre de usuario es el identificador nico dado a cada usuario del sistema. Ejemplos de nombres de usuario son: shrek, burro y fiona. Se pueden utilizar letras y dgitos junto a los caracteres "_" (subrayado) y el punto. Los nombres de usuario se limitan normalmente a 8 caracteres de longitud. clave El sistema tambin almacena la clave encriptada del usuario. El comando passwd se utiliza para poner y cambiar las claves de los usuarios. user ID El user ID, o UID, es un nmero nico dado a cada usuario del sistema. El sistema normalmente mantiene la pista de la informacin por UID, no por nombre de usuario. group ID El group ID, o GID, es la identificacin del grupo del usuario por defecto. nombre completo El nombre real o nombre completo del usuario se almacena junto con el nombre de usuario. Por ejemplo, el usuario burro puede tener el nombre "Platero Equino" en la vida real. directorio inicial

El directorio inicial es el directorio en el que se coloca inicialmente al usuario en tiempo de conexin. Cada usuario debe tener su propio directorio inicial, normalmente situado bajo /home. intrprete de comando El intrprete de comando del usuario es el intrprete de comandos que es arrancado para el usuario en tiempo de conexin. Ejemplos pueden ser /bin/bash y /bin/tcsh. El archivo /etc/passwd contiene la informacin anterior acerca de losusuarios. Cada lnea del fichero contiene informacin acerca de un nico usuario. El formato de cada lnea es
nombre:clave_encriptada:UID:GID:nombre completo:dir_inicio:intrprete

Un ejemplo puede ser


shrek:Xv8Q981g71oKK:102:100:Shrek Ogre:/home/shrek:/bin/bash

El primer campo , "shrek", es el nombre de usuario. El siguiente campo, "Xv8Q981g71oKK", es la clave encriptada. Las claves no se almacenan en el sistema en ningn formato legible por el hombre. Las claves se encriptan utilizndose a s mismas como clave secreta. En otras palabras, slo si se conoce la clave, sta puede ser desencriptada. Esta forma de encriptacin es bastante segura. Algunos sistemas utilizan "claves en sombra" (shadow) en la que la informacin de las claves se relega al fichero /etc/shadow. Puesto que /etc/passwd es legible por todo el mundo, /etc/shadow suministra un grado extra de seguridad, puesto que ste no lo es. Las claves en sombra suministran algunas otras funciones como puede ser la expiracin de claves; no entraremos a detallar estas funciones aqu. El tercer campo, "102", es el UID. Este debe ser nico para cada usuario. El cuarto campo,"100", es el GID. Este usuario pertenece al grupo numerado 100. La informacin de grupos, como la informacin de usuarios, se almacena en el fichero /etc/group. El quinto campo es el nombre completo del usuario, "Shrek Ogre". Los dos ltimos campos son el directorio inicial del usuario, /home/shrek y el intrprete de conexin /bin/bash, respectivamente. No es necesario que el directorio inicial de un usuario tenga el mismo nombre que el del nombre de usuario. Sin embargo, ayuda a identificar el directorio.

Borrando usuarios
Anteriormente vimos como podemos crear un usuario para empezar a utilizar el sistema, y este mtodo puede emplearse para la creacin de cualquier otro usuario. De forma parecida, borrar usuarios puede hacerse con los comandos userdel o deluser dependiendo del software instalado en el sistema. Si se desea "deshabilitar" temporalmente un usuario para que no se conecte al sistema (sin borrar la cuenta del usuario), se puede prefijar con un asterisco ("*") el campo de la clave en /etc/passwd.Por ejemplo, cambiando la lnea a
shrek:*Xv8Q981g71oKK:102:100:Shrek Ogre:/home/shrek:/bin/bash

evitar que shrek se conecte. Despus de que haya creado un usuario, puede necesitar cambiar algn atributo de dicho usuario, como puede ser el directorio inicial o la clave. La forma ms simple de hacer esto es cambiar los valores directamente en /etc/passwd. Para poner clave a un usuario, utilice el comando

passwd. Por ejemplo


[root@pantano:~]# passwd burro

cambiar la clave de burro. Slo root puede cambiar la clave de otro usuario de sta forma. Los usuarios pueden cambiar su propia clave con passwd tambin. En algunos sistemas, los comandos chfn y chsh estn disponibles, permitiendo a los usuarios el cambiar sus atributos de nombre completo e intrprete de conexin. Si no, deben pedir al administrador de sistemas que los cambie por ellos.

Grupos
Como hemos citado anteriormente, cada usuario pertenece a uno o ms grupos. La nica importancia real de las relaciones de grupo es la perteneciente a los permisos de ficheros, como dijimos anteriormente cada fichero tiene un "grupo propietario" y un conjunto de permisos de grupo que define de qu forma pueden acceder al fichero los usuarios del grupo. Hay varios grupos definidos en el sistema, como pueden ser bin, mail, y sys. Los usuarios no deben pertenecer a ninguno de estos grupos; se utilizan para permisos de ficheros del sistema. En su lugar, los usuarios deben pertenecer a un grupo individual, como users. Si se quiere ser detallista, se pueden mantener varios grupos de usuarios como por ejemplo estudiantes, soporte y facultad. El fichero /etc/group contiene informacin acerca de los grupos. El formato de cada lnea es
nombre de grupo:clave:GID:otros miembros

Algunos ejemplos de grupos pueden ser:


root:*:0: users:*:100:fiona,burro,shrek invitados:*:200: otros:*:250:shrek

El primer grupo, root, es un grupo especial del sistema reservado para la cuenta root. El siguiente grupo, users, es para usuarios normales. Tiene un GID de 100. Los usuarios fiona y pedro tienen acceso a este grupo. Recurdese que en /etc/passwd cada usuario tiene un GID por defecto. Sin embargo, los usuarios pueden pertenecer a mas de un grupo, aadiendo sus nombres de usuario a otras lneas de grupo en /etc/group. El comando groups lista a qu grupos se tiene acceso. El tercer grupo, invitados, es para usuarios invitados, y otros es para "otros" usuarios. El usuario shrek tiene acceso a ste grupo. Como se puede ver, el campo "clave" de /etc/group raramente se utiliza. A veces se utiliza para dar una clave para acceder a un grupo. Esto es raras veces necesario. Para evitar el que los usuarios cambien a grupos privilegiados (con el comando newgroup), se pone el campo de la clave a "*". Se pueden usar los comandos addgroup o groupadd para aadir grupos a su sistema. Normalmente es ms sencillo aadir lneas a /etc/group uno mismo, puesto que no se necesitan ms configuraciones para aadir un grupo. Para borrar un grupo, slo hay que borrar su entrada de /etc/group.

Poniendo reglas al sistema


El SO Unix no fue diseado desde sus principios pensando en la seguridad entre los usuarios del sistema. El pensar que usuarios acadmicos irrumpieran en reas que no les pertenecan no se tomaba en como algo posible para los primeros tiempos en que UNIX estaba desarrollndose. El

tener una actitud mano dura con los usuarios no ayudar a que estos traten de saltarse las limitaciones que le podamos haber impuesto. Puede ser que en un ambiente militar esto funcione pero no ser igual en un sistema universitario o en una empresa. Lo que si tiene sentido es el escribir una serie sencillas de reglas que el usuario pueda seguir y que tienen que ir de acuerdo a las polticas del rea donde se esta implementando el sistema informativo. Puede darse el caso de que existan reglas que estn en contra de las polticas o que no estn bien explicadas por lo que ser difcil de cumplir. Tambin esta el caso de que si las reglas son por dems de restrictivas con el usuario ste tratar de saltarlas. Otro caso son los usuarios que por desconocimiento de estas reglas realizan acciones prohibidas. Por ejemplo, envan mails de 20 MB por la red saturando la conexin dado que no se especifica claramente que no pueden mandarse mails con adjuntos tan grandes. Si nadie se lo informa al usuario no podemos pedirle que obedezca. Los motivos por los cuales las reglas se implementan debern estar claros, ya que los usuarios se sentirn tentados a hacer cosas que estn prohibidas por naturaleza, sin ninguna otra explicacin.

Iniciando el sistema
Nuestro sistema GNU/Linux tiene varias formas de ser iniciado bien sea desde floppy disk o desde el disco rgido. A continuacin veremos las tres formas que son indudablemante las ms populares.

Utilizando un disquete de arranque


Mucha gente arranca Linux utilizando un floppy disk de arranque que contiene una copia del ncleo de Linux. A este ncleo se le indica la particin raz de Linux para que sepa donde buscar en el disco rgido el sistema de ficheros raz. El comando rdev puede ser utilizado para poner la particin raz en la imagen del ncleo. Por ejemplo, este es el tipo de floppy creado por Slackware durante la instalacin. [1] Para crear su propio disquete de arranque, localicemos en primer lugar la imagen del ncleo en su disco duro. Debe estar en el directorio /boot o /. Algunas distribuciones utilizan el fichero /vmlinux para el ncleo. En su lugar, puede que tenga un ncleo comprimido. Un ncleo comprimido se descomprime a s mismo en memoria en tiempo de arranque, y utiliza mucho menos espacio en el disco duro. Si se tiene un ncleo comprimido, puede encontrarse en el fichero /boot/zImage o /zImage. Algunas distribuciones utilizan el fichero /vmlinuz para el ncleo comprimido. Una vez que se sabe donde est el ncleo, podemos usar el comando mkbootdisk con el que podremos hacer un disco de arranque
[root#pantano:~]# mkbootdisk --device /dev/fd0 2.4.26

donde 2.4.26 es el nombre del ncleo que actualmente esta corriendo. De esta forma se crear un sistema de archivos en el floppy que contendr la imagen del kernel y los mdulos necesarios para funcionar. Con este floppy arrancaremos ahora Linux.

Utilizando LILO
Otro mtodo de arranque es utilizar LILO, un programa que reside en el sector de arranque del disco duro. Este programa se ejecuta cuando el sistema se inicia desde el disco duro, y puede arrancar automticamente Linux desde una imagen de ncleo almacenada en el propio disco duro. LILO puede utilizarse tambin como una primera etapa de carga de varios sistemas operativos, permitiendo seleccionar en tiempo de arranque qu sistema operativo (como GNU/Linux o MS-

DOS) arrancar. Cuando se arranca utilizando LILO, se inicia el sistema operativo por defecto, a menos que pulse TAB durante la secuencia de arranque. Si se pulsa esta tecla, se le presentar un indicador de arranque, donde debe teclear el nombre del sistema operativo a arrancar (como puede ser "linux" o "msdos"). La forma ms simple de instalar LILO es editar el fichero de configuracin, /etc/lilo.conf, y ejecutar el comando
[root@pantano:~]# /sbin/lilo

El fichero de configuracin de LILO contiene una "estrofa" para cada sistema operativo que se pueda querer arrancar. La mejor forma de mostrarlo es con un ejemplo de un fichero de configuracin LILO. El ejemplo siguiente es para un sistema que tiene una particin raz Linux en /dev/hda2 y una particin Windows en /dev/hda1.
# Le indicamos a LILO que modifique el registro de arranque de # /dev/hda (el primer disco duro no-SCSI). # Si se quiere arrancar desde una unidad distinta de /dev/hda, # se debe cambiar la siguiente linea boot = /dev/hda default=linux # Nombre del cargador de arranque. No hay razon para cambiarlo, # a menos que se est haciendo una modificacion seria del LILO. install = /boot/boot.b # Estrofa para la particin raz de Linux en /dev/hda2. image = /boot/2.4.26 label = linux root = /dev/hda2 vga = ask # # # # # Ubicacin del kernel Nombre del SO (para el menu de arranque) Ubicacin de la particin raz Indicar que pregunte por modos SVGA en tiempo de arranque

# Estrofa para la particin Windows en /dev/hda1. other = /dev/hda1 # Ubicacin de la particin table = /dev/hda # Ubicacin de la tabla de particin para # /dev/hda2 label = W$ # Nombre del SO (para el menu)

La lnea default indica la etiqueta del sistema operativo que arrancar LILO por defecto. Se puede seleccionar otro sistema operativo en el indicador de arranque de LILO, tal y como se indic anteriormente. Recuerde que cada vez que actualice la imagen del ncleo en disco, se debe reejecutar /sbin/lilo para que los cambios queden reflejados en el sector de arranque de su unidad.

Utilizando LOADLIN
Anteriormente dijimos que el sistema de arranque que utilizaba al LILO tenia un problema. Este era que el kernel no poda estar mas all del cilindro 1024 dado que no se cargara. A partir de las nuevas versiones de LILO esto se est solucionando. De esta forma la nica manera que nos quedaba para iniciar GNU/Linux era a travs de un disquete con la subsiguiente lentitud que esto tena. Por esto se desarrollo una aplicacin que permita que arrancramos el ncleo del sistema desde una particin DOS. Esta aplicacin se denomina LOADLIN y lo que hace es sencillo. En un directorio de la particin DOS se guarda el kernel y a partir del comando loadlin se le indica el kernel que se quiere cargar y la particin donde se encuentra GNU/Linux instalado.

C:\> loadlin c:\vmlinuz root=/dev/hda2 ro

De esta forma se saldr de DOS y se cargara el kernel en memoria.

Notas
[1] Las ltimas versiones de Slackware utilizan un mtodo diferente para arrancar desde floppy, utilizando el programa SysLinux

Acerca de impresoras:
Extrado del Printer HowTo de Grant Taylor <gtaylor@cs.tufts.edu> y Brian McCauley <B.A.McCauley@bham.ac.uk> Todo sistema que se precie es capaz de gestionar una o varias impresoras, con uno o varios usuarios, que les envan distintas clases de documentos, ms o menos dignamente. Unix resuelve estos problemas mediante un conjunto de programas, los servidores de impresin, que gestionan los trabajos pendientes, y los encauzan a las impresoras adecuadas, todo de manera completamente transparente al usuario. El camino ms corto en Unix (y GNU/Linux), es enviar los datos a imprimir directamente al dispositivo adecuado. El siguiente comando enva un listado del directorio a la impresora en puerto paralelo (hablando en DOS, LPT1:)
[root#pantano:~]# ls > /dev/lp1

El problema de este mtodo es que no aprovecha las capacidades de multitarea de Linux, debido a que el tiempo que tarda el comando en completarse ser el mismo que emplee la impresora en despachar el trabajo. En una impresora lenta, o en una apagada o sin papel, puede prolongarse un poco. Podramos ejecutar el comando simplemente en segundo plano, pero no adelantaramos mucho. Adems, deber tener privilegios de root. Un remedio mejor es crear un rea de spool, es decir, guardar los datos a imprimir en un fichero temporal, y arrancar un proceso en segundo plano que enve los datos a la impresora, y gestione las incidencias que se presenten. Esencialmente, as funciona el sistema de impresin en Linux. Para cada impresora, se define un rea spool, donde cada trabajo pendiente se almacena en un fichero. Un proceso en segundo plano (llamado el demonio de impresin) analiza metdica y constantemente los ficheros spool, buscando nuevos datos a imprimir. Cuando aparece alguno, son enviados a la impresora apropiada; cuando ms de un fichero est a la espera, se colocan en una cola (el primero que entra es el primero que se procesa), por lo que se habla propiamente de la "cola de impresin". En el caso de impresin remota, los trabajos se gestionan localmente, como cualquier otro, pero el demonio de impresin lo enva a travs de la red hacia el ordenador o impresora destino. La informacin que el demonio de impresin necesita para su trabajo (el dispositivo fsico, el spool de datos, la mquina e impresora remota, etc.) se almacenan en un fichero llamado /etc/printcap, que describiremos ms tarde. En lo sucesivo, el trmino "impresora" se referir a una mquina lgica definida en /etc/printcap. El concepto "impresora fsica", define la cosa que mancha papel. Es perfectamente posible describir mltiples entradas en /etc/printcap que se refieren a una sola impresora fsica, pero por caminos tortuosos. No nos preocupemos, lo aclararemos al describir

printcap.

Lo primero a tener en cuenta


El sistema de impresin de Linux se sustenta en cinco programas, que deberan estar donde aparecen en el siguiente listado, propiedad de root, y grupo lp (o daemon, segn el sistema en concreto)
-rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-x--root root root root root lp lp lp lp lp /bin/lpr /bin/lpq /bin/lpc /bin/lprm /sbin/lpd

Los cuatro primeros tienen por fin enviar, cancelar y examinar los trabajos de impresin. /sbin/lpd es el demonio de impresin. Hay pginas de manual que explican con detalle todas estas rdenes y que debera consultar para ampliar informacin. Los directorios, permisos y propiedad de los ficheros pueden diferir a los de su sistema, aunque no deberan ser MUY distintos. Es importante saber que, por defecto, lpr, lprm, lpc y lpq trabajan con una impresora llamada "lp". Si define la variable de entorno PRINTER con el nombre de una impresora, pasar a ocupar el valor por defecto. Se puede indicar sobre la marcha una impresora distinta con la opcin -P impresora en la lnea de rdenes.

Los directorios fundamentales.


Realmente, slo hay un directorio importante: el rea de spool donde se almacenan los datos a la espera de que lpd decida qu hacer con ellos. Sin embargo, un sistema tpico debera configurarse en varios directorios, uno para cada impresora, lo que facilita notablemente el mantenimiento. En la mayora de las instalaciones, /var/spool/lpd es el directorio spool principal, y cada impresora tiene un subdirectorio particular, con el mismo nombre que la impresora. As, si tiene una impresora llamada PJL-16 que admite PostScript y HPGL, debera crear dos directorios, por ejemplo /var/spool/lpd/PJL-16-ps y /var/spool/lpd/PJL-16-hpgl. Los directorios temporales deberan pertenecer a root, grupo lp; user y group deben poder leer y escribir, y el resto, leer (permiso 0775). Para cada directorio de impresora, la orden adecuada es
[root#pantano:~]# chmod ug=rwx,o=rx PJL-16-ps [root#pantano:~]# chgrp lp PJL-16-ps

O, en otra notacin
[root#pantano:~]# chmod 775 PJL-16-ps [root#pantano:~]# chown .lp PJL-16-ps

Los destinos, permisos y propietarios aqu indicados deben considerarse como indicativos, pues pueden variar entre distintos sistemas e instalaciones. Adems de los programas ya tratados, cada directorio temporal debe contener como mnimo cuatro ficheros, .seq , errs , lock y status, y debern tener permisos 0664. El fichero .seq contiene la secuencia de trabajos enviados. status contiene el mensaje que devuelve "lpc stat". El fichero lock impide al lpd imprimir al tiempo dos trabajos en la misma impresora, y errs guarda un registro de los fallos de la impresora. El fichero errs es actualmente potestativo, y ahora puede llamarse como le apetezca. Su nombre se especificar en /etc/printcap. Debe, sin embargo,

existir un fichero que permita a lpd registrar los mensajes de error.

/etc/printcap
/etc/printcap es un fichero texto, modificable con su editor favorito. Su propietario debe ser root y debe tener permisos 0644. Aunque a golpe de vista parezca tan comprensible como la piedra Rosetta, su estructura es muy sencilla y asequible. Parte de la mala fama se debe a que algunas distribuciones no incluyen pgina de manual para printcap, y el hecho de que muchos printcap estn generados por programas, o por gente cuya manera de despreciar al gnero humano es omitir comentarios que ayuden a su comprensin. Desde aqu hacemos un llamamiento para que su fichero printcap sea tan legible como sea posible. Cada entrada de printcap describe una impresora. Mejor an, cada entrada de printcap provee una denominacin lgica para un dispositivo fsico, y describe cmo deben los datos ser enviados y manejados por l. Por ejemplo, una entrada de printcap definir qu puerto vamos a usar, qu directorio spool, qu proceso deben soportar los datos, qu clase de errores debemos notificar, qu volumen de datos se permiten enviar como mximo, o limitar el acceso de ciertos dispositivos. Adems, podemos definir distintos modos de procesar datos para una misma impresora. Por ejemplo, una misma impresora de HP puede manejar datos en formatos PostScript, HPGL y PCL, dependiendo de la secuencia de rdenes que le enviamos al comienzo de cada trabajo. Tendra sentido definir los tres modos de trabajo como sendas impresoras, cada una de las cuales procesar los datos dependiendo del modo de trabajo. Los programas que generan datos ps se enviarn a la impresora PS, los dibujos HPGL a la impresora HPGL, y as sucesivamente. Llamaremos "filtros" a los programas que procesan los datos a imprimir. Un filtro puede incluso no enviar ningn dato al puerto. Un ejemplo tpico de entrada en /etc/printcap podra ser
# Ejemplo de printcap con dos alias impresora HP|HP850C:\ # lp es el dispositivo de impresin, en este caso, # la primera impresora :lp=/dev/lp1:\ # sd indica el directorio spool :sd=/var/spool/lpd/HP850C:

Como vemos, cada entrada de /etc/printcap se estructura en una serie de campos, encabezados por una etiqueta, y limitados por dos puntos, a excepcin del primer campo, que describe la impresora. Los campos pueden tener tres tipos de valores: texto, lgico y numrico, en los que nos extenderemos ms adelante. La primera lnea de la entrada determina el nombre y alias de la impresora. La impresora por defecto debera llamarse "lp"; por ejemplo, si la impresora del ejemplo anterior es la nica que tenemos, la primera lnea sera
# Ejemplo para la impresora por defecto lp|HP850C:\

Slo podemos tener una impresora llamada "lp". Podemos usar el nombre que nos apetezca como "La Picadora de papel del despacho de Gertrudis", aunque no parezca quiz muy prctico. Los siguientes campos son los ms comunes, y los ms importantes:

Tabla 1. Campos en /etc/printcap Campo lp sd lf if rm rp sh sf Tipo Texto Texto Texto Texto Texto Texto Lgico Lgico Descripcin Dispositivo de impresin (ej. /dev/lp1) Nombre del directorio tampon de esta impresora Fichero que almacena el registro de errores Nombre del filtro de entrada Nombre del host de impresion remota Nombre de la impresora remota Suprime las pginas que separan los trabajos Suprime las paginas en blanco al final del trabajo

mx Numrico Tamao mximo del trabajo de impresin (en bloques) Veamos ahora estos campos con un poco ms de detalle. lp Apunta al puerto/dispositivo de impresin. Si especificamos /dev/null como dispositivo, el resto de los procesos se ejecutan normalmente, pero los datos de salida van a parar al inodoro. No se utiliza a excepcin de las pruebas de configuracin del dispositivo. Cuando configure una impresora remota con los campos rm y rp , debera poner ":lp=:" en /etc/printcap, indicando que no est asignada a ningn dispositivo local.. No deje este campo en blanco a menos que use una impresora remota, o el demonio de impresin se quejar amargamente, si no especifica un dispositivo de impresin. lf Guarda un registro de los errores de impresin. Cualquier fichero que especifique deber existir antes de su uso, o no se registrarn las incidencias. if Indica el nombre del filtro de impresin a ejecutar. Los filtros son programas que reciben datos por la entrada estndar, y los devuelven procesados por la salida estndar. Un empleo tpico es detectar texto llano y convertirlo en PostScript para imprimirlo en ese tipo de trastos. Son muy tiles, por ejemplo, para eliminar el efecto escalera, o cambiar la pgina de cdigos sin necesidad de cambiar la configuracin de la impresora cada vez que la usemos entre UNIX y DOS. Cuando se especifica un filtro de entrada, el demonio de impresin no enva los datos pendientes al dispositivo especificado. En su lugar, arranca el filtro y asigna el fichero temporal a la entrada estndar, y el dispositivo de impresin como salida estndar. rm y rp Controlan el destino de la impresin remota. Enviar el documento a imprimir a una impresora remota es tan fcil como indicar el anfitrin en rm, la impresora correspondiente en rp, y asegurarse que lp est vaco. Fjese en que los datos se tamponan localmente antes de ser enviados, y que le ejecutar cualquier filtro que especifique. Una entrada tpica de /etc/printcap en la mquina local (pera.huerta.net) para trabajar sobre la impresora picapapel, en la estacin rbano.huerta.net (remota), sera:

picapapel::lp=::rm=rbano.huerta.net::rp=picapapel:\ :sd=/var/spool/lpd/picapapel:

En la mquina remota necesitar que /etc/hosts.equiv o /etc/hosts.lpd contenga la lnea pera.huerta.net; Tenga cuidado con los permisos de acceso. sh y sf Portadillas y separadores. Salvo que haya mucha gente distinta usando su impresora, probablemente no estar interesado en las pginas separadoras de trabajos. Las pginas de fin de trabajo son particularmente molestas cuando se trabaja con procesadores de texto, que componen pginas completas, por lo que si especificamos sf, tendremos al final de cada trabajo una pgina en blanco. sf es muy til, sin embargo, si usamos la impresora para listar directorios, ficheros en crudo ..., asegurndonos que el trabajo sale completo de la impresin. Se puede presentar un problema si tenemos una impresora PostScript, al quedar residente el ltimo tipo de letra utilizado. Con el campo :tr: lo evitaremos. Es preferible en estos casos dejar :sh:, y que sean los filtros quienes se encarguen de generar las portadillas. mx Limita el tamao del spool de datos, sealando una cantidad en bloques de 1 K ( 1024 bits ). Si mx=0, el lmite viene dado por el espacio disponible en disco. Recuerde que lo que limitamos es el tamao del spool, no la cantidad de datos impresos. Si intentamos sobrepasar el lmite, el fichero simplemente se trunca, y el usuario recibe el mensaje
lpr: fichero: copy file is too large.

mx es til si tiene programas que accidentalmente pueden generar un volumen desproporcionado de datos a imprimir (imgenes, por ejemplo); para impresoras ps, no suele tener mucho inters, pues un volumen pequeo de datos en formato ps pueden generar una notable cantidad de papel impreso. Podemos sustituir el lmite de mx escribiendo en cada directorio spool un fichero llamado minfree que contiene el espacio mnimo disponible que permita aceptar trabajos, en forma de fichero texto con el nmero de bloques mnimos disponibles. Normalmente, suele ser un enlace con el original en /var/spool/lpd, ya que es inusual que cada impresora deba tener un mnimo diferente. Probemos ahora /etc/printcap con un ejemplo. El siguiente guin de shell es un filtro de entrada muy simple. Slo encadena su entrada al final de un fichero en /tmp, tras una pancarta adecuada. Usaremos este filtro en el campo if, y enviaremos los datos a /dev/null, ahorrndonos las quejas del demonio especificando un dispositivo de impresin.
#!/bin/sh # Este filtro debera colocarse en el directorio tampon, # con el nombre filtro_entrada, propiedad de root, # grupo lp y permisos 0755 # echo -------------------------------------->/tmp/testlp.out date >> /tmp/testlp.out echo -------------------------------------->>/tmp/testlp.out cat

Y aqu tenemos nuestra flamante entrada en /etc/printcap. Vea que el formato es razonablemente inteligible, usando caracteres de continuacin de lnea "\" al final de cada una, excepto la ltima (de hecho, cada entrada en /etc/printcap es una sola lnea)

impre|PLJ-H1998:\ :lp=/dev/null:\ :sd=/var/spool/lpd/PLJ-H1998:\ :lf=/var/spool/lpd/PLJ-H1998/errores:\ :if=/var/spool/lpd/PLJ-H1998/filtro_entrada:\ :mx#0:\ :sh:\ :sf:

No deje espacios en blanco, o no funcionar (le aparecern impresoras sin nombre, no lograr volcar los trabajos, y se acumularn en cola generosamente) Ahora, hagamos que esto trabaje 1. DEBE SER EL SUPERUSUARIO (root), tanto si le gusta como si no. 2. Compruebe los permisos y situaciones de lpr, lprm, lpc, lpq y lpd. 3. Cree el directorio spool de su impresora: (recuerde que el propietario debe ser root, el grupo lp, y los permisos 0775 con las rdenes
mkdir /var/spool/lpd /var/spool/lpd/impre chown root.lp /var/spool/lpd /var/spool/lpd/impre chmod ug=rwx,o=rx /var/spool/lpd /var/spool/lpd/impre

4. En el directorio spool cree los ficheros necesarios, con los debidos permisos y propietarios
cd /var/spool/lpd/impre touch .seq errores status lock chown root.lp .seq errs status lock chmod ug=rw,o=r .seq errs status lock

5. Cree el script filtro de entrada en el directorio spool. Use por ahora el filtro de prueba anterior. Asegrese que el fichero pertenece a root.lp, y es ejecutable para todos. 6. Cree el fichero /etc/printcap tal y como lo hemos descrito en el punto anterior. Su propietario ser root y sus permisos 0644. 7. Compruebe que rc.local (normalmente en /etc/rc.d/) contiene la lnea /sbin/lpd, y adala si no est. Esto hace que arranque el demonio de impresin al arrancar. De todos modos puede arrancarlo a mano con la orden lpd. 8. Haga una prueba: cruce los dedos y teclee
ls -l | lpr -Pimpre

9. Busque en /tmp un fichero llamado testlp.out. Debera contener un listado del directorio, con un encabezado. 10. Si ha funcionado (y no dudamos que habr sido as), edite /etc/printcap, y copie la entrada de prueba en el mismo fichero. En la primera entrada, cambie el nombre de la impresora a testlp, o el que usted prefiera, pero que no use como nombre real de impresora. En la segunda entrada (que ahora ser la de su impresora real), cambie el contenido de lp=/dev/null al del puerto de impresora (normalmente ser /dev/lp1) de su ordenador, salvo que vaya a utilizar una impresora remota, en cuyo caso deber definir rm y rp. Cambie el nombre del filtro if si tiene ya uno previsto, o suprmalo si no va a utilizar ninguno. 11. Reinicie el sistema, o mate el demonio de impresin y arrnquelo, ya que lpd slo lee /etc/printcap al comenzar su trabajo.

12. Haga una prueba, y aprecie lo bien que funciona su impresora. Para aadir nuevas impresoras, slo tendr que repetir la entrada de printcap, con las modificaciones pertinentes a cada dispositivo.

Impresin remota e impresin local


La impresin remota nos permite enviar trabajos de impresin desde una mquina, hacia otra (computadora/impresora) conectada a una red; por ejemplo, nuestro equipo funciona de servidor en una red, o si una impresora asignada a nuestra mquina debe ser accesible por otros ordenadores. Imprimimos localmente cuando usuarios de nuestra mquina envan trabajos a una impresora conectada directamente a la misma. Como primer paso, cualquier mquina que intente imprimir en su sistema, debe estar registrada en cualquiera de los ficheros /etc/hosts.equiv o /etc/hosts.lpd, que son simples ficheros de texto, con un nombre de maquina por lnea. Es preferible el segundo, reservando el primero para proporcionar mayores permisos de acceso, lo que debera ser evitado en lo posible. Puede restringirse el uso tanto por nombre como por grupos. Especifique los grupos autorizados con uno o varios campos :rg: en /etc/printcap. :rg=admin: slo autorizar el acceso a la impresora a los usuarios asignados al grupo admin. Puede tambin limitar el acceso a aquellos usuarios con cuenta en su sistema utilizando el campo lgico :rs:. La configuracin en el sistema cliente sera la siguiente
lp|Remote printer entry:\ :lp=/dev/null\ :rm=192.168.1.1:# Aqu puede ir tambin #servidor de impresin. :rp=lp:\ :sd=/var/spool/lpd/remote:\ :mx#0:\ :sh:

el

nombre

del

Actualizacin del sistema


Una tarea que es muy importante para el administrador es la de mantener actualizado el sistema y la instalacin de nuevo software en l. Dado que el mundo de GNU/Linux se mueve muy rpidamente se tendrn que tener los recaudos necesarios para que el sistema que se esta administrando no quede pronto obsoleto. Ahora esto no hay que confundirlo con que se tenga que estar pendiente de todo lo que cambia en nuestro sistema, ya que si as lo hiciramos nos pasaremos mas tiempo actualizndolo que usndolo. Mucha gente siente la necesidad de actualizar el sistema cada vez que una versin nueva de la distribucin que se esta usando sale, pero esto tambin es una perdida de tiempo ya que no todo el sistema cambia por lo que no se justifica la compra de una nueva distribucin o el bajarse los 6 discos que la componen. Por esto, la mejor forma de realizar una actualizacin del sistema es hacindola a mano, lo que trataremos de ver con unos puntos clave del sistema como lo son el kernel, las bibliotecas y el software esencial para el funcionamiento ptimo del sistema.

Actualizando el ncleo
La actualizacin del ncleo o kernel del sistema no es bajarse el cdigo fuente de este y realizar una

compilacin. Esto permite habilitar ciertas funciones que no vienen en los kernel pre-compilados o puede desactivar otras que no son necesarias. Los fuentes del kernel se pueden obtener de numerosos sitios de ftp. El ms conocido es el de kernel.org cuya pgina es http://www.kernel.org y el ftp es ftp://ftp.kernel.org . Los kernel se encuentran indexados por el nmero de la versin (ej v2.4) donde se encontraran los sucesivos niveles de parche de cada versin (ej 2.4 parche 18 seria 2.4.18). El kenel vendr comprimido en dos formas posibles, tar.gz y tar.bz2. Este ltimo sistema de compactacin es mucho ms eficiente que gz. El mtodo para descomprimirlos es el habitual, se recomienda la lectura de las pginas de manual de cada uno de los mtodos de compactacin para efectuarlo. Se deber realizar la descompresin en el directorio /usr/src donde se creara un directorio con el nombre de la versin del kernel y su nivel de parche. Existe un enlace que estar apuntando a los fuentes del kernel anterior denominado linux. Este enlace deber cambiarse para que apunte al cdigo del kernel nuevo.
[root#pantano:/usr/src]# ln -sf /usr/src/2.2.16 /usr/src/linux

Hay que tener en cuenta que para realizar la compilacin del kernel se deber contar con los compiladores necesarios. Estos son el gcc y el g++ que son los compiladores de C y C++ que debern estar instalados en el sistema. Mas adelante veremos como podremos tener una versin reciente de estos. Una vez que nos sesionamos que tenemos todo lo necesario se proceder a ejecutar el programa de configuracin del kernel. Existen 3 formas de realizar esto: La primera y menos recomendable es el ejecutar en el directorio /usr/src/linux la sentencia "make config" que correr un script que nos preguntaran uno a uno todos los aspectos del kernel. Esta forma es por dems de tediosa y no la veremos aqu. Otra forma es realizarlo a travs de un front-end grfico realizando un make xconfig con lo que tendremos una vista bastante cmoda para efectuar la configuracin. El problema que puede presentarse aqu es que no se cuente con los paquetes de desarrollo del lenguaje Tk que se utilizan para el programa en X por lo que posiblemente no funcione en algunos sistemas. Una tercer forma es la de ejecutar make menuconfig que nos levantar un programa de configuracin pero de consola y es la forma que funciona de forma ms cmoda. La sugerencia es que se tome como punto de partida la configuracin del kernel anterior. Esta puede tomarse al haberse guardado en un archivo que podr tener un nombre como "configuracin.kernel.fecha" o el que se les ocurra. SI no lo tienen lo pueden generar a partir del programa de configuracin del kernel anterior solicitndole que guarde la configuracin en un archivo. Opcin que aparece en la parte inferior de la ventana de configuracin en el menuconfig. Ahora se puede tomar con la opcin de carga de configuracin del kernel nuevo, la configuracin anterior y modificarla segn nuestros requerimientos. Una vez realizado los cambios de configuracin necesarios se recomienda el guardar la configuracin en un archivo, adems de en el mismo kernel, para futuros cambios. Cuando se termina de configurar, se le instar al ejecutar make dep y make clean. Al hacer make dep se prepararn las dependencias necesarias para efectuar la compilacin. Cuando acabe, hay que hacer un make clean. Esto elimina ficheros objetos y dems de la versin anterior. No olvidar este paso. Despus de preparar dependencias, puede ejecutar make zImage o make zdisk (esta es la parte que tarda ms tiempo). make zImage compilar el ncleo y lo dejar comprimido en arch/i386/boot/zImage junto a otros ficheros. Con make zdisk el nuevo ncleo se copiar adems en el disquete que est puesto en la disquetera /dev/fd0. Esto es interesante para probar ncleos; si explota (o simplemente no hace nada) se quita el disquete de la disquetera y se

podr arrancar el ncleo antiguo. Adems sirve para arrancar si se borr accidentalmente el ncleo del disco duro. Otra opcin es efectuar la compactacin del kernel con un mtodo ms eficiente dado que el LILO se pone nervioso con ncleos muy grandes. Por esto se podr efectuar un make bzImage lo que compactara an mas el kernel. Un ncleo comprimido se descomprime automticamente al ser ejecutado. Una vez que se tenga un nuevo ncleo que parezca funcionar como se desea, ser el momento de instalarlo. Casi todo el mundo utiliza LILO (LInux LOader) para esto. Una forma muy cmoda de llevar todo el tema del LILO, si lo tenemos instalado, y las compilaciones, etc, es aadir lo siguiente en el /etc/lilo.conf
... image=/vmlinuz label=ultimo root=/dev/hd[loquesea] read-only append = "" image=/vmlinuz.old label=anterior root=/dev/hd[loquesea] read-only append = ""

Al compilar, si lo hacemos con la secuencia de comandos


[root#pantano:/usr/src/linux]# [root#pantano:/usr/src/linux]# [root#pantano:/usr/src/linux]# [root#pantano:/usr/src/linux]# [root#pantano:/usr/src/linux]# make make make make make dep clean zlilo modules modules_install

El make zlilo renombrar la anterior imagen del kernel a /vmlinuz.old, dejando la nueva como /vmlinuz, e instalar LILO, a continuacin con lo cual lo hacemos todo automticamente. La rdenes make modules; make modules_install compilarn los mdulos que hayamos seleccionado, y los instalarn. No hay olvidar ejecutar depmod -a en cuanto hayamos arrancado con dicho ncleo. En caso de que estemos compilando por segunda vez una misma versin de ncleo, y hayamos variado el nmero de mdulos a compilar, es posible que la ejecutar make dep nos encontremos con un mensaje de error; esto se debe a que los antiguos mdulos que no hayamos compilado ahora no son borrados. Pueden borrarse tranquilamente.

Actualizando las bibliotecas


La mayor parte del software de GNU/Linux esta compilado para que utilice bibliotecas compartidas, por esto muchas veces se requieren juego de bibliotecas mas recientes para un determinado programa. Las bibliotecas son compatibles en forma ascendente, es decir que un programa compilado para una versin antigua de bibliotecas funcionar igual con una versin mas reciente de las mismas pero lo contrario no se aplicar. Las ltimas versiones de las bibliotecas de GNU/Linux puede encontrarse en los servidores de ftp://ftp.suncite.unc.edu. Los archivos de "versin" que se encuentran all debern explicar el proceso de instalacin. Se deben bajar los ficheros image-versin.tar.gz y incversin.tar.gz donde versin es la versin de las bibliotecas a instalar, por ejemplo 4.4.1. Son ficheros tar comprimidos con gzip; el fichero image contiene las imgenes de las bibliotecas a instalar en /lib y /usr/lib. El fichero inc contiene los ficheros de inclusin a instalar en /usr/include.

El fichero release-versin.tar.gz debe explicar el mtodo de instalacin detalladamente (las instrucciones exactas varan para cada versin). En general, se necesita instalar los ficheros de bibliotecas .a y .sa en /usr/lib. Estas son las bibliotecas utilizadas en tiempo de compilacin. Adems, los ficheros imagen de las bibliotecas compartidas libc.so.version se instalan en /lib. Estas son las imgenes de las bibliotecas compartidas que son cargadas en tiempo de ejecucin por los programas que utilizan las bibliotecas. Cada biblioteca tiene un enlace simblico utilizando el nmero de versin mayor de la librera en /lib. Por ejemplo, la versin 4.4.1 de la librera libc tiene un nmero de versin mayor de 4. El fichero que contiene la librera es libc.so.4.4.1. Existe un enlace simblico del nombre libc.so.4 en /lib apuntando a este fichero. Por ejemplo, cuando se actualiza de libc.so.4.4 a libc.so.4.4.1, necesita cambiar el enlace simblico para apuntar a la nueva versin. Es muy importante que se cambie el enlace simblico en un solo paso, como se indica ms abajo. Si de alguna forma borrase el enlace simblico libc.so.4, los programas que dependen del enlace (incluyendo utilidades bsicas como ls y cat) dejarn de funcionar. Utilice el siguiente comando para actualizar el enlace simblico libc.so.4 para que apunte al fichero libc.so.4.4.1
[root#pantano:~]# ln -sf /lib/libc.so.4.4.1 /lib/libc.so.4

Se necesita tambin cambiar el enlace simblico libm.so.version de la misma forma. Si se est actualizando a una versin diferente de las bibliotecas, sustituya lo anterior con los nombres adecuados. La nota de la versin de la librera debe explicar los detalles. (Ver seccin sobre enlaces simblicos para ms informacin).

Actualizando gcc
El compilador de C y C++ gcc se utiliza para compilar software en su sistema, siendo el ms importante el ncleo. La versin ms reciente de gcc se encuentra en los servidores FTP de Linux. En sunsite.unc.edu se encuentra en el directorio /pub/Linux/GCC (junto con las bibliotecas). Debe existir un fichero release para la distribucin gcc detallando qu ficheros se necesitan obtener y como instalarlos.

El sistema X-Window Orgenes de X


Vamos a dar un concepto sencillo de X Window y luego lo ampliaremos. El sistema X Window es un mtodo grafico y distribuido para trabajar. Y ahora veremos por que. El X Window System es prcticamente el estndar de los entornos grficos para usuarios de Unix, pero no es solo eso, es un completo sistema para redes que permite ejecutar aplicaciones X desde una computadora en la otra parte del globo de donde se encuentra el servidor, a travs de Internet. Primero lo primero. El consorcio de tecnologa X requiere que se usen los siguientes nombres cuando se refiere al sistema X Window X X Window System X Version 11

X Window System, Version 11 X11 Por lo tanto cualquiera de estos nombres es sinnimo del mismo software. X Window SystemTM es una marca registrada de X Consortium, Inc. El X11 se desarroll gracias a la cooperacin entre DEC (Digital Equipment Corporation, luego adquirida por Compaq) y el proyecto Athena del MIT (Massachussets Institute Of Technology). La primera versin, la X11R1, sali en septiembre de 1987. Desde la versin 6 (X11R6) la X Consortium Inc y desde 1996 The Open Group continuaron con el desarrollo del X Window System. Existe una implementacin libre del sistema X para sistemas Unix y se denomina XFree86. Este se sigue desarrollando por programadores en todo el mundo, que se unieron en 1992, formando el Xfree86-Team. De esta unin surgi en 1994 la empresa The XFree86 Proyect Inc cuyo objetivo es poner Xfree86 a la disposicin de un amplio pblico y contribuir con el desarrollo e investigaciones del sistema X Window. Es de esta manera que el sistema operativo GNU/Linux adopta esta distribucin libre del sistema X para brindar un entorno grfico mas amigable.

X - Puntos bsicos
Una sesin de X esta compuesta por lo general de varias ventanas donde cada una de ellas ejecutan un programa aislado. Al igual que los programas en cualquier otro sistema, los programas que se ejecutan en X varan en cuanto a su funcionalidad. Algunos necesitan de la interaccin con el usuario y otros solo despliegan datos en la pantalla. A la ventana de fondo se la conoce como ventana raz (root window). Las ventanas de aplicacin se despliegan encima de la ventana raz. Al igual que los procesos en Unix estas ventanas estn agrupadas o relacionadas de acuerdo a una jerarqua. As es que la ventana raz es el padre de todas las dems ventanas. Ahora, para entender un poco mas este tipo de funcionamiento pasaremos a explicar en que consiste. X esta formado de dos partes: un lado servidor y un lado cliente. La funcionalidad bsica es familiar a la forma en que trabajan todos los modelos cliente-servidor, en el sentido de que el servidor X tiene determinados recursos que proporciona al cliente. Debido a que el servidor X esta integrado a las pilas TCP/IP las peticiones pueden venir de cualquier cliente y pueden ser solicitadas a cualquier servidor. Adems, debido a que X, adems de ser un programa especfico, define adems un protocolo, los clientes pueden comunicarse con servidores X en otro tipo de plataforma. El servidor acta como una interfaz entre los programas clientes y el hardware fsico. Cuando se proporcionan datos, ya sea por medio del teclado o el mouse, el servidor acepta la entrada y es responsable de pasarla al cliente. Esta informacin se pasa al cliente como un evento. Una tecla apretada o el movimiento del mouse generan un evento ante el cual reaccionar el cliente.

Figura 1. Aspecto de algunos clientes tpicos Este evento genera una reaccin en el cliente para que presente un cambio en la pantalla como podra ser el desplegado de un men. Estos se realizan de la siguiente manera: El usuario realiza un clic de mouse en el cliente. Este solicita al servidor que muestre un men desplegable. El servidor pasa la informacin al hardware, que muestra el men desplegable en la pantalla. Como resultado de esta separacin de funcionalidades, un cliente puede desplegar informacin en ms de un servidor. Para iniciar cualquier cliente se deber haber iniciado el servidor X en algn lugar de la red o, como es comn, en la misma mquina que se estn ejecutando los clientes. Al contrario de lo que podra suponerse, ni el servidor ni los clientes son responsables de la apariencia de las ventanas en la pantalla tal como lo entendemos. Ester trabajo le corresponde a un "administrador de ventanas" (WM por window manager). La mayora de las distribuciones actuales trae los varios WM diferentes, proporcionando interfaces que difieren entre s y pueden configurarse y adaptarse a los gustos de los usuarios. Tambin vienen los entornos de escritorio KDE o Gnome como estndar, los que proporcionan mayor grado de integracin entre aplicaciones y trabajan de formas diferentes. El WM tambin es el encargado de controlar los conos en la pantalla. A continuacin se muestra el aspecto de algunos administradores de ventanas. Si se quiere una descripcin ms detallada acerca de los WM disponibles consultar http://xwinman.org (en ingls)

Figura 2. Aspecto del WM Windowmaker

Figura 3. Aspecto del WM BlackBox

Figura 4. Aspecto del WM xfce

Figura 5. Aspecto del WM fvwm95

Requisitos de Hardware
X puede operar con 32 MB de RAM fsica pero de seguro que lo que menos se podr hacer es trabajar de manera cmoda, ya que al abrir un par de ventanas notaremos como caer notablemente el rendimiento al comenzar a intercambiar informacin con el disco rgido. Por esto, la memoria RAM es un punto clave a tener en cuenta a la hora de instalar X. 64 MB de RAM harn que se pueda trabajar cmodamente en un entorno que requiera de pocos recursos como el WindowMaker. En lo que respecta la placa de video, se tendr que buscar alguna que tenga pocos problemas de configuracin. Hoy da casi todas las placas de video (los chips de video, para ser ms especficos) soportan el modo VESA 2.0, con lo cual se las puede hacer trabajar con el driver de esta norma a 1024x768 pxeles, en 32 bits de colores, aunque de esta manera estaramos desperdiciando parte de la potencia de nuestro controlador de video[1]. En lo que respecta a fuerza de cmputo pura, un sistema Pentium ser suficiente para un entorno poco exigente y se requerir de un Pentium III o superior para entornos como el KDE y el Gnome que son monstruos devoradores de recurso.

Notas
[1] Lo cual en algunos casos puede ser irrelevante. Por experiencia personal, aun en este caso con una mquina nueva puedo reproducir 4 videos DivX a la vez. Solo ser necesario disponer de toda la potencia de la tarjeta grfica cuando se corran resoluciones superiores a esta o juegos con muchos requerimientos.

Configuracin de Xfree86
Por lo general, cuando instalemos GNU/Linux ya tendremos instalado el sistema XWindow y

configurado. Sin embargo, si hemos instalado Debian o Slackware aun tendermos que configurarlo. Para esto se debe de crear el archivo de configuracin /etc/X11/XF86Config o /etc/X11/XF86Config-4. Este se puede crear a mano o con alguno de los siguientes programas: xf86config o xf86cfg. Antes de correr alguno de los programas de configuracin de XWindow se debe tener a la mano la siguiente informacin: marca, modelo y cantidad de memoria de la tarjeta de video; marca, modelo del monitor y frecuencia horizontal y vertical del monitor; datos del mouse (ratn) y teclado que utilizaremos.

Configuracin mediante xf86cfg


Por supuesto que lo primero que tendrn que cerciorarse es que los archivos necesarios estn instalados antes de correr este programa. Si no fuese as un mensaje les advertir por pantalla de esto. Una vez que se ejecuta como root desde la consola el programa xf86cfg
[root@pantano:~]# xf86cfg

un cuadro de dialogo le preguntara si se quiere utilizar el archivo de configuracin existente. Este archivo se instala por defecto al instalarse los archivos de XFree, pero muy pocas veces funciona sin modificaciones. Sirve para ejemplo y punto de partida para una configuracin a medida. XF86cfg intentar arrancar el sistema grfico en modo VESA, por lo que esto funcionar en la mayora de las mquinas modernas. Si se detectan exitosamente todas nuestras configuraciones de hardware, se podra ver una ventana similar a la que se muestra a continuacin.

Figura 6. Aspecto de la ventana de xf86cfg En este momento estamos configurando el Layout del servidor, es decir la disposicin fsica de los diferentes dispositivos (Boton superior izquierdo, Configure Layout). Como podemos observar, las configuraciones ms importantes se dividen en cuatro secciones representados por los botones superiores, a saber mouse, teclado, tarjeta de video y monitor. El hardware detectado se muestra en la parte inferior, en el grfico que une las "partes" de nuestra mquina. A continuacin podremos efectuar las modificaciones que querramos, haciendo click con el botn derecho sobre el dispositivo a configurar y eligiendo la opcin configure. Si por casualidad nuestro mouse fu mal detectado (caso comn cuando disponemos de un mouse serie pero nuestra mquina posee adems bus ps2), podremos utilizar las teclas del teclado numrico para mover el puntero en pantalla tal como se muestra a continuacin.

Figura 7. Ayuda en caso de mouse mal detectado o ausente En caso de que la deteccin de video sea mal detectada y no pueda arrancar el modo grfico, aun se puede usar el programa de configuracin en modo texto, con el comando xf86cfg -textmode, el cual nos abrir el mismo programa con menes interactivos. Tambin podemos usar el comando xf86config, el cual nos ir preguntando una a una las opciones para cada caso.

Mouse
En esta pantalla se podr configurar el mouse que funcione en nuestro sistema, aunque ya lo hayamos realizado en la consola. En la pantalla que vemos a continuacin se muestran las opciones Identifier (se puede dejar tal cual como est), y lo ms importante, mouse device y mouse protocol.

Figura 8. Men de configuracin del mouse El primero se refiere al puerto fsico que est conectado el mouse. Si se trata de un mouse serie el mismo ser seguramente /dev/ttyS0 o /dev/ttyS1. Si se trata de un mouse ps2 ser /dev/psaux. En cuanto al protocolo, puede dejarse en Auto la mayora de las veces. Algunos protocolos pueden activar caractersticas especiales del mouse, por ejemplo la rueda. La opcin Emulate 3 buttons permite que teniendo un mouse de dos botones, apretando los dos a la vez se comporte como un tercer botn.

Teclado
Hay que configurar nuestro teclado de acuerdo a dos aspectos fundamentales: el idioma y el modelo. A continuacin se muestra la pantalla de configuracin del teclado.

Figura 9. Men de configuracin del teclado Las opcion xkb rules debe ser xfree86. Los parmetros ms importantes son Keyboard model, el cual en los teclados comunes con "teclas muertas" (dead keys) que usa cierto sistema operativo ser Generic 105-key (Intl) PC para teclado espaol (104-keys para uno americano), y Keyboard layout, en nuestro caso casi siempre Spanish. Las opciones siguientes permiten seleccionar aspectos ms avanzados de nuestro teclado, como que hacer con las teclas muertas, administrar el comportamiento de las teclas CapsLock-Shift, etc.

Placa de Video
Este punto es crucial y por dems de complicado cuando no se tiene la documentacin de la placa. Lo mejor que puede uno hacer es leer los README que vienen con X para ver si existe compatibilidad con nuestra placa de video. Si se sabe cual es el tipo de placa y esta aparece listada, es un procedimiento inmediato, pero si no se tendr que probar con una placa genrica que supla los requerimientos de nuestra placa de video. A continuacin vemos la pantalla de configuracin de la placa de video.

Figura 10. Men de configuracin de la placa de video Si nuestra placa no est listada por lo general la placa VESA es una buena opcin. Si esta no funciona tambin se dispone de el controlador vga generic, el cual debera funcionar en casi cualquier hardware. Lo que se tiene que tener en cuenta es el chipset de nuestra placa ya que ser un indicativo para hallar una sustituta. La RAM que posee tambin tendr que ser especificada y se recomienda leer los archivos de README para configurar placas aceleradoras.

Monitor
La configuracin del monitor se basa en saber las frecuencias verticales y horizontales de trabajo del mismo, lo que se podr obtener de la documentacin provista o del sitio del fabricante.

Figura 11. Men de configuracin del monitor En este punto hay que tener especial cuidado dado que en los viejos monitores un error poda ocasionar que se quemara el mismo. Los monitores nuevos en general no sufren este problema, ya que tienen proteccin contra estos accidentes. Eligiendo un monitor de la lista se seleccionaran automticamente el Horizontal Sync y el Vertical Sync.

Screen
Ahora que hemos configurado nuestros dispositivos fsicos pasaremos a configurar el aspecto que presentar nuestra pantalla. Para eso, con el botn superior izquierdo en la pantalla principal de xf86cfg seleccionamos Configure Screen, y el aspecto de la misma cambiar como se muestra a continuacin.

Figura 12. Configuracin del aspecto de pantalla (screen) Haciendo click derecho sobre el monitor elegimos configure y podremos seleccionar la profundidad de colores y la resolucin a la que querramos trabajar. Aqui vemos que se ha seleccionado 16 bits de profundidad de colores (65536 colores) y dos resoluciones, 640x480 y 800x600. Puede alternarse entre estas dos resoluciones apretando la combinacin de teclas Ctrl-Alt-+ y Ctrl-Alt--

Figura 13. Seleccin de resolucin y profundidad de colores

Entornos grficos de escritorio


Existen adems de los WM mostrados anteriormente entornos de escritorios, los cuales proveen un WM, utilidades varias y un framework de desarrollo que nos permitirn desarrollar aplicaciones que se integren al entorno perfectamente, compartiendo el look&feel del mismo y aprovechando servicios como arrastrar y soltar, servicio de impresin centralizado, un portapapeles comn, etc. Algunos de estos entornos son KDE, Gnome, GNUStep y CDE. Hablaremos solamente de los dos primeros que son, sin lugar a dudas, los ms populares. El tercero es un esfuerzo por reimplementar las especificaciones OPENStep de NeXT, y parece haber quedado estancado. El ltimo nombrado fu durante muchos aos el rey en los ambientes UNIX corporativos, pero ha quedado desfasado respecto a los dos primeros, adems de no ser libre.

El entorno KDE
KDE ofrece para GNU/Linux un entorno grfico de configuracin por dems de sencilla y con una apariencia homognea entre las distintas aplicaciones. KDE es un proyecto de un grupo de programadores que se formo en 1996 y que siguen trabajando en el proyecto junto con muchos otros que fueron incorporndose. Ofrece su propio administrador de ventanas llamado kwin y adems una serie de aplicaciones para hacerlo mas cmodo como el konqueror que es un administrador de ficheros que permite trabajar con ellos en una forma muy grfica a travs de iconos.

Figura 14. Aspecto que ofrece KDE Consta de gran cantidad de ayuda y esta totalmente realizada en HTML lo que facilita su lectura hacindola mucho mas dinmica. Aparte las aplicaciones nuevas que se vayan instalando incorporaran tambin la documentacin que posean a esta lista. Posee una gran variedad de aplicaciones como lo son un programa de correos, el kmail, block de notas, calculadora, y dems aplicaciones de utilidad. Posee tambin aplicaciones para Internet como un cliente para IRC y la posibilidad de realizar la conexin por dial-up de una forma por dems de sencilla a travs del kppp. EL KDE esta basado totalmente en URL. Esto significa que todas las ramas y referencias a archivos se procesan en un formato nico por ejemplo se puede acceder a una pagina HTML, a un archivo

local o a un sentido a travs del mismo visualizado. Tiene la posibilidad de realizar Drag&Drop entre las distintas aplicaciones por ejemplo arrastrando un archivo desde un lado a otro o al escritorio. KDE esta desarrollado con las bibliotecas grficas Qt, las cuales son parecidas en funcionamiento a otras bibliotecas muy conocidas en el mundo UNIX como lo son las Motif que facilitan la construccin de programas con base grfica, pero que son software no libre. En un tiempo las bibliotecas Qt tambin fueron no libres, lo que fren la adopcin de KDE por cuestiones de licencias en algunas distribuciones. Luego, la presin de la comunidad del software libre hicieron que estas se publicaran con una licencia dual, estando ahora bajo licencia GPL cuando se utilizan para desarrollo de software libre. Esto sin duda termin de popularizar este desarrollo tcnicamente excelente. La pgina del proyecto es http://www.kde.org donde puede encontrarse mucha informacin del mismo.

El entorno Gnome
Gnome es un acrnimo de 'GNU Network Object Model Environment', entorno de trabajo en red orientado a objetos, por lo que Gnome forma parte del ms amplio proyecto GNU. Gnome es un entorno grfico (escritorio de trabajo) amigable que permite a los usuarios usar y configurar sus ordenadores de una forma sencilla. Gnome incluye un panel (para arrancar aplicaciones y presentar el estado de funcionamiento), un escritorio ( donde se pueden situar los datos y las aplicaciones), un conjunto estndar de aplicaciones y herramientas de escritorio, y un conjunto de convenciones que facilitan la operacin y consistencia de las aplicaciones entre s.

Figura 15. Aspecto que ofrece Gnome Los usuarios de otros sistemas operativos y entornos se sentirn como en casa cuando usen el potente entorno grfico que proporciona Gnome. Gnome es en su totalidad cdigo abierto (software libre), con el cdigo fuente disponible libremente y desarrollado por cientos de programadores en todo el mundo. Gnome tiene una serie de ventajas para los usuarios. EL mismo facilita el uso y la configuracin de aplicaciones sin usar interfaces puramente textuales (console). Es altamente configurable, permitindole ajustar su escritorio con el aspecto que desee. El gestor de sesiones de Gnome recuerda la configuracin previa, de manera que una vez que haya

configurado las cosas a su gusto, las mantendr as. Soporta muchos idiomas, y puede aadir ms sin cambiar el software. Soporta incluso varios protocolos de arrastrar y soltar para una mxima interoperabilidad con aplicaciones que no sean compatibles con Gnome. Gnome tiene tambin una serie de ventajas para los programadores que indirectamente benefician tambin a los usuarios. Los programadores no necesitan comprar una cara licencia de software para hacer compatibles sus aplicaciones comerciales. De hecho, Gnome es independiente de cualquier compaa - ningn componente del interfaz esta controlado nicamente por una compaa o tiene restringidas la modificacin o redistribucin. Las aplicaciones Gnome pueden desarrollarse en una gran variedad de lenguajes de programacin, por lo que el programador no se ve limitado a un solo lenguaje de programacin. Gnome usa la arquitectura universal de agentes de peticin de objetos (CORBA) para permitir que los componentes software interacten 'sin costuras', independientemente del lenguaje en el que estn implementados, o incluso de la mquina en la que se estn ejecutando. Finalmente, Gnome funciona en numerosos sistemas operativos de tipo Unix, incluido GNU/Linux. El gestor de ventanas es la parte del software que controla las ventanas en el 'Entorno de ventanas X'. La posicin, bordes, y estilo de cualquier ventana la maneja el gestor de ventanas. Esto es muy distinto en muchos otros sistemas operativos, y la forma en que Gnome dialoga con los gestores de ventanas es diferente de la de otros entornos de escritorio. Como se indic anteriormente en esta gua, Gnome no depende de ningn gestor de ventanas. Esto significa que la mayor parte de su entorno de escritorio no cambiar si decide cambiar de gestor de ventanas. Gnome trabaja con el gestor de ventanas para proporcionarle el entorno de trabajo ms amigable posible. Gnome no se preocupa de la colocacin de las ventanas, sino que obtiene informacin sobre su posicin del gestor de ventanas. El paginador (Pager) slo funcionar con gestores de ventanas compatibles con Gnome, al igual que arrastrar y soltar en el escritorio.

Detalle de Comandos
Detallaremos los comandos bsicos que son de mayor utilidad en GNU/Linux, tratando de detallar en cada uno de ellos las opciones ms utilizadas y las que necesitaremos ms frecuentemente para un mejor funcionamiento de nuestro sistema. Muchos de estos comando se encontraran complicados a esta parte del curso, pero ms adelante se entender su utilizacin. Por el momento tendrn que ser tomados solo como referencia y luego, al darse el tema especifico que los utiliza, se podr consultar esta descripcin para poder utilizarlo. Las opciones en su amplia mayora se le dan al comando luego de un signo "-", por ejemplo ls -F. Adems de las opciones con una sola letra, en muchas oportunidades nos encontraremos con opciones indicadas con palabras completas. Estas se expondrn seguidas de un doble signo "-", de la forma cat --number que es equivalente a cat -n. Los archivos que irn como argumento del comando se referenciaran de la forma <archivo[1]> <archivo[2]> <archivo[n]>. Para mayor informacin respecto a cada uno de estos comandos, se cuenta con las pginas de manual que nos mostraran todas las posibilidades. La sintaxis para leer las pginas de manual es la comn
[shrek@pantano:~]$ man <comando>

alias: Este comando nos mostrar la lista de alias que existe en nuestro sistema. Los alias son nombres creados por los usuarios para ejecutar un comando o una serie de comando de manera ms rpida. Estos estn definidos en /etc/bashrc y tienen permiso de escritura por el usuario root. Un ejemplo de la salida del comando es el siguiente
alias alias alias alias fd='mount /dev/fd0 /mnt/floppy; cd /mnt/floppy && ls' l='ls -laF --color=tty' ldir='mount /mnt/floppy && ls /mnt/floppy && umount /mnt/floppy' ls='ls --color=tty'

alias alias alias alias alias alias alias

m='minicom -s -con -L' minicom='minicom -s -con -L' tm='tail -f /var/log/messages' tmm='tail -f /var/log/maillog' tms='tail -f /var/log/secure' ufd='cd /mnt && umount /floppy && ls' which='type -path'

awk: Es un lenguaje de programacin que nos sirve para realizar bsquedas de patrones en archivos de textos. Entraremos en mayor detalle en el captulo (reemplazar). cal: Este comando, sin argumentos, nos mostrar el calendario del mes actual en el corriente ao. Alguno de sus argumentos ms usados son los que le indican el mes y el ao que se quiere visualizar. Para ello solo hace falta invocarlo seguido por el nmero del mes y el ao en cuatro dgitos.
[shrek@pantano:~]$ cal 8 2004 agosto de 2004 do lu ma mi ju vi s 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 [shrek@pantano:~]$

cat: Concatena e imprime archivos en la salida estndar. Con "cat" podremos tanto visualizar por pantalla como redireccionar hacia otro archivo, un archivo de texto comn. Tambin podramos concatenar varios archivos para que sean visualizados todos juntos.
[shrek@pantano:~]$ cat archivo[1] archivo[2] archivo[3] ... archivo[n]

Opciones: -b, --number-nonblank Numera todas las lneas que contengan algn texto comenzando por 1. -e Es equivalente a -vE. -n, --number Numera todas las lneas de salida comenzando por 1. -s, --squeeze-blank Remplaza mltiples lneas en blanco con una sola lnea en blanco. -t Es equivalente a -vT. -u

Solo utilizado para compatibilidad con UNIX; es ignorado. -v, --show-nonprinting Muestra los caracteres de control. -A, --show-all Equivalente a -vET. -E, --show-ends Muestra un signo "$" inmediatamente despus del final de lnea. -T, --show-tabs Muestra los caracteres de tabulacin (TAB), como '^I'. --help Muestra un mensaje de ayuda para el comando. --version Muestra la informacin de la versin que se esta usando del comando. cd: (change Directory) Cambia a otro directorio. Si se invoca sin ningn argumento, nos llevara a nuestro directorio HOME. Esto lo hace ya que existe una variable de entorno cargada por el shell que indica cual es nuestro home. Esta variable se llama HOME y ser estudiada ms adelante al ver Variables de Entorno shell. chmod: Cambia los permisos de acceso a los ficheros. La forma de los smbolos que podr utilizar como argumento ser [ugoa...][[+- =][rwxXstugo...]...][,...]' . Muchos de estos smbolos tendrn que ir separados por comas. La combinacin de letras [ugoa...] especificar si el cambio al archivo se le esta especificando a nivel del usuario (u), grupo (g) u otros (o) o en su defecto a todos (a). El operador "+" casa que el permiso seleccionado sea aadido, en cambio el smbolo "-" significa lo opuesto. Los smbolos rwx significan permisos de lectura (r), escritura (w) y ejecucin (x). Se especificaran los otros smbolos ms adelante. Existe tambin una forma numrica de indicar los permisos de forma octal (0- 7). clear: Limpia la pantalla si es posible. date: Sin argumentos mostrara en pantalla el da, mes nmero de da, hora y ao.
[shrek@pantano:~]$ date vie jul 2 14:45:59 ART 2004 [shrek@pantano:~]$

Si agregamos un smbolo + delante del comando y un modificador, podremos obtener distintas partes de una fecha. Estos modificadores tendrn que ir antepuestos por un smbolo %. Estos son algunos modificadores de posicin % El literal %

n Una nueva lnea t Un tabulador horizontal Modificadores de tiempo: %H Hora en formato 00..23 %I Hora en formato 01..12 %k Hora en formato 00..23 %l Hora en formato 01..12 %M Minutos en formato 00..59 %p AM o PM %r Tiempo en formato de 12 horas (hh:mm:ss ) %s Segundos a partir del 01-01-1970 a las 00:00:00. %S Segundos (00..59) %T Tiempo en formato de 24 horas. %X

Tiempo en formato local (%H:%M:%S) %Z Zona de tiempo, o nada si no esta determinado. Modificadores de Das %a Abreviacin de das de la semana (Dom..Sab) %A Muestra el nombre completo del da de la semana (Domingo..Sbado) %b Abreviacin del mes en curso (Ene..Dic) %B Muestra el nombre completo del mes en curso. %c Muestra el da y la hora en el formato "jue 06 abr 2000 23:48:01 ART" %d Da del mes (01..31) %D Da en formato mm/dd/aa %h Igual que %b %j Da del ao (001..366) %m Mes del ao (01..12) %U Nmero de semana del ao donde el Domingo es el primer da (00..53)

%w Nmero del da dentro de la semana (0..6) donde 0 corresponde al Domingo. %W Nmero de semana del ao donde el Lunes es el primer da (00..53) %x Da en formato dd/mm/aa %y Muestra los dos ltimos dgitos del ao. %Y Ao en formato de 4 dgitos (1970 .. ) El reloj del sistema tambin puede actualizar el reloj del sistema a travs del modificador -d de la siguiente forma:
date -d mm/dd/yy

Cambia la fecha.
date -d hh:mm:ss

Cambia la hora. La opcin --help muestra un mensaje de ayuda mientras que --version Muestra informacin de la versin. find: Encuentra archivos recursivamente. Los archivos que coincidan con la una expresin lgica sern mostrados en pantalla. Find no sigue a los link simblicos, sino que los muestra como archivos. Uso de Operadores: En esta descripcin el argumento n es usado para identificar a un nmero decimal entero donde +n es mayor que n y -n es menor que n y n es exactamente n. -fstype <tipo> Verdadero si el tipo de archivo coincide con "tipo". Tpicamente 4.2 o nfs. -name <archivo> Verdadero si el archivo es igual a <archivo>. Puede usarse los modificadores del shell como comodn donde "?" representa una sola letra y "*" representa toda una cadena. -size n Verdadero si el archivo es de n bloques de largo (512 bytes por bloque) -inum n Verdadero si el archivo tiene el inodo igual a n. Veremos los inodos en el captulo 8.5.3. -atime n Verdadero si el archivo fue accedido en n das. -mtime n Verdadero si el archivo fue modificado en n das. -ctime n Verdadero si el archivo fue cambiado en n das. -exec command Verdadero si la ejecucin del "command" retorna 0. -ok command Parecido a -exec solo que el "command" es escrito en la pantalla y se pregunta si es ejecutado a lo que se tendr que responder "Y" o "N". -print Siempre es verdadero, muestra el path donde esta buscando. -ls Siempre es verdadero, imprime adems todos los datos de un "ls" normal y ms: nmero de inodo, tamao en kilobytes (1024 bytes), modo de proteccin y nmero de enlace duro, usuario, grupo, tamao en bytes y tiempo de la ltima modificacin. Si el archivo es un link simblico, se mostrar hacia donde apunta con "->". -cpio device Siempre verdadero, escribe el archivo en un dispositivo de cinta. -newer <archivo> Verdadero si los archivos fueron modificados ms recientemente que el tiempo de modificacin que tiene <archivo> -xdev Siempre verdadero, no desciende a directorios que posean otro tipo de filesystem's FAST-FIND: Se

trata de una base de datos alojada en /usr/lib/find que es actualizada peridicamente y es donde se van guardando las bsquedas anteriores. Se puede actualizar con el comando siendo root con el comando updatedb que se encuentra en el mismo directorio. cp: copia el contenido del archivo1 en el archivo2 con la sintaxis siguiente
[shrek@pantano:~]$ cp <archivo1> <archivo2>... <archivo[n]> <destino>

donde archivo1, archivo2 hasta archivo[n] sern copiados a destino. Algunas opciones: -a, --archive Preserva la posible estructura y atributos del archivo a copiar -b, --backup Realiza un backup de los archivos copiados por si se renombran o son borrados -f, --force Borra sin avisar el archivo de destino si este existe -i, --interactive Pregunta por pantalla la confirmacin de sobrescribir un archivo destino Otra forma de utilizar el comando cp es haciendo una copia recursiva de directorio1 con subdirectorios y todo a directorio2. Si directorio2 no existe, se crear. Esto se logra con la opcin -c. echo: Simplemente enva a pantalla los argumentos pasados.
[shrek@pantano:~]$ echo "Hola mundo" Hola Mundo

finger: Por defecto muestra en pantalla todos los usuarios logeados incluyendo nombre de login, nombre completo, nombre de la terminal donde esta logeado, hora en que entro al sistema, hostname adems de otros datos personales como los nmeros de telfono si es que existen.
[shrek@pantano:~]$ finger Login Name Tty Idle Login Time Office Office Phone root root *1 22 Apr 8 18:42 sebas p0 Apr 8 18:42 (192.168.1.1)

Idle es un entero que muestra la cantidad de tiempo que el usuario esta logeado en el sistema. Opciones: -s Igual que ejecutar el finger comn -l Representa la informacin en mltiples lneas

[shrek@pantano:~]$ finger -l Login: shrek Name: Shrek Directory: /home/shrek Shell: /bin/bash On since Tue Aug 10 14:41 (ART) on tty2 6 hours 35 minutes idle No mail. No Plan.

Si se quisiera saber los usuarios que estn logeados en un sistema diferente al nuestro, y si el sistema el cual estamos explorando lo permite al tener habilitado el puerto 79 (finger), tendramos que ejecutar el comando seguido de una "@" e inmediatamente despus el nombre del host del que queremos saber quien esta logeado.
[shrek@pantano:~]$ finger @farfaraway.com

grep: Imprimir las lneas que coincidan con la expresin que coloquemos inmediatamente luego del comando. Por ejemplo, si tirramos por pantalla el archivo /var/log/messages tal vez tendramos demasiadas lneas para ver, pero si solo queremos ver aquellas lneas que contengan la expresin "tty1" solo tendramos que hacer un cat al archivo y utilizando el smbolo de canalizacin "|" podramos hacer que la salida del cat se procese con el comando grep para darnos la salida deseada.
[root@pantano:/home/shrek]# cat /var/log/messages|grep tty1 Jul 25 16:53:04 pantano login[433]: ROOT LOGIN ON tty1 Jul 25 18:41:40 pantano login[433]: ROOT LOGIN ON tty1 Jul 25 18:42:10 pantano login[457]: ROOT LOGIN ON tty1 [root@pantano:/home/shrek]#

Opciones: -A num Muestra las num lneas siguiente a la ltima lnea que haya coincidido con el patrn pedido. -B num Muestra las num lneas anteriores a la primera lnea que haya coincidido con el patrn pedido. -c Muestra por pantalla l nmero de lneas que coinciden con el patrn. -b Muestra antes que las lneas que coinciden, la cantidad de bytes que han pasado por el comando luego de salir cada lnea. Para mayores usos y dado que la opcin anterior ser la que ms se utilice, se recomienda la lectura de las paginas de su manual. kill: Por defecto enva una seal de terminacin (terminate 15) al proceso que se indique por medio del numero de proceso (PID). Las seales que se le pueden enviar a un proceso se listan con la opcin - l. Estas son: 1. SIGHUP 2. SIGINT 3. SIGQUIT

4. SIGILL 5. SIGTRAP 6. SIGIOT 7. SIGBUS 8. SIGFPE 9. SIGKILL 10. SIGUSR1 11. SIGSEGV 12. SIGUSR2 13. SIGPIPE 14. SIGALRM 15. SIGTERM 16. SIGCHLD 17. SIGCONT 18. SIGSTOP 19. SIGTSTP 20. SIGTTIN 21. SIGTOU 22. SIGURG 23. SIGXCPU 24. SIGXFSZ 25. SIGVTALRM 26. SIGPROF 27. SIGWHINCH 28. SIGIO 29. SIGPWR Para ms informacin sobre las seales consultar signal(7) en las pginas de manual. De estas seales indicaremos las ms utilizadas. Estas son 9, 1 y 15. Para indicar el nmero de seal que queremos enviar a un proceso, se le antepone el signo "-".
[root@pantano:/usr/bin]# kill -9 266

Esto provocar que el proceso muera repentinamente. La diferencia entre la seal 9 y la 15 es que al enviar al proceso una seal 15 este ser marcado como un proceso terminado. En cambi la seal 9 mata el proceso inmediatamente. La seal 1 o SIGHUP reinicia el proceso al que se enva la seal, lo que tambin se podr realizar con el modificador -HUP.
[root@pantano:/usr/bin]# kill -HUP 266

Se deber tener en cuenta que el usuario solo podr mandar seales a los procesos que le pertenecen. En cambio el usuario root podr hacerlo a cualquier proceso que este corriendo en el sistema.

less: es un programa similar a more que permite ir viendo una salida en pantalla que ocupara ms de una. La diferencia sustancial con el more es que nos permite desplazarnos de abajo hacia arriba y de arriba hacia debajo de la salida por pantalla. Permite a su vez que se utilicen una serie de comandos. Sumario de comandos bsicos del less. hH Muestra la ayuda. q :q Q :Q ZZ Salir. e ^E j ^N CR Adelante una lnea (o N lneas). y ^Y k ^K ^P Atrs una lnea (o N lneas). f ^F ^V SPACE Adelante una pantalla (o N lneas). b ^B ESC-v Atrs una pantalla (o N lneas). ESC-SPACE Adelante una pantalla. / patrn Busca hacia adelante n's lneas en donde coincida el patrn. logout: Sale de la terminal. lpq: Muestra en pantalla el contenido de la cola de impresin. Si se quiere un reporte por cada usuario, el comando deber estar seguido del nombre del usuario. lpr: Genera un trabajo de impresin del archivo seleccionado. Si no se especifica archivo, lpr leer los datos desde la entrada estndar. Opciones: -Pprinter Enva la salida a la impresora printer. -#copies Procede a crear "copies" copias del trabajo enviado a la cola de impresin.
[shrek@pantano:~]$ lpr -#3 index.c

Tambin se podra realizar leyendo el archivo con el comando cat y enviarlo al comando lpr con la cantidad de copias que se requieren.
[shrek@pantano:~]$ cat index.c |lpr -#3

Existen muchos comandos ms para aplicar formatos especficos a la salida impresa, los que se podrn consultar en las pginas de manual.

lprm: Remueve los trabajos de la cola de impresin. Sin argumentos, "lprm", borrara todos los trabajos activos del usuario que invoco el programa. Puede ser removido un trabajo determinado utilizando el comando lpq para saber el nmero de trabajo y el comando lprm para eliminarlo indicando en la impresora que se encuentra.
[shrek@pantano:~]$ lpq -Plp pantano: waiting for 192.168.1.1 to come up Rank Owner Job Files Total Size 1st sebas 0 passwd 636 bytes 2nd sebas 1 passwd 636 bytes [shrek@pantano:~]$ lprm -Plp 1

donde lp es el nombre de la impresora. ls: Lista todos los archivos del directorio que indiquemos. -a, --all Lista todos los archivos, incluidos los archivos de punto (.archivo) -d, --directory Lista solo los directorios. -c Lista los archivos ordenados desde la fecha ms prxima a la del momento en que se ejecuta el comando. -f No ordena los archivos, los muestra segn la ubicacin en el disco. --full-time Muestra los archivos con todos los datos de tiempo. -i, --inode Imprime el ndice de inodos de cada archivo. --color=yes Indica al comando ls que muestre los resultados en colores. Para mayor informacin, mirar las pginas de manual. man: Muestra las pginas de manual del comando o programa que se le pase como argumento. mail: Es un programa sencillo para el envi de e-mails, tanto en una red como en Internet. Siendo este un comando por dems de auto explicativo y que en su mayora solo se utilizara para realizar rpidos mensajes de email, se recomienda la lectura de las pginas de manual para poder ver todos los alcances que tiene. mkdir: Crea directorios nuevos. Se deber indicar luego del comando el directorio o los directorios a crear.

[shrek@pantano:~]$ mkdir cartas

Se creara el directorio cartas en el directorio sebas more: Es un filtro que mostrara por pantalla el archivo que le enviemos o que sea redireccionado a el y parara por cada pantalla mostrada. Opciones: -c Borra la pantalla antes de desplegar la informacin por pantalla. -d Mostrara los mensajes de error e indicara que hacer para solucionarlo. mv: Mueve archivos y directorios. Existen tres formas para utilizar el mv y se muestran ms abajo. La primera forma es cuando se quiere cambiar el nombre de un archivo. Supongamos que queremos cambiar el nombre del archivo1 a archivo2. Si archivo2 existe, este ser borrado y en su lugar estarn los datos del archivo1. La opcion 2 es que lo que se quiera mover sea un directorio. Solo se podr hacer si el nuevo nombre del directorio no existe. La tercera opcin es cuando se quiere mover mas de un archivo a una ubicacin particular. Existen para realizar esto las siguientes opciones: -f Fuerza la ejecucin del comando mv aunque se trate de un proceso restringido como el borrado de un directorio. -i Habilita el proceso interactivo. Se podr especificar el archivo o directorio que se quiere renombrar o mover. passwd: Cambia o pone la clave de paso a un usuario. Solo el root podr cambiar el password de otro usuario. El usuario podr cambiar su propia clave con este comando. ps: Mostrara informacin por pantalla de los procesos que estn corriendo en ese comento. Opciones: -a Opcin por defecto. Mostrar los procesos de los cuales el usuario es el dueo. -x Mostrar absolutamente todos los procesos que se estn ejecutando. -f Mostrar la jerarqua de los procesos mostrando los padres de cada uno y sus descendientes. pwd: Mostrar la ruta del directorio donde estamos parados actualmente.
[shrek@pantano:~]$ cd /usr/local/bin [shrek@pantano:/usr/local/bin]$ pwd /usr/local/bin [shrek@pantano:~]$

rm: Remueve archivos y directorios. Opciones: -i Pregunta antes de borrar cada archivo.

-f Fuerza el borrado de una archivo sin mostrar los mensajes de error. -r Borrado recursivo. rmdir: Borra directorios. Las opciones anteriores tambin se aplican.

S-ar putea să vă placă și