´Indice Introducci´ona . . . Tema 2: Introducci´ona los sistemas Instalaci´ondel . . . / Uso de la l´ıneade . . . Programaci´onde . . . Manejo de ficheros . . . Programaci´onen . . . Administraci´onde Sistemas e Redes Introducci´ona Perl . . .

Tom´asFern´andezPena P´aginawww [email protected] P´aginainicial

JJ II

J I

P´agina1 de 347

Regresar

Pantalla completa

Cerrar

Abandonar ´Indice ´Indice Introducci´ona . . . • Introducci´ona Unix y Linux. Instalaci´ondel . . . • Instalaci´ondel sistema y de software. Uso de la l´ıneade . . . Programaci´on de . . . • Uso de la l´ınea de comandos. Manejo de ficheros . . .

• Programaci´onde scripts de administraci´on. Programaci´on en . . .

Introducci´ona Perl . . . • Manejo de ficheros de texto.

P´aginawww • Python y otros lenguajes de script. P´aginainicial

JJ II

J I

P´agina2 de 347

Regresar

Pantalla completa

Cerrar

Abandonar 1. Introducci´ona Unix y Linux ´Indice

Introducci´ona . . . Caracter´ısticasde UNIX: Instalaci´ondel . . .

• Sistema operativo potente, flexible y vers´atil. Uso de la l´ıneade . . .

Programaci´on de . . . • Caracter´ısticas: portabilidad, adaptabilidad y simplicidad, naturaleza multiusuario y multitarea, adecuaci´ona re- Manejo de ficheros . . . des. Programaci´on en . . . Introducci´ona Perl . . . • Disponibilidad de c´odigofuente (algunas versiones) P´aginawww • Implementado casi´ıntegramente en C (lenguaje de alto nivel). P´aginainicial GNU/Linux: JJ II

• Sistema operativo libre, de c´odigo abierto, similar a Unix J I • C´odigofuente con licencia GPL P´agina3 de 347 • Disponible para un gran n´umeroy variedad de sistemas: su- Regresar percomputadores, servidores, sobremesas, port´atiles,PDAs, Pantalla completa

m´oviles,sistemas empotrados,. . . Cerrar

Abandonar Historia de Unix ´Indice • Multics: proyecto de Bell Labs (AT&T), General Electrics Introducci´ona . . . y el MIT (1969) para el sistema GE 645 Instalaci´ondel . . . Uso de la l´ıneade . . .

? demasiado ambicioso para la ´epoca (pobre rendimiento) Programaci´on de . . . • Thompson y Ritchie (Bell) migran un juego (Space Travel) Manejo de ficheros . . . en Multics de GE 645 a PDP-7. Programaci´on en . . . Introducci´ona Perl . . . • Empiezan del desarrollo de un SO para el PDP-7 −→ Surge UNIX P´aginawww • En 1970, UNIX se instala en una PDP-11 P´aginainicial • En 1971 se edita el primer UNIX Programmer’s Manual. JJ II J I • En 1973 UNIX se reprograma en C (Ritchie) P´agina4 de 347 • En 1974/75 UNIX v6 se difunde fuera de los laboratorios Regresar Bell y llega a las universidades Pantalla completa ? Los investigadores tienen acceso al c´odigofuente del Cerrar UNIX de AT&T Abandonar • En 1977 la Universidad de Berkeley licencia UNIX BSD ´Indice • AT&T limita la distribuci´ondel c´odigode UNIX a partir de Introducci´ona . . . la v7 Instalaci´ondel . . . Uso de la l´ıneade . . .

? se dificulta el acceso al c´odigofuente Programaci´on de . . .

? System III: primera versi´oncomercial de UNIX (1982) Manejo de ficheros . . . • Dos l´ıneasprincipales: System V y BSD Programaci´on en . . . Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina5 de 347

Regresar

Pantalla completa

Cerrar

Abandonar AT&T System V ´Indice • A partir de UNIX Versi´on6 y 7, AT&T lanza, en 1982, la Introducci´ona . . . primer versi´onde la linea comercial de UNIX: System III Instalaci´ondel . . . Uso de la l´ıneade . . .

• SysIII carec´ıade innovaciones como vi y csh Programaci´on de . . . • En 1983 surge System V. Inclu´ıaalgunas caracter´ısticasde Manejo de ficheros . . . los sistemas BSD (p.e. vi, curses,. . . ) Programaci´on en . . . Introducci´ona Perl . . . • En 1984 surge la SysV Release 2 y en 1987 la SVR3

P´aginawww • Finalmente, SysV Release 4 aparece en 1988 P´aginainicial • SVR4 combina SVR3, 4.3BSD, XENIX (Microsoft), SunOS (Sun Microsystems) y agrega nuevas utilidades JJ II J I

P´agina6 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Berkeley System Distribution ´Indice • Thompson, Bill Joy (co-fundador de Sun) y Chuck Haley Introducci´ona . . . (1975). Instalaci´ondel . . . Uso de la l´ıneade . . .

• Second Berkeley Software Distribution (2BSD), 1978, incor- Programaci´on de . . . pora el editor vi (versi´onvisual de ex) y el C shell. Manejo de ficheros . . . • En 1979, 3BSD, combina 2BSD con UNIX v7. Programaci´on en . . . Introducci´ona Perl . . . • DARPA (Defense Advanced Research Projects Agency) co- labora con las nuevas versiones 4BSD: 4.1BSD, 4.2BSD y en P´aginawww

1986 4.3BSD (implementaci´onde TCP/IP). P´aginainicial

• Conflicto con AT&T por el uso de c´odigopropietario. JJ II

• Su ´ultima versi´ones 4.4BSD-Lite Rel. 2 (1995), sin c´odigo J I

propietario AT&T. En ella se basan muchas variantes: P´agina7 de 347

? FreeBSD, OpenBSD, NetBSD, Darwin (base deOSXe Regresar

iOS), etc. Pantalla completa

Cerrar

Abandonar Otras versiones ´Indice La mayor´ıade los UNIX hist´oricosy actuales derivan de System Introducci´ona . . . V o BSD, o son una mezcla de los dos Instalaci´ondel . . . Uso de la l´ıneade . . .

• XENIX: desarrollada por Microsoft en 1980 para uso en mi- Programaci´on de . . . croprocesadores, derivada del AT&T UNIX v7 Manejo de ficheros . . . • SCO OpenServer (antes SCO UNIX): derivada de XENIX Programaci´on en . . . y desarrollada por Santa Cruz Operation, hoy propiedad de Introducci´ona Perl . . . Xinuos P´aginawww

• UnixWare: desarrollado por Novell a partir de System V, P´aginainicial ahora propiedad de Xinuos JJ II • SunOS: desarrollado por Sun Microsystems (ahora Oracle), en 1982, basado en BSD J I P´agina8 de 347 • Mach: microkernel desarrollado en la Carnegie-Mellon Uni- Regresar versity, basado en 4.3BSD Pantalla completa

Cerrar

Abandonar • XNU: desarrollado por Apple, kernel basado en Match, que ´Indice

forma parte de Darwin Introducci´ona . . . • OSF/1 (Open Software Foundation): DEC, IBM y HP de- Instalaci´ondel . . . sarrollan un UNIX para competir con System V y SunOS: Uso de la l´ıneade . . . Programaci´on de . . . ? Basado en el kernel Mach Manejo de ficheros . . .

? Llamado despu´esDigital UNIX y Tru64 Programaci´on en . . . • GNU Hurd: conjunto de servicios que corren encima de Introducci´ona Perl . . .

GNU Mach formando el kernel del SO de GNU P´aginawww

• Minix: escrito por Andrew S. Tanenbaum de la Vrije Uni- P´aginainicial versiteit, para correr en los IBM PCs JJ II

• Linux: kernel desarrollado por Linus Torvals, primera versi´on J I en 1991 P´agina9 de 347

• Android: basado en el kernel Linux, desarrollado por Google Regresar para m´ovilesy tablets Pantalla completa

Cerrar

Abandonar Versiones comerciales ´Indice • Oracle: Oracle Solaris (evoluci´onde SunOS versi´on5 y Introducci´ona . . . SVR4), versiones para Sparc y x86, ´ultima versi´onSolaris Instalaci´ondel . . . 11 (versiones open source OpenSolaris (discontinuada), illu- Uso de la l´ıneade . . . mos, OpenIndiana) Programaci´on de . . . Manejo de ficheros . . . • IBM: AIX( Advanced Interactive eXecutive) para servidores Programaci´on en . . . IBM, basado en OSF/1 y SVR4, ´ultimaversi´onAIX 7.1 Introducci´ona Perl . . . • HP: HP-UX, versiones para PA-RISC e Itanium, variante P´aginawww System V con caracter´ısticasde OSF/1, ´ultima versi´on11i P´aginainicial • SGI: IRIX basado en System V con extensiones BSD, para sistemas MIPS; ´ultimaversi´on 6.5 (2006) JJ II • Xinuos: OpenServer X (basado en FreeBSD), SCO OpenServer J I 6y UnixWare 7 P´agina 10 de 347

Regresar • Apple: Mac OS X, con dos partes Darwin+ Aqua (GUI); Darwin basado en Mach y BSD Pantalla completa

Cerrar

Abandonar Evoluci´onde UNIX ´Indice

Introducci´ona . . .

Instalaci´ondel . . .

Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

M´asdetalles en http://www.levenez.com/unix/ P´aginawww

P´aginainicial

JJ II

J I

P´agina 11 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Sistemas GNU/Linux ´Indice Linux: Introducci´ona . . . Instalaci´ondel . . .

1. En agosto de 1991, el estudiante finland´esLinus Torvals, Uso de la l´ıneade . . .

presenta en Internet la versi´on0.01 del kernel de un nuevo Programaci´on de . . . SO, inspirado en MINIX (aunque sin c´odigode MINIX) Manejo de ficheros . . . • Esta primera versi´onten´ıapoco m´asde 10.000 l´ıneasde Programaci´on en . . . c´odigo Introducci´ona Perl . . .

2. En 1992, Linux se libera bajo licencia GPL P´aginawww 3. A trav´esde Internet, muchos programadores se unieron al P´aginainicial

proyecto JJ II

4. En 1994 Linux alcanz´ola versi´on1.0 J I 5. En 2003, llegamos a la versi´on2.6, con casi 6 millones de P´agina 12 de 347 l´ıneasde c´odigo Regresar 6. En 2011, versi´on3.0, en 2015 versi´on4.0 (´ultima4.2) Pantalla completa

Cerrar

Abandonar GNU: ´Indice • El proyecto GNU( GNU’s Not Unix) fue iniciado en 1983 Introducci´ona . . . por Richard Stallman bajo los auspicios de la Instalaci´ondel . . . Foundation (ver noticia) Uso de la l´ıneade . . . Programaci´on de . . . ? Objetivo: crear un sistema operativo completo basado Manejo de ficheros . . . en software libre, incluyendo herramientas de desarrollo Programaci´on en . . . de software y aplicaciones Introducci´ona Perl . . . • En el momento de la liberaci´on,GNU no ten´ıalisto su kernel P´aginawww

? Linux fue adaptado para trabajar con las aplicaciones P´aginainicial de GNU: Sistema GNU/Linux JJ II 1. Kernel Linux + 2. Aplicaciones GNU: compilador (gcc), librer´ıaC (glibc) J I y depurador (gdb), shell bash, GNU Emacs, GNOME, P´agina 13 de 347

Gimp,. . . Regresar

? GNU tiene ahora su propio kernel: GNU Hurd Pantalla completa

Cerrar

Abandonar Mascotas ´Indice

Introducci´ona . . .

Instalaci´ondel . . .

Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 14 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Caracter´ısticasde Linux ´Indice 1. Sistema operativo de c´odigoabierto, multitarea y multiusuario Introducci´ona . . . Instalaci´ondel . . .

2. Portable (corre en arquitecturas Intel x86 y IA64, Sparc, Uso de la l´ıneade . . .

MIPS, PowerPC, Alpha, PARisc,. . . ) Programaci´on de . . . 3. Soporte para multiprocesador Manejo de ficheros . . . Programaci´on en . . . 4. Soporte para m´ultiplessistemas de ficheros Introducci´ona Perl . . . 5. Kernel de tipo monol´ıticocon m´oduloscargables din´amicamente P´aginawww

P´aginainicial

JJ II

J I

P´agina 15 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Software Libre y Open Source ´Indice

Introducci´ona . . .

Instalaci´ondel . . .

Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I Software libre (free software): P´agina 16 de 347 • Movimiento que parte de las ideas de Richard Stallman Regresar • El software, una vez obtenido puede ser usado, copiado, es- Pantalla completa tudiado, modificado y redistribuido Cerrar • La distribuci´onno tiene que ser necesariamente gratuita Abandonar Open Source (o software de c´odigoabierto): ´Indice • Posibilidad de acceder al c´odigofuente, y modificarlo y dis- Introducci´ona . . . tribuirlo dentro de una determinada licencia de c´odigoabierto Instalaci´ondel . . . (ver www.opensource.org/licenses) Uso de la l´ıneade . . . Programaci´on de . . . • La Open Source Initiative fue fundada en febrero de 1998 Manejo de ficheros . . . por y Eric S. Raymond para la certificaci´on Programaci´on en . . . de software Open Source Introducci´ona Perl . . . FLOSS Free/Libre/Open-Source Software P´aginawww

• Software libre y open software P´aginainicial

Diferencia entre ellos principalmente filos´oficas JJ II

• C´odigoabierto: es una metodolog´ıade programaci´on J I • Software libre: asociado a la libertad del usuario P´agina 17 de 347 Regresar Ejemplo de la diferencia: dispositivos tiranos o tivoized M´asinformaci´on: www.gnu.org/philosophy/ Pantalla completa

Cerrar

Abandonar Licencia GPL ´Indice La licencia GPL (GNU General Public License): Introducci´ona . . . Instalaci´ondel . . .

1. Bajo GPL el software puede ser copiado y modificado Uso de la l´ıneade . . . 2. Las modificaciones deben hacerse p´ublicasbajo GPL (copy- Programaci´on de . . . left) Manejo de ficheros . . . Programaci´on en . . . 3. Se impide que el c´odigose mezcle con c´odigopropietario Introducci´ona Perl . . . La licencia LGPL (GNU Lesser General Public License) permite P´aginawww integrar el software con software propietario P´aginainicial • Pensado para librer´ıasque pueden ser usadas en el desarrollo de software propietario JJ II J I M´asinformaci´onsobre licencias: P´agina 18 de 347 • Introducci´ona las licencias Regresar

• Varias licencias y comentarios Pantalla completa

Cerrar

Abandonar Distribuciones de GNU/Linux ´Indice Colecci´onde software que forma un S.O. basado en el kernel Introducci´ona . . . Linux; normalmente incluye: Instalaci´ondel . . . Uso de la l´ıneade . . .

1. El kernel Linux Programaci´on de . . . 2. Las aplicaciones GNU (o parte de ellas) Manejo de ficheros . . . Programaci´on en . . . 3. Software de terceros, libre o propietario: X Windows, servi- Introducci´ona Perl . . . dores, utilidades,. . .

P´aginawww Las distribuciones difieren en el empaquetado de los programas (RPM, , tgz), el programa de instalaci´ony herramientas es- P´aginainicial pec´ıficas JJ II

• Lista de distribuciones en wikipedia: en.wikipedia.org/wiki/List of LinuxJ distributionsI • Timeline de distribuciones P´agina 19 de 347

Regresar • Informaci´oninteresante en http://www.distrowatch.com Pantalla completa Algunas de las m´aspopulares son , (Fedora), Cerrar Mandriva (Mageia), Slackware, SuSE, Gentoo, . . . Abandonar ´Indice Debian Introducci´ona . . . Instalaci´ondel . . .

• Distribuci´ontotalmente libre, sin fines comerciales Uso de la l´ıneade . . . • Tres ramas en la distribuci´on: Programaci´on de . . . Manejo de ficheros . . .

1. Stable: destinada a entornos de producci´on(desde abril Programaci´on en . . . 2015, versi´on8.0 jessie) Introducci´ona Perl . . . 2. Testing: software m´asnuevo, en fase de prueba (actual- mente stretch) P´aginawww 3. Unstable: en fase de desarrollo (siempre sid) P´aginainicial • Versiones anteriores: JJ II J I ? 7.0 wheezy, mayo 2013 P´agina 20 de 347 ? 6.0 squeeze, febrero 2011 Regresar ? 5.0 lenny, febrero 2009 Pantalla completa ? 4.0 etch, abril 2007 Cerrar ? 3.1 sarge, junio 2005 Abandonar ? 3.0 woody, julio 2002 ´Indice

? 2.2 potato, agosto 2000 Introducci´ona . . . ? 2.1 slink, marzo 1999 Instalaci´ondel . . . Uso de la l´ıneade . . . ? 2.0 hamm, julio 1998 Programaci´on de . . . ? 1.3 bo, junio 1997 Manejo de ficheros . . .

? 1.2 rex, diciembre 1996 Programaci´on en . . . ? 1.1 buzz, junio 1996 Introducci´ona Perl . . .

• Algunas caracter´ısticas P´aginawww 1. Gran n´umerode aplicaciones disponibles P´aginainicial 2. Potente formato de empaquetado: paquetes DEB y herra- JJ II

mienta APT J I

3. Instalaci´ony cambio de versiones a trav´esde red P´agina 21 de 347

Regresar

Pantalla completa

Cerrar

Abandonar ´Indice Ubuntu Introducci´ona . . . Instalaci´ondel . . . • Distribuci´onenfocada a ordenadores de escritorio (Desktop Uso de la l´ıneade . . . Computers), aunque existe la versi´onpara servidores Programaci´on de . . .

• Basada en Debian, Ubuntu concentra su objetivo en la usa- Manejo de ficheros . . .

bilidad, lanzamientos regulares y facilidad en la instalaci´on Programaci´on en . . . • Patrocinado por Canonical Ltd., una empresa privada fun- Introducci´ona Perl . . .

dada y financiada por el empresario sudafricano Mark Shut- P´aginawww tleworth P´aginainicial • Ultima´ versi´on: Ubuntu 15.04 (Vivid Vervet), fue lanzada el 23 de abril de 2015 JJ II J I • Pr´oximaversi´on: Ubuntu 15.10 (Wily Werewolf ) prevista para el 22 de octubre de 2015 P´agina 22 de 347 • Ultima´ versi´oncon soporte a largo plazo: Ubuntu 14.04 LTS Regresar (Trusty Tahr) Pantalla completa • Proyectos relacionados: kubuntu, edubuntu, xubuntu Cerrar

Abandonar ´Indice Red Hat Introducci´ona . . . Instalaci´ondel . . . • Una de las principales firmas comerciales del mundo GNU/Linux Uso de la l´ıneade . . .

• Fundada por y en 1994 Programaci´on de . . . • Inicialmente, proporcionaba distribuciones para el usuario Manejo de ficheros . . . individual (versiones personal y profesional), y orientadas a Programaci´on en . . . empresas (versi´on Enterprise) Introducci´ona Perl . . .

• Introduce el formato de empaquetado RPM (RedHat Pack- P´aginawww

age Manager) P´aginainicial

• Desde 2002, orientado en exclusiva al mercado corporativo JJ II

? Cede la ´ultimadistribuci´onpersonal (RH 9) a la comu- J I

nidad −→ aparece el proyecto Fedora P´agina 23 de 347

• Ultima´ versi´on: 7( Maipo) desde Regresar junio de 2014 Pantalla completa

• Distribuciones libres que clonan RHEL: CentOS, Scientific Cerrar Linux, ClearOS, etc. Abandonar Fedora ´Indice Introducci´ona . . . • Objetivo: construir un SO completo, de prop´ositogeneral Instalaci´ondel . . . basado exclusivamente en c´odigo abierto Uso de la l´ıneade . . .

• Parte de la versi´onRed Hat 9 Programaci´on de . . . • Mantiene el sistema de paquetes RPM Manejo de ficheros . . . Programaci´on en . . .

• Ultima´ versi´on:Fedora 22, 26 de mayo de 2015 Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 24 de 347

Regresar

Pantalla completa

Cerrar

Abandonar ´Indice Slackware Introducci´ona . . . Instalaci´ondel . . . • Una de las primeras distribuciones: creada en 1993 Patrick Uso de la l´ıneade . . . Volkerding Programaci´on de . . . • Orientada hacia usuarios avanzados: Manejo de ficheros . . . Programaci´on en . . . • Ultima versi´on:Slackware 14.1 (4 de noviembre de 2013) Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 25 de 347

Regresar

Pantalla completa

Cerrar

Abandonar ´Indice

SuSE Linux Introducci´ona . . . • Compa˜n´ıaalemana fundada en 1992, subsidiaria de Micro Instalaci´ondel . . . Focus International Uso de la l´ıneade . . . Programaci´on de . . . • Originalmente basada en Slackware Manejo de ficheros . . .

• Herramienta de configuraci´ongr´afica: YaST (Yet Another Programaci´on en . . . Setup Tool) Introducci´ona Perl . . .

• Principales versiones: SUSE Linux Enterprise Servery SUSE P´aginawww Linux Enterprise Desktop P´aginainicial

• Versi´onopen source: openSUSE, ´ultimarevisi´on13.2 (4 de JJ II noviembre de 2014) J I

P´agina 26 de 347

Regresar

Pantalla completa

Cerrar

Abandonar ´Indice Gentoo Linux Introducci´ona . . . Instalaci´ondel . . .

• Distribuci´onorientada a permitir la m´aximaadaptabilidad Uso de la l´ıneade . . .

y rendimiento Programaci´on de . . . ? puede ser optimizada y configurada autom´aticamente Manejo de ficheros . . . para el uso en un sistema concreto Programaci´on en . . . Introducci´ona Perl . . . • : Sistema de distribuci´on,compilaci´one instalaci´on de software P´aginawww P´aginainicial • Distro ligera y flexible centrada en la elegancia, correcci´on JJ II del c´odigo,minimalismo, y simplicidad (KISS) J I • Gestor de paquetes Pacman P´agina 27 de 347 Regresar

Pantalla completa

Cerrar

Abandonar Otras distribuciones ´Indice • Existen cientos de distribuciones diferentes de Linux Introducci´ona . . . Instalaci´ondel . . .

? Adaptadas a diferentes necesidades: seguridad, multi- Uso de la l´ıneade . . .

media, sistemas viejos, an´alisisforense, clusters. . . Programaci´on de . . .

? Suelen estar basadas en las principales distribuciones Manejo de ficheros . . . • Ejemplos (ver distrowatch.com): Programaci´on en . . . Introducci´ona Perl . . . 1. Sistemas basados en Debian/Ubuntu: LinuxMint, Knop- pix y derivados (BAcktrack, Damn Small. . . ), Trisquel, P´aginawww Minino, Guadalinex,... P´aginainicial

2. Sistemas basados en RedHat/Fedora: Mageia, PCLin- JJ II uxOS, Oracle Linux, Springdale, Berry Linux, Kororaa, J I Tinyme, Rocks... P´agina 28 de 347 3. Sistemas basados en Slackware: SLAX, , Vec- torlinux, Porteus, Absolute... Regresar 4. Sistemas basados en Gentoo: Funtoo, Sabayon, Pentoo, Pantalla completa

Toorox... Cerrar

Abandonar 5. Sistemas basados en Arch: Parabola, Manjaro, Arch- ´Indice

bang, Chakra... Introducci´ona . . .

Instalaci´ondel . . .

Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 29 de 347

Regresar

Pantalla completa

Cerrar

Abandonar 2. Instalaci´ondel sistema y de software ´Indice

Introducci´ona . . . A la hora de instalar un sistema, tenemos que tener en cuenta el Instalaci´ondel . . . tipo de funciones que va a desempe˜nar. Podemos distinguir: Uso de la l´ıneade . . . Programaci´on de . . .

1. Sistema de escritorio: usado en tareas rutinarias (ofim´atica, Manejo de ficheros . . .

acceso a Internet, etc.) Programaci´on en . . . 2. Estaci´onde trabajo (workstation): sistema de alto rendimiento, Introducci´ona Perl . . .

generalmente orientado a una tarea espec´ıfica P´aginawww

• estaci´ondedicada al c´alculo(p.e. aplicaciones cient´ıficas) P´aginainicial

• estaciones gr´aficas(p.e. dise˜no3D) JJ II

3. Servidores: ofrecen servicios a otras m´aquinas de la red J I • servicios de disco, impresi´on,acceso a Internet, filtrado, P´agina 30 de 347 etc. Regresar

Pantalla completa

Cerrar

Abandonar Tipos de servicios ´Indice Un sistema servidor ofrece servicios al resto de sistemas de la red: Introducci´ona . . . Instalaci´ondel . . .

1. Aplicaciones Uso de la l´ıneade . . . • servicios de terminales, conexi´onremota (telnet, ssh), Programaci´on de . . . aplicaciones gr´aficasa trav´esde X Window, aplicaciones Manejo de ficheros . . . web, etc. Programaci´on en . . . Introducci´ona Perl . . . 2. Ficheros

P´aginawww • acceso a ficheros a trav´esde FTP, P´aginainicial • servicio transparente a trav´esde NFS o Samba JJ II 3. Impresi´on J I • servir impresoras locales o remotas a otros sistemas UNIX P´agina 31 de 347 o Windows Regresar 4. Servicios de informaci´onde red, por ejemplo, NIS, NIS+ o Pantalla completa LDAP Cerrar

Abandonar • permiten centralizar la informaci´onde las m´aquinas, ´Indice

usuarios y recursos Introducci´ona . . . 5. Servicios de configuraci´ondin´amicade m´aquinas Instalaci´ondel . . . Uso de la l´ıneade . . .

• DHCP (Dynamic Host Configuration Protocol): per- Programaci´on de . . . mite configurar din´amicamente la red de los clientes Manejo de ficheros . . . 6. Correo electr´onico Programaci´on en . . . Introducci´ona Perl . . . • agentes MTA (Mail Transfer Agent) para recuperar y retransmitir correo, o servicios de POP o IMAP P´aginawww 7. Servidor Web (p.e. Apache) P´aginainicial 8. Servicio de nombres (DNS) JJ II J I 9. Servicio de base de datos P´agina 32 de 347 10. Servicios de acceso a Internet: NAT, proxy Regresar

11. Servicios de filtrado (firewall) Pantalla completa

Cerrar

Abandonar Virtualizaci´on ´Indice Abstracci´onde un conjunto de recursos computacionales para Introducci´ona . . . que puedan ser utilizados de forma m´asconveniente Instalaci´ondel . . . Uso de la l´ıneade . . .

• Memoria virtual Programaci´on de . . . • Sistemas RAID o LVM Manejo de ficheros . . . Programaci´on en . . . • Virtualizaci´onde servidores Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 33 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Virtualizaci´onde servidores ´Indice • M´aquinavirtual Introducci´ona . . . Instalaci´ondel . . .

? Entorno virtual entre el sistema real y el usuario final Uso de la l´ıneade . . .

que permite que este ejecute un software determinado Programaci´on de . . .

? Normalmente usado para ejecutar varios sistemas oper- Manejo de ficheros . . .

ativos simultaneamente sobre el mismo hardware Programaci´on en . . . • Usos de la virtualizaci´on Introducci´ona Perl . . . ? Consolidaci´onde servidores P´aginawww ? Execuci´onde aplicaci´onsnon-fiables P´aginainicial ? Recuperaci´onde desastres JJ II

? Pruebas y desarrollo de software J I

? Computaci´onel´astica(cloud computing) P´agina 34 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Conceptos: ´Indice

Introducci´ona . . .

Instalaci´ondel . . .

Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww • Sistema anfitri´on (host): SO ejecutado sobre la m´aquina real P´aginainicial • Sistema huesped (guest): SO ejecutado sobre la m´aquina JJ II virtual J I

P´agina 35 de 347 Algunas herramientas de virtualizaci´on: Regresar • VirtualBox desarrollado originalmente por la empresa ale- mana Innotek, ahora propiedad de Oracle; version Open Pantalla completa Source (VBox OSE) y propietaria Cerrar

Abandonar • QEMU emulador/virtualizador de c´odigoabierto desarrol- ´Indice

lado por Fabrice Bellard Introducci´ona . . . • KVM virtualizaci´onasistida por hardware, utiliza una versi´on Instalaci´ondel . . . modificada de QEMU como front-end. Uso de la l´ıneade . . . Programaci´on de . . . • Xen desarrollado inicialmente en la universidad de Cam- Manejo de ficheros . . . bridge, versiones comerciales Citrix XenServer, Oracle VM,. . . Programaci´on en . . . • VMWare Workstation programa propietario de VMware Inc.; Introducci´ona Perl . . . es uno de los m´asconocidos (versiones para Windows y P´aginawww Linux) P´aginainicial • Hyper-V herramienta de JJ II Una comparativa en wikipedia J I

P´agina 36 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Tipos de virtualizaci´on: ´Indice • Emulaci´on(o recompilaci´ondin´amica):la m´aquina virtual Introducci´ona . . . simula el hardware completo Instalaci´ondel . . . Uso de la l´ıneade . . .

? Permite ejecutar SOs para sistemas diferentes del an- Programaci´on de . . . fitri´on Manejo de ficheros . . .

? Normalmente es lenta Programaci´on en . . . ? Ejemplos: Bochs, PearPC, QEMU sin aceleraci´on,.. . Introducci´ona Perl . . .

• Paravirtualizaci´on: la m´aquinavirtual no simula todo el P´aginawww

hardware, sino que ofrece una API especial P´aginainicial

? Requiere modificaci´onsen el SO huesped JJ II

? Velocidad nativa J I

? Ejemplos: Xen P´agina 37 de 347

Regresar

Pantalla completa

Cerrar

Abandonar • Virtualizaci´oncompleta: la m´aquinavirtual s´olosimula el ´Indice

hardware necesario para permitir que un SO huesped se Introducci´ona . . .

pueda ejecutar Instalaci´ondel . . . ? El SO huesped debe ser para el tipo de arquitectura del Uso de la l´ıneade . . . host Programaci´on de . . . ? Velocidad cerca de la nativa Manejo de ficheros . . . Programaci´on en . . . ? Ejemplos: VMWare, QEMU con aceleraci´on, Parallels Introducci´ona Perl . . . Desktop for Mac, etc.

P´aginawww • Virtualizaci´onasistida por hardware P´aginainicial ? El hardware del anfitri´onproporciona soporte para mejo- rar la virtualizaci´on: x86 virtualization, (Intel VT o JJ II AMD-V) J I

? Velocidad similar a la paravirtualizaci´onsin necesidad P´agina 38 de 347

de modificar el huesped Regresar ? Ejemplos: Xen, VirtualBox, KVM, VMWare, Parallels Pantalla completa Workstation, etc. Cerrar

Abandonar • Virtualizaci´ona nivel de SO: aisla varios servidores sobre el ´Indice

SO anfitri´on Introducci´ona . . . ? Tambi´enllamados Contenedores Software Instalaci´ondel . . . Uso de la l´ıneade . . . ? Los SO huespedes son los mismos que el anfitri´on,ya que usan el mismo kernel Programaci´on de . . . Manejo de ficheros . . . ? Ejemplos: User-mode Linux, FreeBSD Jail, Linux-VServer, Programaci´on en . . . Docker,. . . Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 39 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Instalaci´onde Linux Debian ´Indice Para detalles de instalaci´onver Gu´ıade instalaci´onde Debian Introducci´ona . . . Instalaci´ondel . . . • Descargaremos la imagen de CD peque˜no(fichero debian-8.2.0-i386-netinst.iso) Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 40 de 347

Regresar

Pantalla completa • Enter para iniciar con opciones por defecto, Advances options Cerrar para opciones de instalaci´onavanzadas, Help para ayuda Abandonar 1 Siguientes pasos en la instalaci´on ´Indice • Selecci´onde idioma, localizaci´ony teclado Introducci´ona . . . Instalaci´ondel . . .

• Configuraci´onde la red Uso de la l´ıneade . . . ? Por defecto, intenta configurarla por DHCP Programaci´on de . . . ? Si no lo consigue, pasa a configuraci´onmanual (indicar Manejo de ficheros . . . IP, m´ascara,pasarela y DNSs) Programaci´on en . . . Introducci´ona Perl . . . • Poner un nombre a la m´aquinae indicar el dominio (si al- guno) P´aginawww

P´aginainicial • Fijar el password del superusuario (root) y crear un usuario no privilegiado JJ II

J I 1En cualquier momento de la instalaci´ontenemos acceso a una consola pulsando Alt-F2; usar Alt-F1 para volver a la instalaci´on P´agina 41 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Cuenta del superusuario ´Indice • El superusuario es un usuario especial que act´uacomo ad- Introducci´ona . . . ministrador del sistema Instalaci´ondel . . . Uso de la l´ıneade . . .

? Tiene acceso a todos los archivos y directorios del sis- Programaci´on de . . . tema Manejo de ficheros . . .

? Tiene capacidad para crear nuevos usuarios o eliminar Programaci´on en . . .

usuarios Introducci´ona Perl . . . ? Tiene capacidad de instalar y borrar software del sis- P´aginawww tema o aplicaciones ? Puede detener cualquier proceso que se est´aejecutando P´aginainicial en el sistema JJ II

? Tiene capacidad de detener y reiniciar el sistema J I • El login del superusuario es root (aunque puede cambiarse) P´agina 42 de 347

Regresar • No es conveniente acceder al sistema directamente como root: Pantalla completa ? acceder como un usuario sin privilegios, y Cerrar

Abandonar ? obtener los permisos de root haciendo su (necesitamos ´Indice

la contrase˜nade root) Introducci´ona . . .

Instalaci´ondel . . . Elecci´onde contrase˜na Uso de la l´ıneade . . .

• Tener una contrase˜nade root adecuada es b´asicopara la Programaci´on de . . . seguridad de un sistema Manejo de ficheros . . .

Programaci´on en . . . • Las contrase˜nasde usuario tambi´endeber´ıanser adecuadas Introducci´ona Perl . . . • Recomendaciones para elegir una contrase˜na: P´aginawww ? No usar el nombre de usuario (login) ni variantes de este P´aginainicial (p.e. login: pepe, passwd: pepe98) ? No usar el nombre real del usuario ni los apellidos JJ II ? No usar palabras contenidas en diccionarios, o palabras J I de uso com´un P´agina 43 de 347 ? Usar m´asde 6 caracteres para la contrase˜na Regresar

