Download CEC-EPN - Pcecuador.com
Document related concepts
Transcript
CENTRO DE EDUCACION CONTINUA POLITECNICA NACIONAL ADMINISTRACION DE LINUX I Instructor Ing. Segundo Arévalo Calderón 2013 “ADMINISTRACION DE LINUX I” INDICE INDICE ................................................................................................................................................. 2 INTRODUCCION ................................................................................................................................ 5 1. INTRODUCCION AL SISTEMA OPERATIVO LINUX .................................................... 11 1.1. 1.1.1. Cuántos Linux Existen ........................................................................................................ 12 1.1.2. Versiones de Linux o Cuántas versiones de Linux existen.................................................. 12 1.1.3. Distribuciones de Linux o cuántas distribuciones de Linux existen ................................... 13 1.2. HISTORIA DE LINUX Y EL SOFTWARE LIBRE............................................................................. 20 1.3. VENTAJAS DEL SOFTWARE LIBRE ............................................................................................. 20 1.4. COMPARACIÓN ENTRE SOFTWARE LIBRE Y SOFTWARE PROPIETARIO ....................................... 20 1.5. DISTRIBUCIONES DE LINUX ...................................................................................................... 20 1.5.1. ¿Qué es una distribución GNU/Linux? .............................................................................. 20 1.5.2. ¿Qué es software libre? ...................................................................................................... 22 1.5.3. ¿Qué es software comercial?.............................................................................................. 22 1.6. 1.6.1. 1.7. 2. TÉRMINOS RELACIONADOS CON LINUX ................................................................................... 11 EL KERNEL DE LINUX. .............................................................................................................. 25 El sistema de numeración del kernel .................................................................................. 26 DISTRIBUCIONES GNU/LINUX ................................................................................................. 29 1.7.1. Características básicas de las distribuciones ..................................................................... 29 1.7.2. Algunas distribuiciones de Linux/GNU .............................................................................. 33 1.7.3. Clasificación de las distribuciones ..................................................................................... 35 1.7.4. El árbol de directorio de Linux .......................................................................................... 44 COMANDOS BASICOS E INSTALACION DEL SISTEMA OPERATIVO..................... 55 2.1. COMANDOS .............................................................................................................................. 55 2.1.1. Comandos Basicos.............................................................................................................. 55 2.1.2. Comandos para Listar archivos y directorios .................................................................... 58 2.1.3. Comandos para crear archivos y directorios ..................................................................... 65 2.1.4. Copiar, Mover y Borrar archivos y directorios .................................................................. 66 2.1.5. Ver Archivos Cat ................................................................................................................ 69 2.1.6. Comandos Usados con Pipe (|) .......................................................................................... 70 2.1.7. Uso de Paginadores............................................................................................................ 73 2.1.8. Editor Vi ............................................................................................................................. 75 2.1.9. Los modos del Vi................................................................................................................. 76 2.1.10. Insertar, borrar, editar y moverse en el texto ................................................................ 76 2.1.11. Otros comandos para moverse en el texto ..................................................................... 79 2.1.12. Edicion de un archivo .................................................................................................... 79 2.1.13. Ejecución de Comandos................................................................................................. 85 2.1.14. Otro editor ..................................................................................................................... 85 2.2. 3. COMO REALIZAR UN CORRECTO PARTICIONAMIENTO EN LINUX............................................... 90 2.2.1. Que es particionar un disco ................................................................................................ 90 2.2.2. /usr................................................................................................................................. 93 2.2.3. /var ..................................................................................................................................... 93 2.3. INSTALACION DE CENTOS ....................................................................................................... 94 2.4. ARRANCANDO LA MAQUINA..................................................................................................... 94 2.4.1. GRUB .......................................................................................................................... 112 2.4.2. RED ............................................................................................................................. 112 2.4.3. Zona Horaria .............................................................................................................. 114 2.4.4. Clave de root.............................................................................................................. 115 2.4.5. Selección de Paquetes. ..................................................................................................... 115 2.4.6. Listos para instalar ........................................................................................................... 117 2.4.7. Arranque por primera vez ........................................................................................ 121 GESTION DE USUARIOS Y PERMISOS........................................................................... 128 3.1. USUARIOS Y GRUPOS EN LINUX .............................................................................................. 128 3.1.1. Proceso que se sigue para crear un usuario ............................................................. 130 3.1.2. Comando para realizar los pasos anteriores. ............................................................ 130 3.1.3. Como borrar usuarios .................................................................................................... 132 3.1.4. 4. 3.2. SUBTITUTE USER (SU) ........................................................................................................... 133 3.3. SUDO – SUPER USER DO .................................................................................................... 135 3.3.1. Formato del archivo de sudores .................................................................................. 136 3.3.2. Dar accerso total a usuarios específicos: .................................................................. 137 3.3.3. Dar acceso a comandos especificos .......................................................................... 138 3.3.4. Manejo de quotas .......................................................................................................... 139 3.3.5. Manejo de permisos ...................................................................................................... 143 GESTION DE UNIDADES DE ALMACENAMIENTO Y SISTEMAS DE ARCHIVOS.154 4.1. 5. MONTAJE Y DESMONTAJE DE SISTEMAS DE ARCHIVOS ........................................ 158 4.1.2. SISTEMAS DE ARCHIVOS DE LINUX ........................................................................... 162 4.1.3. SISTEMA DE ARCHIVOS ext2 ........................................................................................ 167 AUTOMATIZACION DE TAREAS..................................................................................... 172 CRONTAB ............................................................................................................................... 172 5.1.1. El fichero /etc/crontab ...................................................................................................... 173 5.1.2. El comando crontab.......................................................................................................... 176 5.1.3. Los ficheros /etc/cron.allow y /etc/cron.daily ................................................................... 177 5.2. 5.2.1. 5.3. 5.3.1. 7. UBICACIÓN DE ARCHIVOS Y DIRECTORIOS ............................................................... 154 4.1.1. 5.1. 6. Como cambiar el Shell predeterminado ..................................................................... 132 ANACRON .............................................................................................................................. 178 El fichero /etc/anacrontab ................................................................................................ 179 AT .......................................................................................................................................... 180 Los ficheros /etc/at.allow y /etc/at.deny............................................................................ 181 GESTION DE PROCESOS ................................................................................................... 184 6.1. EL COMANDO KILL ................................................................................................................. 184 6.2. EL COMANDO TOP .................................................................................................................. 187 SISTEMA DE INICIO Y FINALIZACION DEL SISTEMA ............................................. 189 7.1. NIVELES DE EJECUCIÓN DE SYSV INIT ................................................................................... 189 7.2. NIVELES DE EJECUCIÓN .......................................................................................................... 189 INTRODUCCION Linux es un sistema operativo gratuito y de libre distribución inspirado en el sistema Unix, escrito por Linus Torvalds con la ayuda de miles de programadores en Internet. Una de los primeros conceptos que aparecen al iniciarse en Linux es el concepto de distribución. Una distribución es un agrupamiento del núcleo del sistema operativo Linux (la parte desarrollada por Linus Torvalds) y otra serie de aplicaciones de uso general o no tan general. En principio las empresas que desarrollan las distribuciones de Linux están en su derecho al cobrar una cierta cantidad por el software que ofrecen, aunque en la mayor parte de las ocasiones se pueden conseguir estas distribuciones desde Internet, de revistas o de amigos, siendo todas estas formas gratuitas y legales. Las distribuciones más conocidas son CentOS, RedHat, Debian, Slackware, SuSE y Corel Linux, todas ellas incluyen el software más reciente y empleado lo cual incluye compiladores de C/C++, editores de texto, juegos, programas para el acceso a Internet, así como el entorno gráfico de Linux: X Window. Algunas pantallas de distintas distribuciones Pantalla de Linux Pantalla de CENTOS 5.4 (sin el fondo del escritorio) Pantalla de Red Hat 5 Se puede apreciar que CENTOS y Red Hat son idénticos, excepto en los colores (y en el pago por actualización, que en CENTOS es gratuito) Como se puede apreciar en las pantallas capturadas, se recomienda instalar el sistema en el idioma nativo del alumno (en este caso, español). Linux permite cambiar dinámicamente el idioma, así que si más tarde desea mirar los mensajes en inglés, o francés o cualquier otro, solo debe usar el programa system-config-language Otro problema frecuente es la distribución del teclado. Utilice el programa systemconfig-keyboard para que configure el teclado a su exacta configuración. Otro problema común es la resolución de pantalla. Use el programa system-configdisplay para que primero configure la tarjeta de video, reinicie el ambiente gráfico, configure la resolución de pantalla y vuelva a reiniciar el ambiente gráfico. El ambiente gráfico se reinicia con la combinación de teclas CONTROL-ALT-BACKSPACE (al mismo tiempo). Y finalmente, otro problema frecuente es la mala configuración de la zona horaria y el reloj UTC. Use el programa system-config-time. Recuerde que Guayaquil Ecuador NO utiliza ajuste automático de tiempo de verano (desmarque la casilla UTC), caso contrario, su reloj se atrasará o adelantará una hora y Ud. no sabrá por qué. O peor, su reloj estará con 5 o más horas desincronizado, porque no usó la configuración regional adecuada. Y si pregunta cómo se llaman estos programas en otras distribuciones, recuerde lo que dijimos: CENTOS y Red Hat son ideales para administrar servidores, usuarios, redes. LAS IDEAS EXPUESTAS EN ESTE TRABAJO SON DE EXCLUSIVIDAD DEL AUTOR I. INTRODUCCIÓN AL SISTEMA OPERATIVO INTRODUCCION AL SISTEMA OPERATIVO 1. 11 INTRODUCCION AL SISTEMA OPERATIVO LINUX 1.1. Términos Relacionados con Linux En el mundo de Linux encontraremos varios términos que deben quedar claros desde el comienzo para entender adecuadamente el funcionamiento y la filosofía de Linux. A pesar de que Linux nació en 1991, sigue una tradición de cuatro décadas (iniciada con Unix allá por 1970) y tiene cierta lógica. Es importante recalcar que Linux es un sistema operativo bastante parecido a Unix, Solaris, AIX, y más sistemas operativos terminados en X que existen por ahí, así que mucho de lo que aprenda para Linux le servirá para otros *X incluyendo MacOSX (sí, la X final significa Unix, confirmado). Linux es un nombre derivado de Linus Torvalds Unix. Es un conjunto de programas creados por Linus Torvalds y un equipo de voluntarios para que se parezcan al sistema operativo Unix ®. Linus Torvalds era en 1991 un estudiante de la universidad finlandesa de Helsinki, cuando creó (él solito), la primera versión de Linux y la puso en Internet. Ahora es el líder de un equipo de desarrollo dedicado a Linux, que se puede mirar en www.kernel.org Línux, núcleo Linux o kernel Linux o Linux kernel: son términos equivalentes. Linux o el núcleo de Linux o el kernel de Linux es el conjunto de programas y archivos que se requieren para trabajar con una distribución de Linux. Linux, por sí solo, no es de INTRODUCCION AL SISTEMA OPERATIVO 12 gran ayuda para el usuario (ni para el técnico). Linux requiere de programas adicionales que vienen en las “Distribuciones Linux”. Dicho de otra forma: alguien que solamente descarga el kernel de Linux desde www.kernel.org no logrará gran cosa a menos que tenga o vaya a instalar una distribución completa (que por supuesto, incluye al kernel de Linux). 1.1.1. Cuántos Linux Existen Existe un solo Linux en www.kernel.org pero existen decenas de versiones de Linux y miles de Distribuciones de Linux. 1.1.2. Versiones de Linux o Cuántas versiones de Linux existen La primera versión de Linux fue la 0.01 liberada el 17 de septiembre de 1991 y contenía 88 archivos, con aproximadamente 260 KB. Fuente: Wikipedia.org INTRODUCCION AL SISTEMA OPERATIVO 13 Las últimas versiones de Linux (el núcleo de Linux) a Marzo 2012 son estas: Las últimas versiones de Linux en Marzo 30 2012 según www.kernel.org 1.1.3. Distribuciones de Linux o cuántas distribuciones de Linux existen Una distribución de Linux es un conjunto de programas que trabajan conjuntamente con (y dsacnden de) el Kernel de Linux y se orientan a satisfacer determinadas necesidades (servidores, estaciones, juegos, educativas, cortafuegos, recuperación, gráficos, científico matemática, etc.). Existen miles de distribuciones. Aquí hay una lista detallada: www.distrowatch.org INTRODUCCION AL SISTEMA OPERATIVO 14 Unix es el nombre de un sistema operativo creado en 1970 por Bell Labs (Laboratorios Bell) que luego se transformó en ATT y luego se dividió en varias empresas, incluyendo bellSouth, Lucent Technologies, entre otras. Existen diversas variedades de Unix: Unixware de Novell, Solaris de Sun Microsystems, AIX de IBM, HP/UX de HP, XENIX de SCO (Santa Cruz Operations) entre muchas otras. Ahora la marca Unix le pertenece a The Open Group, como se ve en www.unix.org INTRODUCCION AL SISTEMA OPERATIVO 15 Linux a secas o GNU/Linux: Este documento se remite a www.kernel.org sitio web liderado por el autor de Linux (Linus Torvalds). Allí NO consta GNU/Linux, por lo tanto, este documento respetará el criterio de Linus Torvalds y lo denominará simplemente Linux. INTRODUCCION AL SISTEMA OPERATIVO FSF 16 INTRODUCCION AL SISTEMA OPERATIVO GNU 17 INTRODUCCION AL SISTEMA OPERATIVO GPL Y LGPL 18 INTRODUCCION AL SISTEMA OPERATIVO LGPL Copyleft 19 INTRODUCCION AL SISTEMA OPERATIVO 20 1.2. Historia de Linux y el Software Libre Desde Cuando existe el software Libre? La noción de software libre es tan antigua como 1835 (sí, mil ochocientos treinta y cinco) cuando Ada Byron, condesa de Lovelace escribió sus primeros programas de computador para la máquina de Charles Babbagge. Es obvio que ni los patentó ni les puso copyright ni derechos de autor. 1.3. Ventajas del software libre Discutibles en el salón de aula 1.4. Comparación entre software libre y software propietario Discutibles en el salón de aula 1.5. Distribuciones de Linux 1.5.1. ¿Qué es una distribución GNU/Linux? Después de un cuidadoso estudio y búsqueda en la Internet, el personal del departamento de laboratorios de la escuela "Mentes Libres" logró reunir suficiente información sobre el software libre. Como resultado se obtuvo la información que se presentó a manera de conferencia y que aparece detallada a continuación. En 1984, Richard Stallman quería crear un sistema operativo que fuera completamente libre, es decir que deseaba que los usuarios lo pudieran usar, estudiar, copiar, modificar y redistribuir libremente. Quería que este sistema se basara en el sistema operativo UNIX, ya que la arquitectura de éste era técnicamente muy estable. Para ello creó el proyecto GNU, así como un nuevo tipo de licencia (creada en conjunto con la Free Software Foundation): el copyleft, que a diferencia del copyright, se aseguraba de que estos nuevos derechos de los usuarios del programa se mantuvieran intactos. El copyleft está contenido en la Licencia General Pública de GNU (GPL). INTRODUCCION AL SISTEMA OPERATIVO 21 El proyecto GNU desarrolló varios programas incluyendo compiladores, utilitarios, intérpretes de comandos, pero no ha completado (hasta esta fecha, enero 2008) un núcleo (los programas para administrar memoria, procesos, archivos, periféricos, seguridades). Sin embargo, en 1991, Linus Torvalds empezó a generar el núcleo Linux, núcleo que aún no había sido creado por el grupo de trabajo del proyecto GNU. En poco tiempo se había creado un grupo de trabajo en torno a Torvalds, que poco a poco, y mediante el Internet, fue logrando que Linux llegara a ser un núcleo compatible con UNIX. Una vez que fue terminado, en 1992, se combinó al núcleo Linux con los demás elementos del sistema GNU y con ello aparecieron las distribuciones Linux, o mejor llamadas GNU/Linux, que no son más que un grupo de los programas del grupo GNU o de programas que utilizan copyleft, y que trabajan junto con el núcleo Linux. Una distribución Linux (o mejor GNU/Linux) es entonces un conjunto de programas creados por el proyecto GNU, o por otros desarrolladores que se apoyan en la licencia GPL o LGPL, y el núcleo desarrollado por Linus Torvalds. Desde entonces, las distribuciones GNU/Linux han incrementado su popularidad en el mercado de servidores. Su gran flexibilidad ha permitido que sea utilizado en un rango muy amplio de sistemas de cómputo y arquitecturas: computadoras personales, supercomputadoras, dispositivos portátiles, etc. Los sistemas Linux funcionan sobre más de 20 diferentes plataformas de hardware, entre ellas las más comunes son las de los sistemas compatibles con PC, Macintosh, procesadores PowerPC, Sparc y MIPS. También es frecuente hallar componentes de GNU instalados en un sistema UNIX no libre, en lugar de los programas originales para UNIX. Esto se debe a que muchos de los programas escritos por el proyecto GNU han demostrado ser de mayor calidad que INTRODUCCION AL SISTEMA OPERATIVO 22 sus versiones equivalentes de UNIX. A menudo, estos componentes se conocen colectivamente como "herramientas GNU". Muchos de los programas GNU han sido también portados a otras plataformas como Microsoft Windows y Mac OS X. 1.5.2. ¿Qué es software libre? El Software libre es aquel que puede ser usado, copiado, estudiado, modificado y redistribuido libremente, ya que su código fuente está abierto y, gracias a la licencia GPL o LGPL, debe mantener esta característica; así se garantizan los derechos de modificación y redistribución de dichas versiones modificadas del programa.. Este tipo de software suele estar disponible gratuitamente en Internet, o puede venir incluido en un distribución. De todas maneras hay que aclarar que no necesariamente tiene que ser gratuito, pues aunque conserve su carácter de libre, puede ser vendido comercialmente. Es decir que el software libre no es siempre gratuito, al igual que el software gratuito (también conocido como freeware) no es necesariamente libre, pues puede no incluir el código fuente. Es decir que se puede obtener software gratuito sin tener la libertad de ver el código y a su vez se puede usar software libre (free software) para ver su código pero pagar por su soporte comercial, o por la distribución de las copias de software libre. 1.5.3. ¿Qué es software comercial? El software comercial tiene algunas características que lo diferencian del software libre. Las ventajas que tiene el software libre, es justamente lo que ha llevado a que la escuela Mentes libres, haya decidido utilizarlo. En el software comercial, el autor cobra un precio por el uso del software (las llamadas licencias) y poniendo como condición que el software adquirido no pueda ser cedido ni INTRODUCCION AL SISTEMA OPERATIVO 23 alquilado. Además, solamente la empresa creadora del software estará autorizada para realizar modificaciones en él. Los usuarios de software libre tampoco tienen la posibilidad de realizar ingeniería inversa para estudiar el funcionamiento del software en cuestión. Una vez que se vieron las ventajas que presenta el software libre frente al software comercial, los directivos de la escuela Mentes Libres, decidieron usar Software Libre en sus estaciones de trabajo y servidores, y, como la totalidad de los interesados ya conocen herramientas del mundo de código comercial, surgieron las típicas preguntas de comparación: ¿Puedo navegar desde una herramienta de software libre? ¿Cómo puedo editar textos con herramientas de software libre? ¿Es cierto que el Software Libre sólo corre en Linux? Y así surgieron muchas preguntas del mismo estilo. Esto se debe a que hay algunos mitos profundamente arraigados en el mundo de Linux y Open Source (código abierto). Estos mitos giran en torno a la idea de que en Linux no existen las herramientas adecuadas, que sí existen en el mundo de código cerrado. Para despejar estas dudas, el equipo encargado del laboratorio y de esta investigación, nos ha realizado un cuadro comparativo entre algunas herramientas de código cerrado y sus contrapartes en Software Libre. Siempre se hizo énfasis en que tengamos en cuenta que muchas de las herramientas en Software Libre funcionan perfectamente sobre Microsoft Windows® y cualquier ambiente comercial. Comercial Software Libre INTRODUCCION AL SISTEMA OPERATIVO 24 Internet Explorer, Opera Firefox Observaciones Firefox tiene más del 10% delmercado ennavegadores Outlook Express, Outlook Thunderbird, Evolution, Thunderbird chat: msn pidgim es una alpine, mutt excelente alternativa messenger, yahoo messenger, aol messenger, icq aMSN, (antiguo gaim), PSI pidgim es un maravilloso programa que integra la mayoría de los messengers. Adobe Photoshop, Corel Draw SQL Server, Variados Oracle, Informix lenguajes de programación GIMP Postgresql, mysql, sqlite C, C++, C#, Qt, GTK, PHP, perl, mono, freepascal, ada, cobol, python, ruby, etc, etc, etc Algunos diseñadores shell scripting, lo consideran mejor al GIMP que a sus contrapartes comerciales. Es discutible postgresql es una poderosísima herramienta al igual que mysql mono es una plataforma de .NET para Linux Programación visual: varias herramientas Varios tipos de antivirus gambas, lazarus clamav Gambas es un sistema como visual basic Lazarus es un IDE para trabajar en pascal (como el delphi) INTRODUCCION AL SISTEMA OPERATIVO 25 Aunque los virus no tienen futuro en Linux, nadie quita que linux pueda ser un servidor de archivos o de correos para usuarios de windows, por eso el clamav puede ayudar. Partition magic/Partition manager Microsoft Office gparted OpenOffice Incluso existe en forma de distribución live CD para reparticionar Microsoft Exchange Sendmail, postfix, dovecot Internet Information Server apache httpd, lighttpd apache es el servidor web por excelencia en estos momentos en internet. Project planner Por supuesto, hay decenas de posibles comparaciones más, y se especificó, por parte del grupo de expositores, que no debemos esperar que todas las herramientas Open Source sean una copia al detalle de ninguna herramienta comercial, puesto que son aplicaciones diferentes: algunas funcionan de forma medianamente parecida, otras requieren de cierto estudio para lograr dominarlas Es más, muchas personas prefieren no comparar las herramientas pues algunas difieren grandemente en muchos detalles, para bien o para mal. 1.6. El kernel de Linux. INTRODUCCION AL SISTEMA OPERATIVO 26 Durante uno de los seminarios de presentación del nuevo sistema en la escuela, algunas personas solicitaron precisiones sobre qué es Linux y en qué se diferencia una distribución de Linux del kernel de Linux. ¿Acaso no es lo mismo?, preguntaban. Se les explicó que el kernel (núcleo o corazón) de Linux es la creación original de Linus Torvalds, más las modificaciones del grupo www.Linux.org. Ha sido ampliamente revisado y modificado por una enorme comunidad de personas a lo largo del planeta. De hecho la contribución en código que ha aportado Linus Torvalds es menor al 5% del kernel. Linus comenta a veces que él se siente como si se aprovechara de las demás personas porque él es el que líneas de código menos ha escrito y sin embargo el mérito del kernel se centra sólo en él. Cierto o falso, es una realidad: Linus Torvalds fue capaz de crear un kernel muy maleable, muy modificable; además es una persona que acepta retos, sugerencias y siempre se mantiene en constante investigación y modernización del kernel. El kernel es la base del sistema GNU/Linux. Es, básicamente, el conjunto de programas que permiten administrar los recursos del sistema de forma organizada y eficiente. El kernel se encarga de manejar la memoria, el uso de CPU, el uso de disco, manejo de espacios de memoria virtual, SWAP y otras funciones. En los últimos años se han ido agregando al kernel otros elementos como seguridades (iptables, seLinux), nuevos formatos de archivos (ntfs, hpfs, reiserfs) y la capacidad de reconocer una gran cantidad de dispositivos modernos 1.6.1. El sistema de numeración del kernel INTRODUCCION AL SISTEMA OPERATIVO 27 Otra de las preguntas que surgieron en muchas personas, luego de la investigación realizada en la escuela Mentes Libres, estuvo relacionada a los números que conformaban el kernel de Linux. Para saber a qué versión del kernel no referimos, el kernel tiene un sistema de numeración específico. Pese a que, en la actualidad, el sistema de numeración del kernel está en proceso de cambio, de todas formas se lo ha numerado hasta el momento de la siguiente manera: Linux-X.Y.Z El primer número (X) significa un cambio mayor respecto al anterior. Cuando este número ha cambiado, posiblemente haya incompatibilidad en sus binarios y cambios en las concepciones. El primer kernel utilizable fué del tipo 1.Y.Z. Este kernel por ejemplo era monolítico es decir que no permitía cargar módulos (drivers) para nuevo hardware. De esta manera, si se quería agregar nuevo hardware había que recopilar completamente el kernel. Posteriormente, en los años 1996-1997, apareció el kernel 2.Y.Z Este sí era modular, e incluía ciertas características más, que hacían que esta versión fuera incompatible con el kernel 1. En la actualidad aún se mantiene el kernel tipo 2. El segundo número (Y) indica un cambio en la concepción del kernel, pero no en su compatibilidad. Cuando cambia el número Y, posiblemente haya reestructuraciones en diferentes áreas del kernel, mejoras en su rendimiento, así como habrá miles de drivers nuevos, arquitecturas y dispositivos que antes no existían. INTRODUCCION AL SISTEMA OPERATIVO 28 El kernel 2.0 soportaba un firewall muy rudimentario llamado ipfwadm. El kernel 2.2, en cambio, ya soportó un firewall (ipchains) que permitía hacer proxy transparente, e incluso se podía, con la ayuda de un módulo externo, hacer labores de reenvío de paquetes hacia máquinas dentro de la red. El kernel 2.4 ya soportaba un firewall mucho más poderoso llamado iptables, que es el que hasta el momento se usa. Este firewall tiene características de manejo que lo hacen muy fuerte y estable. El kernel 2.6 incluyó soporte para discos SATA. Por las caracaterísticas totalmente renovadas en el manejo de memoria y de procesos, esta versión tiene un rendimiento y un nivel de respuesta altamente eficiente ante ambientes multitareas muy complejos. El kernel 2.6 responde mucho más rápido que su antecesor. Hay que tomar en cuenta que cuando el número Y es impar, se trata de un kernel de pruebas, altamente inestable y no apto para la producción. En cambio, si el número es par se trata de un kernel estable. Para el futuro proximo, Linus Torvald ha decidido que este número ya no tenga ningún valor respecto a la estabilidad o no de un kernel. Es decir que posiblemente el kernel 2.7 sea tan estable como un kernel 2.6. El último número (Z) solamente indica un cambio cosmético con respecto al anterior (Z-1). Los cambios que se dan en estas versiones pueden ser correcciones de seguridad, adiciones de nuevo hardware, mejoras en drivers, etc. El cambio en un número Z, normalmente no implica que con este kernel deje de funcionar ningún hardware ni INTRODUCCION AL SISTEMA OPERATIVO 29 cambie ningún concepto o preconcepción respecto a otros kernels que tengan el mismo número X.Y. Al igual que el kernel de Linux, muchos paquetes de aplicaciones de usan la misma numeración para sus sistemas, como por ejemplo: • sendmail-8.13.2 • httpd-2.0.54 • php-4.3.11 Pese a ello, en la numeración de estas aplicaciones no se tiene en cuenta la características de que si el número Y es impar, se trata de una versión de prueba inestable. La exposición sobre los kernels y numeraciones dejaron todavía ciertas dudas, sobre todo por qué se le llama Linux a un sistema operativo completo que contiene, no sólo el kernel, sino también herramientas de oficina, un navegador web y miles de aplicaciones más.. ¿Acaso eso no es Linux también? El conferencista indicó que existe una gran diferencia entre el kernel de Linux y una distribución de Linux, y se planificó para el siguiente día, una charla sobre las distribuciones de Linux. 1.7. Distribuciones GNU/Linux 1.7.1. Características básicas de las distribuciones INTRODUCCION AL SISTEMA OPERATIVO 30 La conferencia sobre las distribuciones en la escuela Mentes Libres, comenzó al explicar que inicialmente en Linux, la totalidad de los paquetes venían en código fuente, y había que recompilar todos y cada uno de ellos para obtener los binarios (ejecutables) necesarios para el funcionamiento. La labor de compilación, comentó, quizá es muy edificante para un estudiante o un programador que no tiene compromisos con una empresa determinada, pero definitivamente era vista como un retroceso ante otros sistemas comerciales en los cuales se instalaba un paquete con sólo hacer doble click (piensen en Microsoft Windows, los paquetes se instalan con sencillamente hacer doble click). Otro de los problemas que surgieron cuando apareció Linux fue que, a la hora de desinstalar paquetes, había muchos problemas, pues ya que no había un desinstalador, no era cuestión de apretar un botón y desinstalar la aplicación, como se lo hace en los Sistemas operativos comerciales. En Linux resultaba sumamente engorroso desinstalar o actualizar una aplicación. Es por esto, indicó el conferencista, que en un principio se dijo que Linux era para conocedores: el que no sabía compilar sus aplicaciones, difícilmente iba a entrar al mundo de Linux. Sin embargo, a mediados de los 90, la empresa Redhat decidió crear y distribuir sus paquetes en formato RPM, que es el acrónimo creado de RedHat Package Manager o Manejador de paquetes de RedHat; aunque posteriormente RedHat la renombró como: RPM Package Manager Los paquetes rpm han sido un paso de avance muy grande para el mundo de linux, ya que contienen: • Los binarios (ejecutables) propios del paquete INTRODUCCION AL SISTEMA OPERATIVO 31 • Las bibliotecas (libraries) propias del paquete • Archivos de ayuda y documentación • Un ejemplo típicamente funcional de la configuración • Dsacndencias: esto es, qué otros paquetes rpm requiere este rpm para instalarse De esta forma nos evitamos problemas que anteriormente ocurrían cuando se instala un paquete que para funcionar correcta o completamente, requiere de otros. Por ejemplo, dijo el profesor, el paquete php es un lenguaje interpretado que genera código html y es de amplio uso en internet en estos momentos. Php tiene, entre sus requerimientos, el que exista un servidor web (apache) instalado. Si intentáramos instalar el rpm del paquete php sin previamente tener el paquete httpd (apache), el rpm del php nos fallará diciendo que requiere del paquete rpm httpd para instalarse. Entonces debemos instalar el apache primeramente que seguramente nos fallará diciéndonos que requiere algún paquete relacionado con SSL (capa de encriptación) por lo que deberemos instalar el mod_ssl seguramente y entonces instalar el httpd (apache) y ahora sí: ya podemos instalar el php. php -> requiere de -> httpd -> requiere de mod_ssl Ahora, con los rpm no dejamos cabos sueltos. Y es una de las razones por las que ha tenido tanta popularidad. Pero esto no es todo: los paquetes rpm permiten además desinstalar completamente una aplicación, pues se mantiene una lista de todos y cada uno de los ficheros de configuración, librerías, binarios, páginas de ayuda y demás que haya instalado un INTRODUCCION AL SISTEMA OPERATIVO 32 paquete rpm. De esta forma, al borrar un paquete rpm podemos tener la total seguridad de que hemos eliminado todas las referencias y archivos instalados por el mismo. Esto puede sonar natural para una persona que viene del mundo de Windows, pero un sistema de desinstalación en linux era algo que no existía antes y que era sumamente importante y requerido. Al realizar la desinstalación se borran completamente TODOS Los archivos y directorios que pertenecían al paquete y se deja, como cortesía, una copia del archivo de configuración por si nos arrsacntimos posteriormente o queremos revisar esa configuración. A la copia del archivo de configuración se le agrega la extensión: .rpmsave Otra de las ventajas de usar el manejador de paquetes es que los rpm pueden ser actualizados: Los rpm sobrescriben, sin ningún problema, sobre sus anteriores versiones instaladas, sustituyendo binarios y páginas manuales, así como creando nuevos enlaces que se requieran, pero respetando los archivos de configuración preexistentes. Esto permite actualizar una aplicación con una versión superior sin incurrir en una tarea completa de reconfiguración. Sobre los rpm trabajaremos más adelante en el curso, cuando aprenderemos a manejar rpm, recompilar paquetes, instalarlos, actualizarlos, removerlos y demás características propias de los rpm. INTRODUCCION AL SISTEMA OPERATIVO 33 Ante una de las preguntas del auditorio, el profesor indicó que muchas personas lamentablemente no usan un manejador de paquetes para instalar sus aplicaciones, pues saben cómo compilar e instalar un paquete sin tener que usar un manejador de paquetes: sencillamente se debe obtener el ejecutable y las bibliotecas de funciones y ponerlas en un directorio determinado y usarlas. Sin embargo, al hacer esto no caen en cuenta, dijo el profesor, de que el proceso para actualizar o remover la aplicación será bien complejo (quizá olvide actualizar una biblioteca y todo le falle, o quizá tenga problemas porque los paquetes en Linux muchas veces contienen decenas, a veces cientos de archivos de biblioteca, ejecutables, etc). Definitivamente, trabajar fuera del esquema de paquetes de la distribución, no es recomendado. 1.7.2. Algunas distribuiciones de Linux/GNU Como se comentó en la conferencia anterior: Linux es básicamente el kernel del sistema operativo, la base, el que maneja todas las operaciones de entrada/salida y mantiene saludable el manejo de memoria y asignación de recursos del procesador. Sin embargo, debemos diferenciar bien entre el kernel de linux, y una distribución de Linux. El profesor indicó que una distribución de linux es una colección o conjunto de paquetes, recopilados por una empresa, normalmente con fines comerciales (vender los CDs, vender soporte, vender cursos), en uno o varios cds o dvds. Una distribución de GNU/Linux permite, entre otras cosas: • particionar el disco duro • definir una clave para el usuario de administrador • escoger los paquetes que se van instalar INTRODUCCION AL SISTEMA OPERATIVO • 34 instalar grupos de paquetes previamente seleccionados que sirven para funciones de escritorio, ofimática, gráficos, multimedia, servidores, monitoreo, etc. • configurar elementos del sistema como es la zona horaria, el ambiente gráfico, definir direcciones IP, etc. Los paquetes incluidos en una distribución no son solamente del proyecto GNU, sino que pueden ser parte de otros proyectos, con otros tipos de licenciamientos no comerciales (licencias tipo bsd, apache, X, etc) así como paquetes comerciales (Adobe Acrobat reader, Flash player, Real player, etc) pero que se distribuyen libremente. Algunas personas del público preguntaron con qué objetivo se crean las distribuciones. ¿No son a la final Linux todas? ¿Por qué no una sola y basta? El objetivo final de las empresas que realizan las distribuciones es lograr dar cierto nivel de soporte y proveer al consumidor con actualizaciones frecuentes a su distribución. Algunas de estas actualizaciones pueden ser gratuitas, otras pagadas. El tiempo de vida de una distribución también puede variar; así como el soporte técnico (que normalmente es pagado), los cursos y las certificaciones para la distribución en cuestión. INTRODUCCION AL SISTEMA OPERATIVO 35 Existen cientos de distribuciones, una lista de ellas puede ser observada en distroWatch, sí: es un número increíblemente alto y que puede resultar confuso, es por eso que debemos tomar algunas pautas para clasificar y escoger la distribución con la que trabajaremos. Durante la instalación de Linux en la escuela, se definió que se iba a utilizar un Linux orientado a servidores empresariales, Linux para empresas o personas que necesitan un servidor instalado cumpliendo seguramente las siguientes características: • Requerimientos de un apreciablemente alto periodo de actualizaciones, por lo tanto, mientras más tiempo dure las actualizaciones mejor. • Soporte técnico • Estabilidad: Se necesita que todo lo que se instale sea muy estable para causar el mínimo de tiempo caído o apagado con los consiguientes problemas para la empresa. 1.7.3. Clasificación de las distribuciones De forma totalmente arbitraria, hemos decidido dividir las distribuciones en dos clases: distribuciones basadas en rpm y distribuciones no basadas en rpm. 1.7.3.1. DISTRIBUCIONES BASADAS EN RPM RedHat enterprise Linux (RHEL) RedHat enterprise es una empresa líder en desarrollo, implementación y administración de soluciones linux y open source para la Internet- Las aplicaciones de redhat varían desde dispositivos embebidos hasta servidores Web seguros. RedHat fue fundado en 1994 por dos visionarios Bob Young y Marc Ewing. El código libre es la base de su INTRODUCCION AL SISTEMA OPERATIVO 36 sistema de negocios. Redhat no sólo es el creador de la idea del rpm, para nosotros algo fundamental que sentó bases para un rápido desarrollo del linux, sino que son los mantenedores y hospederos de una serie de proyectos y programadores muy conocidos para el mundo del linux. Proyectos tales como GCC (el compilador de C) y le dan trabajo a muchos programadores como Alan Cox, uno de los desarrolladores del kernel más importantes al momento Al momento el producto fundamental de Redhat es el RedHat enterpise Linux. Hay tres versiones: RHEL 2.1, RHEL3 y RHEL4 las cuales son mantenidas por un periodo de 7 años a partir de su fecha de salida al mercado. Estos periodos extendidos de soporte (incluso se está hablando de hasta 10 años de soporte, en lugar de 7) son una de las ventajas de usar esta distribución. La lista de servicios de RedHat es grande, pero varios de los fuertes de ellos son: • Soporte técnico • Actualizaciones frecuentes • Certificaciones para trabajar en sus productos Los productos y servicios de Redhat tienen un costo, pero el sistema operativo y los paquetes incluidos son distribuidos con su respectivo código fuente. Redhat no permite la utilización de su logos, marcas y de cualquier paquete comercial que hayan incluido Una de las impresiones que podemos tener al usar una distribución de RedHat es que el kernel que viene con esta distribución es el 2.6.9, cuando hay kernels 2.6.12 que vienen en otras distribuciones. Es decir que técnicamente habría una diferencia de 3 números Z entre el kernel de redhat y la última versión oficial. Sin embargo, este dato no debe INTRODUCCION AL SISTEMA OPERATIVO 37 preocuparnos, pues redhat hace backporting, es decir que trae los arreglos y mejoras del kernel 2.6.12 o sus predecesores, hacia su versión 2.6.9, para lograr estabilidad en cuanto a la variación de las configuraciones y así evitar que el administrador tenga que hacer muchas reconfiguraciones. Tomemos en cuenta que algunos administradores no manejan 1 o 2 máquinas, sino cientos o talvez miles y, realizar cambios en una configuración es algo sumamente penoso y que puede traer enormes pérdidas económicas. Los servidores de redhat enterprise linux están creados con el objetivo de ofrecer estabilidad, y ésta es una de las maneras de lograrlas.. sin demeritar en lo absoluto que es un sistema eficiente y actualizado. Fedora Fedora se convirtió desde inicios del siglo XXI en una distribución auspiciada por redhat, un sandbox, o caja de arena, donde Redhat prueba y prepara los paquetes que serán implementados para sus distribuciones comercialmente soportadas (RHEL). Fedora básicamente contiene una serie de paquetes de última generación que son planteados, propuestos en sus distribuciones para que los interesados puedan probarlos y reportar problemas. Fedora lanza un nuevo core (así llaman a sus distribuciones, core1, core2, core3, core4, etc) cada 10 a 12 meses luego se compromete a actualizar solamente las dos últimas versiones. Es decir que ahora que salió Fedora core4, se han dejado de actualizar el core2 y core1. INTRODUCCION AL SISTEMA OPERATIVO 38 Ventajas: • Los paquetes son muy actualizados • Por el corto ciclo de vida de las distribuciones, hay nuevos paquetes constantemente Desventajas: • Son propensos a fallar inexplicablemente o a fallar con una causa conocida, ya que muchos de ellos son experimentales y sin mucho periodo de prueba. • Fedora no se compromete a arreglar un paquete aunque lo intenta arreglar, de ser posible. • si una empresa necesita mantenerse actualizada para prevenir ataques, deberá cambiar constantemente de core de fedora, lo que genera tiempos en los cuales el servidor estará apagado el servidor, surgimiento de nuevos y posiblemente desconocidos problemas, etc. Fedora es una muy buena distribución para las personas que requieran experimentar con lo último del mercado y que no necesiten de mucha estabilidad, como por ejemplo desarrolladores o estudiantes. Existen empresas que necesitan un servicio estable, con actualizaciones por largos periodos de tiempo y que no pueden o no quieren pagar por el servicio de actualizaciones de Redhat. ¿Qué hacer? INTRODUCCION AL SISTEMA OPERATIVO 39 Clones de RedHat (Centos, Mandriva,Suse) Redhat nos da solo dos opciones: distribuye su versión empresarial pero cobra por las actualizaciones y por usar su logo (RHEL) o lanza una versión en desarrollo para que los usuarios experimenten con ella mientras (Fedora) Existen empresas que necesitan un servicio estable, con actualizaciones por largos periodos de tiempo y que no pueden o no quieren pagar por el servicio de actualizaciones de redhat. Para ello han surgido alternativas gratuitas o menos costosas, gracias al código GNU y otros códigos no comerciales. Redhat, al usar código GNU, está obligado a liberar el código fuente. Pero redhat no sólo libera el código gnu que incluye en su distribución, sino que también distribuye, en formato src.rpm (SRPM, Source RPM o las fuentes del rpm), la forma exacta en que ha compilado TODOS los paquetes que tienen código libre, ya sean estos GNU o no. Por ello, cualquiera puede tomar los SRPMS que libera redhat y recopilarlos de la forma exacta (clon) en que redhat lo hizo. De esta forma obtendrá los paquetes rpm, con los binarios y archivos de configuración exactos que redhat entrega en su distribución. Entre los clones de redhat, CentOS es el más activo en lo referente a su periodo de actualizaciones, soporte por parte de sus fabricantes y por la sólida comunidad que le rodea. Sus fabricantes no sólo copian la información Redhat, sino que crean distribuciones para nuevas arquitecturas no soportadas por redhat. INTRODUCCION AL SISTEMA OPERATIVO 40 Es precisamente Centos, en su versión 5 el que estudiaremos en este curso, de forma tal de que se tenga un conocimiento completo sobre cómo funciona un servidor RedHat Enterprise Linux y se pueda definir si se va a adquirir una licencia de uso del RHEL o si se prefiere seguir usando el Centos. Ambas variantes son válidas para comenzar. Mandriva Linux (antiguamente conocido como MandrakeLinux) fue creada en 1998, con el objetivo de lograr que cualquier persona sea capaz de usar Linux. En aquellos momentos Linux era bien conocido como un sistema operativo poderoso y estable que demandaba muy sólidos conocimientos técnicos y un uso extensivo de línea de comando. Mandrake vió la oportunidad de integrar el ambiente gráfico con poderosas utilerías de configuración y manejo del sistema. Con esta idea innovadora Mandriva ofrece todo el poder y estabilidad de un sistema Linux, tanto a personas profesionales y conocedoras de Linux, como a principiantes o personas sin mayores conocimientos técnicos, pero con interés en usar Linux para realizar sus labores. Mandriva es una muy buena distribución orientada al ambiente gráfico. SUSE LINUX se cataloga como líder internacional y proveedor de soluciones en sistemas operativos de código abierto. La larga experiencia de suse en Linux y además su enorme cantidad de personas dedicadas a desarrollar en código abierto han contribuido indudablemente en reconocer a suse como una de las soluciones de Linux más completas disponibles al momento. SUSE LINUX fue adquirido por Novell, Inc en Noviembre del 2003. 1.7.3.2. DISTRIBUCIONES NO BASADAS EN RPM INTRODUCCION AL SISTEMA OPERATIVO 41 Aunque hay un gran número de distribuciones no basadas en rpm, sólo hablaremos de las más importantes. El proyecto Debian es una sociedad de personas que han hecho causa común para crear un sistema operativo gratuito. Debian se caracteriza por ser totalmente gratuito, sin organizaciones que los mantengan y con una amplia cobertura de plataformas, tanto populares como ya obsoletas o muy nuevas. Hay algunas dificultades que está enfrentando Debian: hay una ausencia de soporte comercial (requerido por muchos clientes), las nuevas versiones y las actualizaciones se liberan con mucha lentitud y además hay conflictos internos dentro del grupo de desarrolladores. Muchas personas adoran a Debian, lo califican como altamente adictivo, sobre todo programadores, o investigadores, o simplemente partidarios del software totalmente libre. Gentoo es una distribución que tiene características interesantes: además de ser gratuita y libre, es una distribución que puede adecuarse completamente a la máquina en que se instala. Es decir que cuando hacemos una instalación, se pueden mandar a instalar solamente los paquetes que requeriremos, ni más ni menos, y estos paquetes podemos descargarlos de Internet, desde su sitio Web, y recopilarlos de acuerdo al hardware o plataforma en que vayamos a instalar. Gentoo además no tiene distribuciones propiamente dichas: se puede instalar desde cualquier cd de arranque de gentoo, él mismo se encargará de bajar el código fuente de todos los paquetes requeridos desde la Internet, y este código por supuesto será de la última versión disponible en Internet, es decir, gentoo siempre bajará y compilará el INTRODUCCION AL SISTEMA OPERATIVO 42 último cógido que tenga disponible en Internet, por lo que no es necesario instalar nuevas distribuciones pasado un tiempo. Es muy interesante para experimentadores y es una distribución muy popular entre personas que realmente quieren comprender cómo funciona Linux y que se interesan por su desempeño. Sin embargo, es un tanto complicado cuando ocurre una actualización de un paquete que requiere cambios en la configuración, puede dejar de funcionar todo o gran parte de la aplicación hasta que haya sido ajustada la configuración. Otra distribución popular es Ubuntu. Es una distribución que indica que es y permanecerá libre. Está basada en Debian. Esta distribución ha salido adelante sobre todo por los problemas de lentitud de Debian en actualizaciones de paquetes y mejoras, que hacían que muchas personas se desmotivaran por usar Debian por lo viejo y demorado de sus actualizaciones. Mini distribuciones Las minidistribuciones o minidistros, son distribuciones pequeñas, usualmente basadas en un sólo CD, o CD de tamaño de una tarjeta de crédito. No es nada raro encontrarnos con distribuciones que caben solamente en un floppy (sí, en un floppy se puede montar un router que haga nat y firewall), o en dos o tres floppies. También hay distros que caben en una memoria flash (pendrive) o cualquier dispositivo USB. No solamente son distribuciones educativas o proyectos para pasar el tiempo, sino que muchas de ellas, como coyote Linux, permiten tener un efectivo firewall y servidor que INTRODUCCION AL SISTEMA OPERATIVO 43 haga NAT, así como son pequeñas alternativas para levantar un sistema más grande en caso de que haya fallado y trata de recuperar su información y echarlo a andar nuevamente. Hay decenas de distribuciones interesantes, como: knoppix puppy Linux coyote Linux Para mayor información se puede mirar en las páginas www.distrowatch.com o en www.LinuxCd.org. Distribuciones educativas Una de las distribuciones más interesantes es Linux From Scratch, más que educativa en el sentido general podemos indicar que es una distribución que enseña cómo realizar una distribución desde cero. Cómo recompilar e instalar un sistema operativo compilando paquete por paquete e instalándolos. Así que nos enseña básicamente cómo instalar Linux sin tener que usar ninguna distribución. Los CD Vivo o Live CD Son CDs o DVDs que no requieren instalación. Traen conjuntos de programas seleccionados para que funcionen al arrancar directamente desde un CD o DVD. No tienen ni la velocidad ni toda la funcionalidad de los programas instalados en el disco duro, pero son una excelente alternativa para probar una distribución, para familiarizarse con Linux y para aprendizaje del sistema Linux o de sus programas. INTRODUCCION AL SISTEMA OPERATIVO 44 Aquí hay varias docenas de CDs / DVDs que pueden ser descargados. Pero se necesitará un ancho de banda no disponible en el CEC-EPN. Para ver una amplia lista de esta distribuciones se puede mirar en http://www.frozentech.com/content/livecd.php Además, hay miles de programas y aplicaciones para Linux (y para Windows) que están desarrollados o que están en desarrollo. Se puede encontrar una buena cantidad en las páginas www.sourceforge.net www.freshmeat.com En conclusión: El profesor resumió la charla indicando que como es claramente visible: Linux es una enorme fuerza en el planeta tierra. Una fuerza que no tiene retorno. Como se puede apreciar en los links arriba indicados, existen miles, tal vez millones de personas trabajando de una u otra manera para mejorar Linux y agregar programas (y facilidades) a su ya extensa lista. Lo interesante de Linux es que se basa en la cooperación de la comunidad y no en la competencia o el secretismo. 1.7.4. El árbol de directorio de Linux Un tema fundamental que se necesita conocer previo a la instalación de Linux, es cómo se estructura el directorio de Linux. El personal encargado de la instalación y mantenimiento de la red en la escuela realizó los siguientes procedimientos: INTRODUCCION AL SISTEMA OPERATIVO 45 Al examinar el contenido de nuestro disco duro mediante cualquiera de las utilidades gráficas de que dispone nuestra distribución de GNU/Linux, se dieron cuenta de que existen muchos directorios cuyo nombre no les sonó conocido en comparación con los sistemas de Microsoft. También observaron que los directorios utilizan el caracter / en lugar del caracter \ para referirse a una ruta de subdirectorios anidados. Otra de las diferencias que encontró el grupo de investigación de la escuela Mentes Libres fue que en Linux se llama Directorio a lo que en Windows se conoce como Carpeta o Fólder. De igual manera hay que tener en cuenta, advirtieron en su conferencia, que Linux, en relación a Windows, diferencia las mayúsculas de las minúsculas en los nombres de los archivos. Es decir que para Linux los archivos ABC y abc son dos archivos diferentes, mientras que para Windows sería uno solo. Desde el punto de vista del usuario, en GNU/Linux existen dos tipos de directorios: los directorios del sistema, que contienen ejecutables, bibliotecas del sistema, configuraciones, manuales, etc. y los directorios del usuario que contienen datos específicos de cada usuario. 1.7.4.1. Directorios del Sistema Los directorios del sistema son aquellos en los que se guardan todos los archivos que componen nuestro sistema operativo GNU/Linux. Comprendieron que era de capital importancia que ningún usuario que no disponga de los permisos adecuados pueda acceder a los archivos que componen el sistema, ya que, de lo contrario, un usuario inexperto (por ejemplo) podría modificarlos o eliminarlos y hacer que todo el sistema se volviera inestable, o incluso inutilizable (como es el caso de los sistemas de Microsoft, donde la mera activación de un virus por parte de un INTRODUCCION AL SISTEMA OPERATIVO 46 usuario determinado vulnera la totalidad del sistema operativo y la seguridad y privacidad de los datos del resto de usuarios). Encontraron entonces los siguientes directorios del sistema, lo escribieron en forma de árbol para poder recordarlo: La estructura básica del sistema Linux comienza por el directorio raíz (root) que se describe con el signo /, a diferencia de Windows donde el directorio raíz es \. El directorio /boot contiene la información necesaria para poder arrancar nuestro sistema GNU/Linux. Entre otros archivos, aquí se encuentran los núcleos que se pueden iniciar (normalmente se trata de archivos con un nombre similar a vmlinuz-x.y.z). En /etc Este directorio contiene todos los archivos de configuración de nuestro sistema GNU/Linux (como el archivo passwd, que contiene una lista con los nombres de usuario y contraseñas, o el archivo fstab, que contiene una lista con los puntos donde se han montado las diferentes particiones y los sistemas de archivos que utilizan). También podemos encontrar los archivos que almacenan los archivos que indican cómo y cuándo debe levantarse un servicio, qué zona horaria tenemos, y muchísimos archivos de configuración más. El directorio /etc contiene mayormente archivos de textos que pueden ser leídos y contienen mucha explicación sobre cómo realizar cambios y la utilidad de estos archivos. En el directorio /bin tenemos programas ejecutables (también llamados binarios) que forman parte del sistema operativo GNU/Linux. Estos comandos pueden ser usados por cualquier usuario y son relativos a la consola. El directorio /sbin contiene Contienen programas ejecutables (también llamados binarios) que forman parte del sistema operativo GNU/Linux. Estos comandos son relativos a los sistemas de archivos, particiones e inicio del sistema, y solo pueden ser usados por el administrador. INTRODUCCION AL SISTEMA OPERATIVO 47 El directorio /lib contiene las bibliotecas (o librerías) del sistema que son necesarias durante el inicio del mismo. Estas bibliotecas son análogas a los archivos DLL de Windows. Su ventaja reside en que no es necesario integrar su código en los programas que las usan, ya que cuando un programa necesita alguna de sus funciones, se carga la biblioteca en la memoria y puede ser usada por cualquier otro programa que la necesite, sin necesidad de volver a cargarla en memoria. Un subdirectorio especial es /lib/modules, que contiene los módulos del núcleo (normalmente se trata de controladores de dispositivos) que se cargan únicamente en caso de que haga falta usar un determinado dispositivo, por lo que no estarán permanentemente ocupando memoria contiene las bibliotecas del sistema. Este directorio normalmente no debe ser tocado, no hay mucha información extraíble de ella y no debemos tocar nada, a no ser que realmente conozcamos lo que estamos haciendo. /mnt Este directorio es típico de las distribuciones RedHat, aunque puede no estar presente en otras distribuciones. Su misión consiste en agrupar en un mismo lugar los puntos de montaje de diversas particiones externas, como por ejemplo: CD-ROM, DVD, disqueteras, unidades ZIP, particiones de MS-Windows y de otros sistemas operativos, etc. Este directorio contiene un subdirectorio adicional para cada una de estas particiones (como /mnt/cdrom, /mnt/win_c, /mnt/floppy o /mnt/zip). Si accedemos a estos subdirectorios estaremos accediendo realmente a esas particiones. En /usr su nombre proviene de user (usuario) y, como tal, contiene una réplica de otros directorios de nuestro sistema GNU/Linux pero orientados al usuario en lugar de al propio sistema. Este directorio se puede compartir en una red local, pero su contenido es estático. Aquí van las aplicaciones del usuario, digamos, los binarios que no son requeridos para que la base del sistema funcione: servidores como el apache, sendmail, vsftp, sistemas de análisis de logs, herramientas de firewall, sistema de ambiente INTRODUCCION AL SISTEMA OPERATIVO 48 gráfico; en fin: cualquier aplicación que, aunque sea muy útil, no es imprescindible para cuando tenemos una emergencia y debemos arrancar básicamente el sistema. Éste directorio tiene una estructura similar al directorio raíz /, ya que contiene un directorio bin/, sbin/, etc/, donde se guardan los binarios y archivos de configuración no imprescindibles para un arranque de emergencia y que son elementos agregados por el usuario (nosotros) a la hora de instalar el sistema operativo y durante el tiempo de vida del sistema. En el directorio /opt están paquetes de software adicionales, como por ejemplo los sistemas de escritorio gráficos conocidos como KDE o GNOME. Algunas distribuciones no hacen uso de él. /var procede de variable, y ésa es la naturaleza de la información que contienen sus subdirectorios y archivos. Aquí se encuentran las colas de impresión (en /var/spool/lpd), correo electrónico que todavía no se ha recogido (en /var/spool/mail) o enviado (en /var/spool/mqueue), o archivos de registro creados por los distintos procesos de nuestro sistema (en /var/log). Éstos son datos que eventualmente ingresarán al sistema, pero que pueden ser eliminados por la aplicación que los usa, o sencillamente el usuario mismo se encargará de procesarlos. El directorio /tmp contiene diversos archivos temporales que son usados por distintos programas de nuestro sistema El directorio /dev contiene archivos de dispositivos que permiten la comunicación con los distintos elementos hardware que tengamos instalados en nuestro sistema. Entre los distintos dispositivos que aquí podemos encontrar están los discos duros (como /dev/hda o /dev/sda), las particiones de los discos duros (como por ejemplo /dev/hda1 o INTRODUCCION AL SISTEMA OPERATIVO 49 /dev/sda4), las unidades de CD-ROM SCSI (como /dev/scd0) y los vínculos a cualquier tipo de unidad de CD-ROM (como /dev/cdrom), las disqueteras (como /dev/fd0), las impresoras (como /dev/lp0), los puertos serie (como /dev/ttyS0 o /dev/cua0), el puerto PS/2 (/dev/psaux) y las tarjetas de sonido (como /dev/audio). El directorio /proc contiene los archivos del sistema de archivos de proceso. No son verdaderos archivos, sino una forma de acceder a las propiedades de los distintos procesos que se están ejecutando en nuestro sistema. Para cada proceso en marcha existe un subdirectorio /proc/<número de proceso con información sobre él. Contiene información útil que nos brinda el kernel y, podemos realizar ajustes y cambios al kernel; cambiar parámetros del protocolo tcpip, verificar el uso de la memoria y del procesador, ver la cantidad de procesos que se están ejecutando, ver y quién ejecuta los procesos, además de decenas de parámetros interesantes del kernel. /root es el directorio personal del usuario root o superusuario. Contiene básicamente la misma información que los directorios personales de los distintos usuarios del sistema, pero orientada única y exclusivamente al usuario root. En /home residen los directorios de los distintos usuarios del sistema, excepto el del usuario root, que se encuentra en el directorio especial /root. Este directorio es opcional, aunque está presente en casi todas las distribucionesse crean las carpetas de los usuarios. Al crear un usuario, el sistema Linux asigna un directorio raíz o base para este usuario, donde él podrá escribir y guardar su información. Estos directorios normalmente se crean dentro de /home y tienen como nombre el nombre del usurario (/home/pedro, /home/magda, /home/joel, etc). Para el usuario administrador del sistema (root) el directorio base no está en /home sino en /root, como lo vimos. 1.7.4.1.1. La jerarquía /etc INTRODUCCION AL SISTEMA OPERATIVO 50 El directorio /etc, como vimos, contiene varios distintos subdirectorios que se utilizan para la configuración de determinados componentes de nuestro sistema: /etc/opt, contiene los archivos de configuración para el software instalado en el directorio /opt. Cada paquete de software tendrá su correspondiente subdirectorio dentro de /etc/opt. /etc/X11 contiene los archivos de configuración del entorno gráfico X Window, que es la base de los sistemas de escritorio gráficos como el KDE o GNOME. Entre otras cosas, contiene los gestores de ventanas y de arranque de los distintos escritorios gráficos. Este directorio es opcional. /etc/sgml contiene los archivos de configuración para SGML y XML. Este directorio es opcional. 1.7.4.1.2. La Jerarquía /usr Este directorio contiene distintos subdirectorios: /usr/bin contiene casi la totalidad de los comandos que un usuario puede necesitar. /usr/include alberga los archivos de cabeceras (headers) usados por los programas escritos en el lenguaje C. /usr/lib contiene las bibliotecas de usuario. /usr/local contiene la jerarquía local de usuario, con los subdirectorios típicos /bin, /include, /lib, /sbin, etc. Luego la instalación de un sistema GNU/Linux, este directorio estará vacío y se irá llenando paulatinamente a medida que se vayan instalando nuevos paquetes. /usr/sbin contiene los archivos binarios (ejecutables) no vitales del sistema usados por el administrador. /usr/share contiene archivos de datos indsacndientes de la arquitectura del sistema, como documentación, howtos, etc. Aquí se encontrar los subdirectorios /man (que contiene manuales de programas) y /misc (que contiene diversos datos indsacndientes INTRODUCCION AL SISTEMA OPERATIVO 51 de la arquitectura). También se pueden encontrar los subdirectorios /dict, /doc, /games, /info, /lócale, /smgl, zoneinfo, etc. /usr/X11R6 incluye todos los programas que componen el entorno gráfico X Window (binarios, bibliotecas y páginas man, por lo que encontraremos directorios como /usr/X11R6/bin /usr/X11R6/lib y /usr/X11R6/man). Este directorio es opcional. /usr/games contiene los archivos binarios de muchos juegos y programas educativos. Este directorio es opcional. /usr/src contiene el código fuente del núcleo de GNU/Linux. Este directorio es opcional. /usr/local: como en el resto de sistemas operativos UNIX, GNU/Linux está diseñado para ser usado en entornos de red, por lo que es bastante frecuente que el directorio /usr no se encuentre en el ordenador local, sino en un servidor. Por ello, el directorio /usr/local está destinado a contener el software que se instale localmente en cada ordenador, y contiene subdirectorios similares a los que se puede encontrar bajo /usr (como /usr/local/bin, /usr/local/sbin, /usr/local/lib, /usr/local/man, etc.). Adicionalmente, encontraremos un directorio /usr/local/etc con idéntica funcionalidad al directorio /etc. Aunque use su ordenador de forma aislada y no en un entorno de red, este es el directorio en el que debería instalar sus programas. 1.7.4.1.3. La Jerarquía /var Este directorio también posee una estructura típica de subdirectorios: /var/cache contiene datos de aplicaciones en cache, como archivos del servidor web y páginas de manual. /var/lib tiene información de estado variable. /var/log incluye registros creados por diversos programas y por el propio sistema operativo. INTRODUCCION AL SISTEMA OPERATIVO 52 /var/run contiene datos relevantes para algunos procesos que se están ejecutando. /var/spool alberga datos que están en cola de diversas aplicaciones, como correo electrónico del sistema y colas de impresión. /var/tmp contiene datos temporales que deben ser preservados entre reinicios del sistema. 1.7.4.2. Los directorios de usuario. En un sistema GNU/Linux, cada usuario dispone de su propio directorio personal donde puede guardar los documentos creados por él con los distintos programas. Este directorio personal puede ser de acceso exclusivo para cada usuario, por lo que ningún otro usuario podrá entrar en él y visualizar el contenido de los archivos que contiene (aunque esto dsacnde del nivel de seguridad seleccionado durante la instalación del sistema, ya que lo normal suele ser que el resto de usuarios puedan entrar en él y ver el contenido de algunos archivos y subdirectorios, pero no modificarlos). Los directorios personales están ubicados en /home/<nombre de usuario>. El usuario root sí dispone de los permisos suficientes para acceder a los directorios personales del resto de usuarios. 1.7.4.3. Otros directorios Algunas distribuciones hacen uso de otros directorios adicionales que suelen montar en el directorio raíz: INTRODUCCION AL SISTEMA OPERATIVO 53 /media es un directorio análogo al estándar /mnt, y contiene los puntos de montaje de los dispositivos extraíbles. Con los datos que se nos han explicado aquí, el ciclo de conferencias explicativas de Linux terminó. Ahora, el siguiente objetivo es que aprendamos el funcionamiento básico del Sistema Operativo Linux, así como su correcta instalación. Estos puntos se verán en los temas posteriores. II. COMANDOS BASICOS E INSTALACION DEL SISTEMA OPERATIVO LINUX 2. COMANDOS BASICOS E INSTALACION DEL SISTEMA OPERATIVO 2.1. Comandos 2.1.1. Comandos Basicos Ya en el shell es importante ejecutar el comando: pwd pwd viene de Present Working Directory, indica en qué directorio se está posicionado. así Al ejecutarlo solamente saldrá: /home/dsl Esto significa que el usuario está en el directorio /home/dsl. Éste es uno de comandos más fáciles de encontrar, pero ¿qué hacer si se quiere cambiar de directorio? Pues solo se debe ejecutar el comando cd, que significa Change Directory. El comando cd puede llevar opcionalmente un parámetro, que es el directorio al que se queremos cambiar; por ejemplo si se quiero cambiar al directorio /etc se pondría: cd /etc Al hacerlo es importante que el usuario verifique en que directorio está, con el comando pwd. [dsl@sac -]$ cd /etc [dsl@sac etc]$ [dsl@sac etc]$ [dsl@sac etc]s pwd /etc [dsl@sac etc]$ [dsl@sac etc]$ | El shell tiene una muy útil opción que se debe usar, se trata del autocompletamiento. Con esta opción el shell permite completar los nombres de comandos, directorios y/o archivos con tan sólo escribir la primera parte de ellos y luego apretar TAB. Se puede intentar un ejercicio al cambiar de directorio a /var, para ello se debe seguir estos pasos: 1. escribir cd /v 2. apretar la tecla TAB 3. verificar que en efecto se completa el comando (se verá: cd /var) El usuario deberá cambiar de directorio usando el comando cd y la opción de autocompletamiento: /var/spool/mail /etc /home /etc/X11 /usr/share/doc/ Si es que el shell tuviera más de una opción no se dará el autocompletamiento a menos que se apriete TAB dos veces, para que dé opciones, por ejemplo: 1. cd /usr/s 2. apretar TAB 3. el shell no nos da ninguna respuesta 4. apretar nuevamente TAB (es la segunda vez) 5. Aparecerán varias opciones (sbin/ share/ src/) 6. Esto ocurre porque varios archivos o directorios comienzan con s, se puede completar, por ejemplo, escribiendo la b (/usr/sb) [dsl@sac ~]$ cd /usr/s sbin/ share/ src/ [dsl@sac -]$ cd /usr/sbin/[] 7. Apretar TAB de nuevo 8. Entonces sí se completará a /usr/sbin Es necesario que se experimente con la opción de autocompletamiento hasta comprenderla. El usuario debería dedicarse, por lo tanto, 10 minutos a probar el cambio de directorios usando autocompletar. Una vez que el usuario maneje sin problemas esta opción, deberá regresar al comando cd y a algunas opciones que se presentan. Entonces deberá ejecutar el siguiente conjunto de comandos: • cd /var/spool/mail • pwd • cd /usr/share/doc • pwd • cd - • pwd [dsl@sac ~]$ cd /var/spool/mail/ [dsl@sac mail]s [dsl@sac mail]S pwd /var/spool/mail [dsl@sac mail]s [dsl@sac mail]$ cd /usr/share/doc/ [dsl@sac doc]s [dsl@sac doc]s pwd /usr/share/doc [dsl@sac doc]s [dsl@sac doc]$ cd /var/spool/mail [dsl@sac mail]s [dsl@sac mail]s pwd /var/spool/mail [dsl@sac mail]$ | El último comando "cd -" hizo que se regresara al directorio inmediatamente anterior: en este ejemplo será a /var/spool/mail. Es decir que cd - le ahorra al usuario teclear todo el camino para regresar al directorio en el que se encontrábamos antes. Es posible probar otra opción: cd • ejecutar cd Al ejecutar solamente cd, sin ninguna variable, se regresa al homedir del usuario (en el ejemplo será a /home/dsl [dsl@sac [dsl@sac [dsl@sac 'home/dsl mail]$ cd -]$ -]$ pwd Siempre es recomendable que al acabar cualquier acción en el shell se ejecute cd. Se debe hacer de forma automática, mecánica. El objetivo es que cualquier operación (bajar un archivo, borrarlo, editarlo) se realice desde el homedir del usuario para evitar lo que suele ocurrir cuando los usuarios bajan archivos sin saber donde están posicionados en el directorio y los pierden. 2.1.2. Comandos para Listar archivos y directorios El comando ls es el adecuado para listar archivos (ls=/ist o listing). Si se teclea solamente el comando ls el shell listará los contenidos del directorio donde se está posicionado: • cd /var/log • ls Es decir, se cambiará a /var/log y se listarán sus contenidos, aparecerá algo así: Como se ve, /var/log existen varios archivos (aparecen en blanco) y varios directorios (que aparecen en color azul oscuro). Linux es sensitivo al tamaño de letra. Para Linux, como se vio antes, no es lo mismo /var/log que /Var/Log ni que /VAr/lOg. Si por error se teclea /Var/log aparecería un mensaje de error. Este mensaje aparecerá siempre que haya un error en el comando que se esté utilizando. Estos mensajes son los que ayudarán a determinar por qué algo no funciona. Si se quiere ver el listado de otro directorio no es necesario que primero se vaya al directorio en cuestión con el comando cd. El comando ls permite que le indiquemos el directorio que queremos ver. Por ejemplo, si estamos en otro directorio y queremos ver /var/log, sencillamente ponemos: • ls /var/log [dsl@sac - ] $ Is /var/log/ acpid rpmpkgs anaconda.log cron maillog anaconda.syslog cron.1 maillog.1 anaconda.xlog boot.log [dsl@sac - wt np Xorg.0.log mcelog scrollkesacr.log Xorg.0.log.oíd críese messages secure yum.log faillog messages.1 secure. 1 yum.log.1 boot.log.1 btmp rpmpkgs.1 spooler lastlog spooler. 1 tallylog ]* 1 Con este comando, shell listó el directorio /var/log, pero no se tuvo que cambiar de directorio. Como regla general se sugiere tratar de cambiar de directorios lo menos posible. Siempre es bueno trabajar con rutas absolutas (es decir, comenzar todos los directorios con /). En resumen: siempre se debe tratar de estar en el homedir (como se explicó antes, con el comando cd el usuario se asegura de aquello) y hacer todo desde ese directorio. Para acceder a otros archivos o directorios se usan rutas absolutas (/etc, /var, /etc, etc) El comando ls (al igual que otros comandos) permite usar switches, que son parámetros adicionales que se pueden poner al comando. A continuación se verá el uso de algunos switches: ls -l permite realizar un listado extendido (l=long), de tal forma que se puedan apreciar las propiedades de los archivos y directorios. Por ejemplo: • ls -l /var/log Aparecerá algo así: [dsl@sac : ■]s - ls -l . fvar/log/ total 4660 -rwr- rw— 1 root root 46897 Feb 1 root root 671900 Feb 1 root root 2303B Feb 1 root root 43568 Feb d rwx x --- 2 root root r- rw— 1 root root 4096 Feb - rw— 1 root root 1751 Feb 1 root utmp 2688 Feb d rwx xr-x rd rwx xr-x r- rw— 2 root root 4096 Nov 2 root root 4096 Nov 1 root root 13317 Feb - rw— 1 root root 8379 Feb d rwx xr-x r-rw- rr- rw— 2 IP 4096 Nov d rwx rd rwx-rwrd rwx r- rw— - rw— - rw— --------- --- - rw— ----- ----- --- - rw— -rwr- xr-x sys 701 Feb 1 root root 21451 Feb 1 root root 16064 Feb 2 root root 4096 Feb 2 root root 4096 Jan 1 root root 146584 Feb 2 root root 4096 Feb 1 root root 16826 Feb 1 root root 10963 Feb 1 root root O Feb --- rxr-x ----- r- 7 14 : 1 13 : 1 13 : 1 13 : 1 13 : 6 13 : 2 12 : 5 17 : 11 12 : 11 12 : £ 12 : 3 01 : 29 20 : 7 14 : S ÍO : 7 14 : 15 20 : S ÍO : 1 13 : S 04 : 3 01 : 1 19 : 09 acpld 15 anaconda . log 15 anaconda . syslog . xlog 15 anaconda 16 57 boot.log 05 boot.log . 1 24 btmp 01 01 01 cron 31 cron.1 36 08 críese 12 faillog 09 36 12 lastlog 04 03 maillog 33 maillog. 01 mcelog 1 Como se puede observar, el switch -l permite ver la información detallada del directorio en cuestión. La información aparece en 9 columnas. La información que aparece en las primeras 4 se tratará posteriormente. La información que aparece en las últimas 5 columnas permite ver: • El tamaño. • La fecha y hora de la modificación del archivo o directorio • El nombre del archivo o directorio Por ejemplo: 10963 Feb 3 01:33 maillog. 1 Significa que el archivo se llama maillog.1, fue modificado el 3 de febrero a la 1:33AM y tiene un tamaño de 10963 bytes Como se puede ver, el tamaño del archivo aparece medido en bytes, lo que dificulta la interpretación del dato, debido a la costumbre de los usuarios de medir el tamaño de los archivos no en bytes, sino en kbytes, mbytes o gbytes. Si se quisiera ver el tamaño en kbytes, mbytes, gbytes se podría agregar un switch llamado -h : Human Readable (Legible por el humano). A continuación un ejemplo: • ls -lh /var/log Mostrará la siguiente información: [dsl@sac : ■]s - ls -lh /var/log/ total 4.6M -rw-r ..... 1 root root 46K Feb - rw ------ 1 root root 657K Feb - rw ------ 1 root root 23K Feb - rw ------ 1 root root 43K Feb d rwx r-x — 2 root root 4.0K Feb - rw ------ 1 root root 701 Feb - rw ------ 1 root root 1.8K Feb - rw ------ 1 root utmp 2.7K Feb d rwx r-x r-x d rwx r-x r-x 2 root root 4.QK Nov 2 root root 4.0K Nov 7 14 : 1 13 : 1 13 : 1 13 : 1 13 : 6 13 : 2 12 : 5 17 : 11 12 : 11 12 : 09 acpld 15 anaconda . log 15 anaconda . syslog . xlog 15 anaconda 16 57 boot.log 05 boot.log 24 btmp 01 01 . 1 - rw ------ 1 root root 14K Feb - rw ------ 1 root root 8.2K Feb d rwx r-x 2 IP sys r-x - rw-r--r- 1 root root - rw ------ 1 root root 4.0K Nov 21K Feb 16K Feb d rwx r-x 2 root root r-x d rwx ..... 2 root root 4.QK Feb 4.QK Jan d - 1 root root 144K Feb rwx r-x r 2 root root x rw ------ 1 root root 4.0K Feb 17K Feb - rw ------ 1 root root 11K Feb - rw-r--r-- 1 root root 0 Feb rw-r--r- £ 12 01 cron : 3 01 : 29 20 : 7 14 : S 10 : 7 14 : 15 20 : S 10 : 1 13 : S 04 : 3 01 : 1 19 : 31 cron.1 36 08 críese 12 faillog 09 36 12 lastlog 04 03 maillog 33 maillog. 1 01 mcelog La diferencia es sutil pero definitivamente es más cómodo de leer. Otro switch de interés es -S, el cual permite ordenar los archivos de acuerdo a su tamaño, de mayor a menor. Ejemplo: • ls -lS o • ls -ISh A partir de lo anterior se obtendrá lo siguiente: [dsl@sac - ]$ ls -ISh /var/log/ total .6M 4 - rw -- 1 root root 1.6M Feb - rw 1 root root 843K Feb - rwrrw- rw -- 1 root utmp 759K Feb — 1 root root 657K Feb - rwr- - rw- rr- 1 root root 144K Feb 1 root root 115K Feb — -— S 14 : 3 01 : S 14 : 1 13 : S 10 : 6 19 :5 messages 0 26 messages.1 :4 6 wtnp 15 anaconda.log :1 lastlog 2 :5 scrollkesacr.log r- - rw -- — 1 root root - rwr- - rwr- - rwr- - rw -- — 1 root root 46K Feb rr- 1 root root 44K Feb 1 root root 44K Feb — 1 root root 43K Feb - rwr- - rwr- - rwr- - rw -- rrr- 1 root root 40K Feb 1 root root 40K Feb 1 root root 37K Feb — 1 root root 23K Feb - rwrr- - rw -- 1 root root 21K Feb 1 root root 21K Feb - rw 1 root root 17K Feb — 1 root root 16K Feb - rw -- 1 root root 14K Feb - rw — -— 1 root root 11K Feb — -— - rw -- 49K Feb : S 12 : 4 :0 secure 7 7 14 : S 12 : 7 14 : 1 13 : 19 : 2 11 : S 04 : 1 13 : :0 9 :4 6 :0 7 15 acpid :5 4 : 11 :0 3 15 yum. log.1 7 14 : 3 00 : S 04 : S 1G : £ 14 : 3 01 : :0 dmesg 8 27 secure.1 Xorg.0.log Xorg.0.log.oíd anaconda.xlog rpmpkgs.1 rpmpkgs anaconda.syslog :0 maillog 3 12 faillog :0 cron 1 :3 maillog.1 3 Shell ordena los archivos y directorios por tamaño de forma descendente. Si se quisiera ordenar de forma ascendente se agrega el switch -r (reverse order). Es importante saber que el orden de los switches no importa. Ejemplo: ls -lShr Se obtendrá una pantalla similar a la del siguiente gráfico: [dsl@sac - -]S is -IShr /var/log/ total 4.6M - rw— ------ 1 root root 0 Feb 1 13 05 tallylog - rw— ------ 1 root root 0 Feb 1 13 04 spooler.1 - rw— ------ 1 root root 0 Feb 3 01 33 spooler -rw- - r- 1 root r- rw— ------ 1 root root 0 Feb 1 19 01 mcelog root 50 Feb S 09 30 yum.log - rw— - rw— root 701 Feb root 1 .8 Feb K utmp 2 .7 Feb K root 4 .0 Mar K 6 13 2 12 57 boot.log 05 boot. log. 1 24 btmp - rw— ------ 1 root ----------- 1 root 1 root drwxr xr-x 2 root - 5 17 14 2007 drwxdrwxr drwxdrwxr drwxr drwxdrwxr drwxr drwxr drwxr drwxr - rw— - rw— 3 root root 4 xr-x 2 root root 4 2 root root 4 xr-x 2 root root 4 xr-x 2 root root 4 2 root root 4 xr-x 2 root root 4 xr-x 2 IP sys xr-x 2 root root 4 xr-x 2 root root 4 x — 2 root root 4 1 root root S 1 root root ------ ------ ------ ----------- 4 .0 K .0 K .0 K .0 K .0 K . GK .0 K .0 K .0 K .0 K .0 K .2 K 11 K Feb S 10 04 Feb 1 21 29 Mar 14 2007 Feb 5 16 41 Feb 1 13 04 Jan 15 20 36 Feb 7 14 09 Nov 29 20 36 Nov 11 12 01 Nov 11 12 01 Feb 1 13 16 Feb 3 01 31 cron.1 Feb 3 01 33 maillog.1 Aquí se ordenó de forma descendente. Un archivo oculto es aquel que comienza con un . De manera predeterminada el comando Is no muestra los archivos o directorios ocultos. Es por esto que se debe usar el switch -a, si se quiere desplegar los archivos o directorios ocultos. Si se teclea: • ls -la Aparecerá un listado largo (l), incluyendo los archivos ocultos (a) [dsl@sac -]S is -la drwx ...... 3 dsl dsl 4096 Feb drwxr-xr-x root 4096 Feb £ total 36 6 root - rw ------ 1 dsl dsl 27 Feb £ -rw- r- r- -rw-r--r-- 1 dsl dsl 24 Feb s 1 dsl dsl 176 Feb s -rw-r--r- - 1 dsl dsl 124 Feb s drwx ------ 2 dsl dsl 4096 Feb s - rw ------ 1 dsl dsl 65 Feb s [dsl@sac 10 : 10 : 10 : 10 : 10 : 10 : 10 : 10 : :21 12 : 19 12 .bash_history 12 .bashprofile 12 .bashrc .bashlogout : 17 :21 .xauth9K8Dgf 1 Se puede ver que shell muestra archivos que comienzan con. (si hubiera archivos sin . también los mostraría). En realidad el comando ls tiene muchos switches, se han visto solamente los más utilizados. Si se quisiera obtener una pequeña ayuda del comando ls se lo podría hacer escribiendo: • ls --help Más adelante veremos otros sistemas de ayuda. 2.1.3. Comandos para crear archivos y directorios El comando touch es simple. Tanta es su simpleza que a veces muchos piensan que no tiene utilidad, sin embargo tiene dos funciones: 1. Al usar touch en un archivo que ya existe, se cambiará la fecha y hora de modificación (se pondrán la fecha y hora de ese momento). 2. Si se usa touch en un archivo que no existe, el comando touch lo creará con un tamaño de cero bytes (vacío) y le pondrá la fecha y hora del momento de creación. Ejemplo: • touch archivodeprueba • ls -l [dsl@sac -]$ touch archivodeprueba [dsl@sac -]$ [dsl@sac -]$ ls -1 total S -rw-rw-r-- 1 dsl dsl 8 Feb 8 15:10 archivodeprueba Este archivo no existía, y ahora aparece con 0 bytes de tamaño, y la fecha del día de creación (8 de febrero a las 15:10). Luego de esperar 5 minutos el usuario podría ejecutar nuevamente este comando: • touch archivodeprueba y verificar que en efecto la fecha fue modificada. El comando touch, entonces, puede ser usado para crear archivos (vacíos) o para actualizar la fecha y hora de archivos que ya existían. Para crear directorios, en cambio, se usa el comando mkdir junto al nombre del directorio que se quiere crear. Por ejemplo: • mkdir midirectorio Para verificar que se ha creado se va a usar: • ls -l [dsl@sac -]s mkdir midirectorio [dsl(asac -]$ ls -1 total 8 -rw-rw-r-- 1 dsl dsl 0 Feb 8 15:10 archivodeprueba drwxr-xr-x 2 dsl dsl 4096 Feb 8 15:40 drwxrwxr-x 2 dsl dsl 4096 Feb 8 15:59 También se pueden crear directorios en otros directorios. Para ello basta escribir el comando mkdir junto al nombre del directorio donde se quiera crear un directorio y el nombre del nuevo: mkdir /tmp/directorio Se creará directorio en /tmp 2.1.4. Copiar, Mover y Borrar archivos y directorios El comando cp (copy) es utilizado en Linux para copiar archivos de un lugar a otro. La sintaxis de este comando es la siguiente: cp /directorioorigen/archivoorigen /directoriodestino/archivodestino De no poner uno de estos datos, el comando fallará. Es decir: El comando cp necesita siempre estos dos parámetros: Origen y Destino El usuario deberá crear un archivo para realizar pruebas, lo llamará prueba: • touch prueba Deberá verifica con ls -l que lo ha creado correctamente. Ahora deberá copiar prueba en /tmp (sin olvidar usar TAB para autocompletar): • cp prueba /tmp [dsl@sac ~]$ touch prueba [dsl@sac ~]$ [dsl@sac ~]$ ls -l prueba -rw-rw-r- 1 dsl dsl 0 Feb 8 15:28 prueba [dsl@sac -]$ [dsl@sac ~]$ cp prueba /tmp/ [dsl@sac ™]$ [dsl@sac -]s ls -l /tmp/prueba -rw-rw-r- 1 dsl dsl 0 Feb 8 15:28 /tmp/prueba En efecto, se copió el archivo prueba hacia /tmp. El comando cp también permite copiar directorios completos hacia otro lugar. Para ello se usa el switc -r. Con este switch se le pide al shell que copie un directorio y todos los archivos y directorios que se encuentren dentro de él. Por ejemplo al traer /etc hacia acá (.): • cp -r /var/games . Esto traerá todo games (que pertenece a /var) hacia el directorio donde el usuario esté ubicado. [dsl@sac - -]$ cp -r /var/games [dsl@sac - -]$ [dsl@sac - -]s ls -l total 4 -rw-rw-r-- 1 dsl dsl 0 Feb 15 : archivodeprueba drwxr-xr-x 2 8 dsl dsl 4096 Feb -rw-rw-r-- 1 dsl dsl 0 Feb 8 : 15 : 8 15 : 10 :4 0 :2 prueba 8 El comando mv (move), permite no copiar, sino mover un archivo de un directorio a otro. También permite renombrar un archivo. Se debe utilizar la misma sintaxis que el comando cp. El uso es el siguiente: Si se teclea mv prueba /tmp/test Se eliminará el archivo prueba del directorio actual y se lo moverá hacia /tmp poniéndole el nombre test: [dsl@sac -]$ ls -l prueba -rw-rw-r- 1 dsl dsl 0 Feb 8 15:28 prueba [dsl@sac ~]$ [dsl@sac ~]$ mv prueba /tmp/test [dsl@sac ~]$ [dsl@sac -]$ ls -l prueba ls: prueba: No such file or directory [dsl@sac ~]$ [dsl@sac -]$ ls -l /tmp/test -rw-rw-r- 1 dsl dsl 0 Feb 8 15:28 /tmp/test En la imagen consta un archivo llamado prueba, de hecho se lo puede ver al listar (ls -l prueba). Luego, con el comando mv prueba /tmp/test se lo muevo hacia /tmp con el nuevo nombre de test. Al finalizar de moverlo se puede verificar con ls -l prueba y no aparecerá (claro, ha sido movido a /tmp/). Y en efecto, cuando se use ls -l/tmp/test aparecerá. Ahora el usuario deberá traer de vuelta ese archivo hacia el directorio actual: • mv /tmp/test . /tmp/test ha sido traido hacia acá (se ha usado un . al final para indicar que se quiere mover al directorio). Renombrar archivos es fácil. Se usa el mismo comando mv pero sin ponerle el directorio: • mv test prueba Lo que se hará es cambiarle el nombre al archivo test y ponerle prueba. Dentro del mismo directorio. Cuando el usuario tenga más derechos (más adelante se verá cómo lograrlo), se podrá mover directorios (en el comando mv no es necesario usar -r para realizar operaciones recursivas en directorios ). Para borrar archivos el comando que se utilizará es rm (remove), por ejemplo: • rm prueba El usuario deberá borrar el archivo llamado prueba del directorio. Otro ejemplo: • rm /tmp/test (o rm /tmp/prueba) Se deberá borrar el archivo test (o prueba) del directorio /tmp/. El directorio se mantendrá. Algunas versiones de Linux solicitan confirmación (¿seguro desea borrar el archivo? y/n?), otras no, eso dsacnde del distribuidor. En el caso de CentOS Linux, al usuario administrador se le solicitará confirmación para evitar que como administrador dañe algo de forma inadvertida. En cambio, para borrar un directorio se sigue el siguiente proceso: • rm -rf midirectorio La -r significa que se realizará un borrado recursivo (se borrará el directorio y todo lo que esté dentro del directorio) y la -f significa: forzar (no preguntar si se desea borrar o no). Esto de forzar es útil porque de lo contrario el sistema por protección pedirá confirmación de todos y cada uno de los archivos y directorios que borrará (y si son muchos el usuario se cansará de rsactir "y"). 2.1.5. Ver Archivos Cat El comando cat es muy sencillo en su aplicación. Su utilidad radica en que permite ver los contenidos de cualquier archivo de texto que se tenga. Este comando no se ocupará de paginar los contenidos ni de ofrecer capacidad de edición, sino que sencillamente mostrará los contenidos de estos archivos. Ejecutar: • cat /etc/passwd Mostrará los contenidos del archivo /etc/passwd Podría así hacerse con cualquier otro archivo, por ejemplo: • cat /etc/shells • cat /etc/inittab En fin, a cualquier archivo de texto que se encuentre en Linux se le podrá hacer un cat. 2.1.6. Comandos Usados con Pipe (|) El pipe (tubería) es un comando especial sumamente útil en Linux. Será de mucha ayuda comprender su funcionamiento. El pipe combina dos comandos: pasa la salida del comando de la izquierda como entrada al comando de la derecha. El comando pipe se puede ubicar en un teclado en español, apretando la techa Alt Gr (el Alt de la derecha) + la tecla que está a la izquierda del 1. En algunos teclados latinoamericanos el | está en el número uno, en otros teclados está muy cerca del enter. Pruebe las diferentes opciones, con o sin apretar el Alt Gr. wc (word count) es un comando que sirve para contar palabras. Se puede usar en conjunto con otro comando, ligando a ambos con el pipe. Por ejemplo, el comando: cat /etc/inittab mostrará los contenidos del archivo /etc/inittab. Ahora, el usuario podrá usar el pipe para unirlo con wc: • cat /etc/inittab | wc -l El comando wc (word count) junto con el switch (-l) contará las líneas de cualquier archivo. En el ejemplo anterior se le está pididiendo que cuente las líneas de /etc/inittab. Para ello primero se le pide al shell que muestre los contenidos del archivo /etc/inittab (el cat muestra los contenidos), que pasan a la derecha del pipe y el wc -l se ocupará de contar las líneas de lo que recibe (de la izquierda del pipe). El comando wc puede utilizarse sin necesidad de pipe, prueben ejecutar: • wc -l /etc/inittab Como pueden ver hay una apreciable diferencia, ahora nos muestra el nombre del archivo así como la cantidad de líneas Tail es un comando que muestra las últimas líneas de un archivo, por ejemplo: • cat /etc/inittab | tail mostrará las últimas 10 líneas de un archivo (predeterminadamente son 10) Si se quiere ver más o menos de 10 líneas se puede poner el número, por ejemplo: • cat /etc/inittab | tail -5 Se mostrarán las últimas 5 líneas. El comando tail se puede usar sin necesidad de pipe: • tail -5 /etc/inittab Y se obtiene el mismo resultado Head es un comando que muestra las primeras líneas de un archivo, por ejemplo: • cat /etc/inittab | head mostrará las primeras 10 líneas de un archivo (por defecto son 10) Si se quiere ver más o menos de 10 líneas se puedeponer el número, por ejemplo: • cat /etc/inittab | head -5 Se mostrarán las primeras 5 líneas. El comando head también puede ser usado sin necesidad de pipe: • head -5 /etc/inittab y hace lo mismo. Incluso es posible combinar tail y head. Si se quiere ver una línea en específico, por ejemplo se tecleará: • head -5 /etc/inittab | tail -1 mostrará la 5ta línea solamente. Esto se debe a que en primer lugar se le pidió al shell que muestre las cinco primeras líneas del archivo /etc/inittab (head -5 /etc/inittab). Al unir este comando por medio del pipe al segundo comando (tail -1) se le piede a shell que del texto que obtuvo tras la ejecución del primer comando (el texto serían las 5 primeras líneas del archivo) muestre solamente la última (es decir la quinta de ese texto). Como resultado shell mostrará solamente la quinta línea del archivo. [sac@sac -]s head -5 /etc/inittab | tail -1 #Author: Hiquel van Smoorenburg, <miquels@drinkel.ni.mugnet.org> [sac@sac -]s [] De esta forma se logrará obtener una línea solamente de un archivo determinado. grep nos permite encontrar líneas que coincidan con una expresión regular (o cadena) determinada, por ejemplo: • cat /etc/passwd | grep root mostrará todas las líneas de /etc/passwd que contengan la cadena: root Si, en cambio, se teclea: • A cat /etc/passwd | grep root Shell mostrará todas las líneas de /etc/passwd que comiencen cadena: root. 2.1.7. Uso de Paginadores (A significa comiencen) con la El usuario se habrá dado cuenta que cuando se usa el comando cat, la información del archivo aparece súbitamente y, si es muy larga, no hay manera de que detenerse en una parte específica del texto. Un paginador es una herramienta que toma un archivo de texto y muestra sus contenidos de página en página. Hay dos comandos paginadores: more (más) y less (menos). El comando more es un paginador antiguo y conocido; le permitirá al usuario moverse de página en página dentro del archivo, y una vez que quiera salir se hará presionando la tecla q. Normalmente es preferible usar less para paginar los textos, pues esta opción es mucho más versátil, ya que además de dejar mirar la información del archivo paginadamente, da algunas opciones para trabajar dentro del archivo. Si se quisiera paginar el archivo /etc/inittab se pondría: less /etc/inittab Los paginadores son muy fáciles de utilizar, a continuación se podrán ver algunos comandos útiles dentro del paginador "less". • q = Sale del paginador (regresa al shell). • G = Va a la última línea del archivo. • g = Va a la primera línea del archivo. • 5G = va a la 5ta línea. En general un número y G lleva a esa línea. • /cadena = busca una cadena llamada "cadena" dentro del archivo. Ej: /powe (buscará la cadena powe dentro del archivo que se esté viendo). La búsqueda se realiza de arriba hacia abajo. • / = repite la anterior búsqueda (busca la siguiente) • ?cadena = busca "cadena" dentro del archivo. La búsqueda la realiza de abajo a arriba. • ? = repite la búsqueda anterior (de abajo para arriba) • Barra espaciadora = baja una página • w = sube una página less no es un editor, sino tan sólo un paginador, pero es muy útil para ver información dentro de un archivo. 2.1.8. Editor Vi vi es el editor de textos por excelencia en los sistemas operativos Unix y Linuxi (se pronuncia vi-ay). vi significa visual. Era un editor visual muy utilizado, pero actualmente se utiliza de forma muy general el vim: Vi IMproved, que es casi idéntico al original vi. Tanto vi, como viM tienen dos modos de funcionamiento: • Modo de comando: cualquier tecla que se apriete significará un comando que se le está emitiendo al vi. • Modo de edición: cualquier tecla que se escriba se representará (escribirá) directamente en el editor. El editor vi fue el primer editor de pantalla completo para los sistemas Unix. Es simple, pequeño y elegante. Es muy empleado en las tareas de administración del sistema. Vi suele ser un programa que no incluye su propio revisor ortográfico, o formateador de textos, pero existen otros programas que realizan esta función. Con estos programas, usados dentro del vi, se logra tener la funcionalidad que se requiera. Se le sugiere al usuario probar varias veces todos los comandos y que dedique tiempo a esta actividad, pues el vi es la base para editar todos los textos y archivos de configuración que se necesiten en el futuro. Para usar el editor con algún archivo que se desee crear o modificar se deberá teclear vi archivo, por ejemplo: $ vi prueba Como se puede ver, en la pantalla aparece el cursor en la esquina superior izquierda y en la parte inferior una columna de caracteres ~, los cuales nos indican que el usuario está en el fin del archivo. rooc@sac:- x sac@sac:Ríe Edlt Wew Terminal Tabs Help Al final, en la última fila aparecerá algo así: "prueba" [noeol] 4L, 12C Esto indica el número de líneas y caracteres que contiene el archivo (si no estuviera vacío, en este caso nos dice: El archivo prueba tiene 4Líneas y 12Caracteres). 2.1.9. Los modos del Vi Como se dijimos antes, existen dos modos de uso de vi:: modo comando y modo edición. Modo comando: cuando se arranca el editor vi, siempre se está en el modo comando. Este modo permite que se use un determinado número de comandos (usualmente de una sola letra) para modificar el texto. Hay que tener cuidado en este modo, ya que si se pone un comando en mayúsculas o en minúsculas, se lograrán efectos muy diferentes. Si se intenta insertar texto en este modo, la máquina le recordará al usuario, mediante el pito que suena cuando se oprimen las teclas, que no puede hacerlo. Para insertar texto, se tendrá que cambiar al modo edición. Modo edición: es aquel que permite insertar texto y modificarlo. Para pasar del modo comando al modo edición, simplemente se teclea la letra i. 2.1.10. Insertar, borrar, editar y moverse en el texto Se puede insertar texto en el modo de edición y en el modo de comando. En el primero, simplemente hay que asegurarse de que se está en el modo de edición (para acceder a él, se debe digitar la letra i). Al hacerlo, en la esquina inferior izquierda aparece INSERT-. Aquello indica que se está en el modo edición y se puede insertar y/o modificar texto. Si se quisiera regresar al modo de comando, simplemente se debe apretar la tecla Esc (Escape). Ejercicio: El usuario tecleará el siguiente texto: Ahora es el momento para que todos hombres buenos vengan a ayudar a la fiesta. El usuario se habrá fijado en que el texto se escribió junto al número 1 que aparece en la esquina superior izquierda. Este número indica el número de la línea de texto. Si se da un Enter se verá que el cursor baja a la siguiente línea, y que ésta tiene el número 2 al lado. Si en cambio se sigue escribiendo luego del texto que se acaba de ingresar, hasta llenar la línea, se verá que cuando se ha completado toda la extensión de la línea, el texto va a la línea siguiente, pero no hay un cambio en el número de línea. Es decir que si se quiere escribir en la línea 2 del texto, necesariamente se tendrá que dar un Enter, de otra manera, aunque en la pantalla se haya escrito en más de una línea, para la máquina aún es la primera línea. Mientras se está en modo edición se puede insertar texto en tantas líneas como se desee, simplemente se tendrá que presionar la tecla Enter para ir la línea siguiente. Si el usuario se quiere mover en el texto, simplemente debe usar las teclas de flechas (aunque para moverse en el texto con las teclas de flechas no se tiene que necesariamente estar en modo de edición, se lo puede hacer desde el modo de comando, con las mismas teclas o, si se prefiere también se pueden usar las teclas h, j, k, l, que mueven el cursor a la izquierda, abajo, arriba y a la derecha, respectivamente). Para borrar texto en el modo de edición, en cambio, solo se debe usar la tecla de retroceso. Este mismo proceso se puede realizar a través del modo de comando, para se debe poner el comando a. Este comando inserta texto después de la posición actual del cursor. En el texto que se acaba de escribir, el usuario puede mover el cursor hasta que quede entre las palabras todos y hombres, luego presionar a y teclear los. Después presionar Esc para regresar al modo comando. Si se quisiera insertar texto en la siguiente línea, se podría usar el comando o. Al presionar o y escribir: Después iremos por pizza y helado. la x borra el caracter donde está situado el cursor. Ahora, con este método, el usuario puede borrar la palabra Helado y añadir refresco dietético. Si se necesitar borrar líneas enteras desde el modo comando se podría usar el comando dd. Para hacerlo, solamente se debe ir a la línea que se quiere borrar y presionar dos veces d. Si hubiera una equivocación al borrar una línea con el comando dd, se podría reinsertar el texto usando el comando p, que reinsertará la línea borrada en la línea siguiente a la que el usuario se encuentre. Si en cambio se usa el comando en mayúscula (P), la línea borrada se insertará Se sugiere que el usuario pruebe estos dos comandos luego de borrar la última línea. Al igual que en los procesadores de palabras, el editor vi tiene las opciones de deshacer y rehacer. El comando u deshace los últimos cambios y con ctrl R se puede rehacer. El usuario deberá probarlos en el texto. Para borrar el caracter sobre la que esté el cursor (es decir, borrar como se lo hace en un procesador de palabras con la tecla del) se debe usar el comando dw. El usuario deberá colocar el cursor al principio de la palabra dietético y bórrala. Si se quiere sobrescribir un texto comenzando a partir de donde está el cursor, se deberá usar el comando R. Se deberá colocar el cursor en la primera letra de pizza, presionar R y teclear hamburguesas y papas. Se podrá observar que se queda en modo edición, por lo que para regresar a modo comando se deberá teclear Esc. El comando r también sirve para sobrescribir, la diferencia es que reemplaza un sólo carácter, aquel sobre el que se encuentra el cursor, y luego no se quedará en modo de inserción (como ocurre con R). .El comando ~ (en un teclado en español se debe presionar AltGr 4 ) cambia de minúscula a mayúscula o viceversa la letra sobre la que está el cursor. Para ejercitarse el usuario deberá cambia la palabra hamburguesas a mayúsculas. Siempre es importante regresar al modo de comando. 2.1.11. Otros comandos para moverse en el texto El comando w se usa para mover el cursor a la siguiente palabra; b mueve al principio de la palabra actual o de la palabra anterior si ya estaba al principio de una palabra. El comando 0 (cero) mueve el cursor al principio de la línea actual, y el comando $ lo mueve al final. Para mover una pantalla hacia adelante o hacia atrás en el archivo, se debe presionar CTRL F y CTRL B, respectivamente. Con el comando CTRLG se puede mover el cursor al final del archivo. También se puede mover a una línea específica si primero se da el número de línea y luego el comando, por ejemplo, 10G, moverá el cursor a la línea 10 en el archivo. Al pulsar / seguido de una cadena y Enter se logra pasar al principio de un archivo. Usando ? se hace hacia atrás. Se pueden combinar comandos de movimiento con otros comandos, tales como borrado. Por ejemplo, el comando d$ borrará todo aquello que se encuentre entre el cursor y el final de la línea. Mientras que dG borra todo desde el cursor hasta el final del archivo. 2.1.12. Edicion de un archivo Para editar otro archivo, se debe usar el comando :e por ejemplo, para terminar de editar al actual archivo y comenzar a editar otro nuevo ponemos :e nombredeotroarchivo Vean el gráfico este, estamos en el archivo prueba: sacre/ '¡ f? flle Edlt View Terminal Tabs Help CEC-EPN Tema 2 estoy editando un archivo e ot roí] Al escribir :e otro me aparecerá el otro archivo, ya no el prueba 81 Tema 2 CEC-EPN sac@sac:~ Ríe Edlt Wew Terminal Tabs Help rooc@sac: x sac@sac: 82 CEC-EPN Tema 2 este es otro archivo 'Otro" 1L. Z1C Se pueden incluir otros archivos en el archivo actual usando el comando :r. Por ejemplo si se tiene creado un archivo llamado otro y se está editando en el archivo prueba se puede teclear :r otro De esa manera se insertará el contenido del archivo otro, a partir de la línea actual del presente archivo (prueba). Veamos, estoy en el archivo prueba: Ríe Edit View Terminal Tabs Help root@sacre2i~ 83 Tema 2 CEC-EPN estoy editando un archivo : r otro[| Aquí escribo :r otro y me inserta los contenidos de otro en prueba sac@sac: ~ Ble £drt y.iew Jemnlnal Tafcs htelp root(S>sac: x sac@sac- 84 CEC-EPN Tema 2 estoy editando un archivo 05te es otro archivo "otro" 1L. 21C 2.1.13. Ejecución de Comandos El comando :! permite poner el nombre de un comando de shell, el cual es ejecutado dentro del vi. Por ejemplo, al teclear:! ls -l lo que se hará es ejecutar el comando ls -l y se regresará inmediatamente al vi. 2.5.6.Guardar archivos y salir de vi Por ejemplo, para salir un archivo que está siendo editado, se usa el comando :q este comando sale solamente si no se han realizado cambios. Si se han realizado, se niega a salir. El comando :wq escribe y sale del vi (el comando ZZ es el equivalente). Para salir del vi sin guardar los cambios en el archivo se de e usar el comando :q! 2.1.14. Otro editor 85 Tema 2 CEC-EPN Otro editor de textos muy cómodo de utilizar es el nano, viene incorporado en la mayoría de los Linux modernos; tiene un estilo de trabajo como el antiquísimo programa de DOS llamado wordstar (era un editor de textos). En el wordstar se trabaja siempre en modo de edición (lo que se escribe se representa en la A A pantalla). Los comandos se ejecutan con la tecla CONTROL ( ); G por ejemplo muestra la ayuda. Para editar un archivo con nano se ejecuta en el shell: nano nombredearchivo por ejemplo: • nano prueba Se editará el archivo prueba, y si no existe se mostrará un archivo vacío listo para ser llenado. aqui estoy escribiendo textos normalmente. Cuando ya requiera salir, puedo ver las líneas de abajo, una de ellas me indicará que CTROL+x me dejará salir (exit). salucos Get Read File Hel Prev Page Where Is p Next Paae Exi t WriteOut Justif 86 CEC-EPN Tema 2 [ Read 8 lines ] Yl Cut Text UnCut Text Cur Pos To Snell 87 CEC-EPN Tema 2 Comandos útiles del NANO • Ax : sale del editor, si es necesario solicitará el nombre del archivo a grabar y solicitará confirmación para grabar o no los cambios. • Ar : importa (agrega) los contenidos de otro archivo. • Ac : indica la posición (línea y columna) donde está el cursor. • Ag : obtiene ayuda sobre comandos. • AW : busca una cadena. • A_ (guión bajo): va a una línea (se pone el número de línea y se presiona enter). En este curso se prefiere vi porque está presente en todas las distribuciones Linux y en TODOS los sistemas unix que puedan existir. Así que conociendo el vi se puede editar textos en cualquier sistema Unix Apagar y salir El comando para apagar la máquina originalmente se llama shutdown, pero es un tanto complejo de utilizar, es por esto que prefiero usar comandos alternativos que son más fáciles de comprender, estos son: Poweroff, que apagará todos los servicios, eliminará el ambiente gráfico y le indicará al BIOS que proceda a eliminar el flujo de energía, de esta forma se apaga completamente la máquina. Es el que más se usa cuando se quiere que un servidor o PC deje de trabajar y consumir energía. Halt apagará todos los servicios, eliminará el ambiente gráfico. No le indica nada al BIOS, por lo que sigue encendido el hardware pero sin funcionar. Actualmente tiene poco uso (¿quién desea apagar un sistema operativo y dejar encendido el hardware?). Es similar a aquellas versiones de windows 95/98 que al apagar anunciaban: Ahora sí puede apagar su máquina (fondo negro con letras naranjas). El comando halt hace algo así parecido. El comando reboot es muy útil. Se utiliza para apagar todos los servicios e indicarle al BIOS que reinicie la máquina y comience de nuevo el proceso de arranque. Se utiliza mucho cuando se quiere cargar un nuevo kernel (para cargar un nuevo kernel hay que reiniciar la máquina). A propósito de estos comandos: Linux es un sistema operativo muy estable, casi nunca hay que reiniciarlo (reboot) o apagarlo por problemas ocurridos dentro de él. Se podría decir que se apaga la máquina por las noches para ahorrar corriente, más no porque se ponga lenta. 88 Tema 2 CEC-EPN Hay servidores que actualmente llevan corriendo muchos meses sin tenerlos que reiniciar o apagar. El comando uptime indica cuánto tiempo lleva encendida la máquina. Puede verse en alguno de los servidores de producción de www.ecuadorinteligente.com: [root@srvl -]# uptime 16:22:23 up 137 days, 5:27 [root@srvl -]# | [root@srv2 root]# uptime 16:21:29 up 73 days P 2:08 [root@srv2 root]# [] [root@srv4 -]# uptime 16:16:2Q up 63 days, 17:37, [root@srv4 -]# [] [root@srv9 -]# uptime 16:09:52 up 133 days, 5:53, [root@srv9 ~]# Q 89 CEC-EPN Tema 2 Como se puede observar algunos servidores tienen más de 4 meses sin reiniciarse o apagarse, otros poco más de 2. Pero en todo caso son valores altos que son logrados con facilidad dada la estabilidad del sistema operativo Linux Para el caso del DSL Linux, el usuario utilizado para trabajar no es privilegiado (no es administrador o root), por lo que se permitirá reiniciar o apagar la máquina desde él. Cuando se instale CentOS se lo podrá probar. De momento para apagar el DSL se lo puede hacer mediante el ambiente gráfico (hay una opción que dice Exit Options en el ambiente gráfico). 2.2. Como realizar un correcto particionamiento en Linux El particionamiento es un tema esencial a la hora de instalar Linux y aquí se indicarán algunos factores que habrá que tomar en cuenta a la hora de particionar. Siempre deben tenerse en cuenta las características propias de la instalación que se está haciendo y lo que requerirá la empresa o lugar donde se esté instalando. 2.2.1. Que es particionar un disco Una partición de disco es el nombre que se le da a cualquier división de un disco duro. Cuando se divide el disco en dos particiones, por ejemplo, Linux reconocerá al disco físico (que sigue siendo uno) como si fueran dos discos indsacndientes. Es decir, vería dos discos, pues son dos particiones. Por ejemplo: si se divide un disco duro de 80GB en dos particiones de igual tamaño (40GB y 40GB) entonces Linux verá dos discos lógicos de 40GB cada uno. Así se podría tener varias particiones, cada una con su propio formato y tamaño. El particionamiento es útil por diversas razones, por ejemplo: 1. Permite controlar que un disco no se llene por completo; si por casualidad un proceso del sistema comienza a escribir descontroladamente a disco, solamente podrá llenar la 90 Tema 2 CEC-EPN partición hacia donde escribe, mas no podrá llenar el disco completo. A propósito, la partición raíz (/) requiere tener siempre espacio disponible, si no se particionara correctamente se podría llenar / y por lo tanto dejar el sistema sin funcionar. 2. Si un pedazo del disco se dañara, muy posiblemente el resto podría ser todavía utilizado y recuperado. Por supuesto un disco dañado requiere de una migración inmediata hacia otro disco. Pero no es lo mismo perder la única partición que se tenga que perder sólo una de las varias disponibles. 3. Posteriormente se estudiarán seguridades del sistema concebidas para trabajar con particiones. Sin un correcto particionamiento no se podría implementar estas seguridades. En el caso de Microsoft Windows las particiones se montan como letras (Unidad C:, Unidad D:, etc., etc., etc.) en el caso de Linux, las particiones se montan dentro del árbol del directorio al que anteriormente se hizo referencia. Por ejemplo, si se desea tener una partición para el directorio raíz(/), todo directorio dentro de la raíz quedará dentro de ésta partición, a continuación el esquema: hdal / • /etc / home / mnt Ahora por ejemplo, si tengo dos particiones, puedo asignar una partición para / y otra para /home, veamos: 91 CEC-EPN Tema 2 Igual, si lo que tenemos son dos discos (particionados cada uno en hdal y hdbl por ejemplo), podríamos usar un disco (hdal) para la partición / y otro disco (hdbl) para la partición /home: Se prefiere particionar el disco en al menos 6 áreas que serán usadas para montar los directorios: • /boot • /usr • /home • /var • / • SWAP Aquí se detallarán los porqués de cada tamaño según su punto de montaje: 2.8.2. /boot: 92 CEC-EPN Tema 2 Es en la partición /boot donde el sistema operativo Linux guarda todos los kernels instalados en el sistema. En efecto, cada máquina puede tener varios kernels para bootear, la razón más común es que son kernels viejos que Linux deja como copias de seguridad. La arquitectura para PC sólo permite bootear un sistema operativo cuyo kernel esté localizado dentro de los primeros 1024 cilindros, y es por esto que el lugar donde esté el kernel debe estar localizado lo más próximo al inicio del disco, para que siempre caiga en los primeros 1024 cilindros. Seguramente los usuarios se habrán preguntado alguna vez por qué Windows funcionaba normalmente y en determinado momento no arranca. Una de las razones más frecuentes (pero poco conocidas) es que posiblemente el kernel de Windows fue actualizado "ayer" (actualizaciones de Windows) pero este nuevo kernel por alguna razón quedó ubicado después de los 1024 cilindros, lo que hace que al siguiente día, al encender encendamos la máquina, ésta se niegue a arrancar el sistema operativo. Es una razón muy común y definitivamente por esta razón se le debemos asignar a /boot la primera partición posible, y el tamaño recomendado para RHEL4 es de 100MB, con esto bastará para guardar al menos unos 30 kernels diferentes. La realidad es que el kernel de Linux se actualiza pocas veces en el año, y a medida que se estabiliza el sistema se actualiza menos, por lo que sobrará espacio. En resumen: /boot debe ser forzada a ser primaria y debe tener 100MB. 2.2.2. /usr Es un área del sistema donde se almacenan gran cantidad de binarios que se instalan con el tiempo, aplicaciones de todo tipo, ayudas, etc. Por lo tanto debe tener un tamaño considerable de acuerdo a las instalaciones que se harán. Es recomendable asignarle al menos 2GB, pero de ser posible se asigno mucho más espacio (10GB o más). En resumen: /usr debe tener al menos 2GB, de preferencia 10GB o más. Dsacndiendo del tamaño del disco. 2.2.3. /var 93 Tema 2 CEC-EPN Es el directorio donde se almacenan los logs y la caché de algunos programas. Pero sobre todo es donde se almacenan los INBOX de todos los usuarios. 2.3. Instalacion de CentOs Luego de toda la práctica con DSL y de la explicación teórica sobre las particiones, el personal del laboratorio de la escuela Mentes Libres por fin se consideró con suficiente confianza como para poder instalar Linux. Para ello comprenden que: 1. En efecto la instalación de Linux es sólo un paso para poder usarlo. 2. Que una vez instalado es que comienza el verdadero proceso de uso y aprendizaje del sistema. 3. Hay que leer los mensajes que aparezcan en la pantalla para poder comprender los errores. 4. Linux no es solo cuestión de apretar Next, sino que se debe comprender qué se está instalando, qué se está preguntando. Para ello bajaron una copia de CentOS-5 del sitio de centos: http://mirror.centos.org/centos5/5.1/isos/ En el caso del laboratorio, tenían máquinas de 32bits, por lo que decidieron bajar la versión de DVD de 32bits (i386). La versión de 64bits (x86_64) no les conviene, pues no tienen al momento máquinas de 64bits. El archivo que bajaron fue: y CentOS-5.1-i386-bin-DVD.iso 24-Nov-2007 20:31 3.6G que es un archivo que servirá para quemar el DVD. Este ISO tiene 3.6GB de tamaño. Este archivo con extensión iso se quema desde el Nero de Windows, con la opción "Quemar desde imagen", tal como lo hicimos con DSL. 2.4. Arrancando la maquina 94 Tema 2 CEC-EPN Una vez quemado el DVD lo pusieron en una máquina de prueba que tenía 512MB de RAM y un disco duro del cual iban a disponer completamente. Ordenaron al BIOS que la máquina arrancara desde el CD. Se les presentó la siguiente imagen: CentOS - 5 To instaM or upgrade in graphical mode, press the <EMTER> key. To ¡nstatl or upgrade in text mode, type: linux text <EMTER>. Use tlie funetion keys listed belou for more information, [Fl-Main] [F2-Gptionsl [F3-General] [F4-Kernel] [F5-RescueJ boot: Leyeron cuidadosamente la pantalla y se dieron cuenta de que existía cierta ayuda apretando las teclas de F1 a F5. Como resumen anotaron que: • Para arrancar el instalador se espera un minuto sin tocar nada, o se presiona ENTER, el instalador gráfico comenzará. • Si la memoria de la máquina es inferior a 512MB, es mejor instalar el modo texto (sin ambiente gráfico), para ello se escribe: "linux text" (sin las comillas) y se comienza la instalación en modo texto. • Si se quisiera verificar la memoria física (RAM) de la PC se puede escribir "memtest" (sin las comillas) y se verifica la RAM sin realizarse ninguna instalación. • Notaron que hay una opción llamada "de rescate" (rescue) que aparentemente sirve para recuperarse ante daños ocurridos en el arranque de Linux. Posteriormente acordaron conocer cómo usar esta opción pues parece muy importante. 95 Tema 2 CEC-EPN Es decir, este DVD sirve para • verificar la RAM • instalar Linux • recuperar Linux en caso de que ocurra un evento que no le deje bootear. En el caso de ellos, tomaron la vía típica, que fue apretar ENTER y arrancar el modo gráfico. Pocos momentos después les salió un mensaje que indicaba si deseaban probar el DVD/CD contra defectos al quemar. Dedujeron algo lógico: siempre es saludable verificar el medio (disco) para evitar que por un defecto no se instale posteriormente Linux. el come to CentOS ---------------- 1 CD Found | -------------To begin testing the CD media before insta 1 lation press Olí. Choose Skip to skip the media test and start the insta 1lation. 96 Tema 2 CEC-EPN <Tab>/<Alt-Tab> betueen elements ! <Space> selects ! <F12> next screen Esta pantalla todavía aparece en modo texto, pues ni siquiera se ha cargado el ambiente gráfico. Sirve realmente para encontrar cualquier error que exista en el disco. Apretaron en OK y se comenzó a probar el disco: Al finalizar el chequeo en efecto surgió la siguiente pantalla, que indicaba claramente (PASS) que todo había pasado satisfactoriamente: I ~-—~ 97 Tema 2 CEC-EPN <Tab>/<Alt-Tab> betueen elements ! <Space> selects ! <F12> next screen Tras lo cual aceptaron (ok) y procedieron a continuar con la instalación. Entonces por fin surgió la primera pantalla gráfica, que no es más que es una ventana de bienvenida: 98 CEC-EPN Tema 2 En esta pantalla, que parecía, se dedicaron a revisar las diferentes opciones y botones que había: • Un botón de Release Notes que muestra la información de último momento sobre el sistema. Se abren las notas en una ventana aparte, la cerraron posteriormente. • La pantalla tiene una imagen informativa en el medio. El logo de CentOS-5 aparece arriba. • Abajo a la derecha tiene un botón de continuar y otro de regresar (que por ser la primera pantalla, está desactivado). Continuaron y apareció la siguiente pantalla: 99 Tema 2 CEC-EPN QEMU CentOS 5 En esta se solicita escoger el idioma en el cual se va a realizar el proceso de instalación. Escogieron inglés, pues es el idioma nativo en que se hace CentOS y por lo tanto sabían que habría menos errores de interpretación. Por supuesto que también podrían haber escogido Spanish (Español) y seguir el proceso de instalación. Luego apretaron continuar y se les solicitó escoger el tipo de teclado que tenían: 100 Tema 2 CEC-EPN QEMU CentOS 5 En esta se solicita escoger el idioma en el cual se va a realizar el proceso de instalación. Escogieron inglés, pues es el idioma nativo en que se hace CentOS y por lo tanto sabían que habría menos errores de interpretación. Por supuesto que también podrían haber escogido Spanish (Español) y seguir el proceso de instalación. Luego apretaron continuar y se les solicitó escoger el tipo de teclado que tenían: 101 CEC-EPN Tema 2 El teclado que típicamente se usa en Latinoamérica se llama Spanish (Español), así que escogieron este teclado. Este teclado se caracteriza por tener el signo de arroba (@) en la tecla correspondiente al número 2. Si el signo de @ estuviera en la Q, entonces sería un teclado latinoamericano y se escogería la opción latinamerican. Si el teclado no tuviera ñ entonces sería seguramente un teclado en inglés y se escogería la opción: US International (para que permitiera escribir los acentos). Al continuar, les apareció la siguiente pantalla 102 CEC-EPN Tema 2 En esta pantalla se advirtió que el disco duro no estaba inicializado (era nuevo) y se preguntó si querían continuar, escogieron que sí. Notaron que cuando un disco ya estaba usado (formateado) no salía esta información. En todo caso, se dieron cuenta de que se podía dar continuar (yes) sin riesgo de perder la información. Les salió entonces una pantalla solicitándoles escoger la forma en que iban a formatear el disco: 103 CEC-EPN Tema 2 Hay varias opciones posibles: • Dejar las particiones de otros sistemas, y solamente borrar las particiones existentes de Linux. • Borrar TODAS las particiones existentes. • Usar el espacio disponible (Free Space). • Hacer un particionamiento manual (custom layout) Como ya ellos sabían cómo particionar el disco escogieron ésta última, llamada Custom Layout y procedieron a continuar a la siguiente pantalla: 104 Tema 2 CEC-EPN QEMU/KVM □ Este es el ejemplo de cómo quedó el disco. Los administradores del laboratorio escogieron usar una máquina que no tenía información importante y borraron todas las particiones que tenía anteriormente. Para borrar las particiones que no deseaban hacían clic sobre la partición y después apretaban el botón Delete, para borrar la partición. Se fijaron que en la parte superior de la pantalla aparecía un rectángulo representando al disco, en este ejemplo era un disco de 10GB. Y se cercioraron de que tuviera todo el espacio libre (Free). Apretando el botón New, se abrió una ventana que les permitió escoger: 105 CEC-EPN Tema 2 En el mount point (punto de montaje), donde se hallará la partición que se creará, pudieron escoger simplemente con el mouse el punto de montaje. En cuanto al tipo de filesystem, como es lógico, escogiero ext3, que es el filesystem por defecto de Linux. El tamaño (size) de esta partición. Entonces, comenzaron a crear sus propias particiones: 106 CEC-EPN Tema 2 La primera fue en el punto de montaje: /boot, midió solamente 100MB y eso sí, no se olvidaron de marcar, sólo para esta partición, la opción que decía: Force to be a primary partition. Posteriormente crearon las siguientes particiones, /, /home, /usr, /var, /tmp, a cada una de ellas le asignaron el espacio adecuado según los cálculos que anteriormente habían estudiado: • la partición raíz (/): 107 CEC-EPN Tema 2 108 CEC-EPN Tema 2 109 La partición /var CEC-EPN Tema 2 La partición /usr 110 La partición /tmp CEC-EPN Tema 2 SWAP: para este caso se necesita escoger solamente el tipo de partición, poniendo: swap 111 CEC-EPN Tema 2 Al finalizar, verificaron que todas las particiones estuvieran bien creadas, y entonces sí apretaron continuar. 2.4.1. GRUB La siguiente pantalla en aparecer les permitió escoger el sistema operativo que arrancará por defecto, como sólo tenían uno, ya apareció marcado por defecto. Además notaron que la pantalla hablaba de algo llamado GRUB, lo cual quedaron en estudiar luego. Entonces, habiéndose cerciorado de cuál era el sistema operativo que arrancaría por defecto, continuaron a la siguiente pantalla: 2.4.2. RED 112 CEC-EPN Tema 2 En esta ventana se puede escoger el nombre de la máquina (hostname): • Asignar manualmente: se le puede poner el nombre directamente en el recuadro. • Automáticamente: si se tiene un servidor de d.C.. Misceláneas: Gateway: puerta por defecto que tienen definida en la red. DNS primario: DNS asignados por los administradores de la red. • DNS secundario: DNS asignados por los administradores de la red. Además notaron que en la parte superior había un botón de EDIT que les permite editar las propiedades de todas las tarjetas de red que tenga el servidor. Se veía así: 113 CEC-EPN Tema 2 En esta ventana en efecto podían asignar una dirección IP estática o dinámica, ya sea en el protocolo IPv4 o IPv6. Como no tienen implementado todavía el protocolo IPv6, lo desactivaron. Al continuar, apareció la siguiente ventana: 2.4.3. Zona Horaria Aunque buscaron a Quito como zona horaria no apareció, por lo que escogieron Guayaquil. Aquí se presentó una tremenda discusión: ¿por qué no aparecía Quito como una zona horaria? Después de cierta investigación contactaron al Ing. Segundo Arevalo, el cual les explicó que las zonas horarias se definen según la ciudad dónde está el reloj de la zona, para el caso del Ecuador, el reloj que mantiene la hora del país está en el INOCAR, en la Base Naval Sur, y es por eso que América/Guayaquil es la opción que se muestra. Para el caso de otros países o las Galápagos, se escogería otra zona. Existe un botón que indica que el reloj del sistema usa UTC, lo desmarcaron, pues este botón asume que la hora del BIOS está en UTC (GMT) y puede desfasar la hora del sistema. 114 CEC-EPN Tema 2 Al apretar continuar apareció: 2.4.4. Clave de root En esta pantalla había que asignar la clave de administrador, el usuario conocido como root en el mundo de Linux. De más estaba definir que esta clave debía ser lo suficientemente compleja, quizá debe contener números y letras en combinación. Ellos definieron su propia clave de root y la guardaron en secreto para que no pudiera entrar ningún atacante. Al apretar Continuar salió: 2.4.5. Selección de Paquetes. 115 Tema 2 CEC-EPN The default installation of CentOS includes a set of software applicable for general internet usage. What additional tasks would you like your system to include support for? □ Desktop - Gnome □ Desktop - KDE Um _c__ . __ cil ___________________________________________________________ Please select any additional repositories that you want to use for software installatlon. □ Packages from CentOS E/tras ^ Add additional software reposltories You can further customize the software selection now, or after ¡nstall via the software management application. © Customize fater Q Customize now Ahora habían llegado a una pantalla muy interesante, donde se podía definir qué grupos de paquetes podían ser instalados, entre ellos encontraron: • Desktop Gnome: instalaría el escritorio Gnome, marcaron en esta opción. • Desktop KDE: instalaría el escritorio KDE, es otro escritorio popular, pero no lo instalaron, pues querían usar GNOME. • Server: diversos servicios como el servidor Web, mail, samba, dns, etc. Definitivamente había que marcarlo, por lo tanto escogieron esta opción. • Development: herramientas de desarrollo, como iban a compilar algunas aplicaciones en el futuro, escogieron instalar estas herramientas. • Virtualization: encontraron en Internet que este era un tema interesante; sin embargo, no lo iban a utilizar ahora, por lo que no lo marcaron. Al marcar el Radio Button que decía "Customize Now" notaron que en continuar se les daba la opción de escoger más al detalle qué paquetes instalar y qué paquetes no.|Como no se quería escoger paquetes al detalle, continuaron: 116 CEC-EPN Tema 2 2.4.6. Listos para instalar 117 CEC-EPN Tema 2 CentOS mostró una pantalla que indicaba que estaba a punto de comenzar a instalar el sistema, advirtiéndo que a partir de ahora, se implementarían todos los cambios anteriormente señalados y se realizaría el proceso de instalación. Apretaron continuar y comenzó el proceso de instalación: Este proceso tomó varios minutos, de 15 a 30, al finalizar la instalación se mostró la pantalla final: 118 119 ________________________________________________ 120 Al apretar el botón de reiniciar (Reboot) no se olvidaron de extraer el DVD, para que la máquina arrancara. Como conclusiones anotaron que: • El instalador lo pregunta todo al inicio. No les molesta con continuas preguntas en medio de la instalación. • En general, como habían comprendido cómo se particionaba el sistema, pudieron instalarlo fácilmente. 2.4.7. Arranque por primera vez Una vez finalizada la instalación, cuando reiniciaron la máquina, notaron que aparecía una pantalla que indicaba que si no se apretaba ninguna tecla en los 5 segundos siguientes, iba a arrancar el CentOS Linux Esta pantalla les di la bienvenida y les comunicó que a continuación podrían hacer aquellos ajustes luego de apretar el botón Forward. Las opciones que se pueden ajustar son: Activar o no el firewall: escogieron que iban a deshabilitar (disabled) el firewall, ya que en el futuro instalarán otro tipo de firewall. 121 Activar o no el SELinux: escogieron que iban a desactivar (disabled) el SELinux, que es un sistema muy avanzado que permite implementar restricciones adicionales de seguridad. Muchas personas reportan que al tenerlo activado el sistema se comporta de una forma poco usual y que tiende a confundir. Una vez que se selecciona esa acción aparece un cuadro de diálogo que advierte que para hacer efectiva la desactivación del SELinux se necesitará reiniciar Linux para que los ajustes hagan efecto. En ese cuadro de diálogo se seleccionará sí (yes). 122 123 Ajustar hora y fecha, se ajustarán la hora y fecha locales. Crear usuarios adicionales al usuario root: da la opción de crear usuarios adicionales al root. Aquí se decidió crear usuarios más tarde, no ahora. Se confirmamos la decisión apretando el botón Continue (continuar) en el cuadro de diálogo que aparece. Ajustar y verificar el sonido: este cuadro buscará y probará el sistema de sonido en la máquina en la cual se está instalando 124 Instalar CD Adicionales: no tenían CD adicionales, por lo que se ignoró este paso. 125 126 III. GESTION DE USUARIOS Y PERMISOS 127 3. GESTION DE USUARIOS Y PERMISOS • Implementa una política para administración de usuarios: grupos, usuarios, permisos. • Configura el sistema buscando mantener privacidad y hacer más fácil la adaptación de usuarios nuevos. 3.1. Usuarios y grupos en Linux Una de las preguntas que surgieron en la capacitación fue ¿dónde se guardan los usuarios en Linux? Esta fue una pregunta que los asistentes al curso se hacían continuamente. En resumen, se determinó lo siguiente: • En el archivo /etc/passwd se guarda la lista de usuarios del sistema. • En el archivo /etc/shadow se guardan las claves encriptadas de cada usuario que exista en /etc/passwd. • En el archivo /etc/group se guarda una lista de grupos y los usuarios de /etc/passwd que pertenecen a esos grupos. Viéndolo con más calma, se analizaron poco a poco todos los archivos: En Linux los usuarios se almacenan en el archivo /etc/passwd, donde no se almacenan las claves, aunque por su nombre lo parezca. Ésta información es La información que se guarda de cada usuario en /etc/passwd es la siguiente (se ha marcado en colores cada parte): 1. username, 2. passwd (ya no se usa) 3. UID, o identificador de usuario. Es un número entre 1 y 65535, típicamente es único para cada usuario del sistema. El UID 0 se utiliza para el usuario administrador (root). Cualquier usuario que tenga UID 0 tendrá derechos de root. Los UID de 1 a 499 se utiliza por el sistema para usuarios creados automáticamente al instalarse paquetes. Del UID 500 en adelante se crean los usuarios propios de nuestro sistema. Esta asignación de UID es automática. 4. |GID, o grupo primario de usuario. Típicamente un número entre 0 y 65535. El GID 0 indica que el usuario pertenece al grupo root (un grupo con muchos derechos) 5. nombre del usuario (campo informativo) 6. directorio base (home dir) 7. shell que se ejecutará Se puede verificar cada uno de los datos al ejecutar el comando tail /etc/passwd, como en el siguiente cuadro: tail /etc/passwd ntp:x:38:38::/etc/ntp:/sbin/nologin haldaemon:x:68:68:HAL daemon:/:/sbin/nologin rpm:x:37:37::/var/lib/rpm:/sbin/nologin hsqldb:x:96:96::/var/lib/hsqldb:/sbin/nologin xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin gdm:x:42:42::/var/gdm:/sbin/nologin named:x:25:25:Named:/var/named:/sbin/nologin sac:x:500:500:segundo arevalo :/home/sac:/bin/bash Por otro lado, la información de cada usuario que se guarda en /etc/shadow es la siguiente: 1. username 2. clave encriptada 3. día en que la clave fue cambiada por ultima vez 4. días durante los que la clave no puede ser cambiada 5. días a partir de los cuales la clave tiene que ser cambiada 6. días de advertencia en los cuales la clave debe cambiarse 7. días después de los cuales la clave expira y se deshabilita la cuenta 8. día en que se deshabilitó la clave Si se ejecuta el comando tail /etc/shadow se conseguirá un cuadro igual al siguiente: tail /etc/shadow ntp:!!:13910:0:99999:7::: haldaemon:!!:13910:0:99999:7::: rpm:!!:13910:0:99999:7::: hsqldb:!!:13910:0:99999:7::: xfs:!!:13910:0:99999:7::: gdm:!!:13910:0:99999:7::: named:!!:13911:::::: sac:$1$a7WFGL6z$88Uzb7eI4C9b89JJxT3Yv.:13911:0:99999:7::: De todos estos campos, los más interesantes son el primero y segundo, ya que permiten manejar la clave del usuario (se ha marcado en colores cada campo). 3.1.1. Proceso que se sigue para crear un usuario El proceso completo para la creación de un usuario es el siguiente: 1. Se lee /etc/defaults/useradd donde se encuentra la información sobre el shell por defecto a asignar a los usuarios nuevos (/bin/bash). Nosotros podemos ver /etc/defaults/useradd con el comando cat, para enterarnos de qué dice. 2. Se crea un nuevo grupo en /etc/group, con el nombre del usuario que se está creando; este GID será el que se asignará en /etc/passwd. 3. Se agrega una línea en /etc/passwd, donde se almacenará el identificador de usuario (UID), el grupo primario del usuario (GID), el directorio raíz, el shell que se ejecutará para el usuario. 4. Luego se crea una línea en /etc/shadow donde se indicará el username y la clave en formato deshabilitado (!!), así como opcionalmente los tiempos de expiración de las claves, etc. 5. A continuación se sigue con el directorio raíz del usuario (usualmente /home/username). 6. Posteriormente se debe proceder a cambiar la clave del usuario por una válida, y se actualiza /etc/shadow con la nueva clave. Estas claves son encriptadas en una vía, por lo tanto no se pueden obtener las claves intentando desencriptarlas. 3.1.2. Comando para realizar los pasos anteriores. El comando para agregar usuarios es useradd, este comando no le asigna clave a un usuario, sólo lo crea. Desde el shell pongamos: useradd sac Este comando realizará todas las acciones anteriormente explicadas: Agregará el usuario sac con el primer UID disponible mayor o igual que 500. Le crea un directorio raíz (/home/sac) y le asigna el shell que esté listado en /etc/default/useradd. Luego de agregarlo se debe poner una clave con el comando passwd: passwd sac Tema 3 CEC-EPN t oobgsac: File Edit View Terminal Tabs Help [root@sac -]# passwc sac Changing password for user sac. New UNIX password: Retype new UNIX password: | ` El sistema verificará que la clave no sea fácil de descubrir y le asignará esta clave al usuario para operar en todo el sistema. El comando passwd se puede usar también para cambiar la clave de cualquier usuario cuando este está como usuario root passwd usuario Changing password for user sac. New UNIX password: El mismo comando sirve para que cualquier usuario pueda cambiar su propia clave ejecutándo desde su shell de usuario: passwd 3.1.3. Como borrar usuarios Para hacerlo se debe ejecutar el comando: userdel -r usuario El switch -r indicará que no solo se borrará al usuario, sino que además se borrará el directorio de usuario, de lo contrario no lo borraría y el FileSystem se quedaría con información inútil. 3.1.4. Como cambiar el Shell predeterminado La mayoría de los usuarios que se crean en un sistema Linux se usan solo como servidor de mensajería, es decir que los usuarios no acceden directamente al shell del sistema, sino que usan sus contraseñas para leer los correos y/o enviarlos, así como para potencialmente hacer otras tareas como acceder via ftp. Entre los usuarios que se tendrá (nivel gerencial, secretarias, ingenieros de otras áreas, etc.) casi nadie conoce el uso del shell, por lo tanto no es necesario que lo tengan. De esta forma hay un potencial ahorro de problemas a la hora de un ataque, pues muchos hacen lo que se conoce como un ataque de diccionario, mediante el cual intentan adivinar las claves de los usuarios de un sistema para poder entrar por esa vía. Una vez dentro intentarán otros métodos (que se explicarán en cursos más avanzados) mediante los cuales pueden obtener privilegios de root. 132 CEC-EPN Tema 3 Por lo tanto, para leer correos y usar ftp no es necesario que un usuario tenga asignado un shell como bash, pues ello más bien sería un potencial problema. Por eso es recomendable que siempre que se cree este tipo de usuarios se haga con un shell no válido o un shell que no deje entrar al usuario. Por ejemplo, se puede cambiar, usando vi /bin/bash por /bin/false Ahora, cambiar en /etc/passwd unos 10 usuarios es algo posible, a diferencia de hacerlo con unos 50 ó 100, y en la escuela Mentes Libres se tendrían que crear muchos usuarios. Por eso es mejor crear todos los usuarios con un shell que no sea /bin/bash. Esto se puede lograr editando /etc/defaults/useradd. Se debe cambiar la línea que dice: SHELL=/bin/bash por SHELL=/bin/false De esta forma cualquier usuario que se cree a partir de ahora será creado con el shell /bin/false. Para verificarlo, se creará un usuario nuevo con el nombre sac (el nombre del director de la escuela), hay que poner atención en que, una vez creado el usuario sac sea /bin/false su shell por defecto en /etc/passwd (verificar con cat /etc/passwd). Si el usuario usa /bin/bash puede entrar a nuestro sistema, por ejemplo desde la primera consola de texto (aprieta CTRL ALT F1). Si quieres regresar al ambiente gráfico puedes apretar ALT F7 3.2. Subtitute user (su) su permite cambiar rápidamente de un usuario a otro. su requiere de un parámetro opcional: • su - usuario: permite cambiar a "usuario" • su - : permite cambiar a "root" 133 Tema 3 CEC-EPN Por ejemplo, supongamos que estamos en un shell (por ejemplo en la primera consola de texto) con el usuario sac, y queremos cambiar de sac a prueba. Primero se debe verificar qué usuario se está utilizando. Para ello se usará el comando whoami (who am I?, es decir, ¿quién soy?). Así se ha verificado la entrada como usuario sac: whoami sac Entonces se escribe: su prueba Password: (La clave que se debe poner es la del usuario al que se va a convertir, en este ejemplo será: prueba, por favor verificar que tengamos creado ese usuario previo a hacer su prueba) Y en efecto, al escribir la clave y dar enter, el usuario se habrá convertido en prueba. Se puede verificar: whoami prueba Si quisiera cerrar la sesión del usuario prueba debería apretar control d, para regresar automáticamente al usuario sac, y salir del shell. A continuación el usuario debería verificar esto apretando control d. Ahora el usuario se convertirá de sac en root: Hay que verificar que el nombre de usario sea sac: whoami sac Para convertirse en root no es necesario poner el nombre, es suficiente escribir: su Password: Es necesario recordar que la clave que se debe escribir es la clave de root. 134 Tema 3 CEC-EPN Es importante recordar que para salir del shell se escribes: control d y esto te regresará al usuario anterior (sac en este caso es el usuario anterior) Si se quiere cambiar desde el usuario root hacia otro usuario se lo puede hacer sin tener que conocer la clave del segundo, por ejemplo, entremos como el usuario root y pongamos: whoami root su - sac $ En efecto, no hizo falta poner la clave de sac. En resumen: • El usuario root se puede convertir en cualquier otro usuario sin necesidad de clave. • Cada vez que ejecute el comando su, como un usuario no privilegiado, se solicitará la clave del usuario al que se quiera convertir. • Al cambiar de usuario no se pierde el usuario anterior, sino que el nuevo se sobrepone al anterior, hasta salir, apretando control-d. 3.3. Sudo – Super USer DO El comando su es muy interesante, solo que es necesario conocer la clave de cada usuario en el que el usuario original se quiera convertir. Por ejemplo: para convertirse en root el usuario necesita conocer su clave. Sin embargo, hay ocasiones en que se precisa que un usuario no privilegiado (como el usuario que creado sac) realice labores como super usuario, pero no se quiere que conozca la clave de root, como en el caso de una persona que ayude en la administración de un laboratorio y que deba realizar ciertas labores sin tener que conocer la clave de root. En estos casos esa persona podrá utilizar el comando sudo, ya que es un comando que permite que usuarios autorizados ejecuten ciertas (o todas) tareas que pueda 135 CEC-EPN Tema 3 hacer el usuario root, sin la necesidad de saber la clave de éste. La clave que el sudo pedirá será la del usuario y no la de root. El sudo también lleva un registro histórico de qué comandos ejecutó un usuario como root y a qué hora. Para poder usar el comando sudo se debe editar el archivo donde se guardan los permisos de sudo, que se llama /etc/sudoers. Para editar el archivo sudoers se usará el comando visudo Visudo 3.3.1. Formato del archivo de sudores El archivo sudoers tiene el siguiente formato: La estructura es muy simple (se ha marcado en colores cada parte): <usernames|group> <server=[ALL]|IP>[(usuario que ejecutará)] <comando> Hay algunas consideraciones que se deben tener: En la primera columna (usernames/groups) se pondrá el nombre de los usuarios a quienes se les permitirá usar el comando sudo. Para añadirlos, solamente hay que escribirlos tal y como aparecen en /etc/passwd. Si se va a incluir a más de un usuario, se lo puede hacer escribiendo los nombres separados por por coma, por ejemplo: sac,btapia. Cuando se quiera añadir grupos de usuarios se debe indicar su nombre anteponiéndole un %. Por ejemplo, el grupo users se representa como %users. La segunda columna <server=[ALL]|IP> se usa para especificar desde qué servidor podrán utilizar el sudo los usuarios a los asignados. El comando sudo permite que se ejecute entre servidores. Normalmente sudo se usa desde el mismo servidor, por lo que siempre utilizaremos la palabra clave ALL en la segunda columna. Esta palabra clave puede ser usada en las tres últimas columnas. Significa todos o cualquiera, sean estos usuarios, servidores o comandos (según la columna donde se la ponga). La tercera columna indicará en qué usuarios podemos convertirnos. Típicamente se especifica ALL para indicar que nos podemos convertir en cualquier usuario (root es el objetivo que normalmente nos interesa). 136 Tema 3 CEC-EPN En la cuarta columna (comandos) se pueden especificar mútiples comandos, separándolos por coma, o todos los comandos, utilizando la palabra clave ALL. Para especificar algunos comandos se debe indicar la ruta completa de acceso, por ejemplo: /bin/cat. • Delante de los comandos a ejecutar se puede agregar la palabra: NOPASSWD: (es importante fijarse en el signo de : al final) de forma tal que cuando el usuario necesite utilizar el sudo, no se le pedirá ninguna clave. o Ejemplo, se le dará al usuario sac derecho a todos los comandos, sin necesidad de clave: sac ALL=(ALL) NOPASSWD: ALL Ejemplos: Con el usuario no privilegiado creado, el usuario deberá probar los siguientes ejemplos 3.3.2. Dar accerso total a usuarios específicos: 3.3.2. Dar acceso total a usuarios específicos: Con visudo se pueden intentar los siguientes comandos. Visudo requiere que el usuario sea root, por lo tanto se debe abrir dos consolas (dos shells), en una trabajaremos como root para dar el permiso y en la otra como el usuario no privilegiado para realizar las pruebas: En la consola que estamos como root se editará el archivo sudoers (visudo) y asignaremos a nuestro usuario sac todos los derechos: sac ALL=(ALL) ALL El usuario sac podrá ejecutar como superusuario cualquier comando (es el último ALL el que especifica cualquier comando). Desde la consola del usuario sac, se ejecutará: cat /etc/shadow cat: /etc/shadow: Permission denied Como se puede observar en el mensaje de error, el usuario sac no puede ver el 137 Tema 3 CEC-EPN archivo /etc/shadow (pues solo root tiene permiso para verlo). Usando sudo se debe recordar que si se pidiera clave, sería la clave de usuario sudo cat /etc/shadow root:$1$hXrruiLl$4p38ASaYPDEdQEnQuDVl70:13910:0:99999:7::: bin:*:13910:0:99999:7::: daemon:*:13910:0:99999:7::: adm:*:13910:0:99999:7::: lp:*:13910:0:99999:7::: sync:*:13910:0:99999:7::: Como se puede observar, al ejecutar el comando cat a través de sudo el usuario se ha convertido en root, es por eso se puede ver el archivo /etc/shadow que solo root puede ver. 3.3.3. Dar acceso a comandos especificos Con visudo se puede editar los permisos del usuario sac, le ponemos así: sac ALL=(ALL) /bin/cat,/sbin/ El usuario sac podrá ejecutar como super usuario el comando /bin/cat y/o cualquier comando que esté dentro de /sbin/. 3.3.4. logs: Supervisar las acciones de los los usuarios a través de los Se pueden mirar dentro de /var/log/secure las acciones que los usuarios han realizado a través de sudo. Por ejemplo las líneas finales del log sac dicen: Feb 23 12:37:05 sac sudo: sac : TTY=pts/0 ; PWD=/home/sac ; USER=root ; COMMAND=/bin/cat /etc/sudoers Feb 23 12:51:24 sac sudo: sac : TTY=pts/0 ; PWD=/home/sac ; USER=root ; COMMAND=/bin/cat /etc/shadow Feb 23 13:00:05 sac sudo: sac : TTY=pts/0 ; PWD=/home/sac ; USER=root ; COMMAND=/bin/su Feb 23 13:00:05 sac su: pam_unix(su-l:session): session opened for user root by sac(uid=0) Como se puede analizar en los logs, el usuario sac, el día 23 de febrero a las 138 CEC-EPN Tema 3 12:37:05, ejecutó con sudo el comando /bin/cat /etc/sudoers A las 12:51:24 ejectó /bin/cat /etc/shadow A las 13:00:05 ejecutó con sudo el comando su Éste último comando es interesante, lo se hizo fue obtener el shell de root (con su -) pero sin conocer la clave de root sino mediante la del usuario específico. Así que hay que tener mucho cuidado con especificar ALL en la columna de los comandos, pues también se incluye el comando su. 3.3.4. Manejo de quotas Las cuotas es una de las características más interesantes y fundamentales de Linux. Mediante este sistema podemos manejar un correcto y adecuado uso del disco por parte de nuestros usuarios. Una de las mayores utilidades de las cuotas (y no la única) es para controlar la cantidad de espacio en disco que ocupan los correos de los usuarios. También se pueden usar en caso de que estemos manejando linux como servidor de archivos de windows (samba) para asignarle espacio a los directorios de usuario. Las cuotas se manejan basadas en particiones, por lo que debemos definir en qué particiones las activaremos. Por ejemplo, para los usuarios que hacen POP3, podríamos activar las cuotas para la partición /var, pues es en /var/spool/mail donde se almacenan los correos de estos. Otra definición importante de las cuotas es determinar qué espacio asignaremos a cada usuario, por ejemplo, siempre sugerimos al menos asignar 20mb de espacio en disco para cada usuario de correo que tengamos, por lo tanto si tenemos 500 usuarios, debemos preveer que podemos tener un máximo de 500*20=10000MB o lo que es lo mismo un disco de 10GB de tamaño. Por supuesto es un caso bien raro el que las cuotas de TODOS los usuarios se llenen a la vez, pero puede suceder. Las cuotas se pueden manejar de dos formas en linux: 1. Cantidad de inodos por usuario 2. Cantidad de Bloques por usuario La cantidad de inodos es en efecto eso, la cantidad máxima de ficheros que podrá crear un usuario bajo su control, bajo su propiedad. Es muy útil porque hay usuarios 139 CEC-EPN Tema 3 que por error crean programas que comienzan a generar millones de pequeños archivos (posiblemente de 0bytes) que van consumiendo todos los inodos del sistema. No es un hecho intencionado, pero nos puede dar un buen trabajo determinar quién está consumiendo todos los inodos del sistema. Ahora en estos momentos, pocos usuarios son los que acceden directamente al shell a ejecutar sus "propios" programas, por lo que poner control en los inodos no es algo muy ventajoso. Las cuotas siempre se manejan para controlar el espacio en disco que consume el buzón de correo de los usuarios.. y el buzón consta de un sólo inodo ya que se usa el formato mbox que consiste en un sólo archivo donde se almacenan secuencialmente todos los mensajes. Es por esto que no haremos mucho énfasis en los inodos, pero sí en la segunda forma de controlar las cuotas por bloques, o espacio en disco. Esta es una forma que todo el mundo comprende, sencillamente podemos decir que un usuario no puede consumir más de 5mb o 20mb en disco y listo, si intentara consumir más espacio en disco, el sistema no le dejará. Así de simple. Las cuotas además tienen dos límites o techos: • soft quotas • hard quotas La hard quota es mucho más fácil de entender y es sencillamente las que todos usamos, este es un valor que cuando el usuario alcance, el sistema no le dejará escribir más en el disco. La soft quota es una cuota que puede ser sobrepasada durante un determinado tiempo (llamado grace period y se mide en días), por ejemplo: Un usuario tiene una soft quota de 20 megas y una hard quota de 40 megas: El usuario puede usar en un determinado instante 25 megas, esto es, se ha pasado de la soft quota, el sistema activará instantáneamente un contador donde irá descontando el periodo de gracia que le da al usuario para respetar la soft quota. Este periodo de gracia es por defecto 7 días, es decir, este usuario durante 7 días podrá excederse de 20 megas (pero nunca sobrepasar los 40 de la hard quota), si durante algún momento de estos 7 días , el usuario baja a menos de 20 megas, el sistema resetea el contador y no ha pasado nada. Si el usuario alcanza los 7 días 140 Tema 3 CEC-EPN sobrepasado de cuota, el sistema no le dejará escribir nada más hasta que no baje su uso de disco a menos de lo establecido en la soft quota. Las softquotas es un sistema bonito e interesante, para manejar ciertos picos esporádicos que puedan suceder. Sin embargo, es muy difícil de explicarle a un usuario no conocedor, esto es, cómo decirle a un gerente o al contador de la empresa que sí pudo escribir la semana pasada, pero ahora tiene que bajar a 20 megas de los 35 que está usando porque la soft quota o la hard quota, etc, etc.. ellos no lo comprenderán muy bien y podemos buscarnos más problemas que soluciones. Por lo tanto, sugerimos que la soft quota siempre sea igual o muy parecido a la hard quota, esto es, al alcanzarse un valor predeterminado sencillamente el sistema no dejará escribir al usuario y listo, no hay que explicarles más, ellos sí entienden de las cuotas duras (hard quotas). 3.3.4.1. Activando las cuotas Activar las cuotas es un proceso bastante simple, pero antes hablemos de un archivo muy importante en nuestro sistema llamado /etc/fstab fstab contiene todas las particiones que son montadas en nuestro sistema, de la forma: partición punto montaje tipo de fs opciones del fs dump/check por ejemplo hagamos: cat /etc/fstab y veremos varias lineas parecidas a esta: LABEL=/var /var ext3 default 1 2 esto le pedirá a Linux que monte la partición llamada (etiquedata): "/var" en /var que tiene un formato ext3, que lo monte con las opciones por defecto (lectura, escritura: r/w) y que chequee (numero 2) en caso de caerse intempestivamente el sistema (dump, la penúltima columna, no se usa). Para activar las cuotas, debemos poner dos opciones más al filesystem que debemos activar. Esto se hace agregando una opción que le indicará al kernel que active las cuotas de usuario y grupo al filesystem. Por ejemplo: LABEL=/var /var ext3 default,usrquota,grpquota 1 2 Entonces debemos reiniciar el sistema para que las cuotas queden activadas. 141 CEC-EPN Tema 3 Al reiniciar el sistema este procederá a revisar el sistema y activar el archivo donde se guardan las cuotas. 3.3.4.2. Verificando las quotas El comando para verificar las quotas de los usuarios es: quota usuario nos indicaría algo así: Disk quotas for user sac (uid 500): Filesystem blocks quota limit grace files quota limit grace /dev/hdd2 28 32000 32000 7 0 0 estamos usando 28 bloques (28kb) de un total de 32000 kb permitidos (32megas) Por supuesto los usuarios que hayamos creado y no les hayamos asignado las cuotas nos indicarán que la cuota es ilimitada. Por ejemplo, el usuario root NUNCA debe tener cuotas, pues maneja diferentes archivos de sistema: [root@sac ~]# quota root Disk quotas for user root (uid 0): none Otro comando para revisar las quotas de los usuarios es: repquota -a El cual nos dará un reporte de las quotas de TODOS y cada uno de los usuarios del sistema, mostramos una breve página: *** Report for user quotas on device /dev/hda7 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace root -- 8485596 0 0 44422 0 0 SITE154logs -- 3808 0 0 1 0 0 SITE227-logs -4904 0 0 721 0 0 acomercial2 -- 64 20480 21504 13 0 0 sistemas -- 9756 20480 21504 44 0 0 Por ejemplo el usuario sistemas tiene consumidas 9756KB (bloques) de los 20480 kb (bloques) permitidos en suave, 21504 bloques (duros). Tiene 44 archivos utilizados pero no tiene límites (0) suaves ni duros. 3.3.4.3. Como hacemos para editar las coutas Cada usuario que creemos nuevo viene sin cuotas predefinidas (uso ilimitado), por lo tanto debemos definirle estas para que comiencen a funcionar. El comando edquota nos permite manejar las cuotas de usuarios: edquota -u sac 142 CEC-EPN Tema 3 Nos mostrará en el vi, un resumen de las cuotas, de ahi podemos cambiar el valor que aparece debajo de soft y debajo de hard, y poner un valor en KB, correspondiente a las cuotas, por ejemplo, pongamos: 20000 en cada uno de ellos, esto sería una cuota de 20megas al usuario. Aprovechemos la oportunidad para comentar que los valores no tienen que quedar precisamente ajustados debajo de la cuota (suave o dura), una vez salvado el sistema ajustará las posiciones. Al finalizar salvamos los cambios y listo, la cuota está preparada. Podemos hacer un su - a este usuario (su - sac, en mi caso) y tratar de copiar algunos archivos desde /usr ( cp -a /usr . ) y veremos que cuando se cumpla el espacio de cuota asignado por nosotros, esta fallará con un error descriptivo. 3.3.4.4. Ajustando las coutas en masa Si tuviéramos muchos usuarios a los que quisiéramos editar las cuotas, podemos usar este pequeño script que por defecto cambiará las cuotas de todos los usuarios por las cuotas que tenga asignado el usuario sac (cambiar por el usuario tipo, o plantilla de uds): edquota -p sac "awk -F: '$3 > 499 {print $1}' /etc/passwd" esto significa algo así: edita las cuotas de todos los usuarios que existen en /etc/passwd, cuyos uid sea mayor a 499, y toma como plantilla las cuotas del usuario sac. Por supuesto, primero tendremos que haber habilitado algún usuario con sus cuotas (sac en mi caso) para tomar a ese usuario de base para replicar los valores en el resto de usuarios. 3.3.5. Manejo de permisos Días atrás, al ejecutar el comando ls -l (listado extendido), se vio que las primeras columnas de ese listado decían algo así: -rw-rw-r-- 1 sac sac 2748 Feb 22 19:01 nuestroserver.png drwxr-xr-x 3 sac sac 4096 Mar 4 14:15 Desktop Al leer esto con atención se podrían deducir algunos datos (se ha marcado en colores cada caso): 1. nombre del archivo 2. hora 3. día y mes 143 CEC-EPN Tema 3 4. tamaño (en bytes) Pero las otras columnas ¿qué significan?, ¿por qué en el ejemplo aparece sac sac? Después de leer un manual sobre permisos y usuarios se lograró resumir el proceso en las siguientes consideraciones: Los nombres que aparecen son el usuario y el grupo de propietarios del archivo o directorio, respectivamente. Por ejemplo ll /home/ total 32 drwx ..... 5 dsl dsl 4096 Feb 8 19:40 dsl drwx ..... 60 sac sac 4096 Mar 5 21:36 sac drwx ..... 2 root root 16384 Feb 1 12:58 lost+found drwxr-xr-x 20 root root 4096 Feb 1 21:39 mnt drwx--x—x 4 prueba prueba 4096 Feb 29 21:38 prueba Se puede deducir que el dueño del directorio dsl es el usuario dsl, y el grupo dsl (se ha marcado en colores cada caso). En RedHat/CentOS cada usuario tiene su propio grupo, es por eso que cada archivo o directorio tiene un usuario y grupo con el mismo nombre. Ahora, los primeros diez caracteres (en amarillo en la tabla anterior) son los tipos de archivos y permisos: • El primer caracter puede ser una - , que significa que es un archivo, o una d si fuera un directorio, también puede ser una l, que indicaría que es un link (enlace directo). • Los siguientes nueve caracteres se dividen en 3 grupos de tres e indican o Los tres primeros: permisos para el usuario dueño (user). o El segundo grupo de tres: permisos para el grupo dueño (group). o El tercer grupo de tres: permisos para los otros (other). Por ejemplo: -rw-rw-r-- 1 sac sac 177341 Feb 22 20:17 bienvenidos-nuestroserver.mp3 drwxrwxr-x 2 sac sac 4096 Mar 6 08:04 bin 144 GESTION DE USUARIOS Y PERMISOS 145 • En el primer caso, el archivo se llama bienvenidos-nuestroserver.mp3 y tiene 177341kb de tamaño, el usuario dueño Es un es: sac, el grupo dueño es: sac porque el primer caracter es un o o Los permisos para el usuario dueño son rwo Los permisos para el grupo dueño son: rwo Los permisos para los demás (otros) usuarios son: r-- • En el segundo caso, el directorio se llama bin, y tiene 4k de tamaño, el usuario dueño es: sac, el grupo dueño es: sac. o Es un directorio porque el primer caracter es una d. o Los permisos para el usuario dueño son rwx. o Los permisos para el grupo dueño son: rwx. o Los permisos para los demás (otros) usuarios son: r-x. Pero ¿qué significan esas letras? • r: permiso de lectura. • w: permiso de escritura. • x: permiso de ejecución (si es un directorio, el permiso indica que se puede entrar al directorio). • La inexistencia de uno de los permisos (leer, escribir o ejectuar) se representa con un -. Ahora el usuario deberá reconocer, con esta notación, qué tipo de permisos habría en los siguientes ejemplos: 1. rwxrwxr-2. rwxrw-r-3. rw-r --1. El usuario dueño y el grupo tienen todos los permisos, los otros solo pueden leer. 2. El usuario dueño tiene todos los permisos, el grupo puede leer y escribir, mas no ejecutar, y los otros solo pueden leer. 3. El dueño puede leer y escribir, el grupo sólo puede leer y los otros no pueden hacer nada. 145 GESTION DE USUARIOS Y PERMISOS 146 Como se ve, aquellas letras que parecían tan complicadas solamente explican qué tipo de permisos tienen los archivos en cuestión. 3.5.1. Otra forma de referirse a los permisos Alguien que había recibido hace muchos años un curso de Unix, insistía en indicar que el profesor de aquel curso usaba números en vez de las letras antes mencionadas, por ejemplo, este permiso: • rwxrw-r-- él insistía en que se decía: 764 Así que le pidieron explicara un poco más el proceso de numeración que reemplazaba a las 9 letras. Cada grupo de permisos constaba de 3 letras que totalizaban 9 caracteres, y al dividir el permiso anterior se ve lo siguiente: • rwx • rw- • r-Al asignar en notación binaria el valor de 1 cuando las letras están activas y el valor de 0 cuando no lo están (-)? quedaría lo siguiente: • rwx quedaría como: 111 (las tres letras están activas) • rw- quedaría como 110 • r-- quedaría como 100 Ahora, al convertir estos números binarios a decimales, estas son las posibles Caracteres rwx rwr-x r-- Binario 111 110 101 100 000 Decimal 7 6 5 4 0 — Según la tabla anterior: variantes: 146 GESTION DE USUARIOS Y PERMISOS • 147 rwxrw-r-- se leería como: 764 (rwx es igual a 111, que es igual a 7; rw- es igual a 110, que a su vez es igual a 6; r—es igual a 100 y a su vez igual a 4). Ejercicios: • rw ----- • r ------ • rw-rw-rw- • r--r--r-• rwxr--r-Respuestas: • 600 • 400 • 666 • 444 • 744 Es un poco complicado de usar, pero increíblemente hay muchas personas que prefieren este formato, pues es más conciso para expresar un permiso. 3.3.5.1. Comandos para cambio de permisos y usuarios. Cambio de usuario propietario El comando chown (change owner o cambiar propietario) sirve para cambiar al propietario de un archivo o directorio. Para utilizar este comando primero se crea un archivo llamado prueba. Desde el usuario root se utilizará el ya conocido comando touch: [root@sac ~]# touch prueba [root@sac ~]# ls -l prueba -rw-r--r--1 root root 0 Mar 9 21:01 prueba Resultó un archivo llamado prueba, con el dueño root y el grupo dueño root. Los permisos eran 644. Para cambiar el dueño de un archivo se utilizará el comando chown con la sintaxis como se explica a continuación: 147 GESTION DE USUARIOS Y PERMISOS 148 chown nuevousuario nombredearchivo por ejemplo: [root@sac ~]# chown sac prueba [root@sac ~]# ll prueba -rw-r--r--1 sac root 0 Mar 9 21:01 prueba El comando chown hizo que el usuario sac sea el dueño del archivo prueba. No alteró los permisos, que se mantienen como 644. Cambio de grupo propietario Si se quiere cambiar de grupo de usuarios propietarios hay dos opciones: a. El comando chgrp (change group), que cambia el grupo propietario Tiene la siguiente sintaxis: chgrp nuevogrupo nombredearchivo permite cambiar solamente el grupo, por ejemplo: [root@sac ~]# ll prueba -rw-r--r--1 sac root 0 Mar 9 21:01 prueba [root@sac ~]# chgrp sac prueba [root@sac ~]# ll prueba -rw-r--r--1 sac sac 0 Mar 9 21:01 prueba En efecto, el archivo inicialmente pertenecía al grupo root y después de ejecutar el comando CHange GRouP este pasó a pertenecer al usuario sac. b. El comando chown, con otra sintaxis, que cambia el grupo propietario y el usuario propietario a la vez. El formato para utilizar el comando chgrp con esta función es: chown nuevousuario.nuevogrupo nombredearchivo Por ejemplo, para ponerle a este archivo el usuario root y el grupo root, ambos en un solo comando, se usaría: 148 GESTION DE USUARIOS Y PERMISOS 149 [root@sac ~]# ll prueba -rw-r--r--1 sac sac 0 Mar 9 21:01 prueba [root@sac ~]# chown root.root prueba [root@sac ~]# ll prueba -rw-r--r--1 root root 0 Mar 9 21:01 prueba Además del signo de punto (.) se puede usar el signo dos puntos (:) para separar usuario de grupo en caso de que el nombre de los usuarios y/o grupos contuvieran un punto (.) . Por ejemplo, con un usuario o grupo llamado: e.perez, si se usara el signo de . no se podría determinar bien dónde acababa el nombre del usuario y dónde comenzaba el del grupo. Es por esto que muchas personas prefieren usar los dos puntos siempre. En consecuencia, el siguiente comando es equivalente. [root@sac ~]# ll prueba -rw-r--r--1 sac sac 0 Mar 9 21:01 prueba [root@sac ~]# chown root:root prueba [root@sac ~]# ll prueba -rw-r--r--1 root root 0 Mar 9 21:01 prueba Cambio de permisos El comando chmod permite cambiar los permisos para cada grupo de usuario. Tiene dos formas: 1. Mediante los números convertidos de binario (755, 600, etc). 2. Mediante el uso de caracteres identificando a los usuarios/grupos y a los permisos. 1- Números binarios: Para cambiar los permisos se pueden utilizar los números convertidos en binarios con el siguiente formato: chmod nuevopermiso nombredearchivo Por ejemplo: [root@sac ~]# ll prueba -rw-r--r--1 root root 0 Mar 9 21:01 prueba 149 GESTION DE USUARIOS Y PERMISOS 150 [root@sac ~]# chmod 400 prueba [root@sac ~]# ll prueba -r- ------ 1 root root 0 Mar 9 21:01 prueba El archivo inicialmente tenía de permisos rw-r--r-- (644) y al ejecutar el chmod 400 prueba, se cambiaron a r ----- (400). 2- Uso de caracteres para identificar usuarios/grupos y permisos. Esta forma en cambio es muy cómoda porque permite identificar precisamente lo que se realiza. El formato es muy parecido: chmod nuevopermiso nombredearchivo La parte de nuevopermiso está formada a su vez por 3 partes: • A quien se le asignará el permiso: usuario (u), grupo (g), otros (o) y/o todos (a) • El permiso se quitará (-); pondrá (+); o se ignorará los permisos previos (=) • ¿Sobre qué permiso se trabajará?: Lectura (r), Escritura (w), y/o ejecución (x) Por ejemplo, si quisiera dar el permiso de lectura para todos, podría poner: [root@sac ~]# ll prueba -r ........ 1 root root 0 Mar 9 21:01 prueba [root@sac ~]# chmod a+r prueba [root@sac ~]# ll prueba -r--r--r-- 1 root root 0 Mar 9 21:01 prueba En efecto, al poner a+r (Todos, darle, lectura), el archivo prueba se cambió a r--r--r-(666) Otra manera de hacer la misma acción es poniendo: chmod ugo+r prueba En la primera parte, en la que se señaló a quién se le darán los permisos, se puede poner más de una opción, como en el caso anterior: a (todos) es equivalente a ugo (usuarios, grupos y otros). 150 GESTION DE USUARIOS Y PERMISOS 151 De igual manera, en la parte en la que se específicó qué permisos se están modificando, se tiene más de una opción. Por ejemplo, si se busca dar derecho de escritura y ejecución al usuario dueño y al grupo, debería ponerse: [root@sac ~]# ll prueba -r--r--r-- 1 root root 0 Mar 9 21:01 prueba [root@sac ~]# chmod ug+wx prueba [root@sac ~]# ll prueba -rwxrwxr-- 1 root root 0 Mar 9 21:01 prueba El signo = sirve para ignorar los permisos previos y cambiar los permisos a los solicitados. Por ejemplo, darles a todos solamente permisos de lectura: [root@sac ~]# ll prueba -rwxrwxr-- 1 root root 0 Mar 9 21:01 prueba [root@sac ~]# chmod ugo=r prueba [root@sac ~]# ll prueba -r--r--r-- 1 root root 0 Mar 9 21:01 prueba Al poner ugo=r se indica: a los usuarios, grupo y otros,(u g o) ponerles (=) permisos de lectura (r). Se ignoran los permisos que había antes y se modifican los permisos. Cambiar permisos a los directorios: Cualquiera de los comandos antes mencionados puede utilizarse para cambiar los permisos o dueños de un directorio. Si se quiere cambiar los permisos recursivamente se utilizará el ya conocido switch -R para que se cambien los permisos al directorio y a todos los archivos y directorios que están dentro de él. Por ejemplo, al crear un directorio llamado: test que contenga un directorio llamado uno y otro llamado dos [root@sac ~]# mkdir test [root@sac ~]# mkdir test/uno [root@sac ~]# mkdir test/dos [root@sac ~]# ll test/ 151 GESTION DE USUARIOS Y PERMISOS 152 total 8 drwxr-xr-x 2 root root 4096 Mar 9 21:28 dos drwxr-xr-x 2 root root 4096 Mar 9 21:28 uno [root@sac ~]# ll drwxr-xr-x 4 root root 4096 Mar 9 21:28 test Estos directorios eran propiedad de root y el grupo root. Para cambiarles el dueño y el grupo a sac se haría: [root@sac ~]# chown -R sac.sac test [root@sac ~]# ll drwxr-xr-x 4 sac sac 4096 Mar 9 21:28 test [root@sac ~]# ll test/ drwxr-xr-x 2 sac sac 4096 Mar 9 21:28 dos drwxr-xr-x 2 sac sac 4096 Mar 9 21:28 uno El switch -R cambió el dueño y grupo al directorio y a todos los directorios y archivos que estaban dentro de ese directorio. Este mismo switch puede ser utilizado con chmod y chgrp. 152 IV. GESTION DE UNIDADES DE ALMACENAMIENTO Y SISTEMAS DE ARCHIVOS 153 GESTION DE UNIDADES DE ALMACENAMIENTO Y SISTEMAS DE ARCHIVOS 4. 154 GESTION DE UNIDADES DE ALMACENAMIENTO Y SISTEMAS DE ARCHIVOS. 4.1. UBICACIÓN DE ARCHIVOS Y DIRECTORIOS Los directorios y archivos de un sistema Linux tiene una estructura estándar, algunos de los directorios son: /boot Mantiene el kernel e información indispensable para el arranque del sistema. /bin Mantiene unos pocos programas que estarán disponibles incluso en los modos de ejecución más restringidos (e.g. bash, cat, ls, login, ps). /sbin Mantiene programas disponibles sólo para el administrador incluso en los modos de ejecución más restringidos (e.g fsck, getty, halt). /usr Programas accequibles a usuarios finales y datos de estos programas que no requieren ser modificados (datos de sólo lectura). Algunos de sus subdirectorios son: bin, games Programas disponibles para todos los usuarios. 154 GESTION DE UNIDADES DE ALMACENAMIENTO Y SISTEMAS DE ARCHIVOS 155 sbin Herramientas para el administrador. dict Diccionarios --usados por ejemplo por ispell y look. share Datos de diversos programas, entre sus subdirectorios están: doc, man y info que contienen documentación; locale, i18n que mantiene información sobre internacionalización (locale); zoneinfo que mantiene información sobre zonas horarias. doc, info, man Enlaces o complementos a la documentación disponible en /usr/share/doc, /usr/share/info y /usr/share/man. lib Librerías de funciones comunes a varios programas (algunas como libc indispensables para todos). include, src Encabezados de algunos componentes del sistema y fuentes de algunos programas. 155 GESTION DE UNIDADES DE ALMACENAMIENTO Y SISTEMAS DE ARCHIVOS 156 X11R6 Programas y datos de X-Window. local Otros programas y datos compilados por el administrador i.e no provienen de paquetes Debian. En algunos sistemas otros programas se ubican en /opt. /floppy, /cdrom, /mnt Directorios para montar disquettes, CD-ROMs y otros sistemas de archivos o dispositivos. /proc Diversos canales de comunicación con algunos programas (por ejemplo con el kernel). /lib Librerías indispensables y módulos (especialmente requeridas durante el arranque del sistema). /etc Archivos de configuración de diversos programas. /dev 156 GESTION DE UNIDADES DE ALMACENAMIENTO Y SISTEMAS DE ARCHIVOS 157 Abstracciones a los dispositivos conectados (o que podrían conectarse) al computador. /home Mantiene información de los usuarios del sistema. /root Mantiene información del administrador del sistema. /tmp Archivos temporales creados por algunos programas, que serán borrados por el sistema operativo durante el arranque. /var En este directorio los programas que lo requieran pueden mantener archivos que deban modificarse frecuentemente. Algunos de sus subdirectorios son: mail donde se mantienen colas de correo de cada usuario, log que mantiene bitácoras, run con archivos que mantienen los números de los procesos iniciados al arrancar el sistema, spool colas de impresión y de otros programas, tmp archivos temporales (más persistente que /tmp). /proc Este directorio es "virtual", no está presente en el disco, es creado por el sistema para intercambiar información con más facilidad. 157 GESTION DE UNIDADES DE ALMACENAMIENTO Y SISTEMAS DE ARCHIVOS 158 El rigor de esta jerarquía hace que memorizandola sea fácil emplear diversos sistemas Unix, aunque puede no ser la más apropiada en algunas circunstancias. Para simular jerarquías diferentes cada proceso iniciado por el usuario root puede tener un directorio raíz diferente al directorio raíz real del sistema. Para establecerlo se emplea el programa chroot, que recibe como primer parámetro el nuevo directorio raíz y como segundo parámetro el programa por ejecutar. La ruta del programa se especifica con respecto al nuevo directorio raíz y para que el programa pueda ejecutarse, deben ubicarse las ibrerías que este requiera en la "nueva" jerarquía (por ejemplo en el nuevo directorio /lib). Esta jerarquía de directorios en Linux no necesariamente está en un disco, sino sólo en memoria RAM, por eso pueden tenerse directorios como /proc y pueden montarse diversos sistemas de archivos sobre la misma jerarquía como se presenta en la siguiente sección. 4.1.1. MONTAJE Y DESMONTAJE DE SISTEMAS DE ARCHIVOS Un sistema de archivos es información almacenada en un dispositivo de almacenamiento organizada siguiendo una convención, la cual permite al sistema operativo manejar la información cuando el usuario lo requiere, es decir, leer, escribir, consultar directorios, etc. Hay diversos tipos (o convenciones) de sistemas de archivos, Linux cuenta con controladores para varios tipos creados específicamente para Linux (e.g ext2, ReiserFS) así como controladores para tipos de sistemas de archivos creados para otros sistemas operativos (e.g affs, hpfs, ntfs, msdos). Los tipos que pueden emplearse con Linux están incluidos en el kernel o son módulos en el subdirectorio fs 158 GESTION DE UNIDADES DE ALMACENAMIENTO Y SISTEMAS DE ARCHIVOS 159 del directorio con módulos de su sistema (es decir, el directorio de módulos es de la forma /lib/modules/2.2.x/fs/ remplazando x por la versión de su kernel). Los que puede usar dsacnden de la forma como se haya compilado el kernel y de los módulos que estén cargados. Puede examinar los tipos que soporta su sistema viendo el contenido de /proc/filesystems y puede emplear otros tipos de sistemas de archivos cargando los módulos apropiados ---mientras sean soportados Aunque toda la estructura de directorios presentada en la sección anterior podría estar en un sólo sistema de archivos, es posible distribuirla en varios. Para poder emplear un sistema de archivos primero debe montarse en algún directorio con el comando mount o debe configurarse el sistema para que lo monte automáticamente durante el arranque (el primer directorio que debe montarse es la raíz / ). Para desmontar un sistema de archivos de un directorio se emplea el comando umount. El programa mount sin argumentos presenta los sistemas de archivos que están montados, de cada uno presenta el dispositivo en el que reside, el directorio en el que está montado, el tipo de sistema de archivos y algunos parámetros del montaje, por ejemplo: /dev/hda1 on / type ext2 (rw,errors=remount-ro,errors=remount-ro) proc on /proc type proc (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) /dev/hda2 on /var type ext2 (rw) /dev/hda3 on /home type ext2 (rw) 159 GESTION DE UNIDADES DE ALMACENAMIENTO Y SISTEMAS DE ARCHIVOS 160 En el ejemplo se muestran 5 sistemas de archivos montados en los directorios /, /proc, /dev/pts, /var y /home. 3 de ellos son de tipo ext2 y residen en tres particiones de un disco duro (/dev/hda1, /dev/hda2 y /dev/hda3), los otros dos son virtuales, es decir, no residen en dispositivo de almacenamiento alguno (son creados por el kernel). Las opciones de montaje de todos indican que pueden leerse y escribirse rw, el sistema montado en la raíz en caso de fallas será montado con permiso de sólo lectura (errors=remount-ro) y el sistema montado en /dev/pts tendrá todos sus archivos como pertenencientes al grupo 5 (tty) y permisos de escritura y lectura para el usuario y sólo de escritura para el grupo (modo 620). Para montar un sistema de archivos se emplea: mount -t tipo -o opciones dispositivo directorio Donde dispositivo es el nombre del dispositivo que contiene el sistema de archivos (e.g /dev/hda1 o /dev/fl0), tipo es el tipo del sistema de archivos y directorio es la ruta donde se quiere acceder la raíz del sistema montado (si el directorio donde se monta contiene datos, estos serán escondidos mientras el nuevo sistema de archivos permanezca montado). La información sobre un sistema de archivos, su directorio de montaje y opciones pueden especificarse en el archivo /etc/fstab. De hacerlo puede emplear mount directorio para montar el sistema de archivos en el directorio especificado (el resto de información debe estar en /etc/fstab). Además, por defecto, los sistemas de archivos especificados en 160 GESTION DE UNIDADES DE ALMACENAMIENTO Y SISTEMAS DE ARCHIVOS 161 ese archivo serán montados automáticamente durante el arranque del sistema. Un ejemplo complementario al ejemplo anterior es: /dev/hda1 / /dev/hda4 none proc /dev/fd0 ext2 defaults,errors=remount-ro 0 1 swap sw /proc proc defaults /floppy auto 0 0 0 0 defaults,user,noauto 0 0 /dev/cdrom /cdrom iso9660 defaults,ro,user,noauto /dev/hda2 /var ext2 /dev/hda3 /home ext2 rw rw 0 0 0 2 0 2 Cada línea específica un sistema de archivos con: dispositivo, directorio donde se debe montar, tipo del sistema de archivos, opciones de montaje separadas por comas, la frecuencia de volcado (típicamente 0) y un númeo para controlar el chequeo durante el arranque con fsck. Además de los tipos soportados por su sistema puede emplear swap para especificar particiones que servirán como zona de intercambio Algunas opciones (comunes a todo sistema de archivos) son: ro para montar en modo de sólo lectura, user que indica que un usuario puede montar el sistema de archivos (por defecto sólo el administrador puede hacerlo), rw para montar en modo lectura y escritura, ro modo de sólo lectura, noauto para indicar que el sistema no debe montarse durante el arranque --note que los directorios /floppy y cdrom no son montados automáticamente durante el arranque. El número que controla el chequeo con fsck indica el orden en el cual hacer chequeos, 0 indica que no se debe chequear el sistema, otros números positivos especifian una prioridad (los menores son más prioritarios y los números con el mismo 161 GESTION DE UNIDADES DE ALMACENAMIENTO Y SISTEMAS DE ARCHIVOS 162 número de ser posible son chequeados en paralelo). Es conveniente emplear 1 con el sistema de archivos montado en la raíz y 2 para los demás que requieran chequeo. 4.1.2. SISTEMAS DE ARCHIVOS DE LINUX Aunque cada tipo de sistema de archivos tiene características propias, Linux puede manejar varios representándolos en un módelo de sistema de archivos propio del kernel (virtual file system). Por ejemplo los tipos vfat y msdos no permiten manejar permisos ni propietarios, pero al montarlos el kernel suple la carencia con valores por defecto . El sistema de archivos del kernel se organiza a partir del árbol de directorios, en este árbol se encuentran nombres de archivos y directorios. Junto con cada nombre hay un número que identifica de forma única la información y que permite ubicarla en algún dispositivo de almacenamiento ---estos números pueden examinarse con ls -i. Por este diseño pueden montarse y desmontarse diversos sistemas de archivos sobre el mismo arbol de directorios, cada proceso puede tener su propio directorio raíz (chroot) y puede haber directorios y archivos que no corresponden a información almacenada en dispositivo alguno e.g el directorio /proc. Cada entrada del árbol de directorios es de uno de los siguientes tipos: regular Se trata de infomación que está almacenada fisicamente en algún dipositivo montado, es decir programas o datos. enlace simbólico 162 GESTION DE UNIDADES DE ALMACENAMIENTO Y SISTEMAS DE ARCHIVOS 163 Vinculo al nombre de otro archivo en el arbol de directorios (este es un enlace suave, a diferencia de un enlace duro que referencia el nodo-i). Se crean con el programa ln y la opción -s. La desventaja de los enlaces suaves es que hacen el acceso a la información un poco más ineficiente que los enlaces duros, entre sus ventajas están: si se borra el archivo enlazado el enlace simbólico ya no funciona, pueden hacerse enlaces simbólicos a directorios (no pueden hacerse enlaces duros a directorios). directorio Subdirectorio. Se manejan con mkdir, rm -f. Cada proceso tiene un directorio de trabajo que puede administrarse con pwd y cd. Dispositivo por caracteres No es información almacenada en dispositivo alguno, representa un dispositivo físico que se controla enviando de a un caracter (e.g una línea serial, un modem, una terminal). Se crean con mknod [-m modo] nombre num_mayor num_menor Donde el modo puede especificarse con números o letras al igual que con chmod , num_mayor y num_menor son números que en Linux identifican de forma única el dispositivo. Algunos números de dispositivos se presenta en el siguiente capítulo, la lista completa está en las fuentes del kernel en include/linux/major.h y están documentados en Documentation/devices.txt o en 163 GESTION DE UNIDADES DE ALMACENAMIENTO Y SISTEMAS DE ARCHIVOS 164 Internet la documentación más reciente (que corresponde al kernel más nuevo) en: http://www.kernel.org/pub/linux/docs/device-list/devices.txt. Por ejemplo allí se documenta que el dispositivo de caracteres con número mayor 4 es un dispositivo tty (por ejemplo una de las consolas virtuales), el número menor indica de que consola virtual se trata (si es un entero entre 1 y 63), para crear una entrada en el directorio de trabajo que se refiera a la primera consola virtual con el nombre cons1: mknod cons1 c 4 1 Dispositivo por bloques Representa un dispositivo al que se le pueden enviar bloques de información (e.g tarjeta de video, disco duro). Para crearlo se usa mknod de la forma como se presentó para dispositivos de caracteres pero con b después del nombre en lugar de c. Pipes y sockets No es información almacenada en dispositivo alguno, son canales de comunicación entre programas. Desde el intérprete de comandos pueden crearse pipes con mkfifo o con mknod seguido del nombre del pipe y la letra 'p'. Además de los permisos presentados en la sección para usuarios en Linux pueden especificarse los siguientes: 164 GESTION DE UNIDADES DE ALMACENAMIENTO Y SISTEMAS DE ARCHIVOS • 165 setuid bit: empleado con archivos ejecutables cambia la identificación del usuario por la del dueño del archivo. Con chmod se modifica empleando u y s. por ejemplo: • chmod u+s cvs indica que cuando el programa cvs se ejecute, debe cambiarse la identificación por la del dueño de ese programa. Este permiso puede ser útil para que usuarios normales ejecuten programas que requieren ser ejecutados por root y por lo mismo debe usarse con precaución. • setgid bit: tambíen empleado con archivos ejecutables, indica que cuando se ejecute el programa debe cambiarse al grupo del archivo. Se establece con g y s. • sticky bit: se establece con t, no tiene efecto sobre archivos, con un directorio evita que un usuario que no sea el dueño del directorio pero que tenga permiso de escritura, pueda borrar o renombrar archivos que no le pertenecen. • Ejecución condicionada: se establece con X en el caso de directorios es equivalente a x, en el caso de archivos también es equivalente a x sólo si el archivo al que se modifica el permiso ya tenía permiso de ejecución para algún usuario. Es útil por ejemplo: • chmod a+X * que da permiso de ejecución a todos los usuarios a los archivos ejecutables y a los directorios. 165 GESTION DE UNIDADES DE ALMACENAMIENTO Y SISTEMAS DE ARCHIVOS 166 El administrador puede cambiar los permisos de todos los archivos del sistema y puede fijar una política inicial para la mascara de permisos que todos los usuarios tendrán. Además de chmod se emplean los siguientes programas para realizar estas labores: chgrp grupo archivos Cambia el grupo de el o los archivos especificados. Por ejemplo chgrp profesores notas* quiz* cambiará todos los archivos con prefijos "notas" y "quiz" al grupo profesores. Cómo opción puede recibir -R para aplicar el cambio recursivamente en un directorio (es decir a subdirectorios también). Este programa puede ser usado por cualquier usuario para cambiar el grupo de sus archivos a otro grupo al que el mismo usuario pertenezca. chown usuario[:grupo] archivos Cambia el usuario (y opcionalmente el grupo) de los archivos especificados. Al igual que chgrp con la opción -R efectua el cambio recursivamente en subdirectorios. Por ejemplo chown -R paz:administra nomina/ Pondrá al usuario paz como dueño de todos los archivos y subdirectorios del directorio nomina, todos quedarán con el grupo administra. También puede usarse para cambiar el grupo de un archivo (si no se especifica el nombre del usuario). 166 GESTION DE UNIDADES DE ALMACENAMIENTO Y SISTEMAS DE ARCHIVOS 167 umask Este es un comando del intérprete de comandos [86] , para establecer permisos por defecto en archivos nuevos. En bash pueden especificarse los permisos como con chmod por ejemplo: umask u=rw,g=,o= hará que por defecto grupo y otros usuarios no tengan permiso de lectura ni escritura, sólo el propietario del archivo los tiene . Los permisos de un archivo recién creado se establecen de acuerdo al programa que lo crea y a la máscara. Puede esperar que los programas no restrinjan seguridad y creen nuevos archivos y directorios con permisos de lectura y escritura para propietario, grupo y usuarios; este comportamiento hace que umask sea una buena alternativa. 4.1.3. SISTEMA DE ARCHIVOS ext2 ext2 es un sistema de archivos desarrollado para y junto con Linux. Permite todas las características que el sistema de archivos virtual de Linux soporta: directorios y archivos como inodos (con permisos, dueños y tipos especiales e.g dispositivos), enlaces duros y suaves. Entre sus límites se cuentan: nombres de archivos de máximo 255 caracteres, archivos de máximo 2GB, sistema de archivos de máximo 4TB. Aunque ext2 procura evitar fragmentación, en el momento de este escrito no hay una herramienta para defragmentar. Además de los atributos de archivo presentados en la sección anterior, un sistema ext2 tiene otros que pueden administrarse con los siguientes programas: 167 GESTION DE UNIDADES DE ALMACENAMIENTO Y SISTEMAS DE ARCHIVOS 168 lsattr archivos Lista los atributos especiales de los archivos especificados. Entre sus opciones R lista recursivamente atributos de subdirectorios y su contenido, -a lista también archivos de configuración. chattr modo archivos Permite modificar los atributos especiales de un sistema de archivos ext2. Como modo se especifican los cambios a los permisos, cada permiso se especifica con un caracter: A - no actualizar tiempos de acceso, S - actualización sincrona (es decir escribe directamente sin emplear caches), a - permite abrir el archivo sólo para agregar datos, c - el archivo es mantenido comprimido en disco (sus datos son descomprimidos automáticamente por el kernel), d - al emplear el program dump el archivo es copiado, i - el archivo no puede ser modificado o renombrado, j - llevar bitácora de datos, s - el archivo debe sobreescribirse con ceros si es eliminado, u - en caso de ser borrado por el usuario una copia es salvada para su posible recuperación. Los permisos se especifican como primer parámetro de chattr, precediendo uno o más atributos con '+' para activar, '-' para desactivar o '=' para dejar igual. En el disco la información se organiza en bloques (de 1024, 2048 o 4096 bytes), estos bloques se juntan en grupos (cada uno de máximo 32768 bloques), algunos de los bloques se reservan para el administrador (para que pueda operar si los usuarios llegan a llenar el sistema de archivos). Cada grupo tiene algunos bloques de control y otros de datos, entre los bloques de control está una copia del superbloque (bloque que describe 168 GESTION DE UNIDADES DE ALMACENAMIENTO Y SISTEMAS DE ARCHIVOS 169 el sistema de archivos completo) y una tabla de los nodos-i cuyos datos están en el bloque. Un nodo-i mantiene información sobre un archivo es decir: atributos (modo, uid, gid, fecha de acceso, fecha de creación, fecha de modificación, fecha de eliminación), cantidad de enlaces y lista de los bloques del grupo en donde se encuentra la información del archivo. Algunas herramientas para emplear sistemas de archivos ext2 son: mke2fs dispositivo También llamado mkfs.ext2, permite crear un sistema ext2 en un dispositivo de almacenamiento. Recibe el nombre del dispositivo, y de no recibir opciones prepara el sistema de archivos calculando los parámetros a partir del tamaño disponible. Como opciones pueden especificarse: -c para chequear bloques con errores antes de crear sistema de archivos, opcionalmente pueden pasarse los bloques erróneos ---reportados por el programa badblocks--- en un archivo con l arc_blerr); -L etiqueta para poner una etiqueta; puede especificar el número de nodos-i bien con -N num_nodos o con -i bytes_por_inodo ---tenga en cuenta que no puede cambiarse la cantidad especificada después de que el sistema de archivos ha sido creado; el tamaño en bytes de cada bloque puede ser 1024, 2048 o 4096 y se especifica con la opción -b tamaño; el porcentaje de bloques para el administrador puede especificarse con -m porcentaje ---por defecto 5%. debugfs dispositivo Permite examinar y modificar a bajo nivel un sistema de archivos ext2. 169 GESTION DE UNIDADES DE ALMACENAMIENTO Y SISTEMAS DE ARCHIVOS 170 badblocks dispositivo Localiza bloques con errores en un dispositivo y genera un reporte en un archivo. e2fsck dispositivo Verifica un sistema de archivos ext2. Este programa es llamado por fsck cuando se chequea un sistema con ext2. 170 V. AUTOMATIZACION DE TAREAS 171 AUTOMATIZACION DE TAREAS 5. 172 AUTOMATIZACION DE TAREAS 5.1. Crontab En un tema anterior, comprobabamos la necesidad de automatizar diversas tareas como el rotado de logs con logrotate. El programa logrotate realiza la rotación de los logs definidos en su fichero de configuración, pero es necesario llamar a ese programa para que realice las tareas cada cierto tiempo. Como este programa, existen varias tareas en Linux que es necesario automatizar, de modo que se ejecuten diaria, semanal o mensualmente. Para ello se utiliza el programa crontab. El programa crontab permite programar tareas, como la ejecución de comandos o scripts, de modo que se ejecuten cada cierto tiempo, según indique su fichero de configuración /etc/crontab. Este programa se encuentra preinstalado por defecto en nuestro SO y, normalmente, se encuentra en los scripts de arranque del sistema. Podemos comprobar que se encuentra corriendo con una sencilla consulta: root@desktop:/etc/init.d# ps -ef | grep cron root 787 1 0 00:54 ? 00:00:00 cron root 2044 1583 0 11:52 pts/0 00:00:00 grep --color=auto cron root@desktop:/etc/init.d# Como vemos en la consulta anterior, cron se está ejecutando en segundo plano. El funcionamiento de este programa es sencillo; realiza una consulta cada minuto en los ficheros de configuración y, si la hora de ejecución coincide con la hora actual, ejecuta las tareas programadas. 172 AUTOMATIZACION DE TAREAS 173 5.1.1. El fichero /etc/crontab El fichero de configuración crontab tiene una apariencia semejante a la siguiente: En este fichero podemos comprobar la definición de la variable PATH. Esta variable es importante, ya que es posible que llamemos a algún programa sin definir la ruta completa de éste. También es posible definir la variable MAILTO, que envía un correo con los resultados de cron a la dirección indicada en la variable. Si observamos las líneas en las que indicamos a cron cúales son las tareas que debe ejecutar, siguen el mismo patrón: 17 * * * * root cd / && run-parts --report /etc/cron.hourly Los primeros cinco campos definen los minutos, horas y días que cron debe ejecutar el comando especificado: Definición de horarios en /etc/crontab Campo Descripción 173 AUTOMATIZACION DE TAREAS Minuto Indicados de 0 a 59 minutos Hora Entre 0 y 23 horas Día del Mes Día del mes que debe ejecutarse. Entre 1 y 31. Mes Especifica el mes, de 1 (Enero) a 12 (Diciembre). Día de 174 la Indicando de 0 (Domingo) a 7 (Domingo) semana * Corresponde a todos los valores posibles - Especifica un rango . 7-9 en las horas se ejecutará a las 7, 8 y 9. Especifica una lista. 7,9,23 en las horas se ejecutará a las horas , indicadas. En el caso de la primera línea de nuestro ejemplo, se ejecutará todos los días del año, en el minuto 17 de todas las horas del día. El siguiente campo de la definición de crontab es el usuario con el que se va a ejecutar el comando o script programado (en este caso, root) y, por último, el comando a ejecutar (cd / && run-parts --report /etc/cron.hourly). Es muy habitual en estos casos encontrarnos varios comandos o acciones encadenadas que actuarán de una forma u otra, dsacndiendo del valor que devuelva la acción anterior. Las posibilidades son las siguientes: 174 AUTOMATIZACION DE TAREAS • 175 || → Ejecuta las órdenes secuencialmente, siempre y cuando el valor de la acción anterior sea 1 (error). • && → ' Ejecuta las órdenes secuencialmente, siempre y cuando el valor de la acción anterior sea 0 (acción ejecutada correctamente). • ; → Las órdenes se ejecutan secuencialmente, indsacndientemente del resultado del comando o acción anterior. De esta forma podemos programar nuestras tareas cron comprobando mediante encadenamiento de distintas órdenes si es necesario o no ejecutar una tarea concreta. Si observamos el fichero de configuración, podemos ver que se hace alusión a cuatro directorios que debemos tener en cuenta; /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly y /etc/cron.monthly. En dichos directorios se encuentran las tareas que se deben realizar cada hora, día, semana y mes. Si nos ubicamos en la ruta /etc/cron.daily, por ejemplo, podemos ver distintos ficheros que contienen los scrips que el programa cron ejecutará diariamente: 175 AUTOMATIZACION DE TAREAS 176 5.1.2. El comando crontab El comando crontab nos permite crear tareas cron a nivel de usuario, de forma que un usuario con acceso al programa podrá programar tareas adicionales al sistema para automatizar sus propias tareas. Esta utilidad recibe una serie de parámetros: • u → Especifica el usuario que ejecuta la tarea cron. En caso de que no se indique, se presupone el usuario actual. • e → Abre un editor para modificar la tarea del usuario indicado. En el siguiente ejemplo nos muestra tres posibles editores con los que trabajar: root@desktop:/etc# crontab -u prueba -e no crontab for prueba - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/ed 176 AUTOMATIZACION DE TAREAS 2. /bin/nano 177 <---- easiest 3. /usr/bin/vim.tiny Choose 1-3 [2]: 3 • l→ Muestra la tarea cron actual. • r→ Elimina el cron actual. Otra posibilidad si queremos configurar una tarea cron es pasar como parámetro a crontab el nombre del fichero donde hemos programado nuestra tarea, de la siguiente forma: root@desktop:/etc# crontab -u prueba mycron root@desktop:/etc# Los distintos ficheros cron de los usuarios se almacenan en /var/spool/cron/ o en /var/spool/crontabs y reciben el nombre del usuario que los creó. 5.1.3. Los ficheros /etc/cron.allow y /etc/cron.daily Como hemos comentado anteriormente, además del fichero /etc/crontab donde se especifican tareas del sistema, los usuarios pueden crear sus propios cron con el comando crontab. Esto puede ser un problema de seguridad si no ponemos especial interés en restringir el acceso del cron a usuarios que no deban tenerlo. Para ello podemos modificar los permisos de crontab y cron (de modo que solo tengan acceso a su ejecución los usuarios que realmente lo necesiten) y configurar los ficheros 177 AUTOMATIZACION DE TAREAS 178 /etc/cron.allow y /etc/cron.deny, utilizados para permitir o denegar el acceso a los usuarios. • Fichero /etc/cron.allow → Este fichero lista los usuarios permitidos al acceso de cron. Solo los usuarios que se encuentren indicados en este fichero tendrán acceso, denegando al resto. • Fichero /etc/cron.deny → Especifica los usuarios que tiene restringido el uso de cron, permitiendo su uso a aquellos que no se encuentren en él. Como ejemplo, incluímos al usuario prueba en el fichero /etc/cron.deny. Una vez incluido y cambiando a la sesión de dicho usuario intentamos ejecutar el comando crontab, con la siguiente salida de error: 5.2. Anacron Es común que un servidor se mantenga encendido las 24 horas del día, por lo que el programa cron anterior es totalmente adecuado para automatizar tareas que, en la mayoría de los casos, se ejecutan en horas de poco uso del sistema. Pero es necesario tener en cuenta que también existen equipos que, a ciertas horas, se encuentran apagados, por lo que las tareas que se encuentren definidas en el fichero /etc/crontab, no se ejecutarán. Para estos casos disponemos de la utilidad anacron. 178 AUTOMATIZACION DE TAREAS 179 Una de las principales diferencias entre cron y anacron es que anacron no es demonio, por lo que no se encuentra permanentemente corriendo en segundo plano. Es necesario ejecutarlo a través de un script de inicio del sistema o mediante cron. Otra diferencia es que anacron solo permite programar tareas por días, al contrario que cron, que especifica minutos y horas a lo largo del día. El funcionamiento de anacron es semejante a cron; sus tareas se definen en el fichero /etc/anacrontab. Cuando se ejecuta, comprueba las tareas e intervalos definidos y, en caso de que en dicho intervalo no se haya ejecutado aún el comando indicado, lo inicia. 5.2.1. El fichero /etc/anacrontab A continuación se muestra como ejemplo el fichero anacrontab configurado por defecto en nuestro Sistema Operativo: La sintaxis del fichero de configuración anacrontab sigue siempre una serie de pautas, pudiendo encontrarnos además con líneas que comienzan por #, lo que denota un comentario y no se tendrá en cuenta, o con declaración de variables, como pueden ser PATH, HOME o SHELL: Sintaxis de /etc/anacrontab 179 AUTOMATIZACION DE TAREAS 180 Campo Descripción Frecuencia Especificada en días. Retardo Periodo que transcurre entre el inicio de anacron y su ejecución. Identificador El identificador debe ser único. Comando Comando que anacrontab ejecutará. Hay que tener en cuenta el retardo, ya que si anacron debe ejecutar varios comandos es posible que el sistema se sobrecargue. De este modo podemos indicar la ejecución de forma más gradual. 5.3. At Hay ocasiones en la que es necesario programar una tarea futura que no sea frecuente, por lo que las utilidades cron y anacron no son necesarias. Para estos casos podemos utilizar el comando at. Este comando recibe como parámetro la hora, día o momento en el que queremos que se ejecute: Sintaxis del comando at Campo Descripción Now Especifica el futuro inmediato (ahora). Indica dentro de cuanto queremos que se ejecute con + y una + hora.Por ejemplo, +6 (dentro de 6 horas). 180 AUTOMATIZACION DE TAREAS 181 Especifica una hora dentro del día. Podemos indicar AM ó PM HH:MM (por ejemplo 03:00 PM) Indica una fecha concreta. Podemos indicar anteriormente la hora MM/DD/AAAA del día (por ejemplo 15:00 15/10/2011). noon,midnight y noon (mediodia),midnight (medianoche) y teatime (hora del té: teatime 16:00) tomorrow mañana El funcionamiento es sencillo. Indicamos at en la consola y la hora/día en el que queremos programar la tarea. Una vez que pulsemos Intro nos aparecerá en el prompt at> para comenzar a introducir los comandos que queremos ejecutar. También es posible indicar con la opción -f el fichero que queremos que ejecute. Otros comandos importantes de at son atq, que nos muestra las tareas pendientes de at y atrm, que elimina una tarea de la cola. 5.3.1. Los ficheros /etc/at.allow y /etc/at.deny Al igual que el programa cron, at permite restringir o permitir el acceso de los usuarios mediante los ficheros /etc/at.allow y /etc/at.deny. Podemos incluir los usuarios en dichos ficheros y, debemos tener en cuenta, que su comportamiento en algunas situaciones, es distinto que en los ficheros de cron: 181 AUTOMATIZACION DE TAREAS • 182 En caso de que no exista ninguno de los dos ficheros, solo root tendrá acceso al programa at • En caso de que se encuentre creado el fichero /etc/at.allow solo tendrán acceso al programa los usuarios listados en dicho fichero. • En caso de que se encuentre creado el fichero /etc/at.deny, tendrán acceso al programa todos los usuarios excepto los especificados en dicho fichero. . 182 VI. GESTION DE PROCESOS 183 6. GESTION DE PROCESOS Un proceso es cualquier instrucción o programa que en ese momento se está ejecutando en nuestro sistema. Todo proceso tiene un PID (Process IDentifier), es decir, un número que le identifica y le diferencia de todos los demás. Una característa importante es que todo proceso tiene un estado: corriendo, durmiendo, zombie o parado. 6.1. El comando kill El comando kill nos permite interactuar con cualquier proceso mandando señales (signal). Cuando ejecutamos kill pid lo que hacemos es mandar la señal de TERM(terminar) con lo cual se termina ese proceso. Podemos usar cualquier otro tipo de señal, para ello utilizamos kill signal pid. Podemos conseguir una lista de señales usando kill -l. Una señal útil para alunas ocasiones es -9, esta señal fuerza a terminar cualquier proceso. Como su nombre indica, estamos matando el proceso. También podemos utilizar el comando killall con el que podemos mandar señales a un proceso utilizando el nombre, en vez del PID. Entre los procesos diferenciamos los que se están ejecuntando en 1er o 2o plano. Los que se ejecutan en primer plano son los que interactúan con el usuario en ese momento, mientras que los procesos en segundo plano se ejecutan pero están ocultos, y muy posiblemente el usuario no tenga constancia de que se esté ejecutando. Sólo puede haber un proceso en primer plano por consola. Eso nos deja las manos atadas si no estamos en el entorno gráfico. Para poder ejecutar varios comandos, lo que podemos hacer es ejecutar los comandos en segundo plano. Para ello solo tenemos que añadir & al final del comando. Vamos a poner un ejemplo: $ls -R / > /dev/null & 184 En el anterior ejemplo listamos todos los ficheros de todos los directorios del sistema. Enviamos la salida a /dev/null para que su salida no nos moleste. El carácter & manda el proceso a segundo plano. El comando jobs nos muestra los procesos que se están ejecutando en segundo plano: $ls [1]+ Running ls –color -R / >/dev/null & Aquí estamos ejecutando el comando anterior. El elemento [1] nos indica el número del proceso que se están ejecutando en segundo plano y cuál es su estado. En este caso Running(corriendo). Seguidamente nos muestra cuál es el proceso Podemos utilizar también el comando fg para mandar un proceso al primer plano y el comando bg para mandar el proceso al segundo plano. $fg ls –color -R / >/dev/null fg manda el proceso al primer plano y nos muestra el programa que ha mandado. Si tenemos varios procesos en segundo plano añadimos el número del proceso. El comando bg se utiliza cuando tenemos, por ejemplo, procesos suspendidos. Estos procesos son programas que están parados, es decir, no consumen ni CPU ni memoria, y que podemos volver a poner en archa en cualquier momento. Para suspender un proceso utilizamos la combinación de teclas Ctrl-z, al igual que para interrumpir un proceso utilizamos Ctrl-c. $jobs [1]+ Stopped ls –color -R / >/dev/null 185 Esta tarea está parada(Stopped). El comando ps El comando ps permite mostrar todos los procesos que están corriendo en nuestro sistema. Veamos una parte de una salida del comando ps: $ps -aux faraox@menut:~/doc/glup_0.6-1.1-html-1.1$ ps xau USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 1272 436 ? root 2 0.0 0.0 0 0 ? root 3 0.0 0.0 0 0 ? S 16:00 0:04 SW 16:00 0:01 SW 16:00 0:00 init [2] [keventd] [kapmd] faraox 1363 0.0 0.8 2740 1564 pts/2 S 18:57 0:00 -bash Los parámetros xau nos permiten ver todos los procesos que se están ejecutando. El parámetro a muestra lo que se está ejecutando en las tty conocidas, el parámetro x añade los procesos que no se conece la tty en la que se están ejecutando y u muestra los usuarios que están ejecutando esos procesos. Algunas partes de la salida le serán conocidas. La columna USER nos dice que usuario está ejecutando el proceso,PID es su número de proceso, %CPU es el porcentaje de CPU que está utilizando al igual que %MEM es el porcentaje de memoria. También incluye la cantidad de memoria en kylobytes que ha utilizado dicho proceso, se muestra en la columan RSS.La columna TTY muestra la consola desde la que se está ejecutando. STAT nos muestra el estado del proceso:S(drmiendo), R(corriendo), T(parado), Z(zombie). Las opciones W y N son especiales para procesos del kernel. La columna START muestra la hora a la que empezó el proceso, y la columna TIME muestra el 186 tiempo de CPU que ha usado el proceso desde que se inició y COMMAND muestra el nombre del comando que se está ejecutando. 6.2. El comando top El comando top es una utilidad que permite la monitorización de los procesos de la CPU. También muestra el estado de la memoria. Es una mezcla del comando uptime, free y ps. 20:07:54 60 up 4:07, processes: 58 CPU states: 0.4% Mem: 182900K 5 users, sleeping, user, total, load 1 0.6% 172404K average: running, 0 system, 0.0% used, 10496K 0.07, zombie, nice, free, 0.05, 1 0.05 stopped 99.0% 35064K idle buffers Swap: 96352K total, 14284K used, 82068K free, 43228K cached PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND 1565 faraox 14 0 1040 1040 820 R 0.5 0.5 0:00 top 300 root 9 -10 24736 9.9M 1524 S 187 VI. SISTEMA DE INICIO Y FINALIZACION DEL SISTEMA 188 SISTEMA DE INICIO Y FINALIZACION DEL SISTEMA 7. 189 SISTEMA DE INICIO Y FINALIZACION DEL SISTEMA 7.1. Niveles de ejecución de SysV Init El sistema de niveles de ejecución SysV init provee un proceso estándar para controlar cuáles programas initlanza o detiene cuando se inicializa un nivel de ejecución. SysV init fué escogido porque es más fácil de usar y es más flexible que el proceso tradicional init estilo BSD. Los archivos de configuración para SysV init están en el directorio /etc/rc.d/. Dentro de este directorio, se encuentran los scripts rc, rc.local, rc.sysinit y, opcionalmente, los scripts rc.serial así como los siguientes directorios: init.d/ rc0.d/ rc1.d/ rc2.d/ rc3.d/ rc4.d/ rc5.d/ rc6.d/ El directorio init.d/contiene los scripts que el comando /sbin/init utiliza cuando controla servicios. Cada uno de los directorios numerados representan los seis niveles de ejecución configurados por defecto bajo Fedora. 7.2. Niveles de ejecución La idea detrás de los niveles de ejecución de SysV init gira alrededor del hecho de que sistemas diferentes se pueden usar de maneras diferentes. Por ejemplo, un servidor corre de forma más eficiente sin el consumo de recursos del sistema excesivo creado por el sistema X. Otras veces, el administrador del sistema puede necesitar operar el sistema en un nivel más bajo de ejecución para realizar tareas de diagnóstico, como reparar la corrupción del disco duro en el nivel de ejecución 1. Las características de un nivel de ejecución dado determinan qué servicios init detenienen o inicia. Por ejemplo, el nivel de ejecución 1 (modo usuario único) detiene 189 SISTEMA DE INICIO Y FINALIZACION DEL SISTEMA 190 cualquier servicio de red, mientras que el nivel 3 arranca estos servicios. Asignando servicios específicos a ser detenidos o iniciados en un nivel dado, init puede fácilmente cambiar el modo de la máquina sin que el usuario tenga que arrancar o detener servicios manualmente. Los siguientes niveles de ejecución se encuentran definidos por defecto bajo Fedora: 0 — Apagar 1 — Modo texto usuario único 2 — No se utiliza (definible por el usuario) 3 — Modo texto multiusuario completo 4 — Sin usar (definible por el usuario) 5 — Modo gráfico multiusuario completo (con una pantalla de inicio de sesión basada en X) 6 — Rearrancar En general, los usuarios operan Fedora en un nivel de ejecución 3 o nivel de ejecución 5 — ambos modos multi-usuarios. Los usuarios a veces personalizan los niveles de ejecución 2 y 4 para adaptarlos a sus necesidades especificas ya que no se utilizan. El nivel de ejecución por defecto para el sistema está enumerado en /etc/inittab. Para saber el nivel de ejecución por defecto de un sistema, busque por la línea similar a la que se muestra abajo cerca del final del archivo /etc/inittab: id:5:initdefault: 190 SISTEMA DE INICIO Y FINALIZACION DEL SISTEMA 191 El nivel de ejecución predeterminado en este ejemplo es cinco, como indica el número después del punto y coma. Para cambiarlo, modifique /etc/inittab como usuario root. 191 192