From 7f3bf728bec03a294506bd0f6a19496f90353567 Mon Sep 17 00:00:00 2001 From: oscardaniel88 Date: Sat, 1 Oct 2016 21:03:29 -0500 Subject: [PATCH] Tutoriales Resueltos --- 0-docker.Rmd | 67 +++--- 0-docker.html | 285 +++++++++++++++++++++++++ 1-cli.Rmd | 185 ++++++++-------- 1-cli.html | 328 +++++++++++++++++++++++++++++ alumnos/oscardaniel88/0-docker.Rmd | 202 ++++++++++++++++++ alumnos/oscardaniel88/1-cli.txt | 106 ++++++++++ 6 files changed, 1049 insertions(+), 124 deletions(-) create mode 100644 0-docker.html create mode 100644 1-cli.html create mode 100644 alumnos/oscardaniel88/0-docker.Rmd create mode 100644 alumnos/oscardaniel88/1-cli.txt diff --git a/0-docker.Rmd b/0-docker.Rmd index c13c1a3..11b6c19 100644 --- a/0-docker.Rmd +++ b/0-docker.Rmd @@ -1,35 +1,37 @@ --- title: "Docker" -author: "Adolfo De Unánue T." +author: "Adolfo De Unánue T." date: "14/01/2016" -output: html_document +output: + html_document: default + pdf_document: default --- # Docker -## ¿Qué es docker? +## ¿Qué es docker? -Es una plataforma de virtualización además de un conjunto de comandos para establecer *workflows* de trabajo que permitan crear, instalar, compartir etc, aplicaciones. +Es una plataforma de virtualización además de un conjunto de comandos para establecer *workflows* de trabajo que permitan crear, instalar, compartir etc, aplicaciones. -**Docker** está compuesto de dos partes un *daemon* o un servidor y un *cliente*, el comando `docker`. +**Docker** está compuesto de dos partes un *daemon* o un servidor y un *cliente*, el comando `docker`. -## Instalación +## Instalación - [Mac OS X](https://docs.docker.com/mac/step_one/) - [Ubuntu](https://docs.docker.com/linux/step_one/) - [MS Windows](https://docs.docker.com/windows/step_one/) -## Imágen y contenedores +## Imágen y contenedores -Una **imagen** es una especie de cascarón o plantilla no modificable. +Una **imagen** es una especie de cascarón o plantilla no modificable. > **Ejemplo** -> Ejemplos de imágenes son `ubuntu` y la imagen de la clase con la que trabajaremos (`nanounanue/docker-ds`). +> Ejemplos de imágenes son `ubuntu` y la imagen de la clase con la que trabajaremos (`nanounanue/docker-ds`). -Un **contenedor** es creado a partir de una *imagen*. Los contenedores es aquello con lo que vas a interactuar. Pueden ser ejecutados, iniciados, detenidos, movidos, borrados, etc. Cada contenedor es un ambiente aislado. Aunque pueden ser [conectados entre sí](http://docs.docker.com/userguide/dockerlinks/). +Un **contenedor** es creado a partir de una *imagen*. Los contenedores es aquello con lo que vas a interactuar. Pueden ser ejecutados, iniciados, detenidos, movidos, borrados, etc. Cada contenedor es un ambiente aislado. Aunque pueden ser [conectados entre sí](http://docs.docker.com/userguide/dockerlinks/). -Para ver qué imágenes hay en tu computadora: +Para ver qué imágenes hay en tu computadora: ``` docker images @@ -38,16 +40,16 @@ docker images ## Ejercicio -> **NOTA:** Si no tienen instalado `docker` por favor júntense con un compañero y háganlo luego en su casa. +> **NOTA:** Si no tienen instalado `docker` por favor júntense con un compañero y háganlo luego en su casa. -> **NOTA:** Si están en `ubuntu` y no configuraron su usuario como miembros del grupo `docker` agreguen `sudo` al principio de cada comando +> **NOTA:** Si están en `ubuntu` y no configuraron su usuario como miembros del grupo `docker` agreguen `sudo` al principio de cada comando -> **NOTA** Al final de las instrucciones de instalación en ubuntu, viene como eliminar la molestia de teclear `sudo` antes de todos los comandos. +> **NOTA** Al final de las instrucciones de instalación en ubuntu, viene como eliminar la molestia de teclear `sudo` antes de todos los comandos. - En su computadora, abran una terminal -- Verifiquen que el cliente `docker` esté instalado tecleando `docker` -- Verifiquen que el *daemon* esté corriendo con `docker run hello-world`, se debería de mostrar algo parecido a lo siguiente: +- Verifiquen que el cliente `docker` esté instalado tecleando `docker` +- Verifiquen que el *daemon* esté corriendo con `docker run hello-world`, se debería de mostrar algo parecido a lo siguiente: ``` docker run hello-world @@ -86,9 +88,9 @@ For more examples and ideas, visit: docker pull ubuntu:latest ``` -- (Si la red está imposible, pidan el `USB stick` y ejecuten `docker load < /home/ubuntu-latest.tar`) +- (Si la red está imposible, pidan el `USB stick` y ejecuten `docker load < /home/ubuntu-latest.tar`) -- Verifiquen que la imagen esté en su computadora +- Verifiquen que la imagen esté en su computadora ``` docker images @@ -101,19 +103,19 @@ docker images docker run -i -t ubuntu /bin/bash ``` -(Aquí podemos hacer lo que se pide en las siguientes secciones de este *lecture*) +(Aquí podemos hacer lo que se pide en las siguientes secciones de este *lecture*) Para salir de este contendor tecleen `exit`. -- Para verificar que el contenedor está ahí: +- Para verificar que el contenedor está ahí: ``` docker ps -a ``` -**Nota** Si estás en MacOS ó Windows, apunta la dirección IP en la cual está corriendo `boot2docker`: +**Nota** Si estás en MacOS ó Windows, apunta la dirección IP en la cual está corriendo `boot2docker`: ``` boot2docker ip @@ -122,7 +124,7 @@ boot2docker ip -## ¿Y la imagen de la clase? +## ¿Y la imagen de la clase? Descargarla @@ -141,9 +143,9 @@ El `path_a_carpeta` se refiere a la salida del comando `pwd` en tu carpeta donde En MS Windows regularmente es algo como `/c/Users//proyectos` y en MacOS es `/Users/ + + + + + + + + + + + + + + +Docker + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+