? Mezclar caracteres en may´usculasy min´usculas,con Pantalla completa

caracteres no alfab´eticos(n´umeros,signos de puntuaci´on, Cerrar etc.) Abandonar ? Usar contrase˜nasf´acilesde recordar, para evitar tener ´Indice

que apuntarlas Introducci´ona . . .

? Cambiar la contrase˜nacon frecuencia (p.e. una vez al Instalaci´ondel . . .

mes) Uso de la l´ıneade . . . • La contrase˜nase cambia con el comando passwd Programaci´on de . . . Manejo de ficheros . . .

? passwd: cambia la contrase˜na(password) del usuario Programaci´on en . . . ? Ejemplo: usuario pepe Introducci´ona Perl . . .

# passwd P´aginawww

Changing password for pepe P´aginainicial (current) UNIX password: JJ II Enter new UNIX password: Retype new UNIX password: J I

passwd: password updated successfully P´agina 44 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Continuaci´onde la instalaci´on ´Indice En una instalaci´onpor red los paquetes se traen de un repositorio Introducci´ona . . . remoto a trav´esde http o ftp Instalaci´ondel . . . Uso de la l´ıneade . . .

• Seleccionar el huso horario Programaci´on de . . . • Realizar el particionado del disco (modo guiado o manual) Manejo de ficheros . . . Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 45 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Particionado del disco ´Indice Podemos optar por instalar todo el sistema en una sola partici´on, Introducci´ona . . . aunque no es nada recomendable Instalaci´ondel . . . Uso de la l´ıneade . . .

• preferible instalar diferentes directorios del sistema en difer- Programaci´on de . . . entes particiones Manejo de ficheros . . . • la estructura de directorios UNIX sigue el est´andarFHS Programaci´on en . . . (Filesystem Hierarchy Standard) Introducci´ona Perl . . .

P´aginawww Filesystem Hierarchy Standard

P´aginainicial Localizaci´onest´andarde los ficheros JJ II • /bin/ (binaries) - ejecutables esenciales (ls, cat, bash, etc.) J I P´agina 46 de 347 • /sbin/ -(superuser binaries) - ejecutables esenciales para el superusuario (init, ifconfig, etc.) Regresar

Pantalla completa • /lib/ - Librer´ıasesenciales para los ejecutables en /bin/ y /sbin/ Cerrar

Abandonar • /usr/ (Unix system resources) - aplicaciones y c´odigofuente ´Indice

usados por los usuarios y el superusuario Introducci´ona . . . ? /usr/bin/ - m´asaplicaciones de usuario Instalaci´ondel . . . Uso de la l´ıneade . . . ? /usr/sbin/ - m´asaplicaciones para el superusuario Programaci´on de . . . ? - librer´ıasesenciales para los ejecutables en /usr/lib/ Manejo de ficheros . . . /usr/bin/ y /usr/sbin/ Programaci´on en . . .

? /usr/share/ - datos, independientes de la arquitectura, Introducci´ona Perl . . . necesarios para las aplicaciones y p´aginasde manual (/usr/share/man, /usr/share/info) P´aginawww ? /usr/include/ - ficheros de cabecera (.h) est´andar P´aginainicial

? /usr/src/ (opcional) - c´odigofuente (del kernel u otras JJ II

aplicaciones) J I

? /usr/X11R6/ (opcional) - sistema X Window, versi´on P´agina 47 de 347 11 release 6 Regresar ? /usr/local/ - aplicaciones que no son parte del sistema operativo Pantalla completa

Cerrar

Abandonar • /etc/ - contiene muchos de los scripts y ficheros de confi- ´Indice

guraci´ondel sistema Introducci´ona . . . ? /etc/X11/ (opcional) - configuraci´onde X Window Instalaci´ondel . . . Uso de la l´ıneade . . . ? /etc/skel/ (opcional) - ficheros de configuraci´onpara los usuarios Programaci´on de . . . Manejo de ficheros . . .

• /var/ - ficheros variables (logs, bases de datos, etc.) Programaci´on en . . . ? /var/log/ - ficheros de log Introducci´ona Perl . . . ? /var/spool/ - ficheros temporales de impresi´on,e-mail P´aginawww

y otros P´aginainicial

• /tmp/ - ficheros temporales JJ II

• /opt/ - otras aplicaciones software (est´aticas) J I • /srv/ - datos de servicios proporcionados por el sistema P´agina 48 de 347 (p´aginasweb, ftp, cvs, etc.) Regresar • /boot/ - ficheros usados por el gestor de arranque, incluyendo Pantalla completa el kernel Cerrar

Abandonar Otros directorios del sistema ´Indice • / - directorio ra´ızdel sistema Introducci´ona . . . Instalaci´ondel . . .

• /home/ (opcional) - directorio de usuarios (directorio inicial Uso de la l´ıneade . . .

o home) Programaci´on de . . . • /root/ (opcional) - directorio home del superusuario Manejo de ficheros . . . Programaci´on en . . . • - ficheros de acceso a perif´ericos /dev/ Introducci´ona Perl . . . • - directorio virtual conteniendo informaci´ondel sis- /proc/ P´aginawww tema P´aginainicial • /sys/ - similar a /proc, contiene informaci´onde dispositivos (s´olokernel 2.6) JJ II J I • /media/ - punto de montaje para medios removibles P´agina 49 de 347 • - punto de montaje para sistemas temporales /mnt/ Regresar

Para m´asinformaci´onver www.pathname.com/fhs/ Pantalla completa

Cerrar

Abandonar Esquemas de particionamiento ´Indice Dependiendo del tipo de sistema podemos escoger diferentes es- Introducci´ona . . . quemas de particionamiento, algunos ejemplos: Instalaci´ondel . . . Uso de la l´ıneade . . .

• Maquina de escritorio (un s´olousuario), tres particiones Programaci´on de . . . ? swap - ´areade intercambio; siempre necesaria, tama˜no Manejo de ficheros . . . funci´ondel tama˜node la RAM y del tipo de aplicaciones Programaci´on en . . . que se ejecuten (como orientaci´on,tomar al menos el Introducci´ona Perl . . . doble de la RAM) P´aginawww ? /home/ - disco de los usuarios, tama˜noen funci´onde las necesidades del usuario P´aginainicial ? / - resto del disco JJ II • Sistema multiusuario, adem´asde las particiones anteriores J I crear particiones separadas para /usr, /var y /tmp P´agina 50 de 347

Regresar ? /usr podr´ıamontarse en modo s´olo-lecturadespu´esde que todo el sistema est´einstalado (dificulta la intro- Pantalla completa

ducci´onde Troyanos) Cerrar

Abandonar ? tener /var y /tmp en su partici´onevita que un usuario ´Indice

llene todo el disco Introducci´ona . . . • Particiones adicionales: Instalaci´ondel . . . Uso de la l´ıneade . . .

? /boot - en versiones antiguas de Linux se necesitaba que Programaci´on de . . . el directorio estuviese por debajo del cilindro /boot/ Manejo de ficheros . . . 1024 Programaci´on en . . .

? /chroot - para aplicaciones en un entorno enjaulado Introducci´ona Perl . . . (p.e. DNS, Apache, etc.) P´aginawww ? /var/lib - partici´onpara gestionar ficheros del servidor de bases de datos o del proxy (MySQL, squid) (limitar P´aginainicial

la posibilidad de un ataque por denegaci´onde servicio) JJ II

J I

P´agina 51 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Ejemplo de partici´on(disco de 50 G): ´Indice

Introducci´ona . . .

Instalaci´ondel . . .

Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 52 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Particionamiento durante la instalaci´on ´Indice Dos opciones: Introducci´ona . . . Instalaci´ondel . . .

• Particionamiento guiado (con o sin LVM) Uso de la l´ıneade . . . ? Selecciona el tama˜node las particiones de manera au- Programaci´on de . . . tom´atica Manejo de ficheros . . . Programaci´on en . . . • Particionamiento manual Introducci´ona Perl . . . ? Particionamiento manual P´aginawww ∗ control total del n´umeroy tama˜node las particiones P´aginainicial

JJ II

J I

P´agina 53 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Particionamiento manual ´Indice 1. Seleccionamos el disco a particionar y crear nueva tabla de Introducci´ona . . . particiones: Instalaci´ondel . . . Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 54 de 347

Regresar

Pantalla completa

Cerrar

Abandonar 2. Creamos una nueva partici´onindic´andoleel tama˜no,el tipo ´Indice

(primaria o l´ogica)y la localizaci´on(comienzo o final) Introducci´ona . . . • puede haber 4 primarias o 3 primarias y una extendida, Instalaci´ondel . . . que se puede dividir en varias l´ogicas Uso de la l´ıneade . . . Programaci´on de . . . Ejemplo de partici´onpara / Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 55 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Sistemas de ficheros ´Indice Linux soporta m´ultiplessistemas de ficheros Introducci´ona . . . Para cada partici´onpodemos seleccionar los siguientes: Instalaci´ondel . . . Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 56 de 347

Regresar

Pantalla completa

Cerrar

Abandonar • ext2 - Second EXTended filesystem, sistema est´andarLinux ´Indice • ext3 - Third EXTended filesystem, versi´oncon journal de Introducci´ona . . . ext2, que evita corrupci´on(opci´onpor defecto) Instalaci´ondel . . . Uso de la l´ıneade . . .

? es posible convertir ext2 en ext3 con el comando tune2fs Programaci´on de . . . -j Manejo de ficheros . . .

? muy robusto, aunque no escala muy bien (no ideal para Programaci´on en . . .

filesystems muy grandes, ficheros muy grandes o un Introducci´ona Perl . . . n´umerode ficheros en un directorio muy alto) P´aginawww • ext4 - Fourth EXTended filesystem, ´ultimaversi´on,disponible P´aginainicial desde el kernel 2.6.28, mejoras en velocidad y otros aspectos JJ II

J I

P´agina 57 de 347

Regresar

Pantalla completa

Cerrar

Abandonar • ReiserFS, JFS, XFS - otros tipos de sistemas transaccionales ´Indice

(con journal) usados en diferentes sistemas Introducci´ona . . . ? ReiserFS - por defecto en algunas distribuciones Linux Instalaci´ondel . . . (p.e. Slackware) Uso de la l´ıneade . . . ∗ mayor rendimiento que ext2 y ext3, principalmente Programaci´on de . . . con ficheros peque˜nos(menos de 4k) y buena esca- Manejo de ficheros . . . labilidad Programaci´on en . . . ∗ Sucesor: Reiser4 Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 58 de 347

Regresar

Pantalla completa

Cerrar

Abandonar ? XFS - usado en sistemas SGI Irix ´Indice

∗ optimizado para escalabilidad Introducci´ona . . . ∗ recomendado en grandes sistemas SCSI o fiber chan- Instalaci´ondel . . . nel con fuente de alimentaci´onininterrumpida (uti- Uso de la l´ıneade . . . liza cach´ede forma agresiva −→ perdida de datos si Programaci´on de . . . el sistema se apaga) Manejo de ficheros . . . ? JFS - usado en m´aquinasde IBM Programaci´on en . . . Introducci´ona Perl . . . • fat16, fat32 - usados en MS-DOS y Windows 95/98/Me P´aginawww Comparativa en wikipedia P´aginainicial

JJ II

J I

P´agina 59 de 347

Regresar

Pantalla completa

Cerrar

Abandonar ´ Ultimos pasos en la instalaci´on ´Indice • Debemos seleccionar el mirror desde el que descargar el soft- Introducci´ona . . . ware Instalaci´ondel . . . Uso de la l´ıneade . . .

? Existen varios repositorios de paquetes Debian −→ ele- Programaci´on de . . . gir el m´ascercano Manejo de ficheros . . .

? Introducir la informaci´ondel proxy, en caso de ser nece- Programaci´on en . . .

sario Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 60 de 347

Regresar

Pantalla completa

Cerrar

Abandonar ´Indice

Introducci´ona . . .

Instalaci´ondel . . .

Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

• Seleccionar los paquetes software a instalar JJ II • Instalar del gestor de arranque J I

P´agina 61 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Selecci´onde paquetes ´Indice

Introducci´ona . . .

Instalaci´ondel . . .

Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II • Elegir los paquetes a instalar: J I

? aunque optemos por no instalar nada, se instalar´anto- P´agina 62 de 347 dos los paquetes con prioridad “est´andar”,“importante” o “requerido” que a´unno est´eninstalados en el sistema Regresar Pantalla completa • Podemos repetir este paso con el sistema instalado usando el comando tasksel Cerrar

Abandonar Instalaci´ondel gestor de arranque ´Indice Gestor de arranque: permite seleccionar el SO a arrancar Introducci´ona . . . Exist´ıan2 posibilidades en Linux Instalaci´ondel . . . Uso de la l´ıneade . . .

• LILO (LInux Loader), cargador cl´asicoen Linux (obsoleto) Programaci´on de . . . • GRUB (GRand Unified Bootloader), cargador del proyecto Manejo de ficheros . . . GNU Programaci´on en . . . Introducci´ona Perl . . . La gran mayor´ıade las distribuciones usan GRUB (las m´asac- tuales la versi´on2) P´aginawww

P´aginainicial

JJ II

J I

P´agina 63 de 347

Regresar

Pantalla completa

Cerrar

Abandonar El gestor de arranque se carga normalmente en el MBR del ´Indice primer disco Introducci´ona . . . • MBR (Master Boot Record) est´alocalizado en el primer sec- Instalaci´ondel . . . tor del disco Uso de la l´ıneade . . . Programaci´on de . . . • en el MBR se encuentra informaci´onsobre las particiones Manejo de ficheros . . . (Master Partition Table) y un peque˜noc´odigo(Master Boot Programaci´on en . . . Code) Introducci´ona Perl . . . • cuando el sistema se inicia, la BIOS carga el Master Boot P´aginawww Code, que permite seleccionar el sistema a cargar, y trans- fiere el control al programa de arranque del SO (localizado P´aginainicial

en /boot) JJ II

El gestor de arranque puede tambi´encargarse en el primer sector J I de la partici´onroot (por si tenemos otro bootloader en el MBR) P´agina 64 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Instalaci´onde GRUB en Debian ´Indice

Introducci´ona . . .

Instalaci´ondel . . .

Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 65 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Finalizaci´onde la instalaci´on ´Indice Debian: la instalaci´ontermina aqu´ı Introducci´ona . . . Instalaci´ondel . . .

Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 66 de 347

Regresar

Debemos reiniciar el sistema para continuar Pantalla completa

Cerrar

Abandonar Logical Volume Management (LVM) ´Indice Proporciona una visi´onde alto nivel de los discos Introducci´ona . . . Instalaci´ondel . . .

• permite ver varios discos como un ´unicovolumen l´ogico Uso de la l´ıneade . . . • permite hacer cambios en las particiones sin necesidad de Programaci´on de . . . reiniciar el sistema Manejo de ficheros . . . Programaci´on en . . . • permite gestionar los vol´umenesen grupos definidos por el Introducci´ona Perl . . . administrador

P´aginawww Conceptos (para m´asinformaci´on LVM HOWTO): P´aginainicial • Volumen f´ısico(PV): discos duros, particiones de los dis- cos u otro dispositivo similar (p.e. RAID) JJ II J I • Volumen l´ogico(LV): particiones l´ogicassobre las que se montan los sistemas de ficheros P´agina 67 de 347

Regresar • Grupo de vol´umenes(VG): agrupaci´onde LV, que for- man una unidad administrativa Pantalla completa

Cerrar

Abandonar • Extensi´onf´ısica(PE): unidades b´asicasen las que se di- ´Indice

vide cada PV; el tama˜node cada PE es el mismo para todas Introducci´ona . . .

los PV pertenecientes al mismo VG Instalaci´ondel . . . • Extensi´onl´ogica(LE): unidades b´asicasen las que se Uso de la l´ıneade . . . divide cada LV; para un VG el tama˜node las LE es el mismo Programaci´on de . . . que el de las PEs Manejo de ficheros . . . Programaci´on en . . . • Area´ de descripci´ondel VG (DAVG): ´area donde se Introducci´ona Perl . . . almacena la informaci´on(meta-data) sobre los LV y VG; ser´ıael equivalente a la tabla de particiones de un sistema P´aginawww no-LVM P´aginainicial

JJ II

J I

P´agina 68 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Estructura de LVM ´Indice

Introducci´ona . . .

Instalaci´ondel . . .

Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 69 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Hay una relaci´on1:1 entre cada LE y PE en un VG ´Indice

Introducci´ona . . .

Instalaci´ondel . . .

Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial • Se pueden elegir dos estrategias para mapear extensiones l´ogicasen extensiones f´ısicas: JJ II J I ? Mapeado Lineal: asigna un rango de PEs a un ´areade un LV en orden, por ejemplo LE 1-99 se mapean a PV1, P´agina 70 de 347 y los LE 100-199 se mapean a PV2 Regresar

? Stripping: se reparten los LEs entre los distintos PVs Pantalla completa

∗ 1 LE → PV1[1], 2 LE → PV2[1], 3 LE → PV3[1], Cerrar ... Abandonar Pasos para crear un sistema LVM ´Indice

Suponemos un sistema con dos discos (sda y sdb) Introducci´ona . . . 1. Crear los PV Instalaci´ondel . . . Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

• particionamos sda para reservar un espacio para /boot P´agina 71 de 347

(dejamos /boot fuera de LVM para evitar problemas Regresar con el arranque, aunque en las ´ultimasversiones no es Pantalla completa necesario) • definimos 2 vol´umenesf´ısicos Cerrar

Abandonar ? el primero incluye todo sda menos /boot (sda2) ´Indice

? el segundo incluye todo sdb (sdb1) Introducci´ona . . .

Instalaci´ondel . . .

Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 72 de 347

Regresar

Pantalla completa

Cerrar

Abandonar 2. Crear un grupo de volumen que incluya los PVs ´Indice

Introducci´ona . . .

Instalaci´ondel . . .

Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww • podemos ponerle un nombre al grupo de volumen P´aginainicial • hacemos que incluya los dos vol´umenesf´ısicosque hemos definido en el punto anterior JJ II J I

P´agina 73 de 347

Regresar

Pantalla completa

Cerrar

Abandonar 3. Crear los vol´umenesl´ogicos ´Indice

Introducci´ona . . .

Instalaci´ondel . . .

Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww • creamos un volumen l´ogicopor cada partici´on P´aginainicial • los LV pueden llevar un nombre identificativo JJ II

J I

P´agina 74 de 347

Regresar

Pantalla completa

Cerrar

Abandonar 4. Cifrar sistemas de ficheros ´Indice • podemos usar alg´unLV como “volumen f´ısicopara cifrado” Introducci´ona . . . Instalaci´ondel . . . • permite cifrar la informaci´on:contrase˜napara acceder Uso de la l´ıneade . . . a la misma Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 75 de 347

Regresar

Pantalla completa

Cerrar

Abandonar 5. Asignar sistemas de ficheros a los vol´umenes(cifrados o no) ´Indice

Introducci´ona . . .

Instalaci´ondel . . .

Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 76 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Configuraci´ondel gestor de arranque ´Indice Debemos configurar GRUB para evitar que sea modificado el Introducci´ona . . . menu de arranque Instalaci´ondel . . . Uso de la l´ıneade . . .

• debemos usar una contrase˜napara limitar: Programaci´on de . . . ? la modificaci´onde los par´ametrosiniciales Manejo de ficheros . . . ? el acceso a determinadas im´agenes Programaci´on en . . . Introducci´ona Perl . . . ? el acceso a opciones avanzadas

P´aginawww

P´aginainicial

JJ II

J I

P´agina 77 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Verificaci´onde la instalaci´on ´Indice • Las ´ultimasdistribuciones de Linux soportan la mayor´ıadel Introducci´ona . . . hardware actual. Instalaci´ondel . . . Uso de la l´ıneade . . .

• Hay soporte Linux para m´ultiplesarquitecturas: Intel, Al- Programaci´on de . . . pha, MIPS, PowerPC, SPARC, etc. Manejo de ficheros . . . • En el proceso de instalaci´onse configura autom´aticamente Programaci´on en . . . casi todo el hardware Introducci´ona Perl . . .

• M´asinformaci´onen Linux Hardware Compatibility HOWTO P´aginawww

(anticuado) o p´aginasrelacionadas P´aginainicial

JJ II

J I

P´agina 78 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Verificaci´ondel hardware ´Indice Para verificar los dispositivos PCI de nuestro sistema se puede Introducci´ona . . . usar lspci Instalaci´ondel . . . Uso de la l´ıneade . . .

• lspci: lista dispositivos PCI; algunas opciones (para m´as Programaci´on de . . .

opciones man lspci): Manejo de ficheros . . . ? -v: salida descriptiva Programaci´on en . . . Introducci´ona Perl . . . ? -vv: salida m´asdescriptiva ? -t: salida con estructura de ´arbol P´aginawww • Ejemplo: sistema con discos IDE, tarjeta VGA y dos tarjetas P´aginainicial de red: JJ II sarge1:~# lspci J I 0000:00:00.0 Host bridge: Intel Corp. 440FX - 82441FX PMC [Natoma] (rev 02) 0000:00:01.0 ISA bridge: Intel Corp. 82371SB PIIX3 ISA [Natoma/Triton II] P´agina 79 de 347 0000:00:01.1 IDE interface: Intel Corp. 82371SB PIIX3 IDE [Natoma/Triton II] 0000:00:02.0 VGA compatible controller: Cirrus Logic GD 5446 0000:00:03.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8029(AS) Regresar 0000:00:04.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8029(AS) Pantalla completa

Cerrar

Abandonar • Ejemplo: sistema con PCI Express, discos SATA y varios ´Indice

hubs USB conectados Introducci´ona . . . jumilla:~# lspci Instalaci´ondel . . . 0000:00:00.0 Host bridge: Intel Corp. 915G/P/GV Processor to I/O Controller (rev 04) 0000:00:01.0 PCI bridge: Intel Corp. 915G/P/GV PCI Express Root Port (rev 04) Uso de la l´ıneade . . . 0000:00:02.0 VGA compatible controller: Intel Corp. 82915G Express Chipset Family Graphics Controller (rev 04) Programaci´on de . . . 0000:00:02.1 Display controller: Intel Corp. 82915G Express Chipset Family Graphics Controller (rev 04) Manejo de ficheros . . . 0000:00:1c.0 PCI bridge: Intel Corp. 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 1 (rev 03) Programaci´on en . . . 0000:00:1c.1 PCI bridge: Intel Corp. 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 2 (rev 03) Introducci´ona Perl . . . 0000:00:1d.0 USB Controller: Intel Corp. 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #1 (rev 03) 0000:00:1d.1 USB Controller: Intel Corp. 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #2 P´aginawww (rev 03) 0000:00:1d.2 USB Controller: Intel Corp. 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #3 P´aginainicial (rev 03) 0000:00:1d.3 USB Controller: Intel Corp. 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #4 (rev 03) JJ II 0000:00:1d.7 USB Controller: Intel Corp. 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCI Controller (rev 03) 0000:00:1e.0 PCI bridge: Intel Corp. 82801 PCI Bridge (rev d3) J I 0000:00:1e.2 Multimedia audio controller: Intel Corp. 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC’97 Audio Controller (rev 03) P´agina 80 de 347 0000:00:1f.0 ISA bridge: Intel Corp. 82801FB/FR (ICH6/ICH6R) LPC Interface Bridge (rev 03) 0000:00:1f.1 IDE interface: Intel Corp. 82801FB/FBM/FR/FW/FRW (ICH6 Family) IDE Controller Regresar (rev 03) 0000:00:1f.2 IDE interface: Intel Corp. 82801FB/FW (ICH6/ICH6W) SATA Controller (rev 03) 0000:00:1f.3 SMBus: Intel Corp. 82801FB/FBM/FR/FW/FRW (ICH6 Family) SMBus Controller (rev Pantalla completa 03) 0000:02:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5751 Gigabit Ethernet PCI Express (rev 01) Cerrar

Abandonar • Algunas definiciones: ´Indice ? UHCI: Universal Host Controller Interface, est´andarde Introducci´ona . . . Intel para controladores USB (define como el contro- Instalaci´ondel . . . lador USB habla al ordenador y a su sistema operativo); Uso de la l´ıneade . . . otro est´andarsimilar es OHCI (Open Host Controller Programaci´on de . . . Interface), desarrollado por Compaq, Microsoft y Na- Manejo de ficheros . . . tional Semiconductor Corp. Programaci´on en . . . ? EHCI: Enhaced Host Controller Interface, versi´onex- Introducci´ona Perl . . .

tendida para USB 2 P´aginawww ? ICH6: Intel I/O Controller Hub 6 : controlador para P´aginainicial interfaz con el bus PCI ? SATA: Serial ATA JJ II ? SMBus: System Management Bus, bus sencillo para J I conectar dispositivos de bajo ancho de banda, usado P´agina 81 de 347

para gesti´onde energ´ıa(p.e. control de bater´ıaen port´atiles, Regresar sensores de temperatura, etc.) Pantalla completa

Cerrar

Abandonar Otro comando: lsusb ´Indice • lsusb: lista dispositivos USB; algunas opciones (para m´as Introducci´ona . . . opciones man lsusb): Instalaci´ondel . . . Uso de la l´ıneade . . .

? -v: salida descriptiva Programaci´on de . . .

? -t: salida con estructura de ´arbol Manejo de ficheros . . . • Ejemplo: sistema con teclado, rat´on,hubs USB y dos pen- Programaci´on en . . . drive: Introducci´ona Perl . . . jumilla:~# lsusb P´aginawww Bus 005 Device 019: ID 0c76:0005 JMTek, LLC. USBdisk Bus 005 Device 015: ID 0424:a700 Standard Microsystems Corp. P´aginainicial Bus 005 Device 001: ID 0000:0000 Bus 004 Device 001: ID 0000:0000 Bus 003 Device 001: ID 0000:0000 JJ II Bus 002 Device 009: ID 413c:3010 Dell Computer Corp. Bus 002 Device 001: ID 0000:0000 Bus 001 Device 011: ID 0ea0:2168 Ours Technology, Inc. Transcend JetFlash 2.0 / Astone USB J I Drive Bus 001 Device 007: ID 413c:2002 Dell Computer Corp. P´agina 82 de 347 Bus 001 Device 005: ID 413c:1002 Dell Computer Corp. Keyboard Hub Bus 001 Device 001: ID 0000:0000 Regresar

Pantalla completa

Cerrar

Abandonar Para verificar los recursos usados por el hardware podemos analizar ´Indice los ficheros interrupts, ioports y dma del directorio /proc Introducci´ona . . . • /proc/interrupts: muestra el n´umerode interrupciones Instalaci´ondel . . . por IRQ (para x86) Uso de la l´ıneade . . . Programaci´on de . . . • Ejemplo: sistema con una sola CPU Manejo de ficheros . . . # cat /proc/interrupts Programaci´on en . . . CPU0 Introducci´ona Perl . . . 0: 80448940 XT-PIC timer P´aginawww 1: 174412 XT-PIC keyboard 2: 0 XT-PIC cascade P´aginainicial

8: 1 XT-PIC rtc JJ II 10: 410964 XT-PIC eth0 12: 60330 XT-PIC PS/2 Mouse J I 14: 1314121 XT-PIC ide0 P´agina 83 de 347

15: 5195422 XT-PIC ide1 Regresar NMI: 0 Pantalla completa ERR: 0 Cerrar

Abandonar • la primera columna muestra el n´umerode IRQ, la segunda ´Indice

el numero de interrupciones por IRQ, la tercera el tipo de Introducci´ona . . .

interrupci´ony la cuarta el dispositivo localizado en esa IRQ Instalaci´ondel . . . • Definiciones Uso de la l´ıneade . . . Programaci´on de . . . ? XT-PIC: XT-Programmable Interrupt Controller, con- Manejo de ficheros . . . trolador de interrupciones de la arquitectura AT Programaci´on en . . .

? rtc: Real Time Clock Introducci´ona Perl . . . ? cascade: para conectar dos PICs (8259A y 8259B) P´aginawww ? eth0: tarjeta Ethernet P´aginainicial ? NMI (Nonmaskable Interrup), interrupci´onno-enmascarable JJ II

J I

P´agina 84 de 347

Regresar

Pantalla completa

Cerrar

Abandonar • Ejemplo: sistema con 2 CPUs (o 1 con hyperthreading) ´Indice # cat /proc/interrupts Introducci´ona . . . CPU0 CPU1 Instalaci´ondel . . . 0: 15126924 0 IO-APIC-edge timer Uso de la l´ıneade . . . 7: 2 0 IO-APIC-edge parport0 Programaci´on de . . . 8: 0 0 IO-APIC-edge rtc Manejo de ficheros . . . 9: 0 0 IO-APIC-level acpi Programaci´on en . . . 14: 135534 1 IO-APIC-edge ide0 Introducci´ona Perl . . . 169: 57807 0 IO-APIC-level libata 177: 630479 0 IO-APIC-level eth0 P´aginawww 185: 1807688 0 IO-APIC-level uhci_hcd, ehci_hcdP´aginainicial 193: 154227 0 IO-APIC-level uhci_hcd JJ II 201: 0 0 IO-APIC-level uhci_hcd 209: 2153331 0 IO-APIC-level uhci_hcd, IntelJ ICH I NMI: 0 0 P´agina 85 de 347

ERR: 0 Regresar

Pantalla completa

Cerrar

Abandonar • Definiciones ´Indice ? IO-APIC (I/O Advanced Programmable Interrupt Con- Introducci´ona . . . troller): arquitectura de Intel para manejo de interrup- Instalaci´ondel . . . ciones en entorno multiprocesador (basado en el chip Uso de la l´ıneade . . . Intel 82093AA) Programaci´on de . . . ? acpi (Advanced Configuration and Power Interface): in- Manejo de ficheros . . . terfaz est´andar para configuraci´ony manejo de energ´ıa Programaci´on en . . . gestionadas por el sistema operativo Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 86 de 347

Regresar

Pantalla completa

Cerrar

Abandonar • /proc/ioports: lista los puertos de entrada salida usados ´Indice

en el sistema Introducci´ona . . . # cat /proc/ioports Instalaci´ondel . . . 0000-001f : dma1 Uso de la l´ıneade . . . 0020-003f : pic1 Programaci´on de . . . 0040-005f : timer Manejo de ficheros . . . 0060-006f : keyboard Programaci´on en . . . 0070-007f : rtc Introducci´ona Perl . . . 0080-008f : dma page reg 00a0-00bf : pic2 P´aginawww 00c0-00df : dma2 P´aginainicial 00f0-00ff : fpu JJ II 0170-0177 : ide1 01f0-01f7 : ide0 J I 0376-0376 : ide1 P´agina 87 de 347

03c0-03df : vga+ Regresar 03f6-03f6 : ide0 03f8-03ff : serial(auto) Pantalla completa 0cf8-0cff : PCI conf1 Cerrar

Abandonar • /proc/dma: lista los canales ISA DMA registrados en uso ´Indice # cat /proc/dma Introducci´ona . . . 2: floppy Instalaci´ondel . . . 4: cascade Uso de la l´ıneade . . . Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 88 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Discos duros ´Indice En arquitectura Intel nos vamos a encontrar normalmente con Introducci´ona . . . alguno de los siguientes tipos de discos: Instalaci´ondel . . . Uso de la l´ıneade . . .

1. SCSI Programaci´on de . . . • usuales en servidores de altas prestaciones (PCs, SPARC, Manejo de ficheros . . . etc.) Programaci´on en . . . • identificados en Linux como: /dev/sda, /dev/sdb,. . . Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 89 de 347

Regresar

Pantalla completa

Cerrar

Abandonar 2. Serial ATA ´Indice • Los m´ascomunes Introducci´ona . . . Instalaci´ondel . . . • Linux los trata de forma similar a SCSI (/dev/sda,. . . ) Uso de la l´ıneade . . .

? soportados en el kernel 2.4.27 o superior (contro- Programaci´on de . . . lador libata) Manejo de ficheros . . . 3. IDE o Parallel ATA Programaci´on en . . . Introducci´ona Perl . . . • Practicamente no se usan en la actualidad • Identificados en Linux como: /dev/hda, /dev/hdb, /dev/hdc P´aginawww y /dev/hdd P´aginainicial

? hda, hdb controlador IDE primario maestro y es- JJ II clavo, respectivamente J I ? hdc, hdd controlador IDE secundario maestro y es- clavo, respectivamente P´agina 90 de 347 Regresar

Pantalla completa

Cerrar

Abandonar • Particiones: en Linux, las particiones en un disco se identi- ´Indice

fican con un n´umerodespu´esdel nombre del dispositivo: Introducci´ona . . . ? podemos ver las particiones con el comando fdisk -l Instalaci´ondel . . . (s´olosi superusuario): Uso de la l´ıneade . . . Programaci´on de . . .

# fdisk -l Manejo de ficheros . . .

Disco /dev/sda: 250.1 GB, 250059350016 bytes Programaci´on en . . .

255 cabezas, 63 sectores/pista, 30401 cilindros, 488397168Introducci´ona sectores Perl . . . en total Unidades = sectores de 1 * 512 = 512 bytes Tama~node sector (l´ogico/ f´ısico):512 bytes / 512 bytes P´aginawww

Tama~noE/S (m´ınimo/´optimo):512 bytes / 512 bytes P´aginainicial Identificador del disco: 0x259d4594 Dispositivo Inicio Comienzo Fin Bloques Id SistemaJJ II /dev/sda1 63 80324 40131 de UtilidadJ I Dell

/dev/sda2 4179966 488396799 242108417 5 ExtendidaP´agina 91 de 347 /dev/sda5 4179968 64178175 29999104 83 Linux Regresar /dev/sda6 64180224 68177919 1998848 82 Linux swap / Solaris /dev/sda8 72179712 488396799 208108544 83 LinuxPantalla completa

Cerrar

Abandonar ? podemos ver las particiones montadas con el comando ´Indice

df: Introducci´ona . . .

# df Instalaci´ondel . . . Sist. Fich 1K-bloques Usado Dispo~nibUso%Uso de la l´ıneade . . Montado. en /dev/sda5 29528148 20649776 7378420Programaci´on 74% de . . . / udev 1908232 4 1908228Manejo de ficheros 1% . /dev. . tmpfs 768136 1032 767104Programaci´on 1% en . . . /run none 5120 8 5112Introducci´ona 1% Perl . /run/lock . . none 1920332 2756 1917576 1% /run/shm P´aginawww cgroup 1920332 0 1920332 0% /sys/fs/cgroup /dev/sda8 204842776 147789824 46647528P´aginainicial 77% /home

