Prof. Hugo Moncayo pez !a"la de #ontenido $. %ntroduccin ........................................ &. 'ntrada al sistema ............................... (. Salir del sistema .................................. ). #omandos varios ................................ ).$ Sistema de ayudas ........................ ).& Sistema de arc*ivos ...................... 4.2.1 ls Lista contenido de un directorio ........................................... 4.2.2 mkdir crear un directorio ............... 4.2.3 cd Cambiar el directorio actual ........ 4.2.4 rmdir Elimina un directorio ........................................... 4.2.5 rm Elimina archivos ............ 4.2.6 mv Mover archivos .............. ).&.+ !ips ........................................ ,. -esarrollo de programas ..................... .. Uso del editor vi .................................. 6.1 Inicio de vi ................................... ..& Modos de operacin de vi ............ ..( #omandos de pantalla .................. ..(.$ #orrimientos de la pantalla .... ..(.& Movimientos del cursor ......... ..) Pasar a modo de entrada de texto . ..).$ Modificacin de texto ............ ..).& #opia y pegado ...................... ..).( #omandos miscelaneos ......... .., #omandos de l/nea de comandos . ..,.$ eer y salvar arc*ivos ............ ..,.& Sustituciones glo"ales ........... 6.5.3 Variables de vi ..................... +. Uso del compilador de engua0e # .... +.$ #ompilacin simple ..................... +.& Slo compilacin .......................... +.( 1eneracin de un e0ecuta"le con varios o"0etos ......................................... 2. -epuracin de un programa ................ 2.$ 'sta"lecer puntos de interrupcin 2.& %nicio de la e0ecucin ................... 2.( 3evisar el contenido de las varia"les ................................................. 2.) '0ecucin paso a paso 4sin entrar a las funciones5 ....................................... 2., '0ecucin paso a paso 4entrando a las funciones5 ....................................... 2.. -eteccin de puntos de falla ........ 2.+ Manual de referencia de gd" ........ 6. '0ecucin del programa ...................... 6.$ ectura de datos de un arc*ivo .... 6.& 'scritura de resultados en un arc*ivo .................................................... 6.( %mpresin de programas y resultados ............................................... 6.) Preparacin para impresin .......... $7. Utiler/a ma8e ................................... $$. Utiler/a tar ........................................ $&. #ompresin de arc*ivos .................. $ 1.Introduccin 'sta gu/a est9 ela"orada para :ue los alumnos del curso de %ntroduccin a la programacin :ue por primera vez se enfrentan a la necesidad de desarrollar programas en engua0e # en el am"iente U;%< tengan a la mano los principales comandos para mane0ar arc*ivos en su cuenta= editar sus programas fuentes y datos= compilar y depurar sus programas e imprimir sus resultados. 'sta gu/a no es un manual de referencia. Unix es un sistema operativo multiusuario. 'sto significa :ue varias personas pueden usar la computadora concurrentemente desde terminales interactivas o desde computadoras personales conectadas a la red. 'n estas notas el texto :ue escri"e la computadora se presenta en caracteres courier normal y la respuesta del usuario se presenta en courier en negritas. 2.Entrada al sistema #uando se prende la terminal aparece una peticin 4>prompt?5 del sistema a la :ue se responde con la clave del usuario@ login: alpa326 A continuacin aparece la peticin de la contraseAa del usuario@ password: x32jh88a Al teclear la clave del usuario y la contraseAa se de"en teclear exactamente como se proporcionaron estos datos= respetando las mayBsculas y las minBsculas. ;o se de"en *acer correcciones. 'l sistema proporciona tres oportunidades para introducir estos datos. #uando se *an introducido correctamente la clave y contraseAa el sistema proporciona un mensa0e de "ienvenida y al fina presenta una peticin para :ue usuario comience a introducir comandos. $ 'n este momento el usuario puede teclear el nom"re de un comando o el nom"re de un programa e0ecuta"le . 3.Salir del sistema Para salir del sistema= a una peticin del sistema se responde con la com"inacin #trl-d y retorno. 4.Comandos varios A continuacin se presentan algunos comandos de uso comBn :ue son los m9s necesarios para utilizar el sistema operativo. 4.1Sistema de ayudas Para o"tener en la pantalla el manual de un comando se usa el comando man. 'sto nos permite la consulta de la documentacin de cual:uier comando. e0emplo@ $ man vi #on el comando anterior se presenta en la pantalla el manual del comando vi 4editor de textos5. 'n la pantalla aparece la primera p9gina. os comando :ue acepta man son@ espacio Avanza una p9gina delete Salir de man #trl-C 3etrocede una p9gina #on el comando man se pueden consultar tam"iDn las fucniones de la "il"ioteca est9ndar del engua0e # como@ $ man printf 4.2Sistema de archivos 'l sistema de arc*ivos de U;%< es una estructura ar"olada de directorios en donde el directorio ra/z es@ E cada nivel puede tener arc*ivos y directorios. Una trayectoria es una cadena de nom"res de directorios separados por diagonales y puede terminar con el nom"re de un directorio o un & arc*ivo. Si una trayectoria empieza con diagonal= la trayectoria se toma a partir del directorio ra/z o principal del sistema de arc*ivos. /usr/include/system Si la trayectoria empieza con un nom"re= entonces parte del directorio actual. proyecto/fuentes 4.2.1ls Lista contenido de un directorio istar el contenido del directorio actual $ ls istar el contenido del directorio actual incluyendo sus detalles $ ls -l istar el contenido de un directorio con trayectoria a partir del directorio ra/z= incluyendo sus detalles $ ls -l /usr/include/system istar los nom"res de los programas # :ue se encuentran el directorio fuentes. $ ls fuentes/*.c 4.2.2mkdir crear un directorio #rear un directorio en el directorio actual $ mkdir fuentes Se crea el directorio fuentes en el directorio actual. 4.2.3cd #am"iar el directorio actual #am"iar al directorio fuentes :ue se encuentra en el directorio actual. $ cd fuentes #am"ia al directorio fuentes :ue se encuentra en el directorio actual. $ cd /usr/lib esta"lece como directorio actual el directorio lib :ue se encuentra en el directorio usr :ue se encuentra en el directorio ra/z. 4.2.4rmdir Elimina un directorio Para eliminar un directorio el directorio de"e estar vac/o. $ rmdir prueba 'limina el directorio prueba :ue se encuentra en el directorio actual. 4.2.5rm Elimina archivos 'ste comando nos permite eliminar uno o varios arc*ivos. '0emplos@ 'limina todos los arc*ivos o"0eto del directorio actual $ rm *.o 'limina el arc*ivo listado.lst :ue se encuentra en el directorio reportes :ue a la vez se encuentra en el directorio actual. $ rm reportes/listado.lst 4.2.6mv Mover archivos 'ste comando nos permite cam"iar de directorio uno o varios arc*ivos o directorios. '0emplos@ Mover el arc*ivo lista.lst :ue se encuentra en el directorio actual al directorio reportes con el nom"re datos.lst $ mv lista.lst reportes/datos.lst Mover el arc*ivo listado.lst al directorio reportes con el mismo nom"re. 4cuando el origen es un arc*ivo y el destino es un directorio el arc*ivo se mueve a ese directorio con el mismo nom"re5 $ mv listado.lst reportes #uando el origen y el destino son am"os directorios= el directorio origen se mueve con todo su contenido al directorio destino. 'n el siguiente ( e0emplo se mueve todo el directorio fuentes con su contenido al directorio proyectoFterminal $ mv fuentes proyecto_terminal 'l comando mv se puede usar para cam"iar de nom"re a un arc*ivo. 'sto se logra si el arc*ivo destino se encuentra en el mismo directorio :ue el arc*ivo fuente. 'n el siguiente e0emplo el arc*ivo a.out se le cam"ia el nom"re por mieditor@ $ mv a.out mi_editor 4.2.7Tips Para poder repetir la e0ecucin de los comandos anteriores en el sistema acordeon= es necesario e0ecutar el siguiente comando@ $ set -o vi -espuDs de esto= cada vez :ue se desea volver a e0ecutar algBn comando previo se teclea 'S#-8. #ada ves :ue tecleamos 'S#-8 la pantalla nos muestra el comando anterior. 'n la l/nea de comandos podemos *acer modificaciones utilizando los comandos del editor vi 4ver .5. 5.Desarrollo de programas 'l desarrollo de un programa consiste "9sicamente en editar el programa fuente con algBn editor como vi o pico. 'l programa se compila con el comando !"" con lo :ue se genera el programa e0ecuta"le y finalmente se e0ecuta tecleando como comando el nom"re del programa e0ecuta"le. os pasos para el desarrollo de programas son los siguientes@ a5.- -esarrollar el algoritmo usando una *erramienta como espaAol estructurado. "5.- #odificar el programa en un lengua0e de programacin como # o #GG. c5.- 'ditar los arc*ivos :ue contienen el programa con un editor como vi o pico. d5.- #ompilar el programa con el compilador gcc o gGG 4para # o #GG respectivamente5 y eliminar los errores :ue reporta el compilador. e5.- Preparar con el editor los datos de prue"a. f5.- Pro"ar el programa. Si el programa no funciona como esperamos= entonces se revisa y se realizan las correcciones. g5.- Si se dificulta encontrar los errores del programa se puede realizar una corrida de depuracin usando el depurador gd". 'ste programa permite e0ecutar paso a paso el programa y conocer y modificar el valor de las varia"les. *5.- Si despuDs de todo esto no se localizan los errores del programa se puede acudir a asesor/a con el profesor o el ayudante. 6.Uso del editor vi 'l editor vi es un editor de pantalla= es decir= nos permite ver una p9gina del arc*ivo :ue estamos editando. Aun:ue existen otros editores "a0o el sistema operativo Unix es conveniente estar familiarizado con vi por:ue es el :ue siempre encontramos disponi"le en todos los sistemas U;%<. 'l editor vi es muy poderoso pero no es nada amiga"le= ya :ue no proporciona ningBn tipo de ayudas interactivas= ni cuenta con interfaces modernas como menBs ni cuadros de di9logo. Para usarlo cmodamente es necesario memorizar sus comandos. 'n este documento slo se descri"en las funciones m9s usuales. Para una mayor informacin consulte el manual de vi. 6.1Inicio de vi 'l vi de"e tra"a0ar con una variedad de terminales y para :ue opere correctamente es necesario pasarle el modelo de terminal con el :ue vamos a tra"a0ar. 'sto se *ace definiendo una varia"le de am"iente con los siguiente comandos@ $ TERM=vt100 $ export TERN en el e0emplo anterior se defini para vi como terminal el modelo vt1## :ue es el m9s usual y :ue tam"iDn es el adecuado cuando usamos un emulador de terminal en una P#. ) Para verificar el modelo de terminal definido en la varia"le de am"iente $E%M se e0ecuta el comando@ $ echo $TERM Para iniciar el editor vi se e0ecuta el siguiente comando@ $ vi tarea.c #on el comando anterior se inicia la edicin del arc*ivo tarea.c el cual si no existe se crea y si ya existe se permite modificar. 6.2Modos de operacin de vi vi opera en tres modos diferentes@ a5.- modo comando de pantalla= modo de entrada y modo comando de l/nea. Al iniciar vi se encuentra en modo de comando de pantalla. 'n modo de comando de pantalla cual:uier car9cter :ue teclee el usuario se tratar9 de interpretar como comandoH en este modo no se ven los comandos :ue tecleamos= solamente perci"imos su efecto. #uando el modo de entrada se encuentra activo los caracteres :ue tecleamos se agregan al arc*ivo en el punto en donde se encuentra el cursor. 'n el modo de comando de l/nea= el cursor se coloca en la Bltima l/nea de la pantalla y nos permite teclear un comando en esta l/nea= el comando se e0ecuta cuando oprimimos >entrar?. vi no nos da ninguna indicacin para sa"er si nos encontramos en modo de comando de pantalla o modo de entrada. 6.3Comandos de pantalla a mayor/a de los comandos de pantalla son de una sola letra y pueden ser precedidos de un nBmero :ue indica cuantas veces se va a repetir el comando. Por e0emplo el comando dd "orra la l/nea en donde se encuentra el cursorH si deseamos "orrar cinco l/neas a partir del cursos tecleamos 5dd. 'n ningBn momento vemos los s/m"olos :ue constituyen el comando. 6.3.1Corrimientos de la pantalla If Avanza una p9gina Id Avanza media p9gina Ie Avanza una l/nea I" 3etrocede una p9gina Iu 3etrocede media p9gina Iy 3etrocede una l/nea 6.3.2Movimientos del cursor * 3etrocede el cursor 0 Siguiente l/nea 8 /nea anterior l Adelante J Kinal de la l/nea 7 Principio de la l/nea L Mover el cursor al parDntesis= corc*ete o llave :ue cierra el actual. I %r al siguiente car9cter no espacio nl #olocar el cursor en la columna n C 3etroceder una pala"ra ' Avanzar una pala"ra n1 %r a la l/nea n 6.4Pasar a modo de entrada de texto #on estos comandos se pasa de modo comando de pantalla a modo de entrada= es decir= el sistema permitir9 :ue se introduzcan caracteres :ue se incorporar9n al arc*ivo en el punto en :ue se encuentra el cursor. 'n todos estos comandos el cursor se coloca en cierta posicin y el sistema :ueda listo para insercin de texto en el arc*ivo. i 'n donde esta el cursor % Al principio de la l/nea A Al final de la l/nea a Antes del cursor o Agrega una nueva l/nea de"a0o del cursor O Agrega nueva l/nea antes del cursor Para dar por terminado el modo de entrada y regresar a modo de comando de pantalla se oprime la tecla de 'S#. 6.4.1Modificacin de te!to x 'limina el car9cter en la posicin del cursor. r 3eemplaza el car9cter de la posicin del cursor. 'n seguida de"emos teclear el car9cter :ue reemplaza. 3 %nicia reemplazo de texto. A continuacin= el texto :ue tecleamos sustituye al :ue existe en el arc*ivo. # 3eemplaza el texto desde el cursor *asta el final de la l/nea con el nuevo , texto. - 'limina el texto desde el cursor *asta el final de la l/nea. S 'limina el texto de la l/nea actual y permite la entrada de nuevo texto. dd 'limina la l/nea en donde esta el cursor. M Pega la l/nea actual a la siguiente. 6.4.2Copia " pe#ado #opiar y pegar significa copiar el contenido de algunas l/neas de texto en un "uffer para despuDs insertarlas en otro lugar del arc*ivo o en otro arc*ivo. vi cuenta con un "uffer annimo y con "uffers con nom"re. 'l "uffer annimo solamente se usa cuando la operacin de pegado se realiza inmediatamente despuDs de la operacin de copiado. Uso del "uffer annimo nN Se copian en el "uffer annimo n l/neas a partir de la posicin del cursor. p as l/neas contenidas en el "uffer annimo se insertan por de"a0o de la l/nea en donde se encuentra el cursor. Uso de los "uffer con nom"re n?"N Se copian en el "uffer b n l/neas a partir de la l/nea en donde se encuentra el cursor. " Puede ser cual:uier letra. a informacin permanece en el "uffer *asta :ue salimos de vi o *asta :ue introducimos otro contenido en el mismo "uffer. n?"p as l/neas contenidas en el "uffer b se insertan por de"a0o de la l/nea en la :ue encuentra el cursor. 6.4.3Comandos miscelaneos I1 ista en la Bltima l/nea de la pantalla el nom"re del arc*ivo :ue estamos editando y el nBmero de la l/nea en la :ue se encuentra el cursor. 6.Comandos de l!nea de comandos 'l editor vi tiene capacidad de e0ecutar los comandos del editor e&. 'stos comandos nos permiten realizar cam"ios glo"ales= localizaciones de textos con expresiones regulares y otra serie de facilidades 4ver el manual de ex5. Para e0ecutar un comando de e& de"emos estar en modo de comando de pantalla. vi reconoce :ue se trata de un comando de l/nea por el primer car9cter= usualmente dos puntos >@? o una diagonal >E?. 6.5.1Leer " salvar archivos @O Se salva el arc*ivo en el mismo arc*ivo :ue se a"ri al iniciar su edicin. @O arc* 'l arc*ivo editado se salva el arc*ivo >arc*?. @O: 'l arc*ivo se salva y salimos de vi. @:P Salimos de vi sin salvar el arc*ivo 4se pierden todos los cam"ios5 @e arc* Se carga para editar el arc*ivo >arc*?. Si el arc*ivo :ue se esta"a editando no se *a salvado no se realiza la operacin. @eP %gual :ue el comando anterior pero las modificaciones del arc*ivo :ue se esta"a editando se pierden. 6.5.2$ustituciones #lo%ales @sEcad$Ecad&E Sustituye la primera ocurrencia de la cadena >cad$? por la cadena >cad&? en la l/nea actual. @sEcad$Ecad&Eg Similar al anterior pero sustituye todas las ocurrencias de la cadena >cad$? por la cadena >cad&?. @$&=&,sEcad$Ecad&Eg o mismo :ue el comando anterior pero la sustitucin se realiza en las l/neas $& a &, del arc*ivo. @$=JsEcad$Ecad&Eg o mismo :ue el comando anterior pero la sustitucin se lleva a ca"o en todas las l/neas del arc*ivo. 6.5.3&aria%les de vi vi mane0a una serie de varia"les internas :ue le permiten al usuario controlar su funcionamiento. . Por e0emplo el mane0o de la auto sangrado= colocacin de ta"uladores= em"ellecimiento del programa= etc. 'n particular resulta muy Btil :ue vi numere las l/neas en la pantalla. 'sto nos facilita encontrar los errores :ue nos reporta el compilador= ya :ue Dste nos proporciona el nBmero de la l/nea en donde ocurri el error. Para :ue vi presente los nBmeros de las l/neas se e0ecuta el siguiente comando@ 'set number 3evise el manual de vi para conocer otras opciones. .Uso del compilador de !engua"e C 'n Unix existe un solo comando para compilar y encadenar programas= se trata del comando !cc. 'l comando cc procesa una variedad de tipos de arc*ivos= los distingue por su terminacin. Para el propsito de nuestro curso nos interesan los siguientes tipos de arc*ivos@ .c Son los mdulos fuente escritos en lengua0e #. -e"emos crear los mdulos # con esta terminacin. .o Son los mdulos o"0eto resultantes de la compilacin de un mdulo fuente. Un mdulo o"0eto no puede ser e0ecutado= este de"e com"inarse con otros mdulos o"0etos y mdulos de li"rer/a para generar un mdulo e0ecuta"le. .a 's la terminacin :ue se da a las li"rer/as. as li"rer/as nos sirven para almacenar mdulos o"0etos de uso comBn. .cc Programas fuente escritos en #GG. 'n Unix los mdulos e0ecuta"les no tienen :ue tener una terminacin particular. Para los fines de nuestro curso los mdulos e0ecuta"les no tendr9n ninguna terminacin. ".1Compilacin simple Se tiene un solo mdulo fuente y se desea generar un mdulo e0ecuta"le. Si nuestro programa fuente se llama ordena.c para compilarlo y o"tener el e0ecuta"le de"eremos proporcionar el siguiente comando@ J gcc ordena.c -o ordena !odas las compilaciones en este curso vamos a usar esta opcin. Al detectar un nom"re de arc*ivo con terminacin .c el compilador procede a compilar ese arc*ivo. 'l sOitc* -o le indica al sistema :ue el mdulo e0ecuta"le se llamar9 ordena 4sin terminacin5= si la compilacin tiene Dxito el e0ecuta"le :uedar9 con este nom"re. ".2Slo compilacin Para :ue el compilador no intente generar un mdulo e0ecuta"le se usa el sOuitc* -c. -e esta manera podemos realizar una compilacin para generar un mdulo o"0eto. '0emplo@ $ gcc -c lect.c -o lect.o #on el comando anterior se compila el mdulo fuente lect.c y se genera el o"0eto lect.o ".3#eneracin de un e$ecuta%le con varios o%$etos Para ligar varios o"0etos se usa un comando como sigue@ $ gcc ordena.o lectura.o -o ordena #on el comando anterior los mdulos o"0eto ordena.o y lectura.o se com"inan con mdulos de las li"rer/as est9ndar para crear el e0ecuta"le ordena. #.Depuracin de un programa 'l depurador gd" se utiliza para detectar errores de e0ecucin. ;os permite e0ecutar un programa instruccin por instruccin y revisar el valor de las varia"les. Para depurar un programa con gd" el programa se de"e compilar con la opcin -g como se muestra a continuacin@ $ gcc -g ordena.c -o ordena Una vez compilado se inicia la e0ecucin mediante gd" de la siguiente forma@ $ gdb ordena + Una vez iniciado gd" podemos listar las instrucciones del programa con el comando l. (gdb) l Slo se teclea la letra ele. &.1'sta%lecer puntos de interrupcin Antes de iniciar la e0ecucin del programa de"emos esta"lecer uno o varios puntos de interrupcin 4"rea8 point5 con el comando ". (gdb) b 17 #on el comando anterior gd" esta"lece un punto de interrupcin en la l/nea $+. 's posi"le esta"lecer tantos puntos de interrupcin como se desee. #uando la e0ecucin del programa llegue a un punto de interrupcin gd" detiene la e0ecucin antes de e0ecutar la instruccin de esa l/nea y nos permite revisar los valores de las varia"les. &.2Inicio de la e$ecucin Para iniciar la e0ecucin del programa se utiliza el comando r. (gdb) r #on esto se inicia la e0ecucin del programa *asta llegar a un punto de interrupcin o terminar la e0ecucin del programa. &.3(evisar el contenido de las varia%les Para conocer el valor de las varia"les se utiliza el comando p. (gbd) p k #on el comando anterior se lista el valor de la varia"le 8. &.4'$ecucin paso a paso )sin entrar a las *unciones+ Para e0ecutar una instruccin a la vez se utiliza el comando n. #on este comando no se entra a las funciones :ue son invocadas desde la l/nea :ue se e0ecuta. (gdb) n &.'$ecucin paso a paso )entrando a las *unciones+ 'l comando s es similar a n= sin em"argo= cuando en la l/nea :ue se e0ecuta se invoca una funcin gd" nos muestra la primera instruccin de la funcin invocada. (gdb) s &.6,eteccin de puntos de *alla #uando un programa compilado con la opcin Qg a"orta por algBn error 4divisin entre cero= falla de segmento= etc.5 y genera un vaciado de memoria 4core dump5 se invoca el depurador con un comando similar a@ $ gdb ordena core #omo se puede o"servar= el primer argumento es el arc*ivo e0ecuta"le y el segundo argumento es el arc*ivo :ue contiene el vaciado de memoria. 'l depurador nos mostrar9 la l/nea :ue produ0o el pro"lema y podemos analizar la pila del sistema para conocer la ruta por donde se lleg al pro"lema. por e0emplo@ (gdb) bt ;os muestra todos los llamados a funciones :ue nos llevaron al punto de falla del programa. Por cada nivel de llamado en la fila se encuentra un contexto de e0ecucin 4frame5 :ue nos dice el nom"re de la funcin y los valores de los argumentos. #on el comando@ (gdb) f n Podemos situarnos en el contexto nBmero n para poder listar los valores de las varia"les locales y cual:uier otra informacin disponi"le desde ese contexto de e0ecucin. os comandos "t y f se pueden invocar en cual:uier otro momento. &."Manual de re*erencia de -d% 2 'l manual de referencia de gd" se encuentra en la direccin@ *ttp@EEO).lns.cornell.eduEpu"licE#OMPEinfoEgd"Egd"Ftoc.*tml !am"iDn se puede "uscar en internet usando las pala"ras 1;U y gd". $.E"ecucin del programa Para e0ecutar un programa se emplea como comando el nom"re del arc*ivo e0ecuta"le generado con el compilador. Por e0emplo@ $ ordena ..1/ectura de datos de un archivo Si se desea leer los datos de un arc*ivo :ue se encuentra en el disco podemos usar el redireccionamiento de la entrada est9ndar como sigue@ $ ordena <numeros.dat 'n este e0emplo los datos del programa ordena se van a leer del arc*ivo numeros.dat. 'ste arc*ivo se puede preparar con editor vi= igual en la misma forma en :ue se prepara un programa fuente. ..2'scritura de resultados en un archivo Si se desea :ue los resultados se escri"an en un arc*ivo del disco se usa el redireccionamiento de la salida est9ndar@ $ ordena >listado os resultados se almacenar9n en el arc*ivo listado. 'ste arc*ivo se puede ver con el editor vi o se puede enviar a la impresora. ;ota. os dos redireccionamientos se pueden usar simult9neamente como se muestra a continuacin@ $ ordena <datos.dat >listado ..3Impresin de pro-ramas y resultados Para imprimir un arc*ivo de texto en la impresora del sistema se emplea el comando imprime en la siguiente forma@ $ imprime ordena.c ..4Preparacin para impresin 'n el momento de imprimir los programas fuente es conveniente darles un formato adecuado. Para esto se utiliza el comando pr. 'l comando pr lee los arc*ivos :ue se le indican y genera un listado con las caracter/sticas :ue se especifican mediante los par9metros de e0ecucin. '0emplo $@ $ pr -n ordena.c >listado $ imprime listado 'n el e0emplo el arc*ivo ordena.c se formatea agregando nBmeros de l/nea y se almacena en el arc*ivo listado. 'l segundo comando env/a el arc*ivo listado a la impresora. '0emplo &@ $ pr -n *.h *.c >listado $ imprime listado 'n este e0emplo todos los arc*ivos con terminacin .* y con terminacin .c se numeran y se gra"an en el arc*ivo listado. 'l segundo comando env/a el arc*ivo listado a la impresora. 1%.Utiler&a ma'e 'l programa ma8e de unix se utiliza para compilar programas :ue se encuentran divididos en varios mdulos fuente. Adem9s de facilitar la compilacin= minimiza el tiempo re:uerido para este proceso= ya :ue solamente recompila los mdulos :ue *an tenido alguna modificacin. Para utilizar el comando ma8e es necesario crear un arc*ivo de instrucciones 4script5 con el :ue se gu/a a ma8e respecto a como se lleva a ca"o la compilacin. 'l arc*ivo de instrucciones se crea con cual:uier editor de textos como el vi. Supongamos :ue tenemos un programa :ue consta de varios mdulos como se muestra a continuacin@ calcula.cpp 6 #include avl.h #include calcula.h . . . main() { . . . } avl.cpp #include avl.h double *Avl::Avl { . . . }; #omo puede apreciarse= el programa calcula se encuentra dividido en dos mdulos. 'l primero contiene el programa principal e invoca a las fucniones de la clase Avl :ue se encuentran definidas en el mdulo avl.cpp. Para realizar esta compilacin es necesario *acer dos compilaciones y una edicin de encadenamiento 4lin85. Adem9s se de"en aplicar las siguientes reglas@ $5.- #ada :ue cam"ie alguno de los arc*ivos calcula.cpp= calcula.* o avl.* es recompilar calcula.cpp para generar calcula.o. &5.- #ada :ue cam"ie el arc*ivo avl.cpp o avl.* es necesario recompilar avl.cpp para generar el arc*ivo avl.o. (5.- #ada :ue cam"ie el arc*ivo avl.o o calcula.o es necesario e0ecuatar el lin8 para generar el arc*ivo e0ecuta"le calcula. 'sto se logra con una arc*ivo ma8efile con el siguiente contenido@ calcula: calcula.o avl.o g++ calcula.o avl.o o calcula calcula.o: calcula.cpp calcula.h avl.h g++ calcula.cpp o calcula.o avl.o: avl.cpp avl.h g++ avl.cpp o avl.o Para compilar el programa unicamente se de"e invocar al comando ma8e como se muestra a continuacin@ $ make Si no se proporcionan argumentos al comando ma8e= este comando "usca el arc*ivo llamdo Ma8efile o ma8efile para *acer la compilacin. Si el arc*ivo se llama de otra manera como proyecto.ma8= entonces es necesario realizar la siguiente invocacin. $ make f proyecto.mak 'n el e0emplo anterior existen dos clases de l/neas :ue llamaremos reglas y comandos. as reglas contiene el nom"re de un arc*ivo o"0etivo seguido de dos puntos y seguido de la lista de los arc*ivos de los :ue depende. As/ en la primera l/nea se especifica :ue el arc*ivo calcula depende de los arc*ivos calcula.o y avl.o. a segunda l/nea contiene el comando :ue genera el arc*ivo calcula o sea una invocacin a gGG para :ue se realice la liga de los dos mdulos o"0etos. os comandos para generar los arc*ivos empiezan con un ta"ulador. 'n general un arc*ivo ma8e est9 formado por instrucciones de generacin. Una instruccin de generacin tiene una regla de dependencia seguida por uno o varios comandos Unix. as reglas empiezan en la columna $ y los comandos se inician con un ta"ulador. 'n un arc*ivo ma8e es posi"le invocar cual:uier comando v9lido Unix aun:ue por lo gneral solamente utilicemos llamadas al compilador. Uso de macros 'n un arc*ivo ma8e podemos definir macros de la siguiente manera@ OBJS = avl.o calcula.o Posteriormente podemos *acer referencia al valor de la macro en cual:uier parte del arc*ivo como se muestra a continuacin@ g++ $(OBJS) 11.Utiler&a tar 'l programa tar tiene la capacidad de agrupar un con0unto de directorios y arc*ivos en un pa:uete 4tarfile5. 'l mismo programa se usa para desempacar la informacin y reconstruir la estructura de directorios y arc*ivos originales. 'n este curso= los arc*ivos de cada tarea de"er9n estar contenidos en un directorio con el nom"re tarea$= tarea&= 'tc. 'l directorio de"er9 contener exclusivamente los arc*ivos necesarios para compilar y e0ecutar los programas necesarios. $7 'ste directorio podr9 tener su"directorios. Para empacar la tarea :ue se encuentra en el directorio tarea, se utilizar9 el siguiente comando@ $ tar cf tarea5.tar tarea5 'n este caso cf son las opciones. a c indica :ue se va a crear un nuevo pa:uete y la f significa :ue el pa:uete va a se un arc*ivo 4por omisin ser/a una cinta magnDtica5. tarea,.tar es el arc*ivo :ue va a contener el pa:uete y tarea, es el nom"re del directorio :ue corresponde a la tarea nBmero cinco. 's posi"le revisar el contenido de un pa:uete. 'n este caso se emplea el comando@ J tar tf tarea,.tar Para reconstruir la estructura de directorios almacenados en un pa:uete nos colocamos en el directorio a partir del cual deseamos reconstruir la estructura de directorios y usamos un comando como el siguiente@ J tar xf tarea,.tar 12.Compresin de arc(ivos os programas compress y uncompress se utilizan para comprimir y restaurar arc*ivos. a compresin puede a*orrar una cantidad importante de espacio de almacenamiento. Supongamos :ue deseamos comprimir un pa:uete :ue contiene todos los arc*ivos de la tarea cinco y :ue se encuentran en el arc*ivo tarea,.tar. Para esto se usa el siguiente comando@ $ compress tarea5.tar 'l comando compress sustituye el arc*ivo original por el arc*ivo comprimido tarea,.tar.R. Si nuevamente desseamos descomprimir el arc*ivo tarea,.tar.R podemos usar el siguiente comando@ $ uncompress tarea5.tar.Z 'n este caso el arc*ivo comprimido se sustituye por el arc*ivo original. $$ (ndice cd..........................................................................( clave del usuario................................................... & #odificar el programa........................................... ) #omandos de l/nea de comandos.......................... . #omandos de pantalla........................................... , #ompilacin simple.............................................. + #ompresin de arc*ivos......................................$$ #opia y pegado..................................................... . #orrimientos de la pantalla................................... , -epuracin de un programa..................................2 -esarrollar el algoritmo........................................ ) -esarrollo de programas....................................... ) -eteccin de puntos de falla................................. 2 directorios............................................................. & 'ditar.....................................................................) '0ecucin paso a paso........................................... 2 '0ecucin paso a paso 4entrando a las funciones5.2 'ntrada al sistema................................................. & 'scritura de resultados en un arc*ivo................... 6 'sta"lecer puntos de interrupcin......................... 2 1eneracin de un e0ecuta"le con varios o"0etos... 2 %mpresin de programas y resultados................... 6 %nicio de la e0ecucin............................................ 2 eer y salvar arc*ivos........................................... . login...................................................................... & ls ( ma8e.................................................................... $7 man....................................................................... & mkdir.................................................................. ( Modificacin de texto........................................... . modo de comando............................................... , modo de entrada.................................................., Modos de operacin de vi..................................... , Movimientos del cursor........................................ , mv......................................................................... ( Pasar a modo de entrada de texto.........................., passOord............................................................... & Preparacin para impresin.................................. 6 3evisar el contenido de las varia"les.................... 2 rm......................................................................... ( rmdir.................................................................... ( Salir del sistema.................................................... & Sistema de arc*ivos.............................................. & Slo compilacin.................................................. + Sustituciones glo"ales........................................... . tar........................................................................ $$ trayectoria............................................................. ( Uso del editor vi....................................................) $& $(