Anda di halaman 1dari 59

eman ta zabal zazu

Universidad del pas vasco

Euskal herriko Unibertsitatea

COMANDOS BSICOS UNIX (LABORATORIO DE TELEMTICA) INGENIERA DE TELECOMUNICACIN

SISTEMA OPERATIVO UNIX

DEPARTAMENTO DE ELECTRNICA Y TELECOMUNICACIONES REA DE INGENIERA TELEMTICA

Sistema Operativo UNIX

pg i

INDICE
1.
1.1 1.2 1.3

INTRODUCCIN _____________________________________________________ 1
SISTEMAS OPERATIVOS __________________________________________________1 BREVE HISTORIA DEL SISTEMA OPERATIVO UNIX ________________________1 CARACTERSTICAS GENERALES DEL S.O. UNIX ___________________________1

2.
2.1 2.2 2.3 2.4

ACCESO AL SISTEMA Y COMANDOS GENERALES_______________________ 3


USUARIOS Y ACCESO AL SISTEMA ________________________________________3 FORMATO DE COMANDOS _______________________________________________4 COMANDOS INFORMATIVOS _____________________________________________5 COMANDOS DE MENSAJE ________________________________________________6

3.
3.1 3.2 3.3 3.4 3.5

FICHEROS __________________________________________________________ 7
CONCEPTO Y TIPOS DE FICHEROS _______________________________________7
DENOMINACIN DE FICHEROS ________________________________________________ 7 3.1.1

EL SISTEMA DE FICHEROS. DIRECTORIOS ________________________________8 MANIPULACIN DE DIRECTORIOS _______________________________________9 MANIPULACIN DE FICHEROS ___________________________________________9 PROTECCIONES DE FICHEROS __________________________________________11

4.
4.1 4.2 4.3

COMUNICACIONES ENTRE USUARIOS ________________________________ 14


MAIL ___________________________________________________________________14 NEWS____________________________________________ Error! Marcador no definido. WRITE__________________________________________________________________15

5.
5.1 5.2 5.3 5.4

EDITORES __________________________________________________________ 16
EL BUFFER DE MEMORIA _______________________________________________16 DOS MODOS DE FUNCIONAMIENTO DE EDITORES _______________________16 COMPARACION ENTRE LOS EDITORES DE LNEAS Y DE PANTALLA ______17 EL EDITOR vi ___________________________________________________________17

5.4.1 PARA EMPEZAR EN vi _______________________________________________________ 18 5.4.2 MOVIMIENTOS DEL CURSOR _________________________________________________ 18 5.4.3 EL MODO TEXTO____________________________________________________________ 19 5.4.4 CMO AADIR TEXTOS A UN FICHERO YA EXISTENTE_________________________ 19 5.4.5 BORRADO Y ALTERACIN DEL TEXTO _______________________________________ 20 5.4.6 PARA DESHACER CAMBIOS: u y U ____________________________________________ 20 5.4.7 CMO ABANDONAR EL EDITOR vi ____________________________________________ 20 5.4.8 OTROS COMANDOS vi _______________________________________________________ 21 5.4.9 COMANDOS DE POSICIN DEL CURSOR _______________________________________ 22 5.4.10 "DESPLAZAMIENTO" Y "PAGINADO" DE LA PANTALLA_________________________ 22 5.4.11 BSQUEDA DE PATRONES ___________________________________________________ 23 5.4.12 OPERADORES QUE BORRAN, DUPLICAN O CAMBIAN Y REORGANIZAN EL TEXTO.24 5.4.13 LOS OPERADORES YANK Y DELETE COMBINADOS CON EL COMANDO PUT ______ 25 5.4.14 BORRADO, DUPLICACIN Y REORGANIZACIN DE TEXTOS EN BUFFERS TEMPORALES ______________________________________________________________________ 26 5.4.15 OTROS COMANDOS Y PARTICULARIDADES DE vi ______________________________ 27

5.5

EL EDITOR DE LNEAS ex ________________________________________________28


Laboratorio de Telemtica

pg ii 5.5.1 5.5.2 5.5.3 5.5.4 5.5.5 5.5.6 5.5.7 5.5.8

Sistema Operativo UNIX INTRODUCCIN ____________________________________________________________ 28 LLAMADA AL EDITOR ex_____________________________________________________ 28 FORMATO DE LOS COMANDOS ex ____________________________________________ 28 LOCALIZACIN DE LNEAS __________________________________________________ 29 BSQUEDA DE PATRONES ___________________________________________________ 30 DESPLAZAMIENTOS POR EL TEXTO __________________________________________ 31 INTRODUCCIN DE TEXTO EN ex _____________________________________________ 31 EL COMANDO DE SUSTITUCIN: s ____________________________________________ 32

6.
6.1 6.2 6.3 6.4

PROCESOS Y ENTORNO _____________________________________________ 34


CONCEPTO DE PROCESO ________________________________________________34 CONCEPTO DE ENTORNO _______________________________________________34 VISUALIZACIN DE PROCESOS __________________________________________35 VARIABLES _____________________________________________________________35

7.
7.1 7.2 7.3 7.4

PROGRAMACIN SHELL. CONCEPTOS BSICOS _______________________ 37


METACARACTERES _____________________________________________________37 REDIRECCIONAMIENTOS _______________________________________________38 PIPELINES ______________________________________________________________39
FILTROS____________________________________________________________________ 40

7.3.1

ASIGNACIN DE SALIDA DE COMANDOS A VARIABLES __________________40

8.
8.1 8.2 8.3 8.4 8.5

PROGRAMACION SHELL. COMANDOS ________________________________ 40


COMANDO sort __________________________________________________________40 COMANDO grep _________________________________________________________41 COMANDO wc ___________________________________________________________41 COMANDO tee ___________________________________________________________42 COMANDO cut __________________________________________________________42
CORTE POR CARACTERES ___________________________________________________ 42 CORTE POR CAMPOS ________________________________________________________ 42

8.5.1 8.5.2

8.6 8.7 8.8

COMANDO pr ___________________________________________________________43 COMANDO lp ___________________________________________________________43 EL COMANDO expr ______________________________________________________43

9.
9.1 9.2 9.3 9.4

PROGRAMACIN SHELL. CONTROL DE PROCESOS ____________________ 44


EJECUCIN DE PROCESOS EN BACKGROUND ____________________________44 PRIORIDAD DE UN PROCESO ____________________________________________45 CDIGO DE RETORNO __________________________________________________45
COMANDOS true y false _______________________________________________________ 46 EL COMANDO test CON FICHEROS COMO ARGUMENTOS ________________________ 46 EL COMANDO test CON NMEROS O CARACTERES COMO ARGUMENTOS ________ 46

9.3.1 9.4.1 9.4.2

EL COMANDO test _______________________________________________________46

10.
10.1 10.2 10.3 10.4

FICHEROS DE COMANDOS __________________________________________ 47


ARGUMENTOS EN LOS FICHEROS DE COMANDOS ______________________47 INTRODUCCIN DE DATOS A TRAVS DE VARIABLES __________________48 COMANDO exit ________________________________________________________49 ESTRUCTURAS DE PROGRAMACIN ___________________________________49
Laboratorio de Telemtica

Sistema Operativo UNIX

pg iii

10.4.1 LA CONSTRUCCIN if _______________________________________________________ 49 10.4.2 LA CONSTRUCCIN while ____________________________________________________ 51 10.4.2.1 LOS COMANDOS break y continue __________________________________________ 52 10.4.3 LA CONSTRUCCIN for ______________________________________________________ 53 10.4.4 LA CONSTRUCCIN case _____________________________________________________ 53

Laboratorio de Telemtica

Sistema Operativo UNIX

pg 1

1.

INTRODUCCIN

1.1 SISTEMAS OPERATIVOS


UNIX es un sistema operativo. Por tanto, su funcin bsica es, por una parte, controlar los recursos de un computador y, por otra parte, ofrecer a los programas una interfaz ms independiente del hardware. Estos recursos se pueden clasificar, de forma muy amplia, en: La Unidad Central de Proceso (CPU). La memoria RAM de funcionamiento del computador. La memoria de almacenamiento en disco. Un sistema operativo modeliza esos recursos por medio de lo que se denomina sistema de archivos y gestin de memoria.

1.2 BREVE HISTORIA DEL SISTEMA OPERATIVO UNIX


El sistema operativo UNIX naci en los laboratorios Bell, de la compaa AT&T de Estados Unidos, en 1.969. El 'padre' del sistema fue Ken Thompson, con la colaboracin de Rudd Canaday, Doug McIlroy, Joe Ossana y Dennis Richie, los cuales utilizaron un viejo computador abandonado para desarrollar un pequeo "sistema de propsito general de tiempo compartido, que rpidamente comenz a llamar la atencin. A comienzos de la dcada de los 70, el sistema UNIX fue cedido a las universidades, alcanzando pronto gran popularidad, debido a varias razones: 1. Era un sistema utilizable en minicomputadores. 2. Era flexible, ya que a las universidades se les cedi el cdigo fuente del sistema con lo que podan incorporar diversas modificaciones. 3. Era barato, ya que se les cedi a las universidades de forma prcticamente gratuita. Obviamente, frente a estas ventajas deban contraponerse una serie de inconvenientes: 1. El sistema no estaba lo suficientemente probado, por lo que contena errores. 2. La documentacin existente era muy escasa. 3. No exista soporte tcnico. La llegada del sistema UNIX a la Universidad de Berkeley supuso un gran impulso, hasta el punto de que lanz su propia versin. Fue en este momento cuando AT&T lo comenz a comercializar, al tiempo que Berkeley continuaba desarrollando el sistema, aadiendo ms capacidades, a lo largo de varias versiones, hasta llegar a la actualidad.

1.3 CARACTERSTICAS GENERALES DEL S.O. UNIX


Hay cuatro clases de sistemas UNIX: UNIX de AT&T Berkeley Sistemas con licencia por AT&T Asimilados
Laboratorio de Telemtica

pg 2

Sistema Operativo UNIX

El UNIX AT&T es el UNIX standard; los sistemas con licencia deben estar autorizados por AT&T. Habitualmente los sistemas con licencia incluyen el UNIX AT&T al que aaden ciertas capacidades adicionales. Los asimilados no son UNIX realmente (UNIX slo es el de AT&T y Berkeley) pero su funcionamiento y estructura es casi la misma.

1.3.1 CARACTERSTICAS ESPECFICAS DEL SISTEMAS OPERATIVO UNIX


Al sistema operativo propiamente dicho se le suele denominar kernel y est constituido por el cdigo mquina que coordina el hardware, a fin de que efecte las distintas operaciones requeridas. Por otra parte, se suelen incluir junto con el sistema operativo una serie de utilidades bsicas como un intrprete de comandos o shell, que interpreta las rdenes dadas al ordenador y ejecuta otros procesos, as como pequeas utilidades para manipular ficheros.

1.3.2 El intrprete de comandos (shell) de UNIX