JJ II ? Algunas opciones (para m´asopciones man df): J I ∗ -h: muestra valores m´as f´acilesde leer ∗ -i: muestra informaci´onsobre inodos P´agina 92 de 347 ∗ -T: imprime el tipo de sistema de ficheros Regresar

∗ -l: s´olomuestra sistemas de ficheros locales Pantalla completa

Cerrar

Abandonar Dispositivos SCSI ´Indice Muy usados en sistemas de altas prestaciones (servidores) Introducci´ona . . . Instalaci´ondel . . .

• No s´olodiscos: cintas, CD-ROMs, esc´aneres,etc. Uso de la l´ıneade . . . • Los dispositivos se conectan al bus en cadena (daisy-chained), Programaci´on de . . . actuando uno de ellos como controlador (interfaz con el host) Manejo de ficheros . . . Programaci´on en . . . Evoluci´onde SCSI Introducci´ona Perl . . . Versi´on Bus Freq. BW Long. N. disp. SCSI 8 bits 5 MHz 5 MB/s 6m 8 P´aginawww Fast SCSI 8 bits 10 MHz 10 MB/s 1.5-3m 8

Wide SCSI 16 bits 10 MHz 20 MB/s 1.5-3m 16 P´aginainicial Ultra SCSI 8 bits 20 MHz 20 MB/s 1.5-3m 5-8 Ultra Wide SCSI 16 bits 20 MHz 40 MB/s 1.5-3m 5-8 JJ II Ultra2 SCSI 8 bits 40 MHz 40 MB/s 12m 8 Ultra2 Wide SCSI 16 bits 40 MHz 80 MB/s 12m 16 J I Ultra3 SCSI 16 bits 40 MHz DDR 160 MB/s 12m 16 Ultra-320 SCSI 16 bits 80 MHz DDR 320 MB/s 12m 16 P´agina 93 de 347 Ultra-640 SCSI 16 bits 160 MHZ DDR 640 MB/s 12m 16 Regresar

Pantalla completa

Cerrar

Abandonar • Cada dispositivo en el bus (incluyendo el controlador) se ´Indice

identifica con un n´umero(SCSI address o target number) Introducci´ona . . . ? de 0 a 7 para bus de 8 bits y de 0 a 15 para bus de 16 Instalaci´ondel . . . bits Uso de la l´ıneade . . . ? usualmente, el controlador tiene target 7 (en los dos Programaci´on de . . . buses) Manejo de ficheros . . . Programaci´on en . . .

• Algunos dispositivos, como RAID, tienen un s´olotarget y Introducci´ona Perl . . . varios dispositivos l´ogicos: P´aginawww ? LUN: logical unit number, identifica los dispositivos l´ogicos P´aginainicial ? en discos simples o cintas LUN=0 JJ II

J I

P´agina 94 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Ejemplo de configuraci´onSCSI en Linux ´Indice

Dispositivo Target LUN Disp. Linux Introducci´ona . . .

Disco 0 0 - /dev/sda Instalaci´ondel . . . Disco 1 1 - /dev/sdb Cinta 5 - /dev/st0 Uso de la l´ıneade . . . RAID disp. 0 6 0 /dev/sdc Programaci´on de . . . RAID disp. 1 6 1 /dev/sdd Manejo de ficheros . . . Controlador 7 - - Programaci´on en . . .

Ejemplo, disco en Solaris: Introducci´ona Perl . . .

• partici´on6, del disco conectado al controlador 0, con target P´aginawww 9 y LUN 0: P´aginainicial ? /dev/dsk/c0t9d0s6 JJ II

Otras versiones SCSI J I

• Serial Attached SCSI (SAS): bus serie, mayor velocidad (375- P´agina 95 de 347

750 MB/s) Regresar

• iSCSI: Interner SCSI, permite el uso del protocolo SCSI so- Pantalla completa bre redes TCP/IP Cerrar

Abandonar Instalaci´onde software ´Indice Tenemos, b´asicamente dos formas de instalar programas en Linux: Introducci´ona . . . Instalaci´ondel . . .

• Compilaci´one instalaci´ondesde las fuentes Uso de la l´ıneade . . . ? Optimizaci´onpara nuestro sistema Programaci´on de . . . ? M´ascompleja Manejo de ficheros . . . Programaci´on en . . .

• Instalaci´ondesde paquetes precompilados Introducci´ona Perl . . .

? Menos optimizaci´on P´aginawww

? M´assencilla P´aginainicial

JJ II

J I

P´agina 96 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Instalaci´ondesde el c´odigofuente ´Indice Pasos: Introducci´ona . . . Instalaci´ondel . . .

1. Descarga: Uso de la l´ıneade . . . • Normalmente se distribuye en forma de tarballs: ficheros Programaci´on de . . . .tar.Z, .tar.gz, .tgz, .tar.bz2 o .tbz Manejo de ficheros . . . Programaci´on en . . . 2. Desempaquetado: comando tar (Tape ARchive format) Introducci´ona Perl . . . • tar - crea y extrae ficheros de un archivo P´aginawww • Opciones principales: P´aginainicial ? -c o --create - Crea un archivo tar JJ II ? -t o --list - Lista el contenido de un archivo ? -x o --extract - Extrae los ficheros de un archivo J I • Otras opciones P´agina 97 de 347 ? -f o --file fich - Usa el archivo fich (por defecto Regresar

“-” que significa entrada/salida est´andar) Pantalla completa

? -v o --verbose - Lista los ficheros seg´unse van Cerrar procesando Abandonar ? -z o --gzip - Comprime/descomprime ficheros gzip ´Indice

? -j o --bzip2 - Comprime/descomprime ficheros bzip2 Introducci´ona . . . • Ejemplos Instalaci´ondel . . . ? Muestra el contenido de un tar.gz Uso de la l´ıneade . . . $ tar tzvf archivo.tar.gz | more Programaci´on de . . . ? Extrae un fichero tar.bz2 Manejo de ficheros . . . $ tar xjvf archivo.tar.bz2 Programaci´on en . . . ? Crea un tar.gz con los ficheros del directorio dir Introducci´ona Perl . . .

$ tar czvf archivo.tar.gz dir/ P´aginawww

3. Leer el fichero INSTALL, INSTALAR o similar P´aginainicial

JJ II

J I

P´agina 98 de 347

Regresar

Pantalla completa

Cerrar

Abandonar 4. Configuraci´on ´Indice • El c´odigofuente desarrollado con ayuda de las herramien- Introducci´ona . . . tas GNU (autoconf ) contienen un script configure, que Instalaci´ondel . . . se encarga de: Uso de la l´ıneade . . . ? chequear el entorno de compilaci´on Programaci´on de . . . Manejo de ficheros . . . ? chequear las librer´ıasnecesarias Programaci´on en . . . ? generar los Makefiles que nos permitir´ancompilar Introducci´ona Perl . . . el c´odigo • Ejecuci´on P´aginawww ? ./configure P´aginainicial

• Para ver opciones: ./configure --help JJ II

• Ejemplo: J I

? ./configure --prefix=/opt P´agina 99 de 347

? instala el programa en /opt en vez de en el directorio Regresar por defecto (normalmente /usr/local) Pantalla completa

Cerrar

Abandonar 5. Compilaci´on ´Indice • El proceso de configuraci´ongenera ficheros makefile o Introducci´ona . . . Makefile en los directorios del c´odigofuente Instalaci´ondel . . . Uso de la l´ıneade . . . ? indican reglas (rules) que especifican como ejecutar ciertas tareas (targets) sobre el c´odigo: compilar, Programaci´on de . . . enlazar, crear p´aginasde manual, instalar Manejo de ficheros . . . Programaci´on en . . . • Funcionamiento: Introducci´ona Perl . . . ? make (ejecuta el target por defecto, normalmente todo, menos instalar) P´aginawww ? make all (si no existe el target por defecto) P´aginainicial

? make clean (borra ficheros objetos, ejecutables, etc) JJ II

6. Instalaci´on J I • Si la compilaci´ontermin´ocon ´exito, simplemente P´agina 100 de 347 ? make install (instala el programa ejecutable, li- Regresar

brer´ıas,p´aginasde manual) Pantalla completa

Cerrar

Abandonar Librer´ıascompartidas Dos tipos de ejecutables: ´Indice 1. Enlazados est´aticamente (statically linked): son “comple- Introducci´ona . . . tos” Instalaci´ondel . . . Uso de la l´ıneade . . .

2. Enlazados din´amicamente (dynamically linked): para ejecu- Programaci´on de . . . tarse necesitan librer´ıasinstaladas en el sistema Manejo de ficheros . . . • ocupan menos que los est´aticos Programaci´on en . . . • librer´ıascompartidas por varios programas Introducci´ona Perl . . . Para ver las librer´ıasque un ejecutable necesita usar ldd: P´aginawww

P´aginainicial # ldd /bin/ln libc.so.6 => /lib/tls/libc.so.6 (0xb7ea3000) JJ II

/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb7fea000) J I

P´agina 101 de 347

Regresar

Pantalla completa

Cerrar

Abandonar El cargador din´amico Se encarga de cargar los ejecutables con ´Indice las librer´ıasque necesitan Introducci´ona . . . • en linux es ld-linux.so.2 Instalaci´ondel . . . Uso de la l´ıneade . . .

• los directorios con librer´ıasson (adem´asde /lib/ y /usr/lib/) Programaci´on de . . . los indicados en el fichero /etc/ld.so.conf Manejo de ficheros . . . ? si modificamos ese fichero, debemos ejecutar el comando Programaci´on en . . . ldconfig, que regenera, a partir de los directorios indi- Introducci´ona Perl . . . cados en /etc/ld.so.conf, el fichero /etc/ld.so.cache P´aginawww ? para ver las librer´ıascompartidas: ldconfig -p |less P´aginainicial ? si queremos que el cargador cargue las librer´ıasde un directorio particular, antes de mirar los indicados en JJ II ld.so.conf usamos la variable de entorno LD LIBRARY PATH J I

∗ export LD LIBRARY PATH="/usr/lib/old:/opt/lib" P´agina 102 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Gestores de paquetes ´Indice En la mayor´ıa de distribuciones Linux, es posible obtener los Introducci´ona . . . programas precompilados en formato de paquetes Instalaci´ondel . . . Uso de la l´ıneade . . . • Ventajas: Programaci´on de . . .

? F´acilesde instalar y desinstalar Manejo de ficheros . . . ? F´acilesde actualizar Programaci´on en . . . ? F´acilcontrol de los programas instalados Introducci´ona Perl . . .

• Inconvenientes P´aginawww ? Binarios menos optimizados P´aginainicial ? Problemas de dependencias de paquetes JJ II

? Problemas si la base de datos de paquetes se corrompe J I Formatos de paquetes m´aspopulares P´agina 103 de 347 • Paquetes DEB (distribuci´onDebian) Regresar

Pantalla completa • Paquetes RPM (RedHat , distribuciones Fedora, RedHat, Mandriva, etc.) Cerrar

Abandonar Gesti´onde paquetes en Debian ´Indice La distribuci´onDebian incluye un elevado n´umerode paquetes Introducci´ona . . . (m´asde 17.000) Instalaci´ondel . . . Varias herramientas para el manejo de esos paquetes. Uso de la l´ıneade . . . Programaci´on de . . . • - herramienta de bajo nivel, para gestionar directa- Manejo de ficheros . . . mente los paquetes DEB Programaci´on en . . .

-xxx - herramientas APT, permiten gestionar los paque- Introducci´ona Perl . . . tes, descarg´andolos de varias fuentes (CDs, ftp, http) P´aginawww • - herramienta de administraci´onde paquetes basada P´aginainicial en men´us(alto nivel) JJ II • tasksel - interfaz para instalaci´onde tareas (grupos de pa- quetes relacionados) J I P´agina 104 de 347 • - front-end de APT para usar en consola Regresar • - front-end de APT para usar en entorno gr´afico Pantalla completa

• alien - permite convertir e instalar paquetes de otro tipo, Cerrar p.e. RPMs Abandonar Para m´asinformaci´onver el cap´ıtulo Debian package manage- ´Indice ment de la Debian Reference (v2) Introducci´ona . . .

Instalaci´ondel . . .

Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 105 de 347

Regresar

Pantalla completa

Cerrar

Abandonar dpkg Permite instalar, actualizar o desinstalar paquetes DEB ´Indice

Los paquetes DEB contienen: Introducci´ona . . . • Los binarios que se van a instalar Instalaci´ondel . . . Uso de la l´ıneade . . .

• Metadatos, con informaci´onsobre el paquete, scripts para Programaci´on de . . . su configuraci´on, lista de dependencias, etc. Manejo de ficheros . . . Nombre de los paquetes: Programaci´on en . . . Introducci´ona Perl . . . • paquete versi´on-build arquitectura.deb, donde P´aginawww ? paquete - nombre de la aplicaci´on P´aginainicial ? versi´on - n´umerode versi´on de la aplicaci´on ? build - n´umerode “compilaci´on” (subversi´on) JJ II ? arquitectura - plataforma para la que est´acompilado J I P´agina 106 de 347 • Ejemplo: Regresar ? ethereal 0.10.11-1 i386.deb Pantalla completa

Cerrar

Abandonar Instalaci´ony eliminaci´onde paquetes con dpkg: ´Indice • Instalaci´onde paquetes Introducci´ona . . . Instalaci´ondel . . . dpkg --install paquete.deb, o dpkg -i paquete.deb Uso de la l´ıneade . . . Programaci´on de . . .

? la instalaci´onchequea la existencia de dependencias, pa- Manejo de ficheros . . .

quetes en conflicto, sobreescritura de ficheros existentes, Programaci´on en . . .

etc. Introducci´ona Perl . . . ? se puede forzar la instalaci´onusando la opci´on --force-cosas, donde cosas P´aginawww ∗ conflicts - permite la instalaci´onde paquetes en P´aginainicial

conflicto JJ II ∗ overwrite - sobrescribe un fichero de un paquete J I con otro P´agina 107 de 347 ∗ overwrite-dir - sobrescribe el directorio de un pa- quete con uno nuevo Regresar

∗ etc. Pantalla completa

? para ver todas las opciones de forzado hacer: dpkg Cerrar --force-help Abandonar • Eliminaci´onde paquetes, manteniendo los ficheros de con- ´Indice

figuraci´on Introducci´ona . . . dpkg --remove paquete, o Instalaci´ondel . . . dpkg -r paquete Uso de la l´ıneade . . . Programaci´on de . . . • Eliminaci´ontotal de paquetes, eliminando los ficheros de Manejo de ficheros . . . configuraci´on Programaci´on en . . . dpkg --purge paquete, o Introducci´ona Perl . . . dpkg -P paquete P´aginawww

• Reconfiguraci´onde un paquete ya instalado P´aginainicial

dpkg-reconfigure paquete JJ II

J I

P´agina 108 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Informaci´onsobre los paquetes ´Indice • Listar paquetes Introducci´ona . . . Instalaci´ondel . . . dpkg --list [patr´on], o dpkg -l [patr´on] Uso de la l´ıneade . . . ? si no se pone patr´on muestra los paquetes instalados Programaci´on de . . . ? ejemplo Manejo de ficheros . . . Programaci´on en . . . # dpkg -l ’telnet*’ Desired=Unknown/Install/Remove/Purge/Hold Introducci´ona Perl . . . | Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed |/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad) ||/ Nome Versi´on Descripci´on P´aginawww +++-======-======-======ii telnet 0.17-29 The telnet client P´aginainicial un telnet-client (non hai ningunha descripci´ondispo~nible) un telnet-hurd (non hai ningunha descripci´ondispo~nible) un telnet-server (non hai ningunha descripci´ondispo~nible) JJ II pn telnet-ssl (non hai ningunha descripci´ondispo~nible) pn telnetd (non hai ningunha descripci´ondispo~nible) un telnetd-hurd (non hai ningunha descripci´ondispo~nible) J I pn telnetd-ssl (non hai ningunha descripci´ondispo~nible) P´agina 109 de 347 • Las tres primeras columnas representan: Regresar

? Estado de selecci´on: indica el estado del paquete para Pantalla completa su uso con dselect Cerrar ∗ u, Unknown - estado no conocido Abandonar ∗ i, Install - paquete seleccionado para instalar (se ´Indice

instala con dselect install) Introducci´ona . . .

∗ r, Remove - paquete seleccionado para eliminar (se Instalaci´ondel . . .

elimina con dselect install) Uso de la l´ıneade . . .

∗ p, Purge - paquete seleccionado para purgar (se eli- Programaci´on de . . .

mina con dselect install) Manejo de ficheros . . .

∗ h, Hold - paquete retenido (no puede actualizarse) Programaci´on en . . .

? Estado actual: indica el estado actual del paquete Introducci´ona Perl . . . ∗ n, Not Installed - paquete no instalado P´aginawww ∗ i, Installed - paquete instalado en el sistema ∗ c, Config-files - paquete no instalado, pero ficheros P´aginainicial de configuraci´onpresentes (p.e. despu´esde un re- JJ II move) J I ∗ u, Unpacked - paquete desempaquetado y listo para P´agina 110 de 347 instalaci´on ∗ f, Failed-config - durante la instalaci´onfall´ola con- Regresar figuraci´ondel paquete Pantalla completa

∗ h, Half-installed - paquete a medio instalar debido Cerrar a alg´unproblema Abandonar ? Condiciones de error ´Indice

∗ h, Hold - paquete retenido, no puede instalarse o Introducci´ona . . . eliminarse Instalaci´ondel . . . ∗ r, Reinstallation Required - necesita reinstalarse Uso de la l´ıneade . . . Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 111 de 347

Regresar

Pantalla completa

Cerrar

Abandonar • Informaci´ony estado del paquete ´Indice ? informaci´ongeneral Introducci´ona . . . Instalaci´ondel . . . dpkg --print-avail paquete , o dpkg -p paquete Uso de la l´ıneade . . .

? estado del paquete Programaci´on de . . .

dpkg --status paquete , o dpkg -s paquete Manejo de ficheros . . .

? ejemplo Programaci´on en . . .

# dpkg -s wget Introducci´ona Perl . . . Package: wget

Status: install ok installed P´aginawww Priority: important Section: web P´aginainicial Installed-Size: 1428 Maintainer: NoAˇslK~ A~¶the JJ II Architecture: i386 Version: 1.10-2 J I

Depends: libc6 (>= 2.3.2.ds1-21), libssl0.9.7 P´agina 112 de 347 Conflicts: wget-ssl Conffiles: Regresar /etc/wgetrc a9465704a21e403be628d38e10b0e128 Description: retrieves files from the web Pantalla completa Wget is a network utility to retrieve files from the Web Cerrar ....

Abandonar • Ficheros de un paquete ´Indice dpkg --listfiles paquete , o dpkg -L paquete Introducci´ona . . . Instalaci´ondel . . .

? ejemplo Uso de la l´ıneade . . . dpkg -L wget Programaci´on de . . . /. /etc Manejo de ficheros . . . /etc/wgetrc Programaci´on en . . . /usr /usr/bin Introducci´ona Perl . . . /usr/bin/wget /usr/share P´aginawww /usr/share/doc P´aginainicial /usr/share/doc/wget /usr/share/doc/wget/AUTHORS JJ II /usr/share/doc/wget/ChangeLog.README ... J I

P´agina 113 de 347

Regresar

Pantalla completa

Cerrar

Abandonar • Paquete al que pertenece un fichero ´Indice dpkg --search fichero , o dpkg -S fichero Introducci´ona . . . Instalaci´ondel . . .

? ejemplo Uso de la l´ıneade . . . # dpkg --search /usr/bin/wget Programaci´on de . . . wget: /usr/bin/wget Manejo de ficheros . . . Programaci´on en . . .

• M´asinformaci´on:ver ficheros en el directorio /var/lib/dpkg/ Introducci´ona Perl . . .

? Fichero /var/lib/dpkg/available P´aginawww ∗ muestra los paquetes disponibles P´aginainicial ? Fichero /var/lib/dpkg/status JJ II ∗ muestra el estado de los paquetes J I ? dpkg lee estos ficheros para obtener informaci´onsobre P´agina 114 de 347 los paquetes Regresar

Pantalla completa

Cerrar

Abandonar APT - Advanced Packaging Tools Permite descargar e instalar ´Indice paquetes desde una fuente local y/o remota Introducci´ona . . .

Fuentes de apt: fichero /etc/apt/sources.list Instalaci´ondel . . .

# See sources.list(5) for more information Uso de la l´ıneade . . . deb ftp://ftp.rediris.es/debian/ stable main contrib non-free Programaci´on de . . . deb http://security.debian.org/ stable/updates main contrib non-free #Para descargar fuentes, a trav´esde apt-get source Manejo de ficheros . . . deb-src ftp://ftp.rediris.es/debian/ stable main Programaci´on en . . .

Introducci´ona Perl . . . • formato de sources.list

P´aginawww deb uri distribuci´oncomponente #Para binarios deb-src uri distri. componente #Para ficheros fuente P´aginainicial • componente puede ser: JJ II J I ? main - conjunto principal de paquetes P´agina 115 de 347 ? contrib - paquetes adicionales Regresar ? non-free - paquetes que no son libres Pantalla completa

Cerrar

Abandonar El fichero sources.list puede modificarse ´Indice • edit´andolodirectamente, o Introducci´ona . . . Instalaci´ondel . . .

• a trav´esdel comando apt-setup Uso de la l´ıneade . . . Opciones de configuraci´onde APT Programaci´on de . . . Manejo de ficheros . . .

• Fichero /etc/apt/apt.conf Programaci´on en . . . • Ficheros en el directorio /etc/apt/apt.conf.d Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 116 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Cuando el fichero sources.list contiene referencias a m´asde ´Indice una distribuci´on(por ejemplo, estable y pruebas), APT asigna Introducci´ona . . . una prioridad a cada versi´ondisponible Instalaci´ondel . . . • es posible seleccionar una distribuci´onojetivo (target re- Uso de la l´ıneade . . . lease) a la que se le asigna una mayor prioridad: Programaci´on de . . . Manejo de ficheros . . . ? crear un fichero en el directorio /etc/apt/apt.conf.d, Programaci´on en . . . de nombre, por ejemplo, 99apt-default-release.conf Introducci´ona Perl . . . que contenga la l´ınea APT::Default-Release "distribution "; P´aginawww con distribution igual a stable , testing o unstable P´aginainicial • Si queremos instalar un paquete de una distribuci´ondis- JJ II tinta a la por defecto, a˜nadir las l´ıneas necesarias en el J I

sources.list y usar apt-get con la opci´on -t P´agina 117 de 347

# apt-get -t distribution install package Regresar

• podemos usar apt-cache policy para ver la pol´ıtica de Pantalla completa

prioridades configurada Cerrar

Abandonar • ver man apt preferences y Debian package management ´Indice

para m´asdetalles Introducci´ona . . .

Instalaci´ondel . . .

Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 118 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Comando apt-get ´Indice

Comando principal de las herramientas APT Permite descargar, Introducci´ona . . . instalar, actualizar o borrar un paquete Instalaci´ondel . . . 1. Actualizar la lista de paquetes Uso de la l´ıneade . . . Programaci´on de . . .

apt-get update Manejo de ficheros . . . 2. Instalar un paquete Programaci´on en . . . Introducci´ona Perl . . . apt-get install nombre paquete P´aginawww 3. Actualizar los paquetes P´aginainicial apt-get upgrade JJ II

• debe hacerse un apt-get update antes de un apt-get J I upgrade P´agina 119 de 347

4. Eliminar paquetes Regresar

apt-get remove nombre paquete Pantalla completa

Cerrar

Abandonar 5. Actualizar la distribuci´on ´Indice apt-get dist-upgrade Introducci´ona . . . Instalaci´ondel . . .

• maneja inteligentemente los cambios de dependencias Uso de la l´ıneade . . .

debidos a nuevas versiones de paquetes Programaci´on de . . .

Manejo de ficheros . . . 6. Eliminar los paquetes descargados Programaci´on en . . .

• Cuando se instala un paquete a trav´esde apt-get se Introducci´ona Perl . . . guarda una copia en /var/cache/apt/archives/ P´aginawww apt-get clean #Elimina todos los paquetes descar- gados P´aginainicial apt-get autoclean #Elimina s´ololos paquetes JJ II obsoletos J I

7. Descargar ficheros fuente P´agina 120 de 347

apt-get source nombre paquete Regresar

Pantalla completa • con la opci´on --compile compila el paquete despu´esde descargarlo (y genera el .deb) Cerrar

Abandonar 8. Descargar dependencias para compilar un paquete ´Indice apt-get build-dep nombre paquete Introducci´ona . . . Instalaci´ondel . . . apt-get acepta diversas opciones, por ejemplo: Uso de la l´ıneade . . . • -s - simula la acci´on,pero no instala nada Programaci´on de . . . Manejo de ficheros . . .

• -y - responde y a todas las preguntas Programaci´on en . . . para m´asopciones man apt-get Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 121 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Dependencias entre paquetes ´Indice

Los paquetes pueden depender unos de otros: Introducci´ona . . . • El paquete A depende (Depends) del paquete B si B es ab- Instalaci´ondel . . . solutamente necesario para usar A Uso de la l´ıneade . . . Programaci´on de . . . • El paquete A recomienda (Recommends) el paquere B si se Manejo de ficheros . . . considera que la mayor´ıade los usuarios no querr´ıanA sin Programaci´on en . . . las funcionalidades que proporciona B Introducci´ona Perl . . . • El paquete A sugiere (Suggests) el paquete B si B est´arela- P´aginawww cionado y mejora las funcionalidades de A P´aginainicial • El paquete A est´aen conflicto (Conflicts) con B en el caso de que A no funcionae correctamente si B est´ainstalado JJ II J I

P´agina 122 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Otras herramientas APT ´Indice 1. apt-cache - permite manipular la cach´ede paquetes de Introducci´ona . . . APT, buscando paquetes o obteniendo informaci´onsobre Instalaci´ondel . . . los mismos Uso de la l´ıneade . . . Programaci´on de . . . • Ejemplo: buscar el paquete que contiene el firefox Manejo de ficheros . . .

# apt-cache search firefox Programaci´on en . . . bookmarkbridge - tool to synchronize bookmarks between browsers Introducci´ona Perl . . . gtkcookie - Editor for cookie files

latex-xft-fonts - Xft-compatible versions of some LaTeX fonts P´aginawww libflash-mozplugin - GPL Flash (SWF) Library - Mozilla-compatible plugin mozilla-firefox - lightweight web browser based on Mozilla P´aginainicial mozilla-firefox-dom-inspector - tool for inspecting the DOM of pages in Mozilla Firefox mozilla-firefox-gnome-support - Support for Gnome in Mozilla Firefox JJ II mozilla-firefox-locale-af-za - Mozilla Firefox Afrikaans language/region package ... J I • el argumento puede ser una expresi´onregular P´agina 123 de 347

Regresar 2. apt-build - permite descargar, compilar e instalar un pa- quete a partir de las fuentes Pantalla completa

Cerrar

Abandonar dselect, aptitude, tasksel, synaptic Interfaces del gestor de pa- ´Indice

quetes Introducci´ona . . .

Proporcionan interfaces para consola o gr´aficaspara simplificar Instalaci´ondel . . . el manejo de los paquetes Uso de la l´ıneade . . . • Ejemplo de dselect Programaci´on de . . . Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 124 de 347

Regresar

Pantalla completa

Cerrar

Abandonar • Ejemplo de aptitude ´Indice

Introducci´ona . . .

Instalaci´ondel . . .

Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 125 de 347

Regresar

Pantalla completa

Cerrar

Abandonar • aptitude tiene opciones similares a apt-get ´Indice ? aptitude update: actualiza la lista de paquetes Introducci´ona . . . ? aptitude search : busca paquetes Instalaci´ondel . . . Uso de la l´ıneade . . . ? aptitude show : muestra informaci´on Programaci´on de . . . del paquete Manejo de ficheros . . . ? aptitude install : instala paque- Programaci´on en . . . tes Introducci´ona Perl . . . ? aptitude remove : desinstala paque- tes P´aginawww ? aptitude purge : desinstala paque- P´aginainicial tes y sus archivos de configuraci´on JJ II ? aptitude clean: elimina copias en cache de los ficheros J I deb descargados P´agina 126 de 347 ? aptitude autoclean: elimina copias en cache de ficheros deb descargados obsoletos Regresar ? aptitude hold : fuerza a que un Pantalla completa

paquete permanezca en su versi´on actual, y no se ac- Cerrar tualice Abandonar ? aptitude safe-upgrade: actualiza los paquetes insta- ´Indice

lados, sin eliminar ninguno Introducci´ona . . .

? aptitude full-upgrade: actualiza los paquetes insta- Instalaci´ondel . . . lados, eliminando paquetes si es necesario Uso de la l´ıneade . . . • aptitude podr´ıamanejar las dependencias mejor que apt-get, Programaci´on de . . . pero es menos estable Manejo de ficheros . . . Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 127 de 347

Regresar

Pantalla completa

Cerrar

Abandonar alien Convierte paquetes entre diferentes formatos ´Indice

Soporta los formatos Red Hat rpm, Debian deb, Stampede slp, Introducci´ona . . .

Slackware tgz, y Solaris pkg Instalaci´ondel . . . • Por defecto, convierte paquetes a formato deb Uso de la l´ıneade . . . Programaci´on de . . . • Algunas opciones (m´asopciones, ver p´aginade manual): Manejo de ficheros . . . ? --to-rpm o -r - crea un paquete rpm Programaci´on en . . . ? --to-tgz o -t - crea un paquete tgz Introducci´ona Perl . . . ? --to-slp - crea un paquete slp P´aginawww

? --to-pkg o -p - crea un paquete pkg P´aginainicial

? --install o -i - instala el paquete despues de crearlo JJ II

• Ejemplo: J I # alien wget-1.9.1-5.i386.rpm P´agina 128 de 347 wget_1.9.1-6_i386.deb generated Regresar

Pantalla completa

Cerrar

Abandonar Paquetes RPM: RedHat Package Manager ´Indice Instala software a partir de ficheros .rpm, manteniendo control Introducci´ona . . . de las dependencias Instalaci´ondel . . . Uso de la l´ıneade . . .

• Fichero RPM: Programaci´on de . . . nombre-versi´on-..rpm Manejo de ficheros . . . Programaci´on en . . .

? Ejemplos: Introducci´ona Perl . . . wget-1.9.1-5.i386.rpm P´aginawww xsnow-1.42-14.src.rpm ? Muchos RPMs pueden obtenerse en rpmfind.net P´aginainicial ? Otro repositorio: atrpms.net JJ II J I • El sistema RPM mantiene una base de datos con infor- maci´onde los paquetes instalados en el sistema P´agina 129 de 347 Regresar ? si hay problemas, intentar reconstruirla con: Pantalla completa rpm --rebuilddb Cerrar

Abandonar Comando rpm El comando rpm permite: ´Indice • instalar, actualizar y eliminar paquetes Introducci´ona . . . Instalaci´ondel . . .

• validar la integridad de un paquete Uso de la l´ıneade . . . • consultar la base de datos RPM para obtener informaci´on Programaci´on de . . . Manejo de ficheros . . .

• construir un paquete binario a partir de las fuentes Programaci´on en . . . Para m´asinformaci´onsobre rpm: Introducci´ona Perl . . .

• rpm Home Page P´aginawww • RPM HOWTO P´aginainicial JJ II • Fedora Project Developer’s Guide: Building RPM Packages J I

P´agina 130 de 347

Regresar

Pantalla completa

Cerrar

Abandonar 1. Instalar un rpm ´Indice rpm -i fichero.rpm, o rpm --install fichero.rpm Introducci´ona . . . rpm -ivh fichero.rpm # Da una salida m´asvisual Instalaci´ondel . . . Uso de la l´ıneade . . .

• El proceso de instalaci´onfalla si detecta dependencias Programaci´on de . . . o si tiene que sobreescribir alg´unfichero existente Manejo de ficheros . . .

• Opciones Programaci´on en . . .

? --force - Fuerza a rpm para que sobreescriba pa- Introducci´ona Perl . . . quetes o ficheros existentes P´aginawww ? --nodeps - No chequea dependencias • Ejemplo P´aginainicial # rpm -ivh xsnow-1.42-14.i386.rpm JJ II Preparing... ############################################ J I xsnow ############################################ P´agina 131 de 347 • En vez del fichero rpm puede usarse el URL del fichero, p.e.: Regresar

# rpm -ivh ftp://rpmfind.net/linux/fedora/core/2/i386/os/Fedora/RPMS/xsnow-1.42-14.i386.rpmPantalla completa Preparing... ############################################ xsnow ############################################Cerrar Abandonar 2. Borrar un paquete instalado ´Indice rpm -e paquete, o rpm --erase paquete Introducci´ona . . . Instalaci´ondel . . .

Uso de la l´ıneade . . .

• Ejemplo Programaci´on de . . . # rpm -e xsnow Manejo de ficheros . . . Programaci´on en . . .

3. Actualizar un paquete Introducci´ona Perl . . .

rpm -U fichero.rpm, o rpm --upgrade fichero.rpm P´aginawww rpm -F fichero.rpm, o rpm --freshen fichero.rpm P´aginainicial • si hay una versi´ondel paquete instalada, la borra e ins- JJ II tala la nueva; si no hay ninguna versi´on,simplemente instala la nueva J I • la opci´on F s´oloactualiza si hay una versi´onm´asantigua P´agina 132 de 347 instalada Regresar

Pantalla completa

Cerrar

Abandonar 4. Validar la integridad de un paquete ´Indice rpm --checksig fichero.rpm, o rpm -K fichero.rpm Introducci´ona . . . Instalaci´ondel . . .

• es necesario importar las claves p´ublicascon el que se Uso de la l´ıneade . . .

firm´oel paquete Programaci´on de . . . • Ejemplo (buscamos la clave p´ublicaen el repositorio, Manejo de ficheros . . . por ejemplo, para paquetes de Fedora): Programaci´on en . . . # rpm -K xsnow-1.42-14.i386.rpm Introducci´ona Perl . . .