Docker

+
+

¿Qué es docker?

+

Es una plataforma de virtualización además de un conjunto de comandos para establecer workflows de trabajo que permitan crear, instalar, compartir etc, aplicaciones.

+

Docker está compuesto de dos partes un daemon o un servidor y un cliente, el comando docker.

+
+
+

Instalación

+ +
+
+

Imágen y contenedores

+

Una imagen es una especie de cascarón o plantilla no modificable.

+
+

Ejemplo Ejemplos de imágenes son ubuntu y la imagen de la clase con la que trabajaremos (nanounanue/docker-ds).

+
+

Un contenedor es creado a partir de una imagen. Los contenedores es aquello con lo que vas a interactuar. Pueden ser ejecutados, iniciados, detenidos, movidos, borrados, etc. Cada contenedor es un ambiente aislado. Aunque pueden ser conectados entre sí.

+

Para ver qué imágenes hay en tu computadora:

+
docker images
+
+
+

Ejercicio

+
+

NOTA: Si no tienen instalado docker por favor júntense con un compañero y háganlo luego en su casa.

+
+
+

NOTA: Si están en ubuntu y no configuraron su usuario como miembros del grupo docker agreguen sudo al principio de cada comando

+
+
+

NOTA Al final de las instrucciones de instalación en ubuntu, viene como eliminar la molestia de teclear sudo antes de todos los comandos.

+
+
    +
  • En su computadora, abran una terminal
  • +
  • Verifiquen que el cliente docker esté instalado tecleando docker
  • +
  • Verifiquen que el daemon esté corriendo con docker run hello-world, se debería de mostrar algo parecido a lo siguiente:
  • +
+
docker run hello-world
+Unable to find image 'hello-world:latest' locally
+hello-world:latest: The image you are pulling has been verified
+
+31cbccb51277: Pull complete 
+e45a5af57b00: Pull complete 
+511136ea3c5a: Already exists 
+Status: Downloaded newer image for hello-world:latest
+Hello from Docker.
+This message shows that your installation appears to be working correctly.
+
+To generate this message, Docker took the following steps:
+ 1. The Docker client contacted the Docker daemon.
+ 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
+    (Assuming it was not already locally available.)
+ 3. The Docker daemon created a new container from that image which runs the
+    executable that produces the output you are currently reading.
+ 4. The Docker daemon streamed that output to the Docker client, which sent it
+    to your terminal.
+
+To try something more ambitious, you can run an Ubuntu container with:
+ $ docker run -it ubuntu bash
+
+For more examples and ideas, visit:
+ http://docs.docker.com/userguide/
+
+
    +
  • Descarguen una imagen de ubuntu
  • +
+
docker pull ubuntu:latest
+
    +
  • (Si la red está imposible, pidan el USB stick y ejecuten docker load < /home/ubuntu-latest.tar)

  • +
  • Verifiquen que la imagen esté en su computadora

  • +
+
docker images
+
    +
  • Para crear un contenedor interactivo:
  • +
+
docker run -i -t ubuntu /bin/bash
+

(Aquí podemos hacer lo que se pide en las siguientes secciones de este lecture)

+

Para salir de este contendor tecleen exit.

+
    +
  • Para verificar que el contenedor está ahí:
  • +
+
docker ps -a
+

Nota Si estás en MacOS ó Windows, apunta la dirección IP en la cual está corriendo boot2docker:

+
boot2docker ip
+
+
+

¿Y la imagen de la clase?

+

Descargarla

+
docker pull nanounanue/docker-ds
+

Creen un contenedor:

+
docker run -d -p 8787:8787 -p 8888:8888 -v path_a_carpeta:/home/itam/proyectos nanounanue/docker-ds
+

El path_a_carpeta se refiere a la salida del comando pwd en tu carpeta donde guardes tus proyectos (recomendado: proyectos). En MS Windows regularmente es algo como /c/Users/<Mi nombre de usuario en mi compu>/proyectos y en MacOS es /Users/<Minombre de usuario/proyectos.

+

Podemos probar que está ejecutándose RStudio:

+

Abran en el navegador la página http://0.0.0.0:8787 (Si estás en GNU/Linux) o http://192.168.59.103:8787 (quizá sea esta, verifica el paso del boot2docker ip), deberían de ver la entrada de RStudio.

+

Las credenciales son:

+
    +
  • usuario: itam
  • +
  • password: itam
  • +
+

Si llegaron hasta acá ¡Felicidades! No sufrirán más de lo necesario este curso.

+

Para salir de docker usen Ctrl-C.

+
+
+

¿Y la próxima vez?

+
    +
  • La siguiente vez que quieras ejecutar docker usa el siguiente comando:
  • +
+
docker start stoic_hopper # Esto funciona si ejecutaste la versión de demonio
+

ó

+
docker start -a -i stoic_hopper # Esto funciona si ejecutaste la versión de interactiva
+

