UPD Solucionario Compiladores Aho
Ese libro uuuuuuuh, no siempre le trae buenos recuerdos a uno. Yo tambien recibi clase con Oscar Bonilla, pero yo no corri con la suerte de ganar el curso =(, cuando llegamos a lo del analisis semantico, alli se acabo el amor. Me lo eche. Me cuerdo que el lenguaje que compilabamos se llamaba Decaf y la idea era generar Ensamblador de MIPS. Y cabal ese libro es salvaje. Yo nunca tuve mi copia del libro, me fui a pura fotocopia. Algunos de los que llevaban el curso mandaron a comprarlo usado de Amazon. Pero ese libro es un clasico, creo que todos los que han llevado un curso de compiladores lo han visto o por lo menos lo han tenido como referencia, y siempre tienen un comentario sobre el famoso Libro del Dragon.
UPD Solucionario Compiladores Aho
Para ayudarte un poco hemos creado éste Catálogo con todos los libros universitarios y solucionarios que tenemos para estudiantes, profesores y curiosos; éste catálogo dispone de una gran cantidad de textos y Autores diferentes, de todas las áreas del conocimiento de la A a la Z. Están agrupados y ordenados de forma alfabética y por temas/cursos.
16 XVI Linux, guÃa práctica RA-MA Actualmente, Linux soporta prácticamente cualquier hardware presente en ordenadores personales. Linux incorpora además infinidad de utilidades y programas, como soporte para redes, entornos de ventanas, compiladores de diferentes lenguajes, procesadores de textos, manuales, etc. Debido a eso, podemos decir que Linux es una buena opción para todas aquellas personas que, disponiendo de un ordenador personal, desean embarcarse en el mundo UNIX. La razón de que Linux se haya convertido en un sistema operativo de amplia difusión se debe fundamentalmente a la licencia con que se distribuye. Ésta es la licencia GPL o GNU Public License. GNU es un acrónimo recursivo (GNU is Not UNIX) y hace referencia a un movimiento cuyo propósito es desarrollar herramientas de libre distribución. La licencia GPL garantiza que cualquier modificación realizada al código fuente quede accesible a los usuarios en forma de código fuente. Con otras licencias, como la licencia BSD, se distribuye el código fuente, pero cualquiera puede modificarlo y no verse obligado a distribuirlo de nuevo junto con las modificaciones. Como hemos indicado anteriormente, Linux se puede conseguir de forma gratuita. Existen multitud de distribuciones que pueden obtenerse a través de Internet, en CDs o a través de múltiples canales de distribución. Descripción del libro Este libro ha sido escrito con el fin de servir de referencia a aquellas personas que desean introducirse en el manejo del sistema operativo Linux. En él se ofrece una visión sencilla de todas aquellas órdenes y utilidades que los autores consideran útiles. No se va a hacer un repaso de todas las opciones de cada orden (para ello tenemos el propio manual en lÃnea), sino que sólo se citarán aquellas que se utilicen más asiduamente. Con ello se pretende ofrecer una guÃa útil y manejable que oriente al lector y que le haga comprender los conceptos básicos de este sistema operativo. El libro está estructurado en dos partes. La primera, dedicada a exponer los fundamentos y órdenes de Linux para el usuario, y la segunda, dedicada a introducirnos en la administración del sistema. Existe una amplia bibliografÃa que trata cada una de las dos partes por separado (consúltese la bibliografÃa incluida al final del libro), pero es difÃcil encontrar algún libro que trate ambos aspectos de forma conjunta, como se hace en este texto. Asimismo, se ha intentado evitar que el libro se convirtiera en un mamotreto inmanejable, y para ello se ha reducido al máximo su extensión, sin perjuicio de que los temas que comprende hayan sido tratados con la profundidad suficiente. A grandes rasgos, los contenidos del libro son los siguientes: Primera parte: Linux para el usuario Introducción a Linux El sistema de archivos El editor de texto vi (visual) El intérprete de órdenes
47 RA-MA 2.3. NOMBRES DE ARCHIVOS Y DIRECTORIOS 29 /usr/bin Contiene fundamentalmente los programas ejecutables que de alguna forma son mayores en tamaño y se utilizan menos frecuentemente que las órdenes del directorio /bin. /usr/lib Contiene los archivos de biblioteca utilizados por los compiladores de lenguajes como FORTRAN, Pascal, C, etc. Estos archivos contienen básicamente funciones, en un formato especÃfico, que pueden ser invocadas desde estos lenguajes. /usr/man Este directorio contiene las páginas del manual en el disco del ordenador. La orden man, que vimos en el capÃtulo anterior, lo único que hace es buscar en este directorio la información solicitada por el usuario y formatearla para que aparezca adecuadamente presentada por pantalla. /usr/local/bin y /usr/contrib/bin Estos directorios son generalmente creados por el administrador del sistema para que contengan archivos ejecutables que no forman parte del Linux. Cualquier usuario que desarrolle una nueva utilidad puede dejarla en uno de los dos directorios anteriores de modo que sea accesible al resto de los usuarios. /etc Este directorio contiene órdenes y archivos de configuración empleados en la administración del sistema. Estas órdenes se guardan en un directorio aparte porque la mayorÃa de ellas sólo pueden ser ejecutadas por usuarios privilegiados. Normalmente, todos los archivos de configuración presentes en Linux son archivos de texto. La razón es que de este modo son fáciles de interpretar y de modificar, para lo cual necesitaremos únicamente un editor de texto. /dev Este directorio contiene los archivos de dispositivo empleados para la comunicación con dispositivos periféricos, tales como cintas, impresoras, discos, terminales, etc. Un archivo de dispositivo es un archivo especial, reconocido por el núcleo, que representa a un elemento de entrada-salida (E/S). La idea de tratar los dispositivos de E/S como si se tratase de archivos es algo que se conoce con el nombre de independencia de dispositivo. La independencia de dispositivo es algo realmente interesante y, por otra parte, muy utilizado, porque de este modo emplearemos las mismas funciones tanto para trabajar con archivos ordinarios como para trabajar con elementos de E/S Nombres de archivos y directorios Aunque ya hemos tratado con distintos nombre de archivos y directorios, todavÃa no sabemos qué reglas se utilizan para nombrarlos. Los nombres de los archivos pueden contener hasta 255 caracteres. Los caracteres empleados pueden ser cualesquiera. En la práctica, sin embargo, se suelen evitar aquellos caracteres del código ASCII que tienen significado especial para el intérprete de órdenes. Como carácteres especiales podemos citar los siguientes: *? >
273 RA-MA PERMISOS ESPECIALES SOBRE ARCHIVOS 255 ls -l sisarch -rwxr-xr-x 1 chan igx ene 18 18:55 sisarch chmod 2755 sisarch ls -l sisarch -rwxr-sr-x 1 chan igx ene 18 18:55 sisarch También podemos activar estos bits sin necesidad de operar en octal. Veamos cómo podemos activar estos bits de forma simbólica haciendo uso de la orden chmod: chmod +s nzo ls -l nzo -rwsr-sr-x 1 chan igx ene 18 18:55 nzo Por último, el sticky-bit indica al núcleo de Linux que este archivo es un programa con capacidad para que varios procesos compartan su código, y que este código se debe mantener en memoria aunque alguno de los procesos que lo utiliza deje de ejecutarse. La técnica de compartir código entre varios procesos permite ahorrar memoria en el caso de trabajar con programas muy utilizados, tales como editores de texto o compiladores. Este bit está activo cuando en la máscara de derechos del archivo en cuestión, en el campo de ejecución del resto de usuarios, aparece una t en lugar de una x. Ejemplo: ls -l /usr/local/bin/exax -rwxr-xr-t 1 root bin Dec 1 03:27 exax El sticky-bit tiene, en Linux, un uso especial para proteger archivos dentro de un determinado directorio. Cuando en un determinado directorio tenemos activados los derechos de escritura para un grupo de usuarios o para todo el mundo, implica que cualquiera de ellos podrÃa borrar archivos de ese directorio, incluso aunque no le pertenezcan. Veamos un ejemplo que aclare el escenario planteado. Supongamos que el usuario ssp tiene un directorio denominado publico al cual tiene acceso todo el mundo: pwd /home/ssp ls -ld publico/ drwxrwxrwx 2 ssp ssp 4096 sep 21 18:00 publico/ Supongamos que en ese directorio tenemos un archivo denominado datos.ssp que pertenece al usuario ssp. Si otra persona accede a ese directorio, podrá borrar ese archivo, aunque no sea el propietario. Supongamos que el usuario oscar intenta borrarlo del modo siguiente: id uid=502(oscar) gid=502(oscar) grupos=502(oscar)