xsnow-1.42-14.i386.rpm: (SHA1) DSA sha1 md5 (GPG) NOT OKP´aginawww (MISSING KEYS: GPG#4f2a6fd2) # rpm --import 4F2A6FD2.txt # rpm -K xsnow-1.42-14.i386.rpm P´aginainicial xsnow-1.42-14.i386.rpm: (sha1) dsa sha1 md5 gpg OK JJ II

J I

P´agina 133 de 347

Regresar

Pantalla completa

Cerrar

Abandonar 5. Informaci´ondel paquete: uso rpm -q o rpm --query ´Indice rpm -q [opciones] paquete # si el paquete est´ain- Introducci´ona . . . stalado Instalaci´ondel . . . rpm -qp [opciones] fichero.rpm # si el paquete no Uso de la l´ıneade . . . est´ainstalado Programaci´on de . . . rpm -qa # muestra todos los paquetes instalados Manejo de ficheros . . . Programaci´on en . . .

• Ejemplo: Introducci´ona Perl . . . # rpm -qa |grep kernel kernel-smp-2.4.20-31.9 P´aginawww kernel-pcmcia-cs-3.1.31-13 P´aginainicial kernel-source-2.4.20-31.9 JJ II

J I

P´agina 134 de 347

Regresar

Pantalla completa

Cerrar

Abandonar • Opciones de informaci´on ´Indice

(a) Listar ficheros de un paquete Introducci´ona . . . rpm -ql paquete Instalaci´ondel . . . (b) Determinar a que paquete pertenece un fichero Uso de la l´ıneade . . . rpm -qf fichero Programaci´on de . . . ? Ejemplo: Manejo de ficheros . . . Programaci´on en . . . # rpm -qf /usr/bin/a2ps Introducci´ona Perl . . . a2ps-4.13b-28 (c) Informaci´ondel paquete P´aginawww

rpm -qi paquete P´aginainicial (d) Requisitos previos (paquetes de los que depende) JJ II rpm -qR paquete J I

P´agina 135 de 347

Regresar

Pantalla completa

Cerrar

Abandonar 6. Verificar si alg´unfichero del paquete ha cambiado ´Indice rpm -V paquete, o rpm --verify paquete Introducci´ona . . . Instalaci´ondel . . .

• Ejemplo: Uso de la l´ıneade . . . # rpm -V pam Programaci´on de . . . S.5....T c /etc/pam.d/system-auth Manejo de ficheros . . . • el fichero de configuraci´on system-auth ha cambiado Programaci´on en . . . en tama˜no(S), suma MD5 (5) y fecha de modificaci´on Introducci´ona Perl . . .

(T) P´aginawww • otros indicadores: P´aginainicial ? U/G - cambio en el usuario/grupo del fichero JJ II ? M - cambio en permisos o tipo de fichero J I

P´agina 136 de 347

Regresar

Pantalla completa

Cerrar

Abandonar 7. Compilar un paquete fuente ´Indice • El paquete fuente se puede instalar con rpm -i Introducci´ona . . . Instalaci´ondel . . . rpm -ivh xsnow-1.42-14.src.rpm Uso de la l´ıneade . . .

• los ficheros fuente se descomprimen en Programaci´on de . . .

/usr/src/.../SOURCES/ Manejo de ficheros . . . • /usr/src/.../SPECS/ contiene el fichero de spec, que Programaci´on en . . . indica como compilar el c´odigo Introducci´ona Perl . . .

• el paquete se compila con el comando rpmbuild, gener´andose P´aginawww el RPM para instalar: P´aginainicial rpmbuild -ba fichero.spec JJ II • podemos hacerlo directamente desde el rpm J I rpmbuild --rebuild fichero.rpm P´agina 137 de 347

Regresar

Pantalla completa

Cerrar

Abandonar - Yellowdog Updater Modified Gestor de paquetes para ´Indice sistemas basados en RPM Introducci´ona . . . • Funcionalidad similar a APT Instalaci´ondel . . . Uso de la l´ıneade . . .

• Herramienta est´andaren Fedora Programaci´on de . . . • puede usar YUM para actualizar el sistema Manejo de ficheros . . . Programaci´on en . . . Algunas opciones: Introducci´ona Perl . . . • Busqueda de paquetes P´aginawww

yum search nombre P´aginainicial

• Instalaci´on JJ II yum install nombre J I

P´agina 138 de 347 • Actualizaci´on Regresar yum update nombre Pantalla completa

Cerrar

Abandonar Ficheros de configuraci´on: ´Indice • Configuraci´onbase: /etc/yum.conf Introducci´ona . . . Instalaci´ondel . . .

• Repositorios: /etc/yum.repos.d/ Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 139 de 347

Regresar

Pantalla completa

Cerrar

Abandonar APT con RPMs Es posible usar APT con RPMs: ´Indice • Instalar el paquete apt Introducci´ona . . . Instalaci´ondel . . .

• Configurar las fuentes: Uso de la l´ıneade . . . ? pueden a˜nadirsem´asfuentes en el /etc/apt/sources.list Programaci´on de . . . Manejo de ficheros . . . ? Ejemplo (para Fedora): Programaci´on en . . .

# ATrpms for Fedora Core 1 Introducci´ona Perl . . . # Possible sections: at-stable, at-good, at-testing, at-bleeding rpm http://apt.atrpms.net fedora/2/en/i386 at-testing P´aginawww

#rpm-src http://apt.atrpms.net fedora/2/en/i386 at-testingP´aginainicial

JJ II

J I

P´agina 140 de 347

Regresar

Pantalla completa

Cerrar

Abandonar 3. Uso de la l´ıneade comandos ´Indice

Introducci´ona . . . Veremos conceptos b´asicospara usar nuestro sistema desde la Instalaci´ondel . . . l´ıneade comandos Uso de la l´ıneade . . .

Programaci´on de . . . El interprete de comandos (shell) Manejo de ficheros . . .

El shell se inicia cuando accedemos a nuestra cuenta Programaci´on en . . .

Proporciona: Introducci´ona Perl . . .

• un interprete de comandos P´aginawww

• un entorno de programaci´on P´aginainicial

El shell nos permite ejecutar: JJ II • Comandos externos, por ejemplo: ls, cat, mkdir, etc. J I P´agina 141 de 347 ? son programas ajenos al shell Regresar ? cuando se lanzan inician un nuevo proceso Pantalla completa ? se buscan en los directorios indicados en la variable PATH Cerrar

Abandonar • Comandos internos (builtin commands), por ejemplo: cd, ´Indice

bg, alias, eval, exec, pwd, etc. Introducci´ona . . . ? se ejecutan en el mismo proceso del shell, sin lanzar un Instalaci´ondel . . . nuevo proceso Uso de la l´ıneade . . . ? ver el manual del shell para m´asinformaci´on(o para el Programaci´on de . . . shell bash: man bash-builtins, o el comando help) Manejo de ficheros . . . Programaci´on en . . .

• En bash: para saber si un comando es externo o interno usar Introducci´ona Perl . . . el comando interno type: P´aginawww $ type cd P´aginainicial cd is a shell builtin $ type cat JJ II

cat is /bin/cat J I

P´agina 142 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Principales shells: ´Indice • sh o Bourne shell: shell por defecto en las primeras ver- Introducci´ona . . . siones de UNIX Instalaci´ondel . . . Uso de la l´ıneade . . .

• bash o Bourne again shell: versi´onmejorada de sh Programaci´on de . . . ? desarrollada en el proyecto GNU Manejo de ficheros . . . ? es el shell por defecto en Linux Programaci´on en . . . Introducci´ona Perl . . . • csh o C shell: desarrollada para UNIX BSD, su sintaxis se basa en la del lenguaje C P´aginawww

P´aginainicial • tcsh o Turbo C shell: versi´onmejorada de csh JJ II • ksh o Korn shell: basado en Bourne shell con caracter´ısticas del C shell J I P´agina 143 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Otros shells: ´Indice • ash o Almquist shell: clon ligero de sh (en Linux Debian, Introducci´ona . . . dash o Debian ash) Instalaci´ondel . . . Uso de la l´ıneade . . .

• fish o Friendly Interactive Shell: shell amigable para Programaci´on de . . . sistemas UNIX Manejo de ficheros . . . • zsh o Z shell: extensi´onmejorada de sh, incorporando Programaci´on en . . . caracter´ısticasde otros shells como bash, ksh y tcsh Introducci´ona Perl . . .

• rc shell: shell del sistema operativo Plan 9 de los Bell P´aginawww

Labs., (existe un porting de rc para UNIX) P´aginainicial

• es shell: reimplementaci´ondel rc shell para sistemas UNIX; JJ II basado en programaci´onfuncional J I

P´agina 144 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Para ver las shells conocidas ver el fichero /etc/shells ´Indice • El shell por defecto para cada usuario se especifica en el Introducci´ona . . . fichero /etc/passwd Instalaci´ondel . . . Uso de la l´ıneade . . . $ • Para ver la shell por defecto: echo SHELL Programaci´on de . . . • Para ver la shell actual: ps | grep $$ Manejo de ficheros . . . Programaci´on en . . . • Para cambiar de shell, ejecutar el comando correspondiente, Introducci´ona Perl . . . p.e. /bin/csh P´aginawww ? para volver al shell anterior exit o Ctrl-D P´aginainicial • Para cambiar la shell por defecto: chsh JJ II

J I

P´agina 145 de 347

Regresar

Pantalla completa

Cerrar

Abandonar La l´ıneade comandos ´Indice El shell nos permite enviar comandos al sistema Introducci´ona . . . Los comandos usualmente constan de 4 componentes. Instalaci´ondel . . . Uso de la l´ıneade . . .

• el nombre del comando (con la ruta absoluta, si no est´aen Programaci´on de . . . el PATH) Manejo de ficheros . . . • opciones, usualmente precedidas por uno o dos guiones (-) Programaci´on en . . . Introducci´ona Perl . . . • argumentos (o par´ametros)

P´aginawww Ejemplo: comando ls (lista ficheros y directorios) P´aginainicial $ ls (lista los archivos del directorio actual) $ ls -l (lista los archivos en formato detallado) JJ II $ ls -la /tmp (lista todos los archivos del directorio J I

/tmp) P´agina 146 de 347

En algunos casos no es necesario usar gui´oncon las opciones, ya Regresar que el comando espera por lo menos una: Pantalla completa

$ tar cf miarchivo.tar arch1 arch2 arch3 Cerrar

Abandonar Pueden indicarse varios argumentos, separados por espacios en ´Indice

blanco Introducci´ona . . . $ echo hola amigo Instalaci´ondel . . . Uso de la l´ıneade . . .

• Comando −→ echo Programaci´on de . . . • Argumento 1 −→ hola Manejo de ficheros . . . Programaci´on en . . .

• Argumento 2 −→ amigo Introducci´ona Perl . . .

Varios espacios en blanco se interpretan como uno solo P´aginawww

$ echo hola amigo P´aginainicial Para que interprete todos los espacios usar comillas simples o JJ II dobles J I $ echo 'hola amigo' P´agina 147 de 347

Regresar • Comando −→ echo Pantalla completa • Argumento 1 −→ hola amigo Cerrar

Abandonar Comandos b´asicos ´Indice • Busqueda de informaci´on: man, info, help, whatis, apropos Introducci´ona . . . Instalaci´ondel . . .

? Proporcionan informaci´onsobre otros comandos Uso de la l´ıneade . . .

? M´asdetalles en: www.ac.usc.es/docencia/ASRI/Tema 3html/node1.htmlProgramaci´on de . . . • Ficheros y directorios Manejo de ficheros . . . Programaci´on en . . .

? cp, mv, rm - copia, mueve y borra ficheros Introducci´ona Perl . . . ? cd, mkdir, rmdir - accede, crea y borra directorios P´aginawww

• Manejo de ficheros de texto P´aginainicial

? cat, more/less - muestra el contenido de un fichero JJ II (more o less lo hacen p´aginaa p´agina) J I ? vi, nano, emacs - potentes editores de consola (una ex- P´agina 148 de 347 plicaci´onde vi en www.ac.usc.es/docencia/ASRI/Tema 3html/node19.html) Regresar • Otros comandos b´asicos Pantalla completa

? su, sudo - permiten ejecutar comandos cambiando los Cerrar permisos del usuario, o como administrador Abandonar ? alias - Permiten crear alias de comandos complejos ´Indice

(para eliminarlos unalias) Introducci´ona . . .

$ alias l='ls -la' Instalaci´ondel . . . ? history - muestra una lista con los ´ultimoscomandos Uso de la l´ıneade . . . ejecutados y permite reejecutarlos Programaci´on de . . . Manejo de ficheros . . . • Manejo del historial de comandos Programaci´on en . . .

Introducci´ona Perl . . . Comando Descripci´on / Comando anterior/posterior P´aginawww !! Ultimo´ comando ejecutado P´aginainicial !n n-´esimocomando del historial !-n n comandos hacia atr´as JJ II !cadena Ultimo´ comando ejecutado que empieza por cadena !?cadena Ultimo´ comando ejecutado que contiene cadena J I ^cadena1 ^cadena2 Ejecuta el ´ultimocomando cambiando cadena1 por ca- dena2 P´agina 149 de 347 Ctrl-r Busca hacia atr´asen el historial Regresar fc Permite ver, editar y reejecutar comandos del historial

Pantalla completa

Cerrar

Abandonar Variables de shell ´Indice Uso de variables: Introducci´ona . . . Instalaci´ondel . . .

• control del entorno (environment control) Uso de la l´ıneade . . . • programaci´onshell Programaci´on de . . . Manejo de ficheros . . .

Dos tipos Programaci´on en . . . • variables locales: visibles s´olodesde el shell actual Introducci´ona Perl . . .

• variables globales o de entorno: visibles en todos los shells P´aginawww El comando set permite ver las variables definidas en nuestra P´aginainicial shell JJ II

• El nombre de las variables debe: J I

P´agina 150 de 347 ? empezar por una letra o ? seguida por cero o mas letras, n´umeroso (sin espacios Regresar en blanco) Pantalla completa

Cerrar

Abandonar Uso de las variables ´Indice • Asignar un valor: nombre variable=valor Introducci´ona . . . Instalaci´ondel . . . $ un numero=15 Uso de la l´ıneade . . . $ nombre="Pepe Pota" Programaci´on de . . . • Acceder a las variables: ${nombre variable} o $nombre variable Manejo de ficheros . . . Programaci´on en . . . $ echo $nombre Introducci´ona Perl . . . Pepe Pota

P´aginawww • N´umerode caracteres de una variable P´aginainicial $ echo ${#un numero} 2 JJ II J I • Eliminar una variable: unset nombre variable P´agina 151 de 347 $ unset nombre Regresar $ echo ${nombre}mo mo Pantalla completa

Cerrar

Abandonar • Variables de solo lectura: readonly nombre variable ´Indice $ readonly nombre Introducci´ona . . . $ unset nombre Instalaci´ondel . . . bash: unset: nombre: cannot unset: readonly Uso de la l´ıneade . . . variable Programaci´on de . . . Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 152 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Variables de entorno ´Indice Cada shell se ejecuta en un entorno (environment) Introducci´ona . . . Instalaci´ondel . . . • el entorno de ejecuci´onespecifica aspectos del funcionamiento Uso de la l´ıneade . . . del shell Programaci´on de . . .

• esto se consigue a trav´esde la definici´onde variables de Manejo de ficheros . . .

entorno (o variables globales) Programaci´on en . . . • algunas variables son: Introducci´ona Perl . . .

P´aginawww

Nombre Prop´osito P´aginainicial HOME directorio base del usuario SHELL shell por defecto JJ II USERNAME el nombre de usuario J I

PWD el directorio actual P´agina 153 de 347 PATH el path para los ejecutables MANPATH el path para las p´aginasde manual Regresar PS1/PS2 prompts primario y secundario Pantalla completa

LANG aspectos de localizaci´ongeogr´aficae idioma Cerrar LC * aspectos particulares de loc. geogr´aficae idioma Abandonar • Para definir una nueva variable de entorno: export ´Indice $ nombre="Pepe Pota" # Define una variable de shellIntroducci´ona . . . $ echo $nombre # Usa la variable en el shellInstalaci´ondel . . . Pepe Pota # padre Uso de la l´ıneade . . . $ export nombre # Exporta la variable Programaci´on de . . . $ bash # Inicia un nuevo shell Manejo de ficheros . . . $ echo Mi nombre es $nombre # Intenta usar la variable Programaci´on en . . . Mi nombre es Pepe Pota # del shell padre Introducci´ona Perl . . . $ P´aginawww • La variable exportada (variable de entorno) es visible en el P´aginainicial shell hijo JJ II ? el shell hijo crea una copia local de la variable y la usa J I ? las modificaciones de esa copia no afectan al shell padre P´agina 154 de 347 • Para ver las variables de entorno definidas usar o env printenv Regresar

M´asdetalles sobre las variables del shell en Pantalla completa

www.ac.usc.es/docencia/ASRI/Tema 3html/node11.html Cerrar

Abandonar Expansiones del shell ´Indice La sustituci´onde una variable por su valor se conoce como ex- Introducci´ona . . . pansi´onde par´ametros Instalaci´ondel . . . Uso de la l´ıneade . . . $ A=Pepe Programaci´on de . . . $ echo $A Manejo de ficheros . . . Pepe Programaci´on en . . . Otras expansiones Introducci´ona Perl . . .

• Expansi´onde nombres de ficheros( globbing) P´aginawww • Expansi´onde comandos P´aginainicial • Expansi´onde llaves JJ II J I • Expansi´onde la tilde P´agina 155 de 347 • Expansi´onaritm´etica Regresar

Para m´asdetalles sobre la expansi´ondel shell mirar el manual Pantalla completa de bash, secci´on EXPANSION Cerrar

Abandonar Expansi´onde nombres de ficheros ´Indice Los comodines (wildcards) permiten especificar m´ultiplesficheros Introducci´ona . . . al mismo tiempo: Instalaci´ondel . . . Uso de la l´ıneade . . . $ ls -l *html # Lista los ficheros del directorio ac- Programaci´on de . . . tual con terminaci´onhtml Manejo de ficheros . . . • tambi´ense conoce como expansi´onde la shell o globbing Programaci´on en . . . Introducci´ona Perl . . . • podemos ver como se hace la expansi´onponiendo set -x o set -o xtrace P´aginawww ? set +x para no ver detalles P´aginainicial • podemos desactivar la expansi´oncon set -f o set -o noglob JJ II J I Lista de comodines P´agina 156 de 347 Car´acter Corresponde a * 0 o m´ascaracteres Regresar ? 1 car´acter Pantalla completa

[] uno de los caracteres entre corchetes Cerrar [! ] o [^ ] cualquier car´acter que no est´eentre corchetes Abandonar Los ficheros “ocultos” (que empiezan por .) no se expanden ´Indice • debemos poner el . de forma expl´ıcita Introducci´ona . . . Instalaci´ondel . . .

Nota importante: en bash el comportamiento de los rangos Uso de la l´ıneade . . . depende de la configuraci´onde nuestro sistema, en particular, de Programaci´on de . . . la definici´onde la variable LC COLLATE Manejo de ficheros . . .

• si LC COLLATE=C, [L-N] implica LMN y [l-n] implica lmn Programaci´on en . . .

Introducci´ona Perl . . . • en otro caso (p.e. si LC COLLATE="es ES.UTF-8" o "gl ES@euro")

entonces [L-N] implica LmMnN y [l-n] implica lLmMn P´aginawww

Para referirnos a may´usculaso min´usculaspodemos usar los P´aginainicial siguientes patrones: JJ II

• [[:lower:]]: corresponde a un car´acteren min´usculas J I

• [[:upper:]]: corresponde a un car´acteren min´usculas P´agina 157 de 347 • [[:alpha:]]: corresponde a un car´acteralfab´etico Regresar

Pantalla completa • [[:digit:]]: corresponde a un n´umero Cerrar Para m´as detalles: man 7 glob Abandonar Expansi´onde comandos ´Indice Permite que la salida de un comando reemplace el propio co- Introducci´ona . . . mando Instalaci´ondel . . . Formato: Uso de la l´ıneade . . . Programaci´on de . . . $(comando) o `comando` Manejo de ficheros . . . Ejemplos: Programaci´on en . . . Introducci´ona Perl . . . $ echo date date P´aginawww $ echo `date` P´aginainicial Xov Xul 21 13:09:39 CEST 2005 $ echo l´ıneasen fichero=$(wc -l fichero) JJ II # wc -l cuenta el n´umerode l´ıneasen el fichero; el J I

comando se ejecuta y su salida se pasa al echo P´agina 158 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Expansi´onde llaves ´Indice Permite generar strings arbitrarios Introducci´ona . . . Instalaci´ondel . . .

• no tiene para nada en cuenta los ficheros existentes en el Uso de la l´ıneade . . .

directorio actual Programaci´on de . . . $ echo a{d,c,b}e Manejo de ficheros . . . ade ace abe Programaci´on en . . . Introducci´ona Perl . . . Expansi´onde la tilde P´aginawww

Expande la tilde como directorio HOME del usuario indicado P´aginainicial

• si no se indica usuario, usa el usuario actual JJ II

cd ~ # Accedemos al nuestro HOME J I cd ~root # Accedemos al HOME de root P´agina 159 de 347 ls ~pepe/cosas/ # Vemos el contenido del directorio Regresar cosas de pepe Pantalla completa

Cerrar

Abandonar Expansi´onaritm´etica ´Indice Permite evaluar expresiones aritm´eticasenteras Introducci´ona . . . Instalaci´ondel . . . $ $ • se usa (( expresi´on)) o [ expresi´on] Uso de la l´ıneade . . . • expresi´on tiene una sintaxis similar a la del lenguaje C Programaci´on de . . . Manejo de ficheros . . .

? permite operadores como ++, +=, &&,. . . Programaci´on en . . . • Tambi´ense puede usar let Introducci´ona Perl . . .

$ let numero=(numero+1)/2 #usar " si se dejan espacios en blancoP´aginawww

P´aginainicial

JJ II

J I

P´agina 160 de 347

Regresar

Pantalla completa

Cerrar

Abandonar • Ejemplos: ´Indice $ echo $(((4+11)/3)) Introducci´ona . . . 5 Instalaci´ondel . . . $ numero=15 Uso de la l´ıneade . . . $ echo $((numero+3)) Programaci´on de . . . 18 Manejo de ficheros . . . $ echo $numero Programaci´on en . . . 15 Introducci´ona Perl . . . $ echo $((numero+=4)) 19 P´aginawww $ echo $numero P´aginainicial 19 JJ II $ numero=$(((numero+1)/2)) $ echo $numero J I 10 P´agina 161 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Eliminaci´ondel significado especial ´Indice bash permite eliminar el significado de los caracteres especiales, Introducci´ona . . . usando comillas simples, dobles o \ Instalaci´ondel . . . Uso de la l´ıneade . . .

Car´acter Acci´on Programaci´on de . . . ' el shell ignora todos los caracteres especiales con- Manejo de ficheros . . . tenidos entre un par de comillas simples Programaci´on en . . . " el shell ignora todos los caracteres especiales entre Introducci´ona Perl . . . $ ` comillas dobles excepto , y \ P´aginawww \ el shell ignora el car´acterespecial que sigue a \ P´aginainicial Ejemplos: JJ II ls "/usr/bin/a*" J I echo '$PATH' P´agina 162 de 347 echo "$PATH" echo I\'m Pepe Regresar

Pantalla completa

Cerrar

Abandonar Redirecci´onde la entrada/salida ´Indice Es posible cambiar la fuente de la entrada o el destino de la salida Introducci´ona . . . de los comandos Instalaci´ondel . . . Uso de la l´ıneade . . . • toda la E/S se hace a trav´esde ficheros Programaci´on de . . .

• cada proceso tiene asociados 3 ficheros para la E/S Manejo de ficheros . . .

Nombre Descriptor de fichero Destino por defecto Programaci´on en . . . entrada est´andar (stdin) 0 teclado Introducci´ona Perl . . . salida est´andar(stdout) 1 pantalla error est´andar(stderr) 2 pantalla P´aginawww

? por defecto, un proceso toma su entrada de la entrada P´aginainicial est´andar,env´ıasu salida a la salida est´andary los men- JJ II sajes de error a la salida de error est´andar J I

Ejemplo P´agina 163 de 347

$ ls /bin/bash /kaka Regresar ls: /kaka: Non hai tal ficheiro ou directorio # Error Pantalla completa /bin/bash # Salida est´andar $ Cerrar

Abandonar Para cambiar la entrada/salida se usan los siguientes caracteres: ´Indice

Introducci´ona . . .

Car´acter Resultado Instalaci´ondel . . . comando < fichero Toma la entrada de fichero Uso de la l´ıneade . . . comando > fichero Env´ıa la salida de comando a fichero; sobreescribe cualquier cosa de fichero Programaci´on de . . .

comando 2> fichero Env´ıala salida de error de comando a fichero (el 2 puede Manejo de ficheros . . . ser reemplazado por otro descriptor de fichero) comando >> fichero A˜nadela salida de comando al final de fichero Programaci´on en . . . comando << etiqueta Toma la entrada para comando de las siguientes lineas, Introducci´ona Perl . . . hasta una l´ınea que tiene s´olo etiqueta

comando 2>&1 Env´ıa la salida de error a la salida est´andar (el 1 y el P´aginawww 2 pueden ser reemplazado por otro descriptor de fichero, p.e. 1>&2) P´aginainicial comando &> fichero Env´ıala salida est´andary de error a fichero; equivale a comando > fichero 2>&1 JJ II comando1 | comando2 pasa la salida de comando1 a la entrada de comando2 (pipe) J I

P´agina 164 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Ejemplos ´Indice • ls -l > lista.ficheros Introducci´ona . . . Crea el fichero lista.ficheros conteniendo la salida de ls Instalaci´ondel . . . -l Uso de la l´ıneade . . . Programaci´on de . . . • >> ls -l /etc lista.ficheros Manejo de ficheros . . . A˜nadea lista.ficheros el contenido del directorio /etc Programaci´on en . . . • cat < lista.ficheros | more Introducci´ona Perl . . . Muestra el contenido de lista.ficheros p´aginaa p´agina P´aginawww (equivale a more lista.ficheros) P´aginainicial • ls /kaka 2> /dev/null Env´ıalos mensajes de error al dispositivo nulo (a la basura) JJ II J I • > kk Crea el fichero kk vac´ıo P´agina 165 de 347

Regresar • cat > entrada Lee informaci´ondel teclado, hasta que se teclea Ctrl-D; Pantalla completa

copia todo al fichero entrada Cerrar

Abandonar • cat << END > entrada ´Indice

Lee informaci´ondel teclado, hasta que se introduce una l´ınea Introducci´ona . . .

con END; copia todo al fichero entrada Instalaci´ondel . . . • ls -l /bin/bash /kaka > salida 2> error Uso de la l´ıneade . . . Redirige la salida est´andaral fichero salida y la salida de Programaci´on de . . . error al fichero error Manejo de ficheros . . . • ls -l /bin/bash /kaka > salida.y.error 2>&1 Programaci´on en . . . Redirige la salida est´andary de error al fichero salida.y.error; Introducci´ona Perl . . .

el orden es importante: P´aginawww

ls -l /bin/bash /kaka 2>&1 > salida.y.error P´aginainicial

no funciona, por qu´e? JJ II

• ls -l /bin/bash /kaka &> salida.y.error J I

Igual que el anterior P´agina 166 de 347

• cat /etc/passwd > /dev/tty2 Regresar Muestra el contenido de /etc/passwd en el terminal tty2 Pantalla completa

? usar el comando tty para ver el nombre del terminal en Cerrar el que estamos Abandonar Comandos ´utilescon pipes y redirecciones ´Indice 1. tee Introducci´ona . . . Instalaci´ondel . . .

• copia la entrada est´andara la salida est´andary tambi´en Uso de la l´ıneade . . .

al fichero indicado como argumento: Programaci´on de . . .

? ls -l | tee lista.ficheros | less Manejo de ficheros . . .

Muestra la salida de ls -l p´aginaa p´aginay la Programaci´on en . . .

almacena en lista.ficheros Introducci´ona Perl . . . • Opciones: P´aginawww ? -a: no sobreescribe el fichero, a˜nadeal final P´aginainicial 2. xargs JJ II

• permite pasar un elevado n´umerode argumentos a otros J I comandos P´agina 167 de 347 • lee la entrada est´andar,y ejecuta el comando uno o m´as Regresar veces, tomando como argumentos la entrada est´andar (ignorando l´ıneas en blanco) Pantalla completa

Cerrar

Abandonar • Ejemplos: ´Indice $ locate README | xargs cat | fmt -60 >\ Introducci´ona . . . /home/pepe/readmes Instalaci´ondel . . . locate encuentra los ficheros README; mediante Uso de la l´ıneade . . .

xargs los ficheros se env´ıana cat que muestra Programaci´on de . . .

su contenido; este se formatea a 60 caracteres Manejo de ficheros . . .

por fila con fmt y se env´ıaal fichero readmes Programaci´on en . . .

Introducci´ona Perl . . . $ locate README | xargs -i cp {} /tmp/ copia los README en el directorio /tmp; la opci´on P´aginawww

-i permite que {} sea reemplazado por los nom- P´aginainicial bres de los ficheros JJ II

J I

P´agina 168 de 347

Regresar

Pantalla completa

Cerrar

Abandonar 3. exec ´Indice • ejecuta un programa reemplazando el shell actual con Introducci´ona . . . el programa (es decir, al programa se le asigna el PID Instalaci´ondel . . . del shell, dejando el shell de existir) Uso de la l´ıneade . . . $ echo $$ #$$ indica el PID del shell actual Programaci´on de . . . 4946 Manejo de ficheros . . . $ exec sleep 20 Programaci´on en . . . En otro terminal, ejecutamos Introducci´ona Perl . . . $ ps a | grep 4946 P´aginawww 4946 pts/13 Ss+ 0:00 sleep 20 P´aginainicial • si no se especifica el programa, exec puede usarse para redireccionar las entradas y salidas JJ II ? Redirecciona la salida est´andara el fichero /tmp/salida J I $ exec > /tmp/salida P´agina 169 de 347

? Redirecciona el fichero /tmp/entrada como entrada Regresar est´andar Pantalla completa $ exec < /tmp/entrada Cerrar

Abandonar Orden de evaluaci´on ´Indice Desde que introducimos un comando hasta que se ejecuta, el shell Introducci´ona . . . ejecuta los siguientes pasos, y en el siguiente orden: Instalaci´ondel . . . Uso de la l´ıneade . . .

1. Redirecci´onE/S Programaci´on de . . . 2. Sustituci´on(expansi´on)de variables: reemplaza cada varia- Manejo de ficheros . . . ble por su valor Programaci´on en . . . Introducci´ona Perl . . . 3. Sustituci´on(expansi´on)de nombres de ficheros: sustituye los comodines por los nombres de ficheros P´aginawww Si no se tiene en cuenta ese orden, pueden aparecer problemas: P´aginainicial $ star=\* JJ II $ ls -d $star J I

cuatro dos tres uno P´agina 170 de 347 $ pipe=\| Regresar $ cat uno $pipe more cat: |: Non hai tal ficheiro ou directorio Pantalla completa

cat: more: Non hai tal ficheiro ou directorio Cerrar

Abandonar Comando eval ´Indice Eval´uala l´ıneade comandos 2 veces: Introducci´ona . . . Instalaci´ondel . . .

• la primera hace todas las substituciones Uso de la l´ıneade . . . • la segunda ejecuta el comando Programaci´on de . . . Manejo de ficheros . . .

Ejemplo: Programaci´on en . . . $ pipe=\| Introducci´ona Perl . . . $ eval cat uno $pipe more P´aginawww Este es el fichero uno ... P´aginainicial

$ JJ II

• En la primera pasada reemplaza $pipe por | J I

P´agina 171 de 347 • En la segunda ejecuta el comando cat uno | more Regresar

Pantalla completa

Cerrar

Abandonar Ficheros de inicializaci´onde bash ´Indice Cuando se inicia bash se leen autom´aticamente distintos ficheros Introducci´ona . . . de inicializaci´on Instalaci´ondel . . . Uso de la l´ıneade . . . • En estos ficheros el usuario define variables de entorno, alias, Programaci´on de . . . el prompt, el path, etc. Manejo de ficheros . . .

• Los ficheros que se leen dependen de la forma de invocar Programaci´on en . . .

bash Introducci´ona Perl . . .

Formas de invocar bash: P´aginawww

1. Invocado como un login shell interactivo P´aginainicial

• cuando entramos en el sistema con login y password, JJ II usamos su -, o iniciamos bash con la opci´on --login J I

• cuando se inicia, se leen los siguientes ficheros: P´agina 172 de 347 (a) /etc/profile Regresar (b) el primero que exista de : ~/.bash profile, ~/.bash login o ~/.profile Pantalla completa • al dejar el shell se lee ~/.bash logout Cerrar

Abandonar 2. Invocado como un non-login shell interactivo ´Indice • cuando lo iniciamos sin opciones (bash), abrimos una Introducci´ona . . . nueva ventana de comandos (entramos sin login ni pass- Instalaci´ondel . . . word), o usamos su Uso de la l´ıneade . . . • se leen los ficheros: Programaci´on de . . . Manejo de ficheros . . . (a) /etc/bash.bashrc Programaci´on en . . . 2 (b) ~/.bashrc Introducci´ona Perl . . . • al salir no se ejecuta nada P´aginawww 3. Invocado como un shell no interactivo P´aginainicial

• por ejemplo, cuando se lanza un script JJ II • en un shell no interactivo, la variable $PS1 no est´adisponible J I

• se lee el fichero definido en la variable BASH ENV P´agina 173 de 347

Regresar

Pantalla completa 2Usualmente, desde .bash profile se invoca al bashrc_ de la siguiente forma: if [ -f ~/.bashrc ]; then . ~/.bashrc; fi Cerrar

Abandonar 4. Programaci´onde scripts de administraci´on ´Indice

Introducci´ona . . . Un administrador de sistemas debe crear scripts para realizar Instalaci´ondel . . . tareas complejas Uso de la l´ıneade . . .

• La mayor´ıa de los ficheros de configuraci´onde Unix son Programaci´on de . . .

ficheros ASCII Manejo de ficheros . . . • Disponemos de potentes herramientas para manejar estos Programaci´on en . . . ficheros Introducci´ona Perl . . . Veremos P´aginawww

P´aginainicial • Programaci´onde scripts con bash JJ II • Herramientas de manejo de ficheros de texto usando expre- siones regulares J I P´agina 174 de 347 • Programaci´onen Python Regresar • Introducci´ona Perl y Ruby Pantalla completa

Cerrar

Abandonar Programaci´onShell-Script ´Indice Bash (y otros shells) permiten programar scripts: Introducci´ona . . . Instalaci´ondel . . .

Script o programa shell: fichero de texto conteniendo coman- Uso de la l´ıneade . . .

dos externos e internos, que se ejecutan l´ıneapor l´ınea Programaci´on de . . . • El programa puede contener, adem´asde comandos Manejo de ficheros . . . Programaci´on en . . .

1. variables Introducci´ona Perl . . . 2. constructores l´ogicos(if...then, AND, OR, etc.) y lazos P´aginawww (while, for, etc.) 3. funciones P´aginainicial 4. comentarios JJ II J I Para saber m´as: P´agina 175 de 347 • Advanced Bash-Scripting Guide, Mendel Cooper, Ultima´ re- Regresar visi´onMayo 2005, www.tldp.org/guides.html Pantalla completa • The Deep, Dark Secrets of Bash, Ben Okopnik, Linux Gazette, Cerrar okopnik.freeshell.org/articles/Shell Scripting-4.html Abandonar • Introduction to Shell Scripting, Ben Okopnik, okopnik.freeshell.org/writings.html´Indice M´asdetalles en: Introducci´ona . . . Instalaci´ondel . . .

www.ac.usc.es/docencia/ASRI/Tema 3html/node34.html Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 176 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Ejecuci´onde un script ´Indice Los scripts deben empezar por el n´umero m´agico #! seguido del Introducci´ona . . . programa a usar para interpretar el script: Instalaci´ondel . . . Uso de la l´ıneade . . . • #!/bin/bash script de bash Programaci´on de . . . • #!/bin/sh script de shell Manejo de ficheros . . . Programaci´on en . . . • #!/usr/bin/perl script de perl Introducci´ona Perl . . . Las forma usuales de ejecutar un script es: P´aginawww • darle permiso de ejecuci´onal fichero y ejecutarlo como un P´aginainicial comando: JJ II $ chmod +x helloworld ./helloworld J I P´agina 177 de 347 • ejecutar una shell poniendo como argumento el nombre del script (s´olonecesita permiso de lectura) Regresar

Pantalla completa $ bash helloworld Cerrar • ejecutarlo en la shell actual Abandonar $ . helloworld ´Indice o bien: Introducci´ona . . . Instalaci´ondel . . . $ source helloworld Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 178 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Paso de par´ametros ´Indice Es posible pasar par´ametrosa un scripts: los par´ametrosse reco- Introducci´ona . . . gen en las variables $1 a $9 Instalaci´ondel . . . Uso de la l´ıneade . . . Variable Uso Programaci´on de . . . $0 el nombre del script Manejo de ficheros . . . $1 a $9 par´ametrosdel 1 al 9 ${10}, ${11},. . . par´ametrospor encima del 10 Programaci´on en . . . $# n´umerode par´ametros Introducci´ona Perl . . . $* $ , @ todos los par´ametros P´aginawww

Ejemplo: P´aginainicial $ cat parms1.sh JJ II #!/bin/bash J I VAL=$((${1:-0} + ${2:-0} + ${3:-0})) echo $VAL P´agina 179 de 347 $ bash parms1.sh 2 3 5 Regresar 10 Pantalla completa $ bash parms1.sh 2 3 5 Cerrar

Abandonar El comando shift desplaza los par´ametroshacia la izquierda el ´Indice n´umerode posiciones indicado: Introducci´ona . . . $ cat parms2.sh Instalaci´ondel . . . #!/bin/bash Uso de la l´ıneade . . . echo $# Programaci´on de . . . echo $* Manejo de ficheros . . . echo "$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11}" Programaci´on en . . . shift 9 Introducci´ona Perl . . . echo $1 $2 $3 echo $# P´aginawww echo $* P´aginainicial $ bash parms2.sh a b c d e f g h i j k l JJ II 12 abcdefghijkl J I abcdefghijk P´agina 180 de 347

j k l Regresar 3 j k l Pantalla completa Cerrar

Abandonar Entrada/salida ´Indice Es posible leer desde la entrada est´andaro desde fichero usando Introducci´ona . . . read y redirecciones: Instalaci´ondel . . . Uso de la l´ıneade . . .

#!/bin/bash Programaci´on de . . . echo -n "Introduce algo: " Manejo de ficheros . . . read x Programaci´on en . . . echo "Has escrito $x" Introducci´ona Perl . . . echo -n "Escribe 2 palabras: "

read x y P´aginawww echo "Primera palabra $x; Segunda palabra $y" P´aginainicial

JJ II Si queremos leer o escribir a un fichero utilizamos redirecciones: J I $ echo X > fichero P´agina 181 de 347 read X < fichero Regresar Este ´ultimocaso lee la primera l´ıneade fichero y la guarda en Pantalla completa la variable X Cerrar

Abandonar • Si queremos leer un fichero l´ıneaa l´ıneapodemos usar while: ´Indice #!/bin/bash Introducci´ona . . . # FILE: linelist Instalaci´ondel . . . # Usar: linelist filein fileout Uso de la l´ıneade . . . # Lee el fichero pasado en filein y Programaci´on de . . . # lo salva en fileout con las lineas numeradas Manejo de ficheros . . . count=0 Programaci´on en . . . while read BUFFER Introducci´ona Perl . . . do count=$((++count)) P´aginawww echo "$count $BUFFER">> $2 P´aginainicial done < $1 JJ II

? el fichero de entrada se va leyendo l´ıneaa l´ıneay alma- J I

cenando en BUFFER P´agina 182 de 347

? count cuenta las l´ıneasque se van leyendo Regresar

• El uso de lazos para leer ficheros es bastante ineficiente Pantalla completa ? deber´ıanevitarse (por ejemplo, usar cat fichero) Cerrar

Abandonar Ejemplo de lectura de fichero ´Indice #!/bin/bash Introducci´ona . . . # Usa $IFS para dividir la l´ıneaque se est´aleyendo Instalaci´ondel . . . # por defecto, la separaci´ones "espacio" Uso de la l´ıneade . . . echo "Lista de todos los usuarios:" Programaci´on de . . .

OIFS=$IFS # Salva el valor de IFS Manejo de ficheros . . .

IFS=: # /etc/passwd usa ":"para separar los campos Programaci´on en . . .

cat /etc/passwd | Introducci´ona Perl . . . while read name passwd uid gid fullname ignore do P´aginawww

echo "$name ($fullname)" P´aginainicial done IFS=$OIFS # Recupera el $IFS original JJ II J I • El fichero /etc/passwd se lee l´ıneaa l´ınea P´agina 183 de 347 ? para cada l´ınea,sus campos se almacenan en las varia- Regresar bles que siguen a read ? la separaci´onentre campos la determina la variable $IFS Pantalla completa (por defecto, espacio en blanco) Cerrar

Abandonar Redirecciones ´Indice Las redirecciones y pipes pueden usarse en otras estructuras de Introducci´ona . . . control Instalaci´ondel . . . Uso de la l´ıneade . . . Ejemplo: lee las 2 primeras l´ıneasde un fichero Programaci´on de . . . if true Manejo de ficheros . . . then Programaci´on en . . . read x Introducci´ona Perl . . . read y P´aginawww fi < fichero1 P´aginainicial Ejemplo: lee l´ıneasde teclado y guardalas en un fichero temporal convirtiendo min´usculasen may´usculas JJ II

#/bin/bash J I

read buf P´agina 184 de 347 while [ "$buf" ] do Regresar echo $buf Pantalla completa

read buf Cerrar done | tr 'a-z''A-Z' > tmp.$$ Abandonar Tests ´Indice Los comandos que se ejecutan en un shell tienen un c´odigo de Introducci´ona . . . salida, que se almacena en la variable $? Instalaci´ondel . . . Uso de la l´ıneade . . . $ • si ? es 0 el comando termin´obien Programaci´on de . . . • si $? es > 0 el comando termin´omal Manejo de ficheros . . . Programaci´on en . . . Ejemplo: Introducci´ona Perl . . . $ ls /bin/ls P´aginawww /bin/ls $ echo $? P´aginainicial

0 JJ II $ ls /bin/ll J I ls: /bin/ll: Non hai tal ficheiro ou directorio $ echo $? P´agina 185 de 347

1 Regresar

Pantalla completa

Cerrar

Abandonar Podemos chequear la salida de dos comandos mediante los ope- ´Indice radores && (AND) y || (OR) Introducci´ona . . .

• estos operadores act´uanen cortocircuito: Instalaci´ondel . . .

Uso de la l´ıneade . . . comando1 && comando2 comando2 s´olose ejecuta si comando1 acaba bien Programaci´on de . . . comando1 || comando2 Manejo de ficheros . . . comando2 s´olose ejecuta si comando1 falla Programaci´on en . . . Introducci´ona Perl . . . • comandos true y false: devuelven 0 y 1, respectivamente P´aginawww Ejemplo con &&: $ ls /bin/ls && ls /bin/ll P´aginainicial /bin/ls JJ II ls: /bin/ll: Non hai tal ficheiro ou directorio J I $ echo $? 1 P´agina 186 de 347 $ ls /bin/ll && ls /bin/ls Regresar

ls: /bin/ll: Non hai tal ficheiro ou directorio Pantalla completa $ echo $? 1 Cerrar Abandonar Ejemplo con ||: ´Indice $ ls /bin/ls || ls /bin/ll Introducci´ona . . . /bin/ls Instalaci´ondel . . . $ echo $? Uso de la l´ıneade . . . 0 Programaci´on de . . . $ ls /bin/ll || ls /bin/ls Manejo de ficheros . . . ls: /bin/ll: Non hai tal ficheiro ou directorio Programaci´on en . . . /bin/ls Introducci´ona Perl . . . $ echo $? 0 P´aginawww P´aginainicial

JJ II

J I

P´agina 187 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Estructura if...then...else ´Indice Podemos usar el estado de salida de uno o varios comandos para Introducci´ona . . . tomar decisiones: Instalaci´ondel . . . Uso de la l´ıneade . . .

if comando1 Programaci´on de . . . then Manejo de ficheros . . . ejecuta otros comandos Programaci´on en . . . elif comando2 Introducci´ona Perl . . . then

ejecuta otros comandos P´aginawww else P´aginainicial ejecuta otros comandos fi JJ II

J I • debe respetarse la colocaci´onde los then, else y fi P´agina 188 de 347 ? tambi´enpuede escribirse if comando1 ; then Regresar

• el elif y el else son opcionales, no as´ıel fi Pantalla completa

Cerrar

Abandonar Ejemplo: ´Indice $ cat if.sh Introducci´ona . . . #!/bin/bash Instalaci´ondel . . . if (ls /bin/ls && ls /bin/ll) >/dev/null 2>&1 Uso de la l´ıneade . . . then Programaci´on de . . . echo "Encontrados ls y ll" Manejo de ficheros . . . else Programaci´on en . . . echo "Falta uno de los ficheros" Introducci´ona Perl . . . fi $ bash if.sh P´aginawww Falta uno de los ficheros P´aginainicial

JJ II

J I

P´agina 189 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Comando test ´Indice Notar que if s´olochequea el c´odigode salida de un comando, no Introducci´ona . . . puede usarse para comparar valores: para eso se usa el comando Instalaci´ondel . . . test Uso de la l´ıneade . . . El comando test permite: Programaci´on de . . . Manejo de ficheros . . . • chequear la longitud de un string Programaci´on en . . .

• comparar dos strings o dos n´umeros Introducci´ona Perl . . .

• chequear el tipo de un fichero P´aginawww

• chequear los permisos de un fichero P´aginainicial • combinar condiciones juntas JJ II test puede usarse de dos formas: J I P´agina 190 de 347 test expresi´on Regresar o bien Pantalla completa [ expresi´on ]3 Cerrar 3Notar los espacios en blanco entre los [ ] y expresi´on Abandonar Si la expresi´ones correcta test devuelve un c´odigode salida 0, ´Indice si es falsa, devuelve 1: Introducci´ona . . . • este c´odigopuede usarse para tomar decisiones: Instalaci´ondel . . . Uso de la l´ıneade . . .

if [ "$1" = "hola" ] Programaci´on de . . .

then Manejo de ficheros . . .

echo "Hola a ti tambi´en" Programaci´on en . . .

else Introducci´ona Perl . . . echo "No te digo hola" fi P´aginawww $ if [ 2 ] P´aginainicial then echo "El segundo par´ametroes $2" JJ II else J I

echo "No hay segundo par´ametro" P´agina 191 de 347 fi Regresar

• en el segundo if la expresi´ones correcta si $2 tiene alg´un Pantalla completa valor; falsa si la variable no est´adefinida o contiene null ("") Cerrar

Abandonar Expresiones ´Indice Existen expresiones para chequear strings, n´umeros o ficheros Introducci´ona . . . Instalaci´ondel . . .

Chequeo de strings Uso de la l´ıneade . . . Expresi´on Verdadero s´ı Programaci´on de . . . string el string es no nulo ("") Manejo de ficheros . . . -z string la longitud del string es 0 Programaci´on en . . . -n string la longitud del string no es 0 Introducci´ona Perl . . . los strings son iguales string1 = string2 P´aginawww string1 != string2 los strings son distintos P´aginainicial

Chequeo de enteros JJ II Expresi´on Verdadero s´ı J I int1 -eq int2 los enteros son iguales int1 -ne int2 los enteros son distintos P´agina 192 de 347 int1 -gt int2 int1 mayor que int2 Regresar

int1 -ge int2 int1 mayor o igual que int2 Pantalla completa int1 -lt int2 int1 menor que int2 int1 -le int2 int1 menor o igual que int2 Cerrar Abandonar Chequeo de ficheros ´Indice Expresi´on Verdadero s´ı Introducci´ona . . . -e file file existe Instalaci´ondel . . . -r file file existe y es legible Uso de la l´ıneade . . . -w file file existe y se puede escribir Programaci´on de . . . -x file file existe y es ejecutable Manejo de ficheros . . . -f file file existe y es de tipo regular Programaci´on en . . . -d file file existe y es un directorio Introducci´ona Perl . . . -c file file existe y es un dispositivo de caracteres -b file file existe y es un dispositivo de bloques P´aginawww -p file file existe y es un pipe P´aginainicial -S file file existe y es un socket JJ II -L file file existe y es un enlace simb´olico -u file file existe y es setuid J I -g file file existe y es setgid P´agina 193 de 347

-k file file existe y tiene activo el sticky bit Regresar -s file file existe y tiene tama˜nomayor que 0 Pantalla completa

Cerrar

Abandonar Operadores l´ogicoscon test ´Indice Expresi´on Prop´osito Introducci´ona . . . ! invierte el resultado de una expresi´on Instalaci´ondel . . . -a operador AND Uso de la l´ıneade . . . -o operador OR Programaci´on de . . . ( expr ) agrupaci´on de expresiones; los par´entesis Manejo de ficheros . . . tienen un significado especial para el shell, por Programaci´on en . . .

lo que hay que escaparlos Introducci´ona Perl . . .

Ejemplos: P´aginawww

$ test -f /bin/ls -a -f /bin/ll ; echo $? P´aginainicial 1 JJ II $ test -c /dev/null ; echo $? 0 J I $ [ -s /dev/null ] ; echo $? P´agina 194 de 347

1 Regresar $ [ ! -w /etc/passwd ] && echo "No puedo escribir" No puedo escribir Pantalla completa $ [ $$ -gt 0 -a \( $$ -lt 5000 -o -w file \)] Cerrar

Abandonar Comando de test extendido A partir de la versi´on2.02 de Bash ´Indice

se introduce el extended test command: [[ expr ]] Introducci´ona . . . • permite realizar comparaciones de un modo similar al de Instalaci´ondel . . . lenguajes est´andar: Uso de la l´ıneade . . . Programaci´on de . . . ? permite usar los operadores && y || para unir expre- Manejo de ficheros . . . siones Programaci´on en . . .

? no necesita escapar los par´entesis Introducci´ona Perl . . .

Ejemplos: P´aginawww

$ [[ -f /bin/ls && -f /bin/ll ]] ; echo $? P´aginainicial 1 JJ II $ [[ $$ -gt 0 && ($$ -lt 5000 || -w file) ]] J I

P´agina 195 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Control de flujo ´Indice Adem´asdel if bash permite otras estructuras de control de flujo: Introducci´ona . . . case, for, while y until Instalaci´ondel . . . Uso de la l´ıneade . . .

Estructura case Programaci´on de . . . Manejo de ficheros . . .

case valor in Programaci´on en . . . patr´on 1 ) Introducci´ona Perl . . . comandos si value = patr´on 1 comandos si value = patr´on 1 ;; P´aginawww

patr´on 2 ) P´aginainicial comandos si value = patr´on 2 ;; *) JJ II comandos por defecto ;; J I