donde debes de cambiar stoic_hopper por el nombre del contenedor (la última columna de docker ps -a).

+
+
+

Es posible también…

+

Lanzar una terminal de R sin usar Rstudio

+
docker run  -it --user itam --name r-console -v path_a_carpeta:/home/itam/proyectos nanounanue/docker-ds /usr/bin/R
+

Lanzar la terminal de python con las librerías de cómputo científico:

+
docker run  -it --user itam --name ipython-console -v path_a_carpeta:/home/itam/proyectos nanounanue/docker-ds ipython
+

O un shell simple (en este caso zsh)

+
docker run -it --user itam  --name commandline -v path_a_carpeta:/home/itam/proyectos nanounanue/docker-ds /bin/zsh
+

Nota Recuerda que el comando run crea un contenedor nuevo, si quieres reutilizar el contenedor, debes de eliminar la bandera --rm y usar start.

+
+
+

Liga de ayuda

+

Pueden ver esto si tienen dudas

+
+
+ + + + +
+ + + + + + + + diff --git a/1-cli.Rmd b/1-cli.Rmd index 963cf6f..5d15acd 100644 --- a/1-cli.Rmd +++ b/1-cli.Rmd @@ -1,73 +1,73 @@ --- -title: "La línea de comandos" -author: "Adolfo De Unánue T." +title: "La línea de comandos" +author: "Adolfo De Unánue T." date: "14/01/2016" output: html_document --- -# La línea de comandos +# La línea de comandos -**NOTA**: Esta *lecture* está basada parcialmente en las notas del curso C4P de California Polytechnic State University, San Luis Obispo +**NOTA**: Esta *lecture* está basada parcialmente en las notas del curso C4P de California Polytechnic State University, San Luis Obispo -## Introducción +## Introducción El `shell` de Unix (en su caso particular es un `shell` de -`GNU/Linux`), es más viejo que todos nosotros. Y el hecho de que siga -activo, y en uso, se debe a que es una de las invenciones humanas más +`GNU/Linux`), es más viejo que todos nosotros. Y el hecho de que siga +activo, y en uso, se debe a que es una de las invenciones humanas más exitosas para usar la computadora de manera eficiente. -De una manera muy rápida el `shell` puede hacer lo siguiente: +De una manera muy rápida el `shell` puede hacer lo siguiente: -- Un intérprete interactivo: lee comandos, encuentra los programas +- Un intérprete interactivo: lee comandos, encuentra los programas correspondientes, los ejecuta y despliega la salida. - Esto se conoce como **REPL**: *Read, Evaluate, Print, Loop* -- La salida puede ser redireccionada a otro lugar además e la +- La salida puede ser redireccionada a otro lugar además e la pantalla. (Usando `>` y `<`). -- Una cosa muy poderosa (y en la que está basada --como casi todo lo - actual--) es combinar comandos que son muy básicos (sólo hacen una - sola cosa) con otros para hacer cosas más complicadas (esto es con +- Una cosa muy poderosa (y en la que está basada --como casi todo lo + actual--) es combinar comandos que son muy básicos (sólo hacen una + sola cosa) con otros para hacer cosas más complicadas (esto es con un *pipe* `|`). -- Mantiene un histórico que permite rejecutar cosas del pasado. -- La información es guardada jerárquicamente en carpetas o directorios. -- Existen comandos para hacer búsquedas dentro de archivos (`grep`) o +- Mantiene un histórico que permite rejecutar cosas del pasado. +- La información es guardada jerárquicamente en carpetas o directorios. +- Existen comandos para hacer búsquedas dentro de archivos (`grep`) o para buscar archivos (`find`) que combinados pueden ser muy poderosos. - - Uno puede hacer *data analysis* solamente con estos comandos, así + - Uno puede hacer *data analysis* solamente con estos comandos, así de poderosos son. - Las ejecuciones pueden ser pausadas, ejecutadas en el *fondo* o en - máquinas remotas. -- Además es posible definir variables para usarse por otros programas. -- El `shell` cuenta con todo un lenguaje de programación, lo que + máquinas remotas. +- Además es posible definir variables para usarse por otros programas. +- El `shell` cuenta con todo un lenguaje de programación, lo que permite ejecutar cosas en **bucles**, **condicionales**, y hasta cosas en paralelo. ## La computadora desde cerca -Al final las computadoras sólo hacen cuatro cosas: +Al final las computadoras sólo hacen cuatro cosas: - Ejecutan programas - Almacenan datos -- Se comunican entre sí para hacer las cosas recién mencionadas. -- Interactúan con nosotros. - - La interacción puede ser gráfica (como están acostumbrados) - conocida también como **GUI** (*Graphical User Interface*) vía el - ratón u otro periférico, o desde la línea de comandos, llamada +- Se comunican entre sí para hacer las cosas recién mencionadas. +- Interactúan con nosotros. + - La interacción puede ser gráfica (como están acostumbrados) + conocida también como **GUI** (*Graphical User Interface*) vía el + ratón u otro periférico, o desde la línea de comandos, llamada como **CLI** (*Command Line Interface*). ## El ambiente desde cerca -El ambiente está formado por 4 capas: +El ambiente está formado por 4 capas: -- Herramientas de línea de comandos - - De estos hay cinco tipos: Ejecutable Binario, *Builtin*, *Script* Interpretado, Función del *Shell* y `alias`. +- Herramientas de línea de comandos + - De estos hay cinco tipos: Ejecutable Binario, *Builtin*, *Script* Interpretado, Función del *Shell* y `alias`. - Terminal - *Shell* - Sistema Operativo -## La línea de comandos +## La línea de comandos -La línea de comandos es lo que estará entre nosotros y la computadora +La línea de comandos es lo que estará entre nosotros y la computadora casi todo el tiempo en este curso. De hecho, una lectura obligada (no me hagan que la deje de tarea es [In the beginning...was de command line](http://faculty.georgetown.edu/irvinem/theory/Stephenson-CommandLine-1999.pdf) @@ -75,102 +75,102 @@ de *Neal Stephenson*, el escritor de [**Criptonomicon**.](https://play.google.com/store/books/details/Neal_Stephenson_Cryptonomicon?id=dwAwSzmTHNEC). -La **CLI** es otro programa más de la computadora y su función es -ejecutar otros comandos. El más popular es `bash`, que es un acrónimo -de *Bourne again shell*. Aunque en esta clase también usaremos `zsh`. +La **CLI** es otro programa más de la computadora y su función es +ejecutar otros comandos. El más popular es `bash`, que es un acrónimo +de *Bourne again shell*. Aunque en esta clase también usaremos `zsh`. ## Archivos y directorios -La computadora guarda la información de una manera ordenada. El -sistema encargado de esto es el `file system`. Básicamente es un árbol -de información (aunque hay varios tipos de `file systems` que pueden +La computadora guarda la información de una manera ordenada. El +sistema encargado de esto es el `file system`. Básicamente es un árbol +de información (aunque hay varios tipos de `file systems` que pueden utilizar modificaciones a esta estructura de datos, lo que voy a decir aplica desde su punto de vista como usuarios) que guarda los datos en -una abstracción que llamamos *archivos* y ordena los archivos en +una abstracción que llamamos *archivos* y ordena los archivos en *carpetas* o *directorios*, los cuales a su vez pueden contener otros *directorios*. Muchos de los comandos del **CLI** o `shell` tienen que ver con la -manipulación del `file system`. +manipulación del `file system`. ### Ejercicio: -- Inicia una sesión en `docker` en `bash` (ver `0-docker.Rmd`) usando la imagen de `docker-ds`. -- Deberías de ver algo como esto: +- Inicia una sesión en `docker` en `bash` (ver `0-docker.Rmd`) usando la imagen de `docker-ds`. +- Deberías de ver algo como esto: ``` ~ ``` - Teclea `whoami` y luego presiona *enter*. Este comando te dice que usuario eres. Observa que el usuario actual es `itam`. Eres un usuario normal. Existe otro usuario llamado `root` el cual un **superusuario**, el tiene poderes para modificar todo, obvio, esto -es peligroso, por lo que será mejor cambiar de usuario, en particular +es peligroso, por lo que será mejor cambiar de usuario, en particular al usuario `itam`. -- Teclea `su itam`. ¿Qué pasó? -- Comprueba que eres el usuario `itam` ¿Cómo le podrías hacer? +- Teclea `su itam`. ¿Qué pasó? +- Comprueba que eres el usuario `itam` ¿Cómo le podrías hacer? - Para saber donde estamos en el `file system` usamos `pwd` (de *printing working directory*). - - Estamos posicionados en la raíz del árbol del sistema, el cual es + - Estamos posicionados en la raíz del árbol del sistema, el cual es simbolizada como `/`. - Para ver el listado de un directorio usamos `ls` - - Ahora estás observando la estructura de directorios de `/`. + - Ahora estás observando la estructura de directorios de `/`. - Los comandos (como `ls`) pueden tener modificadores o *banderas*, - las cuales modifican (vaya sorpresa) el comportamiento por omisión + las cuales modifican (vaya sorpresa) el comportamiento por omisión del comando. Intenta con `ls -l`, `ls -a`, `ls -la`, `ls -lh`, `ls - -lha`. Discute con tu compañero junto a tí las diferencias entre las banderas. + -lha`. Discute con tu compañero junto a tí las diferencias entre las banderas. - Para obtener ayuda puedes utilizar `man` y el nombre del - comando. ¿Cómo puedes aprender que hace `ls`? -- Otro comando muy útil (aunque no lo parecerá ahorita) es `echo`. -- Las variables de sistema (es decir globales en tu sesión) se pueden - obtener con el comando `env`. En particular presta atención a + comando. ¿Cómo puedes aprender que hace `ls`? +- Otro comando muy útil (aunque no lo parecerá ahorita) es `echo`. +- Las variables de sistema (es decir globales en tu sesión) se pueden + obtener con el comando `env`. En particular presta atención a `HOME`, `USER` y `PWD`. - Para evaluar la variable podemos usar el signo de moneda `$`, - Imprime las variables con `echo`, e.g. `echo $USER`. -- El comando `cd` permite cambiar de directorios (¿Adivinas de donde - viene el nombre del comando?) La sintáxis es `cd - nombre_directorio`. ¿Puedes navegar hasta tu `$HOME`? -- ¿Qué hay de diferente si ahí ejecutas `ls -la`? - - Las dos líneas de hasta arriba son `.` y `..` las cuales +- El comando `cd` permite cambiar de directorios (¿Adivinas de donde + viene el nombre del comando?) La sintáxis es `cd + nombre_directorio`. ¿Puedes navegar hasta tu `$HOME`? +- ¿Qué hay de diferente si ahí ejecutas `ls -la`? + - Las dos líneas de hasta arriba son `.` y `..` las cuales significan *este directorio* (`.`) y el directorio padre (`..`) respectivamente. Los puedes usar para navegar (i.e. moverte con `cd`) - - ¿Puedes regresar a raíz? - - En raíz ¿Qué pasa si ejecutas `cd $HOME`? + - ¿Puedes regresar a raíz? + - En raíz ¿Qué pasa si ejecutas `cd $HOME`? - Otras maneras de llegar a tu `$HOME` son `cd ~` y `cd` solito. -- Verifica que estés en tu directorio (¿Qué comando usarias?) Si no - estás ahí, ve a él. +- Verifica que estés en tu directorio (¿Qué comando usarias?) Si no + estás ahí, ve a él. - Para crear un directorio existe el comando `mkdir` que recibe como - parámetro un nombre de archivo. - - Crea la carpeta `test`. Entra a ella. ¿Qué hay dentro de ella? + parámetro un nombre de archivo. + - Crea la carpeta `test`. Entra a ella. ¿Qué hay dentro de ella? - Vamos a crear un archivo de texto, para esto usaremos **GNU Emacs**. **GNU Emacs** es un editor de textos muy poderoso. Lo -aprenderemos en la clase (y quizá en algún seminario). Por el momento +aprenderemos en la clase (y quizá en algún seminario). Por el momento teclea `emacs hola.txt` y presiona enter (la primera vez que lo corras -puede tardar mucho, está instalando toda la configuración para la +puede tardar mucho, está instalando toda la configuración para la clase). -- Aparecerá una barra de menú abajo. Esto indica que ya estás en **GNU - Emacs**. Teclea "¡Hola Mundo!" y luego presiona la siguiente - combinación de teclas: `Ctrl+x` seguido de `Ctrl+s` (guardar cambios). Ahora presiona - `Ctrl-x` y luego `Ctrl-c` (salir de emacs). Esto los devolverá a la +- Aparecerá una barra de menú abajo. Esto indica que ya estás en **GNU + Emacs**. Teclea "¡Hola Mundo!" y luego presiona la siguiente + combinación de teclas: `Ctrl+x` seguido de `Ctrl+s` (guardar cambios). Ahora presiona + `Ctrl-x` y luego `Ctrl-c` (salir de emacs). Esto los devolverá a la **CL**. -- Verifica que esté el archivo. -- Para borrar usamos el comando `rm` (de *remove*),¿Cómo crees que se borraría un directorio? +- Verifica que esté el archivo. +- Para borrar usamos el comando `rm` (de *remove*),¿Cómo crees que se borraría un directorio? - Borra el archivo `hola.txt`. -- ¿Ahora puedes borrar el directorio `test`? ¿Qué falla? ¿De dónde +- ¿Ahora puedes borrar el directorio `test`? ¿Qué falla? ¿De dónde puedes obtener ayuda? - Crea otra carpeta llamada `tmp`, crea un archivo `copiame.txt` con - emacs, escribe en él: "Por favor cópiame". + emacs, escribe en él: "Por favor cópiame". - Averigua que hacen los comandos `cp` y `mv`. - Copia el archivo a uno nuevo que se llame `copiado.txt`. - Borra `copiame.txt`. -- Modifica `copiado.txt`, en la última línea pon "¡Listo!". +- Modifica `copiado.txt`, en la última línea pon "¡Listo!". - Renombra `copiado.txt` a `copiame.txt`. -- Por último borra toda la carpeta `tmp`. +- Por último borra toda la carpeta `tmp`. ## Navegar -Moverse rápidamente en la **CLI** es de vital importancia. Teclea en tu **CLI** +Moverse rápidamente en la **CLI** es de vital importancia. Teclea en tu **CLI** ``` Anita lava la tina @@ -178,29 +178,29 @@ Anita lava la tina Y ahora intenta lo siguiente: -- `Ctrl + a` Inicio de la línea -- `Ctrl + e` Fin de la línea -- `Ctrl + r` Buscar hacia atrás +- `Ctrl + a` Inicio de la línea +- `Ctrl + e` Fin de la línea +- `Ctrl + r` Buscar hacia atrás - Elimina el *flechita arriba* - `Ctrl + b` / `Alt + b` - `Ctrl + f` / `Alt + f` -- `Ctrl + k` - Elimina el resto de la línea (en realidad corta y pone en el búfer circular) -- `Ctrl + y` - Pega la último del búfer. -- `Alt + y` - Recorre el búfer circular. +- `Ctrl + k` - Elimina el resto de la línea (en realidad corta y pone en el búfer circular) +- `Ctrl + y` - Pega la último del búfer. +- `Alt + y` - Recorre el búfer circular. - `Ctrl + d` - Cierra la terminal - `Ctrl + z` - Manda a *background* - `Ctrl + c` - Intenta cancelar ## Pipes y flujos -- `|` (pipe) “Entuba†la salida de un comando al siguiente +- `|` (pipe) "Entuba" la salida de un comando al siguiente - `>`,`>>`, Redirecciona la salida de los comandos a un sumidero. ``` ls >> prueba.dat ``` -Instalar mis archivos de configuración +Instalar mis archivos de configuración ``` curl -L http://github.com/nanounanue/dotfiles/raw/master/installer.sh | sh @@ -208,11 +208,11 @@ curl -L http://github.com/nanounanue/dotfiles/raw/master/installer.sh | sh - `<` Redirecciona desde el archivo ``` -sort < prueba.dat # A la línea de comandos acomoda con sort, +sort < prueba.dat # A la línea de comandos acomoda con sort, sort < prueba.dat > prueba_sort.dat # Guardar el sort a un archivo. ``` -- `&&` es un AND, sólo ejecuta el comando que sigue a `&&` si el +- `&&` es un AND, sólo ejecuta el comando que sigue a `&&` si el primero es exitoso. ``` @@ -228,7 +228,7 @@ primero es exitoso. - `wc` significa *word count* - Cuenta palabras,renglones, bytes, etc. -- En nuestro caso nos interesa la bandera `-l` la cual sirve para contar líneas. +- En nuestro caso nos interesa la bandera `-l` la cual sirve para contar líneas. ``` @@ -237,7 +237,7 @@ primero es exitoso. ``` - `head` y `tail` sirven para explorar visualmente las primeras diez -(default) o las últimas diez (default) renglones del archivo, +(default) o las últimas diez (default) renglones del archivo, respectivamente. @@ -263,20 +263,21 @@ Existen otros comando poderosos como `split`, `uniq`, `grep`, etc. ---- -Con estos ejercicios deberías de ser capaz de manejar los básicos del -`file system` y de la línea de comandos +Con estos ejercicios deberías de ser capaz de manejar los básicos del +`file system` y de la línea de comandos -## Antes de partir... ¿Por qué usamos `zsh` en lugar de `bash`? +## Antes de partir... ¿Por qué usamos `zsh` en lugar de `bash`? `zsh` es un `bash` recargado, para saber que puede hacer revisa [esto](http://www.bash2zsh.com/zsh_refcard/refcard.pdf) y [esto](https://github.com/robbyrussell/oh-my-zsh/wiki/Cheatsheet). -Además, en tu `docker` el `zsh` viene recargado con `oh-my-zsh`. +Además, en tu `docker` el `zsh` viene recargado con `oh-my-zsh`. ## Referencias adicionales - [Codecademy - Learn the Command Line](https://www.codecademy.com/learn/learn-the-command-line) + diff --git a/1-cli.html b/1-cli.html new file mode 100644 index 0000000..8b0d388 --- /dev/null +++ b/1-cli.html @@ -0,0 +1,328 @@ + + + + + + + + + + + + + + + +La línea de comandos + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+

