Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO FACULTAD DE ESTUDIOS SUPERIORES CAMPUS ARAGÓN INGENIERÍA EN COMPUTACIÓN “Desarrollo de Sistemas basados en Software Libre GNU/Linux” PROYECTO BAJO LA MODALIDAD DE “SEMINARIOS Y CURSOS DE ACTUALIZACIÓN Y CAPACITACIÓN PROFESIONAL” QUE, PARA OBTENER EL TÍTULO DE: “INGENIERA EN COMPUTACIÓN” PRESENTA: Basilio Guzmán Alma Delia Dirigido por la Biol. Lizbeth Heras Lara UNAM – Dirección General de Bibliotecas Tesis Digitales Restricciones de uso DERECHOS RESERVADOS © PROHIBIDA SU REPRODUCCIÓN TOTAL O PARCIAL Todo el material contenido en esta tesis esta protegido por la Ley Federal del Derecho de Autor (LFDA) de los Estados Unidos Mexicanos (México). El uso de imágenes, fragmentos de videos, y demás material que sea objeto de protección de los derechos de autor, será exclusivamente para fines educativos e informativos y deberá citar la fuente donde la obtuvo mencionando el autor o autores. Cualquier uso distinto como el lucro, reproducción, edición o modificación, será perseguido y sancionado por el respectivo titular de los Derechos de Autor. Índice general INTRODUCCIÓN……………………..……....……...…………………...…………...6 I. INTRODUCCIÓN AL SISTEMA OPERATIVO GNU/LINUX, INSTALACIÓN Y ADMINISTRACIÓN…………………....……………......………………………….8 1.1. Introducción…………………………..…......……………….…..……….…9 1.2. RMS & Software libre………………..……..……...….……..………...….11 1.3. GNU/Linux……………...………….....……..………………………..…...13 1.4. Kernel Linux……..………………..………..……...………………………13 1.4.1 Características……………………..……......………………….…15 1.5. Filosofía del software libre…..………..………...………...…………….....16 1.6. Distribuciones………………………….….………..……...………..…......18 1.7. Componentes de GNU/Linux……………………..………...………..……19 1.7.1. Hardware…………………………………...………..…………...19 1.7.2. Kernel………………………………………………..………...…19 1.7.3. Shell………………………………...………….....……………...20 1.8. Instalación………………………………………….……………..……......21 1.8.1. Niveles de ejecución…………………………………….……….23 1.9. Aplicaciones y usuarios….……..…………………….………...…....…….24 1.10. Sistema de archivos…………………....……………………………........25 1.10.1. Directorios………………………….....…………………...……25 1.11. Cuentas de usuarios………………………………...…………………….26 1.12. Comandos básicos…….……………….…………...…...……………..….26 1.12.1. Opciones de comandos…………………...……………..…...….29 1.12.2. Caracteres comodín…………………………………....………..29 1.12.3. Cambios de permisos por el método octal………………...…....30 1.13. Rutas absolutas y relativas………………………...………….…………..31 1.13.1. Ruta absoluta……………...………...…………...…...…………31 1.13.2. Ruta relativa…………………………………………………….31 1.14. Consultando ayuda del sistema……………….…………………..…........32 1.15. Trabajo con archivos………………………...………...………...………..32 1.15.1. Cat………………………………...……………………...……..32 1.15.2. More……………………………….............……...…………….33 1.15.3. Head……………………………………………………........….33 1.15.4. Pico……………………………………...………………......…..33 1.16. Redireccionamiento………………………………...…………….………33 1.16.1. Redireccionamiento de salida……………...………….....……..33 1.16.2. Redireccionamiento de entrada…………………………..…......34 1.17. Filtros…………………………......…………………………………..…..34 1.18. Comandos básicos de red………...…………………………………….…34 2 1.18.1. Mail…………………………...…………...……………………35 1.18.2. Write…………………………...………...………………...…....35 1.19. Procesos……………………………...…...……..……………………..…35 1.20. Respaldos…………………………...……...……………………..….…...36 1.20.1. Tar………...…………..………...………………………………36 1.20.2. Gzip………………………………….....……...………………..37 1.21. FTP (File transfer protocol)……………………...…………...……..……37 1.22. Resumen general capítulo I………………………......……...……...…….39 II. EDITORES PARA CREAR PÁGINAS WEB, SERVIDORES DE WWW Y PROGRAMACIÓN CON PHP...………...……………………..……………...…….40 2.1. Introducción……………………...……………………...…………..……..41 2.2. World Wide Web…………………..……………………...……...………..44 2.3. Html…………………………...…...…………..…………...………..…….45 2.4. Editores………………………...……………………………...……..…….46 2.4.1. vi..……...………………...………………….………………….46 2.5. Comandos básicos……………………………………………...……….…46 2.6. Documento básico en Html………...…………………………...……….....47 2.7. Párrafos en Html…………………......………………………….…………50 2.8. Instalación de Apache……………………….……………………………..50 2.9. Configuración básica de un servidor Apache…….…………...……...…...52 2.10. Fichero httpd.conf.………………………...….………………………..…53 2.10.1 ServerRoot……...………………………………………...……..53 2.10.2. DocumentRoot…...………………………………………….….53 2.10.3. PidFile……………...……………….………………………..…53 2.10.4. ServerAdmin……….…………………....….………..…………53 2.10.5. StartServer…………...………………………………………..………..54 2.10.6. KeepAlive……………...………………………...…………..…54 2.10.7. Listen……………………...…..………………...……………..54 2.10.8. LoadModule………………...….……………………...……..…54 2.10.9. ServerName….………………...………...…...………………....54 2.10.10. ErrorLog………………………..……………...…………...….54 2.10.11. LogFormat…..…………………...……...…...………...………54 2.10.12. IndexOptions..……………………..………...…...……………54 2.11. Programación con PHP………….……………..…………………..……..55 2.12. Instalación de PHP………….…………………..……...……………...….56 2.13. Sintaxis en PHP……………….………………......…………..………….58 2.13.1. Variables………………….…………...…………...………..….60 2.13.2 Operadores……………………………...…………………….…61 2.13.2.1. Operadores aritméticos…….…...……...………...……61 2.13.2.2. Operadores lógicos………………..………………..…61 2.13.2.3. Operadores de comparación…...……………………...62 2.13.2.4. Cadenas………………………………..…….…..……62 2.14. Sentencias de control……………………………………...…...………....62 3 2.15. Resumen general capítulo II………………...…...…...........………..……63 III. INTRODUCCIÓN A LAS BASES DE DATOS Y A LA SEGURIDAD EN CÓMPUTO………...………………………………………………………………….65 3.1. Introducción…………………………………......…..…….……………….66 3.2. Bases de datos con MySQL……………………...…………….………….67 3.3. Conceptos…………………………………………...….…………………67 3.3.1. Atributo……………………………………...….………………………..67 3.3.2. Llave……………………………...…………....……………...….67 3.3.3. Tupla…………………………………...……………………..….68 3.3.4. Dominio……...……………………………...….....……………..68 3.3.5. Grado……………………………………………..……..………..68 3.3.6. Relación…………………...……………………...……………...68 3.3.7. Tabla base………………..………………………...…….………68 3.3.8. Manejador de bases de datos………………………...……...........68 3.3.9. Tabla………………………………...………………….………...68 3.3.10. Registro………………………………………......…..…………68 3.3.11. Campo…………………………………………....……………..68 3.3.12. Llave primaria……………………….………….....……………68 3.3.13. Llave foránea………………………..………...…………….…68 3.4. Modelo relacional……………………………….…………..……..………69 3.5. Creación de una tabla…………………………..……...…………….…….69 3.6. Comandos………………………………………………………….………69 3.6.1. Drop………………………………….....………………….…….70 3.6.2. Alter…………………………………......………………….……70 3.7. Creación de una base de datos………………..……...…………..………...70 3.8. Utilizar la base de datos………………………….………......…………….70 3.9. Eliminar la base de datos…………………….……...……………………..70 3.9.1. Sentencia Drop……………………..……..…………..........…….70 3.10. Mostrar la base de datos………………….……...…………….........…….71 3.10.1. Sentencia Show Databases……….……..………...……...……..71 3.11. Seguridad en cómputo…………….....……......…………………….....…72 3.11.1. ¿Qué es seguridad?..................................................................................72 3.11.2. Contraseñas etc/passwd…....…………………...……………………....73 3.11.3. Herramientas de seguridad.…......……………...……………………….73 3.11.4. Sistemas detectores de intrusos……….……….....……….….………....73 3.11.5. Analizadores por red………………..………..………………………....73 3.11.6. Analizador local……………………...……..………..……..…......……73 3.11.7. Herramientas para el administrador…….…..……..………..……..……73 3.11.8. Gusanos……...………………………………....….....………..………..73 3.11.9. Riesgos más comunes………...………………....……..…………….…74 3.11.10. Bitácoras……….…………………………...………...………………743.12. Resumen general capítulo III…………….……..……………..…..……...75 4 IV. CONCLUSIONES………………………………………..…………………….....76 Bibliografía....................……………………………………………………………….77 5 INTRODUCCIÓN En este trabajo se muestran consejos prácticos que van desde una instalación del sistema operativo, hasta una base de datos; depende de cada uno de nosotros profundizar más en cada tema dependiendo de nuestras necesidades, ya que para aprender un tema en específico no hay mejor manera que hacerlo por nosotros mismos. El propósito principal de este trabajo es dar a conocer lo que es el software libre, GNU/Linux, ya que es un sistema operativo muy popular, y día a día gana más adeptos, la comunidad está creciendo gracias a la colaboración de miles de programadores alrededor de todo el mundo, así como las herramientas basadas en el mismo, como son PHP y MySQL, entre otras, las cuales han demostrado ser altamente estables y con excelente desempeño. Este sistema operativo es altamente poderoso y estable. Herramientas como PHP y MySQL cumplen también con el requisito de ser libres, esto implica que tenemos la libertad de utilizarlas en cualquiera que sea nuestro propósito y adaptarlas a nuestras necesidades. Este es el punto más importante de este trabajo, el hecho de que GNU/Linux sea software de libre distribución nos habla no solamente sobre el precio de pagar algún tipo de licencia para hacer uso del mismo, sino que como se mencionó antes, nos da la libertad de ejecutar el programa sea cual sea el propósito. El software libre viene con el código fuente, así que además podemos hacer mejoras al programa, si este fuera el caso, ya que sin el acceso al código fuente el hacerle algún cambio a los programas sería muy difícil. Daremos una guía básica de la instalación de una distribución de este sistema operativo, con pasos bastante sencillos, también una guía de editores para crear páginas web. También hablaremos sobre herramientas para crear una base de datos, enfocándonos en MySQL y como servidor usaremos Apache. El lenguaje PHP en conjunto con HTML nos permite crear aplicaciones dinámicas para web, además, ambos son sencillos y no requieren de conocimientos profundos en programación, bastará con tener conocimientos básicos de C o algún otro lenguaje de programación. 6 El hecho de utilizar las computadoras, como medio de transmisión de información, nos hace más vulnerables a sufrir ataques que dañen nuestra computadora y la información contenida en ella, es por esto que también se verán algunos aspectos básicos sobre la seguridad en informática. 7 CAPÍTULO I INTRODUCCIÓN AL SISTEMA OPERATIVO GNU/LINUX, INSTALACIÓN Y ADMINISTRACIÓN 8 1.1 Introducción La historia de GNU/Linux está totalmente relacionada con la historia de Unix, la cuál es muy interesante, así que no podemos saltarnos esta parte, ya que resulta la más importante a la hora de hablar de derivados de Unix, como lo es el Kernel Linux. La historia de Unix es muy importante aunque no fue tan impactante. En el año de 1964 Bell Telephone Laboratories de At&T, General Electric Company y el MIT (Instituto Tecnológico de Massachussetts) se propusieron desarrollar un innovador sistema operativo que funcionara en una máquina GE645 (de General Electric), a este nuevo sistema operativo lo llamaron MULTICS. La principal característica de este sistema es que daba a una amplia gama de usuarios una gran capacidad computacional, al igual que poder almacenar y compartir grandes cantidades de datos. Lamentablemente el proyecto se producía lentamente, ya que las limitaciones del hardware en esa época representaban un obstáculo. Como el proyecto comenzó a mostrar síntomas de estar convirtiéndose en algo inútil, la compañía Bell Telephone decidió dejar el proyecto. MULTICS no fue un éxito después de todo, pero las ideas planteadas para el proyecto fueron empleadas para la creación de lo que sería UNIX, así como para otros sistemas operativos. Dennis Ritchie, quien había trabajado con anterioridad en el proyecto de MULTICS, en conjunto con Ken Thompson, que era uno de los miembros del Computing Science Research Center (Bell Laboratories), crearon el sistema operativo UNIX alrededor del año 1971. MULTICS (Multiplexed Information and Computing Service) tuvo mucha influencia en el sistema operativo UNIX, algunas de las características principales es la organización básica del sistema de archivos y el interprete de comandos (Shell). En el nombre de ambos sistemas también puede verse la influencia, ya que inicialmente se utilizó el termino UNICS (Uniplexed Information and Computing Services), aunque como sabemos, al final de la historia se le dio el nombre de UNIX. En sus inicios, UNIX tampoco impactó mucho al público, sobre todo porque al principio solamente era utilizado para propósitos internos en AT&T. Con la versión de UNIX SystemV (SysV) este sistema operativo logró posicionarse como uno de los mejores, ya 9 que seguido del éxito que alcanzó con esta versión aparecieron diversos productos bastante parecidos, un ejemplo de ello es BSD (Berkeley Systems Distribution), presentado por la University of California en Berkeley en el año de 1978, y era bastante parecido a UNIX¹. El impacto de BSD fue tal que la Agencia de Investigación de Proyectos Avanzados de Defensa (DARPA) le ofreció financiamiento a la universidad de Berkeley para crear un estándar de UNIX para uso oficial, a este sistema se le dio el nombre de 4BSD. El trabajo realizado para DARPA fue dirigido en todo momento por personas expertas en UNIX, DARPA Internet (TCP/IP) y en redes. Hoy en día no solamente encontramos versiones como BSD, muchas empresas se dedican a fabricar su propio Unix, como lo es IBM en cual ofrece AIX, Sun Microsystems lo denomina Solaris, SGI tiene Irix y Hewlet Packard ofrece HP-UX. Existen también versiones cuya distribución es libre, como OpenBSD o FreeBSD. Aunque propiamente el nombre de UNIX solamente pertenece a AT&T, los demás sólo son similares a él, por decirlo de alguna manera. UNIX fue diseñado como un sistema multiusuario en tiempo compartido, lo que quiere decir que varios usuarios pueden trabajar de forma simultánea compartiendo entre ellos todos los recursos del sistema y el procesador, de esta manera cada uno de lo usuarios pueden ejecutar uno o más procesos (programas en ejecución) a la vez. GNU/Linux es muy similar a UNIX, en lo que se refiere a su origen, pero al hablar de la ideología y el enfoque que tiene encontramos grandes diferencias. Una de las principales diferencias que tienen es que los fabricantes comerciales usualmente cuentan con arquitectura propia de hardware, al contrario de esto, GNU/Linux se puede adaptar a diversas arquitecturas como lo son, SPARC, Intel, IBM. 1 10 1 En español quiere decir “GNU no es UNIX” 1.2. RMS & Software libre Richard Mathew Stallman mejor conocido como “RMS” nació en el año de 1953 en la ciudad de Nueva York, el primer contacto que tuvo con una computadora fue a la edad de 12 años (una IBM 7094), posteriormente en el año de 1971 ingresó al Laboratorio de Inteligencia Artificial (AI Lab) del MIT (Instituto Tecnológico de Massachussetts), en aquella época el software todavía podía compartirse sin causar conflicto, RMS se desarrolló dentro de una comunidad acostumbrada a compartirlo todo, ya que así había sido siempre. Figura 1.1. Richard Stallman “RMS” En aquel entonces se utilizaba dentro de Laboratorio de Inteligencia Artificial un sistema operativo libre llamado ITS (Incompatible Timesharing System), el cual fue diseñado y escrito por los miembrosdel laboratorio en lenguaje ensamblador, este sistema había sido hecho para una de las computadoras más grandes de aquella época: la Digital DPD-10. El trabajo de RMS era mejorar ese sistema. Aunque en ese tiempo no llamaban “Software Libre” a su software, pero era precisamente eso, cuando alguna persona externa quería instalar y utilizar su sistema con gusto se lo prestaban. Y al contrario, si notaban que alguien utilizaba algún programa interesante podían preguntar por el código fuente para modificarlo e incluso quitar partes de él para hacer un programa nuevo. Posteriormente se suscitaron algunos hechos que cambiaron las cosas, en el año de 1981 la empresa llamada Symbolics contrató a la mayor parte de los hackers2 del laboratorio de AI (Inteligencia Artificial), a causa de esto la comunidad en la que habitaba RMS quedó desolada. En 1982, los administradores de AI Lab decidieron utilizar un sistema “no-libre” en la nueva DPD-10 que adquirieron, pero poco tiempo después se dejo de producir esta computadora, y con esto, todos los programas que habían integrado al sistema ITS quedaron obsoletos. 11 2 Puede decirse que Hacking significa explorar los límites de lo posible con un espíritu de sagacidad imaginativa. La mayor parte de los Hackers tienen en común la pasión lúdica, la inteligencia y la voluntad de exploración. Las computadoras más nuevas de esa época no utilizaban software libre, ya que todas tenían su propio sistema operativo, desde entonces las comunidades que compartían software quedaron prohibidas. Pasado esto, en el año de 1984 Richard M. Stallman dejó su empleo en el MIT para comenzar a trabajar en lo que es su propósito general hasta estos días: crear una comunidad nueva que se dedique a compartir software, como la comunidad en la que el se formó. Comenzó por escribir un sistema operativo, ya que es lo esencial para poner en marcha una computadora, pensó que debía ser compatible con Unix para que así a los usuarios no les fuera tan difícil migrar de un sistema a otro. El nombre que se le dio a este proyecto fue GNU (GNU's not UNIX) que es un acrónimo recursivo que se utilizó para decir “GNU No es UNIX”. El comenzó a trabajar con su proyecto de GNU en 1984 y lo primero que hizo fue un compilador que fuera capaz de trabajar en diversos lenguajes y plataformas, actualmente este compilador es conocido como GCC. En ese mismo año comenzó a trabajar en otro proyecto GNU llamado GNU Emacs, rápidamente hubo gente que se mostró muy interesada en utilizar su GNU Emacs, por esta razón hubo un problema a la hora de distribuir el software así que Richard les enviaba copias del software a cambio de ciento cincuenta dólares a todo aquel que no tenía manera de descargarlo de la red, fue así como comenzó su empresa para distribuir software libre y fue también el precedente de empresas que actualmente se dedican a distribuir sistemas Linux, basados en GNU. Todos los programas que son ejecutados en un sistema en GNU/Linux utilizan la librería de C de GNU para poder comunicarse con Linux, esta librería fue creada por un miembro de la Free Software Foundation (FSF), esta fundación sigue siendo la principal patrocinadora del proyecto GNU. También la shell (intérprete de comandos), que se utiliza en todos estos sistemas llamada BASH que es el acrónimo de Bourne again Shell, fue creada por un miembro de la FSF llamado Brian Fox, con ese acrónimo pretendían burlarse de la Bourne Shell que es la más común en sistemas UNIX. 12 1.3. GNU/Linux Para el año de 1990 casi estaba terminado el proyecto GNU, pero aún faltaba el componente más importante, el Kernel ó núcleo, que es el componente central. El Kernel de GNU en un principio se llamaría Alix -quien era una chica administradora de sistemas Unix-, después se acordó llamarlo Hurd3 por Michael Bushnell, principal desarrollador del Kernel, aunque llamó Alix a una pequeña parte del Kernel. Actualmente siguen trabajando en el Kernel Hurd, la idea que tienen es utilizar este Kernel en lugar del Kernel Linux para su sistema. En el año de 1991 un estudiante, en ese entonces universitario, Linus Benedict Torvalds quien insatisfecho con el sistema operativo MS-DOS, y además necesitado de dinero, se planteó la posibilidad de crear un sistema operativo que fuera compatible con Unix; lo que hizo fue modificar el núcleo de Minix y así, desarrolló el Kernel o núcleo llamado Linux. Lo llamó de esta manera ya que a Linus lo conocían con ese apodo en la universidad. Fue gracias a la colaboración de muchas personas que pudo integrarse el Kernel Linux con el sistema GNU y crear un sistema integrado, el cual no es simplemente una recopilación de programas. El proyecto GNU en conjunto con el Kernel Linux, dio como resultado un sistema operativo libre y completo. Gracias al Kernel Linux el día de hoy podemos ejecutar una versión del sistema GNU en nuestras computadoras, es por eso que se denomina GNU/Linux siendo el fruto de la combinación del sistema completo GNU con el Kernel Linux. Desafortunadamente, gracias a los medios de comunicación, mucha gente piensa que todo el mérito del sistema operativo GNU/Linux lo tiene Linus Torvalds, estamos tan acostumbrados a decir sólo “Linux”que a veces parecerá raro si lo llamamos como es debido, en este trabajo nos referiremos al sistema completo como GNU/Linux o tal vez sistemas GNU/Linux. 1.4. Kernel Linux El Kernel Linux estuvo inspirado en un pequeño sistema Unix llamado Minix el cual fue hecho por Andy Tanenbaum, un catedrático alemán que simplemente buscaba la manera de instruir a sus alumnos en el uso de un sistema operativo de forma real. Minix era bueno, pero era sólo un sistema operativo utilizado como herramienta didáctica. El código fuente del sistema operativo desarrollado por Tanenbaum estaba disponible para cualquier persona que comprará su libro “Operating System”, fue así que muchos 13 3 El GNU Hurd es una colección de servidores que desempeñan tareas propias del Kernel de Unix. estudiantes pudieron estudiar detenidamente cada línea de código y entender el funcionamiento de este sistema. Uno de esos estudiantes fue Linus Torvalds. Fue esa la primera vez que alguien dejó al descubierto su código fuente, ya que la mayoría de los vendedores de software no permitían este tipo de cosas. Como se dijo antes, aproximadamente fue a mediados de septiembre del año 1991 que Linus Torvalds lanzó su versión de Linux llamada 00.1, pero esta ni siquiera podía ser ejecutada, estaba escrita en lenguaje ensamblador y para poder ser utilizada se tenía que contar con acceso a algún sistema Minix para poder compilar esta primer versión, es por esto que no hubo anuncio alguno de la aparición de ella. Posteriormente, dio a conocer la versión oficial de Linux, llamada 0.02; llegado este punto, Linux podía ejecutar un intérprete de comandos Bash (Bourne Again Shell) y el compilador C de GNU llamado “gcc”, pero esto era prácticamente todo lo que podía realizar, y así paso por varias versiones antes de llegar a la 1.0 a finales del año 1993, este nombre, 1.0, es asignado al software que ha sido probado y está libre de errores. Además de todo lo anterior, Linux cumple con las normas oficiales de POSIX (Portable Operating System Interface) que es el Estándar Federal para el Procesamiento de Información. Esto quiere decir que cualquier aplicación de otras versiones de UNIX se podrá transportar con poca dificultad a Linux. Actualmente existen grandes distribuciones basadas en GNU/Linux y muchos usuarios las utilizan sin saber que son una versión modificada de GNU, como lo son Debian GNU/Linux y Red Hat Linux, las cuales compiten por tener el mejor software, ahora una instalación lleva sólo unos cuantos minutos, ya que estas potentes distribuciones soncapaces de detectar el hardware haciendo tan solo un par de preguntas al usuario. Es por esta y muchas otras razones que existe la cifra estimada de más de 20 millones de usuarios de GNU/Linux a nivel mundial. 14 1.4.1. Características GNU/Linux al ser compatible con Unix heredó características de él, a continuación se listan algunas de ellas: ? Multitareas. Es la habilidad de poder ejecutar diversos programas al mismo tiempo, sin obstaculizar la ejecución de cada uno. La computadora es capaz de realizar diversas tareas, una a la vez, en tiempos tan breves que somos incapaces de darnos cuenta de la demora. ? Multiusuario. Este sistema puede ser instalado es un servidor para conectar otros usuarios al mismo, y no es necesario comprar copias para darle servicio a los demás usuarios, además responde de manera simultanea a las solicitudes de varios usuarios que estén utilizando el servidor, y con la garantía de tener seguridad y privacidad entre ellos. ? Eficiente. Este sistema tiene una memoria que sirve de protección entre los procesos e impide que un programa, que llegue a estar en mal estado, afecte por completo el sistema operativo. ? Libre. Todo el código fuente se encuentra a la disposición de los usuarios, así que podemos modificar sin necesidad de un Service Pack para solucionar un problema. ? Soporte. Al adquirir una distribución GNU/Linux podemos disponer del soporte de la empresa que la distribuye, además de todos los tutoriales en línea que encontramos y demás información para poder solucionar problemas. ? Adaptación. Se puede personalizar tanto este sistema operativo que existen comunidades dedicadas a hacer sus propias distribuciones con fines didácticos. ? Sistema de archivos. GNU/Linux es capaz de operar con una variedad enorme de archivos, puede leerlos, operar entre ellos, etc. ? Multiplataforma. Este sistema operativo es soportado en plataformas que van desde una 386, 486, hasta Pentium4, AMD64, SPARC, RISC, etc. ? Red. Desde sus comienzos GNU/Linux fue desarrollado para trabajar en red, el protocolo principal es TCP/IP, pero además soporta una amplia variedad de protocolos como NFS, Telnet, SMTP, etc. También puede trabajar en red con máquinas que tengan otros sistemas operativos como Windows 98 o XP sin alguna clase de conflicto. ? Entorno gráfico. Se puede trabajar con o sin un entorno gráfico, el cual consume muchos recursos, y sí además contamos con poca memoria podemos trabajar sin entorno gráfico. Por el contrario si queremos usar un entorno de ventanas existen diversos gestores para ello, y entornos de escritorio como KDE o GNOME. 15 ? Estable. GNU/Linux es muy robusto, esto quiere decir que si un programa falla no va a interrumpir el trabajo de otros usuarios, simplemente se desbloquea el programa que cause conflicto y se puede seguir utilizando el sistema sin mayor problema. Esto le permite al sistema trabajar durante periodos largos y sin interrupción sin la necesidad de reiniciar. 1.5. Filosofía del software libre Actualmente las computadoras controlan cada vez más cosas, ellas se encuentran en cualquier lugar que podamos ver y hasta en los que no podemos ver, además son las encargadas de casi todo, desde cambiar la luz en los semáforos, hasta determinar si un archivo puede enviarse o no de una computadora a otra. Gracias al código, que es el conjunto de instrucciones con las cuales nos comunicamos con ellas, se pueden realizar este tipo de tareas y muchas otras. El software libre es el tipo de software que viene con el permiso para que cualquier persona pueda hacer uso de él, copiarlo y además distribuirlo, ya sea tal cual o hacerle modificaciones. Todo esto significa que el código fuente, con el cual fue hecho, está disponible para todo el mundo. El código escrito para ser software libre es el principal protagonista de este trabajo, ya que está sustentado en él, como lo es GNU/Linux, y derivados de él como PHP, Apache-www-server y MySQL; estas herramientas además de ser altamente estables, seguras y de gran desempeño, son libres, pero no libres simplemente en el sentido de darle un precio a dicho software -aunque sí reduce considerablemente el costo que se genera al comprar una licencia de software privativo o propietario-, el término “Libre” va más allá, es pensar en “libertad de expresión”. Software libre significa que podemos conocer el código con el cual fue hecho en la medida en que podamos ser capaces de modificarlo, es de esta manera que se convierte en libre. Podemos llamar software libre a aquel que tenga las siguientes libertades: • Si el usuario tiene la libertad de ejecutar el programa en cualquiera que sea su propósito. (Libertad 0). • Si hay libertad para modificar el programa y ajustarlo a sus necesidades, teniendo acceso al código fuente completo del sistema. (Libertad 1). • Si hay libertad de hacer y distribuir copias. (Libertad 2). • Si se tiene la libertad de distribuir versiones modificadas, de tal manera que todos podamos conocer las mejoras hechas al programa y poder utilizarlas. (Libertad 3). 16 “Por ejemplo, una «sociedad libre» está regulada por leyes. Pero hay límites que cualquier sociedad libre pone a esa regulación legal: ninguna sociedad que mantenga sus leyes en secreto podría llamarse, nunca, libre. Ningún gobierno que esconda sus normas a los gobernados podría incluirse, nunca, en nuestra tradición. El Derecho gobierna. Pero sólo, precisamente, cuando lo hace a la vista. Y el Derecho sólo está a la vista cuando sus términos pueden ser conocidos por los gobernados o por los agentes de los gobernados —abogados, parlamentos.” Software libre tiene varios significados, pero sólo uno de ellos es referente al precio, así es que es se considera libre en el sentido que se tiene un control susceptible de modificaciones y transparente, lo cual lo hace libre. Existe un movimiento de programadores dedicados a desarrollar software libre, basándose en el método de “copyleft”, que es implementado a través de una licencia GPL, el cual hace que un programa realizado para ser software libre se mantenga libre, esto quiere decir que si alguien toma el código, lo modifica y decide distribuirlo, está obligado a hacer libre el código de su software, esto se hace para poder garantizar que cualquier usuario pueda hacer uso de él. El mecanismo llamado “copyleft”4 es implementado a través de una licencia llamada GPL (Generic Public License) Licencia Pública General, está licencia fue creada a mediados de los años 80's por la Free Software Foundation y está orientada principalmente a proteger el uso, la modificación y la libre distribución de software, así, todo el software que se incluya bajo esta licencia está protegido de cualquier intento por quitar todas las libertades, antes mencionadas, a los usuarios, y quien implemente una nueva versión basada en software libre y llegue a ser publicada esta también deberá ser libre, ya que de lo contrario estará infringiendo el “copyright”. Existen también licencias tipo BSD de la distribución de software de Berkeley5, aunque esta licencia no hace nada de lo que hace la licencia GPL, además este tipo de licencias permiten el uso del código en software que no es libre. Nada de lo anterior impide que el software libre pueda ser comercializado, aunque siempre será más barato, además a final de cuentas acabará estando disponible gratuitamente, a través de libros o revistas que regalan el software y es perfectamente funcional. A diferencia del software privativo -software en que no se permite hacer modificaciones ni mucho menos hacer copias- como lo son empresas como Microsoft, Oracle, Sun, Apple, el software libre se empeña en crear buenas herramientas y no se basa solamente en la rentabilidad económica. El software libre busca que cada usuario encuentre solución a sus problemas, que cada tarea tenga su respectivo programa para resolverla, es poresto que podemos hacer modificaciones al código dependiendo de nuestras necesidades particulares. 4 La idea fundamental del copyleft es autorizar la ejecución del programa, su copia, modificación y distribución de versiones modificadas. 5 Berkeley Software Distribution, BSD. 17 Figura 1.2. Software libre & Microsoft 1.6. Distribuciones Existen diferentes tipos de versiones para cada componente de un sistema GNU/LINUX, como lo es el Kernel y las bibliotecas, casi siempre será suficiente tener una versión anterior a la más nueva para estar seguros de tener un sistema lo bastante estable y libre de errores. Lo que hacen los distribuidores de GNU/Linux es seleccionar versiones de cada componente que se necesite para cubrir las necesidades dependiendo de las tareas a realizar, con esto se quiere decir que cada componente no se escribe con el fin de pertenecer a alguna distribución en particular, es por eso que cada uno tiene su propia versión. Es así que una distribución forma un sistema operativo basado en GNU/Linux, como se mencionó antes existe una gran diversidad de ellas, pero las más comunes son las siguientes: • Slackware6 GNU/Linux • Red Hat7 GNU/Linux 6 http://www.slackware.com 7 http://www.redhat.com 18 • Debian8 GNU/Linux • Mandrake9 GNU/Linux • Knoppix10 GNU/Linux El tipo de plataforma es la arquitectura sobre la que vamos a instalar nuestra distribución de GNU/Linux, para esto va a ser necesario conocer el hardware de nuestra máquina, para así adquirir una distribución de acuerdo a ella y a nuestras necesidades. 1.7. Componentes de GNU/Linux 1.7.1. Hardware Es la capa interna, en ella se encuentra el conjunto de piezas físicas que contiene el equipo de cómputo. 1.7.2. Kernel El Kernel o núcleo interpreta las instrucciones que el usuario le da y las convierte en lenguaje máquina, posteriormente le da instrucciones al hardware acerca de lo que debe hacer con las mismas. Generalmente, el Kernel tiene dos versiones, una estable que está lista y libre de errores, lista para el desarrollo y que además ha sido probada por muchísimos usuarios, esta es la versión que podemos utilizar, también hay una en desarrollo, la cual utilizan los desarrolladores para hacer sus pruebas y ajustes, además de las mejoras que sean necesarias, es por esta razón que la versión en desarrollo es aún muy inestable. En GNU/Linux las versiones se enumeran de la siguiente manera: • X Indica que es la versión principal del sistema, esta versión presenta importantes cambios en la arquitectura, y hasta el momento existen la versión 1 y 2. 8 http://www.debian.org 19 9 http://www.linux-mandrake.com 10 http://www.knoppix.net • Y Indica que es una versión secundaria, si tiene en ella un número par nos indica que está todavía en producción, y si tiene un número impar nos indica que es de desarrollo, por lo tanto estable. • Z Indica que esta revisión tiene revisiones, significa que se le han quitado errores de programación o tiene ya algún parche. Por ejemplo una versión en desarrollo podría ser una 2.8.x. Y una en producción podría ser la 2.4.x. Respectivamente X.Y.Z para cada número de la versión. 1.7.3. Shell Cuando iniciamos una sesión, respondemos con nuestro nombre de usuario a Login, seguido de esto le damos una contraseña, si es correcta el sistema ejecuta un programa llamado Shell, el cual es el encargado de interpretar las órdenes que nosotros le indiquemos (usualmente por medio del teclado), una vez que haya interpretado la orden se la da al Kernel para que este la ejecute. Funciona entonces como una interfaz entre el Kernel y el usuario, nos proporciona herramientas para comunicarnos con el Kernel de sistema GNU/Linux. Básicamente sustituye los valores de las variables de Shell, por variables referenciadas. Después, a partir de los metacaracteres, genera una serie de nombres de archivo. Además, maneja las tuberías (pipeline) y la redirección de E/S, también hace sustituciones de órdenes y verifica si alguna se trata de un programa ejecutable o si es una orden interna de Shell. Shell ejecuta las órdenes haciendo una llamada al sistema, lo cual crea un proceso hijo (fork), después de esto sigue una llamada exe, la cual inicia el programa que requiere ejecutarse. Estas llamadas al sistema son el mecanismo de comunicación que tiene el hardware y los programas, en este caso Shell. Todas las llamadas al sistema son manejadas por el Kernel. El símbolo Shell se presenta en el sistema con el signo de dólar ($), seguido del cursor que es situado justamente al lado esperando alguna entrada. Ejemplo: login: Alma password: Last login: Tues Feb 2 14:22 from: 0 $_ 20 1.8. Instalación En nuestro caso daremos una breve lista de pasos para la instalación de GNU/LINUX Slackware11, este puede ejecutarse en equipos 386 o superiores, los requerimientos son mínimos para esta clase de instalación, debemos tener un mínimo de 3GB de espacio en disco duro y 16MB en memoria RAM, procesador 386 y la versión de la distribución. Una vez que tenemos nuestro CD-ROM podemos comenzar la instalación, debemos verificar que el BIOS del sistema cuenta con la opción para arrancar desde CD. Una vez que introducimos el CD aparecerá una pantalla de bienvenida, posteriormente en la parte inferior izquierda de la pantalla aparece el indicador boot:_ A continuación el primer paso es seleccionar la configuración para nuestro teclado, en nuestro caso por ser configuración en español seleccionamos: es.map. Después de esto toca registrarnos en el sistema como root, que es quien administra el sistema, posteriormente el sistema nos entrega un Shell y podemos seguir con la instalación, como se muestra en la figura 4: Figura 1.3. Esta figura muestra un shell continuar la instalación. 11 Esta distribución la podemos descargar desde su página oficial http://www.slackware.com 21 Posteriormente, debemos crear las particiones necesarias para nuestra instalación, el administrador deberá tener un esquema ya pensado, para darle mayor funcionalidad al sistema. En la mayoría de los casos las particiones más grandes son las que albergan los directorios /usr y /home. El tipo de instalación que llevaremos a cabo ha sido pensado para tener dos sistemas operativos, en este caso Windows, podemos consultar las particiones con el comando p este imprime en pantalla las particiones que tenga nuestro sistema. Con el comando n creamos una partición nueva, la cual será destinada para Slackware. Después de realizar las particiones se prosigue con la instalación. El sistema nos devuelve una vez más la pantalla para selección de teclado, simplemente nos desplazamos a la opción KEYMAP y le damos aceptar. Posteriormente, sólo resta elegir el tipo de instalación, será por medio de CD, así que elegimos el recurso para realizar este paso y le damos OK. Una vez que se ha detectado el CD, el asistente nos pide seleccionar los paquetes que vamos a instalar, por ejemplo el tipo de resolución y otros aspectos que dependen de las características especificas de cada computadora. Lo más importante es seleccionar el sistema que será visible en el menú de booteo del sistema operativo, comenzamos agregando el sistema Windows, sólo debemos elegirlo en el menú. El asistente preguntará el nombre que deseamos darle a esta partición, puede ser cualquiera, en este caso se quedara con el nombre de Windows, ahora debemos agregar el sistema Linux en el menú de configuración, para esto elegimos dicha opción y le damos OK. De igual manera nos pedirá el nombre que deseamos que se muestreen el menú de booteo. En caso de tener más sistemas, el procedimiento se lleva a cabo de igual manera. Lo que resta es especificar el tipo de dominio de nuestra red, en caso de contar con él, indicar la IP, la mascara de red, y el servidor de nombre de dominio o DNS y otros aspectos, por ejemplo, la zona horaria, el tipo de interfaz gráfica, KDE12 o GNOME13, posteriormente, debemos elegir una contraseña para el usuario root, el cual es el administrador. Y esto es todo, para finalizar debemos reiniciar nuestro equipo y el sistema extrae la charola del CD para retirar nuestro disco de instalación. 12 KDE (K Desktop Environment) es un entorno de escritorio gráfico. La 'K' originalmente representaba la palabra "Kool", pero esto más tarde se olvido. Ahora significa simplemente 'K' que es anterior a la 'L' de Linux en el alfabeto. Actualmente podemos encontrar el KDE en muchas distribuciones Linux. 13 GNOME es también un entorno de escritorio para sistemas operativos de tipo Unix bajo tecnología X Window, se encuentra disponible actualmente en más de 35 idiomas. Además forma parte del proyecto GNU. 22 Al reiniciar el equipo, el gestor de arranque LILO14, nos muestra los sistemas operativos con los que contamos, y de los cuales podemos elegir uno para trabajar, esto se muestra en la siguiente figura: Figura 1.4. Podemos elegir entre los dos sistemas operativos. ¡Listo! Tenemos un sistema dual. 1.8.1. Niveles de ejecución Podemos elegir diversos niveles de ejecución, esto es para indicar la rutina de inicio o apagado que deseamos tener en nuestro equipo, a continuación se muestra la lista de niveles, estos se encuentran en el archivo /etc/inittab: 23 14 Lilo (Linux Loador) almacena información sobre el Kernel o el sistema operativo, que se puede cargar en el MRB. El archivo de Lilo es /etc/lilo.conf, y se puede acceder a él mediante cualquier editor textos. Figura 1.5. Niveles de ejecución. Además de esto niveles de ejecución, también podemos apagar el sistema con varios comandos: poweroff halt shutdown reboot init telinit Estos nos permiten apagar o reiniciar el sistema15. 1.9. Aplicaciones y usuarios En esta capa se encuentran el usuario y todos los programas en conjunto con las aplicaciones que se le hayan agregado al sistema (manejadores de bases de datos, procesadores de texto, hojas de cálculo y los lenguajes de programación). A continuación 15 Una de las características más importantes de Linux es el método altamente configurable que se usa para el inicio del sistema operativo, así cómo la parada del sistema que finaliza los procesos de forma organizada y configurable, esto facilita muchos problemas. 24 se muestra un diagrama de los componentes del sistema completo, es la manera en que está conformado. Figura 1.6. Diagrama de componentes del sistema. 1.10. Sistema de archivos GNU/Linux tiene un sistema de archivos jerárquico y cuenta con una estructura de tipo archivo/directorio, lo que significa que está representado en forma de árbol. La parte superior de este árbol es el directorio de root y debajo de él están los directorios restantes. 1.10.1 Directorios /etc Generalmente contiene los archivos de configuración, pero el contenido de este directorio puede variar de un sistema a otro, por ejemplo en BSD estos programas están contenidos en /sbin. /boot Este contiene los archivos necesarios para que arranque el sistema. /dev Aquí se encuentran los archivos que representan los dispositivos hardware en el sistema. 25 /lib Este directorio contiene los archivos de bibliotecas compartidas por los programas de usuario. /bin Aquí se encuentran los programas de aplicaciones para el usuario. /sbin Contiene los programas que se utilizan para tareas administrativas principalmente. /home Contiene los directorios locales para los usuarios. /mnt Este archivo contiene los subdirectorios montados. 1.11. Cuentas de usuarios Se les llama cuenta de usuario o cuenta shell, todas ellas se incluyen en el archivo /etc/passwd, este archivo contiene la información de autenticación básica de los usuarios, como el nombre y su contraseña. El nombre de usuario es su identificador personal dentro del sistema y su contraseña es la clave única de acceso al sistema, esta sólo es conocida por el dueño de dicha cuenta. 1.12. Comandos básicos Un comando puede definirse como una instrucción directa al sistema operativo. Se pueden hacer muchas cosas con un mínimo de pulsaciones de teclas. La mayoría de los comandos se escriben con minúsculas, aunque existen excepciones. La sintaxis de los comandos es la siguiente: comando arg1 arg2… argn Como puede observarse primero se escribe el comando que se va a ejecutar, seguido de los argumentos (llamados también parámetros); estas palabras le indican a los comandos cómo deben actuar, el comando puede contener uno o varios argumentos. 26 $ rm doctos libros En este ejemplo doctos y libros son argumentos del comando rm. El comando rm sirve para eliminar archivos, en el caso de este ejemplo va a eliminar los archivos doctos y libros. Debemos tener en cuenta que la primer palabra escrita en la línea de comandos debe ser el comando que se quiere ejecutar y también que los argumentos van separados solamente por espacios y no por comas. Cuando es requerido ejecutar varios comandos en la misma línea, basta con separarlos con punto y coma (;). • cd En un momento dado solamente puede existir un directorio activo, el cual es llamado directorio de trabajo. Este comando nos permite desplazarnos de un directorio a otro. Ejemplo: $ cd/usr • chmod Nos permite hacer modificaciones en los permisos de un archivo. Para esto es necesario contar con privilegios de escritura sobre dicho archivo o directorio. Los permisos son de gran importancia para un administrador de sistemas, ya que si se configura de manera incorrecta pueden causar muchos problemas en su sistema. Los permisos tienen el control sobre quién tiene acceso de lectura, escritura y ejecución sobre los elementos en un sistema de archivos, directorios, etc. Este control es dividido en varios segmentos para ofrecer a cada usuario un acceso mejor refinado dependiendo de cada uno. Los permisos son divididos en tres diferentes bloques, en orden, estos bloques se refieren a los permisos para el propietario del archivo, los permisos para el grupo y los permisos para otras personas. Cada bloque de tres se estructura de igual manera, aunque el contenido pueda diferir en cada caso. Las partes individuales son bits, es así que pueden estar presentes o no. El primer bit determinará si la persona podrá o no leer el archivo, el segundo bit dirá si la persona puede o no escribir en el archivo y el tercero nos dirá si la persona podrá o no ejecutar el objeto. Si el bit está presente en los permisos, cada uno se representa con una letra: • r Permisos de lectura. 27 • w Permisos de escritura. • x Permisos para ejecución. Cuando el permiso no se encuentra presente se va a representar con un guión (-). A continuación se da un ejemplo de un binario en el cual el propietario cuenta con todos los permisos, lectura, escritura y ejecución, el grupo tendrá acceso simplemente de lectura y ejecución, y todos los demás usuarios sólo tendrán acceso de lectura: rwxr-xr-- • cp Copia archivos. • lp Sirve para imprimir los archivos en la impresora del sistema. • file El comando nos muestra el tipo de archivo. • find Con este comando podemos encontrar otros archivos. • mkdir Este comando nos permite crear nuevos directorios. • rmdir Nos permite borrar directorios. • ls Hace un listado del contenido del archivo. • pwd Nos muestra la ruta del directorioen donde estemos posicionados en el sistema de archivos. • rm Borra el archivo. • rm –r Borra un directorio completo. • vi Este comando nos sirve para editar los archivos. • mv Renombra un archivo. • hostname Nos dice cuál es el nombre del servidor. • uname Este comando nos da información sobre la distribución que estemos utilizando. • pwd Nos dice el directorio actual de trabajo, nos indica la ruta absoluta. • touch Nos permite crear archivos vacíos. 28 • mkdir Nos permite crear un nuevo directorio. 1.12.1. Opciones de comandos En la mayoría de los comandos se permiten opciones especificadas en la línea de comandos, que sirven para modificar la operación del comando, como se muestra en el siguiente ejemplo: $ ls –l /usr En este ejemplo podemos ver el comando ls el cuál nos sirve para listar los archivos de un directorio, con la opción –l nos muestra una representación en formato largo de los mismos archivos, mostrándonos más datos como el nombre y los detalles de archivo. Debemos observar que se utiliza un guión (-) para hacer diferencia en las opciones de los argumentos. –usr es el argumento que nos indica el archivo que se va a listar con ls. Las opciones se ponen después del comando y delante de los argumentos. A continuación se muestra el orden que deben llevar los comandos con opciones: 1.- Nombre del comando 2.- Opciones precedidas de un guión (-) 3.- El argumento o argumentos 1.12.2. Caracteres comodín La tarea de este tipo de caracteres es sustituir a otro u otros caracteres, puede ser porque no recordamos exactamente el nombre de algún archivo o simplemente por comodidad, otra razón puede ser el querer realizar alguna tarea con todos los archivos que tengan algo en común, por ejemplo utilizar todos aquellos que terminen con “.cpp”. Existe tres tipos distintos de comodines: *, ? y […]. Ejemplo: 29 $ ls *.cpp car.cpp kik.cpp bark.cpp En este caso utilizamos el comando ls para listar todos los archivos o directorios que tengan extensión “.cpp”, lo que quiere decir que al utilizar al comodín *, este sustituye el resto de caracteres anteriores a la extensión. Ejemplo: $ ls ejem? ejem1 ejem2 En el ejemplo anterior podemos observar que el carácter comodín de signo de interrogación ?, sólo puede sustituir a un carácter. Ejemplo: $ ls *[8-10] ejemplo.8 ejemplo.9 ejemplo.10 El ejemplo anterior nos muestra que este comando puede ser utilizado para sustituir caracteres específicos, como se puede ver en lo anterior, primeramente con el comando ls pedimos un listado de archivos que en su nombre finalice con un carácter comprendido en el rango 8-10, es decir, comprendido por 8, 9 y 10.Los caracteres comodines pueden ser utilizados en conjunto con cualquier comando. 1.12.3. Cambios de permisos por el método octal Primero se dividen los permisos en bloques de tres considerándolos de manera individual, cada bit de permiso se suma al valor de bloque: El permiso para lectura suma 4. El permiso para escritura suma 2. El permiso para ejecución suma 1. 30 Como en el ejemplo anterior, se considera cada bloque de manera separada, el primer bloque rwx será 4+2+1 ó 7, el segundo bloque r-x será 4+0+1 ó 5 y el último r—será 4+0+0 ó 4. De tal manera que si deseamos poner privilegios al propietario, permisos de lectura y ejecución para el grupo, y permisos de lectura para los demás usuarios se escribe de la siguiente manera: $ chmod16 751 archivo 1.13. Rutas absolutas y relativas 1.13.1. Ruta absoluta. Cuando conocemos el nombre exacto de la ruta de acceso completa a algún directorio, podemos cambiar a ese directorio con un solo comando, estos comandos inician con el símbolo /. Por ejemplo: cd /usr/alma/doctos Para cambiar al directorio de root escribimos: cd / (el símbolo / nos indica el punto más alto de toda la estructura de archivos). 1.13.2. Ruta relativa. Esta se utiliza cuándo queremos cambiar a un subdirectorio desde el directorio actual, aunque en este caso ya no se necesita comenzar con el símbolo /. Ejemplo: cd …/.. 31 16 El comando chmod nos permite manipular los permisos a nuestro gusto, consta de tres operadores; “+” para agregar permisos, “-“ para quitar permisos y “=” para asignar permisos. 1.14. Consultando ayuda del sistema Este sistema contiene un conjunto de manuales en línea con información de los comandos y todas sus opciones. Con el comando man17 podemos acceder a esa información: $ man ls También podemos acceder con el comando man-man para tener información sobre cómo utilizarlo. Las páginas de man se organizan en diferentes secciones sobre los comandos que pueden ejecutar los usuarios desde shell, como lo son comandos para administración de sistemas, formatos de archivos, llamadas a bibliotecas c, etc. Se utiliza el símbolo / para mover el cursor de manera rápida en la información deseada, por ejemplo si estamos en la página man del comando df, puede interesarnos conocer el tamaño de los bloques que tengan 512 byte por bloque, en lugar de repasar toda la página man podemos simplemente escribir lo siguiente: /512 Con este comando indicamos que el paginado debe avanzar hasta encontrar el string que buscamos: 512. Así, para encontrar el siguiente string simplemente escribimos /. Existen comandos como apropos, whatis e info que nos sirven de ayuda, mostrando también información relacionada con el sistema. 1.15. Trabajo con archivos 1.15.1 Cat Existe una manera estándar para presentar uno o más archivos y es mediante el comando cat. cat nombrearchivo1 nombrearchivo2… 32 17 Este el primer comando Unix que debemos conocer, man (abreviatura de manual) nos muestra documentación en línea sobre cualquier comando en particular, por ejemplo man cd muestra documentación del comando cd para cambiar de directorio. cat es un sinónimo de presentar (display), con la opción –n se numeran todas las líneas, incluidas las que estén en blanco. 1.15.2. More Con este comando podemos indicar más de un archivo en el comando, además nos proporciona una manera de retroceder dentro de las páginas. Ejemplo: more archivo1 archivo2 1.15.3. Head Con el comando head podemos presentar sólo las primeras líneas de un archivo. Ejemplo: head nombrearchivo Normalmente head presenta un máximo de 10 líneas. 1.15.4. Pico Este programa nos permite editar archivos de texto, y nos presenta un menú en la parte inferior que sirve de ayuda para manipular este editor. 1.16. Redireccionamiento Existen una entrada y una salida estándar en GNU/Linux, el intérprete de comandos configurará estos archivos para que apunten al teclado, en el caso de stdin o al monitor en el caso de stdout. Existe un gran número de comandos que utilizan la entrada estándar para tomar sus datos y la salida estándar para mostrarlos en pantalla. 1.16.1 Redireccionamiento de salida El intérprete de comandos nos permite redireccionar la salida estándar hacia un fichero utilizando el símbolo >. Ejemplo: 33 $ ls > lista Manda la salida del comando a un archivo con nombre “lista”, así el resultado no se imprime en la pantalla sino que puede verse en el archivo que se le indicó. 1.16.2. Redireccionamiento de entrada Utilizando el carácter menor que < podemos redireccionar un archivo hacia un programa: $ cat < lista De esta manera el comando manda el archivo llamado “lista” hacia el programa cat y lo muestra en pantalla. 1.17. Filtros Los filtros retienen las cosas que no queremos ver y deja pasar las que sí queremos, un ejemplo de ello es el filtro grep, el cual suprime las líneas que no queremos y deja pasar solamente las que tienen el patrónque se haya indicado. 1.18. Comando básicos de red Cuando entramos al sistema, existen comandos que pueden informarnos acerca de otros usuarios, podemos ver los que están en un momento dado en el sistema, a qué hora se conectaron y qué hacen, utilizando el comando who, este nos muestra un listado de los usuarios conectados. Otro comando que podemos utilizar es finger, este nos muestra el nombre del registro, el nombre completo de los usuarios, los tiempos de espera del usuario y la hora de entrada del usuario. Su sintaxis es la siguiente: finger nombre_usuario 34 1.18.1. Mail Este comando nos permite enviar un correo electrónico a un usuario de manera sencilla y rápida, simplemente escribimos lo siguiente: mail usuario-destino 1.18.2. Write Este comando nos permite comunicarnos, unos con otros usuarios, de manera directa a través de la terminal. write nombre-usuario Con el comando mesg podemos habilitar o inhabilitar la capacidad de los usuarios para acceder a su terminal. Por ejemplo: $ mesg n Significa que no está habilitada la opción para recibir mensajes. $ mesg y El anterior indica que sí está habilitada la opción para recibir mensajes. 1.19. Procesos Un proceso18 es un programa en ejecución, por ejemplo cada uno de los comandos antes mencionados son programas escritos para realizar alguna función. Con el comando ps podemos ver un informe completo del estado del sistema, con ps u podemos ver los procesos que pertenecen al usuario actual, con ps –fea podemos ver los procesos que están ejecutándose en el sistema pero en formato largo. 35 18 El número máximo de procesos que pueden ser creados en Linux está limitado solo por la cantidad de memoria física presente. Un proceso tiene las siguientes propiedades: • Un identificador de procesos (process ID) • Un identificador de procesos padre (PPID), este número nos indica cuál fue el proceso que creó al proceso en cuestión. • Un estado. En algunos momentos los procesos continúan existiendo en el sistema, pero pueden estar sin hacer nada, podrán estar esperando que se les envíe una señal para volverse nuevamente activo, básicamente pueden estar en estado dormido (S) o en ejecución (R), así como estado zombie (Z) corriendo de manera independiente. • Un dueño. Este es generalmente la persona que lo ejecuta. • Una prioridad. Esta define la importancia que tiene dicho proceso. 1.20. Respaldos19 1.20.1 Tar Este comando nos permite almacenar y restaurar archivos, básicamente sirve para hacer copias de seguridad. Las opciones para tar son las siguientes: • c Crea una copia de seguridad. • v Nos muestra todos los archivos copiados. • f Nos permite especificar el archivo o dispositivo en el cual se va a copiar. Ejemplo: tar (opciones) arch.ar arch 36 19 Los respaldos se pueden clasificar en copias de información (Backups) y en duplicados de información (Implementación RAID). 1.20.2. Gzip Nos permite comprimir un archivo, lo cual significa que va a recodificar el contenido para hacer que ocupe el menor espacio posible y devolverlo a su tamaño original cuando se requiera. Existen diferentes niveles de compresión disponibles que van del 1 al 9. Utilizamos 1 cuando queremos una compresión rápida, hasta llegar a 9 si lo que nos interesa es un archivo lo más pequeño posible. Para descomprimir un archivo utilizamos uncompress20, si el archivo que vamos a descomprimir tiene la terminación .z escribimos gunzip. Si el archivo a descomprimir termina con .gz tecleamos Intro hasta que se indique, los archivos que vamos a descomprimir deberán terminar en .z o .gz, al descomprimirlos se suprimen estas terminaciones al nombre del archivo. 1.21. FTP (File transfer protocol) FTP es un programa que nos permite transferir archivos entre dos sistemas a través de Internet, se puede utilizar en cualquier sistema que admita el protocolo FTP, no tiene que ser GNU/LINUX o UNIX, lo cual hace de este programa uno de los más utilizados, aunque no es muy confiable porque deja pasar información en texto claro. Es una aplicación interactiva, por lo cual es necesario que el usuario introduzca información, primero hay que ejecutarlo y después de hacerlo se accede a la línea de comandos del cliente de ftp donde se introduce alguno de los comandos que hay disponibles, los cuales listo a continuación: • close. Este finaliza la conexión ftp con el sistema remoto, pero no cierra el cliente ftp. • open. Este abre la conexión ftp en el sistema remoto que se indica. • ascii. Utiliza una transferencia de archivos en modo ascii. • binary. Utiliza una transferencia de archivos en modo binario. • cd. Hace un cambio de directorio en el sistema remoto. 37 20 Los comandos compress/uncompress nos sirven para la compresión de archivos .z • get. Nos permite descargar archivos. • help. Nos muestra una lista de comandos que son válidos. • put. Nos permite transferir el archivo al sistema remoto. 38 1.22. Resumen general capítulo I Como pudimos ver, GNU/Linux fue creado gracias al trabajo en conjunto de mucha gente preocupada por crear un sistema que pudiera dar solución real a cada uno de los problemas presentados por los usuarios. Además de ser libre, pero no en el sentido de poner precio, libre en el sentido de tener a la mano el código para poder hacer modificaciones de acuerdo a sus necesidades. Mucha gente colaboró entre sí para poder crear este sistema operativo tan completo y robusto que es ahora. Aún en estos días, muchas personas continúan colaborando con este proyecto ya que cada día surgen más necesidades por resolver. En este primer capitulo además de la historia de GNU/Linux y lo que es el software libre, así como el significado de la filosofía de software libre. Se dio a conocer lo que es el Kernel Linux y sus principales características, sus principales distribuciones y componentes, además de cómo está conformado un sistema de archivos. Hicimos una instalación tradicional, mediante CD, particiones hechas pensando en tener dos sistemas corriendo en una misma máquina, en este caso GNU/Linux Slackware y Windows. También se analizó qué es una cuenta de usuario y comandos básicos para acceder al sistema, cómo obtener ayuda del sistema, lo que son los comandos básicos de red, lo que es un proceso, también se mostraron comandos para realizar respaldos, y por último el programa FTP y para qué sirve. 39 CAPÍTULO II EDITORES PARA CREAR PÁGINAS WEB, SERVIDORES DE WWW Y PROGRAMACIÓN CON PHP 40 2.1. Introducción La red mundial de redes de computadoras que comparte información a través de un conjunto de protocolos llamada Internet, ha sido transformada de manera impresionante, comenzó como un experimento a finales de los años setenta, el objetivo fue construir una red de computadoras que a pesar de poder perder varias máquinas esto no afectara la capacidad de comunicación entre las computadoras restantes. La defensa de los Estados Unidos estaba interesada en construir redes que pudieran hacer frente a un ataque nuclear, de ser esto necesario, es por ello que los fondos provenían de aquí. Este experimento resulto un éxito, aunque tenía limitaciones, con la aparición de los módems de alta velocidad algunas personas y organizaciones comenzaron a conectarse a la Internet, a pesar de esto, Internet arrancó totalmente aproximadamente en el año 1993. Los miembros de la Internet originaltenían la filosofía de un intercambio libre y gratuito, así que pusieron a disposición de usuarios inexpertos documentos electrónicos y software de manera gratuita. Al principio, la información sólo era texto ASCII1 y sobre títulos académicos, nada que ver con todo lo que encontramos ahora, fue por esto que un grupo de científicos del Laboratorio Europeo de física de partículas (CERN) hicieron un lenguaje de escritura y un sistema de distribución hecho para compartir y crear documentos electrónicos con capacidad multimedia, usando como medio la Internet. Fue así como nació el Lenguaje de marcado de hipertexto (HTML), el software para navegación y la World Wide Web (WWW). HTML hace posible la unificación entre imágenes, texto y sonido, con los sistemas de la World Wide Web, además de habilitar el enlace de hipertexto con el cual se conectaban de manera automática los documentos en cualquier parte del mundo, su software hace posible acceder a recursos de Internet como archivos FTP2. Con la Internet es posible el gran intercambio de información y de comercio internacional, además de ser el lugar predilecto para muchos como medio de interacción social. Un servidor Web puede definirse como un programa que está corriendo sobre nuestro servidor, este programa escucha las peticiones que son enviadas por medio de HTTP, posteriormente las atiende, dependiendo del tipo de petición que se haya hecho, el servidor buscará en una página Web lo que se requiera, o bien va a ejecutar un programa en el servidor. Ya sea de un modo o de otro, lo que hace es devolver el resultado HTML al navegador o al cliente que haya realizado la petición. 1 ASCII es el juego de caracteres por defecto en Linux e incluso Windows lo respeta en cierta medida. 2 Para el manejo de archivos FTP contamos con comandos, los básicos son: Open que abre una sesión con el ftp seleccionado, Close a su vez cierra la sesión, Get sirve para bajar los ficheros del servidor remoto de FTP. 41 Básicamente lo que hace un servidor Web es cargar el archivo y enviarlo a través de la red para hacerlo llegar al usuario, en este intercambio tiene lugar el navegador y el servidor, los cuales se comunican a través de HTTP. Para hacer más productiva la capacidad de entrega de páginas HTML podemos hacer uso de diversas tecnologías como lo son los scripts hechos con lenguajes como PHP, estos se incrustan en el código HTML, de los cuales hablaremos un poco en este capítulo, además de cuestiones de seguridad SSL. En este trabajo veremos lo que es el servidor Web Apache, y por qué es tan utilizado, existen diversas opciones además de este servidor, pero Apache ha demostrado ser bastante robusto y de alta seguridad, además de que puede ser configurable en diferentes entornos de trabajo y se encuentra disponible en varias plataformas, este incluye el código fuente del servidor y lo más importante es que es gratuito. ☺ Es, por esta y otras razones, actualmente el servidor Apache uno de los más utilizados, además es muy fácil de obtener, podemos descargarlo a través de su sitio oficial: http:www.apache.org. El hecho de instalar un servidor Web en nuestra computadora nos permitirá montar nuestra propia página Web sin la necesidad de adquirir un hosting (alojamiento para páginas web), y además podremos probar los sistemas que estemos desarrollando de manera local, la instalación de Apache es bastante sencilla, está disponible tanto para GNU/Linux como para Windows. Cualquiera de las dos versiones es muy sencilla de instalar. En la siguiente figura se muestra trabaja un servidor Web. Figura 1.1. Servidor web. 42 En este capítulo también abordaremos otra parte que resulta muy importante a la hora de hacer páginas web con contenido dinámico, esto se logra con PHP, este es un lenguaje de programación, su nombre originalmente viene de PHP Tools o Personal Home Page Tools, y se conoce a PHP como el acrónimo de Hipertext Preprocessor, su principal función, es como antes mencionamos, proporcionar características dinámicas a una página web. PHP es un lenguaje de programación gratuito y es además independiente de la plataforma que estemos utilizando, es un lenguaje muy rápido y contiene una librería muy amplia de funciones, así como documentación suficiente para llevar a cabo diversas tareas, otra característica importante es el hecho de poder combinarse con bases de datos creadas con MySQL. PHP también tiene como característica principal el hecho de poder trabajar en conjunto con HTML. La creación de PHP está muy ligada también al proyecto GNU, al igual que GNU/Linux su desarrollo depende de muchos programadores alrededor de todo el mundo. 43 2.2. World Wide Web World Wide Web es un sistema de información global que posee las siguientes características: es dinámico, interactivo, gráfico, distribuido, basado en hipertexto, contiene plataforma de enlaces cruzados y se ejecuta desde Internet. El estar basado en hipertexto significa que en lugar de leer un texto siguiendo una estructura lineal y rápida, será posible ir de un punto a otro de manera muy sencilla, para obtener más información y regresar de nuevo al punto de inicio, es decir, tener libertad para desplazarnos como mejor nos convenga. Otra razón por la cual es tan popular, es su capacidad de presentar en pantalla texto y gráficos a la vez, esto nos proporciona además sonido y video, todo incorporado es una interfaz navegable de manera sencilla, sólo tenemos que pasar de una página a otra o de un vínculo a otro en diferentes sitios o servidores. Lo único indispensable es contar con un acceso a Internet, y contar con una aplicación comúnmente conocida como browser o visualizador (Mozilla3, Firefox4, Nestscape5, Internet Explorer, etc.), ya que independientemente del sistema operativo con el cual trabajemos la WWW no está limitada a un tipo en particular. La mayor parte de las aplicaciones hechas para Internet comenzaron a funcionar en sistemas UNIX. La información transmitida ocupa una inmensa cantidad de espacio, sobre todo tratándose de multimedia como imágenes, sonido y video, es por esto que es necesario contar con suficiente espacio en disco duro. WWW tiene gran éxito debido a que tenemos acceso a muchos sitios en los cuales la información se encuentra distribuida, cada sitio cuenta con suficiente espacio para almacenar la información que publica. Como usuarios, al visitar algún sitio y posteriormente acceder a otro, recuperamos el espacio que haya sido ocupado en disco duro. Además el contenido es dinámico, es fácil hacer actualizaciones a la información, es por esto que cuando consultamos algo podemos estar seguros de que la información siempre es actual. El protocolo que se utiliza para manejar la información es a través de HTTP (Protocolo de transferencia de hipertexto) mediante Internet. Este protocolo es sencillo y permite transferir de manera rápida y eficaz documentos de hipertexto en Internet, a través de diversos servidores. Existen además otras formas de distribuir la información, por ejemplo, a través de FTP, Telnet, correo electrónico, etc. 3 http://www.mozilla.org 4 http://www.firefox.org 5 http://www.netscape.com 44 Ninguna entidad podría llamarse dueña del WWW, aunque el CERN6 que fue el lugar donde tuvo inicio es quien soporta y define los lenguajes y protocolos que lo conforman. Así, es que el CERN es lo más aproximado a un dueño, ya que establece estándares y reglas dentro de él. Para la publicación de documentos Web necesitamos un servidor que provea los documentos, así como medios de información al visualizador que haga una solicitud.Cada vez que alguien quiera tener acceso a la información el visualizador llama al servidor y este le hace llegar al documento requerido. Un servidor Web usa el protocolo HTTP para esto. Cuando un usuario quiere tener acceso a la información, debe indicar al servidor hacia donde dirigirse mediante un URL, el cual es un apuntador que va hacia cierta parte de la información localizada en la Web, ya sea un documento Web, un archivo FTP, o un correo electrónico. El URL es un método para localizar la información y poder acceder a ella mediante el visualizador, este contiene datos que sirven de referencia para llegar a la información como lo es el tipo de protocolo (HTTP, FTP, etc), el nombre del equipo anfitrión y el directorio donde se aloje dicho archivo. 2.3. Html HTML son las siglas de HyperText Markup Language o Lenguaje marcador de hipertexto, el cual está basado en el SGML Standard Generalizad Markup Language o Lenguaje marcador estándar generalizado. HTML no es un lenguaje para dar simplemente formato a las páginas, este se concentra en el contenido del documento, sirve para delinearlos. Partiendo de que los documentos tienen varios elementos en común, como lo son título, párrafos o listas, podemos etiquetar estos elementos y llamarlos con nombres apropiados a cada uno. Una vez etiquetados podemos crear herramientas que elaboren de manera automática tareas como un índice o una nota al pie de página. Las etiquetas de HTML, nos sirven para definir entonces nuestros documentos, pero no son las encargadas de definir la página en sí, como lo hacen las hojas de estilo o las plantillas. No es necesario leer un libro entero sobre HTML para poder escribir un documento, ya que es sencillo de escribir, leer y comprender. 45 6 CERN es el Consejo Europeo para la Investigación Nuclear (Conseil Européen pour la Recherche Nucléaire, en francés). 2.4. Editores Para crear un documento HTML podemos utilizar cualquier editor de textos, podemos usar varios muy poderosos como Emacs, el cual provee un ambiente gráfico. En este trabajo se hablará del clásico que es el editor vi. Cabe mencionar que existen más alternativas que facilitan la creación de páginas Web, editores como HotDog (Win) que ayudan a crear el código sin tener que saber absolutamente nada de HTML, ya que tienen el código prefabricado e incluyen plantillas, lo hacen como si se tratara de un dibujo, sólo es necesario arrastrar y pegar botones, otro ejemplo de esta clase de editores es el llamado WYSIWYG (What You See Is What You Get, lo que ves es lo que obtienes) o Macromedia Dreamweaver. 2.4.1. vi Este es un editor de textos de pantalla completa que puede manejar el texto entero de un archivo, está disponible en todas las distribuciones GNU/Linux y UNIX, y puede utilizarse en cualquier terminal y utiliza pocos recursos. También se utiliza mucho para administrar el sistema y para programar, ya que la mayoría de las configuraciones se hacen a través de la edición de los archivos. En vi7 existen tres estados: • Modo comando: con las teclas podemos desplazar el cursor, ejecutar los comandos para el manejo de nuestro texto y salir del editor. (Este es el estado inicial) • Modo texto o modo de inserción: con las teclas se ingresan caracteres en el texto. • Modo de línea: con las teclas podemos escribir comandos en la última línea ubicada al final de la pantalla. 2.5. Comandos básicos • vi Ejecutando el comando vi nom_arch estamos indicando a nuestra computadora que queremos abrir el archivo nomb_arch en modo comando para su edición. • a Con este comando podemos agregar texto a la derecha del cursor. 7 Es un editor de texto originalmente escrito por Bill Joy en 1976, este tomo como base a los editores ed y ex, los cuales son deficientes para Unix, aunque existe actualmente una versión mejorada de vi llamada vim, vi se encuentra disponible en casi todo sistema tipo Unix, así que conocer su funcionamiento resulta imprescindible. 46 • i Con este comando agregamos texto a la izquierda del cursor. • x Este borra el carácter que este debajo del cursor. • dd Este comando borra una línea entera. • :w Este comando salva el archivo con el que estamos trabajando y lo graba en disco. • :q Con este comando salimos del editor sin salvar. • Y ó yy Copia una línea. • P Pega antes del cursor. • yw Copia una palabra • c Reemplaza caracteres. • J Este comando une dos líneas en una sola. • U Con este comando podemos deshacer la última acción que hayamos realizado. • ESC Volvemos al modo comando. 2.6. Documento básico en Html Ahora que sabemos cómo utilizar el editor de textos vi podemos hablar de HTML8, este consta de una serie de etiquetas que indican a nuestro navegador la forma en que va a presentar los textos o imágenes. Podemos utilizar el editor de textos para crear un documento HTML, al terminar de escribir el código, este se guardará sólo como un archivo con extensión .html o .htm, podemos nombrarlo index.html, indice.html, etc, aunque cualquier nombre es válido. Posteriormente se puede ver en el visualizador o browser. La estructura básica de un documento HTML contiene las siguientes etiquetas: 8 Acrónimo inglés de HyperText Markup Language (lenguaje de marcas hipertextuales) 47 <html> Nos indica el inicio del documento. <head> Nos indica el inicio de la cabecera. <title> Indica el inicio de un titulo para el docto. <body> Aquí inicia el cuerpo del documento. </html> Indica el final del documento. </head> Indica el final de la cabecera. </title> Esta indica el final de un titulo. </body> Esta etiqueta indica el final del cuerpo. Figura 2.2. Etiquetas básicas en un documento Html. A continuación podemos ver el código de una página sencilla escrita con HTML y posteriormente su resultado en la Figura11: <html> <head> <title>Ejemplo</title> body { background-image: url(); background-color: #6699FF; } .style2 {font-size: 60px} .style3 {font-size: 18px} --> </style> </head> <body> <div align="center" class="style1"> <p> </p> <p> </p> <p> </p> <p class="style2">Este es un ejemplo sencillo de HTML </p> <p class="style3">Alma Delia Basilio Guzmán </p> </div> </body> </html> 48 Figura 2.3. Ejemplo de una página con Html. En el ejemplo anterior lo primero que se hizo fue especificar el tipo de archivo con el que estamos trabajando, el cual es un documento HTML, para esto usamos las etiquetas <html> y </html> al inicio y fin del documento. Entre este par de etiquetas van el cuerpo y la cabecera del documento. La cabecera se delimita con las etiquetas <head> y </head>, aquí se encuentra contenida la información que va a afectar a la página completa, aunque en un principio sólo se delimita al título, como se muestra a continuación: <head> <title>Ejemplo</title> body { background-image: url(); background-color: #6699FF; } .style2 {font-size: 60px} .style3 {font-size: 18px} --> 49 </style> </head> Es importante aclarar que nada de lo que está escrito en la cabecera será mostrado en el navegador, esto le corresponde a la etiqueta <body>, en su interior va contenido el código con los elementos que deseamos mostrar, como texto, imágenes, tablas, etc 2.7. Párrafos en Html Llamamos párrafo a un conjunto de frases, para hacer uso utilizaremos la etiqueta <p>, esta se sitúa al inicio y final de uno. Ejemplo: <p class="style2">Este es un ejemplo sencillo de HTML </p> <p class="style3">Alma Delia Basilio Guzmán </p> Otra opción es modificar la apariencia de nuestros párrafos,
Compartir