esac P´agina 196 de 347

• si valor no coincide con ning´unpatr´onse ejecutan los co- Regresar * mandos despu´esdel ) Pantalla completa

? esta entrada es opcional Cerrar

Abandonar • patr´on puede incluir comodines y usar el s´ımbolo | como ´Indice

operador OR Introducci´ona . . .

Ejemplo: Instalaci´ondel . . . Uso de la l´ıneade . . .

#!/bin/bash Programaci´on de . . .

echo -n "Respuesta:" read RESPUESTA Manejo de ficheros . . . $ case RESPUESTA in Programaci´on en . . .

S* | s*) Introducci´ona Perl . . . RESPUESTA="SI";; N* | n*) P´aginawww

RESPUESTA="NO ";; P´aginainicial *) RESPUESTA="PUEDE";; JJ II esac J I $ echo RESPUESTA P´agina 197 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Lazos for ´Indice for var in lista Introducci´ona . . . do Instalaci´ondel . . . comandos Uso de la l´ıneade . . . done Programaci´on de . . . Manejo de ficheros . . .

• var toma los valores de la lista Programaci´on en . . . ? puede usarse globbing para recorrer los ficheros Introducci´ona Perl . . .

Ejemplo: recorrer una lista P´aginawww P´aginainicial LISTA="10 9 8 7 6 5 4 3 2 1" for var in $LISTA JJ II do J I $ echo var P´agina 198 de 347 done Regresar

Pantalla completa

Cerrar