La línea de comandos

+

NOTA: Esta lecture está basada parcialmente en las notas del curso C4P de California Polytechnic State University, San Luis Obispo

+
+

Introducción

+

El shell de Unix (en su caso particular es un shell de GNU/Linux), es más viejo que todos nosotros. Y el hecho de que siga activo, y en uso, se debe a que es una de las invenciones humanas más exitosas para usar la computadora de manera eficiente.

+

De una manera muy rápida el shell puede hacer lo siguiente:

+
    +
  • Un intérprete interactivo: lee comandos, encuentra los programas correspondientes, los ejecuta y despliega la salida.
  • +
  • Esto se conoce como REPL: Read, Evaluate, Print, Loop
  • +
  • La salida puede ser redireccionada a otro lugar además e la pantalla. (Usando > y <).
  • +
  • Una cosa muy poderosa (y en la que está basada –como casi todo lo actual–) es combinar comandos que son muy básicos (sólo hacen una sola cosa) con otros para hacer cosas más complicadas (esto es con un pipe |).
  • +
  • Mantiene un histórico que permite rejecutar cosas del pasado.
  • +
  • La información es guardada jerárquicamente en carpetas o directorios.
  • +
  • Existen comandos para hacer búsquedas dentro de archivos (grep) o para buscar archivos (find) que combinados pueden ser muy poderosos.
  • +
  • Uno puede hacer data analysis solamente con estos comandos, así de poderosos son.
  • +
  • Las ejecuciones pueden ser pausadas, ejecutadas en el fondo o en máquinas remotas.
  • +
  • Además es posible definir variables para usarse por otros programas.
  • +
  • El shell cuenta con todo un lenguaje de programación, lo que permite ejecutar cosas en bucles, condicionales, y hasta cosas en paralelo.
  • +
