328

Programación y Métodos Numéricos

  • Upload
    -

  • View
    104

  • Download
    28

Embed Size (px)

DESCRIPTION

Libro para aprender a programar

Citation preview

  • Departamento de Fsica, Facultad de Ciencias, Universidad de Chile.Las Palmeras 3425, uoa. Casilla 653, Correo 1, Santiago

    fono: 562 978 7276 fax: 562 271 2973

    e-mail: [email protected]

    Apuntes de un curso de

    PROGRAMACINDcima primera edicin, revisin 120127-06

    Jos Rogan C.

    Vctor Muoz G.

  • Agradecimientos:

    A Xavier Andrade.A Denisse Pastn.De la clase del 2004 a: Daniel Asenjo y Max Ramrez.De la clase del 2005 a: Alejandro Varas y Mara Daniela Cornejo.De la clase del 2006 a: Nicols Verschueren y Paulina Chacn,

    Sergio Valdivia y Elizabeth Villanueva.De la clase del 2007 a: Sebastin Godoy, Carola Cerda,

    Rodrigo Pedrasa y Felipe Fuentes.De la clase del 2008 a: Smiljan Vojkovic,

    Vctor Araya y Juan Ignacio Pinto.De la clase del 2009 a: Mara Jos Tapia,

    Elizabeth Ambrosetti.De la clase del 2010 a: Carlos Yaez,

    Francisca Pino.

  • ndice

    1. Elementos del sistema operativo unix. 11.1. Introduccin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2. Historia de Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

    1.2.1. Antecedentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2.2. Aparicin de Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2.3. El Nombre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.2.4. GNU/Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.2.5. Cronologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    1.3. El Proyecto Debian. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.4. Ingresando al sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    1.4.1. Terminales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.4.2. Login. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.4.3. Passwords. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.4.4. Cerrando la sesin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    1.5. Archivos y directorios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.6. Los archivos y directorios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.7. Los comandos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    1.7.1. rdenes relacionadas con directorios. . . . . . . . . . . . . . . . . . . . 131.7.2. Los comandos para directorios. . . . . . . . . . . . . . . . . . . . . . . 141.7.3. Viendo archivos en pantalla. . . . . . . . . . . . . . . . . . . . . . . . . 141.7.4. Copiando, moviendo y borrando archivos. . . . . . . . . . . . . . . . . 151.7.5. Espacio de disco. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161.7.6. Links. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    1.8. Proteccin de archivos y permisos. . . . . . . . . . . . . . . . . . . . . . . . . . 171.9. Shells. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

    1.9.1. Archivos de conguracin. . . . . . . . . . . . . . . . . . . . . . . . . . 211.9.2. Cambiar de shell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211.9.3. Caracteres especiales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221.9.4. Variables de entorno. . . . . . . . . . . . . . . . . . . . . . . . . . . . 221.9.5. Aliases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231.9.6. Ejecucin de comandos. . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    v

  • vi NDICE

    1.9.7. Comandos del shell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241.9.8. Redireccin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261.9.9. Archivos de script. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261.9.10. Filtros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271.9.11. Utilitarios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    1.10. Ayuda y documentacin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371.11. Diferencias entre sistemas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371.12. Procesos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381.13. Editores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

    1.13.1. El editor vi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401.13.2. Editores modo emacs. . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

    1.14. El sistema X Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421.15. Uso del ratn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431.16. Internet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

    1.16.1. Otras mquinas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441.16.2. Acceso a la red. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441.16.3. Exportando el DISPLAY. . . . . . . . . . . . . . . . . . . . . . . . . . 461.16.4. El correo electrnico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461.16.5. Ftp anonymous. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481.16.6. WWW. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

    1.17. Impresin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491.18. Compresin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

    1.18.1. Distintos algoritmos de compresin. . . . . . . . . . . . . . . . . . . . . 51

    2. Grca. 532.1. Visualizacin de archivos grcos. . . . . . . . . . . . . . . . . . . . . . . . . . 532.2. Modicando imgenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542.3. Conversin entre formatos grcos. . . . . . . . . . . . . . . . . . . . . . . . . 542.4. Captura de pantalla. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552.5. Creando imgenes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552.6. Gracando funciones y datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

    3. El sistema de preparacin de documentos TEX . 593.1. Introduccin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593.2. Archivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593.3. Input bsico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

    3.3.1. Estructura de un archivo. . . . . . . . . . . . . . . . . . . . . . . . . . 603.3.2. Caracteres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603.3.3. Comandos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613.3.4. Algunos conceptos de estilo. . . . . . . . . . . . . . . . . . . . . . . . . 613.3.5. Notas a pie de pgina. . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

  • NDICE vii

    3.3.6. Frmulas matemticas. . . . . . . . . . . . . . . . . . . . . . . . . . . . 633.3.7. Comentarios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633.3.8. Estilo del documento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643.3.9. Argumentos de comandos. . . . . . . . . . . . . . . . . . . . . . . . . . 653.3.10. Ttulo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653.3.11. Secciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663.3.12. Listas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663.3.13. Tipos de letras. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673.3.14. Acentos y smbolos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693.3.15. Escritura de textos en castellano. . . . . . . . . . . . . . . . . . . . . . 69

    3.4. Frmulas matemticas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703.4.1. Sub y suprandices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713.4.2. Fracciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713.4.3. Races. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713.4.4. Puntos suspensivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713.4.5. Letras griegas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723.4.6. Letras caligrcas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733.4.7. Smbolos matemticos. . . . . . . . . . . . . . . . . . . . . . . . . . . . 733.4.8. Funciones tipo logaritmo. . . . . . . . . . . . . . . . . . . . . . . . . . 763.4.9. Matrices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763.4.10. Acentos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793.4.11. Texto en modo matemtico. . . . . . . . . . . . . . . . . . . . . . . . . 793.4.12. Espaciado en modo matemtico. . . . . . . . . . . . . . . . . . . . . . . 793.4.13. Fonts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

    3.5. Tablas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813.6. Referencias cruzadas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813.7. Texto centrado o alineado a un costado. . . . . . . . . . . . . . . . . . . . . . 823.8. Algunas herramientas importantes . . . . . . . . . . . . . . . . . . . . . . . . . 83

    3.8.1. babel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833.8.2. AMS-LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843.8.3. fontenc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 873.8.4. enumerate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 873.8.5. Color. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

    3.9. Modicando el estilo de la pgina. . . . . . . . . . . . . . . . . . . . . . . . . . 893.9.1. Estilos de pgina. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893.9.2. Corte de pginas y lneas. . . . . . . . . . . . . . . . . . . . . . . . . . 89

    3.10. Figuras. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 923.10.1. graphicx.sty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933.10.2. Ambiente figure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

    3.11. Cartas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953.12. LATEX y el formato pdf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

  • viii NDICE

    3.13. Modicando LATEX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 993.13.1. Denicin de nuevos comandos. . . . . . . . . . . . . . . . . . . . . . . 993.13.2. Creacin de nuevos paquetes y clases . . . . . . . . . . . . . . . . . . . 104

    3.14. Errores y advertencias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1123.14.1. Errores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1123.14.2. Advertencias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

    4. Introduccin a programacin. 1174.1. Qu es programar? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174.2. Lenguajes de programacin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118

    4.2.1. Cdigo de Mquina binario. . . . . . . . . . . . . . . . . . . . . . . . . 1184.2.2. Lenguaje de Ensamblador (Assembler). . . . . . . . . . . . . . . . . . . 1184.2.3. Lenguaje de alto nivel. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194.2.4. Lenguajes interpretados. . . . . . . . . . . . . . . . . . . . . . . . . . . 1204.2.5. Lenguajes especializados. . . . . . . . . . . . . . . . . . . . . . . . . . . 120

    4.3. Lenguajes naturales y formales. . . . . . . . . . . . . . . . . . . . . . . . . . . 1204.3.1. Lenguajes naturales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204.3.2. Lenguajes formales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

    4.4. Desarrollando programas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214.5. La interfaz con el usuario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214.6. Sacar los errores de un programa. . . . . . . . . . . . . . . . . . . . . . . . . . 122

    5. Una breve introduccin a Python. 1255.1. Python. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1255.2. El Zen de Python. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1265.3. El primer programa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1275.4. Tipos bsicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

    5.4.1. Las variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1295.4.2. Asignacin de variables. . . . . . . . . . . . . . . . . . . . . . . . . . . 1295.4.3. Reciclando variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1305.4.4. Comentarios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1305.4.5. Operaciones matemticas. . . . . . . . . . . . . . . . . . . . . . . . . . 1305.4.6. Cadenas de caracteres (strings). . . . . . . . . . . . . . . . . . . . . . . 1315.4.7. Operaciones simples con strings. . . . . . . . . . . . . . . . . . . . . . . 1325.4.8. Los caracteres dentro de un strings. . . . . . . . . . . . . . . . . . . . . 1325.4.9. ndices negativos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1335.4.10. Booleanos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

    5.5. Imprimiendo e ingresando. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1345.5.1. Imprimiendo en la misma lnea. . . . . . . . . . . . . . . . . . . . . . . 1345.5.2. Imprimiendo un texto de varias lneas. . . . . . . . . . . . . . . . . . . 1355.5.3. Composicin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

  • NDICE ix

    5.5.4. Imprimiendo con formato . . . . . . . . . . . . . . . . . . . . . . . . . 1355.5.5. Entrada (input). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

    5.6. Tipos avanzados, contenedores. . . . . . . . . . . . . . . . . . . . . . . . . . . 1365.6.1. Listas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1365.6.2. Rebanando listas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1375.6.3. Mutabilidad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1375.6.4. Modicando listas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1385.6.5. Agregando a una lista. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1385.6.6. Duplicado listas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1385.6.7. Borrando items de una lista. . . . . . . . . . . . . . . . . . . . . . . . . 1395.6.8. Operaciones con listas. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1395.6.9. Tuplas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1405.6.10. Conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1405.6.11. Diccionarios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1415.6.12. Editando un diccionario. . . . . . . . . . . . . . . . . . . . . . . . . . . 142

    5.7. Control de ujo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1425.7.1. Condicionales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1425.7.2. Posibles condicionales. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1425.7.3. Comparando strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1435.7.4. El if. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1435.7.5. El if. . . else. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1445.7.6. Forma compacta del if. . . else. . . . . . . . . . . . . . . . . . . . . . . 1445.7.7. El if...elif...else. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1445.7.8. La palabra clave pass. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1455.7.9. Operadores lgicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1455.7.10. Forma alternativa, de hacer una pregunta compuesta. . . . . . . . . . . 1465.7.11. Este elemento est en la lista? . . . . . . . . . . . . . . . . . . . . . . 1465.7.12. Iteraciones con while. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1465.7.13. Recorriendo un string. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1475.7.14. El ciclo for. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1475.7.15. Un ciclo for y las listas. . . . . . . . . . . . . . . . . . . . . . . . . . . 1485.7.16. La funcin enumerate . . . . . . . . . . . . . . . . . . . . . . . . . . . 1495.7.17. Generando listas de nmeros. . . . . . . . . . . . . . . . . . . . . . . . 1495.7.18. Sumatorias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1495.7.19. El comando break. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1505.7.20. El comando continue. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1505.7.21. El comando else. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

    5.8. Funciones Pre-hechas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1515.8.1. Algunas funciones incorporadas. . . . . . . . . . . . . . . . . . . . . . . 1525.8.2. La funcin que da el largo de un string o una lista. . . . . . . . . . . . 1525.8.3. Algunas funciones del mdulo math. . . . . . . . . . . . . . . . . . . . . 153

  • x NDICE

    5.8.4. Algunas funciones del mdulo string. . . . . . . . . . . . . . . . . . . 1535.8.5. Algunas funciones del mdulo random. . . . . . . . . . . . . . . . . . . 1545.8.6. Algunos otros mdulos y funciones. . . . . . . . . . . . . . . . . . . . . 154

    5.9. Funciones hechas en casa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1545.9.1. Receta para una funcin. . . . . . . . . . . . . . . . . . . . . . . . . . . 1545.9.2. Pasando valores a la funcin. . . . . . . . . . . . . . . . . . . . . . . . 1555.9.3. Variables globales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1555.9.4. Valores por defecto de una funcin. . . . . . . . . . . . . . . . . . . . . 1565.9.5. Argumentos claves. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1575.9.6. Documentacin de una funcin, docstrings. . . . . . . . . . . . . . . . . 1575.9.7. Tuplas y diccionarios como argumentos. . . . . . . . . . . . . . . . . . 1585.9.8. La palabra clave return. . . . . . . . . . . . . . . . . . . . . . . . . . . 1595.9.9. Funciones que tienen un valor de retorno explcito. . . . . . . . . . . . 1595.9.10. Funciones que tienen ms de un valor de retorno. . . . . . . . . . . . . 1605.9.11. Recursin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1605.9.12. Parmetros desde la lnea de comando. . . . . . . . . . . . . . . . . . . 161

    5.10. Ejemplos de funciones: raz cuadrada y factorial. . . . . . . . . . . . . . . . . . 1625.10.1. Raz cuadrada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1625.10.2. Factorial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

    5.11. Programacin orientada a objetos. . . . . . . . . . . . . . . . . . . . . . . . . . 1655.11.1. Objetos y clases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1655.11.2. Clase de muestra LibretaNotas. . . . . . . . . . . . . . . . . . . . . . . 1665.11.3. Valores por defecto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1675.11.4. Herencia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1675.11.5. Herencia multiple. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1705.11.6. Polimorsmo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1705.11.7. Encapsulacin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1705.11.8. Atributos comunes a toda una clase. . . . . . . . . . . . . . . . . . . . 1725.11.9. Mtodos especiales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1735.11.10.Ejemplos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1745.11.11.El __main__. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175

    5.12. Objetos conocidos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1755.12.1. String. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1765.12.2. Listas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1775.12.3. Diccionarios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180

    5.13. Programacin Funcional. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1825.13.1. Funciones de orden superior. . . . . . . . . . . . . . . . . . . . . . . . . 1825.13.2. Iteraciones sobre listas. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1835.13.3. Las funciones lambda. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1855.13.4. Compresin de listas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1855.13.5. Expresiones generadoras y generadores. . . . . . . . . . . . . . . . . . . 186

  • NDICE xi

    5.13.6. Decoradores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1875.14. Trabajando con archivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

    5.14.1. Funciones del mdulo os. . . . . . . . . . . . . . . . . . . . . . . . . . 1905.14.2. Funciones del mdulo os.path. . . . . . . . . . . . . . . . . . . . . . . 1915.14.3. Ejemplo de un cdigo. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1915.14.4. Abriendo un archivo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1915.14.5. Leyendo un archivo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1925.14.6. Escribiendo a un archivo. . . . . . . . . . . . . . . . . . . . . . . . . . . 1925.14.7. Cerrando un archivo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1925.14.8. Archivos temporales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1925.14.9. Ejemplo de lectura escritura. . . . . . . . . . . . . . . . . . . . . . . . . 193

    5.15. Pickle y Shelve. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1935.15.1. Preservando la estructura de la informacin. . . . . . . . . . . . . . . . 1945.15.2. Cmo almacenar? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1945.15.3. Ejemplo de shelve. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1945.15.4. Otras funciones de shelve. . . . . . . . . . . . . . . . . . . . . . . . . . 194

    5.16. Excepciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1965.16.1. Bloque try ... except. . . . . . . . . . . . . . . . . . . . . . . . . . . 1965.16.2. Comando raise. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1995.16.3. La instruccin assert. . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

    5.17. Modulos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2025.17.1. Dividiendo el cdigo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2025.17.2. Creando un mdulo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2025.17.3. Agregando un nuevo directorio al path. . . . . . . . . . . . . . . . . . . 2025.17.4. Documentando los mdulos. . . . . . . . . . . . . . . . . . . . . . . . . 2035.17.5. Usando un mdulo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2035.17.6. Trucos con mdulos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2045.17.7. Paquetes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204

    5.18. Algunos mdulos interesantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . 2065.18.1. El mdulo Numpy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2065.18.2. El mdulo mathplotlib. . . . . . . . . . . . . . . . . . . . . . . . . . . 2065.18.3. El mdulo SymPy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2065.18.4. El mdulo PyQt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2065.18.5. El mdulo Tkinter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2075.18.6. El mdulo Visual. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

    6. Ejercicios Propuestos 2136.1. Sistema Operativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2136.2. Comandos bsicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2156.3. Filtros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2206.4. Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

  • xii NDICE

    6.5. Grca y LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2276.6. Introduccin a la Programacin . . . . . . . . . . . . . . . . . . . . . . . . . . 2306.7. Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

    A. Transferencia a diskettes. 243

    B. Las shells csh y tcsh. 245B.1. Comandos propios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245B.2. Variables propias del shell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246

    C. Editores tipo emacs. 249

    D. Una breve introduccin a Octave/Matlab 257D.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257D.2. Interfase con el programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257D.3. Tipos de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258

    D.3.1. Escalares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258D.3.2. Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258D.3.3. Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260D.3.4. Estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261

    D.4. Operadores bsicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262D.4.1. Operadores aritmticos . . . . . . . . . . . . . . . . . . . . . . . . . . . 262D.4.2. Operadores relacionales . . . . . . . . . . . . . . . . . . . . . . . . . . . 262D.4.3. Operadores lgicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263D.4.4. El operador : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263D.4.5. Operadores de aparicin preferente en scripts . . . . . . . . . . . . . . 263

    D.5. Comandos matriciales bsicos . . . . . . . . . . . . . . . . . . . . . . . . . . . 263D.6. Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

    D.6.1. Comandos generales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264D.6.2. Como lenguaje de programacin . . . . . . . . . . . . . . . . . . . . . . 265D.6.3. Matrices y variables elementales . . . . . . . . . . . . . . . . . . . . . . 269D.6.4. Polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271D.6.5. lgebra lineal (matrices cuadradas) . . . . . . . . . . . . . . . . . . . . 271D.6.6. Anlisis de datos y transformada de Fourier . . . . . . . . . . . . . . . 272D.6.7. Grcos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273D.6.8. Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277D.6.9. Manejo de archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

    E. Herramientas bsicas en el uso de L.A.M.P. 283E.1. Objetivo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283E.2. Prerequisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283E.3. Breve referencia sobre paginas web. . . . . . . . . . . . . . . . . . . . . . . . . 284

  • NDICE xiii

    E.3.1. Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284E.4. Administrador de Bases de datos. . . . . . . . . . . . . . . . . . . . . . . . . . 285E.5. Servidor Web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285E.6. Pginas Bsicas en html. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286

    E.6.1. Estructura de una pgina en html. . . . . . . . . . . . . . . . . . . . . . 286E.6.2. Algo de estilo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286E.6.3. Formularios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290

    E.7. MySql. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293E.7.1. Iniciando sesin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293E.7.2. Creando una base de datos. . . . . . . . . . . . . . . . . . . . . . . . . 293E.7.3. Creando tablas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294E.7.4. Interactuando con la Tabla. . . . . . . . . . . . . . . . . . . . . . . . . 294

    E.8. Programacin en PHP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297E.8.1. Lenguaje PHP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298E.8.2. Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298E.8.3. Recuperando variables desde un formulario. . . . . . . . . . . . . . . . 298E.8.4. Control de ujo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299E.8.5. Funcin require. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301E.8.6. Sesin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301E.8.7. PHP interactuando con MySql. . . . . . . . . . . . . . . . . . . . . . . 303

    E.9. Ejemplo Final. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305E.9.1. Paso I: Estructura de las tablas. . . . . . . . . . . . . . . . . . . . . . . 305E.9.2. Paso II: rbol de pginas. . . . . . . . . . . . . . . . . . . . . . . . . . 306

    E.10.Conclusiones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311E.10.1.Mejoras al Ejemplo nal. . . . . . . . . . . . . . . . . . . . . . . . . . . 311

    E.11.Tabla de Colores en html. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312

  • xiv NDICE

  • ndice de guras

    3.1. Un sujeto caminando. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

    D.1. Grco simple. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273D.2. Curvas de contorno. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275D.3. Curvas de contorno. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

    E.1. Esquema de una tabla en html, utilizando los elementos de una matriz. . . . . 289E.2. Los 256 colores posibles de desplegar en una pgina en html, con su respectivo

    cdigo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312

    xv

  • Captulo 1

    Elementos del sistema operativo unix.versin revisada 8.0, diciembre de 2011

    1.1. Introduccin.

    En este captulo se intentar dar los elementos bsicos para poder trabajar en un am-biente unix. Sin pretender cubrir todos los aspectos del mismo, nuestro inters se centra enentregar las herramientas al lector para que pueda realizar los trabajos del curso bajo estesistema operativo. Como comentario adicional, conscientemente se ha evitado la traduccinde gran parte de la terminologa tcnica teniendo en mente que la documentacin disponiblese encuentra, por lo general, en ingls y nos interesa que el lector sea capaz de reconocer lostrminos.

    El sistema operativo unix es el ms usado en investigacin cientca, tiene una largahistoria y muchas de sus ideas y mtodos se encuentran presentes en otros sistemas operativos.Algunas de las caractersticas relevantes del unix moderno son:

    Multitarea (Multitasking): Cada programa tiene asignado su propio espacio de me-moria. Es imposible que un programa afecte a otro sin usar los servicios del sistemaoperativo. Si dos programas escriben en la misma direccin de memoria cada uno man-tiene su propia idea de su contenido.

    Multiusuario: Ms de una persona puede usar la mquina al mismo tiempo. Programasde otros usuarios continan ejecutndose a pesar de que un nuevo usuario entre a lamquina.

    Memoria grande, lineal y virtual: Un programa en una mquina de 32 Bits puede accedery usar direcciones hasta los 4 GB en una mquina de slo 4 MB de RAM. El sistemaslo asigna memoria autntica cuando le hace falta, en caso de falta de memoria deRAM, se utiliza el disco duro (swap).

    Casi todo tipo de dispositivo puede ser accedido como un archivo.

    1

  • 2 CAPTULO 1. ELEMENTOS DEL SISTEMA OPERATIVO UNIX.

    Existen muchas aplicaciones diseadas para trabajar desde la lnea de comandos. Ade-ms, la mayora de las aplicaciones permiten que la salida de una pueda ser la entradade otra aplicacin.

    Permite compartir dispositivos (como disco duro) entre una red de mquinas.

    Por su naturaleza de multiusuario, nunca se debera apagar impulsivamente una mquinaunix1, ya que una mquina apagada sin razn puede matar trabajos de das, perder losltimos cambios de tus archivos e ir degradando el sistema de archivos en los dispositivosde almacenamiento como los discos duros.

    Entre los sistemas operativos unix actuales cabe destacar:

    Linux fue originalmente desarrollado primero para computadores personales PCs basa-dos en x86 de 32 bits (386 o superiores). Hoy Linux corre sobre Intel x86, Alpha AXP,Sun SPARC, Motorola 68000, PowerPC, ARM, Hitachi SuperH, IBM S/390, MIPS,HP PA-RISC, Intel IA-64, AMD x86-64, AXIS CRIS, Renesas M32R, Atmel AVR32,Renesas H8/300, NEC V850, Tensilica Xtensa y arquitecturas Analog Devices Blackn;para muchas de estas arquitecturas en variantes de 32 y 64 bits.

    SunOS2: disponible para la familia 68K as como para la familia sparc de estacionesde trabajo sun

    Solaris3 : disponible para la familia sparc de Sun as como para la familia x86.

    OSF14: disponible para Alpha.

    Ultrix: disponible para vax de Digital

    SYSVR45: disponible para la familia x86, vax.

    IRIX: disponible para mips.

    AIX6: disponible para RS6000 de IBM y PowerPC.

    2SunOS 4.1.x tambin se conoce como Solaris 1.3Tambin conocido como SunOS 5.x, solaris 2 o Slowaris :-).4Tambin conocido como Dec Unix.5Tambin conocido como Unixware y Novell-Unix.6Tambin conocido como Aches.

  • 1.2. HISTORIA DE LINUX 3

    1.2. Historia de Linux

    1.2.1. Antecedentes

    El ncleo Linux ha sido marcado por un crecimiento constante en cada momento de suhistoria. Desde la primera publicacin de su cdigo fuente en 1991, nacido desde un pequeonmero de archivos en lenguaje C bajo una licencia que prohbe la distribucin comercial, asu estado actual de cerca de 296 MiBs de fuente bajo la Licencia pblica general de GNU.

    El nombre Linux ha generado gran controversia y nuevas alternativas no han tardado enaparecer para hacerle competencia.

    En 1983 Richard Stallman inici el Proyecto GNU, con el propsito de crear un sistemaoperativo similar y compatible con UNIX y los estndares POSIX. Dos aos ms tarde cre laFundacin del Software Libre (FSF) y desarroll la Licencia pblica general de GNU (GNUGPL), para tener un marco legal que permitiera difundir libremente el software. De estemodo el software de GNU fue desarrollado muy rpidamente, y por muchas personas. Acorto plazo, se desarroll una multiplicidad de programas, de modo que a principios de los90 haba bastante software disponible como para crear un sistema operativo completo. Sinembargo, todava le faltaba un ncleo.

    Esto deba ser desarrollado en el proyecto GNU Hurd, pero Hurd demostr desarrollarsemuy inactivamente, porque encontrar y reparar errores (debugging en ingls) era muy difcil,debido a las caractersticas tcnicas del diseo del microncleo.

    Otro proyecto de sistema operativo software libre, en los aos 1980 fue BSD. Este fuedesarrollado en la Universidad de Berkeley desde la 6a edicin de Unix de AT&T. Puesto queel cdigo de AT&T Unix estaba contenido en BSD, AT&T present una demanda a principiosde los aos 1990 contra la Universidad de Berkeley, la cual redujo el desarrollo de BSD. As,a principios de los aos 90 no produjo ningn sistema completo libre.

    El futuro de BSD era incierto debido al pleito y detuvo el desarrollo. Adems, el ProyectoGNU gradualmente se desarrollaba pero, este careca de un bien formado ncleo UNIX. Estodej un nicho abierto, que Linux llenara muy pronto.

    1.2.2. Aparicin de Linux

    En 1991, en Helsinki, Linus Torvalds comenz un proyecto que ms tarde lleg a ser elncleo Linux. Esto fue al principio un emulador terminal, al cual Torvalds sola tener accesoen los grandes servidores UNIX de la universidad. l escribi el programa expresamentepara el hardware que usaba, e independiente de un sistema operativo, porque quiso usar lasfunciones de su nueva computadora personal con un procesador 80386. El sistema operativoque l us durante el desarrollo fue Minix, y el compilador inicial fue el GNU C, que an esla opcin principal para compilar Linux hoy (aunque Linux puede ser compilado bajo otroscompiladores, tal como el Intel C Compiler).

    Como Torvalds escribi en su libro Solamente por diversin, l tarde o temprano com-

  • 4 CAPTULO 1. ELEMENTOS DEL SISTEMA OPERATIVO UNIX.

    prendi que haba escrito un ncleo de sistema operativo. El 25 de agosto de 1991, anuncieste sistema en un envo a la red Usenet, en el newsgroup (grupo de noticias):

    Hola a todos aquellos que usan Minix -

    Estoy haciendo un sistema operativo (gratuito) (solamente una acin, no sergrande ni profesional como el GNU) para clones 386(486) AT. Este ha estadogestndose desde abril, y est comenzando a estar listo. Me gustara recibir cual-quier comentario sobre las cosas que gustan/disgustan en minix, ya que mi SO(Sistema Operativo) se le parece un poco (la misma disposicin fsica del sistemade archivos, debido a motivos prcticos, entre otras cosas).

    Actualmente he portado bash (1.08) y gcc (1.40), y las cosas parecen funcionar.Esto implica que conseguir algo prctico dentro de unos meses, y me gustarasaber qu caractersticas quiere la mayora de la gente. Cualquier sugerencia esbienvenida, pero no prometer que las pondr en prctica :-)

    Linus Benedict Torvalds ([email protected].)

    PD. S, es libre de cualquier cdigo de minix, y tiene un sistema de archivos multi-hilo. NO es portable (usa 386 una conmutacin de tarea etc.), y probablementenunca ser soportada por nada ms que los discos duros AT, porque es todo loque tengo :-(.

    Linus Torvalds

    1.2.3. El Nombre

    Linus Torvalds haba querido llamar su invencin Freax, una combinacin de freak (anor-mal o raro), free (libre), y X, una alusin a Unix. Durante el inicio de su trabajo sobre elsistema, l almacen los archivos bajo el nombre Freax por aproximadamente medio ao.Torvalds ya haba considerado el nombre Linux , pero al principio lo haba descartado porser demasiado egocntrico o egosta.

    Para dar a otra gente la capacidad de cooperar en el sistema o sugerir mejoras, los archivosfueron colocados en el servidor ftp (ftp.funet.) de la Universidad de Helsinki, en septiembrede 1991. Ari Lemmke, colega de Torvalds en la Universidad, y encargado de los servidoresen ese momento, no estuvo de acuerdo con el nombre Freax, preriendo el nombre Linux. lsimplemente llam los archivos colocados sobre el servidor Linux sin consultar a Torvalds.Ms tarde, sin embargo, Torvalds accedi a usar el nombre Linux.

    1.2.4. GNU/Linux

    La designacin Linux al principio fue usada por Torvalds slo para el ncleo. El ncleofue, sin embargo, con frecuencia usado junto con otro software, especialmente con el del

  • 1.2. HISTORIA DE LINUX 5

    proyecto de GNU. Esta variante de GNU rpidamente se hizo la ms popular, ya que nohaba ningn otro ncleo libre que funcionara en ese tiempo. Cuando la gente comenz areferirse hacia esta recopilacin como Linux, Richard Stallman, el fundador del proyectode GNU, solicit que se usara el nombre GNU/Linux, para reconocer el rol del software deGNU. En junio de 1994, en el boletn de GNU, Linux fue mencionado como un clon librede UNIX, y el Proyecto Debian comenz a llamar a su producto GNU/Linux. En mayode 1996, Richard Stallman public al editor Emacs 19.31, en el cual el tipo de sistema fuerenombrado de Linux a Lignux. Esta escritura fue pretendida para referirse expresamente ala combinacin de GNU y Linux, pero esto pronto fue abandonado en favor de GNU/Linux.

    El producto terminado es ms a menudo denominado simplemente como Linux, comoel ms simple, el nombre original. Stallman anunci su demanda por un cambio de nombreslo despus de que el sistema ya se haba hecho popular.

    1.2.5. Cronologa

    1983: Richard Stallman crea el proyecto de GNU con el objetivo de crear un sistemaoperativo libre.

    1989: Richard Stallman escribe la primera versin de la licencia GNU GPL.

    1991: El ncleo Linux es anunciado pblicamente,el 25 de agosto por el entonces estu-diante nlands de 21 aos Linus Benedict Torvalds. El 17 de septiembre la primeraversin pblica aparece sobre un servidor de ftp. Algunos desarrolladores estn intere-sados en el proyecto y contribuyen con mejoras y extensiones.

    1992: El ncleo Linux es licenciado de nuevo bajo la GNU GPL. Las primeras distri-buciones Linux son creadas.

    1993: Ms de 100 desarrolladores trabajan sobre el ncleo Linux. Con su ayuda elncleo es adaptado al ambiente de GNU, que crea un espectro enorme de tipos deaplicaciones para el nuevo sistema operativo creado de la unin del software del proyectoGNU, variados programas de Software libre y el ncleo Linux. En este ao, tambin elproyecto Wine comienza su desarrollo y la distribucin ms antigua actualmente activa,Slackware, es liberada por primera vez. Ms tarde en el mismo ao, el Proyecto Debianes establecido. Hoy esta es la comunidad ms grande de una distribucin.

    1994: Torvalds considera que todos los componentes del ncleo Linux estn totalmentemaduros y presenta la versin 1.0 de Linux. Esta versin est, por primera vez, dis-ponible en la red Internet. El proyecto XFree86 contribuye con una interfaz grca deusuario (GUI). En este ao, las empresas Red Hat y SUSE tambin publican la versin1.0.

  • 6 CAPTULO 1. ELEMENTOS DEL SISTEMA OPERATIVO UNIX.

    1995: Aparece la siguiente rama estable de Linuz, la serie 1.2. Ms tarde, Linux estransportado a las plataformas informticas DEC y SUN SPARC. Durante los aossiguientes es transportado a un nmero cada vez mayor de plataformas.

    1996: La versin 2.0 del ncleo Linux es liberada. ste ahora puede servir varios pro-cesadores al mismo tiempo, y as se hace una alternativa seria para muchas empresas.

    1997: Varios programas propietarios son liberados para Linux en el mercado, como labase de datos Adabas D, el navegador Netscape y las suites de ocina Applixware yStarOce.

    1998: Empresas importantes de informtica como IBM, Compaq y Oracle anunciansoporte para Linux. Adems, un grupo de programadores comienza a desarrollar lainterfaz grca de usuario KDE, primera de su clase para Linux, con el objetivo deproveer facilidad de uso al usuario.

    1999: Aparece la serie 2.2 del ncleo Linux, con el cdigo de red y el soporte a SMPmejorados. Al mismo tiempo, un grupo de desarrolladores comienza el trabajo sobre elentorno grco GNOME, que competir con KDE por la facilidad de uso y la ecienciapara el usuario. Durante ese ao IBM anuncia un extenso proyecto para el soporte deLinux.

    2000: La Suite de ocina StarOce es ofrecida segn los trminos de la GNU GPL,abriendo as el camino para una Suite de ocina avanzada, y libre en Linux.

    2001: En enero, se libera la serie 2.4 del ncleo Linux. El ncleo Linux ahora soportahasta 64 Gb de RAM, sistemas de 64 bits, dispositivos USB y un si stema de archivosjournaling.

    2002: La comunidad OpenOce.org libera la versin 1.0 de su Suite de ocina hom-nima. El navegador web libre Mozilla es tambin liberado. En septiembre, aparece elSlapper-worm el cual es el primer gusano informtico Linux.

    2003: La serie 2.6 del ncleo Linux es liberada, despus de lo cual Linus Torvalds vaa trabajar para el OSDL. Linux se usa ms extensamente sobre sistemas integrados(embedded system).

    2004: El equipo de XFree86 se desintegra y se forma la fundacin X.Org, que provocaun desarrollo considerablemente ms rpido del servidor X para Linux.

    2005: El proyecto openSUSE es comenzado como una distribucin libre de la comunidadde Novell. Adems el proyecto OpenOce.org proyecta la versin de lanzamiento 2.0que soporta al estndar OASIS OpenDocument en octubre.

  • 1.3. EL PROYECTO DEBIAN. 7

    2006: El Xgl de Novell y el AIGLX de Red Hat permiten el uso de efectos aceleradospor hardware sobre el escritorio Linux. Oracle publica su propia distribucin de RedHat. Novell y Microsoft anuncian una cooperacin para la mejor interoperabilidad.

    2007: Dell llega a ser el primer fabricante principal de computadoras en vender unacomputadora personal de escritorio con Ubuntu preinstalado.

    1.3. El Proyecto Debian.

    El proyecto Debian es una asociacin de personas que han creado un sistema operativogratis y de cdigo abierto (free). Este sistema operativo se denomina Debian GNU/Linux osimplemente Debian.

    Actualmente Debian ocupa el kernel Linux desarrollado por Linus Torvalds apoyado pormiles de programadores de todo el mundo. Tambin estn implementados otros kernels comoHurd, desarrollado por GNU, NetBSD y FreeBSD.

    La mayora de las herramientas del sistema operativo Debian provienen del proyectoGNU y por ende son free. Cabe destacar que actualmente Debian tiene un total de ms de18733 paquetes (por paquetes entendemos software precompilado, para la versin estable,en un formato que permite su fcil instalacin en nuestra mquina). Entre estos paquetesencontramos desde las herramientas bsicas para procesar texto, hojas de clculo, edicin deimgenes, audio, video, hasta aplicaciones de gran utilidad cientca. Es importante recordarque todo este software es free y por lo tanto est al alcance de todos sin la necesidad decomprar licencias ni pagar por actualizaciones. Tambin existe la posibilidad de modicar elsoftware ya que tenemos acceso al cdigo fuente de los programas. Debian siempre mantieneactivas al menos tres versiones que tienen las siguientes clasicaciones:

    stable (estable): Es la ltima versin ocial de Debian que ha sido probada para asegurarsu estabilidad. Actualmente corresponde a la versin 4.0r0 cuyo nombre cdigo es lenny.

    testing (en prueba): Esta es la versin que se est probando para asegurar su estabilidady para luego pasar a ser versin estable. Nombre cdigo sqeeze.

    unstable (inestable): Aqu es donde los programadores verdaderamente desarrollan De-bian y por esto no es muy estable y no se recomienda para el uso diario. Esta versinse denomina siempre sid.

    Para informacin sobre Debian y cmo bajarlo visite la pgina ocial http://www.debian.org.

  • 8 CAPTULO 1. ELEMENTOS DEL SISTEMA OPERATIVO UNIX.

    1.4. Ingresando al sistema.

    En esta seccin comentaremos las operaciones de comienzo y n de una sesin en unixas como la modicacin de la contrasea asignada (que a menudo no es la deseada por elusuario, y que por lo tanto la puede olvidar con facilidad).

    1.4.1. Terminales.

    Para iniciar una sesin es necesario poder acceder a un terminal. Pueden destacarse dostipos de terminales:

    Terminal de texto: consta de una pantalla y de un teclado. Como indica su nombre, enla pantalla slo es posible imprimir caracteres de texto.

    Terminal grco: Consta de pantalla grca, teclado y mouse. Dicha pantalla suele serde alta resolucin. En este modo se pueden emplear ventanas que emulan el comporta-miento de un terminal de texto (xterm o gnome-terminal).

    1.4.2. Login.

    El primer paso es encontrar un terminal libre donde aparezca el login prompt del sistema:

    Debian GNU/Linux 6.0 hostname tty2

    hostname login:

    Tambin pueden ocurrir un par de cosas:

    La pantalla no muestra nada.

    Comprobar que la pantalla est encendida.

    Pulsar alguna tecla o mover el mouse para desactivar el protector de pantalla.

    Otra persona ha dejado una sesin abierta. En este caso existe la posibilidad de intentaren otra mquina o bien nalizar la sesin de dicha persona (si sta no se halla en lasproximidades).

    Una vez que se haya superado el paso anterior de encontrar el login prompt se procedecon la introduccin del Username al prompt de login y despus la contrasea (password)correspondiente.

  • 1.5. ARCHIVOS Y DIRECTORIOS. 9

    1.4.3. Passwords.

    El password puede ser cualquier secuencia de caracteres que sea fcil de recordar por unomismo. Si se olvida, deber pasar un mal rato dicindoselo al Administrador de Sistema. Paraevitar que otra persona obtenga su password y tenga libre acceso a sus archivos, se seguirseconsiderar la siguiente pauta a la hora de elegir su password :

    Incluya maysculas y minsculas, las cuales no son equivalentes, en ella.

    Use caracteres numricos y no alfabticos. Debe tenerse la precaucin de usar caracteresque se puedan encontrar en todos los terminales desde los que se pretenda acceder.

    Evite usar palabras de diccionario.

    Debe cambiar su password si cree que es conocido por otras personas, o descubre quealgn intruso7 est usando su cuenta. En general, es recomendable cambiar el password conregularidad.

    La instruccin para cambiar el password en unix es passwd . A menudo, cuando existenvarias mquinas que comparten recursos (discos duros, impresoras, correo electrnico, . . . ),para facilitar la administracin de dicho se unica los usuarios en una sola base de datoscomn. Dicho sistema se conoce como NIS (Network Information Service)8. Si el sistema usaeste servicio, la modicacin de la contrasea en una mquina requiere el comando yppasswdy supone la modicacin en todas las mquinas que constituyan el dominio NIS.

    1.4.4. Cerrando la sesin.

    Es importante que nunca se deje abierta una sesin, pues algn intruso podra tener libreacceso a archivos de propiedad del usuario y manipularlos de forma indeseable. Para evitartodo esto basta teclear logout o exit y se habr terminado la sesin en dicha mquina9.

    1.5. Archivos y directorios.

    Los datos en los dispositivos de almacenamientos estn organizados en archivos10. Loaarchivos estn organizados en directorios. EL conjunto completo de directorios y archivos elsistema de archivos (lesystem). En unix la lesystem es nica y puede incluir uno o msdispositivos fsicos. Aunque las diferentes distribuciones ubiquen sus programas en diferentespartes, la estructura bsica de directorios en una mquina Linux es ms o menos la misma:

    8Antiguamente se conoca como YP (Yellow Pages), pero debido a un problema de marca registrada deUnited Kingdom of British Telecomunications se adoptaron las siglas nis.

    9En caso que se estuviera trabajando bajo X-Windows debes cerrar la sesin con Log Out Usuario deGnome.

    10Un conjunto ordenados de bytes.

  • 10 CAPTULO 1. ELEMENTOS DEL SISTEMA OPERATIVO UNIX.

    /-|--> bin

    |--> boot

    |--> cdrom

    |--> dev

    |--> emul

    |--> etc

    |--> home

    |--> initrd

    |--> lib

    |--> lib32

    |--> lib64

    |--> media

    |--> mnt

    |--> opt

    |--> proc

    |--> root

    |--> sbin

    |--> selinux

    |--> sys

    |--> tmp

    |--> usr--|--> bin

    |--> games

    |--> include

    |--> lib

    |--> lib32

    |--> lib64

    |--> local -|--> bin

    |--> include

    |--> lib

    |...

    |--> sbin

    |--> share

    |--> src --> linux

    |--> X11R6

    |...

    |--> var--|--> lock

    |--> log

    |--> mail

    |--> www

    |...

    |...

  • 1.5. ARCHIVOS Y DIRECTORIOS. 11

    El rbol que observamos muestra el tpico rbol de directorios en Linux. Pueden haberpequeas variaciones en algunos de los nombres de estos directorios dependiendo de la distri-bucin o versin de Linux que se est usando. Entre los directorios ms destacados tenemos:

    /home - Espacio reservado para las cuentas de los usuarios.

    /bin, /usr/bin - Binarios (ejecutables) bsicos de unix.

    /etc, aqu se encuentran los archivos de conguracin de todo los diferentes softwaresde la mquina.

    /proc, es un sistema de archivos virtuales. Contiene archivos que residen en memoriay no en el disco duro. Hace referencia a los programas que estn corriendo en estemomento en el sistema.

    /dev (device) (dispositivo). Aqu se guardan los archivos asociados a los dispositivos.Se usan para acceder los dispositivos fsicos del sistema y recursos tales como discosduros, modems, memoria, mouse, etc. Algunos dispositivos:

    hd: hda1 ser el disco duro IDE, primario (a), y la primera particin (1). fd: los archivos que empiecen con las letras fd se referirn a los controladores

    de las disketteras: fd0 sera la primera diskettera, fd1 sera la segunda y assucesivamente.

    ttyS: se usan para acceder a los puertos seriales como por ejemplo ttyS0, que esel puerto conocido como com1.

    sd: son los dispositivos SCSI y/o SATA. Su uso es muy similar al del hd. Tambinse usa para denominar a los dispositivos de almacenamiento conectados va USB(pendrives).

    lp: son los puertos paralelos. lp0 es el puerto conocido como LPT1. null: ste es usado como un agujero negro, ya que todo lo que se dirige all

    desaparece.

    tty: hacen referencia a cada una de las consolas virtuales. Como es de suponer,tty1 ser la primera consola virtual, tty2 la segunda, etc.

    /usr/local - Zona con las aplicaciones no comunes a todos los sistemas unix, pero nopor ello menos utilizadas.

    /usr/share/doc aqu se puede encontrar informacin relacionada con aplicaciones (enforma de pginas de manual, texto, html o bien archivos dvi, Postscript o pdf). Tambinencontramos archivos de ejemplo, tutoriales, HOWTO, etc.

  • 12 CAPTULO 1. ELEMENTOS DEL SISTEMA OPERATIVO UNIX.

    1.6. Los archivos y directorios.

    En un sistema computacional la informacin se encuentra en archivos que pueden contener(documentos, datos, textos ASCII, fuentes en diferentes lenguajes (Python, Fortran, C++),ejecutables, imagenes, sonidos, guras, . . . ). Para organizar toda esta informacin se disponede una entidad denominada directorio, que permite el almacenamiento en su interior tantode archivos como de otros directorios11.

    Los nombres de los archivos y directorios unix siguen las mismas convenciones y reglas.

    Los nombres diferencian maysculas y minsculas.

    Los nombres pueden tener hasta 256 caracteres.

    Casi cualquier combinacin de letras y smbolos es aceptable (el caracter / no se per-mite). Sin embargo, hay algunes caracteres no recomendables, ya que incluirlos en elnombre podra hacer el archino no borrable o inaccesible. Los caracteres no recomen-dados | ; : , ! @ # $ ( ) < > / \ " ' ` ~ { } [ ] = + & ^ .

    Se dice que la estructura de directorios en unix es jerrquica o arborescente, debido aque todos los directorios nacen en un mismo punto (denominado directorio raz). De hecho,la zona donde uno trabaja es un nodo de esa estructura de directorios, pudiendo uno a suvez generar una estructura por debajo de ese punto.

    Un archivo se encuentra situado siempre en un directorio y su acceso se realiza empleandoel camino que conduce a l en el rbol de Directorios del Sistema. Este camino esconocido como el path. El acceso a un archivo se puede realizar empleando:

    Path Absoluto, aqul que empieza con /

    Por ejemplo: /etc/printcap

    Path Relativo, aqul que no empieza con /

    Por ejemplo: ../examples/rc.dir.01

    Algunos caracteres especiales para el acceso a archivos son:. Directorio actual.. Directorio superior en el rbol Directorio $HOMEuser Directorio $HOME del usuario user

    11Normalmente se acude a la imagen de una carpeta que puede contener informes, documentos o bien otrascarpetas, y as sucesivamente.

  • 1.7. LOS COMANDOS. 13

    1.7. Los comandos.

    Para ejecutar un comando, basta con teclear su nombre en el prompt del sistema (sedebe tener permiso para ejecutarlo). Las opciones o modicadores empiezan normalmentecon el caracter - (p. ej. comando -l). Para especicar ms de una opcin, se pueden agruparen una sola cadena de caracteres (comando -l -h es equivalente a comando -lh). Algunoscomandos aceptan tambin opciones dadas por palabras completas, en cuyo caso usualmentecomienzan con -- (comando --help). Despus de las opciones van el o los argumentos de sernecesarios.

    1.7.1. rdenes relacionadas con directorios.

    ls (LiSt)Este comando permite mostrar el contenido de un determinado directorio. Si no se le suminis-tra argumento, muestra el contenido, archivos y directorios, del directorio actual. Si se aadeel nombre de un directorio muestra el contenido del directorio suministrado como argumento.Existen varias opciones que modican su funcionamiento entre las que destacan:

    -l (Long listing) proporciona un listado extenso, que consta de los permisos12 de cadaarchivo, el usuario, el tamao del archivo, . . . , etc. Adicionalmente la opcin -h imprimelos tamaos en un formato fcil de leer (Human readable).

    -a (list All) lista tambin los archivos ocultos.

    -R (Recursive) lista recursivamente el contenido de todos los directorios que encuentre.

    -t ordena los archivos por tiempo de modicacin.

    -S ordena los archivos por tamao.

    -r invierte el sentido de un ordenamiento.

    -p agrega un caracter al nal de cada nombre de archivo, indicando el tipo de archivo(por ejemplo, los directorios son identicados con un / al nal).

    Los archivos cuyo nombre comiencen por . se denominan ocultos, as por ejemplo en eldirectorio de partida de un usuario.

    bash$ ls -a user

    . .alias .fvwmrc .login .xinitrc

    .. .cshrc .joverc .profile

    .Xdefaults .enviroment .kshrc .tcshrc

    12Se comentar posteriormente este concepto.

  • 14 CAPTULO 1. ELEMENTOS DEL SISTEMA OPERATIVO UNIX.

    Los caracteres comodn (wildcard) pueden ser empleados para acceder a un conjuntode archivos con caractersticas comunes. El signo * puede sustituir cualquier conjunto decaracteres13 y el signo ? a cualquier caracter individual. Por ejemplo:14

    bash$ ls

    f2c.1 flexdoc.1 rcmd.1 rptp.1 zforce.1

    face.update.1 ftptool.1 rlab.1 rxvt.1 zip.1

    faces.1 funzip.1 robot.1 zcat.1 zipinfo.1

    flea.1 fvwm.1 rplay.1 zcmp.1 zmore.1

    flex.1 rasttoppm.1 rplayd.1 zdiff.1 znew.1

    bash$ ls rp*

    rplay.1 rplayd.1 rptp.1

    bash$ ls *e??

    face.update.1 zforce.1 zmore.1

    1.7.2. Los comandos para directorios.

    pwd (Print Working Directory)Este comando proporciona el nombre del directorio actual.

    cd (Change Directory)Permite moverse a travs de la estructura de directorios. Si no se le proporciona argumentose provoca un salto al directorio $HOME. El argumento puede ser un path absoluto o relativode un directorio. cd - vuelve al ltimo directorio visitado.

    mkdir (MaKe DIRectory)Crea un directorio con el path (absoluto o relativo) proporcionado.

    rmdir (ReMove DIRectory)Elimina un directorio con el path (absoluto o relativo) suministrado. Dicho directorio debede estar vaco.

    1.7.3. Viendo archivos en pantalla.

    Este conjunto de rdenes permite visualizar el contenido de un archivo sin modicar sucontenido.

    cat (ConcATenate)Concatena dos o ms archivos y los muestra en pantalla. Si el comando es llamado con unslo archivo de argumento muestra (vuelca) el contenido del mismo en pantalla.

    13Incluido el punto `.', unix no es dos.14bash$ es el prompt en todos los ejemplos.

  • 1.7. LOS COMANDOS. 15

    more

    Muestra el contenido de un archivodividiendolo en pginas.

    less

    Es una versin mejorada del anterior. Permite moverse en ambas direcciones. Otra ventajaes que no lee el archivo entero antes de arrancar.

    1.7.4. Copiando, moviendo y borrando archivos.

    cp (CoPy)Copia un archivo(s) con otro nombre y/o a otro directorio, por ejemplo, el comando paracopiar el archivo1.txt con el nombre archivo2.txt es:

    cp archivo1.txt archivo2.txt

    Veamos algunas opciones:

    -a copia en forma recursiva, no sigue los link simblicos y preserva los atributos de locopiado.

    -i (interactive), impide que la copia provoque una prdida del archivo destino si steexiste15.

    -R (recursive), copia un directorio y toda la estructura que cuelga de l.

    mv (MoVe)Mueve un archivo(s) a otro nombre y/o a otro directorio, por ejemplo, el comando para moverel archivo1.txt al nombre archivo2.txt es:

    mv archivo1.txt archivo2.txt

    Este comando dispone de opciones anlogas al anterior.

    rm (ReMove)Borra un archivo(s). En caso de que el argumento sea un directorio y se haya suministradola opcin -r o -R, es posible borrar el directorio y todo su contenido. La opcin -i preguntaantes de borrar.

    15Muchos sistemas tienen esta opcin habilitada a travs de un alias, para evitar equivocaciones.

  • 16 CAPTULO 1. ELEMENTOS DEL SISTEMA OPERATIVO UNIX.

    1.7.5. Espacio de disco.

    El recurso de almacenamiento en el disco es siempre limitado. A continuacion, se comentanun par de comandos relacionados con la ocupacin de este recurso:

    du (Disk Usage)Permite ver el espacio de disco ocupado (en bloques de disco16) por el archivo o directoriosuministrado como argumento. La opcin -s impide que cuando se aplique recursividad enun directorio se muestren los subtotales. La opcin -h imprime los tamaos en un formatofcil de leer (Human readable).

    df (Disk Free)Muestra los sistemas de archivos que estn montados en el sistema, con las cantidades totales,usadas y disponibles para cada uno. df -h muestra los tamaos en formato fcil de leer.

    1.7.6. Links.

    ln (LiNk)Un enlace (link), permite el uso de un archivo en otro disinto al original sin necesidad decopiarlo, con el consiguiente ahorro de espacios. Un enlace puede ser:

    hard link : se puede realizar slo entre archivos del mismo sistema de archivos. El archivoenlazado apunta a la zona de disco donde se ubica el archivo original. Por tanto, si seelimina el archivo original, el enlace sigue teniendo acceso a dicha informacin. Es elenlace por omisin.

    symbolic link : permite enlazar archivos/directorios17 de diferentes sistemas de archivos.El archivo enlazado apunta al nombre del original. As si se elimina el archivo originalel enlace apunta hacia un nombre sin informacin asociada. Para realizar este tipo deenlace debe emplearse la opcin -s.

    Un enlace permite el uso de un archivo en otro directorio distinto del original sin necesidadde copiarlo, con el consiguiente ahorro de espacio. Veamos un ejemplo. Creemos un enlaceclsico en Linux, al directorio existente linux-3.1.4 nombrmoslo sencillamente linux.

    mitarro:/usr/src# ln -s linux-3.1.4 linux

    161 bloque normalmente es 1 Kbyte.17Debe hacerse notar que los directorios slo pueden ser enlazados simblicamente.

  • 1.8. PROTECCIN DE ARCHIVOS Y PERMISOS. 17

    1.8. Proteccin de archivos y permisos.

    Dado que el sistema de archivos unix es compartido por un conjunto de usuarios, surge elproblema de la necesidad de privacidad. Sin embargo, dado que existen conjuntos de personasque trabajan en comn, es necesaria la posibilidad de que un conjunto de usuarios puedantener acceso a una serie de archivos (que puede estar limitado para el resto de los usuarios).Cada archivo y directorio del sistema dispone de un propietario, un grupo al que pertenecey unos permisos. Existen tres tipos fundamentales de permisos:

    lectura (r-Read): en el caso de un archivo, signica poder examinar el contenido delmismo; en el caso de un directorio signica poder listar el contenido de dicho directorio.

    escritura (w-Write): en el caso de un archivo signica poder modicar su contenido;en el caso de un directorio permite crear nuevos archivos o directorios en su interior.

    ejecucin (x-eXecute): en el caso de un archivo signica que ese archivo se puedaejecutar (archivo de procedimientos o binario); en el caso de un directorio permiteacceder a los archivos dentro de l.

    Se distinguen tres conjuntos de usuarioss sobre las que se deben especicar permisos:

    user: el usuario propietario del archivo.

    group: el grupo propietario del archivo (al que pertenece el usuario). Cada usuariopuede pertenecer a uno o varios grupos y el archivo generado pertenece a uno de losmismos.

    other: el resto de los usuarios (excepto el usuario y los usuarios que pertenezcan algrupo)

    Tambin se puede emplear all que es la unin de todos los anteriores. Para visualizar lasprotecciones de un archivo o directorio se emplea la orden ls -l, cuya salida es de la forma:

    -rw-r--r-- ...otra informacin... nombre

    Los 10 primeros caracteres muestran las protecciones de dicho archivo:

    El primer caracter indica el tipo de archivo de que se trata:

    - archivo d directorio l enlace (link) c dispositivo de caracteres (p.e. puerta serial) b dispositivo de bloques (p.e. disco duro) s socket (conexin de red)

  • 18 CAPTULO 1. ELEMENTOS DEL SISTEMA OPERATIVO UNIX.

    Los caracteres 2, 3, 4 son los permisos de usuario

    Los caracteres 5, 6, 7 son los permisos del grupo

    Los caracteres 8, 9, 10 son los permisos del resto de usuarios

    As en el ejemplo anterior -rw-r--r-- se trata de un archivo donde el usuario puede leery escribir, mientras que el grupo y el resto de usuarios slo pueden leer. Estos suelen ser lospermisos por omisin para un archivo creado por un usuario. Para un directorio los permisospor omisin suelen ser: drwxr-xr-x, donde se permite al usuario entrar en el directorio yejecutar rdenes desde l.

    chmod (CHange MODe)Esta orden permite modicar los permisos de un archivo.

    yo@mitarro:~$chmod permisos archivos

    con opcin -R es recursiva.

    Existen dos modos de especicar los permisos, el modo absoluto o numrico y el modosimblico o literal.

    Modo absoluto o numrico. Se realiza empleando un nmero que resulta de la ORbinario de los siguientes modos:

    400 lectura por el propietario.200 escritura por el propietario.100 ejecucin (bsqueda) por el propietario.040 lectura por el grupo.020 escritura por el grupo.010 ejecucin (bsqueda) por el grupo.004 lectura por el resto.002 escritura por el resto.001 ejecucin (bsqueda) por el resto.4000 Set User ID, cuando se ejecuta el proceso corre con los permisos del dueo del archivo.

    Por ejemplo:

    yo@mitarro:~$chmod 640 *.txt

    Permite la lectura y escritura por el usuario, lectura para el grupo y ningn permiso parael resto, de un conjunto de archivos que acaban en .txt

  • 1.8. PROTECCIN DE ARCHIVOS Y PERMISOS. 19

    Modo simblico o literal. Se realiza empleando una cadena (o cadenas separadas porcomas) para especicar los permisos. Esta cadena se compone de los siguientes tres elementos:who operation permission

    who : es una combinacin de:

    u : user g : group o : others a : all (equivalente a ugo)

    Si se omite este campo se supone a, con la restriccin de no ir en contra de la mscarade creacin (umask).

    operation: es una de las siguientes operaciones:

    + : aadir permiso. - : eliminar permiso. = : asignar permiso, el resto de permisos de la misma categora se anulan.

    permission: es una combinacin de los caracteres:

    r : read. w : write. x : execute. s : en ejecucin ja el usuario o el grupo.

    Por ejemplo:

    yo@mitarro:~$chmod u+x tarea,sh

    Permite ejecucin por parte del usuario18 del archivo tarea.sh.

    yo@mitarro:~$chmod u=rx, go=r *.txt

    Permite la lectura y ejecucin del usuario, y slo la lectura por parte del grupo y el resto deusuarios.

    18Un error muy frecuente es la creacin de un archivo de rdenes (script le) y olvidar permitir la ejecucindel mismo.

  • 20 CAPTULO 1. ELEMENTOS DEL SISTEMA OPERATIVO UNIX.

    umask

    Esta es una orden intrnseca del Shell que permite asignar los permisos que se desea tenganlos archivos y directorios por omisin. El argumento que acompaa a la orden es un nmerooctal que aplicar una xor sobre los permisos por omisin (rw-rw-rw-) para archivos y(rwxrwxrwx) para directorios. El valor por omisin de la mscara es 022 que habilita alusuario para lectura-escritura, al grupo y al resto para lectura. Sin argumentos muestra elvalor de la mscara.

    chgrp (CHange GRouP)

    Cambia el grupo propietario de una serie de archivos/directorios

    yo@mitarro:~$chgrp grupo archivos

    El usuario que efecta esta orden debe pertenecer al grupo mencionado.

    chown (CHange OWNer)Cambia el propietario y el grupo de una serie de archivos/directorios

    yo@mitarro:~$chown usuario:grupo archivos

    La opcin -r hace que la orden se efecte recursivamente.

    id

    Muestra la identicacin del usuario19, as como el conjunto de grupos a los que el usuariopertenece.

    yo@mitarro:~$id

    uid=1001(yo)gid=1001(yo) groups=1001(yo),24(cdrom),44(video)

    user@hostname:~$

    echo

    Despliega en pantalla su argumento como mensaje, sin argumento despliega una lnea enblanco. La opcin -n elimina el cambio de lnea al nal del mensaje.

    yo@mitarro:~$ echo Hola curso

    Hola curso

    yo@mitarro:~$ echo

    yo@mitarro:~$ echo -n Hola curso

    Hola cursoyo@mitarro:~$

    19A pesar de que el usuario se identica por una cadena denominada username, tambin existe un nmerodenominado uid que es un identicativo numrico de dicho usuario.

  • 1.9. SHELLS. 21

    1.9. Shells.

    El sistema operativo unix soporta varios intrpretes de comandos o shells, que ayudan aque la interaccin con el sistema sea lo ms cmoda y amigable posible. La eleccin de cules la shell ms cmoda es algo personal; en este punto slo indicaremos algunos de los mspopulares:

    sh : Bourne SHell, el shell bsico, no pensado para uso interactivo.

    csh : C-SHell, shell con sintaxis como el lenguaje C. El archivo de conguracin es.cshrc (en el directorio $HOME).

    ksh : Korn-SHell, shell diseada por David Korn en los Laboratorios AT&T Bell. Esun intento para una shell interactiva y para uso en script. Su lenguaje de comandos esun superconjunto de el lenguaje de shell sh.

    tcsh : alTernative C-Shell (Tenex-CSHell), con editor de lnea de comando. El archivode conguracin es .tcshrc, o en caso de no existir, .cshrc (en el directorio $HOME).

    bash : Bourne-Again Shell, con lo mejor de sh, ksh y tcsh. El archivo de conguracines .bash_profile cuando se entra a la cuenta por primera vez, y despus el archivo deconguracin es .bashrc siempre en el directorio $HOME. La lnea de comando puede sereditada usando comandos (secuencias de teclas) del editor emacs. En bash el modo decompletado (le completion) es automtico usando TAB cuando el shell est en modointeractivo. Es el shell por defecto de Linux.

    1.9.1. Archivos de conguracin.

    En los archivo de conguracin de los distintos shells se encuentran las deniciones dealgunas variables de entorno o ambiente como el camino de bsqueda PATH, adems de losaliases y otras conguraciones personales.

    1.9.2. Cambiar de shell.

    Si queremos cambiar de shell en un momento dado, slo ser necesario que escribamos,en al actual shell, el nombre del mismo y lo ejecutamos para estar usando dicho shell.

    Si queremos usar de forma permanente otro shell del que tenemos asignado por omisin20

    podemos emplear la orden chsh que permite realizar esta accin.

    20Por omisin se asigna bash.

  • 22 CAPTULO 1. ELEMENTOS DEL SISTEMA OPERATIVO UNIX.

    1.9.3. Caracteres especiales.

    Veamos unos caracteres con especial signicado para el Shell:

    ` 21 permite que el output de un comando reemplace al nombre del comando. Porejemplo:

    yo@mitarro:~$ echo Estoy en`pwd`

    Estoy en /home/yo

    yo@mitarro:~$

    ' 22 preserva el signicado literal de cada uno de los caracteres de la cadena quedelimita.

    yo@mitarro:~$ echo 'Estoy en`pwd`'

    Estoy en `pwd`

    yo@mitarro:~$

    23 preserva el signicado literal de todos los caracteres de la cadena que delimita,salvo $, `, \.

    yo@mitarro:~$ echo "Estoy en`pwd`"

    Estoy en /home/yo

    yo@mitarro:~$

    ; permite la ejecucin de ms de una orden en una sola lnea de comando.

    yo@mitarro:~$ mkdir tmp;cd tmp

    yo@mitarro:~/tmp$

    yo@mitarro:~/tmp$ echo Hola;echo

    Hola

    yo@mitarro:~/tmp$

    1.9.4. Variables de entorno.

    Las variables de entorno permiten la conguracin, por defecto, de muchos programascuando ellos buscan datos o preferencias. Se encuentran denidas en los archivos de congu-racin anteriormente mencionados. Para referenciar a las variables se debe poner el smbolo$ delante, por ejemplo, para mostrar el camino al directorio por defecto del usuario:

    21Acento grave o inclinado hacia atrs, backquote.22Acento agudo o inclinado hacia adelante, single quote.23double quote.

  • 1.9. SHELLS. 23

    yo@mitarro:~$ echo $HOME

    /home/yo

    yo@mitarro:~$

    Las variables de entorno ms importantes son:

    HOME - El directorio por defecto del usuario.

    PATH - El camino de bsqueda, una lista de directorios separados con `:' para buscarprogramas.

    EDITOR - El editor por defecto del usuario.

    DISPLAY - Bajo el sistema de X windows, el nombre de mquina y pantalla que estusando. Si esta variable toma el valor :0 el despliegue es local.

    TERM - El tipo de terminal. En la mayora de los casos bajo el sistema X windows setrata de xterm y en la consola en Linux es linux. En otros sistemas puede ser vt100.

    SHELL - La shell por defecto.

    MANPATH - Camino para buscar pginas de manuales.

    PAGER - Programa de paginacin de texto (less o more).

    TMPDIR - Directorio para archivos temporales.

    1.9.5. Aliases.

    Para facilitar la entrada de algunas rdenes o realizar operaciones complejas, los shellsinteractivos permiten el uso de aliases.

    La orden alias permite ver qu aliases hay denidos y tambin denir nuevos. Es corrientedenir el alias rm =`rm -i', de esta forma la orden siempre pide conrmacin para borrarun archivo.

    Si alguna vez quieres usar rm sin alias, slo hace falta poner delante el smbolo \, deno-minado backslash . Por ejemplo \rm elimina los alias aplicados a rm.

    1.9.6. Ejecucin de comandos.

    Si el comando introducido corresponde a un alias del shell, primero se reemplaza y luegose trata de ejecutar. Si el comando es propio del shell (built-in), se ejecuta directamente.

    En caso contrario:

  • 24 CAPTULO 1. ELEMENTOS DEL SISTEMA OPERATIVO UNIX.

    Si el comando contiene /, el shell lo considera un path absoluto e intenta resolverlo(entrar en cada directorio especicado para encontrar el comando y ejecutarlo).

    En caso contrario el shell busca en una tabla hash table que contiene los nombres delos comandos que se han encontrado en los directorios especicados en la variablede ambiente PATH, cuando ha arrancado el shell.

    1.9.7. Comandos del shell.

    bash se considera un shell interactivo, permitiendo la edicin de la lnea de comandos,y el acceso a la historia de rdenes (readline). En uso normal (historia y editor de lnea decomandos) bash es compatible con otras shells como tcsh y ksh, ver apndice. En bash elmodo de completado (le completion) es automtico (usando TAB slo) si el shell est enmodo interactivo.

    help

    Ayuda interna sobre los comandos del shell.

    set

    Muestra el valor de todas las variables.

    VARIABLE=VALUE

    Permite asignar el valor de una variable de entorno. Para que dicha variable sea heredadaes necesario emplear: export VARIABLE o bien combinarlas: export VARIABLE=VALUE.

    alias

    En bash, alias slo sirve para substitucin simple de una cadena por otra. Por ejemplo:alias ls='ls -F'. Para crear alias con argumentos se usan funciones, ver la documentacin.

    unalias name

    Elimina un alias asignado.

    for var in wordlist do comandos done

    A la variable var, que puede llamarse de cualquier modo, se le asignan sucesivamente losvalores de la cadena wordlist, y se ejecuta el conjunto de comandos. El contenido de dichavariable puede ser empleado en los comandos: $var. Ejemplo:

    $ for i in 1 2 tres 4; do echo $i; done

    1

    2

    tres

    4

  • 1.9. SHELLS. 25

    history

    Muestra las ltimas rdenes introducidas en el shell. Algunos comandos relacionados con elCommand history son:

    !!

    Repite la ltima orden.

    !n

    Repite la orden n-sima.

    !string

    Repite la orden ms reciente que empiece por la cadena string.

    !?string

    Repite la orden ms reciente que contenga la cadena string.

    str1str2 o !!:s/str1/str2/(substitute) Repite la ltima orden reemplanzando la primera ocurrencia de la cadenastr1 por la cadena str2.

    !!:gs/str1/str2/

    (global substitute) Repite la ltima orden reemplazando todas las ocurrencias de lacadena str1 por la cadena str2.

    !$

    Es el ltimo argumento de la orden anterior que se haya tecleado.

    source file

    Ejecuta las rdenes del chero file en el shell actual.

    umask value

    Asigna la mscara para los permisos por omisin.

    Los comandos umask , source , history , unalias y hash 24, funcionan igual en lashell tcsh.

    24En bash y sh la hash table se va generando dinmicamente a medida que el usuario va empleando lasrdenes. As el arranque del shell es ms rpido, y el uso de orden equivalente hash -r casi nunca hace falta.

  • 26 CAPTULO 1. ELEMENTOS DEL SISTEMA OPERATIVO UNIX.

    1.9.8. Redireccin.

    Cuando un programa espera que se introduzca algo (se teclee), aquello que el usuarioteclea se conoce como el Standard Input : stdin. Los caracteres que el programa retorna porpantalla es lo que se conoce como Standard Output : stdout (o Standard Error : stderr25).

    El signo < permite que un programa reciba el stdin desde un archivo en vez de la in-teraccin con el usuario. Por ejemplo: mail root@mitarro < file, invoca el comando mailcon argumento (destinatario del mensaje) root@mitarro, siendo el contenido del mensaje elcontenido del archivo file en vez del texto que usualmente teclea el usuario.

    Ms a menudo aparece la necesidad de almacenar en un archivo la salida de un comando.Para ello se emplea el signo >. Por ejemplo, man bash > file, invoca el comando man con ar-gumento (informacin deseada) bash pero indicando que la informacin debe ser almacenadaen el archivo file en vez de ser mostrada por pantalla.

    En otras ocasiones uno desea que la salida de un programa sea la entrada de otro. Estose logra empleando los denominados pipes, para ello se usa el signo |. Este signo permite queel stdout de un programa sea el stdin del siguiente. Por ejemplo:cat manual.txt | more Invoca la orden de concatenacin, con un solo archivo, vuelca elarchivo sobre el stdout hacia el paginador more, de forma que podamos ver pgina a pginael archivo.

    A parte de los smbolos mencionados existen otros que permiten acciones tales como:

    >> Aadir el stdout al nal del archivo indicado (append).26

    &> o >& (slo csh, tcsh y bash) Redireccionar el stdout y stderr.

    2> Redirecciona slo el stderr.

    >>& Igual que >& pero en modo append.

    1.9.9. Archivos de script.

    Un archivo de script es una sucesin de comandos de la shell que se ejecutan secuencial-mente. Veamos un ejemplo simple:

    #!/bin/bash

    variable="/home/yo"

    cp $1 /tmp/$2

    rm $1

    cd $variable

    # Hecho por mi

    25Si estos mensajes son de error.26En bash, si el archivo no existe, es creado.

  • 1.9. SHELLS. 27

    La primera lnea declara la shell especca que se quiere usar. En la segunda lnea hay unadeclaracin de una variable interna. La tercera contiene los dos primeros argumentos con quefue llamado el script. Por ejemplo, si el anterior script est en un archivo llamado ejemplo,el comando ejemplo file1 file2 asocia $1 a file1 y $2 a file2. La lnea 5 hace uso de lavariable interna dentro de un comando. La ltima lnea, que comienza con un # correspondea un comentario. Notemos que la primera tambin es un comentario, pero la combinacin #!en la primera lnea fuerza a que se ejecute esa shell.

    Esto slo es una mnima pincelada de una herramienta muy poderosa y til. Los comandosdisponibles en la shell conforman un verdadero lenguaje de programacin en s, y los scriptspueden disearse para realizar tareas montonas y complejas. ste es un tema que le sertil profundizar.

    1.9.10. Filtros.

    Existe un conjunto de rdenes en unix que permiten el procesamiento de archivos de texto.Se denominan ltros (Unix Filters), porque normalmente se trabaja empleando redireccinrecibiendo datos por su stdin27 y retornndolos modicados por su stdout28.

    cat (ConcATenate)Concatena dos o ms archivos y los muestra en pantalla. Si el comando es llamado con unslo archivo de argumento muestra (vuelca) el contenido del mismo en el stdout.

    yo@mitarro:~$ cat /etc/hostname

    mitarro

    yo@mitarro:~$

    Tambin lo podemos usar para crear un archivo

    yo@mitarro:~$ cat > archivo.txt

    Este es mi archivo

    con muchas lineas

    ^d

    yo@mitarro:~$

    El caracter nal ^d corresponde a n de archivo y termina el ingreso.

    Para facilitar la comprensin de los ejemplos siguientes crearemos cuatro archivos llama-dos: milista.txt, tulista.txt, tercero.txt y cuarto.txt usando el ejemplo anterior:

    milista.txt tulista.txt tercero.txt cuarto.txt

    1 190 1 190 11 b daniella Maria.

    2 280 2 281 33 c maria Magdalena

    3 370 3 370 222 a NICOLLE sarA

    27Entrada estndar.28Salida estndar.

  • 28 CAPTULO 1. ELEMENTOS DEL SISTEMA OPERATIVO UNIX.

    Tee (Tee)Lee desde stdin y escribe en el stdout y en una archivo.

    yo@mitarro:~$ cat milista.txt |tee lista.txt

    1 190

    2 280

    3 370

    yo@mitarro:~$ cat lista.txt

    1 190

    2 280

    3 370

    yo@mitarro:~$

    Con la opcin -a agrega al archivo pasado como argumento (modo append).

    seq

    Genera una secuencia de nmeros naturales consecutivos.

    yo@mitarro:~$ seq 4 8

    4

    5

    6

    7

    8

    yo@mitarro:~$ seq -s, 4 8

    4,5,6,7,8

    Con la opcin -s uno puede indicar el separador, en este caso el caracter ,. Por defecto elseparador es \n.

    cut

    Para un archivo compuesto por columnas de datos, permite escribir sobre la salida ciertointervalo de columnas. La opcin -b N-M permite indicar el intervalo en bytes que se escribirnen la salida. La opcin -b N,M permite indicar el los bytes que se escribirn en la salida.

    yo@mitarro:~$ cut -b 3-4 milista.txt

    19

    28

    37

    yo@mitarro:~$ cut -b 3,5 milista.txt

    10

    20

    30

  • 1.9. SHELLS. 29

    paste

    Mezcla lneas de distintos archivos. Escribe lneas en el stdout pegando secuencialmente laslneas correspondientes de cada uno de los archivo separadas por tab. Ejemplo, supongamosque tenemos nuestros archivos milista.txt y tulista.txt y damos el comando

    yo@mitarro:~$ paste milista.txt tulista.txt

    1 190 1 190

    2 280 2 281

    3 370 3 370

    yo@mitarro:~$

    sed

    Es un editor de ujo. Veamos algunos ejemplos

    yo@mitarro:~$ sed = milista.txt

    1

    1 190

    2

    2 280

    3

    3 370

    yo@mitarro:~$

    Numera las lneas.

    yo@mitarro:~$ sed -n '3p' milista.txt

    3 370

    yo@mitarro:~$

    Slo muestra la lnea 3. El modicador -n suprime la impresin de todas las lneas exceptoaquellas especicadas por p. Separando por coma damos un rango en el nmero de lneas.

    yo@mitarro:~$ sed '2q' milista.txt

    1 190

    2 280

    yo@mitarro:~$

    Muestra hasta la lnea 2 y luego se sale de sed.

    yo@mitarro:~$ sed 's/0/a/g' milista.txt

    1 19a

    2 28a

    3 37a

    yo@mitarro:~$

  • 30 CAPTULO 1. ELEMENTOS DEL SISTEMA OPERATIVO UNIX.

    Reemplaza todos los 0 del archivo por la letra a. ste es uno de los usos ms comunes.

    yo@mitarro:~$ sed '/2 2/s/0/a/g' milista.txt

    1 190

    2 28a

    3 370

    yo@mitarro:~$

    Busca las lneas con la secuencia 2 2 y en ellas reemplaza todos los 0 por la letra a.

    yo@mitarro:~$ sed 's/1/XX/2' milista.txt

    1 XX90

    2 280

    3 370

    yo@mitarro:~$

    Reemplaza la segunda aparicin de un 1 en una lnea por los caracteres XX.

    A continuacin, mostramos otras posibilidades del comando sed

    Para remover una lnea especica (X) del archivo file.txt

    yo@mitarro:~$ sed 'Xd' file.txt

    Para remover un intervalo de lneas del archivo file.txt

    yo@mitarro:~$ sed 'X,Yd' file.txt

    Para mostrar slo las lneas X e Y del archivo file.txt

    yo@mitarro:~$ sed -n 'Xp;Yp' file.txt

    Para mostrar el archivo file.txt, salvo las lneas que contengan key

    yo@mitarro:~$ sed '/key/d' file.txt

    Para mostrar el archivo file.txt, slo las lneas que contengan key

    yo@mitarro:~$ sed -n '/key/p' file.txt

    Para mostrar el archivo file.txt salvo las lneas que comienzan con #

    yo@mitarro:~$ sed '/^#/d' file.txt

  • 1.9. SHELLS. 31

    Expresiones regulares:^ Matches al comienzo de la lnea$ Matches al nal de la lnea, se pone despus del caracter a buscar.. Matches cualquier caracter.[] Matches con todos los caracteres dentro de los parntesis

    diff

    Permite comparar el contenido de dos archivos o directorios

    yo@mitarro:~$ diff milista.txt tulista.txt

    2c2

    < 2 280

    ---

    > 2 281

    yo@mitarro:~$

    Hay una diferencia entre los archivos en la segunda la.

    sort

    Permite ordenar alfabticamente

    yo@mitarro:~$ sort tercero.txt

    11 b

    222 a

    33 c

    yo@mitarro:~$ sort -r tercero.txt

    33 c

    222 a

    11 b

    yo@mitarro:~$ sort -n tercero.txt

    11 b

    33 c

    222 a

    yo@mitarro:~$ sort -k 2 tercero.txt

    222 a

    11 b

    33 c

    yo@mitarro:~$

    La opcin -n considera los valores numricos y la opcin -r invierte el orden. La opcin -kpermite especicar la columna a usar para hacer el sort.

  • 32 CAPTULO 1. ELEMENTOS DEL SISTEMA OPERATIVO UNIX.

    find

    Permite la bsqueda de un archivo en la estructura de directorios

    yo@mitarro:~$ find . -name file.dat -print

    Comenzando en el directorio actual(.) recorre la estructura de directorios buscando el archivofile.dat, cuando lo encuentre imprime el path al mismo, actualmente es innecesaria laopcin print.

    yo@mitarro:~$ find . -name '*~' -exec rm '{}' \;

    Esta es otra aplicacin de find que busca en la estructura de directorios un archivo quetermine en ~ y lo borra.

    El comando xargs ordena repetir orden para cada argumento que se lea desde stdin.Este lo podemos combinar con find.

    yo@mitarro:~$ find . -name '*.mp3' -print | xargs mv /home/yo/musica \;

    Logrando un comando que busca en la estructura de directorios todos los archivos quetermines en .mp3, y los mueve al directorio /home/yo/musica.

    grep

    Permite la bsqueda de una cadena de caracteres en uno o varios archivos, imprimiendo elnombre del archivo y la lnea en que se encuentra la cadena.

    yo@mitarro:~$ grep 1 *list.txt

    milista.txt:1 190

    tulista.txt:1 190

    tulista.txt:2 281

    yo@mitarro:~$

    Algunas opciones tiles

    -c Elimina la salida normal y slo cuenta el nmero de apariciones de la cadena encada archivo.

    -i Ignora para la comparacin entre la cadena dada y el archivo, si la cadena est enmaysculas o minsculas.

    -n Incluye el nmero de lneas en que aparece la cadena en la salida normal.

    -r Hace la bsqueda recursiva.

    -v Invierte la bsqueda mostrando todas las lneas donde no aparece la cadena pedida.

  • 1.9. SHELLS. 33

    head

    Muestra las primeras diez lneas de un archivo.head -30 file Muestra las 30 primeras lneas de le.

    yo@mitarro:~$ head -1 milista.txt

    1 190

    yo@mitarro:~$

    tail

    Muestra las diez ltimas lneas de un archivo.tail -30 file Muestra las 30 ltimas lneas de le.tail +30 file Muestra desde la lnea 30 en adelante de le.

    yo@mitarro:~$ tail -1 milista.txt

    3 370

    yo@mitarro:~$

    La opcin -f permite que se actualice la salida cuando el archivo crece.

    awk

    Es un procesador de archivos de texto que permite la manipulacin de las lneas de forma talque tome decisiones en funcin del contenido de la misma. Ejemplo, supongamos que tenemosnuestro archivo milista.txt con sus dos columnas

    yo@mitarro:~$ awk '{print }' milista.txt

    1 190