Abandonar Ejemplo: recorrer los ficheros *.bak de un directorio ´Indice dir="/var/tmp" Introducci´ona . . . for file in $dir/*.bak Instalaci´ondel . . . do Uso de la l´ıneade . . . rm -f $file Programaci´on de . . . done Manejo de ficheros . . . Programaci´on en . . . Sintaxis alternativa, similar a la de C Introducci´ona Perl . . . LIMIT=10 P´aginawww for ((a=1, b=LIMIT; a <= LIMIT; a++, b--)) do P´aginainicial $ $ echo " a- b" JJ II done J I

P´agina 199 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Bucle while ´Indice while comando Introducci´ona . . . do Instalaci´ondel . . . comandos Uso de la l´ıneade . . . done Programaci´on de . . . Manejo de ficheros . . .

• se ejecuta mientras que el c´odigode salida de comando sea Programaci´on en . . .

cierto Introducci´ona Perl . . .

Ejemplo: P´aginawww

while [ $1 ] P´aginainicial do JJ II echo $1 shift J I done P´agina 200 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Bucle until ´Indice until comando Introducci´ona . . . do Instalaci´ondel . . . comandos Uso de la l´ıneade . . . done Programaci´on de . . . Manejo de ficheros . . .

• se ejecuta hasta que el c´odigode salida de comando sea hace Programaci´on en . . .

cierto Introducci´ona Perl . . .

Ejemplo: P´aginawww

until [ "$1" = ""] P´aginainicial do JJ II echo $1 shift J I done P´agina 201 de 347

Regresar

Pantalla completa

Cerrar

Abandonar break y continue Permiten salir de un lazo (break) o saltar a la ´Indice siguiente iteraci´on(continue) Introducci´ona . . . • break permite especificar el n´umerode lazos de los que que- Instalaci´ondel . . . remos salir (break n ) Uso de la l´ıneade . . . Programaci´on de . . . Ejemplo con : break Manejo de ficheros . . . # Imprime el contenido de los ficheros hasta que Programaci´on en . . . # encuentra una l´ıneaen blanco Introducci´ona Perl . . . for file in $* P´aginawww do while read buf P´aginainicial

do JJ II if [ -z "$buf"] then J I break 2 P´agina 202 de 347

fi Regresar echo $buf Pantalla completa done < $file done Cerrar

Abandonar Ejemplo con continue: ´Indice # Muestra un fichero pero no las l´ıneasde m´as Introducci´ona . . . # de 80 caracteres Instalaci´ondel . . . while read buf Uso de la l´ıneade . . . do Programaci´on de . . . cuenta=`echo $buf | wc -c` Manejo de ficheros . . . if [ $cuenta -gt 80 ] Programaci´on en . . . then Introducci´ona Perl . . . continue fi P´aginawww echo $buf P´aginainicial done < $1 JJ II

J I

P´agina 203 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Funciones ´Indice Podemos definir funciones en un script de shell: Introducci´ona . . . Instalaci´ondel . . . funcion() { comandos Uso de la l´ıneade . . . } Programaci´on de . . . Manejo de ficheros . . . y para llamarla: Programaci´on en . . .

funcion p1 p2 p3 Introducci´ona Perl . . . Siempre tenemos que definir la funci´onantes de llamarla: P´aginawww #!/bin/bash # Definici´onde funciones P´aginainicial funcion1() { JJ II comandos J I } funcion2() { P´agina 204 de 347 comandos Regresar } Pantalla completa # Programa principal funcion1 p1 p2 p3 Cerrar

Abandonar Paso de par´ametros La funci´onreferencia los par´ametros pasa- ´Indice $ $ $* dos por posici´on,es decir, 1, 2, . . . , y para la lista completa: Introducci´ona . . . $ cat funcion1.sh Instalaci´ondel . . . #!/bin/bash Uso de la l´ıneade . . . funcion1() Programaci´on de . . . { Manejo de ficheros . . . echo "Par´ametrospasados a la funci´on: $*" Programaci´on en . . . echo "Par´ametro1: $1" Introducci´ona Perl . . . echo "Par´ametro2: $2" } P´aginawww # Programa principal P´aginainicial funcion1 "hola" "que tal est´as"adios $ JJ II $ bash funcion1.sh J I Par´ametrospasados a la funci´on: hola que tal P´agina 205 de 347

est´asadios Regresar Par´ametro1: hola Par´ametro2: que tal est´as Pantalla completa Cerrar

Abandonar return Despu´esde llamar a una funci´on, $? tiene el c´odigose ´Indice salida del ´ultimocomando ejecutado: Introducci´ona . . . • podemos ponerlo de forma expl´ıcitausando return Instalaci´ondel . . . Uso de la l´ıneade . . .

#!/bin/bash Programaci´on de . . .

funcion2() { Manejo de ficheros . . .

if [ -f /bin/ls -a -f /bin/ln ]; then Programaci´on en . . .

return 0 Introducci´ona Perl . . . else return 1 P´aginawww

fi P´aginainicial } # Programa principal JJ II if funcion2; then J I

echo "Los dos ficheros existen" P´agina 206 de 347 else Regresar echo "Falta uno de los ficheros - adi´os" exit 1 Pantalla completa

fi Cerrar

Abandonar Otros comandos ´Indice wait Permite esperar a que un proceso lanzado en background Introducci´ona . . . termine Instalaci´ondel . . . Uso de la l´ıneade . . . sort $largefile > $newfile & ejecuta comandos Programaci´on de . . . wait Manejo de ficheros . . . usa $newfile Programaci´on en . . . Introducci´ona Perl . . . Si lanzamos varios procesos en background podemos usar $! • $! devuelve el PID del ´ultimoproceso lanzado P´aginawww sort $largefile1 > $newfile1 & P´aginainicial

SortPID1=$! JJ II sort $largefile2 > $newfile2 & J I SortPID2=$! ejecuta comandos P´agina 207 de 347 wait $SortPID1 Regresar usa $newfile1 Pantalla completa wait $SortPID2 usa $newfile2 Cerrar

Abandonar trap Permite atrapar las se˜nalesdel sistema operativo ´Indice • permite hacer que el programa termine limpiamente (p.e. Introducci´ona . . . borrando ficheros temporales, etc.) a´unen el evento de un Instalaci´ondel . . . error Uso de la l´ıneade . . . $ cat trap.sh Programaci´on de . . . #!/bin/bash Manejo de ficheros . . . cachado() { Programaci´on en . . . echo "Me has matado!!!" Introducci´ona Perl . . . $$ kill -15 P´aginawww } trap "cachado" 2 3 P´aginainicial while true; do JJ II true J I done $ bash trap.sh P´agina 208 de 347 (Ctrl-C) Regresar

Me has matado!!! Pantalla completa Terminado Cerrar Las se˜nalesm´ascomunes para usar con trap son: Abandonar ´Indice Se˜nal Significado Introducci´ona . . . 0 salida del shell (por cualquier raz´on,incluido fin de fichero) Instalaci´ondel . . . 1 colgar 2 interrupci´on(Ctrl-C) Uso de la l´ıneade . . . 3 quit Programaci´on de . . . 9 kill (no puede ser parada ni ignorada) Manejo de ficheros . . . 15 terminate; se˜nalpor defecto generada por kill Programaci´on en . . . Introducci´ona Perl . . . exit Finaliza el script P´aginawww

• se le puede dar un argumento num´ericoque toma como es- P´aginainicial tado de salida, p.e. exit 0 si el script acaba bien y exit 1 en caso contrario JJ II J I • si no se usa exit, el estado de salida del script es el del P´agina 209 de 347 ´ultimocomando ejecutado Regresar

Pantalla completa

Cerrar

Abandonar Referencias indirectas ´Indice Permiten definir variables cuyo contenido es el nombre de otra Introducci´ona . . . variable: Instalaci´ondel . . . Uso de la l´ıneade . . .

a=letra Programaci´on de . . . letra=z Manejo de ficheros . . . # Referencia directa Programaci´on en . . . echo "a = $a" # a = letra Introducci´ona Perl . . . # Referencia indirecta

eval a=\$$a P´aginawww echo "Ahora a = $a" # Ahora a = z P´aginainicial

Las versiones de bash a partir de la 2 permiten una forma m´as JJ II simple para las referencias indirectas: J I

a=letra P´agina 210 de 347 letra=z # Referencia directa Regresar echo "a = $a" # a = letra Pantalla completa

# Referencia indirecta Cerrar echo "Ahora a = ${!a}"# Ahora a = z Abandonar Otro ejemplo con eval ´Indice $ cat dni.sh Introducci´ona . . . #!/bin/bash Instalaci´ondel . . . dniPepe=23456789 Uso de la l´ıneade . . . dniPaco=98765431 Programaci´on de . . . echo -n "Nombre: "; read nombre Manejo de ficheros . . . eval echo "DNI = \$dni${nombre}" Programaci´on en . . . $ bash dni.sh Introducci´ona Perl . . . Nombre: Pepe DNI = 23456789 P´aginawww P´aginainicial

JJ II

J I

P´agina 211 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Optimizaci´onde scripts ´Indice El shell no es especialmente eficiente a la hora de ejecutar traba- Introducci´ona . . . jos pesados Instalaci´ondel . . . • Ejemplo: script que cuenta las l´ıneasde un fichero: Uso de la l´ıneade . . . Programaci´on de . . . $ cat cuentalineas1.sh Manejo de ficheros . . .

#!/bin/bash Programaci´on en . . . count=0 Introducci´ona Perl . . . while read line do P´aginawww $ $ count= (expr count + 1) P´aginainicial done < $1 echo "El fichero $1 tiene $count l´ıneas" JJ II ? si medimos el tiempo que tarda J I P´agina 212 de 347 $ time bash cuentalineas1.sh Quijote.txt El fichero Quijote.txt tiene 36855 l´ıneas Regresar real 0m59.757s Pantalla completa

user 0m17.868s Cerrar sys 0m41.462s Abandonar • Podemos mejorarlo si usamos aritm´eticade shell en vez de ´Indice

el comando expr Introducci´ona . . . $ cat cuentalineas2.sh Instalaci´ondel . . . #!/bin/bash Uso de la l´ıneade . . . count=0 Programaci´on de . . . while read line Manejo de ficheros . . . do Programaci´on en . . . count=$(($count+1)) Introducci´ona Perl . . . done < $1 echo "El fichero $1 tiene $count l´ıneas" P´aginawww P´aginainicial ? el tiempo ahora JJ II $ time bash cuentalineas2.sh Quijote.txt J I El fichero Quijote.txt tiene 36855 l´ıneas P´agina 213 de 347 real 0m1.014s user 0m0.887s Regresar

sys 0m0.108s Pantalla completa

Cerrar

Abandonar • Y todav´ıamejor: ´Indice $ cat cuentalineas3.sh Introducci´ona . . . #!/bin/bash Instalaci´ondel . . . count=$(wc -l $1 | cut -d " " -f 1) Uso de la l´ıneade . . . echo "El fichero $1 tiene $count l´ıneas" Programaci´on de . . . $ Manejo de ficheros . . . $ time bash cuentalineas3.sh Quijote.txt Programaci´on en . . . El fichero Quijote.txt tiene 36855 l´ıneas Introducci´ona Perl . . . real 0m0.096s user 0m0.005s P´aginawww sys 0m0.009s P´aginainicial • Conclusiones JJ II ? Intenta reducir el n´umerode procesos creados al eje- J I cutar el script, por ejemplo, usando las funciones arit- P´agina 214 de 347

m´eticasdel shell Regresar

? Siempre que sea posible, intenta usar comandos del shell Pantalla completa (wc, tr, grep, sed, etc.) en vez de lazos Cerrar

Abandonar Depuraci´on ´Indice Para depurar un script de shell podemos usar la opci´on -x o -o Introducci´ona . . . xtrace de bash: Instalaci´ondel . . . Uso de la l´ıneade . . .

• muestra en la salida est´andartrazas de cada comando y sus Programaci´on de . . . argumentos, despu´esde que el comando se haya expandido Manejo de ficheros . . . pero antes de que se sea ejecutado Programaci´on en . . . $ bash -x cuentalineas3.sh Quijote.txt Introducci´ona Perl . . . ++ wc -l Quijote.txt P´aginawww ++ cut -d ’ ’ -f 1 + count=36855 P´aginainicial

+ echo ’El fichero Quijote.txt tiene 36855 l´ıneas’ JJ II El fichero Quijote.txt tiene 36855 l´ıneas J I

P´agina 215 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Es posible depurar s´olo parte de un script: ´Indice • poner set -x o set -xv al inicio del trozo a depurar Introducci´ona . . . Instalaci´ondel . . .

• set +x o set +xv para cancelar Uso de la l´ıneade . . . $ cat cuentalineas3.sh Programaci´on de . . . #!/bin/bash Manejo de ficheros . . . set -x Programaci´on en . . . count=$(wc -l $1 | cut -d " "-f 1) Introducci´ona Perl . . . set +x P´aginawww echo "El fichero $1 tiene $count l´ıneas" $ P´aginainicial $ bash cuentalineas3.sh Quijote.txt JJ II ++ wc -l Quijote.txt ++ cut -d ''-f 1 J I + count=36855 P´agina 216 de 347

+ set +x Regresar El fichero Quijote.txt tiene 36855 l´ıneas Pantalla completa

Cerrar

Abandonar 5. Manejo de ficheros de texto ´Indice

Introducci´ona . . . Los ficheros de configuraci´ony logs de Unix son, normalmente, Instalaci´ondel . . . ficheros de texto Uso de la l´ıneade . . .

• se necesitan herramientas para manejar estos ficheros Programaci´on de . . . • Unix dispone de potentes herramientas que hacen uso ex- Manejo de ficheros . . . tensivo de expresiones regulares Programaci´on en . . . Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 217 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Expresiones regulares ´Indice Muchos comandos de procesamiento y b´usquedade texto como Introducci´ona . . . ed, grep, egrep, sed, awk o vi usan expresiones regulares: Instalaci´ondel . . . Uso de la l´ıneade . . .

• permiten reconocer una serie de cadenas de caracteres que Programaci´on de . . . obedecen a cierto patr´on Manejo de ficheros . . . • Ejemplos Programaci´on en . . . Introducci´ona Perl . . . ? egrep unix tmp.txt busca en el fichero tmp.txt las l´ıneasque contienen la P´aginawww

palabra unix P´aginainicial ? egrep '[Uu]nix' tmp.txt JJ II busca las l´ıneasque contienen unix o Unix J I ? egrep 'hel.' tmp.txt busca las l´ıneasque contienen hel seguido de cualquier P´agina 218 de 347

car´acter Regresar

Pantalla completa

Cerrar

Abandonar ? egrep 'ab*c' tmp.txt ´Indice

localiza las cadenas que empiecen por a, que contin´uen Introducci´ona . . .

con 0 o m´as b, y que sigan con una c, por ejemplo: Instalaci´ondel . . . o , pero no o abbbc aaacb axc cba Uso de la l´ıneade . . .

? egrep 't[^aeiouAEIOU][a-zA-Z]*' tmp.txt Programaci´on de . . .

localiza las cadenas que empiecen por t, seguido de Manejo de ficheros . . .

alg´uncar´acterno voc´alicoy 0 o m´asapariciones de otro Programaci´on en . . .

car´acter Introducci´ona Perl . . .

Importante: no debemos confundir las expresiones regulares P´aginawww con la sustituci´onde nombres de ficheros (globbing) P´aginainicial • si ponemos el ´ultimo ejemplo sin comillas JJ II egrep t[^aeiouAEIOU][a-zA-Z]* tmp.txt J I

la shell extiende los comodines y convierte este comando en: P´agina 219 de 347

egrep tmp.txt tmp.txt Regresar • para evitar esto, siempre usar comillas con las expresiones Pantalla completa regulares Cerrar

Abandonar Comandos grep y sed ´Indice grep y sed son dos comandos que usan REGEXP Introducci´ona . . . Instalaci´ondel . . . grep Busca en ficheros por un patr´ondeterminado Uso de la l´ıneade . . . Programaci´on de . . .

grep [opciones ] patr´on [fichero...] Manejo de ficheros . . . Opciones: Programaci´on en . . . Introducci´ona Perl . . . • -E o egrep: usa expresiones regulares extendidas P´aginawww • -F o fgrep: interpreta los patrones no como expresiones regulares sino como cadenas de caracteres fijas P´aginainicial JJ II • -R o rgrep: lee todos los ficheros bajo cada directorio, re- cursivamente J I

P´agina 220 de 347 • -i o --ignore-case: busca ignorando diferencias entre may´usculas y min´usculas Regresar • -w o --word-regexp: para forzar que la cadena reconocida Pantalla completa sea una palabra completa Cerrar

Abandonar • -l o --files-with-matches: no muestra el contenido de la ´Indice

linea encontrada pero si que muestra el fichero que contiene Introducci´ona . . .

la cadena buscada Instalaci´ondel . . . • -n o --line-number: muestra el n´umerode l´ıneadentro del Uso de la l´ıneade . . . fichero Programaci´on de . . . Manejo de ficheros . . . • -v o --invert-match: en lugar de sacar la lineas que cumplen Programaci´on en . . . la b´usquedasacar´alas que no cumplen Introducci´ona Perl . . . Si no especificamos fichero, grep usa la entrada est´andar: P´aginawww

• podemos usarlo para probar las expresiones regulares: P´aginainicial

$ egrep '[Uu]nix' JJ II unix J I unix Unix P´agina 221 de 347 Unix Regresar

Linux Pantalla completa

Cerrar

Abandonar sed (stream editor) Editor de flujo; permite realizar transforma- ´Indice ciones b´asicasde un flujo de entrada (un fichero o una entrada Introducci´ona . . . desde una tuber´ıa) Instalaci´ondel . . .

Uso de la l´ıneade . . . Formato (para substituciones): Programaci´on de . . .

sed [opciones] 's/REGEXP/reemplazo/flag' [fichero] Manejo de ficheros . . . Algunos comandos: Programaci´on en . . . Introducci´ona Perl . . . • s substituci´on P´aginawww • d borrado P´aginainicial • i\, a\, a˜nadeantes/despu´esde la l´ınea afectada JJ II • c\ reemplaza la l´ıneaafectada J I

Algunas ociones: P´agina 222 de 347

• -e comando: a˜nade comando Regresar

• -i edita el fichero in-place Pantalla completa

• -n suprime la salida Cerrar

Abandonar Algunos flags: ´Indice • g: aplica los cambios globalmente (por defecto, s´olose cam- Introducci´ona . . . bia la primera aparici´onen cada l´ınea) Instalaci´ondel . . . Uso de la l´ıneade . . .

• p imprime las l´ıneasafectadas, incluso con la opci´on -n. Programaci´on de . . . • NUMERO: reemplaza la aparici´onn´umero NUMERO Manejo de ficheros . . . Programaci´on en . . . • fichero: escribe las l´ıneascon sustituciones al fichero indi- w Introducci´ona Perl . . . cado P´aginawww Ejemplo: cambia, en el fichero amigos, todas las apariciones de pepe y paco por Pepe y Paco, respectivamente: P´aginainicial $ sed -e 's/pepe/Pepe/g' -e 's/paco/Paco/g' amigos JJ II (tambi´en sed 's/pepe/Pepe/g ; s/paco/Paco/g' amigos) J I Ejemplo: cambia pepe por Pepe, pero s´oloen las l´ıneasque ten- P´agina 223 de 347 gan Potamo Regresar $ sed '/Potamo/s/pepe/Pepe/g' amigos Pantalla completa

Cerrar

Abandonar Ejemplo: muestra s´ololas lineas que contengan jaime ´Indice $ sed -n '/jaime/p' amigos Introducci´ona . . . Instalaci´ondel . . . Ejemplo: borra las lineas que contengan jaime Uso de la l´ıneade . . .

$ sed '/jaime/d' amigos Programaci´on de . . . Ejemplo: cambia las lineas que contengan jaime por otra cosa Manejo de ficheros . . . Programaci´on en . . . $ sed '/jaime/c\BORRADO' amigos Introducci´ona Perl . . . Ejemplo: inserta una l´ınea,con la palabra 'APARICION', antes de las l´ıneasque contengan jaime P´aginawww

P´aginainicial $ sed '/jaime/i\APARICION' amigos Ejemplo: reemplaza, en cada l´ıneade fichero, la quinta ocu- JJ II rrencia de stop por STOP J I $ sed 's/stop/STOP/5' fichero P´agina 224 de 347 Ejemplo: igual que antes pero guarda cada l´ıneareemplazada en Regresar el fichero f2 Pantalla completa

$ sed 's/stop/STOP/5w f2' fichero Cerrar

Abandonar Indicaci´onde l´ıneas: podemos especificar las l´ıneasdel fichero ´Indice en las que queremos que se realicen las operaciones: Introducci´ona . . . sed '3s/stop/STOP/g' (reemplaza s´oloen la l´ınea3) Instalaci´ondel . . . sed '3,10s/stop/STOP/g' (reemplaza de la l´ınea3 a Uso de la l´ıneade . . . la 10) Programaci´on de . . . sed '3,$s/stop/STOP/g' (reemplaza de la l´ınea3 al Manejo de ficheros . . . final) Programaci´on en . . . sed '!3s/stop/STOP/g' (reemplaza en todas las l´ıneas Introducci´ona Perl . . . menos la 3) P´aginawww

Operador &: se sustituye por el patr´onreconocido P´aginainicial

JJ II Ejemplo: reemplaza stop por J I $ ' ' sed 3s/stop/<&>/g fichero P´agina 225 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Comandos desde fichero: la opci´on-f permite leer comandos de ´Indice sed agrupados en un fichero Introducci´ona . . .

Instalaci´ondel . . . Ejemplo: reemplazo desde la l´ınea1 hasta una l´ıneaque comience Uso de la l´ıneade . . . por END (o el final, si no hay ninguna) Programaci´on de . . . $ cat file.sed Manejo de ficheros . . . 1,/^END/{ Programaci´on en . . . s/[Ll]inux/GNU\/Linux/g Introducci´ona Perl . . . s/samba/Samba/g } P´aginawww $ sed -f file.sed fichero P´aginainicial

JJ II

J I

P´agina 226 de 347

Regresar

Pantalla completa

Cerrar

Abandonar M´asinformaci´on: sed es un comando muy complejo con muchas ´Indice posibilidades Introducci´ona . . .

Instalaci´ondel . . . Para saber m´as: Uso de la l´ıneade . . . • mirar la p´aginade info de sed Programaci´on de . . . Manejo de ficheros . . . • Sed - An Introduction Programaci´on en . . . • Ejemplos con sed Introducci´ona Perl . . .

• Sed by example, IBM developerworks P´aginawww • sed & awk, by Dale Dougherty, Arnold Robbins, O’Reilly P´aginainicial o, simplemente, busca sed tutorial en google JJ II J I

P´agina 227 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Expresiones regulares b´asicas ´Indice UNIX admite dos tipos de expresiones regulares: b´asicasy ex- Introducci´ona . . . tendidas Instalaci´ondel . . . • las b´asicasson las cl´asicasde UNIX, aunque se consideran Uso de la l´ıneade . . . obsoletas en POSIX Programaci´on de . . . Manejo de ficheros . . .

• aplicaciones como grep o sed las usan por defecto Programaci´on en . . . • para usar las extendidas: Introducci´ona Perl . . .

? grep −→ egrep o grep -E P´aginawww

? sed −→ sed -r P´aginainicial

• las expresiones extendidas proporcionan m´aspotencia JJ II

La mayor´ıade los caracteres son tratados como literales: J I

• concuerdan (match) consigo mismos: P´agina 228 de 347

? a concuerda con a, ab con ab, etc. Regresar

• la excepci´onson los metacaracteres: Pantalla completa

. [ ] ^ $ *() \ Cerrar

Abandonar ER de un s´olocar´acter ´Indice

ER concuerda con Introducci´ona . . . . cualquier car´acter Instalaci´ondel . . . [] cualquiera de los caracteres entre corchetes, Uso de la l´ıneade . . .

p.e. [abc] concuerda con a, b o c; [a-z] con- Programaci´on de . . .

cuerda con cualquier letra min´uscula Manejo de ficheros . . .

[^ ] cualquier car´acter que no est´eentre corchetes Programaci´on en . . .

^ principio de l´ınea Introducci´ona Perl . . . $ final de l´ınea * 0 o m´asocurrencias de la expresi´onregular P´aginawww

anterior P´aginainicial \( \) permite agrupar ER \ escapa un metacar´acter JJ II J I • Dentro de [] los metacaracteres pierden su significado es- pecial: p.e. [a.]c concuerda con ac y .c P´agina 229 de 347 Regresar • Para incluir un car´acter ] en una lista colocarlo al principio; para incluir un ^ en cualquier lugar menos al principio; para Pantalla completa

incluir un - al final: p.e. [a^]c concuerda con ac y ^c Cerrar

Abandonar Ejemplos: ´Indice

Introducci´ona . . .

ER concuerda con Instalaci´ondel . . . a..c cadena que empiece por a, seguida por dos caracteres y c: a00c, Uso de la l´ıneade . . . xaxxcxx, aacc,. . . 0[abc]0 cadenas que tengan un 0 seguido de un car´acter a, b, o c y seguido de Programaci´on de . . .

otro 0: 0a0, 00ab0b0, bc0c0,. . . Manejo de ficheros . . . 0[^abc]0 cadenas que tengan un 0 seguido de un car´acterdistinto a a, b, o c y seguido de otro 0 Programaci´on en . . . 0[a-z]0 cadenas que tengan un 0 seguido de una letra min´uscula,y 0 Introducci´ona Perl . . . ^abc l´ıneasque empiecen por abc

abc$ l´ıneasque terminen por abc P´aginawww ab*c cadenas que empiecen por a, que contin´uencon 0 o m´as b, y una c: abc, ac, abbc, aaccab,. . . pero no cba o aaab P´aginainicial b[cq]*e cadenas que empiecen por b, que contin´uencon 0 o m´as c o q, y una e: be, bcce, bccqqee o bqqqce JJ II .* cualquier cadena abc.* cualquier cadena que empiece por abc J I

0\(abc\)*0 cadenas que tengan un 0 seguido de 0 o m´asocurrencias de abc, y P´agina 230 de 347 seguido de otro 0: 0abc0, 00, 0abcabc0,. . . , pero no 0ac0 o 0cba0 ^#.*\.$ l´ıneaque empiece por # y termine por . (notar que el segundo . est´a Regresar escapado por la \; la ER .* implica 0 o m´ascaracteres cualquiera) Pantalla completa

Cerrar

Abandonar Repetici´on Podemos repetir una regexp usando \{ \} ´Indice Constructor Prop´osito Introducci´ona . . . \{n\} concuerda con exactamente n ocurrencias de Instalaci´ondel . . . la RE previa Uso de la l´ıneade . . . \{n,\} concuerda con al menos n ocurrencias de la Programaci´on de . . . RE previa Manejo de ficheros . . . \{n, m\} concuerda con entre n y m ocurrencias de la Programaci´on en . . . RE previa Introducci´ona Perl . . .

Ejemplos: P´aginawww

• a\{5\}: 5 ocurrencias del car´acter a P´aginainicial

JJ II

• .\{5,\}: al menos 5 ocurrencias de cualquier car´acter J I

P´agina 231 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Expresiones regulares extendidas ´Indice Los sistemas UNIX actuales admiten extensiones a las expre- Introducci´ona . . . siones regulares b´asicas: Instalaci´ondel . . . Uso de la l´ıneade . . .

• debemos usar egrep, grep -E, sed -r Programaci´on de . . . ER concuerda con Manejo de ficheros . . . + una o m´asocurrencias de la RE anterior Programaci´on en . . . ? cero o una ocurrencia de la RE anterior Introducci´ona Perl . . .

Adem´as, \( \) y \{ \} se reemplazan por () y {} P´aginawww

P´aginainicial • Ejemplos: JJ II ? ab+c concuerda con abc, abbc, pero no con ac J I ? ab?c concuerda con ac, abc, pero no con abbc P´agina 232 de 347 • Para usar los caracteres (, ), { o } escaparlos con \ Regresar

Pantalla completa

Cerrar

Abandonar Alternancia El car´acter | permite alternar entre 2 o m´asRE ´Indice • (a|b)c concuerda con ac o bc Introducci´ona . . . Instalaci´ondel . . .

Etiquetado Las RE que se ponen entre () quedan etiquetadas, Uso de la l´ıneade . . . y podemos hacer referencia a esos elementos mediante \n, con n Programaci´on de . . . el n´umerode la etiqueta Manejo de ficheros . . . Programaci´on en . . .

• Ejemplos: Introducci´ona Perl . . . ? (.)oo\1 concuerda con , , pero no con moom noon moon P´aginawww ? (.)oo\1-(.)aa\1\2 concuerda con moom-paamp P´aginainicial

JJ II

J I

P´agina 233 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Otros caracteres Adem´asde los ya vistos, pueden usarse otros ´Indice metacaracteres: Introducci´ona . . .

ER concuerda con Instalaci´ondel . . . \n, \r, \t LF, CR y tab (no siempre funcionan) Uso de la l´ıneade . . . [:space:] caracteres en blanco ([ \t\n\r\f\v]) [:blank:] espacio y tabulado Programaci´on de . . .

[:alnum:] o \w caracteres alf´anum´ericos(letras y n´umeros) Manejo de ficheros . . . [:digit:] d´ıgitos [:alpha:] alfab´eticos Programaci´on en . . . [:upper:] may´usculas Introducci´ona Perl . . . [:lower:] min´usculas

[:xdigit:] d´ıgitoshexadecimales P´aginawww [:punct:] signos de puntuaci´on [:cntrl:] caracteres de control P´aginainicial [:graph:] caracteres imprimibles (sin espacio) [:print:] caracteres imprimibles (con espacio) JJ II \<, \> inicio/fin de palabra \b posici´onentre palabras J I

\B posici´onen medio de una palabra P´agina 234 de 347

• [[:upper:]]bc concuerda con Abc, pero no abc Regresar •\ babc\b concuerda con ab abc df, pero no con abcdef Pantalla completa

Cerrar •\ Babc\B concuerda con ababcdf, pero no con ab abc df Abandonar M´asejemplos ´Indice 1. \w+@\w+\.\w+((\.\w+)*)? concuerda con direcciones de Introducci´ona . . . e-mail Instalaci´ondel . . . Uso de la l´ıneade . . .

2. (0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[012])-(19|20)[0-9]{2} Programaci´on de . . . concuerda con fechas en el formato dd-mm-yyyy (a˜nosentre Manejo de ficheros . . . el 1900 y 2099) Programaci´on en . . . 3. [-+]?([0-9]*\.)?[0-9]+([eE][-+]?[0-9]+)? concuerda Introducci´ona Perl . . . con n´umerosen punto flotante (con o sin exponente) P´aginawww

Ejemplos de uso con sed: P´aginainicial

$ echo "abc1234def" | sed -r "s/[0-9]+/NUMERO/" JJ II abcNUMEROdef J I $ echo "abc1234def" | sed -r 's/[0-9]+/<&>/' abc<1234>def P´agina 235 de 347 # En el siguiente ejemplo, notar que las ER intentan Regresar

siempre reconocer la secuencia m´aslarga posible Pantalla completa $ echo "000x111x222x333" | sed 's/x.*x/<&>/' 000333 Cerrar

Abandonar # Eliminar blancos a principio y al final de l´ınea ´Indice

y sustituir m´asde un blanco seguido por uno solo Introducci´ona . . . $ $ sed -r "s/^ +// ; s/ + // ; s/ +/ /g" fich Instalaci´ondel . . .

# Pon los 4 primeros caracteres de cada l´ıneaal Uso de la l´ıneade . . . final de la misma Programaci´on de . . . $ sed -r 's/^(.{4,4})(.*)/\2\1/' fich Manejo de ficheros . . . # Cambia de min´usculasa may´usculasla primera Programaci´on en . . . letra de cada palabra $ sed -r 's/\<./\u&/g' Introducci´ona Perl . . .

# Convierte DOS newlines (CR/LF) a formato Unix P´aginawww (LF) P´aginainicial $ sed 's/^M$//'4 # tambi´enfuncionar´ıa JJ II $ ' ' sed s/\r// J I

Para m´asinformaci´on: Regular-expressions.info P´agina 236 de 347

4Para introducir un car´acterde control, como ^M, tenemos que pulsar primero Ctrl-V Regresar y luego el car´acter,en este caso Enter Pantalla completa

Cerrar

Abandonar Comandos para el procesamiento de textos ´Indice Adem´asde los ya vistos (vi, grep, sed) existen una serie de Introducci´ona . . . comandos para manejar ficheros de texto, como tac, rev, nl, Instalaci´ondel . . . head, tail, sort, uniq, expand, fmt, cut, paste, tr, join, Uso de la l´ıneade . . . split, wc, od o awk Programaci´on de . . . Manejo de ficheros . . . • tambi´ense conocen como filtros: obtienen su entrada de la Programaci´on en . . . entrada est´andar(o un fichero) y env´ıanla salida a la salida Introducci´ona Perl . . . est´andar:

P´aginawww sort < archivo.txt | head -3 > otro archivo.txt P´aginainicial • casi todos estos comandos tienen, entre otras opciones, las siguientes dos: JJ II J I ? --help muestra una peque˜naayuda y sal P´agina 237 de 347 ? --version muestra la versi´ondel comando y sal Regresar • tambi´enpodemos saber m´asdel comando a trav´esde la p´aginade manual o de info Pantalla completa Cerrar

Abandonar Comandos simples ´Indice Existe una serie de comandos simples para realizar operaciones Introducci´ona . . . concretas sobre ficheros de texto Instalaci´ondel . . . Uso de la l´ıneade . . .

• Ordena las l´ıneasalfab´eticamente: sort Programaci´on de . . . • Escribe partes seleccionadas de un fichero a la salida est´andar: Manejo de ficheros . . . cut Programaci´on en . . . Introducci´ona Perl . . . • Une texto de varios ficheros: paste

P´aginawww • Formatea p´arrafos: fmt P´aginainicial • Borra y/o reemplaza caracteres: tr JJ II • Elimina l´ıneasrepetidas: uniq J I

• Combina varios ficheros: join P´agina 238 de 347

• Divide un fichero en ficheros m´aspeque˜nos: split Regresar • Muestra el principio/final de un fichero: head/tail Pantalla completa

Cerrar • Muestra el fichero al rev´es: tac, rev Abandonar • Muestra el n´umerode l´ıneas,palabras y bytes de un fichero: ´Indice

wc Introducci´ona . . . • A˜naden´umerosde l´ınea: nl Instalaci´ondel . . . Uso de la l´ıneade . . .

• Convierte TABs en espacios: expand Programaci´on de . . . • Muestra un fichero en diferentes formatos: od Manejo de ficheros . . . Programaci´on en . . . Comentaremos brevemente cada uno de ellos Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 239 de 347

Regresar

Pantalla completa

Cerrar

Abandonar sort ordena alfab´eticamente l´ıneasde texto y las muestra en la ´Indice salida est´andar Introducci´ona . . .

Formato: Instalaci´ondel . . . sort [opciones] fichero Uso de la l´ıneade . . . Programaci´on de . . . Algunas opciones: Manejo de ficheros . . .

• -b ignora blancos al principio de l´ınea Programaci´on en . . .

Introducci´ona Perl . . . • -f no distingue may´usculas/min´usculas

P´aginawww • -r orden inverso P´aginainicial • -m mezcla ficheros previamente ordenados JJ II • -n ordena num´ericamente J I

• -k POS1[, POS2] ordena seg´unlos campos desde POS1 a P´agina 240 de 347 POS2, o el final si no est´a POS2 (el primer campo es 1) Regresar Ejemplos: Pantalla completa $ cat nombres.txt Cerrar Mar´ıaP´erez Abandonar luis Andi´on ´Indice

Adriana G´omez Introducci´ona . . . jorge pena Instalaci´ondel . . . $ sort nombres.txt Uso de la l´ıneade . . . Adriana G´omez Programaci´on de . . . Mar´ıaP´erez Manejo de ficheros . . . jorge pena Programaci´on en . . . luis Andi´on Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 241 de 347

Regresar

Pantalla completa

Cerrar

Abandonar $ sort -f nombres.txt ´Indice

Adriana G´omez Introducci´ona . . . jorge pena Instalaci´ondel . . . luis Andi´on Uso de la l´ıneade . . . Mar´ıaP´erez Programaci´on de . . . $ sort -f +1 +0 nombres.txt #Obsoleto (no usar) Manejo de ficheros . . . luis Andi´on Programaci´on en . . . Adriana G´omez jorge pena Introducci´ona Perl . . .

Mar´ıaP´erez P´aginawww $ sort -f -k 2,2 nombres.txt P´aginainicial luis Andi´on Adriana G´omez JJ II jorge pena J I Mar´ıaP´erez P´agina 242 de 347

Regresar

Pantalla completa

Cerrar

Abandonar cut Escribe partes seleccionadas de un fichero a la salida est´andar; ´Indice puede usarse para seleccionar columnas o campos de un fichero Introducci´ona . . . espec´ıfico Instalaci´ondel . . . Formato: Uso de la l´ıneade . . . cut [opciones] fichero Programaci´on de . . . Manejo de ficheros . . . Algunas opciones: Programaci´on en . . . • -b, -c, -f corta por bytes, caracteres o campos, respectiva- Introducci´ona Perl . . . mente P´aginawww

• -d fija el car´acterdelimitador entre campos (por defecto, P´aginainicial TAB) JJ II Ejemplos: J I

$ cat nombres-ord.txt P´agina 243 de 347 Luis Andi´on Regresar Adriana G´omez Jorge Pena Pantalla completa

Mar´ıaP´erez Cerrar

Abandonar $ cut -c 1-7 nombres-ord.txt ´Indice

Luis An Introducci´ona . . .

Adriana Instalaci´ondel . . .

Jorge P Uso de la l´ıneade . . . Mar´ıaP Programaci´on de . . . $ cut -c 1-5,9-10 nombres-ord.txt Manejo de ficheros . . . Luis i´o Programaci´on en . . . AdriaG´o Jorgena Introducci´ona Perl . . .

Mar´ıare P´aginawww $ cut -d '' -f 1 nombres-ord.txt P´aginainicial Luis Adriana JJ II

Jorge J I Mar´ıa P´agina 244 de 347

Regresar

Pantalla completa

Cerrar

Abandonar paste Permite unir texto de varios ficheros, uniendo las l´ıneas ´Indice

de cada uno de los ficheros Introducci´ona . . .

Formato: Instalaci´ondel . . . paste [opciones] fichero1 [fichero2] ... Uso de la l´ıneade . . . Programaci´on de . . . Algunas opciones: Manejo de ficheros . . . • -s pega los ficheros secuencialmente, en vez de intercalarlos Programaci´on en . . . Introducci´ona Perl . . . • -d especifica los car´acteresdelimitadores en la salida (por defecto, TAB) P´aginawww

Ejemplos: P´aginainicial $ cat nombres.txt JJ II Luis J I

Adriana P´agina 245 de 347 Jorge Mar´ıa Regresar $ cat apellidos.txt Pantalla completa

Andi´on Cerrar G´omez Abandonar Pena ´Indice

P´erez Introducci´ona . . . $ paste nombres.txt apellidos.txt Instalaci´ondel . . . Luis Andi´on Uso de la l´ıneade . . . Adriana G´omez Programaci´on de . . . Jorge Pena Manejo de ficheros . . . Mar´ıa P´erez $ paste -d '' nombres.txt apellidos.txt Programaci´on en . . . Luis Andi´on Introducci´ona Perl . . .

Adriana G´omez P´aginawww Jorge Pena Mar´ıaP´erez P´aginainicial $ paste -s -d '\t\n' nombres.txt JJ II Luis Adriana J I Jorge Mar´ıa P´agina 246 de 347

Regresar

Pantalla completa

Cerrar

Abandonar fmt Formatea cada p´arrafo,uniendo o separando l´ıneas para ´Indice que todas tengan el mismo tama˜no Introducci´ona . . .

Algunas opciones: Instalaci´ondel . . . • -n o -w n pone la anchura de las l´ıneasa n (por defecto, Uso de la l´ıneade . . . 75) Programaci´on de . . . Manejo de ficheros . . . • -c conserva la indentaci´ona principio de l´ıneay alinea a la Programaci´on en . . . izquierda la segunda l´ınea Introducci´ona Perl . . . • -s las l´ıneaspueden dividirse, no unirse P´aginawww

• -u uniformiza el espaciado entre palabras P´aginainicial

JJ II

J I

P´agina 247 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Ejemplo: ´Indice $ cat quijote.txt Introducci´ona . . . En un lugar de la Mancha, de cuyo nombre no Instalaci´ondel . . . quiero acordarme, no ha mucho tiempo Uso de la l´ıneade . . . que viv´ıaun Programaci´on de . . . hidalgo de los de lanza en astillero, adarga Manejo de ficheros . . . antigua, roc´ınflaco y galgo corredor. Programaci´on en . . . Introducci´ona Perl . . . $ fmt -w 45 -u quijote.txt En un lugar de la Mancha, de cuyo nombre P´aginawww no quiero acordarme, no ha mucho tiempo P´aginainicial que viv´ıaun hidalgo de los de lanza en JJ II astillero, adarga antigua, roc´ınflaco y galgo corredor. J I P´agina 248 de 347

Regresar

Pantalla completa

Cerrar

Abandonar tr Borra caracteres o reemplaza unos por otros ´Indice

Formato: Introducci´ona . . . tr [opciones] set1 set2 Instalaci´ondel . . . Uso de la l´ıneade . . .

Algunas opciones: Programaci´on de . . . • -d borra los caracteres especificados en set1 Manejo de ficheros . . . Programaci´on en . . . • reemplaza caracteres repetidos por un ´unicocar´acter -s Introducci´ona Perl . . . Ejemplos: P´aginawww

$ tr 'a-z''A-Z' < quijote.txt P´aginainicial EN UN LUGAR DE LA MANCHA, DE CUYO NOMBRE... $ tr -d '' < quijote.txt JJ II EnunlugardelaMancha,decuyonombre... J I

$ tr au pk < quijote.txt P´agina 249 de 347 En kn lkgpr de lp Mpnchp, de ckyo nombre... Regresar $ tr lcu o < quijote.txt | tr -s o En on ogar de oa Manoha, de oyo nombre Pantalla completa

Cerrar

Abandonar uniq Descarta todas (menos una) las l´ıneasid´enticas sucesivas ´Indice en el fichero Introducci´ona . . .

Formato: Instalaci´ondel . . . uniq [opciones] fichero Uso de la l´ıneade . . . Programaci´on de . . . Algunas opciones: Manejo de ficheros . . . • -d muestra las l´ıneasduplicadas (sin borrar) Programaci´on en . . . Introducci´ona Perl . . . • -u muestra s´ololas l´ıneas sin duplicaci´on P´aginawww • -i ignora may´usculas/min´usculasal comparar P´aginainicial • -c muestra el n´umerode ocurrencias de cada l´ınea JJ II • -s n no compara los n primeros caracteres J I

• -f n no compara los n primeros campos P´agina 250 de 347

• -t c usa el car´acter c como separador de campos (por de- Regresar

fecto, espacio o tabulado) Pantalla completa

Cerrar

Abandonar Ejemplo: ´Indice $ cat nombres.txt Introducci´ona . . . Julio Lorenzo Instalaci´ondel . . . Pedro Andi´on Uso de la l´ıneade . . . Celia Fern´andez Programaci´on de . . . Celia Fern´andez Manejo de ficheros . . . Juan Fern´andez Programaci´on en . . . Enrique Pena Introducci´ona Perl . . . $ uniq nombres.txt Julio Lorenzo P´aginawww Pedro Andi´on P´aginainicial Celia Fern´andez JJ II Juan Fern´andez Enrique Pena J I $ uniq -f 1 -c nombres.txt P´agina 251 de 347

1 Julio Lorenzo Regresar 1 Pedro Andi´on 3 Celia Fern´andez Pantalla completa 1 Enrique Pena Cerrar

Abandonar join Permite combinar dos ficheros usando campos: busca en ´Indice los ficheros por entradas comunes en el campo y une las l´ıneas; Introducci´ona . . . los ficheros deben estar ordenados por el campo de uni´on Instalaci´ondel . . . Formato: Uso de la l´ıneade . . .

join [opciones] fichero1 fichero2 Programaci´on de . . . Algunas opciones: Manejo de ficheros . . . Programaci´on en . . . • -i ignora may´usculas/min´usculas Introducci´ona Perl . . . • -1 FIELD une en el campo FIELD (entero positivo) de P´aginawww fichero1 P´aginainicial • -2 FIELD une en el campo FIELD de fichero2 JJ II • -j FIELD equivalente a -1 FIELD -2 FIELD J I

• -t CHAR usa el car´acter CHAR como separador de campos P´agina 252 de 347

• -o FMT formatea la salida (M.N fichero M campo N, 0 Regresar campo de uni´on) Pantalla completa

• -v N en vez de la salida normal, muestra las l´ıneasque no Cerrar se unen del fichero N Abandonar • -a N adem´asla salida normal, muestra las l´ıneasque no se ´Indice

unen del fichero N Introducci´ona . . . Ejemplo: Instalaci´ondel . . . $ cat nombres1.txt Uso de la l´ıneade . . . Luis Andi´on Programaci´on de . . . Adriana G´omez Manejo de ficheros . . . Jorge Pena Programaci´on en . . . Mar´ıaP´erez Introducci´ona Perl . . . $ cat nombres2.txt P´aginawww Pedro Andi´on Celia Fern´andez P´aginainicial

Julio Lorenzo JJ II Enrique Pena $ join -j 2 nombres1.txt nombres2.txt J I Andi´onLuis Pedro P´agina 253 de 347

Pena Jorge Enrique Regresar $ join -j 2 -o 1.1 2.1 0 nombres1.txt nombres2.txt Pantalla completa Luis Pedro Andi´on Jorge Enrique Pena Cerrar

Abandonar split Divide un fichero en ficheros m´aspeque˜nos;los ficheros ´Indice m´aspeque˜nosse nombran a partir del prefijo especificado (pre- Introducci´ona . . .

fijoaa, prefijoab,. . . ) Instalaci´ondel . . . Formato: Uso de la l´ıneade . . . split [opciones] fichero prefijo Programaci´on de . . . Manejo de ficheros . . . Si no se pone fichero, o se pone - se lee la entrada est´andar Programaci´on en . . . Algunas opciones: Introducci´ona Perl . . . • -l n pone n lineas en cada fichero de salida (por defecto P´aginawww 1000) P´aginainicial • -b n pone n bytes en cada fichero de salida JJ II • -C n pone en cada fichero de salida tantas l´ıneascompletas J I como sea posible sin sobrepasar n bytes P´agina 254 de 347 • -d usa n´umerosen vez de letras para el nombre de los Regresar ficheros de salida Pantalla completa

Cerrar

Abandonar Ejemplo: ´Indice $ split -l 2 quijote.txt quij Introducci´ona . . . $ ls quij* Instalaci´ondel . . . quijaa quijab quijac quijote.txt Uso de la l´ıneade . . . $ cat quijaa Programaci´on de . . . En un lugar de la Mancha, de cuyo nombre Manejo de ficheros . . . no quiero acordarme, no ha mucho tiempo Programaci´on en . . . $ cat quijac Introducci´ona Perl . . . galgo corredor. $ split -l 2 -d quijote.txt quij P´aginawww $ ls quij* P´aginainicial quij00 quij01 quij02 ... JJ II

J I

P´agina 255 de 347

Regresar

Pantalla completa

Cerrar

Abandonar head Muestra el principio de un fichero ´Indice

Formato: Introducci´ona . . . head [opciones] fichero Instalaci´ondel . . . Uso de la l´ıneade . . .

Algunas opciones: Programaci´on de . . . • -n N ´o -N muestra las primeras N l´ıneas Manejo de ficheros . . . Programaci´on en . . . • N muestra los primeros n bytes -c Introducci´ona Perl . . . • le a˜nadeuna l´ıneade cabecera, con el nombre del fichero -v P´aginawww

Ejemplo: P´aginainicial

$ head -n 2 -v quijote.txt JJ II ==>quijote.txt <== J I En un lugar de la Mancha, de cuyo nombre no quiero acordarme, no ha mucho tiempo P´agina 256 de 347 Regresar

Pantalla completa

Cerrar

Abandonar tail Muestra el final de un fichero ´Indice

Algunas opciones: Introducci´ona . . . • -n N ´o -N muestra las ´ultimas N l´ıneas(por defecto, 10) Instalaci´ondel . . . Uso de la l´ıneade . . .

• +N muestra de la l´ınea N al final Programaci´on de . . . • -c N muestra los ´ultimos N bytes Manejo de ficheros . . . Programaci´on en . . . • hace que corra en un lazo, a˜nadiendol´ıneasa me- -f tail Introducci´ona Perl . . . dida que el fichero crece (´utilpara cuando queremos ver como se modifica un fichero) P´aginawww • --retry ´utilcon -f; aunque el fichero no exista o sea inac- P´aginainicial cesible continua intentando hasta que puede abrirlo JJ II

• -v le a˜nade una l´ıneade cabecera, con el nombre del fichero J I

P´agina 257 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Ejemplo: ´Indice $ tail -n 2 -v quijote.txt Introducci´ona . . . ==>quijote.txt <== Instalaci´ondel . . . astillero, adarga antigua, roc´ınflaco y Uso de la l´ıneade . . . galgo corredor. Programaci´on de . . . Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 258 de 347

Regresar

Pantalla completa

Cerrar

Abandonar tac, rev tac imprime el fichero de la ´ultimaa la primera l´ınea ´Indice

(opuesto a cat); rev invierte las lineas del fichero Introducci´ona . . .

Ejemplos: Instalaci´ondel . . . $ tac quijote.txt Uso de la l´ıneade . . . galgo corredor. Programaci´on de . . . astillero, adarga antigua, roc´ınflaco y Manejo de ficheros . . . que viv´ıaun hidalgo de los de lanza en Programaci´on en . . . no quiero acordarme, no ha mucho tiempo Introducci´ona Perl . . . En un lugar de la Mancha, de cuyo nombre P´aginawww

$ rev quijote.txt P´aginainicial erbmon oyuc ed ,ahcnaM al ed ragul nu nE JJ II opmeit ohcum ah on ,emradroca oreiuq on ne aznal ed sol ed ogladih nu a´ıviveuq J I y ocalf n´ıcor,augitna agrada ,orellitsa P´agina 259 de 347

.roderroc oglag Regresar

Pantalla completa

Cerrar

Abandonar wc Muestra el n´umerode l´ıneas,palabras y bytes de un fichero ´Indice

Formato: Introducci´ona . . . wc [opciones] fichero Instalaci´ondel . . . Uso de la l´ıneade . . .

Algunas opciones: Programaci´on de . . . • -l muestra s´oloel n´umero de lineas Manejo de ficheros . . . Programaci´on en . . . • muestra s´oloel n´umero de palabras -w Introducci´ona Perl . . . • muestra s´oloel n´umero de bytes -c P´aginawww

• -L muestra la longitud de la l´ıneam´aslarga P´aginainicial

JJ II

J I

P´agina 260 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Ejemplo: ´Indice $ wc quijote.txt Introducci´ona . . . 5 33 178 quijote.txt Instalaci´ondel . . . $ wc -l quijote.txt Uso de la l´ıneade . . . 5 quijote.txt Programaci´on de . . . $ wc -w quijote.txt Manejo de ficheros . . . 33 quijote.txt Programaci´on en . . . $ wc -c quijote.txt Introducci´ona Perl . . . 178 quijote.txt P´aginawww

P´aginainicial

JJ II

J I

P´agina 261 de 347

Regresar

Pantalla completa

Cerrar

Abandonar nl A˜naden´umerosde l´ınea; nl considera los ficheros separados ´Indice en p´aginasl´ogicas, cada una de ellas con una cabecera, cuerpo y Introducci´ona . . . pie, cada una de estas secciones se numera de forma independi- Instalaci´ondel . . . ente, y la numeraci´onse reinicia para cada p´agina;los comienzos Uso de la l´ıneade . . . de cabecera, cuerpo y pie de cada p´aginase marcan, respectiva- Programaci´on de . . . mente, con \:\:\:, \:\: y \: Manejo de ficheros . . . Formato: Programaci´on en . . .

nl [opciones] fichero Introducci´ona Perl . . . Algunas opciones: P´aginawww • -b, -h o -f ESTILO indica el estilo de numeraci´onpara P´aginainicial cuerpo, cabecera o pie, que puede ser: JJ II ? a: numera todas las l´ıneas J I ? t: numerar s´ololas l´ıneasno vac´ıas(por defecto para el cuerpo) P´agina 262 de 347 ? p REGEXP: numera s´ololas l´ıneasque concuerdan con Regresar

REGEXP Pantalla completa

? n: no numera ninguna l´ınea(por defecto para cabecera Cerrar y pie) Abandonar • -v n inicia la numeraci´onen n (por defecto, 1) ´Indice • -i n incrementa los n´umerospor n (por defecto, 1) Introducci´ona . . . Instalaci´ondel . . .

• -p no reinicia la numeraci´onal principio de cada p´agina Uso de la l´ıneade . . . • -s STRING una STRING para separar los n´umerosde l´ınea Programaci´on de . . . del texto (por defecto '') Manejo de ficheros . . . Programaci´on en . . . Ejemplo: Introducci´ona Perl . . . $ ' ' nl -s q quijote.txt P´aginawww 1q En un lugar de la Mancha, de cuyo nombre 2q no quiero acordarme, no ha mucho tiempo P´aginainicial 3q que viv´ıaun hidalgo de los de lanza en JJ II 4q astillero, adarga antigua, roc´ınflaco y J I 5q galgo corredor. P´agina 263 de 347

Regresar

Pantalla completa

Cerrar

Abandonar expand Convierte TABs en espacios; ´utildebido a que la repre- ´Indice sentaci´ondel TAB puede ser diferente en distintos sistemas Introducci´ona . . .

Formato: Instalaci´ondel . . . expand [opciones] fichero ... Uso de la l´ıneade . . . Programaci´on de . . . Algunas opciones: Manejo de ficheros . . . • -t n reemplaza cada TAB por n espacios (por defecto, 8) Programaci´on en . . . Introducci´ona Perl . . . • -i solo reemplaza los TABs de principio de l´ınea P´aginawww

P´aginainicial

JJ II

J I

P´agina 264 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Ejemplos: ´Indice $ cat hola.c Introducci´ona . . . main() { Instalaci´ondel . . . for(i=0; i<10;i++) Uso de la l´ıneade . . . printf("Hola mundo!\n"); Programaci´on de . . . } Manejo de ficheros . . . $ expand -t 2 hola.c Programaci´on en . . . main() { Introducci´ona Perl . . . for(i=0; i<10;i++) printf("Hola mundo!\n"); P´aginawww } P´aginainicial

JJ II

El comando unexpand hace la operaci´oncontraria J I

P´agina 265 de 347

Regresar

Pantalla completa

Cerrar

Abandonar od Muestra un fichero en octal, hexadecimal o otros formatos; ´Indice en cada l´ıneamuestra (en la primera columna) el offset Introducci´ona . . .

Formato: Instalaci´ondel . . . od [opciones] fichero Uso de la l´ıneade . . . Programaci´on de . . . Algunas opciones: Manejo de ficheros . . . • -t TIPO especifica el formato de la salida (por defecto oc- Programaci´on en . . . tal): o para octal, x para hexadecimal, d para decimal, c Introducci´ona Perl . . . para caracteres ASCII, a para caracteres con nombre... P´aginawww

• -A TIPO especifica el formato del offset (por defecto octal): P´aginainicial o, x, d como antes, n para que no aparezca JJ II • -w BYTES n´umerode bytes por linea (por defecto 16) J I

P´agina 266 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Ejemplo: ´Indice $ od -t x -A x quijote.txt Introducci´ona . . . 000000 75206e45 756c206e 20726167 6c206564 Instalaci´ondel . . . 000010 614d2061 6168636e 6564202c 79756320 Uso de la l´ıneade . . . 000020 6f6e206f 6572626d 206f6e0a 65697571 Programaci´on de ...... Manejo de ficheros . . . Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 267 de 347

Regresar

Pantalla completa

Cerrar

Abandonar awk ´Indice Lenguaje dise˜nadopara procesar datos basados en texto; el nom- Introducci´ona . . . bre AWK deriva de los apellidos de los autores: Alfred V. Aho, Instalaci´ondel . . . Peter J. Weinberger, y Brian W. Kernighan Uso de la l´ıneade . . . Programaci´on de . . . • los administradores de sistemas utilizan awk para procesar Manejo de ficheros . . . los ficheros de configuraci´ony logs de los sistemas Programaci´on en . . . • estos ficheros, normalmente, se organizan en forma de tabla Introducci´ona Perl . . . (l´ıneascompuestas por campos) P´aginawww

? awk es ideal para tratar esos ficheros P´aginainicial

• s´oloveremos algunos de los aspectos m´asimportantes del JJ II uso de awk para el manejo de ficheros de texto J I

P´agina 268 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Funcionamiento b´asico awk lee el fichero que se le pase como en- ´Indice trada (o la entrada est´andar) l´ıneaa l´ınea, y sobre cada l´ınea Introducci´ona . . . ejecuta una serie de operaciones Instalaci´ondel . . .

Uso de la l´ıneade . . . Ejemplo: Programaci´on de . . . # echo -e interpreta "\n" como un retorno de carro, Manejo de ficheros . . . # lo que env´ıa2 l´ıneasal comando awk Programaci´on en . . . $ echo -e "\n" | awk '{ print "Hola mundo!" }' Introducci´ona Perl . . . Hola mundo! Hola mundo! P´aginawww P´aginainicial

JJ II

J I

P´agina 269 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Formas de ejecutar awk Podemos usar awk de varias formas: ´Indice • En la l´ıneade comandos: Introducci´ona . . . Instalaci´ondel . . .

awk PROGRAMA fichero entrada Uso de la l´ıneade . . . • Escribiendo el programa en un fichero: Programaci´on de . . . Manejo de ficheros . . .

awk -f FICHERO PROGRAMA fichero entrada Programaci´on en . . . • Ejecutando el FICHERO PROGRAMA como un script: Introducci´ona Perl . . .

poner P´aginawww #!/usr/bin/awk -f P´aginainicial

al principio de FICHERO PROGRAMA JJ II

J I

P´agina 270 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Ejemplos: ´Indice $ echo '{ print "Hola mundo!" }' > hola.awk Introducci´ona . . . $ echo -e "\n" | awk -f hola.awk Instalaci´ondel . . . Hola mundo! Uso de la l´ıneade . . . Hola mundo! Programaci´on de . . . $ echo '#!/usr/bin/awk -f' > hola.awk Manejo de ficheros . . . $ echo '{ print "Hola mundo!" }'>> hola.awk Programaci´on en . . . $ chmod +x hola.awk Introducci´ona Perl . . . $ echo -e "\n" | ./hola.awk Hola mundo! P´aginawww Hola mundo! P´aginainicial

JJ II

J I

P´agina 271 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Estructura de un programa awk Un programa awk tiene tres sec- ´Indice ciones: Introducci´ona . . . 1. Parte inicial, que se ejecuta s´olouna vez, antes de empezar Instalaci´ondel . . . a procesar la entrada: Uso de la l´ıneade . . . Programaci´on de . . . { } BEGIN operaciones Manejo de ficheros . . . 2. Parte central, con instrucciones que se ejecutan para cada Programaci´on en . . . una de las l´ıneasde la entrada; tienen en siguiente formato: Introducci´ona Perl . . .

/PATRON´ / { operaciones } P´aginawww las operaciones se realizan s´olosobre las l´ıneasque veri- P´aginainicial fiquen la REGEXP indicada en PATRON´ JJ II

• si ponemos !/PATRON´ / las operaciones se ejecutan en J I

las l´ıneasque no concuerden con el patr´on P´agina 272 de 347

3. Parte final, se efect´uas´olouna vez, despu´esde procesar la Regresar

entrada: Pantalla completa

END { operaciones } Cerrar

Abandonar Manejo de ficheros de texto awk divide las l´ıneasde la entrada ´Indice en campos: Introducci´ona . . . • la separaci´onentre campos la determina la variable FS (por Instalaci´ondel . . . defecto, uno a m´asblancos o TABs Uso de la l´ıneade . . . Programaci´on de . . . • las variables $1, $2, . . . , $N contienen los valores de los Manejo de ficheros . . . distintos campos Programaci´on en . . . ? $0 contiene la l´ıneacompleta Introducci´ona Perl . . .

Ejemplos: P´aginawww $ ls -ldh * |\ P´aginainicial > awk '{print "Fichero ", $8, "ocupa ", $5, "bytes"}' JJ II Fichero proba ocupa 36 bytes J I Fichero uy hist1 nodos.txt ocupa 9,1K bytes Fichero vimbook-OPL.pdf ocupa 3,7M bytes P´agina 273 de 347

Regresar

Pantalla completa

Cerrar

Abandonar $ df -h | sort -rnk 5,5 |\ ´Indice ' > awk BEGIN { print "Nivel de ocupaci´on" }\ Introducci´ona . . . $ $ > /^\/dev\/hd/ {print "Partici´on", 6,": ", 5}\ Instalaci´ondel . . . > { }' END print "Terminado" Uso de la l´ıneade . . . Nivel de ocupaci´on Programaci´on de . . . Partici´on/home : 87% ocupaci´on Manejo de ficheros . . . Partici´on/mnt/hda2 : 51% ocupaci´on Programaci´on en . . . Partici´on/ : 38% ocupaci´on Terminado Introducci´ona Perl . . .

P´aginawww $ # Usando un fichero $ cat ocupacion.awk P´aginainicial

BEGIN { JJ II print "Nivel de ocupaci´on" } J I /^\/dev\/hd/ { P´agina 274 de 347

print "Partici´on",$6,": ", $5 Regresar } Pantalla completa END { print "Terminado" } $ df -h | sort -rnk 5,5 | awk -f ocupacion.awk Cerrar

Abandonar Variables predefinidas: awk tiene un conjunto de variables ´Indice predefinidas, como FS que nos permite especificar el separador Introducci´ona . . . de campos Instalaci´ondel . . .

Uso de la l´ıneade . . . Esas variables son: Programaci´on de . . .

Manejo de ficheros . . .

Nombre Significado Programaci´on en . . .

FS Car´acterseparador entre campos de entrada (por de- Introducci´ona Perl . . . fecto, blanco o tabulado) NR N´umerode registros de entrada P´aginawww

NF N´umerode campos en el registro de entrada P´aginainicial RS Car´acterseparador entre registros de entrada (por defecto, nueva l´ınea) JJ II OFS Car´acterseparador entre campos en la salida (por J I

defecto, un espacio en blanco) P´agina 275 de 347 ORS Car´acterseparador entre registros de salida (por de- Regresar fecto, nueva l´ınea) FILENAME Nombre del fichero abierto Pantalla completa

Cerrar

Abandonar Ejemplo: ´Indice $ cat usuarios.awk Introducci´ona . . . BEGIN { Instalaci´ondel . . . FS = ":"; OFS = " -->"; ORS = "\n======\n"; Uso de la l´ıneade . . . } Programaci´on de . . . { Manejo de ficheros . . . print NR, $1, $5 Programaci´on en . . . } Introducci´ona Perl . . . $ awk -f usuarios.awk /etc/passwd ... P´aginawww 37 -->tomas -->Tom´asFern´andezPena,,, P´aginainicial ======JJ II 38 -->caba -->Jos´eCarlos Cabaleiro Dom´ınguez,,, ======J I ... P´agina 276 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Otras caracter´ısticas awk es un lenguaje completo: ´Indice • permite definir variables de usuario Introducci´ona . . . Instalaci´ondel . . .

• permite realizar operaciones aritm´eticassobre las variables Uso de la l´ıneade . . . • permite utilizar condiciones, lazos, etc. Programaci´on de . . . Manejo de ficheros . . .

• permite definir funciones Programaci´on en . . . La sintaxis de awk es pr´acticamente id´entica a la del lenguaje C Introducci´ona Perl . . .

• podemos usar printf en lugar de print (con la sintaxis de P´aginawww

C) P´aginainicial

• tambi´enpodemos usar arrays JJ II

J I

P´agina 277 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Ejemplos: ´Indice 1. Lista el tama˜node los ficheros y el tama˜nototal Introducci´ona . . . Instalaci´ondel . . . $ cat lista-ficheros.awk Uso de la l´ıneade . . .

BEGIN { total = 0; } Programaci´on de . . . { Manejo de ficheros . . . total += $5; Programaci´on en . . . printf("Fichero %s ocupa %d bytes\n", $8,$5); Introducci´ona Perl . . . } END { P´aginawww \ printf("Ocupaci´ontotal = %d bytes n", total); P´aginainicial } $ ls -ld * | awk -f lista-ficheros.awk JJ II Fichero ancestros.awk ocupa 370 bytes J I

Fichero hola.c ocupa 66 bytes P´agina 278 de 347 Fichero lista-ficheros.awk ocupa 143 bytes Ocupaci´ontotal = 579 bytes Regresar

Pantalla completa

Cerrar

Abandonar 2. Muestra una advertencia si el nivel de ocupaci´onde una ´Indice

partici´onsupera un l´ımite Introducci´ona . . . $ cat ocupacion2.awk Instalaci´ondel . . . BEGIN { limite = 85; } Uso de la l´ıneade . . . /^\/dev\/hd/ { Programaci´on de . . . if($5 > limite) Manejo de ficheros . . . printf("PELIGRO: el nivel de ocupaci´on Programaci´on en . . . de %s es %s\n%", $6, $5); Introducci´ona Perl . . . } $ df -ah | tr -d '%' | awk -f ocupacion2.awk P´aginawww PELIGRO: el nivel de ocupaci´onde /home es 87% P´aginainicial

JJ II

J I

P´agina 279 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Paso de par´ametros: es posible pasar par´ametrosen la lla- ´Indice mada a awk Introducci´ona . . .

Ejemplo: Indicando el PID de un proceso obtiene el PID de todos Instalaci´ondel . . . sus ancestros (padres, abuelos, . . . ) Uso de la l´ıneade . . . $ cat ancestros.awk Programaci´on de . . . BEGIN { ind=0; } Manejo de ficheros . . . function padre(p) { Programaci´on en . . . for(i=0; i ", proc); proc = padre(proc); J I } while(proc >= 1); P´agina 280 de 347

printf("\n\n"); Regresar } $ ps axl | awk -f ancestros.awk proc=4258 Pantalla completa 4258 --> 3326 --> 1 --> Cerrar

Abandonar Arrays asociativos: awk permite el uso de arrays asociativos, ´Indice es decir, que pueden tener como ´ındice una cadena de caracteres Introducci´ona . . .

Ejemplo Instalaci´ondel . . . $ cat usuarios2.awk Uso de la l´ıneade . . . BEGIN { FS = ":" } Programaci´on de . . . { nombre[$1] = $5; } Manejo de ficheros . . . END { Programaci´on en . . . for(;;){ Introducci´ona Perl . . . printf("Nombre de usuario: "); getline user < "-"; P´aginawww if( user == "" ) P´aginainicial break; JJ II printf("<%s>: %s\n", user, nombre[user]); } J I } P´agina 281 de 347 $ awk -f usuarios2.awk /etc/passwd Regresar Nombre de usuario: tomas : Tom´as Fern´andezPena,,, Pantalla completa Nombre de usuario: Cerrar

Abandonar Funciones predefinidas En awk existen una serie de funciones ´Indice predefinidas Introducci´ona . . . • getline: lee la siguiente l´ıneade la entrada, pudiendo asig- Instalaci´ondel . . . narla a una variable Uso de la l´ıneade . . . Programaci´on de . . . ? variable < fichero getline Manejo de ficheros . . . lee una l´ıneade fichero y la mete en variable Programaci´on en . . .

? getline variable < "-" Introducci´ona Perl . . . lee una l´ıneade la entrada est´andary la mete en variable P´aginawww ? "comando" | getline coge la salida de comando y la pone en la variable $0, P´aginainicial $ $ descomponi´endolaen campos ( 1, 2, . . . ) JJ II

Ejemplo: J I $ awk 'BEGIN{ "date" | getline; print $4 }' P´agina 282 de 347 15:16:59 Regresar

Pantalla completa

Cerrar

Abandonar • system: ejecuta un comando del sistema operativo; en caso ´Indice

de ´exitoretorna 0, y en caso de error retornar´aun valor Introducci´ona . . .

distinto de cero Instalaci´ondel . . . Ejemplo: Uso de la l´ıneade . . . $ awk 'BEGIN {\ Programaci´on de . . . > if (system("ls")!=0)\ Manejo de ficheros . . . > printf ("Error de ejecuci´on"); }' Programaci´on en . . . Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 283 de 347

Regresar

Pantalla completa

Cerrar

Abandonar 6. Programaci´onen Python ´Indice

Introducci´ona . . . Adem´asde la programaci´oncon bash, sed y awk, existen otros Instalaci´ondel . . . lenguajes adecuados para la creaci´onde scripts de administraci´on Uso de la l´ıneade . . .

Perl: lenguaje de prop´ositogeneral originalmente desarrollado Programaci´on de . . .

para la manipulaci´onde textos Manejo de ficheros . . . Python: alternativa a Perl, m´aslimpio y elegante Programaci´on en . . . Introducci´ona Perl . . . Ruby: combina una sintaxis inspirada en Python y Perl con caracter´ısticasde programaci´onorientada a objetos P´aginawww

P´aginainicial Los tres son lenguajes de prop´ositogeneral JJ II • Permiten programar aplicaciones de muy diversos tipos J I • Veremos solo una introducci´ona sus principales caracter´ısticas, P´agina 284 de 347 centr´andonosprincipalmente en Python Regresar Un buen administrador de sistemas deber´ıadominar al menos Pantalla completa uno de ellos Cerrar

Abandonar Introducci´ona Python ´Indice Bash es complejo y el c´odigoPerl puede resultar demasiado “ofus- Introducci´ona . . . cado” Instalaci´ondel . . . Uso de la l´ıneade . . .

• Python es una buena alternativa a los lenguajes de script Programaci´on de . . . tradicionales Manejo de ficheros . . . Principales caracter´ısticas Programaci´on en . . . Introducci´ona Perl . . . • Soporte de diversos paradigmas: imperativo, orientado a objetos y funcional P´aginawww • Sistema de tipos din´amico y gesti´onautom´aticade memoria P´aginainicial • Enfasis´ en la legibilidad JJ II J I • Uso de identaci´onpara delimitar bloques de c´odigo P´agina 285 de 347 • Gran librer´ıacon m´odulos para m´ultiples tareas Regresar

Pantalla completa

Cerrar

Abandonar Ejemplo sencillo: ´Indice #!/usr/bin/env python Introducci´ona . . . # coding: utf-8 Instalaci´ondel . . . # Abre el fichero s´ololectura Uso de la l´ıneade . . . try: Programaci´on de . . . f = open("/etc/passwd","r") Manejo de ficheros . . . except IOError: Programaci´on en . . . print "No puedo abrir /etc/passwd" Introducci´ona Perl . . . else: # Lee las l´ıneasen una lista P´aginawww lista = f.readlines() P´aginainicial # Recorre e imprime la lista JJ II for l in lista: print l, # La coma elimina \n J I f.close() P´agina 286 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Tipos de datos en Python ´Indice Adem´asde los tipos “est´andar”Python proporciona: Introducci´ona . . . Instalaci´ondel . . . 1. Listas: mutables, pueden contener tipos mezclados Uso de la l´ıneade . . .

frutas=["naranjas", "uvas", 123, "limones", "uvas"] Programaci´on de . . .

frutas.append("peras") Manejo de ficheros . . .

frutas.remove(123) Programaci´on en . . .

frutas.remove("uvas") # [naranjas,limones,uvas,peras] Introducci´ona Perl . . . frutas[2:2] = ["fresas", "pomelos"] # inserta en pos 2 print frutas # naranjas,limones,fresas,pomelos,uvas,perasP´aginawww

print len(frutas) # 6 P´aginainicial print frutas[0:3] # naranjas, limones, fresas print frutas[-3] # pomelos JJ II print frutas[1:-3] # limones, fresas J I

frutas.pop() # Elimina el ´ultimoelemento P´agina 287 de 347 del frutas[2:4] # Elimina los elementos 2 y 3 frutas.sort() # Ordena Regresar print frutas # [limones,naranjas,uvas] Pantalla completa

a=list("hola") # a=["h","o","l","a"] Cerrar "o" in a # True Abandonar Las listas pueden enlazarse ´Indice a = [[0,1],[2,3]] Introducci´ona . . . print a[1][1] # 3 Instalaci´ondel . . . a.append([4,5]) Uso de la l´ıneade . . . print a[2][0] # 4 Programaci´on de . . . del a[1] Manejo de ficheros . . . print a # [0,1], [4,5] Programaci´on en . . . Introducci´ona Perl . . . range: funci´on built-in que genera listas de valores en se- cuencia: P´aginawww l = range(5) # l = [0, 1, 2, 3, 4] P´aginainicial l = range(2, 5) # l = [2, 3, 4] JJ II l = range(2, 10, 3) # l = [2, 5, 8] l = range(5, -5, -2) # l = [5, 3, 1, -1, -3] J I a = sum(range(1,4)) # a = 6 P´agina 288 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Las listas son objetos mutables (string, enteros, etc. no) ´Indice a = 1 # nuevo objeto entero (1) al que a referencia Introducci´ona . . . b = a # a y b referencias al mismo objeto entero (1)Instalaci´ondel . . . a += 5 # se crea un nuevo objeto 6 (1+5) Uso de la l´ıneade . . . print b # 1, b sigue referenciando al objeto 1 Programaci´on de . . . a = [1, 2] # nuevo objeto lista Manejo de ficheros . . . b = a # a y b referencias al mismo objeto lista Programaci´on en . . . a[0] += 5 # se modifica el objeto (mutable) Introducci´ona Perl . . . print b # [6, 2] b es modificado P´aginawww Copia de listas P´aginainicial a = [1, 2] # nuevo objeto lista JJ II b = a[:] # a y b referencias objetos diferentes a[0] += 5 # se modifica el objeto (mutable) J I print b # [1, 2] b no se modificado P´agina 289 de 347 c=list(a) # otra forma Regresar

Pantalla completa

Cerrar

Abandonar 2. Tuplas: listas inmutables ´Indice y=("enero","febrero","marzo","abril", "mayo", "junio",\ Introducci´ona . . . "julio","agosto","septiembre","octubre","noviembre",\ Instalaci´ondel . . . "diciembre") # Par´entesisopcionales Uso de la l´ıneade . . . print y[3] # Abril Programaci´on de . . . Manejo de ficheros . . . 3. Conjuntos (Sets): sin elementos duplicados Programaci´on en . . . cesta=["naranjas", "uvas", "limones", "uvas"] Introducci´ona Perl . . . frutas=set(cesta) P´aginawww print frutas # naranjas,uvas,limones a = set("abracadabra") P´aginainicial

b = set("alacazam") JJ II print a # "a", "r", "b", "c", "d" print a-b # "r", "b", "d" J I print a | b # "a", "c", "b", "d", "m", "l", "r", "z" P´agina 290 de 347

print a & b # "a", "c" Regresar print a ^ b # "b", "d", "m", "l", "r", "z" Pantalla completa

Cerrar

Abandonar 4. Diccionarios ´Indice edad_de = {"Eva":23, "Ana":19, "Oscar":41} Introducci´ona . . . print edad_de["Ana"] # Imprime 19 Instalaci´ondel . . . edad_de["Eva"] = 18 # Cambia un valor Uso de la l´ıneade . . . edad_de["Juan"] = 26 # A~nadeun elemento Programaci´on de . . . del edad_de["Oscar"] # Borra un elemento Manejo de ficheros . . . edad_de.keys() # ["Eva", "Juan", "Ana"] Programaci´on en . . . edad_de.values() # [18, 26, 19] Introducci´ona Perl . . . for key,value in edad_de.items(): print key,"->",value P´aginawww dict([("a",1),("b",2),("c",3)]) # {"a":1, "c":3, "b":2} P´aginainicial dict(a=1, b=2, c=3) # {"a":1, "c":3, "b":2} JJ II

J I

P´agina 291 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Compresi´onde listas ´Indice x = [1, 2, 3, 4, 5, 6, 7, 8] Introducci´ona . . . xx = [n ** 2 for n in x if n > 4] # xx=[25, 36, 49, 64] Instalaci´ondel . . . Uso de la l´ıneade . . . l = [0, 1, 2, 3] Programaci´on de . . . m = ["a", "b"] Manejo de ficheros . . . n = [s*v for s in m Programaci´on en . . . for v in l Introducci´ona Perl . . . if v > 0] # n = ["a", "aa", "aaa", "b", "bb", "bbb"] P´aginawww dict([(x, x**2) for x in (2, 4, 6)]) # {2:4, 4:16, 6:36} P´aginainicial

JJ II

J I

P´agina 292 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Control de flujo ´Indice Lazos Introducci´ona . . . Instalaci´ondel . . . frutas=["naranjas", "uvas"] Uso de la l´ıneade . . . for f in frutas: print f, len(f) # naranjas, 8; uvas, 4 Programaci´on de . . . Manejo de ficheros . . . for i in range(len(frutas)): Programaci´on en . . . print i, frutas[i] # 0, naranjas; 1, uvas Introducci´ona Perl . . .

P´aginawww nf = raw_input("A~nadeotra fruta: ") while nf: # Si la entrada no est´avac´ıa P´aginainicial frutas.append(nf) # a~n´adelaa la lista JJ II nf = raw_input("A~nadeotra fruta: ") J I

P´agina 293 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Condicionales ´Indice x = int(raw_input("Introduce un entero: ")) Introducci´ona . . . if x < 0: Instalaci´ondel . . . x = 0 Uso de la l´ıneade . . . print "Negativo cambiado a 0" Programaci´on de . . . elif x == 0: Manejo de ficheros . . . print "Cero" Programaci´on en . . . else: Introducci´ona Perl . . . print "Positivo" P´aginawww

P´aginainicial

JJ II

J I

P´agina 294 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Funciones ´Indice def compra(fr, nf="manzanas"): Introducci´ona . . . fr.append(nf) Instalaci´ondel . . . Uso de la l´ıneade . . . frutas=[] # Tambi´enfrutas=list() Programaci´on de . . . compra(frutas, "peras") Manejo de ficheros . . . compra(frutas) Programaci´on en . . . compra(nf="limones", fr=frutas) Introducci´ona Perl . . . print frutas # peras, manzanas, limones P´aginawww

P´aginainicial

JJ II

J I

P´agina 295 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Funciones con argumentos arbitrarios ´Indice def fun(*args, **kwargs): Introducci´ona . . . for arg in args: print arg Instalaci´ondel . . . for kw in kwargs.keys(): print kw, ":", kwargs[kw] Uso de la l´ıneade . . . fun("peras", 1, manzanas=2, limones=3) Programaci´on de . . . Manejo de ficheros . . . Salida: Programaci´on en . . . peras Introducci´ona Perl . . . 1 P´aginawww limones : 3 manzanas : 2 P´aginainicial

JJ II

J I

P´agina 296 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Orientaci´ona objetos ´Indice class fruteria(object): Introducci´ona . . .

"""Ejemplo simple de clase""" Instalaci´ondel . . . def __init__(self, f): self.stock = list() Uso de la l´ıneade . . . self.stock.append(f) Programaci´on de . . . def compra(self, f): Manejo de ficheros . . . self.stock.append(f) def vende(self, f): Programaci´on en . . .

if f in self.stock: Introducci´ona Perl . . . self.stock.remove(f)

else: P´aginawww print f, "no disponible" P´aginainicial def main(): mi_fruteria = fruteria("pera") JJ II mi_fruteria.compra("manzana") print mi_fruteria.stock # ["pera", "manzana"] J I mi_fruteria.vende("pera") P´agina 297 de 347 mi_fruteria.vende("platano") # platano no disponible

print mi_fruteria.stock # ["manzana"] Regresar mi_fruteria.vende("pera") # pera no disponible print mi_fruteria.__doc__ # Ejemplo simple de clase Pantalla completa if __name__ == "__main__": main() Cerrar

Abandonar Herencia m´ultiple ´Indice Se permite herencia m´ultiple: Introducci´ona . . . Instalaci´ondel . . .

class fruteria(object): Uso de la l´ıneade . . .

def que_vendo(self): Programaci´on de . . . print "Vendo frutas" Manejo de ficheros . . .

Programaci´on en . . . class carniceria(object): Introducci´ona Perl . . . def que_vendo(self):

print "Vendo carne" P´aginawww

P´aginainicial # Herencia m´ultiple class tienda(carniceria, fruteria): JJ II

pass J I

P´agina 298 de 347 # La clase carniceria est´am´asa la # izquierda en la deficici´onde tienda Regresar

tienda().que_vendo() # Vendo carne Pantalla completa

Cerrar

Abandonar M´etodos y atributos privados ´Indice Los m´etodos o atributos privados se definen con dos guiones bajos Introducci´ona . . . antes del nombre (y no pueden terminar en dos guiones bajos) Instalaci´ondel . . . Uso de la l´ıneade . . .

class Ejemplo(object): Programaci´on de . . . def publico(self): Manejo de ficheros . . . print "Uno" Programaci´on en . . . self.__privado() Introducci´ona Perl . . .

def __privado(self): P´aginawww print "Dos" P´aginainicial ej = Ejemplo() JJ II ej.publico() # Imprime Uno Dos J I ej.__privado() # Da un error P´agina 299 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Procesamiento de textos ´Indice

Muchos m´etodos de interes para manejar cadenas de texto Introducci´ona . . .

# Elimina caracteres y separa por espacios Instalaci´ondel . . . l = "Hola que tal!".strip("!").split() # l=["Hola", "que", "tal"] Uso de la l´ıneade . . . # Une utilizando un caracter Programaci´on de . . . s = ",".join(l) # s="Hola,que,tal" #Cuenta el n´umerode ocurrencias de un caracter Manejo de ficheros . . . c = s.count(",") # c=2 Programaci´on en . . . # Reemplaza un caracter por otro ss = s.replace(",", "\t") # ss="Hola que tal" Introducci´ona Perl . . . # Separa por otro tipo de caracter, e invierte la lista l=ss.split("\t") P´aginawww l.reverse() # l=["tal", "que", "Hola"] P´aginainicial # Localiza una subcadena en el string c=ss.find("tal") # c=9 JJ II c=ss.find("tall") # c=-1 (no encuentra la subcadena) # Separa por l´ıneas J I ml = """Esto es un texto con P´agina 300 de 347 varias lineas""" Regresar l = ml.splitlines() # l=["Esto es", "un texto con", "varias lineas"]

Pantalla completa

Cerrar

Abandonar Expresiones regulares ´Indice import sys, re # M´odulopara REGEXPR Introducci´ona . . .

# Comprueba direcciones de e-mail Instalaci´ondel . . . s=raw_input("Introduce un e-mail: ") if re.match("\w+@\w+\.\w+((\.\w+)*)?", s): Uso de la l´ıneade . . . print "Direcci´oncorrecta" Programaci´on de . . .

Manejo de ficheros . . . # Busca URLs en un fichero de texto try: Programaci´on en . . .

f = open("fich.txt","r") Introducci´ona Perl . . . except IOError:

print "No puedo abrir" P´aginawww sys.exit(1) for l in f: P´aginainicial # Busca todas las URLs en la l´ıneaactual # y gu´ardalas(sin http) en la lista h JJ II h = re.findall("http://([^\s]+)", l) if h: # Si la lista no est´avac´ıa J I for w in h: # recorrela e imprime las URLs P´agina 301 de 347 print w

Regresar # Separa un string en una lista s = "Uno:Dos.Tres-Cuatro" Pantalla completa l = re.split("[:.-]", s) Cerrar

Abandonar Otros aspectos ´Indice • Funciones an´onimas(lambda): permiten definir una funci´on Introducci´ona . . . de una instrucci´onen una l´ıneade c´odigo Instalaci´ondel . . . Uso de la l´ıneade . . .

neto = lambda bruto, iva=21: bruto + (bruto*iva/100) Programaci´on de . . . print neto(100) # 121 Manejo de ficheros . . .

Programaci´on en . . . def suma (n): Introducci´ona Perl . . . return lambda x: x + n

f=suma(2) P´aginawww g=suma(8) P´aginainicial print f(10), g(10) # 12, 18 print suma(5)(11) # 16 JJ II

J I

P´agina 302 de 347

Regresar

Pantalla completa

Cerrar

Abandonar • M´etodos map, filter y reduce ´Indice foo = [2, 18, 9, 22, 17, 24, 8, 12, 27] Introducci´ona . . . print filter(lambda x: x % 3 == 0, foo) Instalaci´ondel . . . # [18, 9, 24, 12, 27] Uso de la l´ıneade . . . print map(lambda x: x * 2 + 10, foo) Programaci´on de . . . # [14, 46, 28, 54, 44, 58, 26, 34, 64] Manejo de ficheros . . . print reduce(lambda x, y: x + y, foo) Programaci´on en . . . # 139 Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 303 de 347

Regresar

Pantalla completa

Cerrar

Abandonar • Decoradores: permiten cambiar el comportamiento din´amico ´Indice

de una funci´on Introducci´ona . . . def check(f): Instalaci´ondel . . . def wrapper(*args, **kwargs): Uso de la l´ıneade . . . if 0 in args: Programaci´on de . . . return None Manejo de ficheros . . . else: Programaci´on en . . . return f(*args, **kwargs) Introducci´ona Perl . . . return wrapper P´aginawww

@check P´aginainicial def inv(*args): JJ II return [1.0/x for x in args] J I

print(inv(1,2,3)) P´agina 304 de 347

print(inv(1,0,3)) # None Regresar

Pantalla completa

Cerrar

Abandonar • Iteradores ´Indice # Iterador impl´ıcitoen el for Introducci´ona . . . for i in "papanatas": Instalaci´ondel . . . print i, # p a p a n a t a s Uso de la l´ıneade . . . Programaci´on de . . . # Iterador expl´ıcito Manejo de ficheros . . . it = iter("papanatas") Programaci´on en . . . it.next() # p Introducci´ona Perl . . . it.next() # a it.next() # p P´aginawww it.next() # a P´aginainicial it.next() # n JJ II it.next() # a it.next() # t J I it.next() # a P´agina 305 de 347

it.next() # s Regresar it.next() # Error Pantalla completa

Cerrar

Abandonar • Generadores ´Indice a = xrange(1000000) # a no es una lista Introducci´ona . . . b = (n for n in a if n%2==0) # b no es una lista Instalaci´ondel . . . print b # at 0xb77c939c> Uso de la l´ıneade . . . for i in b: print i, # 2 4 6 8 10 ... Programaci´on de . . . Manejo de ficheros . . . def generador(): Programaci´on en . . . i = 0 Introducci´ona Perl . . . while True: # un iterador infinito yield i # devuelve i en este punto P´aginawww i = i + 1 P´aginainicial mi_gen = generador() # creamos el generador JJ II mi_gen.next() # 0 mi_gen.next() # 1 J I mi_gen.next() # 2 P´agina 306 de 347

Regresar

Pantalla completa

Cerrar

Abandonar • M´etodos especiales: ´Indice

class miclase: Introducci´ona . . .

def __init__(self, n1, n2): Instalaci´ondel . . .

self.n1 = n1 Uso de la l´ıneade . . .

self.n2 = n2 Programaci´on de . . . # Representaci´ondel objeto como string Manejo de ficheros . . . def __str__(self): Programaci´on en . . . return "Soy un miclase con: n1=" Introducci´ona Perl . . . +str(self.n1)+", n2="+str(self.n2) # Permite asignar nuevos atributos P´aginawww def __setattr__(self, name, val): P´aginainicial self.__dict__[name] = val # Se llama con atributos no conocidos JJ II

def __getattr__(self, name): J I return "No se lo que es "+name P´agina 307 de 347 o = miclase(2, 5) print o # Soy un miclase con: n1=2, n2=5 Regresar o.n3 = 5 Pantalla completa print o.n3 # Imprime "5" Cerrar print o.n4 # Imprime "No se lo que es n4" Abandonar Subprocesos ´Indice El m´odulo subprocess permite lanzar subprocesos, por ejemplo, Introducci´ona . . . comandos del SO Instalaci´ondel . . . Uso de la l´ıneade . . . import subprocess Programaci´on de . . . # Ejecuta el comando df -h (sintaxis de l´ıneade comandos) Manejo de ficheros . . . subprocess.call("df -h", shell=True) Programaci´on en . . . # Ejecuta ls /usr/ppp, redireccionando la salida est´andar Introducci´ona Perl . . . # y de error. El c´odigode salida a ret ret=subprocess.call(["ls", "/usr/ppp"], P´aginawww stdout=open("/dev/null","w"), P´aginainicial stderr=subprocess.STDOUT) # Ejecuta df -h; la salida est´andarva al objeto p JJ II p=subprocess.Popen(["df", "-h"], stdout=subprocess.PIPE) J I # Lee e imprime las l´ıneasde la salida de df -h P´agina 308 de 347 out = p.stdout.readlines() for line in out: Regresar

print line, Pantalla completa

Cerrar

Abandonar Otros m´odulosde inter´es ´Indice os Uso de funcionalidades dependientes del SO Introducci´ona . . . Instalaci´ondel . . .

• os.getlogin() nombre de login del usuario Uso de la l´ıneade . . .

• os.getloadavg() carga media del sistema Programaci´on de . . . • os.getcwd() obtiene el directorio actual Manejo de ficheros . . . • os.chdir(path ) cambia el directorio actual a path Programaci´on en . . . Introducci´ona Perl . . . • os.listdir(path ) lista de todas las entradas del di- rectorio path P´aginawww os.path Manipulaci´onde ficheros y/o directorios P´aginainicial • os.path.isfile(path ) True si path es un fichero regu- JJ II lar J I • os.path.split(path ) Divide path en directorio+fichero P´agina 309 de 347

• os.path.splitext(path ) Divide path en nombre fichero+ Regresar

extensi´on Pantalla completa • Devuelve el tama˜node os.path.getsize(path ) path Cerrar

Abandonar glob Expansi´onde nombres de ficheros estilo UNIX (globbing) ´Indice • glob.glob(expr ) Lista de ficheros indicados por expr Introducci´ona . . . (puede contener comodines) Instalaci´ondel . . . Uso de la l´ıneade . . . shutil Operaciones de alto nivel con ficheros Programaci´on de . . . • shutil.copy(src, dst ) Copia el fichero src al fichero Manejo de ficheros . . . o directorio dst Programaci´on en . . . • shutil.move(src, dst ) Mueve recursivamente un fichero Introducci´ona Perl . . .

o directorio P´aginawww tempfile Genera ficheros y directorios temporales P´aginainicial

• tempfile.NamedTemporaryFile() Crea un fichero tem- JJ II

poral con nombre J I optparse Parsea las opciones en l´ınea de comandos (reemplazado P´agina 310 de 347

por argparse) Regresar gzip, bz2, zipfile, tarfile Manejo de fichero comprimidos Pantalla completa

Cerrar

Abandonar sys Parametros y funciones dependientes del sistema ´Indice • sys.argv Lista de argumentos en l´ınea de comandos Introducci´ona . . . (sys.argv[0] es el nombre del script) Instalaci´ondel . . . Uso de la l´ıneade . . . • sys.exit([code] ) Termina el script con c´odigode sa- lida code Programaci´on de . . . Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 311 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Ejemplos ´Indice

1. En un directorio, renombra *.xml a *.html Introducci´ona . . .

Instalaci´ondel . . . import os.path, glob, shutil, optparse def main(): Uso de la l´ıneade . . .

p = optparse.OptionParser(description="Renombra XML a HTML", Programaci´on de . . . usage="%prog [directory]") options, args = p.parse_args() Manejo de ficheros . . . if len(args) == 1: Programaci´on en . . . # Chequea que sea un directorio Introducci´ona Perl . . . if not os.path.isdir(args[0]): print args[0] + " no es un directorio" sys.exit(1) P´aginawww try: P´aginainicial os.chdir(args[0]) # Cambia al directorio # Recorre los ficheros .xml JJ II for f in glob.glob("*.xml"): # Construye el nuevo nombre y renombra los ficheros J I new = os.path.splitext(f)[0] + ".html" shutil.move(f, new) P´agina 312 de 347 except: Regresar print "Hubo un problema ejecutando el programa."

else: Pantalla completa p.print_help() if __name__ == "__main__": Cerrar main() Abandonar 2. Muestra informaci´onsobre un proceso en ejecuci´on ´Indice from subprocess import Popen, PIPE Introducci´ona . . . proc = raw_input("Proceso a chequear: ") Instalaci´ondel . . . try: Uso de la l´ıneade . . . # Ejecuta el comando ps y obten la salida Programaci´on de . . . output = Popen("ps -edf | grep "+proc,shell=True,stdout=PIPE)Manejo de ficheros . . . procs = output.stdout.readlines() Programaci´on en . . . for procinfo in procs: Introducci´ona Perl . . . # Separa la salida en campos info = procinfo.split() P´aginawww # Muestra los resultados P´aginainicial print "\n\ JJ II Ejecutable:\t", info[-1], "\n\ Propietario:\t", info[0], "\n\ J I PID:\t\t", info[1], "\n\ P´agina 313 de 347

PPID:\t\t", info[2], "\n\ Regresar Hora inicio:\t", info[4], "\n" except: Pantalla completa print "Hubo un problema ejecutando el programa." Cerrar

Abandonar 3. Realiza acciones sobre un tar, seleccion´andolasde un men´u ´Indice import tarfile, sys Introducci´ona . . . try: Instalaci´ondel . . . f = True Uso de la l´ıneade . . . while f: Programaci´on de . . . # Abre el fichero tar (especificado como argumento) Manejo de ficheros . . . tar = tarfile.open(sys.argv[1], "r") Programaci´on en . . . Introducci´ona Perl . . . # Presenta el men´uy obtiene la selecci´on selection = raw_input(""" P´aginawww Selecciona P´aginainicial 1 para extraer un fichero JJ II 2 para mostrar informaci´onsobre un fichero en """ + sys.argv[1] + """ J I 3 para listar los ficheros de """ + sys.argv[1] + P´agina 314 de 347

""" Regresar 4 para terminar""" + "\n") Pantalla completa

Cerrar

Abandonar # Realiza la acci´onen funci´onde la selecci´on ´Indice

if selection == "1": Introducci´ona . . .

filename = raw_input("Indica el fichero a extraer:Instalaci´ondel ") . . .

tar.extract(filename) Uso de la l´ıneade . . . elif selection == "2": Programaci´on de . . . filename = raw_input("Indica el fichero a inspeccionar: ") Manejo de ficheros . . . for tarinfo in tar: Programaci´on en . . . if tarinfo.name == filename: print "\n\ Introducci´ona Perl . . .

Nombre:\t", tarinfo.name, "\n\ P´aginawww Tama~no:\t",tarinfo.size, "bytes\n" P´aginainicial elif selection == "3": print tar.list(verbose=True) JJ II

elif selection == "4": J I f = False P´agina 315 de 347 else: print "Selecci´onincorrecta" Regresar except: Pantalla completa print "Hubo un problema ejecutando el programa." Cerrar

Abandonar Referencias ´Indice • Python Official Website: p´aginaprincipal de Python Introducci´ona . . . Instalaci´ondel . . .

• Python Documentation: documentaci´ondiversa, tutoriales, Uso de la l´ıneade . . .

etc. Programaci´on de . . . • The Python tutorial: un buen sitio para empezar Manejo de ficheros . . . Programaci´on en . . . • The Python Standard Library: la librer´ıaest´andar Introducci´ona Perl . . . • M´odulos´utiles P´aginawww ´ • Indice alfab´eticode m´odulos P´aginainicial

• Python para todos: tutorial en castellano JJ II

J I

P´agina 316 de 347

Regresar

Pantalla completa

Cerrar

Abandonar 7. Introducci´ona Perl y Ruby ´Indice

Introducci´ona . . . Perl Instalaci´ondel . . .

Principales aplicaciones de Perl: Uso de la l´ıneade . . .

Programaci´on de . . . • Administraci´onde sistemas Manejo de ficheros . . .

• Desarrollo web Programaci´on en . . . • Programaci´onen red Introducci´ona Perl . . . • Desarrollo de GUI P´aginawww

P´aginainicial • ... JJ II Algunas caracter´ısticas J I

• Combina caracter´ısticasde shell, awk y sed con otros lengua- P´agina 317 de 347 jes de alto nivel Regresar • Soporte de distintos paradigmas de programaci´on(impera- Pantalla completa tiva, orientada a objetos y funcional) Cerrar

Abandonar • Potente sistema de procesamiento de texto mediante expre- ´Indice

siones regulares Introducci´ona . . . • Enorme colecci´on de m´odulos disponibles Instalaci´ondel . . . Uso de la l´ıneade . . .

Programaci´on de . . .

Manejo de ficheros . . .

Programaci´on en . . .

Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 318 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Ejecuci´onde un script Perl ´Indice • Directamente en la l´ıneade comandos: Introducci´ona . . . Instalaci´ondel . . .

# Renombra *.txt a *-2010.txt Uso de la l´ıneade . . .

$ perl -e ’foreach (<*.txt>) Programaci´on de . . . > { s/\.txt$//; rename("$_.txt", "$_-2010.txt") }’ Manejo de ficheros . . . • En un script Programaci´on en . . . Introducci´ona Perl . . . #!/usr/bin/perl use strict; # Exige predeclarar las variables (my) P´aginawww

use warnings; # Avisa de posibles errores P´aginainicial # # Abre el fichero de contrase~nasy lee cada l´ınea. JJ II my $filename = "/etc/passwd"; # Nombre del fichero J I

open(FILE, "<", $filename) # Abre el fichero (solo lectura)P´agina 319 de 347 or die "No puedo abrir: $!"; # Termina si falla while(my $line = ) { # Lee cada l´ınea Regresar print $line; Pantalla completa

} Cerrar close(FILE); # Cierra el fichero Abandonar Tipos de datos en Perl ´Indice 1. Escalares (n´umeros o strings) Introducci´ona . . . Instalaci´ondel . . .

$a = "manzanas"; Uso de la l´ıneade . . .

$b = "peras"; Programaci´on de . . . print $a." y ".$b."\n"; # Muestra "peras y manzanas" Manejo de ficheros . . . print "$a y $b\n"; # Muestra "peras y manzanas" Programaci´on en . . . 2. Arrays Introducci´ona Perl . . .

@frutas = ("naranjas", "limones", "uvas"); P´aginawww

print $frutas[2]; # uvas P´aginainicial ($n, $l) = @frutas; # $n="naranjas", $l="limones" push(@frutas, "cocos"); # $frutas[3] = "cocos" JJ II $c = pop(@frutas); # $c = "cocos" J I

$nf = scalar(@frutas); # $nf = 3 P´agina 320 de 347 $fr = "@frutas"; # $fr = "naranjas limones uvas" @fo = split(/ /, $fr); # @fo = ("naranjas", "limones", "uvas")Regresar

Pantalla completa

Cerrar

Abandonar 3. Mapas (arrays asociativos) ´Indice %edad_de = { Introducci´ona . . . Eva => 23, Instalaci´ondel . . . Ana => 19, Uso de la l´ıneade . . . Oscar => 41 Programaci´on de . . . } Manejo de ficheros . . . print $edad_de{Ana}; # Imprime 19 Programaci´on en . . . $edad_de{Eva}=18; # Cambia un valor Introducci´ona Perl . . . $edad_de{Juan} = 26; # A~nadeun elemento al mapa P´aginawww 4. Variables especiales P´aginainicial $ • Variable por defecto (la mayor´ıade las funciones de JJ II Perl toman $ como argumento por defecto) J I • @ARGV array con los argumentos de la l´ıneade comandos P´agina 321 de 347 • %ENV Mapa con las variables de entorno Regresar

Pantalla completa

Cerrar

Abandonar Control de flujo ´Indice

Lazos Introducci´ona . . . Instalaci´ondel . . . foreach (@frutas) { # Recorre el array Uso de la l´ıneade . . .

print $_."\n"; # Imprime un elemento por Programaci´on de . . . # l´ınea.El punto concatena Manejo de ficheros . . . } # dos strings. Programaci´on en . . .

Introducci´ona Perl . . . print "\nA~nadem´asfrutas "; # Imprime un mensaje

$a = ; # Lee de la entrada est´andar P´aginawww chop $a; # y elimina el \n P´aginainicial while ( $a ) { # Si la entrada no est´avac´ıa push(@frutas, $a); # a~n´adelaal array JJ II

$a = ; chop $a; # y lee una nueva entrada J I } P´agina 322 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Condicionales ´Indice if ( not $tengo_manzanas ) { Introducci´ona . . . compra(\@frutas,"manzanas" ); # El array se pasa por Instalaci´ondel . . . } # referencia Uso de la l´ıneade . . . Programaci´on de . . . Alternativa: Manejo de ficheros . . . unless ($tengo_manzanas) { Programaci´on en . . . compra(\@frutas,"manzanas"); Introducci´ona Perl . . . } P´aginawww

Tambi´enes v´alido: P´aginainicial compra(\@frutas,"manzanas") if not $tengo_manzanas; JJ II

J I

P´agina 323 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Subrutinas ´Indice • Los par´ametrosse recogen en @ Introducci´ona . . . Instalaci´ondel . . . sub compra { Uso de la l´ıneade . . .

( $array, $string ) = @_; # Los parametros se recogen Programaci´on de . . .

# como escalares Manejo de ficheros . . .

push(@$array, $string); # La referencia se convierte Programaci´on en . . .

# a array Introducci´ona Perl . . . } P´aginawww

P´aginainicial

JJ II

J I

P´agina 324 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Expresiones regulares ´Indice # Sin argumentos, lee la entrada estandar Introducci´ona . . . while(<>) { # con argumentos, usa estos como nombres Instalaci´ondel . . . # de ficheros y los lee l´ınea a l´ınea Uso de la l´ıneade . . . print if /http:\/\//; # Muestra las l´ıneascon http:// Programaci´on de . . . print if s/ttx/txt/ig; # Muestra las l´ıneascon "ttx" Manejo de ficheros . . . # y hace el cambio por "txt" Programaci´on en . . . # g=global, i=case insensitive Introducci´ona Perl . . . } P´aginawww

$string = "oCme mas futra"; P´aginainicial $string =~ s/oCme/Come/; # =~ Aplica sustituci´ona $string JJ II $string =~ s/futr/frut/; print $string; # Imprime "Come mas fruta" J I

P´agina 325 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Ejemplos ´Indice 1. Muestra las terminaciones de los ficheros del directorio ac- Introducci´ona . . . tual Instalaci´ondel . . . Uso de la l´ıneade . . .

#!/usr/bin/perl Programaci´on de . . . use strict; Manejo de ficheros . . . use warnings; Programaci´on en . . . foreach (glob("*")) { # Recorre los ficheros Introducci´ona Perl . . . my @file = split(/\./); # Los separa por .

my $term = pop(@file); # Extrae el ´ultimo elemento P´aginawww print "$term\n"; P´aginainicial } JJ II

J I

P´agina 326 de 347

Regresar

Pantalla completa

Cerrar

Abandonar 2. En un directorio, renombra *.xml a *.html ´Indice #!/usr/bin/perl Introducci´ona . . . use strict; Instalaci´ondel . . . use warnings; Uso de la l´ıneade . . . unless (scalar(@ARGV) == 1) { Programaci´on de . . . print "Necesito un directorio como argumento\n"; exit 1;Manejo de ficheros . . . } Programaci´on en . . . if( not -d $ARGV[0] ) { Introducci´ona Perl . . . print "$ARGV[0] no es un directorio\n"; exit 1; } P´aginawww # Cambia al directorio P´aginainicial chdir $ARGV[0]; JJ II # Recorre los ficheros .xml foreach my $file (glob "*.xml") { J I # Construye el nuevo nombre P´agina 327 de 347

my $new = substr($file, 0, -3) . "html"; Regresar # Renombra los ficheros rename $file, $new; Pantalla completa } Cerrar

Abandonar 3. Lee un fichero de texto numerando las l´ıneasno vac´ıas ´Indice #!/usr/bin/perl Introducci´ona . . . use strict; Instalaci´ondel . . . use warnings; Uso de la l´ıneade . . . open(my $fichero, "<", "f.txt") Programaci´on de . . . or die "No puedo abrir f.txt:$!"; Manejo de ficheros . . . my $nl="001"; # Entero de tres d´ıgitos Programaci´on en . . . while(<$fichero>) { Introducci´ona Perl . . . if(!/^$/) { # S´ololas l´ıneasno vac´ıas print "$nl $_"; # Pon un n´umerode l´ınea P´aginawww $nl++; P´aginainicial } JJ II else { print "$_"; # L´ıneavac´ıasin n´umero J I } P´agina 328 de 347

} Regresar

Pantalla completa

Cerrar

Abandonar 4. Script para a˜nadirusuarios al sistema ´Indice use strict; use warnings; Introducci´ona . . . # M´odulopara leer par´ametrosde entrada Instalaci´ondel . . . use Getopt::Long; Uso de la l´ıneade . . . my $addusr = "/usr/sbin/adduser"; Programaci´on de . . . my $nombre=""; my $apellido=""; Manejo de ficheros . . . # Obtiene los par´ametros Programaci´on en . . . GetOptions("nombre=s" => \$nombre, Introducci´ona Perl . . . "apellido=s" => \$apellido ) or uso(); # Comprueba los par´ametrossean correctos P´aginawww if( not $nombre or not $apellido ) { P´aginainicial uso(); JJ II } if ( $nombre !~ /^[a-zA-Z]+$/) { J I uso("El nombre debe ser alfab´etico"); P´agina 329 de 347

} Regresar if ( $apellido !~ /^[a-zA-Z]+$/) { uso("El apellido debe ser alfab´etico"); Pantalla completa } Cerrar

Abandonar # Construye el username ´Indice my $username = lc( substr($apellido, 0, 1) . $nombre); Introducci´ona . . .

# Directorio HOME Instalaci´ondel . . . my $home = "/home/$username"; Uso de la l´ıneade . . . # Comando a ejecutar Programaci´on de . . . my $comando = qq($addusr --home $home --disabled-password \\ Manejo de ficheros . . . --gecos "$nombre $apellido" $username); Programaci´on en . . . system $comando; # Ejecuta el comando Introducci´ona Perl . . .

# Error e informaci´onde uso P´aginawww sub uso { P´aginainicial my ($msg) = @_; # Recogo los par´ametros if ($msg) { # Si se pasa un mensaje de error, JJ II

print "$msg\n\n"; # lo muestra J I } P´agina 330 de 347 print "Usar: $0 --nombre Nombre --apellido Apellido\n"; exit; Regresar

} Pantalla completa

Cerrar

Abandonar Referencias ´Indice • The Perl Directory: p´aginaprincipal de Perl Introducci´ona . . . Instalaci´ondel . . .

• Perl programming documentation: extensa documentaci´on Uso de la l´ıneade . . . • Comprehensive Perl Archive Network: m´odulosy documentaci´on Programaci´on de . . . de Perl Manejo de ficheros . . . Programaci´on en . . . • The CPAN search site: para buscar en el CPAN Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 331 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Ruby ´Indice Lenguaje din´amico, de prop´ositogeneral, creado a mediados de Introducci´ona . . . los 90 por Yukihiro ”Matz” Matsumoto Instalaci´ondel . . . Uso de la l´ıneade . . .

• Expresiones regulares nativas similares a las de Perl Programaci´on de . . . • Soporte de m´ultiplesparadigmas: imperativo, orientado a Manejo de ficheros . . . objetos y funcional Programaci´on en . . . Introducci´ona Perl . . . • “Todo” es un objeto

P´aginawww • Amplia librer´ıaest´andar P´aginainicial

JJ II

J I

P´agina 332 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Ejemplo sencillo: ´Indice #!/usr/bin/ruby Introducci´ona . . . =begin Instalaci´ondel . . . Abre y lee un fichero Uso de la l´ıneade . . . Se usa un bloque (entre do - end) Programaci´on de . . . El identado no es necesario Manejo de ficheros . . . El fichero se cierra Programaci´on en . . . autom´aticamenteal acabar el bloque. Introducci´ona Perl . . . =end File.open("/etc/passwd", "r") do |f1| P´aginawww while linea = f1.gets P´aginainicial puts linea JJ II end end # Fin del bloque J I P´agina 333 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Tipos de datos en Ruby ´Indice 1. Arrays Introducci´ona . . . Instalaci´ondel . . .

frutas=[ "naranjas", "uvas", 123, "limones", "uvas" ] Uso de la l´ıneade . . .

frutas<<"peras" # A~nadeun string Programaci´on de . . . frutas.delete(123) Manejo de ficheros . . . frutas.uniq! # Elimina elementos duplicados Programaci´on en . . . frutas.insert(2, %w{fresas pomelos}) # Inserta otro array Introducci´ona Perl . . . # %w -> array de strings

# sin usar comillas P´aginawww puts frutas # naranjas,uvas,fresas,pomelos,limones,peras P´aginainicial puts frutas.length # 5 puts frutas[2][1] # pomelos JJ II

frutas.delete_at(2) J I frutas.insert(3, "cerezas", "kiwis") # Inserta P´agina 334 de 347 frutas.sort! # Ordena ‘‘in-place’’ puts frutas # cerezas, kiwis, limones, naranjas, peras, uvasRegresar

Pantalla completa

Cerrar

Abandonar 2. Rangos ´Indice nums = -1..9 Introducci´ona . . . puts nums.include?(10) # false (10 no en el rango) Instalaci´ondel . . . puts nums === 0 # true (0 en el rango) Uso de la l´ıneade . . . puts nums.first # -1 Programaci´on de . . . puts nums.last # 9 Manejo de ficheros . . . puts nums.to_a # [-1,0,1,2,3,4,5,6,7,8,9] Programaci´on en . . . puts nums.to_s # "-1..9" Introducci´ona Perl . . . array = nums.reject {|i| i < 7} puts array # [7, 8, 9] P´aginawww P´aginainicial 3. Arrays asociativos JJ II edad_de = {’Eva’=>23, ’Ana’=>19, ’Oscar’=>41} puts edad_de[’Ana’] # Imprime 19 J I edad_de[’Eva’] = 18 # Cambia un valor P´agina 335 de 347

edad_de[’Juan’] = 26 # A~nadeun elemento Regresar edad_de.delete(’Oscar’) # Borra un elemento Pantalla completa

Cerrar

Abandonar Control de flujo ´Indice

Lazos Introducci´ona . . . Instalaci´ondel . . . frutas=["naranjas", "uvas"] Uso de la l´ıneade . . . # Bloque usando do-end Programaci´on de . . . frutas.each do |f| Manejo de ficheros . . . puts "#{f}:#{f.length}" # naranjas:8 Programaci´on en . . . end # uvas:4 Introducci´ona Perl . . .

P´aginawww print "A~nadeotra fruta: " nf = gets.chomp # Lee stdin y elimina el \n P´aginainicial while nf != "" # Si la entrada no est´avac´ıa JJ II frutas<

Pantalla completa # Bloque usando llaves 3.times { |i| puts i } # 0, 1, 2 Cerrar

Abandonar Condicionales ´Indice print "Introduce un entero: " Introducci´ona . . . x = gets.chomp.to_i Instalaci´ondel . . . if x < 0 Uso de la l´ıneade . . . x = 0 Programaci´on de . . . puts "Negativo cambiado a 0" Manejo de ficheros . . . elsif x == 0 Programaci´on en . . . puts "Cero" Introducci´ona Perl . . . else puts "Positivo" P´aginawww end P´aginainicial

JJ II

J I

P´agina 337 de 347

Regresar

Pantalla completa

Cerrar

Abandonar # Forma unless ´Indice unless x == 0 Introducci´ona . . .

puts x Instalaci´ondel . . . end Uso de la l´ıneade . . . # Case Programaci´on de . . . scale = 8 Manejo de ficheros . . . case scale Programaci´on en . . . when 0: puts "lowest" when 1..3: puts "medium-low" Introducci´ona Perl . . .

when 4..5: puts "medium" P´aginawww when 6..7: puts "medium-high" P´aginainicial when 8..9: puts "high" when 10: puts "highest" JJ II

else puts "off scale" J I end P´agina 338 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Funciones ´Indice # Argumento con valor por defecto Introducci´ona . . . def compra(fr, nf="manzanas") Instalaci´ondel . . . fr<

P´aginainicial frutas=[] JJ II # Los par´entesisno son obligatorios compra frutas, "peras" J I # Usa el valor por defecto P´agina 339 de 347 compra(frutas) Regresar # Usa m´ultiplesargumentos compram(frutas, "limones", "naranjas") Pantalla completa puts frutas # peras, manzanas, limones, naranjas Cerrar

Abandonar Expresiones regulares ´Indice # Comprueba direcciones de e-mail Introducci´ona . . . print "Introduce un e-mail: " Instalaci´ondel . . . s = gets.chomp Uso de la l´ıneade . . . if /\w+@\w+\.\w+((\.\w+)*)?/.match(s) Programaci´on de . . . puts "Direcci´oncorrecta" Manejo de ficheros . . . end Programaci´on en . . .

Introducci´ona Perl . . . # Busca URLs en un fichero de texto # Abre el fichero de solo lectura P´aginawww # comprobando excepciones P´aginainicial begin JJ II f = File.open("fich.txt","r") rescue Exception => msg J I print "No puedo abrir --> ", msg, "\n" P´agina 340 de 347

exit(1) Regresar end Pantalla completa

Cerrar

Abandonar # Expresi´onregular a buscar (\s == [:space:]) ´Indice urlreg = /http:\/\/([^\s]+)/ Introducci´ona . . . nl=1 Instalaci´ondel . . . f.each do |l| Uso de la l´ıneade . . . # Busca todas las URLs en la l´ıneaactual Programaci´on de . . . # e imprimelas Manejo de ficheros . . . l.scan(urlreg) { |m| print "L´ınea#{nl}-><#{m}>\n" } Programaci´on en . . . nl+=1 end Introducci´ona Perl . . . f.close P´aginawww

# Corrige un string P´aginainicial s = "oCme m´asfutra" JJ II s.gsub!("oCme", "Come") J I s.gsub!("futr", "frut") puts s # Imprime "Come m´asfruta" P´agina 341 de 347

# Separa un string en una lista Regresar s = "Uno:Dos.Tres-Cuatro" Pantalla completa l=s.split(/[:.-]/) Cerrar

Abandonar Ejemplos ´Indice 1. En un directorio, renombra *.xml a *.html Introducci´ona . . . Instalaci´ondel . . .

# M´odulocon utilidades para ficheros Uso de la l´ıneade . . .

require ’fileutils’ Programaci´on de . . . # Comprueba argumentos Manejo de ficheros . . . if ARGV.length < 1 Programaci´on en . . . puts "Necesito un directorio como argumento" Introducci´ona Perl . . . exit

end P´aginawww dir=ARGV[0] P´aginainicial

# Chequea que sea un directorio JJ II

unless File.directory?(dir) J I puts dir+" no es un directorio" P´agina 342 de 347 exit end Regresar

Pantalla completa

Cerrar

Abandonar # Recorre los ficheros .xml ´Indice begin Introducci´ona . . .

# Cambia al directorio Instalaci´ondel . . .

FileUtils.cd(dir) Uso de la l´ıneade . . . Dir.glob("*.xml") do |f| Programaci´on de . . . # Construye el nuevo nombre Manejo de ficheros . . . new = File.basename(f, ".xml")+".html" Programaci´on en . . . # Renombra los ficheros File.rename(f, new) Introducci´ona Perl . . .

end P´aginawww rescue Exception => msg P´aginainicial puts "Error: "+msg end JJ II

J I

P´agina 343 de 347

Regresar

Pantalla completa

Cerrar

Abandonar 2. Muestra informaci´onsobre un proceso en ejecuci´on ´Indice print "Proceso a chequear: " Introducci´ona . . . proc = gets.chomp Instalaci´ondel . . . begin Uso de la l´ıneade . . . # Ejecuta el comando ps y obten la salida Programaci´on de . . . output = ‘ps -edf|grep #{proc}‘ Manejo de ficheros . . . # Separa la salida en campos Programaci´on en . . . procinfo = output.split() Introducci´ona Perl . . .

# Muestra los resultados P´aginawww puts "Ejecutable : #{procinfo[7]}" P´aginainicial puts "Propietario : #{procinfo[0]}" JJ II puts "PID : #{procinfo[1]}" puts "PPID : #{procinfo[2]}" J I puts "Hora inicio : #{procinfo[4]}" P´agina 344 de 347

rescue Exception => msg Regresar puts "Error: "+msg end Pantalla completa Cerrar

Abandonar 3. Busca recursivamente ficheros que cumplen un patr´on ´Indice # M´oduloadicional Introducci´ona . . . require ’find’ Instalaci´ondel . . . print "Directorio inicial: " Uso de la l´ıneade . . . searchpath = gets.chomp Programaci´on de . . . print "Patr´onde b´usqueda:" Manejo de ficheros . . . pattern = gets.chomp Programaci´on en . . . # Busca recursivamente Introducci´ona Perl . . . Find.find(searchpath) do |path| # Comprueba si el patr´oncorresponde con el fichero P´aginawww if File.fnmatch(pattern, File.basename(path)) P´aginainicial # Muestra el nombre del fichero JJ II puts "Fichero : " + File.basename(path) # Informaci´onsobre el fichero J I stat = File.stat(path) P´agina 345 de 347

# Muestra los permisos en octal Regresar printf("Permisos : %o\n", stat.mode) Pantalla completa

Cerrar

Abandonar # Muestra el UID y el GID del propietario ´Indice

print "UID del propietario : " Introducci´ona . . .

puts stat.uid Instalaci´ondel . . .

print "GID del propietario : " Uso de la l´ıneade . . . puts stat.gid Programaci´on de . . . # Muestra el tama~nodel fichero Manejo de ficheros . . . print "Tama~no(bytes) : " Programaci´on en . . . puts stat.size puts "------" Introducci´ona Perl . . .

end P´aginawww end P´aginainicial

JJ II

J I

P´agina 346 de 347

Regresar

Pantalla completa

Cerrar

Abandonar Referencias

´ • P´aginaprincipal de Ruby Indice Introducci´ona . . . • Ayuda y documentaci´onpara Ruby Instalaci´ondel . . . Uso de la l´ıneade . . . • Core API docs para Ruby 1.8.7 Programaci´onde . . . Manejo de ficheros . . . • Ruby en 20 minutos Programaci´onen . . . Introducci´ona Perl . . .

P´aginawww

P´aginainicial

JJ II

J I

P´agina 347 de 347

Regresar

Pantalla completa

Cerrar

Abandonar