+
+
+

La computadora desde cerca

+

Al final las computadoras sólo hacen cuatro cosas:

+
    +
  • Ejecutan programas
  • +
  • Almacenan datos
  • +
  • Se comunican entre sí para hacer las cosas recién mencionadas.
  • +
  • Interactúan con nosotros.
  • +
  • La interacción puede ser gráfica (como están acostumbrados) conocida también como GUI (Graphical User Interface) vía el ratón u otro periférico, o desde la línea de comandos, llamada como CLI (Command Line Interface).
  • +
+
+
+

El ambiente desde cerca

+

El ambiente está formado por 4 capas:

+
    +
  • Herramientas de línea de comandos
  • +
  • De estos hay cinco tipos: Ejecutable Binario, Builtin, Script Interpretado, Función del Shell y alias.
  • +
  • Terminal
  • +
  • Shell
  • +
  • Sistema Operativo
  • +
+
+
+

La línea de comandos

+

La línea de comandos es lo que estará entre nosotros y la computadora casi todo el tiempo en este curso. De hecho, una lectura obligada (no me hagan que la deje de tarea es In the beginning…was de command line de Neal Stephenson, el escritor de Criptonomicon..

+

La CLI es otro programa más de la computadora y su función es ejecutar otros comandos. El más popular es bash, que es un acrónimo de Bourne again shell. Aunque en esta clase también usaremos zsh.

+
+
+

Archivos y directorios

+

La computadora guarda la información de una manera ordenada. El sistema encargado de esto es el file system. Básicamente es un árbol de información (aunque hay varios tipos de file systems que pueden utilizar modificaciones a esta estructura de datos, lo que voy a decir aplica desde su punto de vista como usuarios) que guarda los datos en una abstracción que llamamos archivos y ordena los archivos en carpetas o directorios, los cuales a su vez pueden contener otros directorios.

+

Muchos de los comandos del CLI o shell tienen que ver con la manipulación del file system.

+
+

Ejercicio:

+
    +
  • Inicia una sesión en docker en bash (ver 0-docker.Rmd) usando la imagen de docker-ds.
  • +
  • Deberías de ver algo como esto:

    +
    ~
  • +
  • Teclea whoami y luego presiona enter. Este comando te dice que usuario eres. Observa que el usuario actual es itam. Eres un usuario normal. Existe otro usuario llamado root el cual un superusuario, el tiene poderes para modificar todo, obvio, esto es peligroso, por lo que será mejor cambiar de usuario, en particular al usuario itam.

  • +
  • Teclea su itam. ¿Qué pasó?
  • +
  • Comprueba que eres el usuario itam ¿Cómo le podrías hacer?
  • +
  • Para saber donde estamos en el file system usamos pwd (de printing working directory).
  • +
  • Estamos posicionados en la raíz del árbol del sistema, el cual es simbolizada como /.
  • +
  • Para ver el listado de un directorio usamos ls
  • +
  • Ahora estás observando la estructura de directorios de /.
  • +
  • Los comandos (como ls) pueden tener modificadores o banderas, las cuales modifican (vaya sorpresa) el comportamiento por omisión del comando. Intenta con ls -l, ls -a, ls -la, ls -lh, ls -lha. Discute con tu compañero junto a tí las diferencias entre las banderas.
  • +
  • Para obtener ayuda puedes utilizar man y el nombre del comando. ¿Cómo puedes aprender que hace ls?
  • +
  • Otro comando muy útil (aunque no lo parecerá ahorita) es echo.
  • +
  • Las variables de sistema (es decir globales en tu sesión) se pueden obtener con el comando env. En particular presta atención a HOME, USER y PWD.
  • +
  • Para evaluar la variable podemos usar el signo de moneda $,
  • +
  • Imprime las variables con echo, e.g. echo $USER.
  • +
  • El comando cd permite cambiar de directorios (¿Adivinas de donde viene el nombre del comando?) La sintáxis es cd nombre_directorio. ¿Puedes navegar hasta tu $HOME?
  • +
  • ¿Qué hay de diferente si ahí ejecutas ls -la?
  • +
  • Las dos líneas de hasta arriba son . y .. las cuales significan este directorio (.) y el directorio padre (..) respectivamente. Los puedes usar para navegar (i.e. moverte con cd)
  • +
  • ¿Puedes regresar a raíz?
  • +
  • En raíz ¿Qué pasa si ejecutas cd $HOME?
  • +
  • Otras maneras de llegar a tu $HOME son cd ~ y cd solito.

  • +
  • Verifica que estés en tu directorio (¿Qué comando usarias?) Si no estás ahí, ve a él.
  • +
  • Para crear un directorio existe el comando mkdir que recibe como parámetro un nombre de archivo.
  • +
  • Crea la carpeta test. Entra a ella. ¿Qué hay dentro de ella?
  • +
  • Vamos a crear un archivo de texto, para esto usaremos GNU Emacs. GNU Emacs es un editor de textos muy poderoso. Lo aprenderemos en la clase (y quizá en algún seminario). Por el momento teclea emacs hola.txt y presiona enter (la primera vez que lo corras puede tardar mucho, está instalando toda la configuración para la clase).
  • +
  • Aparecerá una barra de menú abajo. Esto indica que ya estás en GNU Emacs. Teclea “¡Hola Mundo!†y luego presiona la siguiente combinación de teclas: Ctrl+x seguido de Ctrl+s (guardar cambios). Ahora presiona Ctrl-x y luego Ctrl-c (salir de emacs). Esto los devolverá a la CL.
  • +
  • Verifica que esté el archivo.
  • +
  • Para borrar usamos el comando rm (de remove),¿Cómo crees que se borraría un directorio?
  • +
  • Borra el archivo hola.txt.
  • +
  • ¿Ahora puedes borrar el directorio test? ¿Qué falla? ¿De dónde puedes obtener ayuda?
  • +
  • Crea otra carpeta llamada tmp, crea un archivo copiame.txt con emacs, escribe en él: “Por favor cópiameâ€.
  • +
  • Averigua que hacen los comandos cp y mv.
  • +
  • Copia el archivo a uno nuevo que se llame copiado.txt.
  • +
  • Borra copiame.txt.
  • +
  • Modifica copiado.txt, en la última línea pon “¡Listo!â€.
  • +
  • Renombra copiado.txt a copiame.txt.
  • +
  • Por último borra toda la carpeta tmp.

  • +
+
+
+ +
+

Pipes y flujos

+
    +
  • | (pipe) “Entuba†la salida de un comando al siguiente
  • +
  • >,>>, Redirecciona la salida de los comandos a un sumidero.
  • +
+
ls >> prueba.dat
+

Instalar mis archivos de configuración

+
curl -L http://github.com/nanounanue/dotfiles/raw/master/installer.sh | sh 
+
    +
  • < Redirecciona desde el archivo

    +
    sort < prueba.dat # A la línea de comandos acomoda con sort,
    +sort < prueba.dat > prueba_sort.dat # Guardar el sort a un archivo.
  • +
  • && es un AND, sólo ejecuta el comando que sigue a && si el primero es exitoso.

  • +
+
> ls && echo "Hola"
+> lss && echo "Hola"
+
+
+

Otros comandos

+
    +
  • wc significa word count
  • +
  • Cuenta palabras,renglones, bytes, etc.

  • +
  • En nuestro caso nos interesa la bandera -l la cual sirve para contar líneas.

  • +
+
> wc -l /etc/passwd
+24 /etc/passwd
+
    +
  • head y tail sirven para explorar visualmente las primeras diez (default) o las últimas diez (default) renglones del archivo, respectivamente.
  • +
+
> head /etc/passwd
+> tail -3 /etc/passwd
+
    +
  • cat concatena archivos y/o imprime al stdout
  • +
+
> echo 'Hola mundo' >> test
+> echo 'Adios mundo cruel' >> test
+> cat test
+...
+> cp test test2
+> cat test test2 > test3
+> wc -l test*
+

Existen otros comando poderosos como split, uniq, grep, etc.

+
+

Con estos ejercicios deberías de ser capaz de manejar los básicos del file system y de la línea de comandos

+
+
+

Antes de partir… ¿Por qué usamos zsh en lugar de bash?

+

zsh es un bash recargado, para saber que puede hacer revisa esto y esto.

+

Además, en tu docker el zsh viene recargado con oh-my-zsh.

+
+
+

Referencias adicionales

+ +
+
+ + + + +
+ + + + + + + + diff --git a/alumnos/oscardaniel88/0-docker.Rmd b/alumnos/oscardaniel88/0-docker.Rmd new file mode 100644 index 0000000..4746e5a --- /dev/null +++ b/alumnos/oscardaniel88/0-docker.Rmd @@ -0,0 +1,202 @@ +--- +title: "Docker" +author: "Adolfo De Unánue T." +date: "14/01/2016" +output: html_document +--- + +# Docker + +## ¿Qué es docker? + +Es una plataforma de virtualización además de un conjunto de comandos para establecer *workflows* de trabajo que permitan crear, instalar, compartir etc, aplicaciones. + +**Docker** está compuesto de dos partes un *daemon* o un servidor y un *cliente*, el comando `docker`. + +## Instalación + +- [Mac OS X](https://docs.docker.com/mac/step_one/) +- [Ubuntu](https://docs.docker.com/linux/step_one/) +- [MS Windows](https://docs.docker.com/windows/step_one/) + +## Imágen y contenedores + +Una **imagen** es una especie de cascarón o plantilla no modificable. + +> **Ejemplo** +> Ejemplos de imágenes son `ubuntu` y la imagen de la clase con la que trabajaremos (`nanounanue/docker-ds`). + +Un **contenedor** es creado a partir de una *imagen*. Los contenedores es aquello con lo que vas a interactuar. Pueden ser ejecutados, iniciados, detenidos, movidos, borrados, etc. Cada contenedor es un ambiente aislado. Aunque pueden ser [conectados entre sí](http://docs.docker.com/userguide/dockerlinks/). + + +Para ver qué imágenes hay en tu computadora: + +``` +docker images +``` + + +## Ejercicio + +> **NOTA:** Si no tienen instalado `docker` por favor júntense con un compañero y háganlo luego en su casa. + +> **NOTA:** Si están en `ubuntu` y no configuraron su usuario como miembros del grupo `docker` agreguen `sudo` al principio de cada comando + +> **NOTA** Al final de las instrucciones de instalación en ubuntu, viene como eliminar la molestia de teclear `sudo` antes de todos los comandos. + + +- En su computadora, abran una terminal +- Verifiquen que el cliente `docker` esté instalado tecleando `docker` +- Verifiquen que el *daemon* esté corriendo con `docker run hello-world`, se debería de mostrar algo parecido a lo siguiente: + +``` +docker run hello-world +Unable to find image 'hello-world:latest' locally +hello-world:latest: The image you are pulling has been verified + +31cbccb51277: Pull complete +e45a5af57b00: Pull complete +511136ea3c5a: Already exists +Status: Downloaded newer image for hello-world:latest +Hello from Docker. +This message shows that your installation appears to be working correctly. + +To generate this message, Docker took the following steps: + 1. The Docker client contacted the Docker daemon. + 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. + (Assuming it was not already locally available.) + 3. The Docker daemon created a new container from that image which runs the + executable that produces the output you are currently reading. + 4. The Docker daemon streamed that output to the Docker client, which sent it + to your terminal. + +To try something more ambitious, you can run an Ubuntu container with: + $ docker run -it ubuntu bash + +For more examples and ideas, visit: + http://docs.docker.com/userguide/ + +``` + + +- Descarguen una *imagen* de `ubuntu` + + +``` +docker pull ubuntu:latest +``` + +- (Si la red está imposible, pidan el `USB stick` y ejecuten `docker load < /home/ubuntu-latest.tar`) + +- Verifiquen que la imagen esté en su computadora + +``` +docker images +``` + + +- Para crear un contenedor interactivo: + +``` +docker run -i -t ubuntu /bin/bash +``` + +(Aquí podemos hacer lo que se pide en las siguientes secciones de este *lecture*) + + +Para salir de este contendor tecleen `exit`. + +- Para verificar que el contenedor está ahí: + +``` +docker ps -a +``` + + +**Nota** Si estás en MacOS ó Windows, apunta la dirección IP en la cual está corriendo `boot2docker`: + +``` +boot2docker ip +``` + + + + +## ¿Y la imagen de la clase? + +Descargarla + +``` +docker pull nanounanue/docker-ds +``` + +Creen un contenedor: + +``` +docker run -d -p 8787:8787 -p 8888:8888 -v path_a_carpeta:/home/itam/proyectos nanounanue/docker-ds +``` + + +El `path_a_carpeta` se refiere a la salida del comando `pwd` en tu carpeta donde guardes tus proyectos (recomendado: `proyectos`). +En MS Windows regularmente es algo como `/c/Users//proyectos` y en MacOS es `/Users/> test +root@1873f0044de1:/home/itam# echo 'Adios mundo cruel' >> test +root@1873f0044de1:/home/itam# cat test +Hola mundo +Adios mundo cruel +root@1873f0044de1:/home/itam# cp test test2 +root@1873f0044de1:/home/itam# cat test test2 > test3 +root@1873f0044de1:/home/itam# xc -l test* +bash: xc: command not found +root@1873f0044de1:/home/itam# wc -l test* + 2 test + 2 test2 + 4 test3 + 8 total \ No newline at end of file