El intrprete de comandos de UNIX, o shell, es un proceso que muestra un indicador de comandos ($, %, o #) y aguarda que el usuario introduzca un comando. Toda vez que el usuario introduce un comando, el intrprete lo valida, y si es correcto crea un proceso hijo que realiza la accin encomendada. Al terminar el proceso hijo, exhibe nuevamente el indicador de comando e intenta leer una nueva lnea de la entrada.

1.3.3 Procesos
Un proceso es bsicamente un programa en ejecucin. Consta del programa ejecutable, datos, pilas, registros y toda la informacin necesaria para ejecutar. Un intrprete de comandos (shell) es un proceso que lee los comandos de usuario desde una terminal y crea procesos hijo para ejecutar ese comando. Se crea as un rbol de procesos en ejecucin. Los procesos se manejan mediante seales que los obligan a suspender, reiniciar o terminar su accin. Las seales se utilizan tambin para comunicacin entre procesos. Cada usuario tiene asignado un identificador de usuario (uid), y grupos de usuarios tienen un identificador de grupo (gid). Un proceso tiene asignado el uid y gid del usuario que lo inici. Ambos identificadores se utilizan para proteger la informacin manejada por el proceso.

1.3.4 Archivos
Existen llamadas al sistema para crear, eliminar, leer y escribir archivos. Los archivos se agrupan en directorios, y existen llamadas al sistema para crear y eliminar directorios, y para colocar y quitar archivos de ellos. Esto crea una jerarqua de directorios y archivos llamada sistema de archivos que se estudiarn en detalle en los apartados siguientes. Por otro lado, todos los sistemas UNIX tienen una serie de caractersticas comunes, que deben ser tenidas en cuenta. Bsicamente son: - Existe distincin entre letras maysculas y minsculas. - No es un user friendly system. Existen pocos mensajes de advertencia en la ejecucin de comandos. - No todo el mundo puede utilizar un sistema UNIX. Slo los usuarios autorizados pueden hacerlo. Debe distinguirse entre el usuario normal y el manager o superusuario.

Laboratorio de Telemtica

Sistema Operativo UNIX

pg 3

2.

ACCESO AL SISTEMA Y COMANDOS GENERALES

2.1 USUARIOS Y ACCESO AL SISTEMA


Como ya se ha indicado, el sistema UNIX slo puede ser utilizado por los usuarios autorizados. Los usuarios se clasifican en dos clases: usuarios normales y superusuario o root. El superusuario es un usuario especial, con mayor capacidad y privilegios que los dems, que se encarga de controlar y cuidar del buen funcionamiento del sistema. Sus actividades y responsabilidades se estudiarn en los captulos correspondientes a la administracin del sistema. Un usuario normal es una persona que tiene permiso para utilizar el sistema. A su vez, los usuarios estn distribuidos por grupos, asignados por el root, y que habitualmente reciben a usuarios con tareas similares. A diferencia de un computador personal al que cualquiera puede acceder una vez puesto en marcha, en UNIX slo los usuarios pueden acceder. Cuando se enciende un sistema bajo UNIX, el sistema, despus de realizar una serie de tests y operaciones previas, lanza este mensaje a pantalla: login: Esa es la seal de que el sistema est preparado para atender la peticin de acceso de un usuario. El usuario es reconocido por el sistema mediante el nombre de usuario. Este nombre puede estar formado por cualquier cadena de caracteres (tradicionalmente con un mximo de 8 caracteres, aunque en muchos sistemas Unix actuales el lmite sea mayor), y es introducido al sistema por el superusuario. Una vez introducido el nombre, se accede al sistema, de forma que en la pantalla aparecer el prompt, representado habitualmente por el smbolo $. A partir de este momento, el usuario ejecutar los comandos y procesos que desee. As pues, un usuario slo necesita su nombre para acceder al sistema. Sin embargo, cualquier persona que posea este dato puede acceder al sistema en nombre de otro. Para evitar esto, un usuario puede protegerse mediante la utilizacin de una palabra clave o password. La asignacin del password es realizada por el propio usuario, mediante el comando passwd. Este comando solicita al usuario el password, que ser introducido por duplicado para evitar confusiones, ya que su tecleado no se refleja en la pantalla. De esta forma, el usuario queda protegido, de modo que al solicitar acceso al sistema, tras el login, aparecer el mensaje password: indicando que el mismo debe ser introducido. Si ste no es correcto, volver a lanzarse a pantalla el mensaje login: Si alguien teclea un nombre no autorizado, el sistema le solicita el password, con el fin de que no sepa si ese usuario existe o no. Una vez terminado el trabajo, el usuario debe abandonar el sistema, lo que har mediante el comando exit o bien con las teclas ctrl-d. Al perodo de tiempo transcurrido entre un acceso y posterior abandono del sistema se le denomina sesin. Tambin, al hecho de poseer un nombre autorizado en el sistema se le denomina "tener una cuenta". Por tanto, ser usuario autorizado o -tener una cuenta- en un sistema expresa el mismo concepto.

Laboratorio de Telemtica

pg 4

Sistema Operativo UNIX

2.2 FORMATO DE COMANDOS


Una vez dentro de una sesin, el manejo del sistema se realiza a travs de comandos o aplicaciones. Un comando es una orden propia del sistema que realiza una funcin determinada. Una aplicacin es un programa de computador creado por un usuario, que igualmente transmite rdenes al computador. Operativamente, no existe ninguna diferencia entre comando y aplicacin. La nica distincin reseable entre ambos es el hecho de que el comando pertenece al sistema operativo, y en todos los UNIX standard el mismo comando ejercer la misma funcin. En UNIX los distintos comandos estn escritos originalmente en lenguaje C como ya se indic previamente. Si se desea conocer el programa concreto que se utiliza al ejecutar un comando, se puede visualizar mediante el comando which: $ which echo /bin/echo

Cuando se ejecuta un comando, debe tenerse en cuenta el formato del comando. De manera general. este formato responde a la siguiente estructura. $ comando opciones argumentos

El comando es, sin ms, su nombre, que lo distingue de los dems, y que permite al sistema determinar la orden a ejecutar cuando es tecleado. Los comandos siempre se escriben en letras minsculas. Una opcin es un indicador que modifica de alguna manera el funcionamiento general y habitual del comando. Como tal opcin no tiene por qu utilizarse siempre. Habitualmente, las opciones consisten en un solo carcter (si bien pueden ser ms) escrito en maysculas o minsculas (aunque a veces pueden intervenir caracteres numricos). Normalmente, las opciones van precedidas por un guin -. Las opciones son acumulativas, de modo que sobre un comando pueden actuar a la vez distintas opciones, dando como resultado la ejecucin del comando con las particularidades correspondientes a todas las opciones. En este caso, nicamente antes de la primera opcin se colocar el guin. As, si el comando cmd se ejecuta con la opcin b o la c, el comando se escribir $ cmd -b $ cmd -c Pero si se ejecuta simultneamente con las dos opciones, se escribir $ cmd -bc $ cmd -cb Entre comando y opcin debe existir al menos un espacio en blanco (y no comas, guiones u otros caracteres. El espacio en blanco es el separador universal en UNIX). No deben dejarse espacios en blanco entre las distintas opciones de un comando. Adems, debe indicarse que antes de escribir el comando pueden dejarse tantos espacios en blanco como se desee, con una sola excepcin: el comando exit que debe ir situado al comienzo de la lnea.

Laboratorio de Telemtica

Sistema Operativo UNIX

pg 5

Un argumento es aquello sobre lo que recae la accin del comando, o bien una informacin externa suministrada por el usuario, y que resulta necesaria para la ejecucin del comando. En muchas ocasiones, los argumentos sern ficheros del sistema. El nmero de argumentos que puede utilizar un comando puede decirse que es ilimitado, si bien raras veces se usan ms de dos. Entre un argumento y las opciones (en caso de haberlas) debe existir al menos un espacio en blanco, al igual que entre los distintos argumentos entre s. Cuando se ha escrito correctamente un comando, debe presionarse la tecla INTRO, con lo que el comando es ejecutado. Siempre que se pulsa INTRO, el cursor de pantalla se situar en el primer lugar de la lnea siguiente de la pantalla. Pueden combinarse varios comandos en una misma lnea a travs del smbolo ';'. Sin embargo, esta no es una prctica aconsejable.

2.3 COMANDOS INFORMATIVOS


Los comandos informativos proporcionan al usuario informaciones generales sobre el sistema. Los principales son los siguientes: date: escribe en pantalla la fecha y hora del sistema. Este comando no utiliza argumentos habitualmente, si bien posee numerosas opciones. Excepcionalmente, las opciones van precedidas por el signo + en lugar de -. Adems, todas sus opciones comienzan con el smbolo %. Las ms importantes son: % a: % A: % b: % B: % d: % H: % j: % m: % M: % S: % x: % X: % y: % Y: escribe nicamente el da de la semana de forma abreviada escribe nicamente el da de la semana de forma completa escribe nicamente el nombre del mes de forma abreviada escribe nicamente el nombre del mes de forma completa escribe nicamente el da del mes en nmero (01-31) escribe nicamente la hora en nmero (00-23) escribe nicamente el da del ao en nmero (001-366) escribe nicamente el mes como nmero (01-12) escribe nicamente el minuto como nmero (00-59) escribe nicamente el segundo como nmero (00-59) escribe nicamente la fecha escribe nicamente la hora escribe nicamente el ao sin el siglo (0-99) escribe nicamente el ao con el siglo

El comando date tambin permite modificar la fecha y hora del sistema. Esta funcin slo le est permitida al manager; en este caso el comando utiliza un argumento compuesto por 10 cifras, con la siguiente estructura. $ date mm dd hh nn aa mm = mes dd = da hh = hora nn = minuto aa = ao

Laboratorio de Telemtica

pg 6

Sistema Operativo UNIX

who: este comando indica qu usuarios estn conectados al sistema en un momento determinado. Habitualmente, este comando no lleva argumentos. Cuando se utiliza, aparecen en pantalla los usuarios que en ese momento se hallan conectados al sistema. Por cada usuario, se escribe el nombre, la terminal a la que est conectado, la fecha y la hora de conexin. Su principales opciones son:

-b:

indica la fecha y hora en que el sistema fue conectado por ltima vez

-t: indica el ltimo cambio del reloj del sistema realizado por el manager utilizando el comando date. Adems de stas, el comando posee la opcin 'am i", escrita sin guin (who am i) y que proporciona el nombre del usuario conectado a mi terminal. No debe confundirse con whoami comando que realiza la misma funcin. whoami es un comando, mientras que who am i es un comando con una opcin. id: proporciona la identificacin del usuario invocante, dando el nombre de usuario y su nmero (UID), nombre de grupo primario y su nmero (GID), nombres de otros grupos a los cuales pertenece (si los hay) y sus nmeros. finger: proporciona nombre del usuario en el sistema, nombre en la vida real y otros datos del usuario invocante, indicando si est en este momento en el sistema, y si tiene correo por leer. hostname: muestra el nombre de la mquina UNIX sobre la que se est trabajando. man: este comando proporciona informacin sobre el funcionamiento de un comando del sistema. Es un manual incorporado al sistema, y resulta muy til. El comando man siempre lleva un argumento, que es el nombre del comando del cual queremos la informacin. Posee una opcin, la k' con la cual, se obtiene una informacin ms resumida que en el caso anterior y referente a todos los comandos similares al solicitado. apropos: muestra el nombre de la mquina UNIX.

2.4 COMANDOS DE MENSAJE


Son comandos que nicamente reflejan en pantalla la informacin suministrada por el usuario. Los principales son: banner, este comando escribe en pantalla en grandes caracteres el argumento que lleve a continuacin. Este argumento estar constituido por cualquier cadena de caracteres. Echo: refleja en pantalla el argumento que lleve a continuacin. Su autntica utilidad se ver posteriormente.

Laboratorio de Telemtica

Sistema Operativo UNIX

pg 7

3.

FICHEROS

3.1 CONCEPTO Y TIPOS DE FICHEROS


Un fichero es un conjunto de informacin agrupada bajo un nombre que reside almacenada en un disco. Toda la informacin del sistema se halla contenida en ficheros, incluso aquellas rdenes que cada comando supone para el sistema. Algo importante a tener en cuenta es el hecho de que en UNIX son ficheros tanto lo que habitualmente se conoce como ficheros, como los directorios, e incluso los perifricos (discos, terminales, teclados, impresoras, .... ). Estos ltimos son denominados device files y pueden ser de dos tipos: character (o especial) y block. Cada fichero tiene un propietario, que es el usuario que lo ha creado (ya sea mediante un editor o mediante copia de otro).

3.1.1 DENOMINACIN DE FICHEROS


Los nombres de los ficheros pueden estar constituidos por cualquier cadena de caracteres (salvo algunos caracteres especiales, como *, /, etc.). Debe recordarse que en UNIX se distinguen maysculas y minsculas, y por lo tanto el fichero FILE ser distinto del fichero file. Un dato importante es que en UNIX, al contrario que en otros sistemas como el DOS o Windows, no existen extensiones para los nombres. As pues, un fichero denominado file.abc tiene un nombre de 8 caracteres, no un nombre de 4 con una extensin de 3. Por otra parte, para cada fichero (cualquier tipo de ficheros) deben distinguirse su nombre absoluto y los nombres relativos. El nombre absoluto de un fichero es el formado por todos los directorios por los que se debe pasar para, partiendo del directorio raz, llegar al fichero. Los nombres absolutos siempre comienzan por /. Un fichero slo tiene un nombre absoluto. Sin embargo, puede tener diversos nombres relativos, tantos como directorios haya en el sistema. El nombre relativo de un fichero respecto a un directorio es el formado por todos los directorios por los que se debe pasar para, partiendo del directorio en cuestin, llegar al fichero. Los nombres relativos nunca empiezan por /. El salto de un directorio a otro situado en un nivel inmediatamente inferior (o que cuelga directamente de l) se representa mediante el smbolo /. El paso al directorio inmediatamente superior (o directorio padre) se representa mediante el smbolo ../( el smbolo .. representa al directorio padre).

Laboratorio de Telemtica

pg 8

Sistema Operativo UNIX

3.2 EL SISTEMA DE FICHEROS. DIRECTORIOS


Como ya se ha dicho, toda la informacin del sistema se almacena en ficheros, los cuales a su vez se agrupan en directorios. Un directorio es un fichero cuyo contenido es ms ficheros o directorios. Cuando un sistema UNIX est instalado, tiene definidos una serie de directorios con nombres standard, y cuya estructura es la siguiente: / bin usr lib etc home lost+found dev tmp

Por supuesto, los usuarios pueden definir sus propios directorios. Los contenidos bsicos de los directorios indicados suelen ser los siguientes: bin: contiene diferentes comandos del sistema, habitualmente los ms utilizados usr contiene comandos menos utilizados que los anteriores, o bien ficheros referentes a aplicaciones externas al sistema lib: libreras de ficheros objeto (grficas, matemticas...) etc: ficheros propios de la administracin del sistema users: directorios login de los usuarios dev: ficheros asociados a los perifricos del sistema lost+found: directorio utilizado en ciertas tareas de la administracin del sistema. Habitualmente estar vaco. tmp: directorio de ficheros temporales. Suele utilizarse cuando se instala alguna aplicacin o revisin del sistema, o cuando se producen errores en ciertas aplicaciones. Hay una serie de directorios particulares para los usuarios que es necesario considerar: El directorio raz /: es el directorio del que cuelga todo el sistema de ficheros. No tiene padre. Directorio login o directorio de acceso es aquel directorio al cual va a parar un usuario cuando accede al sistema. Cada usuario tiene su propio directorio login, que es asignado por el manager. El directorio login del manager es el /. Directorio actual: es el directorio en el que un usuario est situado en un momento determinado. Su nombre absoluto se representa por el smbolo .. Directorio padre: cada directorio cuelga directamente de otro (salvo el /) que es su directorio padre. El nombre absoluto del directorio padre del directorio actual se representa por ...

Laboratorio de Telemtica

Sistema Operativo UNIX

pg 9

3.3 MANIPULACIN DE DIRECTORIOS


Los principales comandos que intervienen en la manipulacin de directorios son los siguientes: mkdir: crea uno o ms directorios, con los nombres indicados como argumentos: $ mkdir dir1 dir2 crea los directorios dir1 y dir2. rmdir: borra los directorios indicados como argumentos, con la condicin de que estn vacos. cd: permite situarse en el directorio indicado como argumento. Si se utiliza sin argumento, el usuario es situado en su directorio login. pwd: escribe en pantalla el nombre absoluto del directorio actual.

3.4 MANIPULACIN DE FICHEROS


A continuacin se indican los principales comandos que se utilizan en el sistema de ficheros. Las operaciones que realizan y sus principales opciones: ls: escribe en pantalla los nombres de los ficheros que contiene el directorio(s) indicado como argumento. Salvo aquellos cuyo nombre empieza por el smbolo .. Si no se da argumento, se toma por defecto el directorio actual. Los ficheros salen ordenados alfabticamente (primero las maysculas, despus las minsculas). Si el argumento es un fichero no directorio, escribir el nombre sin ms. Sus principales opciones son: -a: muestra en pantalla todos los ficheros del directorio, incluidos aquellos cuyo nombre comienza por .. -d: si el argumento es un directorio, muestra slo su nombre, no su contenido. -s: adems del nombre, se muestra el tamao de cada fichero en bloques (1 bloque = 512 bytes) -t: los ficheros salen ordenados cronolgicamente y no alfabticamente. -F: detrs de cada directorio aparece el smbolo /, detrs de cada fichero ejecutable el smbolo * y detrs de cada link simblico el smbolo @. -R: opcin Recursiva. Si alguno de los ficheros del directorio es a su vez un directorio, se muestra en pantalla su contenido, y as sucesivamente hasta completar todos los niveles de ficheros. -l: para cada fichero muestra una lnea con una serie de informaciones adicionales. El formato de cada lnea es el siguiente. - rwxr-xr-x 1 root other 1072851 May 6 18:22 hp-ux
nombre fecha y hora de la ltima modificacin

permisos carcter n links identificador del fichero

propietario espacio en bytes grupo propietario

Laboratorio de Telemtica

pg 10

Sistema Operativo UNIX

touch: Si no existe el fichero crea un archivo sin contenido alguno. Si el fichero existe, cambia la fecha del fichero. cat: muestra en pantalla el contenido de un fichero que se utilice como argumento. No tiene opciones. head: muestra las primeras 10 lneas de un archivo. tail: muestra las primeras 10 lneas de un archivo more: su funcin es muy similar a cat. Muestra en pantalla el contenido de un fichero de forma paginada. De esta manera, se puede leer el contenido de ficheros cuya longitud rebasa la de la pantalla. Cuando la terminal se llena, se detiene la ejecucin del comando hasta que sea pulsada la tecla espaciadora, momento en que se pasa a la pgina siguiente. No tiene opciones. cp: permite copiar un fichero en otro. La estructura del comando es la siguiente: $ cp F1 F2 F1 y F2 pueden ser nombres relativos o absolutos. Si F2 no existe, se crea un fichero con ese nombre. Si F2 existe y es un directorio, se crea en F2 un fichero con el nombre de F1. Si F2 existe y no es directorio, su contenido desaparece y es sustituido por el de F1. El comando puede tener ms de dos argumentos (nunca menos). En este caso, es necesario que el ltimo de ellos sea un directorio de modo que todos los dems representaran ficheros que sern copiados a ese directorio con el nombre original. El comando cp posee una opcin, la -r, que permite copiar directorios de forma recursiva, es decir, copiando ntegramente su contenido (y el de los directorios que contenga) en otro directorio. mv: permite renombrar o trasladar un fichero a otro. Su esquema de funcionamiento es el mismo que el de cp, salvo que no dispone de la opcin recursiva. ln: permite crear un link de un fichero. Un link de un fichero es una copia virtual del mismo. Es como tener un fichero con varios nombres o en distintos directorios, de modo que todos representan el mismo fichero, hasta el punto de que una modificacin realizada en uno de ellos puede ser trasladada a todos. Existen dos tipos de links: hard o soft. Un enlace "hard" (hard link) es una nueva referencia a un mismo archivo; consiste en una nueva entrada de directorio que apunta a un archivo ya existente y apuntado desde otra entrada de directorio. El contenido se encuentra en un solo lado, pero el archivo puede ser accedido desde varios lugares, eventualmente con diferentes nombres. El comando utilizado para crear un enlace hard es ln. $ ln F1 F2 Crea un segundo nombre referido al mismo archivo; no se hace copia, crea un enlace (link).Cuando se borra un archivo con varios enlaces hard, slo se borra el enlace. El archivo es realmente borrado slo cuando desaparece el ltimo enlace.

Laboratorio de Telemtica

Sistema Operativo UNIX

pg 11

$ ln dir1 dir2 Da error; no se puede crear un enlace hard para un directorio. Un enlace "soft" (symbolic link) es un archivo que apunta a otro archivo o directorio. El archivo de enlace simblico contiene solamente la ruta del otro archivo o directorio. El comando utilizado para crear un enlace hard es ln s. $ ln -s F1 F2 crea F2 como enlace simblico a F1. Cuando se borra un enlace simblico, slo se borra un archivo puntero, y no el objeto real. $ ln s dir1 dir2 Crea dir2ls como enlace simblico hacia un directorio. rm: borra los ficheros indicados como argumentos. Este comando presenta dos opciones principalmente: - i: por cada fichero que va a ser borrado se pide al usuario la confirmacin de la operacin. -r: opcin recursiva. Se utiliza con directorios y permite borrar todo el contenido del directorio, incluidos los ficheros de los directorios que contenga hasta el ltimo nivel. Esta opcin debe manejarse con mucha precaucin.

3.5 PROTECCIONES DE FICHEROS


Todos los ficheros en UNIX estn protegidos. Cuando se estudiaba el comando ls con la opcin -l (ls l), veamos que se obtiene en pantalla el conjunto de ficheros de un directorio, con una serie de informaciones referentes a cada uno de ellos. Entre ellas estn los permisos de ese fichero, simbolizados por 9 caracteres. A estos caracteres nos referiremos en lo que sigue. Cada fichero posee tres tipos de permisos: permiso de lectura, permiso de escritura y permiso de ejecucin. Los permisos actan en tres niveles diferentes: permisos para el propietario, permisos para el grupo del propietario y permisos para el resto de los usuarios. De los 9 caracteres que representan los permisos, los 3 primeros representan los permisos del propietario, los tres siguientes son los permisos de los usuarios pertenecientes al grupo del propietario. Los tres ltimos corresponden a los permisos del resto de usuarios.

--- --- --permisos propietario

--- --- --permisos grupo

--- --- --permisos otros

Para cada uno de esos niveles definen los permisos de lectura, escritura y ejecucin. Todo lo que se explique a continuacin para un nivel es aplicable a los otros dos. La primera posicin corresponde al permiso de lectura, la segunda al de escritura y la tercera al de ejecucin. _____ _____ _____ lectura escritura ejecucin

Laboratorio de Telemtica

pg 12

Sistema Operativo UNIX

El permiso de lectura se representa por una r, el de escritura por una w y el de ejecucin por una x. Si el permiso existe, la letra aparece en la posicin correspondiente. De lo contrario, aparecer un guin. El significado de los permisos de un fichero es diferente segn que se trate de un directorio o de un fichero ordinario. A continuacin se indica el significado de la no existencia de un permiso. Permiso de lectura: para un fichero o directorio, quiere decir que no se puede ver su contenido. Por tanto, no puede ejecutarse el comando cat en caso de fichero, o ls en caso de directorio Permiso de escritura: para un fichero, significa que no puede modificarse ni borrarse por tanto, no puede utilizarse con l el comando rm, ni grabar modificaciones con un editor de textos. Para un directorio significa que no puede alterarse su contenido. Por tanto, no pueden borrarse ni aadirse ficheros a l, pero s a los directorios que cuelgan de l Permiso de ejecucin: para un fichero significa que no puede ser ejecutado (obviamente, siempre que tenga capacidad de serlo). Para un directorio significa que no se puede acceder a l (por tanto, no puede ejecutarse el comando cd sobre l ni a ninguno de sus directorios. Esta imposibilidad de acceso supone en la prctica tambin la negacin del permiso de escritura. Los permisos de un fichero slo pueden ser modificados por su propietario (y por el manager, evidentemente). Para ello, se utiliza el comando chmod, que puede ser utilizado en dos formas distintas: * Comando chmod: 1 forma: La estructura del comando es: $ chmod nivel modificacin permiso fichero El primero de los argumentos, como puede verse, es una combinacin de tres datos: el nivel al que va a afectar la modificacin (propietario, grupo, otros), el tipo de modificacin (adicin de un permiso, eliminacin o asignacin), y por ltimo, el permiso o permisos implicados en la modificacin. El nivel de la modificacin se indica mediante las letras: u g o a (propietario) (grupo) (otros) todos (dueo, grupo y otros)

Si no se indica, se entiende que la modificacin afecta a los 3 niveles. El tipo de modificacin se representa por los smbolos + aadir permiso (dejando los dems como estn) - eliminar permiso (dejando los dems como estn) = asignar slo los permisos asignados (y eliminando los dems) Los permisos implicados se representan por sus correspondientes letras: r w x lectura escritura ejecucin
Laboratorio de Telemtica

Sistema Operativo UNIX

pg 13

En la siguiente tabla se presentan unos ejemplos del funcionamiento del comando.

inicial rw-rw-rwrwxrwxrwx r-xr-xr-rwxr-xr-rwxr-xr-x

Modificacin +x o-w u+w g=rw =

final rwxrwxrwx rwxrwxr-x rwxr-x--rwxrw-r----------

Ejemplos de permisos en notacin simblica: u+r g+w-r ug+r ugo+w-rx u+rwx,g+r-wx,o-rwx

chmod u+rwx,g+rw-x,o+r-wx arch1 chmod u=rwx,g=rw,o=r arch1 cambian los permisos de los archivos indicados.

* Comando chmod: 2 forma: La estructura del comando en esa segunda forma es similar a la primera. Sin embargo, el primer argumento en este caso se expresa mediante tres cifras. Cada una de las cuales toma valores ente 0 y 7. La primera de ellas indica los permisos del propietario; la segunda, los del grupo, y la ltima los de los otros usuarios. Para cada nivel, existen 8 posibles combinaciones de sus permisos de lectura, escritura y ejecucin, que se representan por cada uno de los 8 valores comprendidos entre 0 y 7. La forma de obtener el nmero correspondiente a cada combinacin es la siguiente: r 4 w 2 x 1

Se asigna el nmero 1 al permiso de ejecucin, el 2 al de escritura y el 4 al de lectura, y se suman los nmeros correspondientes a los permisos deseados. El nmero obtenido indica la combinacin deseada de permisos. As, el 7 indica todos los permisos, mientras que el 0 significa ningn permiso. Ejemplos de permisos en notacin absoluta: 0777 0755 0764 0640 0710 chmod 0764 arch1

Laboratorio de Telemtica

pg 14

Sistema Operativo UNIX

4.

COMUNICACIONES ENTRE USUARIOS

4.1 MAIL
El comando mail sirve para enviar mensajes entre usuarios como si se tratara de un correo. El mensaje puede ser ledo das ms tarde de haberse emitido, y es independiente de las terminales del computador, es decir, va dirigido a un usuario, no a una terminal concreta. El comando sirve tanto para enviar como para leer los mensajes. * Funcionamiento del mail enviar mensajes: En este caso la estructura del comando es: $ mail usuario(s) Los argumentos son nombres de usuarios a los que se enviar el mensaje. Al pulsar el return, no aparece el prompt $, sino que la pantalla queda en espera para recibir el mensaje. Dicho mensaje es escrito por el usuario emisor a travs del teclado. Para finalizar el mensaje, se pulsan las teclas Ctrl d, momento en que aparece de nuevo el prompt $. * Funcionamiento del mail para leer mensajes: Cuando un usuario recibe un mail, no tiene, en principio, notificacin alguna de ello, si bien la mayor parte de los sistemas UNIX lanzan el aviso You have mail al usuario cuando ste entra en sesin. (Es lo mismo que cuando una persona recibe una carta en el buzn. Si no se mira, no se sabe que ha llegado). Para leer los mensajes recibidos (o para ver si hay alguno), basta con teclear $ mail En ese momento, si existe algn mensaje, ste aparece en pantalla. aparecer el texto no mail Un usuario puede tener varios mensajes acumulados. aparece en pantalla es el ltimo recibido. En este caso, el mensaje que De lo contrario

Cuando el mensaje se ha escrito en su totalidad, el computador queda a la espera de la contestacin por parte del usuario. Esta espera se simboliza mediante el smbolo ? en pantalla. La contestacin puede ser del siguiente tipo: Return: aparece en pantalla el siguiente mensaje. Sin embargo, el anterior permanece en el mail. Esto quiere decir que cuando se vuelva a ejecutar mail, volver a aparecer ese mensaje. p: d: vuelve a aparecer en pantalla el mismo mensaje se borra el mensaje y aparece el siguiente

Laboratorio de Telemtica

Sistema Operativo UNIX

pg 15

s F1:

el mensaje queda almacenado en el fichero F1, pasndose al siguiente. Si con la opcin s no se especifica un nombre de fichero, el mensaje se almacena en el fichero mbox. se vuelve al mensaje anterior sin alterar el presente.

-:

m user: se reenva el mensaje al usuario user. El comando mail, cuando se utiliza para leer mensaje tiene una opcin, -r, con la cual los mensajes aparecen ordenados en orden cronolgico. Siempre que se contesta al ltimo mensaje, se retorna al entorno UNIX.

4.2 WRITE
El comando write se utiliza para mantener una conversacin entre dos usuarios que estn conectados simultneamente en dos terminales distintas. La estructura del comando es $ write U1 Esto quiere decir que el usuario establece comunicacin con el usuario U1. Este usuario recibir en pantalla el aviso correspondiente, y a partir de ese momento, cada usuario escribir por teclado los mensajes que quiera enviar. Siempre que se pulse return. el mensaje aparecer en la otra terminal. Para finalizar la comunicacin, basta con pulsar ctrl d, con lo que se obtendr de nuevo el prompt $. En ocasiones, puede ocurrir que un mismo usuario est conectado a la vez a varias terminales. En este caso, si se lanza un write a ese usuario, en la pantalla aparecer la lista de terminales a las que est conectado, con el fin de elegir una concreta. En ocasiones, un usuario puede no querer ser molestado con este tipo de acciones. Por ello, existe un comando, mesg, que permite inhabilitar la terminal para recibir mensajes. El comando puede ser utilizado en solitario, o bien con las opciones y o n. Nunca lleva argumentos. Su funcionamiento es: $ mesg n: $ mesg y: $ mesg: se inhabilita la terminal para recibir mensajes se habilita la terminal para recibir mensajes escribe en pantalla la situacin de la terminal (habilitada o no)

Laboratorio de Telemtica

pg 16

Sistema Operativo UNIX

5.

EDITORES

La familia de editores en UNIX est compuesta de tres editores distintos, llamados ex, ed y vi. ed ex vi el editor de lneas estndar original un editor de lneas que sustituye a ed un editor de pantalla

En el sistema operativo UNIX, todo se almacena en ficheros, incluso el propio sistema operativo UNIX Los editores UNIX permiten alterar los ficheros de un modo fcil y eficiente, facilitando el soporte bsico que se necesita para la mayora de tareas UNIX. En estas secciones daremos un repaso al funcionamiento de los editores y sus buffers, y a continuacin describiremos las principales caractersticas de vi. En el siguiente captulo estudiaremos el editor ex.

5.1 EL BUFFER DE MEMORIA


Nuestros ficheros estn clasificados en la memoria del sistema: cuando disponemos que un editor trabaje con un fichero, la copia original de este ltimo permanece inalterada. Para ello, se crea una copia del fichero sobre la que se trabaja: esta copia se mantiene en un rea de memoria temporal denominada buffer. Los cambios realizados se ejecutan sobre esta copia, no sobre el fichero original. Si se desea que estos cambios afecten al fichero de forma permanente, se deber sustituir el fichero original por la nueva copia. Esta ltima etapa es muy sencilla: simplemente se da a la mquina la orden de escritura y el ordenador se encarga de sustituir el original por la versin actualizada. El trabajo con buffer supone una gran ventaja: por ejemplo, si hacemos una chapuza en el trabajo que estamos editando (borrar una pgina accidentalmente), no se habr daado el fichero original. Para reparar nuestro despiste, basta con abandonar el editor y quedarn perdidas para siempre las pruebas de nuestro error, dejando el original inalterado. Evidentemente, este modo de funcionamiento supone tambin una desventaja: los cambios no se almacenan automticamente. Es importante recordar que se deben escribir dichos cambios; si no se hace, todo el trabajo de alteraciones se perder. Algunas versiones de editores UNIX intentan refrescarle su memoria con una aviso si trata de abandonar el editor antes de escribir su texto, otras, no. Nos ocuparemos de inmediato de estudiar cmo funciona el proceso de edicin.

5.2 DOS MODOS DE FUNCIONAMIENTO DE EDITORES


Los editores ex y vi tienen dos modos bsicos de operacin: el modo texto (Text Input Mode) y el modo comando o modo de edicin (Command Mode). Cuando entramos por primera vez al editor, nos encontramos en comando. Esto significa que cualquier tecla que se pulse se toma como si fuera una orden, semejante a los comandos que ya hemos visto anteriormente. En este modo de funcionamiento se puede borrar una palabra o lnea, o cambiar un error ortografa. Accedemos al modo texto utilizando el comando Aadir (Append), es decir, pulsando la tecla <a>. A partir de ese momento, cualquier tecla que se pulse se interpretar como texto para ser almacenado en el buffer, no como comandos tal como suceda antes. Ahora podemos introducir un texto que eventualmente sea un programa FORTRAN, unos datos de ventas o los captulos de un
Laboratorio de Telemtica

Sistema Operativo UNIX

pg 17

libro. Cada editor tiene una nica forma de salir del modo texto: en el caso de( editor vi es la tecla <esc> mientras que el editor ex abandona el modo texto cuando se introduce un punto <.> como primer y nico carcter de una lnea.

5.3 COMPARACION ENTRE LOS EDITORES DE LNEAS Y DE PANTALLA


Todos los sistemas UNIX contienen la familia completa de editores ex. Con qu editor nos quedamos?. Recomendamos que se comience con el editor de pantalla vi. En el captulo siguiente nos preocuparemos del estudio detallado del editor de lneas ex.

5.4 EL EDITOR vi
vi es un editor de texto interactivo, diseado para utilizarse con un terminal provisto de pantalla. En dicha pantalla se muestra normalmente una ventana del fichero que se est editando: esta ltima permite ver unas cuantas lneas de fichero al tiempo, y adems la ventana se puede subir o bajar a lo largo del fichero. Tambin se puede trasladar a cualquier parte de cualquier lnea de la pantalla, y realizar cambios all, las adiciones y cambios que se realizan en el fichero quedan reflejados sobre lo que se ve en pantalla Si se intentase una descripcin completa de los aproximadamente 100 comandos de vi, el principiante quedara totalmente abrumado; por esta razn, se ha decidido dividir la presentacin de los comandos vi en tres partes. Estas partes representan tres niveles distintos de experiencia de manejo con el editor.

1. A. B C D. E. F

Comandos bsicos para comenzar a utilizar vi. Comandos de posicin del cursor: h, j, k, l y <return> Comandos para entrar en modo texto: a, i, o, O Comandos para abandonar el modo texto: <esc> Comandos para borrar y sustituir x, dd, r Comandos para deshacer cambios: u, U Comandos para almacenar y abandonar el editor: ZZ, :w, :q!, :wq, q

2. A. B. C. D. E.

Comandos vi avanzados para aumentar sus posibilidades. Comandos de posicin del cursor incluyendo desplazamiento, paginado y bsqueda: <control-d>, <control-f>, <control-b>,<control-u>, e,b,G,nG Comandos que actan sobre palabras, frases, lneas o prrafos: c,d,y Abreviaturas de palabras, frases, lneas o prrafos: w,b,e,<,>,O,$, {,} Comandos para imprimir lo almacenado en los buffers. p, P Unin de lneas: J

3. A.

Otros comandos vi Existen unos 60 o ms comandos adicionales, que permiten hacer otras operaciones de adicin del mismo tipo que los descritos anteriormente.

Laboratorio de Telemtica

pg 18

Sistema Operativo UNIX

5.4.1 PARA EMPEZAR EN vi


Aunque, como ya se ha comentado. el editor vi es muy complejo y posee un enorme nmero de comandos, su estructura bsica es muy simple. Existen dos modos de operacin, el modo comando y el modo texto. En esta seccin nos limitaremos al mnimo nmero posible de comandos que permitan comenzar a utilizar el editor. Aunque el nmero de comandos comentados ser muy reducido, en realidad quedan cubiertas las cuatro principales caractersticas de la edicin: llamada al editor: vi nombre de fichero posicionado del cursor: h, j, k, l y <return> insercin de texto: a, i, o, O borrado y cambio: x, dd, r almacenamiento permanente de la informacin: wq

Nuestro primer ejemplo mostrar cmo entrar y salir del editor vi. Debemos estar situados en el sistema UNIX lo que quedar reflejado por el prompt ($) del mismo. El comando que se introduce es $vi fichero para iniciar el trabajo con el editor

Para salir de vi, utilizaremos la secuencia de comandos <esc> :wq para abandonar el editor

Recuerde que <esc> significa pulse la tecla marcada ESC o ESCAPE, dependiendo de la terminal: a continuacin pulse :wq para escribir y abandonar la edicin. El fichero puede ser un fichero ya existente en su directorio, en cuyo caso queda copiado en un buffer temporal para su edicin. En el caso de que no exista un fichero con ese nombre, se crea un nuevo fichero. Cuando se llama al editor vi, ste responde en pantalla con el contenido del fichero seguido con una serie de smbolos tilde (-). en caso de que la longitud del fichero sea menor que la de la pantalla. Al final de la pantalla, aparece el nombre del fichero. El editor se sita en modo comando y el cursor se coloca en la esquina superior izquierda de la pantalla. Cualquier cambio, operacin de borrado o adicin que se quiera hacer se realizar tomando como punto de referencia la posicin del cursor. Por consiguiente, la pregunta inmediata es cmo se mueve el cursor?

5.4.2 MOVIMIENTOS DEL CURSOR


Existen ms de 40 comandos en vi para ayudarle a colocar el cursor en cualquier posicin del buffer. Habitualmente los terminales tienen teclas con flechas para desplazar el cursor. Ms adelante, en la seccin "comandos de posicin del cursor, mostraremos otros muchos comandos para desplazarlo. La tecla <return> tambin desplaza el cursor una lnea hacia abajo. Sin embargo, la tecla <return> coloca el cursor siempre al comienzo de la siguiente lnea, mientras que la flecha correspondiente desplaza el cursor en direccin vertical desde la posicin en que se encuentre, que bien puede ser el centro de una lnea. El cursor no puede moverse sobre un fichero nuevo que no contiene texto; es decir, las teclas se movern nicamente sobre lneas o caracteres de texto ya existente en el fichero.
Laboratorio de Telemtica

Sistema Operativo UNIX

pg 19

5.4.3 EL MODO TEXTO


Trabajaremos ahora con cuatro comandos que permitirn utilizar el teclado para introducir texto en el fichero. Estos comandos son: a para aadir texto (append) i para insertar texto (insert) o y O para abrir (open) Todos estos comandos toman como punto de referencia la posicin actual del cursor. Si se comienza una edicin vi sobre un nuevo fichero, el cursor est restringido a la esquina superior izquierda de la pantalla; el cursor no puede desplazarse por medio de las teclas indicadas; sin embargo, si se utiliza la orden a, para aadir texto, i para insertarlo, o bien open para abrir una lnea, se podr introducir el texto que se desee comenzando precisamente en la mencionada esquina superior izquierda, tal como se hace normalmente en una hoja de papel. Puede ser que est preguntndose: y cmo meto texto en mitad de la lnea, por ejemplo, un ttulo? La respuesta es que debe utilizar la barra espaciadora despus de haber entrado en modo texto. Si comienza una sesin de edicin vi en un fichero y utiliza el comando de abrir (open, o u O), el cursor se mover hacia arriba (O) o hacia abajo (o) una Inea y quedar listo para recibir texto desde teclado. La manera habitual de comenzar un nuevo fichero es teclear vi seguido por un espacio y el nombre del fichero que se desea utilizar. Cuando el editor est listo, teclee a; a continuacin puede empezar a usar el teclado como si se tratase de una mquina de escribir. Pulse la tecla <return> para comenzar una nueva lnea: si comete algn error, puede utilizar la tecla de borrado normal para retroceder y corregir. En algunos terminales, las letras borradas no desaparecen de la pantalla hasta que se reescribe texto sobre ellas, pero en todo caso quedan eliminadas del buffer.

5.4.4 CMO AADIR TEXTOS A UN FICHERO YA EXISTENTE


Qu sucede cuando utilizamos los cuatro comandos de introduccin de texto? Cada uno de ellos nos pasar a modo texto; a continuacin podemos introducir una letra o varias docenas de lneas, si as se desea. La mayor diferencia que existe entre los distintos comandos es el lugar donde se coloca el nuevo texto: a introduce el texto que se teclee detrs del cursor, empujando el resto de lnea hacia la derecha. En muchos terminales, no se ven las palabras desplazadas hasta despus de pulsar la tecla <esc> para abandonar el modo texto. Introduce cualquier cosa que se teclee antes del cursor, empujando el texto de la lnea hacia la derecha igual que en el caso anterior. abre una lnea debajo de la lnea en donde se sita el cursor, coloca el cursor al comienzo de la nueva lnea e introduce el texto en esa posicin es igual que o, con la diferencia de que la lnea se abre sobre la posicin actual del cursor.

Laboratorio de Telemtica

pg 20

Sistema Operativo UNIX

En cada uno de los casos, se ha de pulsar la tecla <esc> para abandonar el modo texto; con ello quedaremos situados en modo comando de nuevo.

5.4.5 BORRADO Y ALTERACIN DEL TEXTO


Existen tres comandos utilizados con profusin para realizar pequeos cambios en el contenido de un fichero. Nos referimos al comando x para borrar un carcter, el comando r para sustituir un carcter, y el comando dd para borrar una lnea. Estos tres comandos se ejecutan en modo comando, y los tres vuelven a dejar el mismo modo una vez cumplida su misin. Los tres emplean la posicin del cursor en la pantalla como punto de referencia para realizar los cambios. El comando x borra el carcter sobre el que est situado el cursar. Si va precedido de un nmero n, borra n caracteres, comenzando a contar por aqul en el que est situado el cursor. El comando r sustituye el carcter en el que est situado el cursor por aqul que es tecleado a continuacin. Por ltimo, el comando dd borra completamente la lnea sobre la que est situado el cursor. Al igual que el comando x, dd puede ir precedido de un nmero n, con lo que se borrarn n lneas, contadas a partir de la lnea en que se halla el cursor.

5.4.6 PARA DESHACER CAMBIOS: u y U


En ocasiones se realiza un cambio y de repente se cambia de opinin o se decide que no debera haberse hecho. En este caso, se usan los comandos deshacer o undo. Tal como indica su nombre, estas rdenes deshacen lo que se acaba de hacer. El comando u se puede introducir solamente en modo comando, y niega la orden anterior. As, si se borra una lnea con dd, se puede pulsar u para regenerada; si se utiliza el comando i para insertar una palabra en una lnea, la orden u se encargar de eliminarla (previamente debe volver a modo comando para deshacer el cambio). El comando U es ms general. Con l se deshacen todos los cambios que se hayan realizado en la Inea actual.

5.4.7 CMO ABANDONAR EL EDITOR vi


Probablemente, una de las experiencias ms frustrantes que se pueden tener con un ordenador es perder un fichero con el que se ha estado trabajando durante siete horas. Realmente, no es difcil de conseguir, introduciendo un par de rdenes sin el debido cuidado. Siempre que est pensando abandonar el editor, debe interrogarse a s mismo con una cuestin bsica: deseo guardar los cambios que he realizado durante esta sesin? Hay tres posibles respuestas: s, no y quiz. Existen varias formas diferentes de abandonar el editor vi con o sin almacenamiento de informacin, tal como se resume a continuacin: Comando <ESC> ZZ <return> Accin Escribe el contenido del buffer temporal en disco, para su almacenamiento permanente. Utiliza el nombre de fichero que se emple

Laboratorio de Telemtica

Sistema Operativo UNIX

pg 21

para entrar en vi. Lo coloca de nuevo en el shell. <ESC> :wq <return> Tiene el mismo efecto que ZZ, w deriva de write (escribir) y q procede de quit (abandonar). Escribe el contenido del buffer en memoria, y a continuacin se abandona el editor. Es una versin en dos etapas de wq. Abandona el editor y se olvida del contenido del buffer temporal. No se realizan cambios.

<ESC> :w <return> <ESC>:q <return>

<ESC>:q! <return>

Todas estas rdenes se han de ejecutar desde modo comando, y lo devolvern al sistema (shell), lo cual quedar reflejado por la aparicin del prompt ($). Se ha indicado explcitamente una vez ms que se utilice la tecla <return> para ordenar la ejecucin de los comandos. Si se desea abandonar el editor guardando los cambios realizados, la mejor salida es usar :wq estando en modo comando. Tambin se pueden abandonar el editor con ZZ, o bien, w <return> :q. Para abandonar el editor sin guardar los cambios, la forma natural de irse es :q! Se puede usar este comando cuando se comienza a editar un fichero y no le gusta el aspecto con el que estaba quedando. La orden :q! deja intacto el fichero original y abandona el buffer temporal del editor. Si no est seguro de la oportunidad de almacenar o no los cambios, lo mejor que puede hacer es guardar ambas versiones del fichero, la original y la alterada. Esta operacin se realiza utilizando el comando write con un nuevo nombre de fichero. Por ejemplo, podra ser. :w fich.nuevo As, si ha editado el fichero fich y realizado en l algunos cambios, este comando crear un nuevo fichero con el nombre indicado. Ahora ya puede abandonar el editor tranquilamente con :q o con :q!. La diferencia existente entre los comandos :q! y :q es que este ltimo abandonar el fichero nicamente si no se han introducido cambios desde el ltimo comando w. Con ello se ofrece una cierta proteccin contra abandonos accidentales del editor. El comando :q! por su parte, abandona el editor sin ms trmites. En realidad, cuando se est metido en una sesin de edicin lo suficientemente larga, es aconsejable utilizar el comando write cada 15 20 minutos, para actualizar la copia permanente del fichero.

5.4.8 OTROS COMANDOS vi


Ya hemos visto en la seccin anterior la enorme importancia de la colocacin del cursor; esa importancia es an mayor, si cabe, en ficheros de tamao medio y grande; por ello nos ocuparemos de la colocacin del cursor en cualquier lugar del fichero, por medio de unas pocas rdenes. A continuacin estudiaremos tres comandos conocidos como 'operadores' que pueden realizar cambios que afectan a palabras, lneas, frases o prrafos. Dos de
Laboratorio de Telemtica

pg 22

Sistema Operativo UNIX

estos operadores facilitan en realidad otros buffers de almacenamiento temporal que permiten la reorganizacin de lneas y prrafos del texto.

5.4.9 COMANDOS DE POSICIN DEL CURSOR


Hasta ahora hemos utilizado las cinco teclas bsicas de posicin del cursor: las flechas y <return>. Aadiremos a este conjunto nueve teclas ms y una funcin de bsqueda, que ayudan a colocar el cursor con sencillez en ficheros de texto de cualquier tamao. Nos ocuparemos en principio de cuatro teclas (b,e,$,O) que resultan muy tiles en ficheros de textos cortos. Despus aadiremos otras cuatro, <control-d>, <control-u>. <control-f> y <control-b>, que son ms aplicables a ficheros medios (2-10 pginas de pantalla). Llegados a ese punto, explicaremos tambin las operaciones de desplazamiento y paginado. Completaremos el repertorio de posicionamiento del cursor estudiando dos comandos que se utilizan para colocar el cursor en ficheros de texto grandes 10-100 o incluso ms pginas de pantalla). Nos referimos a los comandos nG y /patrn. Las cuatro teclas <b,e,$,O> tienen una cierta simetra en su forma de operar. Su accin concreta es la siguiente: <b> Desplaza el cursor al comienzo de una palabra (beginning). Cada vez que se pulsa la tecla <b>, el cursor se mueve hacia la izquierda a la primera letra de la palabra anterior. Desplaza el cursor al final de una palabra (end). Cada vez que se pulsa la tecla <e>, el cursor se desplaza a la derecha hasta la ltima letra de la siguiente palabra.

<e>

De una forma similar, las teclas <O> y <$> desplazan el cursor al comienzo y al final de la lnea (no de la palabra): <O> <$> Se refiere a la tecla cero. Desplaza el cursor al comienzo de la lnea. Desplaza el cursor al final de la lnea.

Estas dos teclas pueden utilizarse nicamente en la lnea que contiene el cursor, ste no saltar a la lnea siguiente tal como ocurre con las teclas <b> y <e>.

5.4.10 "DESPLAZAMIENTO" Y "PAGINADO" DE LA PANTALLA


Hay ocasiones en las que el buffer contiene ms texto que el que se puede presentar de una sola vez en pantalla. Ya habr observado que, cuando se da esta circunstancia, las lneas ocultas se pueden traer a pantalla llevando el cursor hacia el final (o el comienzo) de la misma e intentando avanzar an ms. En tal caso, el cursor permanece en pantalla, pero aparece una nueva lnea, movindose hacia arriba (o hacia abajo) dentro del campo de edicin. Esta forma de desplazamiento de texto se llama scrolling, por su semejanza al antiguo sistema de lectura de un pergamino en el que se desplazaba la parte visible del mismo desde un rollo interior a otro superior. Para visualizar este movimiento, imagnese que el texto est distribuido en una pgina larga y continua (como un pergamino) y que la pantalla es una especie de ventana por la que podemos observar un trozo de la pgina. Esta ventana tiene generalmente 80 caracteres de ancho por 24 lneas de largo; imagnese que la ventana se desplaza mientras el texto permanece fijo.

Laboratorio de Telemtica

Sistema Operativo UNIX

pg 23

Se suele aceptar como convenio que la direccin de desplazamiento est referida al desplazamiento de la ventana, no del texto. Por ejemplo, un desplazamiento descendente mueve la ventana hacia abajo, mostrndose el texto que estaba en el fichero por debajo del original (o lo que es lo mismo, el texto asciende). Por el contrario, en desplazamiento ascendente, estamos "empujando' la ventana hacia arriba, mostrando porciones del texto que preceda al texto de la localizacin de ventana original (el texto desciende). Generalmente, las teclas de posicin de cursor <b>, <e>, <return> realizan 'desplazamiento" de pantalla de una lnea cada vez. Sin embargo, como las pantallas contienen 24 lneas, los movimientos lnea a lnea pueden resultar muy lentos cuando se trabaja con un fichero de texto grande, con las consiguientes prdidas de tiempo, tanto del usuario como del ordenador. El editor vi soluciona el problema con cuatro comandos de 'desplazamiento'. Son los comandos <control-u>, <control-f>, <control-b> y <control-d>. Le recordamos que para conseguir un <control-d>, se pulsa la tecla <control> y a continuacin se oprime la tecla <d> manteniendo la otra apretada. La accin de estas cuatro teclas de cursor es la siguiente: <control-d> <control-f> <control-u> <control-b> El comando, nG siendo 'n' un nmero entero, colocar el cursar en la lnea nmero 'n'. As, podemos teclear 1400G para movernos a la lnea 1400. Una orden similar es G (G mayscula) sin ningn nmero, que coloca el cursor al final del fichero. As, si se pulsa G estando en modo comando, el cursor se posiciona al final del fichero. Si queremos volver al principio, se puede indicar al editor la siguiente orden 1G Otro comando muy til relacionado con nG es el comando <control-g>, que informa del nmero de lnea en el que est colocado el cursor en ese momento. Desplaza el texto moviendo el cursor hacia abajo (down), generalmente 12 lneas. Desplaza el cursor hacia delante (forward) en el texto generalmente 24 lneas. Desplaza el cursor hacia arriba (up), generalmente 12 lneas. Desplaza el cursor hacia atrs (back), generalmente 24 lneas.

5.4.11 BSQUEDA DE PATRONES


Otra forma de colocar el cursor en algn punto del fichero es enviar al editor una palabra o cadena de caracteres para que la busque. Cuando se est en el modo comando vi, se puede teclear el carcter /, seguido de una cadena de caracteres terminado por un <return>. El editor colocar el cursor en la primera aparicin de la cadena de caracteres dentro del texto, tomando como punto de partida la posicin actual del cursor, y desplazndose hacia abajo en el texto. Por ejemplo, si se desean localizar las palabras buenos das, se enva la orden
Laboratorio de Telemtica

pg 24

Sistema Operativo UNIX

/buenos das Si la primera aparicin de buenos das no es la que desebamos, se puede mover a la siguientes pulsando n (next). Estos sistemas de bsqueda enganchan el final del buffer con el principio, de manera que si se alcanza el final sin encontrar el patrn de bsqueda requerido, se comienza por el principio del fichero hasta llegar a la posicin actual del cursor. Esta operacin contina realizndose mientras se siga pulsando n. Si se prefiere organizar la bsqueda en sentido contrario (ascendente), se utiliza ? a tal efecto. Una vez colocado el cursor en el punto deseado, podemos dedicarnos de nuevo a realizar cambios, desplazar textos o aadir nuevo texto al fichero. Nos ocuparemos ahora de este tipo de actividades. -

5.4.12 OPERADORES QUE BORRAN, DUPLICAN O CAMBIAN Y REORGANIZAN EL TEXTO.


Algunas pginas antes, en la seccin dedicada a los comandos bsicos vi, aprendamos a borrar una lnea utilizando el comando dd. Este comando de borrado est compuesto en realidad de dos partes: el operador d, (delete, borrado) y el operador alcance, referido a la lnea, y simbolizado de nuevo por "d. El comando dw utiliza el operador d pero su alcance es una sola palabra (word), definida por el cursor y simbolizada por w, Podemos representar este tipo de rdenes de la siguiente manera:

Operador + alcance = comando

En esta seccin nos ocuparemos de tres operadores y nueve alcances. Los operadores son delete, change y yank (borrar, cambiar y extraer). Pueden operar con los alcances siguientes: palabras, lneas, frases y prrafos. Los utilizaremos para borrar, duplicar, cambiar y reorganizar el texto. En ocasiones, este tipo de cambios se llaman y popularmente cortar y pegar (cut and paste), refirindose al viejo sistema de realizar cambios con tijeras y goma de pegar. Sin embargo, la versin electrnica de cortar y pegar es ms poderosa, ya que puede cortar con ms precisin y hacer copias mltiples al pegar. En la siguiente tabla se resumen los tres operadores y sus distintos alcances. (Incluimos tambin una descripcin de un comando put (poner, colocar), que funciona en combinacin con los comandos yank y delete).

Comando d

Operador Operador delete. Borra el texto depositando una copia en un buffer de memoria temporal. La copia puede recuperarse empleando el comando put, p. Operador yank. Saca una copia del texto (palabra, frase, lnea, etc.), colocndola en un buffer de memoria temporal para depositarla en otro sitio. El texto original permanece inalterado; la copia se "pega" en el punto marcado por la posicin del cursor, utilizando el comando put, p.
Laboratorio de Telemtica

Sistema Operativo UNIX

pg 25

Comando put. Trabaja con los comandos yank y delete; coloca cualquier fragmento que haya sido borrado o extrado en el lugar correspondiente detrs o debajo del cursor. Operador change. Equivale a una operacin delete y un comando insert. Borra una palabra, frase, etc, y pasa a modo texto para permitir que se teclee el texto alternativo correspondiente. Se termina de operar con un <esc>.

Estos operadores actan sobre un alcance determinado, que se puede describir como:

Operacin e

Alcance El alcance se define entre el cursor y el final de la palabra en que est colocado (end); por ejemplo, si el cursor se coloca sobre la letra 'u' de "curioso", y se teclea de, se borra el fragmento urioso. El alcance abarca desde el cursor hasta el comienzo de la siguiente palabra (word) incluyendo el espacio. Abarca desde la letra anterior al cursor hasta el comienzo de la palabra (beginning). Tiene un alcance desde el cursor hasta el final de la lnea. Comprende desde la letra o posicin anterior al cursor hasta el comienzo de la lnea. El alcance est definido desde el cursor al comienzo de la frase siguiente. Se considera que una frase acaba con un ., !, o ?, seguido de un fin de lnea (procedente de la tecla <return> ) o dos espacios. El alcance se determina desde la posicin anterior al cursor al comienzo de la frase que contiene a dicho cursor. El alcance abarca desde el cursor hasta el final del prrafo. Se considera que un prrafo comienza despus de una lnea vaca. El alcance est comprendido desde la posicin anterior al cursor y el comienzo de su prrafo.

$ 0

Habr observado que no existe ningn smbolo para lnea completa. Los creadores del vi decidieron que es una operacin tan comn, que la manera ms fcil de obtenerlas sera pulsar el operador correspondiente dos veces. Los comandos que afectan a la lnea completa, por consiguiente sern, dd, cc o yy.

5.4.13 LOS OPERADORES YANK Y DELETE COMBINADOS CON EL COMANDO PUT


Se puede utilizar la combinacin de comando de borrado y colocacin (delete y put) , para trasladar un fragmento de texto en un fichero. Por otra parte, los comandos de extraccin y
Laboratorio de Telemtica

pg 26

Sistema Operativo UNIX

colocacin (yank y put) combinados resultan adecuados para copiar un fragmento de texto y colocarlo en otra parte. Los nueve "alcances" descritos permitirn definir con precisin las distintas partes de palabras, lneas, frases y prrafos sobre los que se desea aplicar la operacin. Los comandos yank y delete almacenan estos fragmentos de texto en un buffer temporal, que se utiliza para ser copiado en pantalla con un comando put. Como siempre, las rdenes se ejecutan tomando como punto de referencia la posicin del cursor. Por lo que respecta al comando put, yank y delete funcionan de manera idntica: producen un buffer temporal con un fragmento de texto. La diferencia respecto al usuario es que deja el texto original inalterado, mientras que delete lo borra.

5.4.14 BORRADO, DUPLICACIN Y REORGANIZACIN DE TEXTOS EN BUFFERS TEMPORALES


Tal como se coment anteriormente en este captulo, cuando se desea comenzar una sesin de edicin con un fichero ya existente, se deposita una copia de dicho fichero en la memoria del buffer del editor. Se ha comprobado que el empleo de estos buffers es de enorme utilidad, por eso, el editor vi tiene en realidad ms de 30 reas de memoria temporal que se pueden utilizar para duplicar, reordenar y almacenar texto temporalmente. Adems, si accidentalmente destruye una serie de lneas de texto, se puede recuperar no slo el ltimo fragmento destruido, sino tambin los 8 anteriores. Estos fragmentos se almacenan en un conjunto de buffers temporales numerados del 1 al 9; para conseguir la recuperacin del texto borrado que se almacena en el buffer n, se puede usar el comando np (las comillas sirven para indicar al editor que va detrs un nombre de buffer). Este comando colocar el texto detrs del cursor. Si usamos otro comando put, P, el contenido se coloca delante del cursor. As el comando: 1p recupera el contenido de la ltima porcin borrada y la coloca detrs del cursor, mientras que el comando 1P colocar este mismo texto delante del cursor. Los comandos undo resultan especialmente tiles cuando se desea localizar entre los buffers 1 a 9 un determinado prrafo que se borr. Por ejemplo, para averiguar el contenido del buffer nmero 4 se ordena. "4p y si no es el que buscaba, se pulsa u Se puede repetir esta operacin cuantas veces se desee en los distintos buffers. Hay otro mtodo mejor de guardar, duplicar y reordenar texto que no utiliza los buffers 1 a 9 descritos aqu. El problema con estos buffers es que el buffer nmero 1 contiene siempre la ltima operacin de borrado. As, cuando se desplaza por el texto borrando aqu y all, el contenido de los buffers est cambiando constantemente. Si tiene pensado copiar o desplazar un texto, es mejor emplear otro conjunto de buffers que permanecen inalterados en las operaciones de borrado normales. Este conjunto est formado por la serie de buffers con nombres de letra, ordenados de la a a la z. Para usarlos, se debe anteponer el nombre del buffer en el que se desea almacenar el texto a la operacin de borrado. Se
Laboratorio de Telemtica

Sistema Operativo UNIX

pg 27

utilizan de nuevo las comillas () para indicar al editor que estamos empleando un nombre de buffer. Por ejemplo, la orden c5dd borrar 5 lneas y las guardar en el buffer c. Estas lneas pueden recuperarse en el mismo sitio o en sitios diferentes, utilizando los comandos put, p y P: cp As se depositar el contenido del buffer detrs del cursor. Se puede mover el cursor y repetir el comando para colocar copias adicionales del buffer c en cualquier otro lugar del fichero. Estos buffers alfabticos tambin almacenan los contenidos de las operaciones yank, que se utilizan cuando se desea simplemente copiar una determinada parte del texto; la forma de utilizar los comandos es idntica.

5.4.15 OTROS COMANDOS Y PARTICULARIDADES DE vi


Adems de los comandos anteriores, el editor vi tiene una serie de potencialidades que probablemente le interesar conocer. Entre ellas se pueden destacar. especificar el tipo de terminal ajustar el tamao de pantalla ajustar la identificacin, tabulado y margen derecho usar macros y abreviaturas para simplificar una operacin compleja o una entrada desde teclado demasiado larga editar dos o ms ficheros al mismo tiempo utilizar comandos ex.

Esta ltima particularidad merece un comentario ms extenso, sobre todo porque la hemos utilizado varias veces en este captulo sin avisarlo. Para emplear un comando ex, se pasa a modo comando y se pulsa la tecla [:]. Aparecer un smbolo dos puntos en la parte inferior de a la pantalla. A continuacin se puede introducir cualquiera de los comandos que se presentan en el captulo dedicado a ex; una vez ejecutada la orden, el editor le devuelve automticamente al modo comando estndar de vi. Si se desea permanecer ms tiempo en el editor de lnea ex, se puede introducir el comando Q desde modo comando vi. Con ello conseguiremos tambin un smbolo dos puntos en la parte inferior de la pantalla, pero permaneceremos en modo ex hasta que se teclee vi para volver. En este captulo ya hemos usado algunos comandos 'prestados' de ex, como write y los comandos quit (:q, wq, y :q!). De los dems comandos ex disponibles, los ms tiles son aquellos que permiten manejar trozos de texto grandes; como ejemplo, mencionaremos los dos ms importantes: el comando co para copiar texto, y el comando m para desplazarlo. Realizan el mismo tipo de funcin que los comandos vi delete-put y yank-put, respectivamente, pero restringindose a lneas completas. As, el comando: :20,300m500 realiza una copia de las lneas 20 a 300 inmediatamente despus de la lnea 500, dejando inalterado el texto original en su posicin. Otro comando ex extremadamente til es la orden de bsqueda y sustitucin global. Por ejemplo, el comando
Laboratorio de Telemtica

pg 28

Sistema Operativo UNIX

:g/e/s//#/g sustituye todas las "e del fichero por smbolos #.

5.5 EL EDITOR DE LNEAS ex 5.5.1 INTRODUCCIN


El editor de lneas ex es, con toda propiedad, el editor estndar del UNIY- Incluso si tiene pensado trabajar preferentemente con vi, como hacen la mayora de usuarios, resulta aconsejable aprender el funcionamiento bsico de ex. Una gran parte de la potencia del vi se deriva precisamente de este editor. Se dice que ex es un editor de lneas porque la mayora de operaciones se realizan empleando como referencia una lnea. (Recordemos que vi utiliza el cursor como punto de referencia). El sistema de referencias por lneas hace que ex resulte til para desplazar o copiar grandes bloques de texto, y tambin para hacer operaciones de bsqueda y sustitucin global.

5.5.2 LLAMADA AL EDITOR ex


La operacin de arranque de un editor recibe diversos nombres en el argot informtica. Si el nombre est ya en el directorio, el contenido del fichero se vuelca en el buffer temporal de ex para permitir su edicin. Si no existe fichero alguno con tal nombre, se crea uno nuevo. Cuando se llama a ex con un fichero ya existente, el editor responde en pantalla con el nmero de caracteres almacenados en el mismo: si el fichero es nuevo, ex responde con el comentario (new file) y el nombre del fichero. Con este convenio se advierte al usuario que pretenda reformar un fichero ya creado, pero inadvertidamente ha tecleado su nombre de forma incorrecta. Las respuestas devueltas por el editor pueden variar ligeramente de una versin a otra. ex indica el nmero de lneas y caracteres del fichero, pero no imprime ste en la pantalla a menos que se le d la orden de impresin adecuada. El editor est ahora en modo comando, listo para aceptar rdenes tales como aadir, mover, borrar, escribir, salirse, imprimir. Estos comandos deben seguir un formato concreto que se describe a continuacin.

5.5.3 FORMATO DE LOS COMANDOS ex


Un comando ex completo, en general, tiene tres partes: direccin, comando y parmetros. La direccin indica al editor la lnea o lneas sobre las que ha de actuar. El comando informa al editor sobre la actuacin concreta que debe realizar ejemplos de comandos son p (print, para imprimir una lnea en la pantalla), d (delete, para borrar una lnea) y s (para sustituir un fragmento de texto por otro). Los parmetros aaden la necesaria informacin adicional; por ejemplo, cuando se ha de hacer una sustitucin. Sin embargo, con frecuencia un comando completo posee una o dos de estas partes tan slo.

Laboratorio de Telemtica

Sistema Operativo UNIX

pg 29

5.5.4 LOCALIZACIN DE LNEAS


Uno de los principales problemas al utilizar editores es indicar al programa en qu parte del texto se desea insertar o introducir cambios. El editor de lneas ex soluciona esta dificultad utilizando nmeros de lnea; el texto se distribuye en el buffer temporal de ex segn una serie de lneas numeradas; a tal efecto, se considera una lnea cualquier cosa que se haya tecleado seguida de un <return>. Las lneas de buffer estn numeradas consecutivamente, y se renumeran cada vez que se inserta, borra o traslada una lnea nueva. Adems de esta lista de lneas de texto, el editor mantiene siempre el concepto de lnea actual; se puede imaginar la lnea actual como una lnea apuntada por un "cursor invisible. Pero, qu lnea del buffer es la lnea actual?. La primera vez que se llama al editor para actuar sobre un fichero ya existente, la lnea actual es la ltima del buffer del editor. Cuando se pulsa un comando de impresin, apndice o insercin, el comando se ejecuta con respecto a la lnea actual. Por ejemplo, podemos utilizar el comando de impresin tecleando p Con esta orden se imprimir en pantalla la lnea actual. Por otra parte, si se teclea 3p se imprimir la lnea 3. En este ltimo caso, hemos dado al editor una lnea especfica sobre la que trabajar; a continuacin, la lnea 3 se transforma en la lnea actual. En general, cuando se ejecuta un comando, se tomar como nueva lnea actual la ltima lnea afectada por el mismo. Se puede emplear el smbolo punto (.) como abreviatura para indicar la lnea actual, por ello, esta lnea se llama tambin lnea punto. As, hablaremos de la lnea 3, o de la lnea 4, o de la lnea punto. Por cierto, no permita que el mltiple uso del punto en el editor ex le confunda. Recurdese que cuando se pretende abandonar el modo texto se introduce un punto solitario en la lnea; sin embargo, si est en modo comando, el punto se interpreta como una forma abreviada de expresar la direccin de la lnea actual. As, si tecleamos .P se imprimir la lnea actual. mientras que si ordenamos .d se destruir dicha lnea. Otra abreviatura til del editor es el smbolo $, indicando la ltima lnea del fichero. Por ejemplo $p imprime la ltima lnea del fichero. Tambin se pueden indicar direcciones relativas, utilizando los signos + y - seguidos por un nmero. Su funcionamiento sera: .+3 $-2 3 lneas despus de la lnea actual 2 lneas antes de la ltima lnea del fichero

Se puede especificar un rango de lneas, indicando dos nmeros de lneas separados por una coma. Por ejemplo,
Laboratorio de Telemtica

pg 30

Sistema Operativo UNIX

3,8d borra todas las lneas entre 3 y 8. en tanto que 1,$p imprime todas las lneas del fichero en la pantalla. Por su parte, .-9,.+9p imprimir 19 lneas, tornando la lnea actual como centro. Se puede ver, por tanto, que hay varias formas de indicar direcciones de lneas. As, se puede enviar al editor un nmero de lnea, o un rango; o emplear los smbolos especiales . y $ para referirse a las lneas actual y final, respectivamente; adems, utilizando signos ms y menos se puede localizar lneas con respecto a la lnea actual o a la ltima lnea. Bien, pero cmo podemos saber los nmeros de lnea de cada una de ellas?. Si el fichero es corto, se puede usar 1,$nu para presentar el fichero completo en pantalla. Otra posibilidad es averiguar el nmero de lnea de la lnea actual (lnea punto); esto ltimo se consigue tecleando un punto seguido de un signo igual: .= El editor responder indicando el nmero de lnea correspondiente a la lnea actual. (Recuerde adems, que todos los comandos ex a semejanza de los comandos UNIX, deben terminarse con un <return>.) Este comando es particularmente til cuando se ha estado moviendo con desplazamientos relativos usando los signos + y -, descritos anteriormente, y tambin cuando se utiliza el sistema de bsqueda de textos que se describe a continuacin.

5.5.5 BSQUEDA DE PATRONES


El editor ex presenta una alternativa interesante y til para encontrar lneas; en lugar de especificar el nmero de lnea, se le puede entregar un patrn (combinacin de letras, nmeros y signos de puntuacin) para que busque l mismo en el fichero. Para ello se encierra el patrn entre barras. Si se enva el comando /coliflor/ el editor buscar a lo largo del fichero la palabra coliflor y, a continuacin, imprimir la lnea que contiene el primer ejemplo de sta: en ese momento, detiene la bsqueda. El proceso de bsqueda comienza a partir de la lnea actual y en direccin hacia el final del fichero. Si ex no encuentra el patrn indicado cuando llega al fin de fichero, vuelve al comienzo del mismo y rastrea hasta la lnea original. Si aun as no lo encuentra, se lo indicar imprimiendo un signo de interrogacin. Los patrones son interpretados por ex como "cadenas de caracteres, no como palabras. As, si indicamos a ex que localice la cadena /eso/ buscar una coincidencia con dicha cadena, sin importarle si es una palabra separada (eso, en este caso) o un fragmento de una palabra mayor (esotrico o resoplar, por ejemplo): simplemente buscar la primera aparicin de las tres letras consecutivas e-s-o. Podemos introducir un espacio como parte del patrn de bsqueda, para evitarnos este tipo de problemas. As, el comando
Laboratorio de Telemtica

Sistema Operativo UNIX

pg 31

/eso / encontrar eso y "beso pero no resoplar, ya que no existe espacio detrs de la o en esta ltima palabra.

5.5.6 DESPLAZAMIENTOS POR EL TEXTO


Existe an otra tcnica para localizar lneas de texto. Si se pulsa <return> sin ningn otro comando, el editor ex interpreta esta orden como .+1p Es decir, ex avanzar una lnea y la imprimir en pantalla. De este modo, si se desea avanzar lentamente en el buffer para localizar determinados cambios, se puede emplear la siguiente secuencia: 1p <return> <return> <return> y as sucesivamente. Cuando se encuentre una lnea que se desea cambiar, se tienen dos alternativas. Se puede trabajar sobre la lnea actual con el nmero de lnea, o bien utilizar la direccin por defecto, que es la lnea punto. Es decir, si se teclea. p nicamente, la direccin considerada es la lnea actual por defecto. Existe tambin en ex una forma muy conveniente de llenar la pantalla de texto de un sola vez; es el comando z, que llena la pantalla con texto a partir de la lnea actual hacia abajo; adems, este comando acepta un nmero de lnea a efectos de posicionamiento. As, un buen sistema de observar un fichero sera la siguiente secuencia de comandos: prompt del modo comando imprime texto en pantalla comenzando por la lnea 1 imprime texto adicional segn se requiera

1z z

Una vez que sabemos localizar lneas, dedicaremos nuestra atencin a la creacin y alteracin de ficheros.

5.5.7 INTRODUCCIN DE TEXTO EN ex


El editor ex posee tres comandos que transforman el teclado en una mquina de escribir para la introduccin de texto (o datos o programas) en su buffer. Estos comandos son a para aadir texto, i para insertarlo, y c para efectuar cambios. Cuando no se incluye ninguna direccin, los comandos afectan a la lnea actual. En caso contrario, los comandos aadir e insertar debern contener una nica direccin de lnea, mientras que cambiar podr tener las direcciones de una o ms lneas. El comando aadir situar el texto a continuacin de la lnea indicada, mientras que insertar lo colocar antes de esa lnea. Las lneas anotadas en un comando cambiar quedan borradas para dejar sitio al nuevo texto que se introduzca.
Laboratorio de Telemtica

pg 32

Sistema Operativo UNIX

5.5.8 EL COMANDO DE SUSTITUCIN: s


Si se desea cambiar la ortografa de una palabra, o aadir palabras nuevas dentro de una lnea, se debe usar el comando s, o comando de sustitucin. Recordamos que ex es un editor de lneas, por lo que nuestro cursor imaginario puede nicamente distinguir entre una lnea y otra; no puede moverse dentro de una lnea. Este defecto es quiz la mayor desventaja de un editor de lneas. As, para indicar al editor la palabra que deseamos cambiar, tenemos que teclearla por completo. Recurdese que el nmero es una direccin. Si no se especfica, la sustitucin se aplicar a la lnea actual. Se puede aadir tambin un parmetro p (un parmetro es semejante a un comando) con el fin de imprimir el resultado. El parmetro se introduce al final de la lnea de comando, y el editor imprimir la lnea despus de efectuar la sustitucin. El aspecto de la lnea completa sera: 3s/texto antiguo/texto nuevo/p Los patrones de sustitucin son cadenas de caracteres, exactamente iguales a los patrones de bsqueda ya mencionados; por ello, se deben manejar con cierta precaucin. Por ejemplo, supongamos que la lnea 3 contiene Sobre usted pesa la responsabilidad de esa muerte. Como queda un poco cacofnico, intentamos la sustitucin 3s/esa/aquella/p Sin embargo, el resultado es muy distinto al que se poda esperar. El editor rastrea la lnea hasta encontrar la primera aparicin de las letras 'esa', localizndolas dentro de la palabra pesa. Sin preocuparse ms del asunto, realiza la sustitucin obteniendo esta curiosa frase Sobre usted paquella la responsabilidad de esa muerte. En un caso como ste, se lograra la sustitucin correcta con el comando 3s/esa m/aquella m/p que define sin ambigedades la sustitucin que se desea realizar.

RESUMEN: EX - EDITOR DE LINEAS


Shell UNIX Modo Comando Shell UNIX

-----

----


Modo Texto

Los modos de funcionamiento del editor ex

Modo texto
Laboratorio de Telemtica

Sistema Operativo UNIX

pg 33

aade lneas tras la lnea punto, a menos que se especifique el nmero de lnea, por ejemplo, 3a introducir el nuevo texto a partir de la lnea 3. i Inserta lneas antes de la lnea punto, a menos que se especifique el nmero de lnea; por ejemplo 3i introduce texto antes de la lnea 3. c cambia la lnea punto o las lneas especificadas por sus direcciones; por ejemplo, 2,4c borra las lneas 2 a 4 y aade el nuevo texto que se teclee. Modo comando p Imprime en pantalla las lneas especificadas. Si no se especifica el nmero de lnea, se imprime la lnea actual. As, 2,4p imprime las lneas 2, 3, y 4. d Borra las lneas especificadas. Si no se especifica, se borra la lnea punto; por ejemplo, 5,8d destruye las lneas 5 a 8 m Desplaza las lneas especificadas hasta la lnea indicada tras la letra m; por ejemplo, 1,2m5 mueve la lnea 1 y 2 colocndolas detrs de la lnea 5. Co Copia las lneas especificadas en la lnea citada tras el comando co; por ejemplo, 2,4,co$ copia las lneas 2 al 4. Colocndolas al final del buffer r fichero Lee el contenido de fichero y lo introduce en la lnea actual o en la lnea actual o lnea especificada. s/uno/dos Sustituye la palabra uno por la palabra dos la primera vez que aparece la palabra uno" en las lneas especificadas. /bonito/ Busca la siguiente lnea que contenga la(s) palabra(s) situada(s) entre las barras; en este caso, la cadena de caracteres bonito". g Bsqueda o sustitucin global, utilizada generalmente con s o s/pat1/pat2/g, sustituyendo el patrn "pat1 por pat2 en todas las apariciones de pat1 en las lneas especificadas. un Numera las lneas y las imprime en pantalla; por ejemplo, 1,$nu numera e imprime todas las lneas del fichero. u Comando undo. Deshace el ltimo cambio realizado en el buffer z Imprime lneas en la pantalla; por ejemplo, 3z imprime el fichero en la pantalla, comenzando por la lnea 3. Para abandonar el editor w Comando write, que escribe las lneas especfficadas en un fichero cuyo nombre se indica a continuacin; por ejemplo, 2,5w limonero escribe las lneas 2 a 5 del buffer en el fichero limonero. q Comando quit; abandona el editor Q! Abandona el editor sin escribir los cambios realizados Direccionamiento de lneas . Este carcter se refiere a la lnea actual, tambin llamada, por este motivo, lnea punto. La lnea actual es la ltima lnea afectada por un comando. Por ejemplo, .p imprime la lnea actual. .= Imprimen el nmero de lnea correspondiente a la lnea actual; por ejemplo, el editor responde con un nmero como "5. $ Este carcter indica la ltima lnea del buffer, por ejemplo, $d borra la ltima lnea. n Un nmero decimal n indica la lnea n; por ejemplo, 3p imprime la lnea nmero 3. +Los smbolos + y - se utilizan conjuntamente con una lnea de referencia que puede especificarse con n, $ o por defecto la lnea punto; por ejemplo $-5,$p imprime las seis ltimas lneas del buffer <return> Cuando se utiliza sin ningn otro comando, equivale a punto ms uno, es decir, la siguiente lnea. Es muy til para avanzar lentamente por el buffer Nota: Si accidentalmente pulsa las teclas o o vi mientras est en el editor ex, la manera de volver a ste es pulsar la tecla <esc> seguida por Q.
Laboratorio de Telemtica

pg 34

Sistema Operativo UNIX

6.

PROCESOS Y ENTORNO

6.1 CONCEPTO DE PROCESO


Proceso es toda accin que se lleva a cabo dentro de un sistema UNIX, ya sea por la ejecucin de un comando propio del sistema o por la ejecucin de un programa elaborado por el usuario. Un proceso supone la existencia de un fichero, en el cual reside la informacin necesaria para que aqul se lleve a cabo. Siempre que un sistema UNIX est conectado existe algn proceso en ejecucin. As cuando un usuario tiene ante s el prompt, se est ejecutando un proceso llamado shell (o sh), cuya misin es interpretar los comandos que el usuario introduce. Un proceso siempre es lanzado desde otro proceso. As, si yo ejecuto un programa o aplicacin, ese proceso es lanzado desde el shell. A su vez, las aplicaciones pueden lanzar sus propios procesos. Se llama proceso padre de otro (parent process) al proceso desde el cual es lanzado. Por analoga, los procesos lanzados del padre se llaman procesos hijo (child process). Los procesos se reconocen en UNIX por un nmero identificador (PID). Este nmero, es asignado directamente por el sistema, y es distinto para todos los procesos que se ejecutan simultneamente en el sistema.

6.2 CONCEPTO DE ENTORNO


Adems de un fichero, en el cual residen las instrucciones para su ejecucin, un proceso necesita de la existencia de un entorno. El entorno de un proceso es un conjunto de informaciones bsicas necesarias para la ejecucin del proceso. Muchas de las informaciones del entorno estn ms bien relacionadas con el usuario que lanza un proceso que con el propio proceso. As, algunas de estas informaciones son el nombre de usuario, el nombre de su directorio login o el directorio actual. Cada proceso debe disponer de su propio entorno para poder ser lanzado. Ahora bien, la mayora de las informaciones del entorno de distintos procesos sern comunes. Por ello, la forma ms sencilla de obtener el entorno de un proceso es copirselo al padre. Esta copia se hace a travs de una llamada interna del sistema denominada fork. El fork produce un proceso (que incluye al entorno) exactamente igual al proceso padre. Sin embargo, cuando el fork ha sido llamado, es cuando se produce la diferenciacin entre proceso padre e hijo. En este momento, al hijo se le asigna el PID correspondiente. Una vez ejecutado el fork, se dispone de dos procesos prcticamente idnticos. Sin embargo, lo que se desea es que el proceso hijo realice su propia misin. Por ello, una vez creado, el proceso hijo se desprende de las instrucciones que debe ejecutar el padre, y adopta sus propias instrucciones, que tomar del fichero correspondiente. Esto se realiza mediante otra llamada interna denominada exec. As pues, cuando se ejecute un proceso, internamente se ejecutar una secuencia fork-exec.

Laboratorio de Telemtica

Sistema Operativo UNIX

pg 35

6.3 VISUALIZACIN DE PROCESOS


Se pueden ver los procesos que en un momento dado se estn ejecutando en el sistema a travs del comando ps. Ejecutado sin opciones, el comando proporciona una lista de los procesos que tienen lugar en la terminal. La opcin ms importante es la ef (ps -ef), que proporciona una lista de todos los procesos que estn ejecutndose en el computador, independientemente de la terminal. Por cada proceso se obtienen una serie de informaciones, segn el esquema siguiente. root root root root root root root root bcus 118 123 137 129 139 142 158 1224 4550 1 1 1 3 1 1 1 3 2665 0 0 0 0 0 0 0 0 10 Aug Aug Aug Aug Aug Aug Aug Aug 10:37 20 20 20 20 20 20 20 21 55 ? ? ? ? ? ? ? ? console 0:00 0:01 0:00 4:31 0:00 0:00 0:00 3:02 0:00 LmSpool LnMailslot /etc/cron Gcsp /etc/ptydaemon /etc/vtdaemon Sleep 999999999 Gcsp ps ef

Como se observa, por cada proceso aparecen ocho campos, cuyas significados son los siguientes: 1: 2: 3: 4: 5: 6: 7: 8: Usuario que ordena la ejecucin del proceso (UID) Nmero de identificacin del proceso (PID) Nmero de identificacin del proceso padre (PPID) Tiempo de utilizacin del procesador para reparto de gastos Fecha u hora de comienzo del proceso Terminal desde la que se ejecuta el proceso Tiempo de ejecucin del proceso Nombre del proceso

6.4 VARIABLES
Una variable es una informacin a la que se asigna un nombre. A primera vista, puede parecer que una variable es lo mismo que un fichero. Sin embargo, existen dos diferencias importantes: la primera es que las variables no residen fsicamente en ningn disco. La segunda es que la informacin de las variables es informacin propia de un proceso. As, las informaciones del entorno de un proceso residen en variables. Las variables existentes en un momento y en un entorno dados pueden ser de dos tipos: * Variables de entorno: son aqullas que transmiten el valor (con el mismo nombre) a los procesos hijo. Contienen informaciones que forman parte del entorno de un proceso. * Variables locales: son aqullas que no se transmiten a los procesos hijo. Debe quedar claro que las variables de entorno transmiten la informacin a los procesos hijo, pero no al revs. Es decir, si una variable de entorno en un proceso hijo es alterada, el entorno del proceso padre no ser modificado. Las variables pueden ser clasificadas tambin segn otro criterio en: * Variables de sistema: son variables con un nombre y un contenido especfico, que
Laboratorio de Telemtica

pg 36

Sistema Operativo UNIX

normalmente es comn a todos los sistemas UNIX. Las ms habituales son: HOME: su contenido es el nombre absoluto del directorio login del usuario PS1: su contenido es el smbolo del prompt (habitualmente el $) PATH: su contenido es el conjunto de directorios donde el sistema buscar los comandos a ejecutar. TERM: su contenido es el tipo de terminal que se utiliza. * Variables de usuario: todas las variables asignadas por el usuario, y que no tienen un contenido fijo. Como puede deducirse de esto ltimo, un usuario puede definir las variables que quiera. Para crear una variable, basta con asignarle un valor de la forma siguiente: $ VAR=valor En la expresin anterior, VAR es el nombre de la variable, y valor pasa a ser su contenido. No debe existir espacio en blanco ni antes ni despus del signo =. Habitualmente, las variables se escriben con letras maysculas si bien esto no es obligatorio. Cuando se define una variable, sta no es de entorno. Para que lo sea, se ejecuta el comando export, de la siguiente manera: $ export VAR VAR1..... De esta forma, las variables situadas como argumentos del comando pasan a ser variables de entorno y como tales, cedern su nombre y contenido a los procesos hijo. Si el comando export se ejecuta sin argumentos, se obtiene la lista de las variables de entorno, pero sin indicar su contenido. Si se desea saber el conjunto de variables de entorno junto con su contenido, puede ejecutarse el comando env. Existe otro comando, el set que permite ver el valor de todas las variables existentes, ya sean de entorno o locales. Por ltimo, el comando unset seguido del nombre de una variable, elimina esa variable. El contenido de una variable puede ser ampliado concatenando varias variables o expresiones. As, la expresin $ A=$A$B asigna a la variable A el contenido que tena junto con la variable B o bien la expresin A=$A:b modifica el contenido de la variable A aadindole los caracteres :b.

Laboratorio de Telemtica

Sistema Operativo UNIX

pg 37

7.

PROGRAMACIN SHELL. CONCEPTOS BSICOS

Como ya se ha indicado, siempre que se est en una sesin UNIX existe un proceso en ejecucin que es el shell, o sh. Su funcin es interpretar los comandos ejecutados por los usuarios. El proceso tiene su soporte en un comando tambin llamando sh, el cual puede ser ejecutado por un usuario. Si se ejecuta $ sh simplemente aparecer el prompt ($). Sin embargo, hemos ejecutado un proceso que est en activo, y que no desaparecer hasta que finalice, lo que conseguiremos mediante el comando exit, o Ctrl-d. Este comando, sh, dentro del cual se efectan todas nuestras operaciones en el sistema, posee gran cantidad de particularidades y capacidades que se van a estudiar en este captulo y en los posteriores.

7.1 METACARACTERES
Un metacarcter es un carcter que tiene un significado especial, independiente de su propio smbolo. As, el / es un metacarcter, pues aparte del slash representa el directorio raz (ms adelante se ver que tambin representa el smbolo de la divisin). Los principales metacaracteres son los siguientes: $: el $, puesto delante de una variable, representa el contenido de esa variable. As, si la variable A tiene el valor 1, el comando $ echo A mostrar en pantalla A, pero el comando $ echo $A mostrar en pantalla 1. * este smbolo, al lado de algn otro carcter, sustituye a cualquier posible conjunto de caracteres (salvo el ) que pudiera ir colocado en esa posicin (en DOS tiene un significado similar). As, el comando $ ls a* mostrara en pantalla los nombres de todos los ficheros del directorio actual cuyo nombre empieza por a. 0 bien, el comando $ Is *a mostrara los nombres de todos los ficheros del directorio actual cuyo nombre termina en a. Si el smbolo * se emplea solo, representa a todos los ficheros del directorio actual. Adems de este significado, ms adelante se ver cmo tambin representa el smbolo de la multiplicacin.

Laboratorio de Telemtica

pg 38

Sistema Operativo UNIX

?: su significado es anlogo a *, pero referido a un slo carcter, en lugar de a un conjunto (en DOS tiene un significado similar) [ ] : delimita un conjunto de caracteres (tomados de uno en uno) - : indica un intervalo de caracteres ! : indica lo contrario del carcter siguiente No es conveniente utilizar los metacaracteres en los nombres de los ficheros, con el fin de evitar problemas. Sin embargo, en alguna ocasin puede ser preciso su utilizacin como tal smbolo, evitando el carcter especial. Para ello se utiliza el metacarcter, \ (back-slash) que antepuesto a otro metacarcter anula el significado especial del mismo. As, el resultado de los siguientes comandos ser: $ A=1 $ echo $A $ echo \$A

-> 1 -> $A

El significado de un metacarcter tambin puede ser anulado encerrndolo entre comillas simples () o dobles (). Sin embargo, y dependiendo de los sistemas UNIX, no todos los metacaracteres son anulados de esta forma.

7.2 REDIRECCIONAMIENTOS
Cuando se ejecuta un proceso, ste habitualmente conlleva una entrada y una salida. En algunos comandos puede no existir alguna de las dos. Normalmente, los datos necesarios para la ejecucin de un proceso se introducen en el momento de su ejecucin a travs del teclado, que constituye la entrada standard, o standard input. De la misma forma. la salida del proceso (el resultado de su ejecucin) se refleja habitualmente en la pantalla, que constituye la salida standard, o standar output. Igualmente, si se produce algn error durante la ejecucin del proceso, la correspondiente salida se reflejar tambin en pantalla, que construye as la salida standard de errores, o error output. Sin embargo, puede resultar interesante en ocasiones desviar la salida de un proceso a un fichero, en lugar de a la pantalla. As, por ejemplo, si en mi directorio existen una gran cantidad de ficheros y ejecuto el comando $ ls no podr ver todos en la pantalla. Por ello, ser ms conveniente desviar la salida a un fichero, que podr posteriormente editar o visualizar tranquilamente a travs de un comando more. A ese desvo de la salida de un proceso a un fichero se le llama redireccionamiento de salida. El redireccionamiento provoca que la salida de un programa vaya a parar a un fichero en lugar de a la pantalla. Para ejecutado, se puede de la siguiente forma utilizando el smbolo >: $ PROC>fich El proceso anterior direcciona la salida del proceso PROC al fichero fich, de modo que en pantalla slo aparecer el prompt ($) a la finalizacin del mismo. Si el fichero no existe lo crea, pero si existe, BORRARA SU CONTENIDO, y lo sustituir por la salida del proceso. En ocasiones, interesar que la salida de un proceso se aada a un fichero ya existente, sin borrar su contenido. En estos casos se utiliza el smbolo >>:
Laboratorio de Telemtica

Sistema Operativo UNIX

pg 39

$ PROC >> fich El redireccionamiento de salida no incluye la salida de errores, sino slo la salida habitual del proceso. Si se desea redireccionar los errores, puede hacerse mediante el smbolo 2>: $ PROC 2> F1 Normalmente, la salida de errores se redirecciona al mismo fichero que la salida standard. Esto se hace de la siguiente forma: $ PROC >F1 2>&1 De la misma forma que se puede redireccionar la salida de un proceso, puede redireccionarse la entrada, si bien esto es menos habitual. Por ejemplo, cuando se enva un mensaje a travs de mail, se ejecuta el comando (sin argumentos) y a continuacin se escribe el mensaje a travs del teclado (standard input). Si se desea, puede redireccionarse la entrada, de modo que el mensaje sea el contenido de un fichero. Para ello, el signo a utilizar es <, y el comando quedara de la siguiente forma: $ mail <F1

7.3 PIPELINES
Un pipeline, o simplemente pipe, es un procedimiento por el que se conectan dos procesos, de forma que la salida del primero pasa a ser la entrada del segundo. El pipe se representa por el smbolo |: $ P1 | P2 As se ha visto que el conjunto de procesos $ ls > F1 $ more F1 permite ver de forma pausada los ficheros contendos en el directorio actual. Para ello, se ha redireccionado la salida de ls al fichero F1, y luego se ha ledo el contenido del fichero mediante el comando more. Esta operacin puede hacerse de un slo golpe a travs de un pipe: $ ls l more El resultado es que cada vez que la pantalla se llene, se detendr, para que pueda ser leda. En este caso, more toma sus datos de entrada a partir de la salida de ls (que no se refleja en la pantalla). Como puede verse, existe una cierta similitud entre el pipe y el redireccionamiento. Sin embargo, hay dos diferencias fundamentales: Un redireccionamiento conecta un proceso con un fichero, mientras que un pipe conecta dos procesos. Un pipe es ms rpido que un redireccionamiento, al no existir fichero, con lo que se evita el acceso a disco (que siempre es lento).

Laboratorio de Telemtica

pg 40

Sistema Operativo UNIX

7.3.1 FILTROS
Algunos comandos pueden actuar como filtros. Un filtro es un proceso situado entre dos pipe, de modo que su actuacin sobre los datos de entrada (salida del primer proceso) no se refleja en pantalla, sino que pasa a ser la entrada del 2 pipe. En apartados posteriores se indicarn ejemplos de filtros.

7.4 ASIGNACIN DE SALIDA DE COMANDOS A VARIABLES


Se ha visto anteriormente cmo la salida de un proceso puede desviarse a un fichero, mediante el redireccionamiento, o a otro proceso, mediante el pipeline. De forma similar, puede desviarse a una variable, asignando a la variable el nombre del proceso encerrado entre comillas simples invertidas: $ VAR=`PROC` En la estructura anterior la variable VAR pasa a tomar el valor de la salida del proceso PROC.

8.

PROGRAMACION SHELL. COMANDOS

En este captulo se va a exponer el funcionamiento de una serie de comandos tiles en UNIX.

8.1 COMANDO sort


El comando sort sirve para ordenar las lneas de un fichero, ya sea alfabticamente o numricamente (en caso de que el contenido sean nmeros). La estructura del comando es la siguiente: $ sort [opc] [campo] ficheros Habitualmente, el comando sort siempre va acompaado de al menos un argumento, que es el nombre de un fichero cuyas lneas deben ser ordenadas. Es importante tener en cuenta que la ordenacin afecta slo a la salida del comando, es decir, el fichero a ordenar queda inalterado. En caso de que no se proporcione ningn argumento, se ordenar todo lo que desde ese momento se introduzca a travs del teclado, hasta que se pulsa Ctrl-d. Si no se introduce ninguna opcin, la ordenacin se realizar lexicogrficamente (similar a alfabticamente), con las siguientes reglas: en primer lugar, los nmeros (sin considerar su valor numrico, nicamente el smbolo, donde el primero es el 0 y el ltimo el 9), a continuacin las letras maysculas en orden alfabtico, y por fin las letras minsculas, tambin en orden alfabtico. Las principales opciones del comando son las siguientes: -c: solo proporciona salida si el fichero est desordenado -o file: redirecciona la salida al fichero file - r: invierte el sentido de las comparaciones

Laboratorio de Telemtica

Sistema Operativo UNIX

pg 41

- n:

ordena numricamente, es decir, atendiendo al valor numrico y no simblico de los nmeros

En ocasiones, las lneas de un fichero pueden estar compuestas por diferentes campos. En este caso, la ordenacin puede realizarse segn los smbolos de un campo determinado. Para ello, se utiliza una opcin, de la forma +N, donde N indica el nmero de campos que deben saltarse para realizar la ordenacin. En estos casos, debe indicarse al comando cul es el separador de campo, lo cual se realiza mediante la opcin t, seguida del separador (por defecto, el separador es el espacio en blanco). As, el comando $ sort -nt: +2 file realiza la ordenacin del fichero file numricamente, utilizando el campo 3 (se salta dos campos) siendo el separador de campo el smbolo (:)

8.2 COMANDO grep


Este comando sirve para localizar una cadena de caracteres dentro de un fichero o ficheros dados. La estructura del comando es: $ grep [opc] cadena ficheros El primer argumento marca la cadena de caracteres que debe ser localizada. Los restantes indican los ficheros donde debe ser localizada la cadena. En caso de que la cadena exista, en pantalla aparecer la lnea completa en que se halla. Si se han dado varios ficheros para la localizacin, adems de la lnea aparecer el nombre del fichero. Las principales opciones del comando son las siguientes: -v: -c: -i: -l: Funcionamiento inverso: se escriben todas las lneas salvo aquellas en las que se ha hallado la cadena slo se obtiene la cantidad de lneas en las que se ha hallado la cadena se ignora la distincin entre letras maysculas y minsculas slo se indican los nombres de los ficheros en los que aparece la cadena (el nombre aparece slo una vez, independientemente del nmero de lneas que tenga la cadena). las lneas van precedidas por su nmero de orden dentro del fichero se utiliza cuando la cadena a buscar comienza por el signo se suprimen los mensajes de error correspondientes a ficheros no existentes o sin permiso de lectura

-n: -e: -s:

8.3 COMANDO wc
Este comando sirve para contar lneas, palabras y caracteres de un fichero. Su estructura es: $ wc [opc] ficheros si no se indican argumentos, se toma como entrada el teclado.

Laboratorio de Telemtica

pg 42

Sistema Operativo UNIX

La salida por pantalla es el nmero de lneas, palabras y caracteres del fichero seguido del nombre del fichero. Este comando posee tres opciones: -l: -w: -c: cuenta slo lneas cuenta slo palabras cuenta slo caracteres

Estas opciones pueden combinarse para obtener dos de las cuentas. Por palabra se entiende cualquier conjunto de caracteres separado por espacios en blanco.

8.4 COMANDO tee


El comando tee siempre es utilizado como filtro. Su funcin es recoger los datos de su entrada, y pasarlos a su salida, a la vez que a la salida standard y al fichero que se indique como argumento. Es decir provoca todas las salidas posibles para el proceso que le procede en el pipe. Sin embargo, no altera en absoluto los datos que recoge: $ proc1 l tee file l proc2 El comando puede llevar la opcin - a, con la cual aade su entrada al fichero indicado (en lugar de crear el fichero con esa entrada), en lugar de sobreescribirlo.

8.5 COMANDO cut


El comando cut se utiliza para seleccionar porciones de lneas de un fichero (o de varios). Estas porciones son enviadas a la pantalla. Sin embargo, el fichero permanece inalterado. La estructura del comando es: $ cut [opc] ficheros Existen dos posibles funcionamientos de cut: corte por caracteres, o corte por campos, indicado cada uno de ellos por la correspondiente opcin.

8.5.1 CORTE POR CARACTERES


La opcin correspondiente es la c, seguida del intervalo a cortar en cada lnea. estructura del comando quedara de la siguiente manera: $ cut -cINT ficheros En la estructura anterior, INT indica el intervalo de caracteres a seleccionar en cada lnea. Un intervalo cerrado entre los caracteres N1 y N2 se indica N1-N2. N1, N2 indicara los caracteres N1 y N2 de cada lnea. Si utilizando el guin no se indica alguno de los extremos, se asume el primero (N1) o el ltimo (N2). La

8.5.2 CORTE POR CAMPOS


La opcin correspondiente es la -f. Su funcionamiento es igual que en el caso anterior, slo que contando campos en lugar de caracteres. Para ello, debe definirse el separador de campo, para lo que se usa la opcin d. La estructura quedara de la siguiente manera:
Laboratorio de Telemtica

Sistema Operativo UNIX

pg 43

$ cut -fINT -dsep ficheros Con la opcin f puede utilizarse adems la opcin s, indicando que las lneas que no tienen ningn separador de campo son suprimidas: $ cut -flNT -dsep -s ficheros

8.6 COMANDO pr
Este comando es similar al cat, si bien su funcin es mostrar en pantalla el contenido de un fichero preparado para ser impreso, es decir, con cabecera, separacin de pginas, definicin de mrgenes, etc. Su estructura es la siguiente: $ pr [opc] ficheros Las principales opciones son las siguientes: +K: -K: -d: -n: -ok: -lk: -p : -t: comienza la 'impresin' por la pgina K 'imprime' en K columnas por hoja 'impresin' a doble espacio numera las lneas del fichero comienza la 'impresin' en la posicin k+l establece la longitud de la pgina en k lneas establece una pausa en cada pgina elimina la cabecera

Este comando se utiliza habitualmente en un pipe junto con el comando lp, que se ver a continuacin.

8.7 COMANDO lp
Este comando imprime en la impresora el fichero indicado como argumento. Su estructura es $ lp ficheros Al ejecutarse, el comando devuelve a la pantalla un nmero de trabajo, el correspondiente a ese fichero. No dispone de opciones interesantes. En muchas ocasiones se utiliza conjuntamente con el comando pr, visto en el apartado anterior. El comando lp enva los trabajos a la cola de impresin. Por tanto, Ia terminal queda disponible para seguir trabajando. El control de la cola de impresin se hace a travs del comando lpstat. Este comando no utiliza argumentos. Muestra en pantalla la lista de trabajos en espera de impresin.

8.8 EL COMANDO expr


Entre otras posibilidades el comando expr permite realizar operaciones aritmticas con nmeros enteros. La estructura es la siguiente: $ expr num1 signo num2

Laboratorio de Telemtica

pg 44

Sistema Operativo UNIX

La respuesta es obtenida en pantalla. Es importante tener en cuenta que debe existir un espacio en blanco entre el signo, y los argumentos num1 y num2, que deben ser valores enteros. El signo ser uno de los siguientes: +: -: *: /: %: suma resta multiplicacin. Debe ir precedido de \ para eliminar el metacarcter. divisin. Debe ir precedido de \ para eliminar el metacarcter. resto de la divisin

9.

PROGRAMACIN SHELL. CONTROL DE PROCESOS

9.1 EJECUCIN DE PROCESOS EN BACKGROUND


Hasta ahora se ha venido diciendo que una de las principales ventajas del sistema UNIX es que se trata de un sistema multitarea. Este puede apreciarse considerando que desde varias terminales diferentes pueden ejecutarse distintos procesos al mismo tiempo. Sin embargo, en una sola terminal, vemos que hasta que no finaliza un proceso no puede lanzarse el siguiente, ya que no se recupera el control de la terminal. Por ello, si se desea la ejecucin de varios procesos simultneamente, en una nica terminal, estos procesos deben ejecutarse en background. Ejecutar un proceso en background consiste en lanzarlo de modo que se recupere inmediatamente el control de la terminal (aparece el prompt), sin esperar a la finalizacin del mismo. De esta forma, mientras se est ejecutando un proceso, pueden ser lanzados otros. Para lanzar un proceso en background, lo nico que hay que hacer es aadir al final del proceso un &: $ proc & En ese momento, el sistema devolver en la pantalla el PID (identificador de proceso) correspondiente, y aparecer el prompt. La razn de que aparezca el PID es que slo a travs de l podremos abortar el proceso en caso necesario (como se ver posteriormente). Si un proceso tiene salida por pantalla, el hecho de lanzado en background no la elimina. Esto dara lugar a una prdida de eficacia, ya que si la pantalla est ocupada por esa salida, no seremos capaces de controlar adecuadamente la terminal. Por ello, siempre que se lance un proceso en background deben redireccionarse tanto la salida como la salida de errores. Un comando lanzado en background interrumpe su ejecucin si el usuario sale de la sesin. En ocasiones, esto puede suponer un problema, por lo que existe la forma de evitarlo, utilizando el comando nohup. Este comando permite lanzar un proceso en background, sin que se interrumpa cuando el usuario abandone la sesin. La estructura del mismo es: $ nohup proceso & Cuando se utiliza nohup, es obligado redireccionar tanto la salida como la salida de errores. Si no se hace, el sistema los redirecciona al fichero nohup.out.

Laboratorio de Telemtica

Sistema Operativo UNIX

pg 45

Un comando lanzado de manera habitual puede ser abortado mediante la tecla break o interrupt. Sin embargo, este no puede realizarse con un comando lanzado en background. Para interrumpir stos, debe utilizarse el comando kill. El comando kill se utiliza para abortar la ejecucin de un proceso (de cualquier tipo de proceso, si bien para los background es la nica forma). La estructura es: $ kill PID donde PID es el identificador del proceso que desea abortarse. La necesidad de utilizar el PID explica el que este nmero aparezca en pantalla cuando se lanza un proceso en background. Es posible realizar comandos o procesos inmunes al comando anterior. En estos casos, se utiliza una opcin que es: $ kill -9 PID la cual garantiza la interrupcin del proceso. Obviamente, un usuario slo puede abortar sus propios procesos, no los de los dems.

9.2 PRIORIDAD DE UN PROCESO


La prioridad de un proceso indica la velocidad con que va a ser ejecutado por parte del sistema. Esta prioridad se mide en un rango de 1 a 29, donde 1 es la mxima y 29 es la mnima prioridad. Habitualmente, los procesos tienen prioridad 10 (todos la misma salvo, los lanzados en background, que tienen menor prioridad). Sin embargo, un usuario puede disminuir (nunca aumentar) la prioridad de un proceso. Slo el manager puede aumentar una prioridad. Para modificar la prioridad de un proceso se utiliza el comando nice, de la siguiente forma: $ nice -increment proceso increment es un nmero de 1 a 19 que representa cuntos niveles sobre diez va a disminuir la prioridad. As, $ nice -6 PROC indicar que PROC se va a ejecutar con prioridad 16. Si el manager quiere aumentar la prioridad de un proceso, utilizar un incremento negativo.

9.3 CDIGO DE RETORNO


Todos los procesos UNIX generan un cdigo de retorno cada vez que son ejecutados. El cdigo de retorno es una seal que nos indica de qu manera se ha ejecutado el proceso. Esta seal es un nmero entero, cuyo significado es: 0: distinto de 0: el proceso se ha ejecutado correctamente el proceso ha finalizado con algn tipo de error

El valor del cdigo de retorno no se muestra directamente en pantalla, sino que se halla en la variable ?. Por ello, para conocer el cdigo de retorno de un proceso, haremos: $ echo $?
Laboratorio de Telemtica

pg 46

Sistema Operativo UNIX

9.3.1 COMANDOS true y false


Estos dos comandos nicamente tienen como funcin dar un valor al cdigo de retorno. Su verdadera utilidad podr verse en captulos posteriores. El comando true da un valor 0 al cdigo de retorno. El comando false da el valor de 255 al cdigo de retorno.

9.4 EL COMANDO test


El comando test se utiliza para evaluar expresiones y generar un cdigo de retorno. Es importante destacar que test no produce respuesta en la pantalla. Su resultado debe ser examinado a travs del cdigo de retorno. Si la expresin evaluada es correcta, el cdigo de retorno ser 0. De lo contrario ser un valor distinto de 0 (habitualmente 1). Los argumentos sobre los que trabaja el comando test son ficheros, nmeros enteros y cadenas de caracteres. Las distintas evaluaciones que pueden llevarse a cabo actan a modo de opcin.

9.4.1 EL COMANDO test CON FICHEROS COMO ARGUMENTOS


Cuando los argumentos utilizados son ficheros, el comando test se utiliza para evaluar la situacin de los mismos. Las principales evaluaciones que pueden efectuarse son: -f: -c: -b: -d: -s: -r: -w: -x: As, $ test -r file provocara un cdigo de retorno 0 si el fichero file tiene permiso de lectura para el usuario. argumento es un fichero ordinario (no directorio ni device) el argumento es un fichero device character el argumento es un fichero device bloque el argumento es un directorio ? el argumento es un fichero y no est vaco, o es un directorio el argumento tiene permiso de lectura (para el usuario que lo evala) el argumento tiene permiso de escritura (para el usuario que lo evala) el argumento tiene permiso de ejecucin (para el usuario que lo evala)

9.4.2 EL COMANDO ARGUMENTOS

test

CON

NMEROS

CARACTERES

COMO

En este caso, el comando se utiliza para determinar la veracidad de una expresin lgica. Las evaluaciones que pueden efectuarse son: Para evaluaciones no numricas: a=b a != b a -z a -n a : compara si las cadenas a y b son iguales : compara si las cadenas a y b son distintas : compara si la cadena a no es el carcter nulo : compara si la longitud de a es cero : compara si la longitud de a es distinta de cero

Laboratorio de Telemtica

Sistema Operativo UNIX

pg 47

Para comparaciones numricas n1 -eq n2 n1 -ne n2 n1 -lt n2 n1 -gt n2 n1 -le n2 n1 -ge n2 : compara si n1 es igual que n2 : compara si n1 es distinto de n2 : compara si n1 es menor que n2 : compara si n1 es mayor que n2 : compara si n1 es menor o igual que n2 : compara si n1 es mayor o igual que n2

Todas las evaluaciones vistas (tanto para ficheros, nmeros o caracteres) pueden combinarse a travs de uniones and (-a) y or (-o). Es decir, $ test -r file -a -w file producir un cdigo de retorno 0 si file tiene permiso de lectura y de escritura. Asimismo, $ test -r file -o -w file producir un cdigo de retorno 0 si file tiene permiso de lectura o de escritura.

10.

FICHEROS DE COMANDOS

Un fichero de comandos es un fichero ejecutable creado con un editor, que contiene comandos o estructuras ejecutables en UNIX, que acta a modo de proceso, de forma que cuando se lanza, ejecuta secuencialmente todos los procesos que contiene en su interior.

10.1 ARGUMENTOS EN LOS FICHEROS DE COMANDOS


Como se ha indicado, un fichero de comandos acta como si fuera un comando ms, que a su vez ejecuta otros comandos. Ahora bien, normalmente los comandos necesitan argumentos sobre los que actuar. As, por ejemplo, podemos idear un fichero de comandos que asigna permisos a ficheros sin necesidad de conocer el funcionamiento de chmod. Sin embargo, ese fichero sera prcticamente intil si no somos capaces de indicar en cada ocasin a qu fichero queremos cambiar los permisos. Para salvar este tipo de problemas, los ficheros de comandos admiten argumentos (como si se tratara de un comando normal). Los argumentos de los ficheros de comandos son informaciones que el usuario aporte, y que sern manejadas convenientemente en el interior del fichero de comandos. Ahora bien cmo se hace referencia internamente a los argumentos?. Se hace, teniendo en cuenta su posicin. As, si en un f.c. quiero manejar el primer argumento, utilizar el smbolo $1. $2 ser el segundo argumento, y as sucesivamente, hasta un mximo de 9. No se admiten ms argumentos en un f.c. Sin embargo, es posible que un determinado proceso necesite un mayor nmero de ellos. En este caso, puede utilizarse DENTRO DEL FICHERO, el comando shift, cuya funcin es desplazar una posicin los argumentos. De esta forma, $3 pasa a ser $2, $2 pasa a ser $1, $10 pasa a ser $9, etc. $1 desaparecer.

Laboratorio de Telemtica

pg 48

Sistema Operativo UNIX

shift puede utilizarse con un argumento numrico, que indica cuntas posiciones deben desplazarse los argumentos. As, $ shift 2 indica que los argumentos se desplazan dos posiciones, Por lo que $3 pasara a ser $1, $4 pasara a ser $2, y los argumentos $1 y $2 desaparecen. Adems de los smbolos que indican los argumentos, existen otros que tienen un significado especial dentro de un fichero de comandos: $0: $#: $*: $$: nombre del fichero de comandos nmero de argumentos todos los argumentos PID del proceso actual (el correspondiente al fichero de comandos)

10.2 INTRODUCCIN DE DATOS A TRAVS DE VARIABLES


Como se ha visto, los argumentos permiten introducir informaciones a los f.c. Sin embargo, este funcionamiento puede ser un tanto incmodo, sobre todo para usuarios no habituados a utilizarlo. Sin embargo, es posible tambin introducir informacin a un f.c. a medida que se va ejecutando. Estas informaciones se recogen en forma de variables. La forma de hacerlo es a travs del comando read, el cual detiene la ejecucin del f.c. y espera a que se introduzca el valor correspondiente por parte del usuario. La estructura correspondiente es: read VAR1 donde VAR1 es el nombre de la variable donde quedar almacenada la informacin. Read puede asignar varias variables al mismo tiempo, si bien lo ms recomendable es hacerlo de una en una. A modo de ejemplo, supongamos el siguiente read: read V1 V2 y sea la respuesta del usuario A1 A2 A3 En este caso, la variable V1 tomara el valor Al. mientras que la variable V2, tomara el valor A2 A3. Si la respuesta es A1 la variable V1 tomara el valor A1 y la variable V2 el carcter nulo. Debe tenerse en cuenta que el comando read no lanza ningn mensaje a pantalla, por lo que es habitual utilizar delante de un read un comando echo, que indique al usuario qu informacin se le est pidiendo. Por ltimo, hay que indicar que un fichero de comandos en ejecucin define un nuevo shell, es como si previamente se ejecutara sh. Por ello, las variables que se definan en el interior
Laboratorio de Telemtica

Sistema Operativo UNIX

pg 49

del f.c. no afectarn a las ya existentes en el shell (aunque sean de entorno), y al finalizar la ejecucin, no quedar constancia de ellas. Si se desea detectar un error en la elaboracin de un fichero de comandos, una ayuda consiste en ejecutar el fichero de la siguiente manera: $ sh -x fich De esta forma, el fichero se ejecutar de forma que antes de ejecutarse cada comando, se escribir en pantalla el nombre del comando a ejecutar. Con ello, es ms fcil controlar el funcionamiento del programa.

10.3 COMANDO exit


Cuando un fichero de comandos finaliza su ejecucin, el cdigo de retorno ser el correspondiente al ltimo proceso ejecutado por l. Sin embargo, se puede finalizar la ejecucin en cualquier momento, sin esperar a que se complete todo el fichero (en el apartado siguiente, en el que se explicarn las estructuras de programacin, se entender mejor esto). Esto se hace mediante el comando exit. Anteriormente, se ha visto cmo exit se utiliza para abandonar la sesin, o para abandonar un shell cuando se ha ejecutado un comando sh. En realidad, ahora el funcionamiento es el mismo, ya que en un fichero de comandos su funcin es abandonar la shell correspondiente al mismo. Se puede dar un argumento a exit, un nmero comprendido entre 0 y 255. En este caso, el cdigo de retorno adopta ese valor.

10.4 ESTRUCTURAS DE PROGRAMACIN


Las estructuras de programacin son construcciones que permiten controlar el funcionamiento de un fichero de comandos. Cada una de ellas puede ejecutarse independientemente en el shell, si bien su utilidad se manifiesta dentro de un fichero de comandos. Se vern cuatro construcciones: if, while, for, case.

10.4.1 LA CONSTRUCCIN if
La construccin if se utiliza para tomar decisiones basadas en los cdigos de retorno. La estructura bsica de esta construccin es: if CMD1 then CMDA CMDB . . fi y se le de la siguiente manera: si el cdigo de retorno de CMD1 es 0 entonces ejecutar CMDA, CMDB
Laboratorio de Telemtica

pg 50

Sistema Operativo UNIX

Si el cdigo de retorno no es 0, la ejecucin del fichero contina en el proceso situado despus de fi. fi indica el fin de la construccin if (fi es if al revs). Se puede incluir una construccin if dentro de otra. En este caso, las distintas construcciones deben cerrarse en orden inverso a como han sido abiertas. Si entre if y then existen varios procesos, se ejecutarn todos ellos, pero slo el cdigo de retorno del ltimo marcar la decisin. Una variante de la estructura bsica es la siguiente: if CMD1 then CMDA CMDB else CMDC CMDD fi que se lee de la siguiente manera: si el cdigo de retorno de CMD1 es 0 entonces, se ejecutan CMDA, CMDB... si no, se ejecutan CMDC, CMDD... Una ltima variante poco recomendable, es la siguiente: if CMD1 then CMDA CMDB . . elif CMD2 then CMDC CMDD . . fi Y su lectura es: si el cdigo de CMD1 es cero entonces se ejecutan CMDA, CMDB,...
Laboratorio de Telemtica

Sistema Operativo UNIX

pg 51

si no es cero, y adems es cero el cdigo de retorno de CMD2 entonces se ejecutan CMDC. CMDD... .. La construccin elif siempre puede obtenerse a base de varios if. Como se ha indicado, la construccin if (y cualquiera de las que se vern posteriormente) puede utilizarse directamente sobre el shell. En este caso, cuando tecleamos if, aparecer en pantalla lo siguiente. $ if > El smbolo > indica que la construccin no est completa. Por tanto, el terminal seguir esperando la introduccin de rdenes hasta que se llegue al fi, momento en el que volver a aparecer el prompt ($), pues se ha completado la construccin. En ese instante se ejecuta toda la construccin. Al smbolo > se le denomina segundo prompt y su valor reside en la variable PS2, por lo que puede ser modificado a voluntad del usuario.

10.4.2 LA CONSTRUCCIN while


La construccin while se utiliza para generar un ciclo condicionado. La estructura es la siguiente: while CMD1 do CMDA CMDB . done Y se lee de la siguiente forma: Mientras el cdigo de retorno de CMD1 sea 0 se ejecutan los comandos CMDA, CMDB, .... comprendidos entre do y done. Al llegar a done, se vuelve a ejecutar CMD1, y vuelve a repetirse el proceso. Si el cdigo de retorno de CMD1 no es cero la ejecucin contina en el proceso siguiente a done. As pues, se ha creado un ciclo condicionado a la correcta ejecucin de CMD1. Al igual que ocurre en la construccin if, entre while y do, pueden existir varios procesos, pero slo el ltimo determinar la ejecucin del ciclo. Obviamente, si CMD1 es true, puede establecerse un ciclo sin fin. Al igual que en la construccin if (y como suceder en las posteriores construcciones) puede incluirse una construccin while dentro de otra, debiendo cerrarse de forma inversa a como han sido abiertas.

Laboratorio de Telemtica

pg 52

Sistema Operativo UNIX

10.4.2.1 LOS COMANDOS break y continue


El comando break se utiliza para finalizar un ciclo de forma prematura, sin que ste llegue a su fin. As supongamos la siguiente estructura: while CMD1 done CMDA CMDB while CMDC do CMDE break done CMDJ CMDK done CMDX Al alcanzarse el break, el ciclo do-done correspondiente queda interrumpido, y la ejecucin del fichero de comandos contina en el proceso siguiente al done. En este caso, continuara con CMDJ. break puede llevar un argumento numrico, que indica cuntos ciclos do-done (incluidos uno dentro de otro) deben saltarse para continuar la ejecucin. As, si en lugar de break en el ejemplo anterior apareciera break 2 la ejecucin continuara con CMDX El comando continue funciona de forma similar. Cuando se halla dentro de un ciclo do-done, interrumpe la ejecucin del ciclo pero vuelve a ejecutar el proceso que condiciona la ejecucin del mismo. As, si en el ejemplo anterior apareciera continue en lugar de break el fichero de comandos volvera a ejecutar CMDC, y podra volver a ejecutar el mismo ciclo, en caso de que el cdigo de retorno fuera 0. Al igual que break, continue puede llevar un argumento numrico, indicando qu ciclo do-done (incluido uno dentro de otro) debe ser evaluado. As, si en lugar de break apareciera continue 2 en el ejemplo anterior, el fichero continuara ejecutando CMD1 y entrando en el ciclo correspondiente si su cdigo de retorno es 0.
Laboratorio de Telemtica

Sistema Operativo UNIX

pg 53

10.4.3 LA CONSTRUCCIN for


Esta construccin es bastante similar a la while. Sirve tambin para generar un ciclo, pero un nmero determinado de veces. La estructura es la siguiente: for V in char1 char2.... do CMD1 CMD2 . . done Y su funcionamiento es el siguiente: La variable V (una variable cualquiera) toma el valor char1 (puede ser un nmero, un carcter o conjunto de caracteres o un fichero) y a continuacin ejecuta todos los procesos comprendidos entre do-done. A continuacin, V torna el siguiente valor de la lista (char2) y vuelve a repetirse el proceso, y as contina hasta que V toma el ltimo valor. De esta forma se crea un ciclo que se ejecutar un determinado nmero de veces. Todo lo dicho para la construccin while es aplicable a for, incluido el funcionamiento de break y continue.

10.4.4 LA CONSTRUCCIN case


Esta construccin es equivalente a un if mltiple. Todo lo que puede hacerse con case, puede obtenerse mediante varios if. La estructura es: case CHAR in

modelo 1) (delimitador de modelo) CMD1 . ;; (fin de modelo) modelo 2) CMD2 . ;; . . modelo n) CMDN ... ;; esac (fin de case, esac es case al revs) El funcionamiento es el siguiente: Se compara la cadena CHAR (normalmente ser el contenido de una variable) con modelos. Si coincide, se ejecutan los procesos siguientes hasta el smbolo ;;. Se compara con modeIo2, y se va repitiendo la operacin hasta llegar al final. En los modelos de comparacin pueden utilizarse metacaracteres (*,?,etc)
Laboratorio de Telemtica

Anda mungkin juga menyukai