diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c6f9a44 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.vscode/settings.json diff --git a/docs/antora.yml b/docs/antora.yml index 6530c0c..5888498 100644 --- a/docs/antora.yml +++ b/docs/antora.yml @@ -1,6 +1,10 @@ name: curso_linux title: Curso GNU/Linux -version: master +version: febrero-2024 nav: - modules/ROOT/nav.adoc -- modules/nivel_0/nav.adoc +- modules/dia_1/nav.adoc +- modules/dia_2/nav.adoc +- modules/dia_3/nav.adoc +- modules/dia_4/nav.adoc +- modules/anexos/nav.adoc diff --git a/docs/modules/ROOT/images/cartel.png b/docs/modules/ROOT/images/cartel.png index 41a2066..ab6685d 100644 Binary files a/docs/modules/ROOT/images/cartel.png and b/docs/modules/ROOT/images/cartel.png differ diff --git a/docs/modules/dia_1/images/actividades/arbol.png b/docs/modules/dia_1/images/actividades/arbol.png new file mode 100644 index 0000000..7dd14b6 Binary files /dev/null and b/docs/modules/dia_1/images/actividades/arbol.png differ diff --git a/docs/modules/dia_1/images/actividades/arbol.png:Zone.Identifier b/docs/modules/dia_1/images/actividades/arbol.png:Zone.Identifier new file mode 100644 index 0000000..a45e1ac --- /dev/null +++ b/docs/modules/dia_1/images/actividades/arbol.png:Zone.Identifier @@ -0,0 +1,2 @@ +[ZoneTransfer] +ZoneId=3 diff --git a/docs/modules/dia_1/images/actividades/arbol_final.png b/docs/modules/dia_1/images/actividades/arbol_final.png new file mode 100644 index 0000000..2891757 Binary files /dev/null and b/docs/modules/dia_1/images/actividades/arbol_final.png differ diff --git a/docs/modules/dia_1/images/actividades/arbol_final.png:Zone.Identifier b/docs/modules/dia_1/images/actividades/arbol_final.png:Zone.Identifier new file mode 100644 index 0000000..a45e1ac --- /dev/null +++ b/docs/modules/dia_1/images/actividades/arbol_final.png:Zone.Identifier @@ -0,0 +1,2 @@ +[ZoneTransfer] +ZoneId=3 diff --git a/docs/modules/dia_1/images/bienvenida/demografia.png b/docs/modules/dia_1/images/bienvenida/demografia.png new file mode 100644 index 0000000..eb94d65 Binary files /dev/null and b/docs/modules/dia_1/images/bienvenida/demografia.png differ diff --git a/docs/modules/dia_1/images/bienvenida/lsvp.jpeg b/docs/modules/dia_1/images/bienvenida/lsvp.jpeg new file mode 100644 index 0000000..c1fa002 Binary files /dev/null and b/docs/modules/dia_1/images/bienvenida/lsvp.jpeg differ diff --git a/docs/modules/dia_1/images/bienvenida/terminal.png b/docs/modules/dia_1/images/bienvenida/terminal.png new file mode 100644 index 0000000..b379fa5 Binary files /dev/null and b/docs/modules/dia_1/images/bienvenida/terminal.png differ diff --git a/docs/modules/dia_1/images/bienvenida/yoltla.jpg b/docs/modules/dia_1/images/bienvenida/yoltla.jpg new file mode 100644 index 0000000..088afd7 Binary files /dev/null and b/docs/modules/dia_1/images/bienvenida/yoltla.jpg differ diff --git a/docs/modules/nivel_0/images/dia_1/filesystem/arbol.png b/docs/modules/dia_1/images/filesystem/arbolSistemas.png similarity index 100% rename from docs/modules/nivel_0/images/dia_1/filesystem/arbol.png rename to docs/modules/dia_1/images/filesystem/arbolSistemas.png diff --git a/docs/modules/nivel_0/images/dia_1/filesystem/atributos.png b/docs/modules/dia_1/images/filesystem/atributos.png similarity index 100% rename from docs/modules/nivel_0/images/dia_1/filesystem/atributos.png rename to docs/modules/dia_1/images/filesystem/atributos.png diff --git a/docs/modules/nivel_0/images/dia_1/filesystem/estandar.png b/docs/modules/dia_1/images/filesystem/estandarComandos.png similarity index 100% rename from docs/modules/nivel_0/images/dia_1/filesystem/estandar.png rename to docs/modules/dia_1/images/filesystem/estandarComandos.png diff --git a/docs/modules/nivel_0/images/dia_1/filesystem/pathname.png b/docs/modules/dia_1/images/filesystem/pathnameSistemas.png similarity index 100% rename from docs/modules/nivel_0/images/dia_1/filesystem/pathname.png rename to docs/modules/dia_1/images/filesystem/pathnameSistemas.png diff --git a/docs/modules/nivel_0/images/dia_1/filesystem/tipo.png b/docs/modules/dia_1/images/filesystem/tipo.png similarity index 100% rename from docs/modules/nivel_0/images/dia_1/filesystem/tipo.png rename to docs/modules/dia_1/images/filesystem/tipo.png diff --git a/docs/modules/dia_1/nav.adoc b/docs/modules/dia_1/nav.adoc new file mode 100644 index 0000000..4c62a33 --- /dev/null +++ b/docs/modules/dia_1/nav.adoc @@ -0,0 +1,5 @@ +* Día 1 +** xref:bienvenida.adoc[Bienvenida] +** xref:sistema_archivos.adoc[Sistema de archivos] +** xref:comandos_basicos.adoc[Comandos básicos] +** xref:actividades.adoc[Actividades] diff --git a/docs/modules/dia_1/pages/actividades.adoc b/docs/modules/dia_1/pages/actividades.adoc new file mode 100644 index 0000000..81999bb --- /dev/null +++ b/docs/modules/dia_1/pages/actividades.adoc @@ -0,0 +1,154 @@ += Actividades + +:table-caption: Tabla +:figure-caption: Figura + + +== Comando tree + +El comando *tree* se utiliza para mostrar la estructura de directorios en forma de árbol. Es especialmente útil para visualizar la jerarquía de carpetas y archivos de manera organizada. + +---- + tree [opcion] [directorio] +---- + +|=== +| Opciones | Descripción +| -L N | Limita la profundidad del árbol a N niveles. +| -a | Mostrar archivos y directorios ocultos. +| -d | Mostrar solo directorios, sin archivos. +|=== + +=== Instalación tree + +Para instalar *tree* en sistemas basados en Debian/Ubuntu. +---- + $ sudo apt-get install tree +---- +Y en sistemas basados en Red Hat/Fedora. +---- + $ sudo yum install tree +---- + +== Repasemos las cosas + +* Crea el directorio *Animales*. +* Dentro del directorio *Animales* Crea el siguiente árbol de directorios y archivos. + +.Árbol de archivos a crear. +image::actividades/arbol.png["Árbol de archivo a crear"] + +* Cambia el nombre de *m3dus4.c* a *medusa.c*. + +.Respuesta +[%collapsible] +==== + $ mv m3dus4.c medusa.c +==== +* Cambia el nombre de *bvrr0.txt* a *burro.txt*. + +.Respuesta +[%collapsible] +==== +// $ mv bvrr0.txt burro.txt + Es similar a la respuesta anterior +==== +* Copia *gallina.java* en *Granja* (verifícalo). + +.Respuesta +[%collapsible] +==== + $ cp gallina.java Granja +==== +* Mueve *gallina.java* a *Aves*. + +.Respuesta +[%collapsible] +==== + $ mv gallina.java Aves +==== +* Mueve cada animal en el directorio que le corresponde. + +.Pista +[%collapsible] +==== + $ mv 'animal'.'algo' directorio +==== +* Ingresa a cada directorio y borra a los animales que no pertenecen. + +.Pista +[%collapsible] +==== + $ ls 'directorio' + $ rm 'animal'.'algo' + Recuerda regresar al directorio anterior con $ cd .. +==== + +Para eliminar más de un archivo de un directorio lo puedes hacer de la siguiente manera: + +----- + $ rm archivo1 archivo2 ... archivoN +----- + + +* Ingresa *Insectos* y elimina su contenido. + +.Pista +[%collapsible] +==== + $ rm 'nombreInsecto' +==== +* Elimina el directorio *Insectos* + +.Respuesta +[%collapsible] +==== + $ rmdir Insectos +==== +* Elimina de manera _recursiva_ el directorio *Aves* + +.Respuesta +[%collapsible] +==== + $ rm -r Aves +==== +* Encuentra los animales con extención *.c* del directorio *Marinos*. + +.Respuesta +[%collapsible] +==== + $ find Animales/Marinos -name "*.c" --> Si te encuentras fuera del directorio Animales + $ find Marino -name "*.c" --> Si te encuentras en el directorio Animales + $ find -name "*.c" --> Si te encuentras el dentro del directorio Marinos. +==== + +* Encuentra todos los animales con extencion *.txt* del directorio *Animales*. + +.Respuesta +[%collapsible] +==== + $ find -name "*.json" --> Si te encuentras en el directorio Animales. + $ find Animles -name "*.json" --> Si te encuentras fuera del directorio Animales. +==== + +En general, si quieres encontrar una coincidencia con *find* es de la siguiente manera. + +---- + $ find [directorio] [-opcion] "coincidencia". +---- + +|=== +| directorio | Especifica el directorio en el que se realizará la búsqueda. ejemplo: "/home/usuarios" +| opcion | Puedes utilizar diversas opciones para refinar tu búsqueda, (Revisa el man). +| coincidencia | Define los criterios de búsqueda, como nombre de archivo, tipo, tamaño, etc. +|=== + + +Finalmente el árbol de archivos se vera de la siguiente manera + +.Árbol de archivos final. +image::actividades/arbol_final.png["Árbol de archivos final"] + + + +//* Encuentra los animales con extención *.c* del directorio Marinos. \ No newline at end of file diff --git a/docs/modules/dia_1/pages/bienvenida.adoc b/docs/modules/dia_1/pages/bienvenida.adoc new file mode 100644 index 0000000..4dc5aec --- /dev/null +++ b/docs/modules/dia_1/pages/bienvenida.adoc @@ -0,0 +1,139 @@ += Bienvenidos al Curso terminal GNU/LINUX Nivel cero + +:table-caption: Tabla +:figure-caption: Figura + + +Algunos datos sobre este curso: + +* Esta es la tercera edición con este formato. +* Impartido por miembros del *Laboratorio de Supercómputo y Visualización en Paralelo* + +**** + +El Laboratorio de Supercómputo y Visualización en Paralelo (LSVP) de la +División de Ciencias Básicas e Ingeniería (DCBI) de la Universidad Autónoma +Metropolitana Unidad Iztapalapa (UAM-I), inició su funcionamiento a finales de 1993. + +El Laboratorio tiene como finalidad apoyar el trabajo de investigación que +requiere de cómputo científico de alto rendimiento en +- Física +- Química +- Matemáticas +- ingeniería + +image::bienvenida/lsvp.jpeg[align=center] +**** + +**** +El núcleo del laboratorio es el cluster *Yoltla (Yoltlamaltini)* + +Cuyo nombre significa *'“semillero del saber o conocimiento”'* + +image::bienvenida/yoltla.jpg[align=center] +**** + +* El cluster Yoltla Está hecho con linux +** Se requiere linux para administrarlo +** Se requiere linux para utilizar los recursos + +* Parte de la administración y mantenimiento del laboratorio se realiza por alumnos de licenciatura. + +* Se realizan actividades como +** Implementación de nuevos servicios +** Mantenimientos preventivos +** Optimización de aplicaciones científicas +** Se imparten cursos + +== Instructores para este curso + +Los miembros del laboratorio que van a dar este curso + +* Daniella Librado Serrano +* Diego Morales Serrano +* Eduardo Morgado Velázquez +* Luis Fernando Torres Hernández +* Omar Juárez Merino + +== Demografía del curso +Esta es la demografía para este curso +**** +image::bienvenida/demografia.png[align=center] +**** + +== Introducción +La palabra clave es:: [.underline]#HERRAMIENTA# + +Piensen en la relación que tienen con su herramientas + +* Cuidados +* Perfeccionamiento de habilidades +* Personalización + +=== El sistema operativo GNU/LINUX es una herramienta + +*¿Qué es un sistema operativo?* + +.Posibles respuestas +[%collapsible] +==== +* Un software que controla los recursos de la computadora: +** La memoria de la computadora +** los elementos que hacen procesamiento +** los dispositivos conectados a la computadora +* Una colección de aplicaciones que hacen que una computadora sea más simple +y comprensible para los programadores o usuarios. +==== + +=== Algunas características del SO GNU/LINUX +... Y por qué les puede resultar útil aprender a usar esta herramienta. + +Es eficiente y versátil:: Útil para cualquier equipo de computo +Es consistente:: Fácil de aprender. +Es un desarrollo de software libre y código abierto:: Importante para su libertad +Tiene una estrecha relación con las universidades y el software científico:: Para su desarrollo profesional + + +=== ¿Qué significa aprender a utilizar el SO GNU/Linux? +.De acuerdo al uso que se le da +[%collapsible] +==== +* Uso General +** Navegar en Internet +** Visualizar archivos multimedia +** Editar archivos de office +* Uso académico o profesional +** Instalar y usar aplicaciones de software libre +** Aplicaciones científicas. +** Aplicaciones de desarrollo de software. +** Aplicaciones de producción multimedia. +* El SO linux como camino profesional +** Administrar instancias de computo en la nube. +** Administrar infraestructura para desarrollo de software. +** Administrar clusters de supercómputo. +==== + +=== Formas de interactuar con el SO +* Interfaz gráfica de usuario (GUI) +* Interfaz por linea de comandos (CLI) + +=== Algunos conceptos importantes +image::bienvenida/terminal.png[align=center] +* Terminal +** Emulador de terminal +** Ventana de terminal +* Interprete de comandos (Shell) +** sh +** **Bash** +** tcsh +** kornsh +** zsh +** fish + + +=== Para empezar +Conexión remota +``` +ssh usuario@direccion +``` + diff --git a/docs/modules/dia_1/pages/comandos_basicos.adoc b/docs/modules/dia_1/pages/comandos_basicos.adoc new file mode 100644 index 0000000..55bfdcb --- /dev/null +++ b/docs/modules/dia_1/pages/comandos_basicos.adoc @@ -0,0 +1,328 @@ += Comandos Linux + +:table-caption: Tabla +:figure-caption: Figura + +[#lo_basico] +== ¿Qué es un comando? +En el contexto de sistemas operativos basados en *Linux*, un comando es una instrucción que se proporciona al sistema operativo para realizar una tarea específica. Los comandos en *Linux* se ingresan a través de una terminal o consola. + +== Intérprete de comandos +En *Linux*, un intérprete de comandos, también conocido como shell, es un programa que proporciona una interfaz de usuario para interactuar con el sistema operativo. El shell acepta comandos ingresados por el usuario, los interpreta y luego los ejecuta. + + +=== Características del Intérprete de comandos: + +==== Prompt +La línea de comandos muestra un indicador (prompt) que generalmente muestra información sobre el usuario, la máquina y el directorio actual. Este indicador está esperando a que el usuario ingrese un comando. + +Ejemplo: +---- + maverick@rocky:~ $ +---- +Donde: + + +_maverick_ es el nombre de usuario. + +_rocky_ es el nombre del host (equipo). + +Encontraremos los siguientes símbolos "$" y "#", los cuales tienen diferentes significados: + + +*Prompt de usuario:* + +- Cuando se ve este símbolo "$", nos indica que estás trabajando con privilegios de usuarios normales. + +- Los comandos que ejecutas con este prompt tiene acceso solo a los recursos y archivos a los que el usuario tiene permisos. + + + +*Prompt de superusuario o root:* + +- Cuando ves este símbolo "#", indica que estás trabajando con privilegios de superusuario o root. + +- Los comandos ejecutados con este prompt tiene acceso total al sistema y pueden realizar cambios críticos, como instalar o desinstalar programas, modificar configuraciones del sistema, etc. + + +[NOTE, caption=Nota] +==== +Es muy importante tener precaución al utilizar el prompt de superusuario "#", ya que los comandos ejecutados con estos privilegios pueden afectar al sistema de manera significativa. Por lo que te recomiendo minimizar el uso de estos privilegios y solo utilizarlos cuando sea necesario para evitar posibles problemas de seguridad o errores graves. +==== + +==== Historial de comandos +La mayoría de los shells mantienen un historial de comandos previos, lo que facilita la recuperación y repetición de comandos anteriores. + +== ¿Para qué sirven los comandos? +Permite al usuario interactuar con el sistema operativo y realizar diversas operaciones, como la navegación por el sistema de archivos, la manipulación de archivos y directorios, la gestión de procesos entre otras funciones + + + +Ejemplos: 'ls', 'cd', 'pwd', 'cp', 'mv', 'rm', 'mkdir', 'cat', 'touch',... + +== Sintaxis básica en Linux +---- + comando [opciones] [argumentos] +---- + +|=== +| Comando | El nombre del comando que se va a ejecutar. +| Opciones | Modificadores que afectan el comportamiento del comando. +| Argumentos | Datos que el comando necesita para realizar su tarea. +|=== + +== Entrada, Salida y Error Estándar + +._Entrada, Salida y Error Estándar_ +image::filesystem/estandarComandos.png["Entrada, Salida y Error"] + +== ¿Cómo saber las opciones del comando? _(man)_ +*Linux* cuenta con un gran número de comandos, por lo que saber todos es complicado, por suerte existe *man* (manual) que nos dará información del comando y las opciones con las que cuenta. + +---- +$ man 'comando' +$ man ping --> información del comando ping +---- +-Para navegar a través de estas páginas usamos las flechas del teclado. + +-Para buscar dentro del manual basta con escribir una barra "/" seguida del texto que queremos buscar. + +-Para pasar a la siguiente coincidencia presionamos la tecla "n" y para regresar a la coincidencia anterior presionamos "shift + n". + +-Para salir presionamos "q". + + +'man' también es un comando, veamos el manual de 'man' + +---- + +$ man man + +MAN(1) Utilidades de paginador del manual MAN(1) + +NOMBRE + man - interfaz de los manuales de referencia del sistema + +SINOPSIS + man [opciones de man] [[sección] página ...] ... + man -k [opciones de apropos] regexp ... + man -K [opciones de man] [sección] term ... + man -f [whatis opciones] página ... + man -l [opciones de man] archivo ... + man -w|-W [opciones de man] página ... + +DESCRIPCIÓN + man es el paginador de manuales del sistema. Cada argumento de página dado a man normalmente es el nombre de un programa, utilidad o función. La + página de manual asociada con cada uno de estos argumentos es, pues, encontrada y mostrada. Si se proporciona una sección, man mirará solo en esa + sección del manual. La acción predeterminada es buscar en todas las secciones disponibles siguiendo un orden predefinido (véase DEFAULTS), y + mostrar solo la primera página encontrada, incluso si la página existe en varias secciones. +... + +---- + +Antes de empezar la aventura con Nemo, debemos descagar el material que necesitamos, para ello crea una carpeta dentro de tu home con nombre "Curso". + +----- + + $ mkdir Curso + +----- + +Ahora vamos a copiar los archivos con la siguiente instrucción: + +---- + + $ cp -r /tmp/material-curso/dory Curso + +---- + +== ¡Comencemos! + +=== ¿Dónde estamos? _(pwd)_ +El comando *pwd* (Print Work Directory) muestra la ruta absoluta del lugar en que nos encontramos. +---- + $ pwd + + /home/dory +---- + +=== ¿Cómo ver el contenido de los directorios? _(ls)_ +El comando *ls* (LiSt) lista el contenido que hay en la ruta especificada (si no recibe una ruta, muestra lo que hay en el directorio en que nos encontramos). + +---- + $ ls + + Barco_Hundido Corriente_Marina Sherman_Wallaby_42_Sidney +---- + +|=== +| Comando | Descripción + +| ls | Despliega el contenido del directorio donde se encuentre. + +| ls /etc/apt | Despliegue el contenido de la ruta que se especifique. + +| ls -l | Utiliza formato de lista larga (muestra más detalles). + +| ls -a | No ignora entradas que empiecen con "." (archivos ocultos). + +| ls -t | Ordenar por tiempo de modificación (el más reciente primero). + +| ls -S | Ordena por tamaño de archivo. + +|=== + +=== ¿Cómo moverse entre los directorios? _(cd)_ +El comando *cd* (Change Directory) se utiliza para cambiar el directorio actual en el que se encuentra. + +Ejemplo: + +---- + cd Barco_Hundido +---- + +|=== +| Comando | Descripción + +| cd | En el caso que *cd* se ejecute sin parámetros, cambiará al directorio personal del usuario. + +| cd /etc/apt/ | Ir a la ruta especificada. Esta es una ruta absoluta ya que comienza con "/". + +| cd . | Directorio actual. + +| cd .. | Cambia al directorio *padre* (un directorio arriba de donde estamos). + +| cd / | Cambia al directorio raíz. + +| cd - | Cambia al directorio donde estábamos anteriormente. + +|=== + +=== Hora de crear un directorio _(mkdir)_ +*mkdir* (MaKe DIRectory) se utiliza para crear directorios. + + +---- + $ mkdir [opcion] nombreDirectorio +---- + +|=== +|Comando |Descripción +|$ mkdir nombreCarpeta | Crea un directorio llamado 'nombreCarpeta' +|$ mkdir -p carpeta1/carpeta2 | Crea directorios de manera recursiva +|=== + +=== ¿Y los archivos? _(touch)_ +*touch* (change file timestamps) se utiliza para crear archivos vacíos. + +---- + $ touch [opcion] 'nombreArchivo +---- +|=== +|Comando | Descripción +|$ touch Documento | Crea un archivo llamado 'Documento' +|$ touch ejemplo.txt | Crea un archivo llamado 'ejemplo.txt' +|=== + +=== ¿Y si mejor creo una copia? _(cp)_ +El comando *cp* (CoPy) lo utilizamos para copiar archivos y directorios. + +---- + $ cp [opcion] 'archivo/directorio' 'destino' +---- +|=== +|Comando | Descripción +|$ cp cancion musica | Copia el archivo 'cancion' en el directorio 'musica'. +|$ cp -r temp/ aux/ | Copia el contenido del directorio 'temp' en el directorio 'aux' de manera recursiva. +|=== + +=== ¿Cómo se puede mover un directorio o archivo? _(mv)_ +Para mover de lugar un archivo o directorio utilizamos el comando *mv* (MoVe). + +---- + $ mv [opcion] 'archivo/directorio' 'destino' +---- +|=== +| Comando | Descripción +| $ mv archivo ruta/del/destino | Mueve 'archivo' a 'ruta/del/destino' +| $ mv carpeta1 carpeta2 | Mueve la 'carpeta1' a 'carpeta2' +|=== + +=== Renombrar un directorio o archivo _(mv)_ +Con *mv* (MoVe) también podemos renombrar un archivo o directorio. + +---- + $ mv [opcion] 'nombre' 'nuevoNombre' +---- + +|=== +| Comando | Descripción +| $ mv version1 version2 | Cambia el nombre de el archivo 'version1' a 'version2'. +|=== + +=== Eliminemos algo _(rmdir)_ +*rmdir* (ReMove DIRectory) lo utilizaremos para eliminar directorios vacíos, es decir, aquellos que no contengan subdirectorio ni archivos. + +---- + $ rmdir [opcion] 'directorioVacio' +---- + +=== Eliminar archivos _(rm)_ +Con *rm* (ReMove) podemos eliminar archivos, además de directorio que no estén vacíos. + +---- + $ rm [opcion] 'archivo' +---- + +|=== +| Comando | Descripción +| $ rm documento.txt | Elimina el archivo 'documento.txt' +| $ rm -r carpeta/ | Elimina de manera recursiva el directorio 'carpeta/' y todo su contenido. +| $ rm -i aux.txt | Solicita confirmación antes de eliminar el archivo 'aux.txt' +|=== +[NOTE, caption=Nota] +==== +La opción *-r* (recursivo) es esencial cuando se utiliza rm para eliminar directorios y su contenido. Sin está opción, *rm* no eliminará directorios. +==== + +*Advertencia* + +Antes de eliminar cualquier archivo o directorio, hay que estar completamente seguros de que ya no son necesarios, pues tanto *rmdir* con *rm* no solicitan algún tipo de confirmación y todo lo eliminado no se podrá recuperar. + +=== ¿Qué está escrito aquí? _(cat)_ +El comando *cat* (conCATenate) se utiliza para concatenar y mostrar el contenido de archivos. + +---- +$ cat [opcion] file +---- +|=== +| Comando | Descripción +| $ cat 'ejemplo.txt' | Muestra el contenido del archivo 'ejemplo.txt' +|=== + +=== ¿Existe otra forma de ver el contenido de mi archivo? _(less)_ +Si, *less* (LESS is more) también nos permite visualizar el contenido de los archivos. + +---- +$ less [opcion] file +---- +|=== +| Comando | Descripción +| $ less hola.c | Muestra en contenido de hola.c +|=== +[NOTE, caption=Nota] +==== +Presionamos 'q' para salir de less. +==== + +*Diferencias entre _cat_ y _less_* +|=== +|*cat* |*less* +|Su función principal es concatenar y mostrar el contenido de archivos en la salida estándar (generalmente la pantalla). | Permite visualizar el contenido de archivos de manera paginada, lo que facilita la navegación por grandes cantidades de datos. A diferencia de *cat*, *less* muestra el contenido de manera que se puede desplazar hacia arriba y hacia abajo. +|*cat archivo1 archivo2* muestra el contenido de *archivo1* seguido por el contenido de *archivo2*. | *less archivo.txt* permite ver el contenido de *archivo.txt* de manera paginada, facilitando la lectura y la navegación. +|Muestra todo el contenido de los archivos de una vez. Puede ser útil para archivos pequeños o cuando simplemente se quiere ver rápidamente el contenido completo.| Permite desplazarse hacia arriba y hacia abajo, realizar búsquedas y ofrece otras funciones de visualización más avanzadas. +|=== + +=== ¿Dónde lo encuentro? _(find)_ +Para buscar directorios o archivos utilizaremos el comando *find* (encontrar). + +---- +$ find [ruta] [opciones] -name 'patron' +---- +|=== +| Comando | Descripción +| $ find /home/usuario -name '*.txt' | Busca todos los archivos con extensión'.txt' en el directorio especificado. +|=== + +=== Limpiemos la pantalla _(clear)_ +*clear* (limpiar) lo utilizaremos para limpiar la pantalla. + +---- +$ clear +---- + +Otra manera de limpiar la pantalla es utilizando *_ctrl + l_* , se borra el contenido visible en la terminal, pero el historial de comandos y resultados anteriores sigue estando disponible. Este atajo es útil para limpiar la pantalla y hacerla más legible, especialmente cuando se han ejecutado muchos comandos y la salida en la terminal se vuelve extensa. Es una forma rápida y conveniente de mantener la interfaz de usuario limpia. \ No newline at end of file diff --git a/docs/modules/dia_1/pages/sistema_archivos.adoc b/docs/modules/dia_1/pages/sistema_archivos.adoc new file mode 100644 index 0000000..3594fb9 --- /dev/null +++ b/docs/modules/dia_1/pages/sistema_archivos.adoc @@ -0,0 +1,100 @@ += Sistema de Archivos + +:table-caption: Tabla +:figure-caption: Figura + +Un sistema de archivos es una estructura y conjunto de reglas utilizadas por un sistema operativo para organizar y almacenar datos en dispositivos de almacenamiento de cómputo. El sistema de archivos define cómo se almacenan, nombran, acceden y gestionan los archivos y directorios en un dispositivo de almacenamiento. + +*Ejemplos.* + + * exFAT + * Ext4 + * XFS + +== Filosofía Unix +“Everything is a file” (Todo es un archivo) describe una de las principales características de Unix y sus derivados. + +Un *archivo normal* se puede definir como un conjunto de datos con un nombre asociado. Los archivos suelen residir en dispositivos de almacenamiento secundario tales como cintas, discos duros o discos flexibles. Estos archivo no son más que una secuencia de bytes (8 bits). + +== ¿Por qué todo es un archivo en Sistema tipo Unix? + +Hay tres ventajas principales en el enfoque de "todo es un archivo": + +* 1. Archivos y dispositivos de Entrada/Salida (teclado,pantalla, etc.) son tan similares como es posible. + +* 2. Los nombres de archivo y dispositivo tienen la misma sintaxis y significado, por lo que un programa que espera un nombre de archivo como parámetro puede pasar un nombre de dispositivo. + +* 3. Los archivos especiales están sujetos al mismo mecanismo de protección que los archivos normales. + +En Unix los archivos están organizados en los que se conoce como _directorios_. Un _directorio_ no es más que un archivo especial, el cual contiene información que permite localizar en el dispositivo otros archivos. Los directorios pueden contener a su vez nuevos directorios, los cuales se denominan subdirectorios. + +//image::filesystem/pathname.png["arbol-de-archivo"] + +._Representación de una árbol de archivos_ +image::filesystem/arbolSistemas.png["Árbol de archivos"] + +|=== +| Directorio | Descripción +| / | El directorio raíz (/) es el directorio principal en un sistema de archivos de tipo Unix. +| /bin (binarios) | Contiene archivos ejecutables (programas) que son esenciales para el funcionamiento del sistema, y que son necesarios para el arranque del sistema. +| /boot (arranque) | Contiene archivos necesarios para el proceso de arranque del sistema, como el kernel y los archivos de configuración del gestor de arranque. +| /dev (dispositivos)| Contiene archivos especiales que representan dispositivos del sistema, como discos, particiones y periféricos. +| /etc (configuración) | Almacena archivos de configuración del sistema y de las aplicaciones instaladas en el sistema. +| /home (hogar) | Es el directorio principal de los usuarios regulares. Cada usuario tiene un subdirectorio en /home con su nombre de usuario donde pueden almacenar sus archivos personales. +| /lib (bibliotecas) | Contiene bibliotecas compartidas necesarias para la ejecución de programas del sistema y usuario. +| /mnt (montaje) | Se utiliza para montar sistemas de archivos adicionales o dispositivos de almacenamiento temporalmente. +| /proc (proceso) | Proporciona información en tiempo real sobre los procesos en ejecución y otros detalles del sistema. +| /root | El directorio hogar del usuario "root", que es el superusuario o administrador del sistema. +| /bin (binarios del sistema) | Contiene archivos ejecutables esenciales para la administración del sistema, generalmente utilizados por el superusuario. +| /tmp (temporal) | Directorio utilizado para almacenar archivos temporales. +| /usr (usuario) | Contiene archivos y programas utilizados por usuarios, incluyendo binarios, bibliotecas y documentos. +| /usr/bin | Contiene información de instalaciones locales. +| /usr/lib | Almacena las bibliotecas y los archivos de datos necesarios para los programas almacenados en /usr o en otro lugar. +| /var (variable) | Almacena datos variables, como registros de sistemas y archivos de bases de datos. +|=== + + +== Pathname + +Los archivos en un sistema tipo Unix están organizados en una estructura jerárquica de varios niveles conocida como árbol de directorios. En la parte superior del sistema de archivos hay un directorio llamado "raíz" que se representa con "/". Todos los demás archivos son "descendientes" de la raíz. + +._Representación de un pathname_ +image::filesystem/pathnameSistemas.png["pathname"] + +Como en todo sistema de archivos de cualquier sistema operativo, la referencia a un archivo/directorio debe ser hecha a través de su *pathname*. Un pathname se forma de la siguiente manera: + +---- +/directorio1/directorio2/.../directorioN/archivo +---- + +=== Ruta absoluta +Especifica la ruta completa desde el directorio raíz hasta el archivo o directorio. + +Comienza con una barra inclinada ('/') . + +---- +/home/Ana/Documentos/Materia/ejemplo.txt +---- + +=== Ruta relativa +Especifica la ruta desde el directorio de trabajo actual. + +No comienza con una barra inclinada ('/'). + +---- +Documentos/Materia/ejemplo.txt +---- + +== Tipos de Archivos + +Se contienen varios tipos de archivos: + +* _Archivos ordinarios:_ Un archivo ordinario es un archivo en el sistema que contiene datos, texto o instrucciones de programa. + +* _Directorios:_ Archivos que son listas de otros archivos. + +* _Archivos especiales:_ Se utilizan para representar un dispositivo físico real, como una impresora. + +* _Pipes (Tuberías):_ UNIX le permite vincular comandos mediante una tubería. La tubería actúa como un archivo temporal que solo existe para contener datos de un comando hasta que los lea otro. + +* _Sockets:_ Es un archivo especial que permite una comunicación avanzada entre procesos. + +* _Enlace simbólico:_ El enlace simbólico se utiliza para hacer referencia a algún otro archivo del sistema de archivos. diff --git a/docs/modules/dia_2/images/actividades/group2.png b/docs/modules/dia_2/images/actividades/group2.png new file mode 100644 index 0000000..e62a098 Binary files /dev/null and b/docs/modules/dia_2/images/actividades/group2.png differ diff --git a/docs/modules/dia_2/images/actividades/group2.png:Zone.Identifier b/docs/modules/dia_2/images/actividades/group2.png:Zone.Identifier new file mode 100644 index 0000000..a45e1ac --- /dev/null +++ b/docs/modules/dia_2/images/actividades/group2.png:Zone.Identifier @@ -0,0 +1,2 @@ +[ZoneTransfer] +ZoneId=3 diff --git a/docs/modules/dia_2/images/actividades/grupos3.png b/docs/modules/dia_2/images/actividades/grupos3.png new file mode 100644 index 0000000..60e6c87 Binary files /dev/null and b/docs/modules/dia_2/images/actividades/grupos3.png differ diff --git a/docs/modules/dia_2/images/actividades/grupos3.png:Zone.Identifier b/docs/modules/dia_2/images/actividades/grupos3.png:Zone.Identifier new file mode 100644 index 0000000..a45e1ac --- /dev/null +++ b/docs/modules/dia_2/images/actividades/grupos3.png:Zone.Identifier @@ -0,0 +1,2 @@ +[ZoneTransfer] +ZoneId=3 diff --git a/docs/modules/dia_2/images/actividades/grupos4.png b/docs/modules/dia_2/images/actividades/grupos4.png new file mode 100644 index 0000000..79d3b7f Binary files /dev/null and b/docs/modules/dia_2/images/actividades/grupos4.png differ diff --git a/docs/modules/dia_2/images/actividades/grupos4.png:Zone.Identifier b/docs/modules/dia_2/images/actividades/grupos4.png:Zone.Identifier new file mode 100644 index 0000000..a45e1ac --- /dev/null +++ b/docs/modules/dia_2/images/actividades/grupos4.png:Zone.Identifier @@ -0,0 +1,2 @@ +[ZoneTransfer] +ZoneId=3 diff --git a/docs/modules/dia_2/images/actividades/home.png b/docs/modules/dia_2/images/actividades/home.png new file mode 100644 index 0000000..f99db39 Binary files /dev/null and b/docs/modules/dia_2/images/actividades/home.png differ diff --git a/docs/modules/dia_2/images/actividades/home.png:Zone.Identifier b/docs/modules/dia_2/images/actividades/home.png:Zone.Identifier new file mode 100644 index 0000000..a45e1ac --- /dev/null +++ b/docs/modules/dia_2/images/actividades/home.png:Zone.Identifier @@ -0,0 +1,2 @@ +[ZoneTransfer] +ZoneId=3 diff --git a/docs/modules/dia_2/images/actividades/passwd2.png b/docs/modules/dia_2/images/actividades/passwd2.png new file mode 100644 index 0000000..60c497c Binary files /dev/null and b/docs/modules/dia_2/images/actividades/passwd2.png differ diff --git a/docs/modules/dia_2/images/permisos/gatosPermisos.png b/docs/modules/dia_2/images/permisos/gatosPermisos.png new file mode 100644 index 0000000..f3f7222 Binary files /dev/null and b/docs/modules/dia_2/images/permisos/gatosPermisos.png differ diff --git a/docs/modules/dia_2/images/permisos/gatosPermisos.png:Zone.Identifier b/docs/modules/dia_2/images/permisos/gatosPermisos.png:Zone.Identifier new file mode 100644 index 0000000..a45e1ac --- /dev/null +++ b/docs/modules/dia_2/images/permisos/gatosPermisos.png:Zone.Identifier @@ -0,0 +1,2 @@ +[ZoneTransfer] +ZoneId=3 diff --git a/docs/modules/dia_2/images/permisos/permisosPer.png b/docs/modules/dia_2/images/permisos/permisosPer.png new file mode 100644 index 0000000..7ad9a4e Binary files /dev/null and b/docs/modules/dia_2/images/permisos/permisosPer.png differ diff --git a/docs/modules/dia_2/images/permisos/permisosPer.png:Zone.Identifier b/docs/modules/dia_2/images/permisos/permisosPer.png:Zone.Identifier new file mode 100644 index 0000000..ae45b10 --- /dev/null +++ b/docs/modules/dia_2/images/permisos/permisosPer.png:Zone.Identifier @@ -0,0 +1,4 @@ +[ZoneTransfer] +ZoneId=3 +ReferrerUrl=https://computernewage.com/ +HostUrl=https://computernewagedotcom.files.wordpress.com/2015/06/representacion-permisos-en-linux1.png diff --git a/docs/modules/dia_2/images/permisos/perrosPermisos.png b/docs/modules/dia_2/images/permisos/perrosPermisos.png new file mode 100644 index 0000000..7809a22 Binary files /dev/null and b/docs/modules/dia_2/images/permisos/perrosPermisos.png differ diff --git a/docs/modules/dia_2/images/permisos/perrosPermisos.png:Zone.Identifier b/docs/modules/dia_2/images/permisos/perrosPermisos.png:Zone.Identifier new file mode 100644 index 0000000..a45e1ac --- /dev/null +++ b/docs/modules/dia_2/images/permisos/perrosPermisos.png:Zone.Identifier @@ -0,0 +1,2 @@ +[ZoneTransfer] +ZoneId=3 diff --git a/docs/modules/nivel_0/images/dia_2/usuarios/groups.png b/docs/modules/dia_2/images/usuarios/groupUsuarios.png similarity index 100% rename from docs/modules/nivel_0/images/dia_2/usuarios/groups.png rename to docs/modules/dia_2/images/usuarios/groupUsuarios.png diff --git a/docs/modules/nivel_0/images/dia_2/usuarios/passwd.png b/docs/modules/dia_2/images/usuarios/passwdUsuarios.png similarity index 100% rename from docs/modules/nivel_0/images/dia_2/usuarios/passwd.png rename to docs/modules/dia_2/images/usuarios/passwdUsuarios.png diff --git a/docs/modules/dia_2/nav.adoc b/docs/modules/dia_2/nav.adoc new file mode 100644 index 0000000..f0f7978 --- /dev/null +++ b/docs/modules/dia_2/nav.adoc @@ -0,0 +1,8 @@ +* Día 2 +** xref:instalacion.adoc[Instalación] +** xref:usuarios.adoc[Usuarios] +** xref:permisos.adoc[Permisos] +** xref:actividades.adoc[Actividades] +** xref:anexos[Anexos] +*** xref:anexos/instalacion.adoc[Instalación] +*** xref:anexos/permisos.adoc[Permisos] \ No newline at end of file diff --git a/docs/modules/dia_2/pages/actividades.adoc b/docs/modules/dia_2/pages/actividades.adoc new file mode 100644 index 0000000..5272bc1 --- /dev/null +++ b/docs/modules/dia_2/pages/actividades.adoc @@ -0,0 +1,184 @@ += Actividades +:table-caption: Tabla +:figure-caption: Figura + +== Crea los Usuarios: + +* Squirtle + +.Respuesta +[%collapsible] +==== + $ sudo useradd Squirtle +==== + +* Charizard, establece su directorio personal. + +.Respuesta +[%collapsible] +==== + $ sudo useradd -m Charizar +==== + +* Dragonite, establece su directorio personal , shell de usuario, ID = 2001 + +.Respuesta +[%collapsible] +==== + $ sudo useradd -m -s /bin/bash -u 2001 Dragonite +==== + +* Bulbasaur, establece su directorio personal ID = 3043 y crea un grupo con su mismo nombre. + +.Respuesta +[%collapsible] +==== + $ sudo useradd -m -u 3043 -U Bulbasaur +==== + +*Revisa los documentos* + +* /etc/passwd +* /etc/group + +./etc/passwd +image::actividades/passwd2.png["/etc/passwd"] + +./etc/group +image::actividades/group2.png["/etc/group"] + +*¿Notas la diferencia?* + +En el caso de _/etc/passwd_, al no asignar un *UID* (User ID) de usuario (-u), el sistema asignará automáticamente un UID disponible en función de la configuración del sistema y las UID ya existentes. + +Por otra parte, a *Dragonite* fue al usuario que se le asigno un shell de usuario (-s /bin/bash ) lo que le proporciona funcionalidades adicionales, como historial de comandos, autocompletado y características más avanzadas de scripting. + +Mientras que *Charizar* y *Bulbasaur* obtuvieron /bin/hs, a menudo se utiliza como un enlace simbólico a una shell específica del sistema, que puede ser Bash ó Dash. + +*Reviza el directorio /home* + +./home +image::actividades/home.png["/etc/passwd"] + +En el directorio falta el usuario *Squirtle*, ya qué no se le ingreso la opción de establecer el directorio personal *(-m)* + + +== Contraseñas +Asigna una contraseña a *Charizard* y *Bulbasaur*. + +.Respuesta +[%collapsible] +==== + $ sudo passwd Charizard + $ sudo passwd Bulbasaur +==== + + +== Creemos los siguientes grupos + +Crea los siguientes grupos: + +* *Agua.* + +.Respuesta +[%collapsible] +==== + $ sudo groupadd Agua +==== + +* *Planta.* + +.Respuesta +[%collapsible] +==== + $ sudo groupadd Planta +==== + +* *Fuego.* + +.Respuesta +[%collapsible] +==== + $ sudo groupadd Fuego +==== + +* *Dragon.* + +.Respuesta +[%collapsible] +==== + $ sudo groupadd Dragon +==== + +*Vuelve a revisar el archivo _/etc/group_* + +./etc/group +image::actividades/grupos3.png["/etc/group"] + +* Agrega a Squirtle al grupo *Agua*. + +.Respuesta +[%collapsible] +==== + $ sudo usermod -aG Agua Squirtle +==== + +* Agrega a Bolbasaur al grupo *Planta*. + +.Respuesta +[%collapsible] +==== + $ sudo usermod -aG Plnata Bolbasaur +==== + +* Agrega a Charizar al grupo *Fuego*. + +.Respuesta +[%collapsible] +==== + $ sudo usermod -aG Fuego Charizar +==== + +* Agrega a Dragonite al grupo *Dragon*. + +.Respuesta +[%collapsible] +==== + $ sudo usermod -aG Dragon Dragonite +==== + +*Una vez más revisa el archivo /etc/group* + +./etc/group +image::actividades/grupos4.png["/etc/group"] + +Crea un usuario que pueda pertenecer a cada uno de los grupos existentes y agregalo al grupo. +(Agrega los opciones que consideres) + +Te puedes apoyar en la siguente página. + +.Wikidex +link:URL[https://www.wikidex.net/wiki/Lista_de_Pok%C3%A9mon_por_tipo#Veneno] + +.Pista +[%collapsible] +==== + $ sudo useradd 'nombreUsuario' + $ sudo usermod -aG 'grupo' 'nombreUsuario' +==== + +* Elimina al *Squirtel* + +* Agrega a *Charizar* al grupo *Dragon*. + +* Elimina al grupo *Agua*. + +* Crea al usuarios Ho-Oh (con las opciones que consideres) +* Agrega a Ho-Oh a los grupos *Fuego* y *Dragon* en una sola instrucción. + +.Respuesta +[%collapsible] +==== + $ sudo usermod -a Fuego Dragon +==== + diff --git a/docs/modules/dia_2/pages/anexos/instalacion.adoc b/docs/modules/dia_2/pages/anexos/instalacion.adoc new file mode 100644 index 0000000..3bdfe67 --- /dev/null +++ b/docs/modules/dia_2/pages/anexos/instalacion.adoc @@ -0,0 +1,163 @@ += Instalación + +:table-caption: Tabla +:figure-caption: Figura + +[#compilación] +== Compilación con GNU Tools +En Linux muchos de los programas son de software libre, +esto significa que podemos obtener el código fuente lo que nos +permite modificar los programas y compilarlos para nuestro hardware. + +=== ¿Qué es compilar? +Compilar es el proceso de transformar un programa informático escrito +en un lenguaje en un conjunto de instrucciones en otro formato o lenguaje. +Un compilador es un programa de computadora que realiza dicha tarea. + +En particular cuando hablamos de compilar nos referimos a traducir código +escrito en un lenguaje de programación a código que puede ser ejecutado por +la computadora. + +=== ¿Cuáles son los compiladores de GNU? +*GNU Compiler Collection* (*GCC*) fue desarrollado como un compilador de lenguaje *C* para el proyecto +GNU, con el tiempo paso a ser una colección de compiladores, ya que empezó +a dar soporte a más lenguajes, actualmente en la versión 12.2 *gcc* +puede compilar *C*, *C++*, *Objective-C*, *Fortran*, *Ada*, *Go* y *D*. + +//// +==== Práctica +* Copia el directorio `/tmp/material/dia_3` a tu directorio home. +* Entra en el directorio `~/dia_3/hola_mundo`. +* Compila el código usando *gcc*. +* Ejecuta el programa pasando tu nombre como parámetro. + +.Respuesta +[%collapsible] +==== +[source,shell] +gcc -c -o hola.o hola.c +gcc -c -o main.o main.c +gcc -o hola_mundo hola.o main.o +./hola_mundo "Nombre" +==== +//// + +=== ¿Es lo mismo con proyectos más complejos? +Cuando un proyecto se vuelve grande o complejo se hace más +difícil compilarlo a mano, para estos casos existe *make*. + +*make* ayuda a automatizar la compilación de programas, los desarrolladores +definen reglas para tareas específicas, estas reglas son usadas por *make* +para saber que debe hacer. + +Las reglas son definidas en un archivo llamado *Makefile* o *makefile*, +cuando vemos uno de estos archivos en el código fuente significa que +podemos usar *make* para compilarlo. + +Ejemplos de como compilar. +[source,shell] +make +make all + +Ejemplo de como instalar. (Debe estar definido en el *Makefile*) +[source,shell] +make install + +Si el *makefile* no tiene la operación *install* entonces la +instalación debe realizarse por otros medios. Esto puede hacerse copiando +los binarios al directorio donde deseamos hacer la instalación (usualmente +/usr/local/bin) y arreglando los permisos para que puedan ser ejecutados +por cualquier usuario. + +Los desarrolladores regularmente incluyen en el código fuente instrucciones +para compilar e instalar el programa. + +//// +==== Práctica +Compilar e instalar *figlet* usando make. + +* Descargar el código fuente desde https://github.com/cmatsuoka/figlet.git + +.Pista +[%collapsible] +==== +[source,shell] +git clone https://github.com/cmatsuoka/figlet.git +==== +* Entra en el directorio del código. +* Usa *make* para compilar el programa. +* Usa *make* para instalar el programa.(Requiere *sudo*) + +.Respuesta +[%collapsible] +==== +[source,shell] +make +sudo make install +==== +//// + +=== ¿Make funciona en cualquier computadora? +En muchas ocasiones las diferencias en el hardware y sistema operativo +hacen imposible para los desarrolladores el poder compilar el código +usando solo un *makefile*, algunas formas de solucionar esto fueron +escribir diferentes *makefile* para los diferentes escenarios o proveer uno +que fuera fácil de modificar. Con el tiempo evolucionó a scripts que +generan de forma automática el *makefile* haciendo un análisis de diferentes +aspectos del sistema en el que se ejecutan. + +*autoconf* nos ayuda a generar un *makefile*, para esto genera un script +llamado *configure*, este es el encargado de analizar el sistema y generar +el *makefile* adecuado. + +Para poder usar *autoconf* es necesario que los desarrolladores incluyan +un archivo llamado *configure.ac* o *configure.in*. + +El script *configure* incorpora algunas opciones para personalizar la instalación, estas +opciones pueden ser consultadas con el siguiente comando. + +[source,shell] + ./configure --help + +//// +==== Práctica +* Descarga el código de *moon-buggy* desde https://github.com/seehuhn/moon-buggy.git + +.Pista +[%collapsible] +==== +[source,shell] +git clone https://github.com/seehuhn/moon-buggy.git +==== +* Entra en el directorio del código. +* Ejecuta el script `autogen.sh` + +.Pista +[%collapsible] +==== +[source,shell] + ./autogen.sh +==== +* Ejecuta el script `configure` +* Compila el programa +* Instala el programa + +.Respuesta +[%collapsible] +==== +[source,shell] + ./configure +make +sudo make install +==== +//// + +==== Autoreconf +En ocasiones no es suficiente con ejecutar *autoconf*, para estos casos +existe *autoreconf* esta herramienta se encarga de ejecutar *autoconf* +junto con algunas otras herramientas que son necesarias en el proceso +de generar un script de configuración. + +Ejemplo de uso. +[source,shell] +autoreconf -i diff --git a/docs/modules/dia_2/pages/anexos/permisos.adoc b/docs/modules/dia_2/pages/anexos/permisos.adoc new file mode 100644 index 0000000..7c00b0d --- /dev/null +++ b/docs/modules/dia_2/pages/anexos/permisos.adoc @@ -0,0 +1,77 @@ += Permisos + +:table-caption: Tabla +:figure-caption: Figura + +[#modo_octal] +== Modo (octal) + +Además del xref:../permisos#modo_simbolico[_modo simbólico_] el comando `chmod` soporta el _modo octal_ o _modo absoluto_ para modificar los permisos de un archivo. Para utilizar el _modo octal_, siga la sintaxis vista previamente: +---- +chmod [OPCIONES] MODO ARCHIVO +---- + +.Codificación de permisos +[cols="^.^1,^.^1,^.^1", options="autowidth, header"] +|=== +|Permiso +|Binario +|Octal + +|`---` +|000 +|0 + +|`--x` +|001 +|1 + +|`-w-` +|010 +|2 + +|`-wx` +|011 +|3 + +|`r--` +|100 +|4 + +|`r-x` +|101 +|5 + +|`rw-` +|110 +|6 + +|`rwx` +|111 +|7 +|=== + +[#ejemplo] +=== Ejemplo + +Para modificar los permisos del archivo archivo `lavanda.txt`: +---- +ls -l lavanda.txt +-rw-r--r-- 1 lavandula planta 279 Jul 3 12:01 lavanda.txt +---- + +a los siguientes: +---- +rwxrw-rw- +---- + +Ejecute el comando: +---- +$ chmod 766 lavanda.txt +---- + +y verifique los permisos del archivo: +---- +ls -l lavanda.txt +-rwxrw-rw- 1 lavandula planta 279 Jul 3 12:01 lavanda.txt +---- diff --git a/docs/modules/dia_2/pages/instalacion.adoc b/docs/modules/dia_2/pages/instalacion.adoc new file mode 100644 index 0000000..3c8de6b --- /dev/null +++ b/docs/modules/dia_2/pages/instalacion.adoc @@ -0,0 +1,169 @@ += Instalación + +:table-caption: Tabla +:figure-caption: Figura + +== Compilación +En el pasado de Linux si alguien necesitaba software especifico que no estuviera en el sistema, este debía ser compilado a partir del código fuente. + +Por fortuna en la actualidad la mayoria del software que podemos instalar en Linux es distribuido mediante paquetes. + +=== Ventajas y desventajas de compilar los programas + +==== Ventajas +* Los programas pueden ser adaptados a nuestras necesidades. +* Podemos instalar versiones especificas. +* Podemos tener múltiples versiones instaladas al mismo tiempo. +* Podemos optimizar los programas para nuestro hardware. + +==== Desventajas +* Se necesitan conocimientos específicos para compilar. +* Se vuelve complicado administrar todos los programas que instalamos +de esta forma. +* Se necesita experiencia para optimizar los programas. +* Se necesita tener mucho tiempo libre para hacer pruebas. + +[#manejador_paquetes] +== ¿Siempre tengo que compilar los programas que uso? +Debido a los problemas que tiene compilar los programas con el tiempo +surgieron los manejadores de paquetes, estos hacen más fácil la tarea +de administrar los programas que instalamos. + +Un paquete incluye todos los archivos necesarios para la ejecución de +un programa, esto incluye binarios previamente compilados, información +sobre las dependencias y archivos de configuración. + +Los paquetes también incluyen scripts que pueden ser ejecutados durante +cualquier punto de la instalación. + +Los manejadores de paquetes tienen un modelo de dependencias, esto garantiza +que todas las librerías y otros programas de los que depende un paquete sean +instalados previamente. + +=== No todas las distribuciones Linux usan los mismos paquetes +En Linux hay dos principales formatos de paquetes que son usados por +la mayoría de las distribuciones son *rpm* y *deb*. + +*rpm* fue creado para RedHat y es heredado por todas las distribuciones basadas +en esta. De la misma forma *deb* es el formato de Debian, y es compartido +por sus derivadas. + +Cada uno de estos formatos tiene una herramienta encargada de instalar +y desinstalar los paquetes. Para *rpm* el instalador de paquetes es *rpm* +y *dpkg* es el respectivo de *deb*. + +==== Comandos básicos +Instalar un paquete +[source,shell] +rpm -i nombre_del_paquete.rpm +dpkg --install nombre_del_paquete.deb + +Desinstalar un paquete +[source,shell] +rpm -e nombre_del_paquete +dpkg --remove nombre_del_paquete + +Listar los paquetes instalados +[source,shell] +rpm -qa +dpkg -l + +==== Práctica +Instala los paquetes ``sl`` y ``nsnake`` que se encuentra en el directorio +``/tmp/material/debs`` + +.Pista +[%collapsible] +==== +Puede ser necesario instalar primero el paquete ``libncurses6`` +==== + +=== ¿De dónde vienen los paquetes? +Un repositorio es un servidor que funciona como un almacén de paquetes, +los repositorios son mantenidos por el equipo desarrollador de cada +distribución, de esta forma controlan las versiones de cada paquete para +asegurarse de que son compatibles entre sí. + +Por lo general las distribuciones tienen una versión de cada paquete para +cada tipo de arquitectura a la que dan soporte (64-bits, 32-bits, arm, +etc), también suelen almacenar varias versiones del mismo paquete. + +=== Manejadores de paquetes de alto nivel +Los manejadores de alto nivel ayudan a hacer más simple las tareas +de buscar y descargar paquetes, instalar dependencias de forma automática +y hacer actualizaciones de paquetes. + +Este tipo de manejadores de paquetes se conecta con los repositorios de +la distribución para buscar y descargar los paquetes que queremos instalar, +además puede consultar si hay versiones más recientes de los paquetes +que tenemos instalados para que estos sean actualizados. + +Otra de sus funciones es que pueden consultar en que paquete se encuentra +algún archivo en específico, + +Los manejadores de paquetes para las principales distribuciones son los +siguientes. + +Para *RedHat* y derivadas. +[source,shell] +yum + +Para *Debian* y derivadas. +[source,shell] +apt + +Para *Arch* y derivadas. +[source,shell] +pacman + +==== Comandos básicos +Buscar un paquete en los repositorios. +[source,shell] +yum search nombre_del_paquete +apt search nombre_del_paquete +pacman -Ss nombre_del_paquete + +Instalar un paquete desde los repositorios. +[source,shell] +yum install nombre_del_paquete +apt install nombre_del_paquete +pacman -S nomre_del_paquete + +Desinstalar un paquete. +[source,shell] +yum remove nombre_del_paquete +apt remove nombre_del_paquete +pacman -R nombre_del_paquete + +Actualizar todos los paquetes instalados. +[source,shell] +apt update && apt upgrade +yum update +pacman -Su + +Buscar un archivo dentro de los paquetes de los repositorios. +[source,shell] +yum provides nombre_del_archivo +apt-file search nombre_del_archivo +pacman -F nombre_del_archivo + +==== Práctica +Instala los paquetes ``moon-buggy`` y ``cowsay`` desde los repositorios. + +.Respuesta +[%collapsible] +==== +[source,shell] +apt install moon-buggy +apt install cowsay +==== + +//// +=== Práctica +Compila e instala los programas *cmatrix* y *sl* desde el código. + +Descarga el codigo usando. +[source,shell] +git clone https://github.com/abishekvashok/cmatrix.git +git clone https://github.com/mtoyoda/sl.git +//// diff --git a/docs/modules/dia_2/pages/permisos.adoc b/docs/modules/dia_2/pages/permisos.adoc new file mode 100644 index 0000000..cfd7a7d --- /dev/null +++ b/docs/modules/dia_2/pages/permisos.adoc @@ -0,0 +1,236 @@ += Permisos + +:table-caption: Tabla +:figure-caption: Figura + +Cada directorio y archivo cuentan con permisos, estos cumplen con la función de designar qué usuarios tendrán acceso a modificar o trabajar con cada uno de estos. + +_Permisos del Usuario:_ Son los permisos que se aplican al propietario de un determinado archivo o directorio. + +_Permisos del Grupo:_ Estos permisos definen los derechos de lectura, escritura y ejecución que se aplican sólo a aquellos usuarios que pertenecen al mismo grupo propietario del archivo/directorio. + +_Permisos de Otros:_ Estos permisos indican los derechos de lectura, escritura y ejecución del resto de los usuarios. + +¿Cómo saber los permisos de los archivos y directorios? + +.Respuestas +[%collapsible] +==== +1. $ ls -l +2. $ ls -la +==== + +Para conocer los permisos de archivo en específico ejecutamos: + +---- +$ ls -l 'nombreArchivo' + +-rwxr-xr-x 1 user user 0 jun 25 15:43 'nombreArchivo' +---- + +El primer bit indica el tipo de archivo. Generalmente se puede tratar de los siguientes casos: +|=== +| - | Se trata de un archivo regular. +| d | Se trata de un directorio. +| l | Se trata de un enlace simbólico. +|=== +El resto de los 9 bits a continuación representan los permisos del propietario del archivo o directorio, los del grupo al que pertenece este usuario y los del resto de usuario. +|=== +| r | Permisos de lectura. +| w | Permisos de escritura. +| x | Permisos de ejecución. +| - | No tiene permiso de lectura, escritura o ejecución. +|=== + +.Representación de los permisos de un archivo. +image::permisos/permisosPer.png["Representación de los permisos de un archivo"] + +== Representación numérica +En este caso se sustituye en grupos de 3 bits (_r_, _w_ y _x_) por un 1 ó 0, dependiendo de si se da o no el permiso, al final, del número en binario obtenido, lo representamos en número decimal para representar las diferentes combinaciones (r w x). + +|=== +| Permisos | Binario | Decimal +| r – – | 1 0 0 | 4 +| – w – | 0 1 0 | 2 +| – – x | 0 0 1 | 1 +|=== + +Tomando en cuenta la tabla anterior, podemos obtener el número que es la suma de todos los anteriores, dependiendo si se dan o no los permisos. + +|=== +| Permisos | Binario | Decimal | Descripción +| r w x | 1 1 1 | 7 | Permisos de lectura, escritura y ejecución. +| r w – | 1 1 0 | 6 | Permisos de lectura y escritura. +| r – x | 1 0 1 | 5 | Permisos de lectura y ejecución. +| r – – | 1 0 0 | 4 | Permiso de lectura. +| – w x | 0 1 1 | 3 | Permisos de escritura y ejecución. +| – w – | 0 1 0 | 2 | Permiso de escritura. +| – – x | 0 0 1 | 1 | Permiso de ejecución. +| – – – | 0 0 0 | 0 | Sin permisos. +|=== + + +*Vamos por lo que necesitamos* + +¿Como nos colocamos en /home/seiya? + +.Respuesta +[%collapsible] +==== + $ cd +==== + +Primero creamos un directorio. +---- + $ mkdir 'directorio' +---- + +Descargemos el material. +---- + $ sudo cp -r /tmp/material-curso/user 'directorio' +---- + +Dentro del directorio _user_ encontraras dos directorio: + +---- +Perros Gatos +---- + +Ingresemos en el directorios Perros. + +----- + $ cd Perros +----- + +¿Como se muestran los permisos del contenido del directorio?. + +.Respuesta +[%collapsible] +==== + # ls -l + # ls -la + Recuerda que la opcion '-la' no ingnora los archivos ocultos. +==== + +./user/Perros +image::permisos/perrosPermisos.png["/user/Perros"] + +Aquí tenemos un error, los archivos de este directorio no necesitan permisos de ejecución, vamos a solucionarlo. + +== Modificar los permisos de un archivo/directorio _(chmod)_ +El comando *chmod* se utiliza para cambiar los permisos de archivos y directorios. + +---- + $ sudo chmod [opciones] permisos 'archivo/directorio' +---- + +|=== +| opciones | Pueden ser varias opciones, como -R para cambiar permisos de forma recursiva en directorios y subdirectorios, para saber mas revisa el _man_. +| permisos | Representa los permisos que deseas asignar al archivo o directorio. +| archivo/directorio | Es el nombre del archivo o directorio que se le cambiarán los permisos. +|=== + +Recuerda que si no eres el propietario del archivo/directorio, deberás tener privilegios de superusuario (root). + +=== Actividades + +*Modifica los permisos del archivo Boxer.txt a los siguientes:* + +.Permisos de Boxer.txt +---- + -rw-r--r-- 1 root root 0 Feb 09:34 Boxer.txt +---- + +.Respuesta +[%collapsible] +==== + $ sudo chmod 644 Boxer.txt +==== + +*Modifica los permisos de Husky a los siguientes:* + +.Permisos de Husky +---- + -rw-rw-r-- 1 root root 0 Feb 09:34 Husky +---- + +.Respuesta +[%collapsible] +==== + $ sudo chmod 664 Husky +==== + +*Modifica los permisos de Pug.zip a los siguientes:* + +.Permisos de Pug.zip +---- + -rw-r----- 1 root root 0 Feb 09:34 Pug.zip +---- + +.Respuesta +[%collapsible] +==== + $ sudo chmod 640 Pug.zip +==== + +*Revisa los permisos del directorio Gatos.* + +.Permisos de Gatos +image::permisos/gatosPermisos.png["/user/Gtaos"] + +Tenemos el mismo error que en el directorio Perros, vamos a modificar los permisos. + +*Cambia los permisos de todos los archivos del directorio Gatos de manera recursiva a los siguientes:* + +.Nuevos permisos de Gatos +---- + -rw-r--r-- 1 root root 0 Feb 09:36 Bombay + -rw-r--r-- 1 root root 0 Feb 09:36 Persa.js + -rw-r--r-- 1 root root 0 Feb 09:36 Siberiano.c +---- + +.Respuesta +[%collapsible] +==== + $ sudo chmod -R 644 Gatos +==== + +== Cambio de Propietarios _(chown)_ +El comando *chown* se utiliza para cambiar el propietario y/o grupo de archivos y directorios. +---- +$ sudo chown [opciones] nuevoPropietario[:nuevoGrupo] 'archivo/directorio' +---- + +|=== +| nuevoPropietario | Especifica el nuevo propietario al que se desea asignar el archivo o directorio. +| nuevoGrupo | Permite especificar un nuevo grupo para el archivo o directorio. Si no se proporciona, el grupo se mantendrá sin cambios. +| archivo/directorio| Es el nombre del archivo o directorio que se le cambiarán los permisos. +|=== + +Recuerda que si no eres el propietario del archivo/directorio, deberás tener privilegios de superusuario (root). + +=== Actividades + +*Cambia el propietario del archivo que elijas por un usuario que creaste anteriormente.* + +.Pista +[%collapsible] +==== + $ sudo chwon 'nombrePropietario' 'nombreArchivo' +==== + +*Cambiar el propietario y el grupo de un archivo al mismo tiempo:* + +.Pista +[%collapsible] +==== + $ sudo chown 'nuevoPropuetario:nuevoGrupo' 'nombreArchivo' +==== + +*Cambia el propietario y grupo del directorio Perros y todos sus archivos y subdirectorios de forma recursiva por un ausuario antes creado.* + +.Pista +[%collapsible] +==== + $ sudo chown -R 'nuevoPropietario:nuevoGrupo' Perros +==== \ No newline at end of file diff --git a/docs/modules/dia_2/pages/usuarios.adoc b/docs/modules/dia_2/pages/usuarios.adoc new file mode 100644 index 0000000..b695dc5 --- /dev/null +++ b/docs/modules/dia_2/pages/usuarios.adoc @@ -0,0 +1,294 @@ += Usuarios + +:table-caption: Tabla +:figure-caption: Figura + +== ¿Qué es un usuario? +Un usuario se refiere a una cuenta individual que puede ser utilizada por una persona o un programa para acceder al sistema operativo. Cada usuario tiene un identificador único llamado "UID" (User ID) y pertenece a uno o más grupos, identificados por "GID" (Group ID). + +=== Tipos de usuarios +_Superusuario o root:_ El usuario "root" es el administrador del sistema con privilegios totales. Tiene acceso completo a todos los recursos del sistema y puede realizar cualquier acción, incluyendo la instalación y desinstalación de software,configuración del sistema y gestión de usuarios. + +_Usuario común o estándar:_ Este es el tipo de usuario regular que se utiliza para tareas diarias. + + +== Grupos +En Unix, un "grupo" es una colección de uno o más usuarios que comparten ciertos privilegios y permisos en el sistema. Los grupos proporcionan una forma eficiente de administrar permisos y controlar el acceso a recursos del sistema. + + +== Archivos especiales de usuarios + +=== _/etc/passwd_ +El archivo /etc/passwd es un archivo de texto plano que almacena información sobre las cuentas de usuario en el sistema. + + +.Una lista de usuarios en _/etc/passwd_ +---- +root:x:0:0:Superuser:/root:/bin/sh +daemon:*:1:1:daemon:/usr/sbin:/bin/sh +bin:*:2:2:bin:/bin:/bin/sh +sys:*:3:3:sys:/dev:/bin/sh +nobody:*:65534:65534:nobody:/home:/bin/false +juser:x:3119:1000:J. Random User:/home/juser:/bin/bash +beazley:x:143:1000:David Beazley:/home/beazley:/bin/bash +---- + +Cada línea representa un usuario y tiene siete campos separados por dos puntos. + +.Una entrada del archivo _/etc/passwd_ +image::/usuarios/passwdUsuarios.png["Una entrada del archivo _/etc/passwd_"] + +1. _Login name_: Nombre del usuario. + +2. _password_: En versiones modernas, este campo suele contener una "x" o un "*" para indicar que la contraseña está almacenada en el archivo /etc/shadow para mayor seguridad. + +3. _User Id_ (UID): Un número único que identifica de manera única al usuario en el sistema. Es el equivalente al ID de usuario. + +4. _Group Id_ (GID): Indica el ID del grupo principal al que pertenece el usuario. + +5. _Real name_: Nombre real de usuario + +6. _Home directory_: La ruta al directorio principal del usuario, donde se encuentra su espacio de trabajo por defecto. + +7. _Shell_: La ruta al programa de shell que se utilizará cuando el usuario inicie sesión. Este programa define la interfaz de línea de comandos para el usuario. + +== _/etc/group/_ +El archivo /etc/group contiene información sobre los grupos del sistema. Cada línea en este archivo representa un grupo y contiene varios campos separados por dos puntos ':'. + +.Una lista de grupos en _/etc/group_ +---- +root:*:0:juser +daemon:*:1: +bin:*:2: +sys:*:3: +adm:*:4: +disk:*:6:juser,beazley +nogroup:*:65534: +user:*:1000: +---- + +Cada línea representa un grupo y tiene cuatro campos separados por dos puntos: + +.Una entrada del archivo _group_ +image::/usuarios/groupUsuarios.png["Una entrada del archivo _/etc/groups_"] + +1. _Group name_: Identifica el nombre del grupo. + +2. _Password_: Similar al archivo /etc/passwd, este campo generalmente contiene una "x" o "*" para indicar que la contraseña se almacena en el archivo /etc/gshadow. + +3. _Group ID_: Un número único que identifica de manera única al grupo en el sistema. + +4. _Additional members_: Enumera los nombres de usuario que son miembros del grupo, separados por comas. + +[NOTE, caption=Nota] +==== +para saber a qué grupos pertenece un usuario se usa el comando _groups_ +---- +$ groups +---- +==== + +== _/etc/shadow_ +El archivo /etc/shadow, Al igual que /etc/passwd y /etc/group, es un documento de texto plano que contiene información crítica en sistemas Unix y Linux. /etc/shadow fue diseñado para almacenar de manera segura las contraseñas de los usuarios. + +.Una entrada del archivo _/etc/shadow_ +---- +root:$6$xP.qrgsIXaIaS4h6$ZeA/pqmicjEBSRduFToBCX.fYUNqAwOQ/zP.KUUkIWBLQog6znFb.81X/V3ztyfTC3uxR4Ws5TCEHJS7Hvgbi/::0:99999:7::: +bin:*:18505:0:99999:7::: +daemon:*:18505:0:99999:7::: +adm:*:18505:0:99999:7::: +lp:*:18505:0:99999:7::: +nobody:*:18505:0:99999:7::: +---- + +Cada línea representa un usuario y tiene nueve campos separados por dos puntos: + +1. Nombre de usuario (username): Identifica el nombre del usuario. + +2. Contraseña (password): Almacena una versión cifrada o hash de la contraseña del usuario. + +3. Fecha de la última modificación (last password change): Representa la fecha de la última modificación de la contraseña, medida en días desde el 1 de enero de 1970 (época de Unix). + +4. Período de inactividad (min days): Número mínimo de días antes de que el usuario pueda cambiar su contraseña. + +5. Período de validez de la contraseña (max days): Número máximo de días antes de que el usuario deba cambiar su contraseña. + +6. Avisos de cambio de contraseña (warm days): Número de días antes de que el sistema advierte al usuario sobre la necesidad de cambiar su contraseña. + +7. Periodo de cuenta inactiva (inactive): Número de días de inactividad después de los cuales la cuenta se desactivará. + +8. Fecha de caducidad de la cuenta (expire date): Fecha en la que la cuenta se bloqueará, expresada en días desde la época de Unix. + +9. Reservado (reserved): Campo reservado para uso futuro. + +== Comando Sudo + +El comando *sudo* se utiliza para ejecutar un comando con privilegios de superusuario (root). Estos comandos pueden ser para agregar o eliminar usuarios, eliminar archivos que pertenecen a otros usuarios e instalar nuevo software. + +---- + $ sudo [opciones] 'comando' +---- +Cuando se ejecuta el comando *sudo*, generalmente se pedirá que ingreses tu contraseña para verificar que tienes los permisos adecuados. + +Es importante usar *sudo* con precaución, ya que los comandos con privilegios elevados pueden afectar el sistema y los archivos críticos. Solo debes de ejecutar comandos con *sudo* si estás seguro de lo que estás haciendo y comprender las implicaciones de tus acciones. + +Un consejo es revisar las propiedades de los archivos. + +¿Con qué comando desplegamos el contenido de un directorio en forma de lista? + +.Respuestas +[%collapsible] +==== +1. $ ls -l +2. $ ls -la +==== + +== Creación de usuarios +Usaremos el comando *useradd* para crear un nuevo usuario +---- + # useradd [opcion] 'nombreUsuario' +---- +|=== +| Opciones | Descripción +| -d + + --home-dir | Establece el directorio de inicio del usuario. +| -s + + --shell | Establece el shell del usuario. +| -u + + --uid | Asigna el ID de usuario (UID). +| -U | Crea un grupo con el mismo nombre que el usuario y agregue el usuario a este grupo. (user-group). +| -m + + --create-home | Crea el directorio personal (home) del usuario si no existe. +| -p + + --password | Asigna una contraseña al usuario nuevo. +|=== +[NOTE, caption=Nota] +==== +Se necesitan permisos de super usuario. +==== + +Para crear el usuario charmander, se ejecuta el comando: +---- + # useradd charmander +---- +Para crear el usuario pikachu con el ID 1005 y crear su home +---- + # useradd pikachu -m -u 1005 +---- + +== ¿Y la contraseña? + +Aunque *useradd* da la opción *-p* para asigna contraseña al usuario que se está creando, esto no es muy usado, ya que podría quedar expuesta en registros del sistema o en la salida de comandos, lo que representa riesgos de confidencialidad. + +Para asignar contraseña a un usuario utilizamos el comando *passwd* +---- + # passwd [opción] usuario +---- + +|=== +| Opción | Descripción +| -d + + --delete | Elimina la contraseña del usuario. +| -l + +--lock | Permite bloquear la contraseña del usuario. +| -x + + --maxdays | Determina después de cuántos días debe renovarse una contraseña. +| -w + + --warndays | Avisa al usuario que la contraseña esta apunto de caducar. +|=== +[NOTE, caption=Nota] +==== +Se necesitan permisos de super usuario. +==== + +La contraseña debe contener de 6 a 8 caracteres, incluyendo uno o más caracteres de los siguientes conjuntos. + +* Alfabeto en minúsculas. +* Dígitos del 0 al 9. +* Signos de puntuación. +[WARNING, caption=IMPORTANTE] +==== +`passwd` rechazará cualquier contraseña que no sea lo suficientemente compleja. +==== + +Ejemplo: +---- + # sudo passwd vulpix + Introduce una nueva contraseña UNIX: + Vuelve a introducir la nueva contraseña UNIX: + passwd: Se ha cambiado la contraseña con éxito. +---- + +== Eliminar Usuarios +Para eliminar un usuario utilizaremos el comando *userdel* +[NOTE, caption=Nota] +==== +Se requieren permisos de superusuario +==== + +---- + $ sudo userdel [opciones] usuario +---- +|=== +| Opcion | Descripción +| -r + +--remove | Borra el directorio de inicio del usuario /home/usuario +|=== + +Actividad + +== Creación de grupos +Para crear un nuevo grupo usaremos el comando *groupadd* + +---- + $ sudo groupadd [OPCIONES] ‘nombreGrupo’ +---- +|=== +| Opción | Descripción +| -g + + --gid | Asigna un identificador (GID) al grupo. +| -p + + --passwdord | Asigna una contraseña al grupo. +|=== +[NOTE, caption=Nota] +==== +Se requieren permisos de superusuario. +==== +Ejemplo: +---- +$ sudo groupadd planta -g 203 +$ sudo groupadd dragon -g 2001 -p 1234 +---- + +== Modificar Grupos + + +=== Agregar usuarios a un grupo +Para agregar usuarios a un grupo utilizamos la siguiente instrucción: +---- +$ sudo usermod -aG ‘grupo‘ ‘usuario’ +---- +=== Eliminar usuarios de un grupo +Para eliminar un miembro de un grupo suplementario, utilizaremos el comando *usermod* listando los grupos suplementarios de los que el usuario siga siendo miembro. + +Ejemplo: Si el usuario ‘charizard’ es miembro de los grupos volador, dragon, fuego y agua, para eliminar al usuario del grupo agua, utilizaremos la siguiente instrucción: + +---- +$ sudo usermod -G volador,dragon,fuego charizard +---- + +Con qué comando se sabe a cuántos grupos permanece un usuario. + +.Respuestas +[%collapsible] +==== +$ groups +==== + +== Eliminar grupos _(groupdel)_ +Para eliminar un grupo usamos el comando *groupdel* +---- +$ groupdel [OPCIONES] ‘nombreGrupo’ +---- +eliminaremos el grupo fuego +---- +$ sudo groupdel fuego +---- diff --git a/docs/modules/dia_3/images/procesos/htop.png b/docs/modules/dia_3/images/procesos/htop.png new file mode 100644 index 0000000..c326185 Binary files /dev/null and b/docs/modules/dia_3/images/procesos/htop.png differ diff --git a/docs/modules/dia_3/images/redireccionamiento/redir.png b/docs/modules/dia_3/images/redireccionamiento/redir.png new file mode 100644 index 0000000..3e79ce4 Binary files /dev/null and b/docs/modules/dia_3/images/redireccionamiento/redir.png differ diff --git a/docs/modules/dia_3/material/filtrado/datos.csv b/docs/modules/dia_3/material/filtrado/datos.csv new file mode 100644 index 0000000..8948acc --- /dev/null +++ b/docs/modules/dia_3/material/filtrado/datos.csv @@ -0,0 +1,801 @@ +#,Name,Type 1,Type 2,Total,HP,Attack,Defense,Sp. Atk,Sp. Def,Speed,Generation,Legendary +1,Bulbasaur,Grass,Poison,318,45,49,49,65,65,45,1,False +2,Ivysaur,Grass,Poison,405,60,62,63,80,80,60,1,False +3,Venusaur,Grass,Poison,525,80,82,83,100,100,80,1,False +3,VenusaurMega Venusaur,Grass,Poison,625,80,100,123,122,120,80,1,False +4,Charmander,Fire,,309,39,52,43,60,50,65,1,False +5,Charmeleon,Fire,,405,58,64,58,80,65,80,1,False +6,Charizard,Fire,Flying,534,78,84,78,109,85,100,1,False +6,CharizardMega Charizard X,Fire,Dragon,634,78,130,111,130,85,100,1,False +6,CharizardMega Charizard Y,Fire,Flying,634,78,104,78,159,115,100,1,False +7,Squirtle,Water,,314,44,48,65,50,64,43,1,False +8,Wartortle,Water,,405,59,63,80,65,80,58,1,False +9,Blastoise,Water,,530,79,83,100,85,105,78,1,False +9,BlastoiseMega Blastoise,Water,,630,79,103,120,135,115,78,1,False +10,Caterpie,Bug,,195,45,30,35,20,20,45,1,False +11,Metapod,Bug,,205,50,20,55,25,25,30,1,False +12,Butterfree,Bug,Flying,395,60,45,50,90,80,70,1,False +13,Weedle,Bug,Poison,195,40,35,30,20,20,50,1,False +14,Kakuna,Bug,Poison,205,45,25,50,25,25,35,1,False +15,Beedrill,Bug,Poison,395,65,90,40,45,80,75,1,False +15,BeedrillMega Beedrill,Bug,Poison,495,65,150,40,15,80,145,1,False +16,Pidgey,Normal,Flying,251,40,45,40,35,35,56,1,False +17,Pidgeotto,Normal,Flying,349,63,60,55,50,50,71,1,False +18,Pidgeot,Normal,Flying,479,83,80,75,70,70,101,1,False +18,PidgeotMega Pidgeot,Normal,Flying,579,83,80,80,135,80,121,1,False +19,Rattata,Normal,,253,30,56,35,25,35,72,1,False +20,Raticate,Normal,,413,55,81,60,50,70,97,1,False +21,Spearow,Normal,Flying,262,40,60,30,31,31,70,1,False +22,Fearow,Normal,Flying,442,65,90,65,61,61,100,1,False +23,Ekans,Poison,,288,35,60,44,40,54,55,1,False +24,Arbok,Poison,,438,60,85,69,65,79,80,1,False +25,Pikachu,Electric,,320,35,55,40,50,50,90,1,False +26,Raichu,Electric,,485,60,90,55,90,80,110,1,False +27,Sandshrew,Ground,,300,50,75,85,20,30,40,1,False +28,Sandslash,Ground,,450,75,100,110,45,55,65,1,False +29,Nidoran♀,Poison,,275,55,47,52,40,40,41,1,False +30,Nidorina,Poison,,365,70,62,67,55,55,56,1,False +31,Nidoqueen,Poison,Ground,505,90,92,87,75,85,76,1,False +32,Nidoran♂,Poison,,273,46,57,40,40,40,50,1,False +33,Nidorino,Poison,,365,61,72,57,55,55,65,1,False +34,Nidoking,Poison,Ground,505,81,102,77,85,75,85,1,False +35,Clefairy,Fairy,,323,70,45,48,60,65,35,1,False +36,Clefable,Fairy,,483,95,70,73,95,90,60,1,False +37,Vulpix,Fire,,299,38,41,40,50,65,65,1,False +38,Ninetales,Fire,,505,73,76,75,81,100,100,1,False +39,Jigglypuff,Normal,Fairy,270,115,45,20,45,25,20,1,False +40,Wigglytuff,Normal,Fairy,435,140,70,45,85,50,45,1,False +41,Zubat,Poison,Flying,245,40,45,35,30,40,55,1,False +42,Golbat,Poison,Flying,455,75,80,70,65,75,90,1,False +43,Oddish,Grass,Poison,320,45,50,55,75,65,30,1,False +44,Gloom,Grass,Poison,395,60,65,70,85,75,40,1,False +45,Vileplume,Grass,Poison,490,75,80,85,110,90,50,1,False +46,Paras,Bug,Grass,285,35,70,55,45,55,25,1,False +47,Parasect,Bug,Grass,405,60,95,80,60,80,30,1,False +48,Venonat,Bug,Poison,305,60,55,50,40,55,45,1,False +49,Venomoth,Bug,Poison,450,70,65,60,90,75,90,1,False +50,Diglett,Ground,,265,10,55,25,35,45,95,1,False +51,Dugtrio,Ground,,405,35,80,50,50,70,120,1,False +52,Meowth,Normal,,290,40,45,35,40,40,90,1,False +53,Persian,Normal,,440,65,70,60,65,65,115,1,False +54,Psyduck,Water,,320,50,52,48,65,50,55,1,False +55,Golduck,Water,,500,80,82,78,95,80,85,1,False +56,Mankey,Fighting,,305,40,80,35,35,45,70,1,False +57,Primeape,Fighting,,455,65,105,60,60,70,95,1,False +58,Growlithe,Fire,,350,55,70,45,70,50,60,1,False +59,Arcanine,Fire,,555,90,110,80,100,80,95,1,False +60,Poliwag,Water,,300,40,50,40,40,40,90,1,False +61,Poliwhirl,Water,,385,65,65,65,50,50,90,1,False +62,Poliwrath,Water,Fighting,510,90,95,95,70,90,70,1,False +63,Abra,Psychic,,310,25,20,15,105,55,90,1,False +64,Kadabra,Psychic,,400,40,35,30,120,70,105,1,False +65,Alakazam,Psychic,,500,55,50,45,135,95,120,1,False +65,AlakazamMega Alakazam,Psychic,,590,55,50,65,175,95,150,1,False +66,Machop,Fighting,,305,70,80,50,35,35,35,1,False +67,Machoke,Fighting,,405,80,100,70,50,60,45,1,False +68,Machamp,Fighting,,505,90,130,80,65,85,55,1,False +69,Bellsprout,Grass,Poison,300,50,75,35,70,30,40,1,False +70,Weepinbell,Grass,Poison,390,65,90,50,85,45,55,1,False +71,Victreebel,Grass,Poison,490,80,105,65,100,70,70,1,False +72,Tentacool,Water,Poison,335,40,40,35,50,100,70,1,False +73,Tentacruel,Water,Poison,515,80,70,65,80,120,100,1,False +74,Geodude,Rock,Ground,300,40,80,100,30,30,20,1,False +75,Graveler,Rock,Ground,390,55,95,115,45,45,35,1,False +76,Golem,Rock,Ground,495,80,120,130,55,65,45,1,False +77,Ponyta,Fire,,410,50,85,55,65,65,90,1,False +78,Rapidash,Fire,,500,65,100,70,80,80,105,1,False +79,Slowpoke,Water,Psychic,315,90,65,65,40,40,15,1,False +80,Slowbro,Water,Psychic,490,95,75,110,100,80,30,1,False +80,SlowbroMega Slowbro,Water,Psychic,590,95,75,180,130,80,30,1,False +81,Magnemite,Electric,Steel,325,25,35,70,95,55,45,1,False +82,Magneton,Electric,Steel,465,50,60,95,120,70,70,1,False +83,Farfetch'd,Normal,Flying,352,52,65,55,58,62,60,1,False +84,Doduo,Normal,Flying,310,35,85,45,35,35,75,1,False +85,Dodrio,Normal,Flying,460,60,110,70,60,60,100,1,False +86,Seel,Water,,325,65,45,55,45,70,45,1,False +87,Dewgong,Water,Ice,475,90,70,80,70,95,70,1,False +88,Grimer,Poison,,325,80,80,50,40,50,25,1,False +89,Muk,Poison,,500,105,105,75,65,100,50,1,False +90,Shellder,Water,,305,30,65,100,45,25,40,1,False +91,Cloyster,Water,Ice,525,50,95,180,85,45,70,1,False +92,Gastly,Ghost,Poison,310,30,35,30,100,35,80,1,False +93,Haunter,Ghost,Poison,405,45,50,45,115,55,95,1,False +94,Gengar,Ghost,Poison,500,60,65,60,130,75,110,1,False +94,GengarMega Gengar,Ghost,Poison,600,60,65,80,170,95,130,1,False +95,Onix,Rock,Ground,385,35,45,160,30,45,70,1,False +96,Drowzee,Psychic,,328,60,48,45,43,90,42,1,False +97,Hypno,Psychic,,483,85,73,70,73,115,67,1,False +98,Krabby,Water,,325,30,105,90,25,25,50,1,False +99,Kingler,Water,,475,55,130,115,50,50,75,1,False +100,Voltorb,Electric,,330,40,30,50,55,55,100,1,False +101,Electrode,Electric,,480,60,50,70,80,80,140,1,False +102,Exeggcute,Grass,Psychic,325,60,40,80,60,45,40,1,False +103,Exeggutor,Grass,Psychic,520,95,95,85,125,65,55,1,False +104,Cubone,Ground,,320,50,50,95,40,50,35,1,False +105,Marowak,Ground,,425,60,80,110,50,80,45,1,False +106,Hitmonlee,Fighting,,455,50,120,53,35,110,87,1,False +107,Hitmonchan,Fighting,,455,50,105,79,35,110,76,1,False +108,Lickitung,Normal,,385,90,55,75,60,75,30,1,False +109,Koffing,Poison,,340,40,65,95,60,45,35,1,False +110,Weezing,Poison,,490,65,90,120,85,70,60,1,False +111,Rhyhorn,Ground,Rock,345,80,85,95,30,30,25,1,False +112,Rhydon,Ground,Rock,485,105,130,120,45,45,40,1,False +113,Chansey,Normal,,450,250,5,5,35,105,50,1,False +114,Tangela,Grass,,435,65,55,115,100,40,60,1,False +115,Kangaskhan,Normal,,490,105,95,80,40,80,90,1,False +115,KangaskhanMega Kangaskhan,Normal,,590,105,125,100,60,100,100,1,False +116,Horsea,Water,,295,30,40,70,70,25,60,1,False +117,Seadra,Water,,440,55,65,95,95,45,85,1,False +118,Goldeen,Water,,320,45,67,60,35,50,63,1,False +119,Seaking,Water,,450,80,92,65,65,80,68,1,False +120,Staryu,Water,,340,30,45,55,70,55,85,1,False +121,Starmie,Water,Psychic,520,60,75,85,100,85,115,1,False +122,Mr. Mime,Psychic,Fairy,460,40,45,65,100,120,90,1,False +123,Scyther,Bug,Flying,500,70,110,80,55,80,105,1,False +124,Jynx,Ice,Psychic,455,65,50,35,115,95,95,1,False +125,Electabuzz,Electric,,490,65,83,57,95,85,105,1,False +126,Magmar,Fire,,495,65,95,57,100,85,93,1,False +127,Pinsir,Bug,,500,65,125,100,55,70,85,1,False +127,PinsirMega Pinsir,Bug,Flying,600,65,155,120,65,90,105,1,False +128,Tauros,Normal,,490,75,100,95,40,70,110,1,False +129,Magikarp,Water,,200,20,10,55,15,20,80,1,False +130,Gyarados,Water,Flying,540,95,125,79,60,100,81,1,False +130,GyaradosMega Gyarados,Water,Dark,640,95,155,109,70,130,81,1,False +131,Lapras,Water,Ice,535,130,85,80,85,95,60,1,False +132,Ditto,Normal,,288,48,48,48,48,48,48,1,False +133,Eevee,Normal,,325,55,55,50,45,65,55,1,False +134,Vaporeon,Water,,525,130,65,60,110,95,65,1,False +135,Jolteon,Electric,,525,65,65,60,110,95,130,1,False +136,Flareon,Fire,,525,65,130,60,95,110,65,1,False +137,Porygon,Normal,,395,65,60,70,85,75,40,1,False +138,Omanyte,Rock,Water,355,35,40,100,90,55,35,1,False +139,Omastar,Rock,Water,495,70,60,125,115,70,55,1,False +140,Kabuto,Rock,Water,355,30,80,90,55,45,55,1,False +141,Kabutops,Rock,Water,495,60,115,105,65,70,80,1,False +142,Aerodactyl,Rock,Flying,515,80,105,65,60,75,130,1,False +142,AerodactylMega Aerodactyl,Rock,Flying,615,80,135,85,70,95,150,1,False +143,Snorlax,Normal,,540,160,110,65,65,110,30,1,False +144,Articuno,Ice,Flying,580,90,85,100,95,125,85,1,True +145,Zapdos,Electric,Flying,580,90,90,85,125,90,100,1,True +146,Moltres,Fire,Flying,580,90,100,90,125,85,90,1,True +147,Dratini,Dragon,,300,41,64,45,50,50,50,1,False +148,Dragonair,Dragon,,420,61,84,65,70,70,70,1,False +149,Dragonite,Dragon,Flying,600,91,134,95,100,100,80,1,False +150,Mewtwo,Psychic,,680,106,110,90,154,90,130,1,True +150,MewtwoMega Mewtwo X,Psychic,Fighting,780,106,190,100,154,100,130,1,True +150,MewtwoMega Mewtwo Y,Psychic,,780,106,150,70,194,120,140,1,True +151,Mew,Psychic,,600,100,100,100,100,100,100,1,False +152,Chikorita,Grass,,318,45,49,65,49,65,45,2,False +153,Bayleef,Grass,,405,60,62,80,63,80,60,2,False +154,Meganium,Grass,,525,80,82,100,83,100,80,2,False +155,Cyndaquil,Fire,,309,39,52,43,60,50,65,2,False +156,Quilava,Fire,,405,58,64,58,80,65,80,2,False +157,Typhlosion,Fire,,534,78,84,78,109,85,100,2,False +158,Totodile,Water,,314,50,65,64,44,48,43,2,False +159,Croconaw,Water,,405,65,80,80,59,63,58,2,False +160,Feraligatr,Water,,530,85,105,100,79,83,78,2,False +161,Sentret,Normal,,215,35,46,34,35,45,20,2,False +162,Furret,Normal,,415,85,76,64,45,55,90,2,False +163,Hoothoot,Normal,Flying,262,60,30,30,36,56,50,2,False +164,Noctowl,Normal,Flying,442,100,50,50,76,96,70,2,False +165,Ledyba,Bug,Flying,265,40,20,30,40,80,55,2,False +166,Ledian,Bug,Flying,390,55,35,50,55,110,85,2,False +167,Spinarak,Bug,Poison,250,40,60,40,40,40,30,2,False +168,Ariados,Bug,Poison,390,70,90,70,60,60,40,2,False +169,Crobat,Poison,Flying,535,85,90,80,70,80,130,2,False +170,Chinchou,Water,Electric,330,75,38,38,56,56,67,2,False +171,Lanturn,Water,Electric,460,125,58,58,76,76,67,2,False +172,Pichu,Electric,,205,20,40,15,35,35,60,2,False +173,Cleffa,Fairy,,218,50,25,28,45,55,15,2,False +174,Igglybuff,Normal,Fairy,210,90,30,15,40,20,15,2,False +175,Togepi,Fairy,,245,35,20,65,40,65,20,2,False +176,Togetic,Fairy,Flying,405,55,40,85,80,105,40,2,False +177,Natu,Psychic,Flying,320,40,50,45,70,45,70,2,False +178,Xatu,Psychic,Flying,470,65,75,70,95,70,95,2,False +179,Mareep,Electric,,280,55,40,40,65,45,35,2,False +180,Flaaffy,Electric,,365,70,55,55,80,60,45,2,False +181,Ampharos,Electric,,510,90,75,85,115,90,55,2,False +181,AmpharosMega Ampharos,Electric,Dragon,610,90,95,105,165,110,45,2,False +182,Bellossom,Grass,,490,75,80,95,90,100,50,2,False +183,Marill,Water,Fairy,250,70,20,50,20,50,40,2,False +184,Azumarill,Water,Fairy,420,100,50,80,60,80,50,2,False +185,Sudowoodo,Rock,,410,70,100,115,30,65,30,2,False +186,Politoed,Water,,500,90,75,75,90,100,70,2,False +187,Hoppip,Grass,Flying,250,35,35,40,35,55,50,2,False +188,Skiploom,Grass,Flying,340,55,45,50,45,65,80,2,False +189,Jumpluff,Grass,Flying,460,75,55,70,55,95,110,2,False +190,Aipom,Normal,,360,55,70,55,40,55,85,2,False +191,Sunkern,Grass,,180,30,30,30,30,30,30,2,False +192,Sunflora,Grass,,425,75,75,55,105,85,30,2,False +193,Yanma,Bug,Flying,390,65,65,45,75,45,95,2,False +194,Wooper,Water,Ground,210,55,45,45,25,25,15,2,False +195,Quagsire,Water,Ground,430,95,85,85,65,65,35,2,False +196,Espeon,Psychic,,525,65,65,60,130,95,110,2,False +197,Umbreon,Dark,,525,95,65,110,60,130,65,2,False +198,Murkrow,Dark,Flying,405,60,85,42,85,42,91,2,False +199,Slowking,Water,Psychic,490,95,75,80,100,110,30,2,False +200,Misdreavus,Ghost,,435,60,60,60,85,85,85,2,False +201,Unown,Psychic,,336,48,72,48,72,48,48,2,False +202,Wobbuffet,Psychic,,405,190,33,58,33,58,33,2,False +203,Girafarig,Normal,Psychic,455,70,80,65,90,65,85,2,False +204,Pineco,Bug,,290,50,65,90,35,35,15,2,False +205,Forretress,Bug,Steel,465,75,90,140,60,60,40,2,False +206,Dunsparce,Normal,,415,100,70,70,65,65,45,2,False +207,Gligar,Ground,Flying,430,65,75,105,35,65,85,2,False +208,Steelix,Steel,Ground,510,75,85,200,55,65,30,2,False +208,SteelixMega Steelix,Steel,Ground,610,75,125,230,55,95,30,2,False +209,Snubbull,Fairy,,300,60,80,50,40,40,30,2,False +210,Granbull,Fairy,,450,90,120,75,60,60,45,2,False +211,Qwilfish,Water,Poison,430,65,95,75,55,55,85,2,False +212,Scizor,Bug,Steel,500,70,130,100,55,80,65,2,False +212,ScizorMega Scizor,Bug,Steel,600,70,150,140,65,100,75,2,False +213,Shuckle,Bug,Rock,505,20,10,230,10,230,5,2,False +214,Heracross,Bug,Fighting,500,80,125,75,40,95,85,2,False +214,HeracrossMega Heracross,Bug,Fighting,600,80,185,115,40,105,75,2,False +215,Sneasel,Dark,Ice,430,55,95,55,35,75,115,2,False +216,Teddiursa,Normal,,330,60,80,50,50,50,40,2,False +217,Ursaring,Normal,,500,90,130,75,75,75,55,2,False +218,Slugma,Fire,,250,40,40,40,70,40,20,2,False +219,Magcargo,Fire,Rock,410,50,50,120,80,80,30,2,False +220,Swinub,Ice,Ground,250,50,50,40,30,30,50,2,False +221,Piloswine,Ice,Ground,450,100,100,80,60,60,50,2,False +222,Corsola,Water,Rock,380,55,55,85,65,85,35,2,False +223,Remoraid,Water,,300,35,65,35,65,35,65,2,False +224,Octillery,Water,,480,75,105,75,105,75,45,2,False +225,Delibird,Ice,Flying,330,45,55,45,65,45,75,2,False +226,Mantine,Water,Flying,465,65,40,70,80,140,70,2,False +227,Skarmory,Steel,Flying,465,65,80,140,40,70,70,2,False +228,Houndour,Dark,Fire,330,45,60,30,80,50,65,2,False +229,Houndoom,Dark,Fire,500,75,90,50,110,80,95,2,False +229,HoundoomMega Houndoom,Dark,Fire,600,75,90,90,140,90,115,2,False +230,Kingdra,Water,Dragon,540,75,95,95,95,95,85,2,False +231,Phanpy,Ground,,330,90,60,60,40,40,40,2,False +232,Donphan,Ground,,500,90,120,120,60,60,50,2,False +233,Porygon2,Normal,,515,85,80,90,105,95,60,2,False +234,Stantler,Normal,,465,73,95,62,85,65,85,2,False +235,Smeargle,Normal,,250,55,20,35,20,45,75,2,False +236,Tyrogue,Fighting,,210,35,35,35,35,35,35,2,False +237,Hitmontop,Fighting,,455,50,95,95,35,110,70,2,False +238,Smoochum,Ice,Psychic,305,45,30,15,85,65,65,2,False +239,Elekid,Electric,,360,45,63,37,65,55,95,2,False +240,Magby,Fire,,365,45,75,37,70,55,83,2,False +241,Miltank,Normal,,490,95,80,105,40,70,100,2,False +242,Blissey,Normal,,540,255,10,10,75,135,55,2,False +243,Raikou,Electric,,580,90,85,75,115,100,115,2,True +244,Entei,Fire,,580,115,115,85,90,75,100,2,True +245,Suicune,Water,,580,100,75,115,90,115,85,2,True +246,Larvitar,Rock,Ground,300,50,64,50,45,50,41,2,False +247,Pupitar,Rock,Ground,410,70,84,70,65,70,51,2,False +248,Tyranitar,Rock,Dark,600,100,134,110,95,100,61,2,False +248,TyranitarMega Tyranitar,Rock,Dark,700,100,164,150,95,120,71,2,False +249,Lugia,Psychic,Flying,680,106,90,130,90,154,110,2,True +250,Ho-oh,Fire,Flying,680,106,130,90,110,154,90,2,True +251,Celebi,Psychic,Grass,600,100,100,100,100,100,100,2,False +252,Treecko,Grass,,310,40,45,35,65,55,70,3,False +253,Grovyle,Grass,,405,50,65,45,85,65,95,3,False +254,Sceptile,Grass,,530,70,85,65,105,85,120,3,False +254,SceptileMega Sceptile,Grass,Dragon,630,70,110,75,145,85,145,3,False +255,Torchic,Fire,,310,45,60,40,70,50,45,3,False +256,Combusken,Fire,Fighting,405,60,85,60,85,60,55,3,False +257,Blaziken,Fire,Fighting,530,80,120,70,110,70,80,3,False +257,BlazikenMega Blaziken,Fire,Fighting,630,80,160,80,130,80,100,3,False +258,Mudkip,Water,,310,50,70,50,50,50,40,3,False +259,Marshtomp,Water,Ground,405,70,85,70,60,70,50,3,False +260,Swampert,Water,Ground,535,100,110,90,85,90,60,3,False +260,SwampertMega Swampert,Water,Ground,635,100,150,110,95,110,70,3,False +261,Poochyena,Dark,,220,35,55,35,30,30,35,3,False +262,Mightyena,Dark,,420,70,90,70,60,60,70,3,False +263,Zigzagoon,Normal,,240,38,30,41,30,41,60,3,False +264,Linoone,Normal,,420,78,70,61,50,61,100,3,False +265,Wurmple,Bug,,195,45,45,35,20,30,20,3,False +266,Silcoon,Bug,,205,50,35,55,25,25,15,3,False +267,Beautifly,Bug,Flying,395,60,70,50,100,50,65,3,False +268,Cascoon,Bug,,205,50,35,55,25,25,15,3,False +269,Dustox,Bug,Poison,385,60,50,70,50,90,65,3,False +270,Lotad,Water,Grass,220,40,30,30,40,50,30,3,False +271,Lombre,Water,Grass,340,60,50,50,60,70,50,3,False +272,Ludicolo,Water,Grass,480,80,70,70,90,100,70,3,False +273,Seedot,Grass,,220,40,40,50,30,30,30,3,False +274,Nuzleaf,Grass,Dark,340,70,70,40,60,40,60,3,False +275,Shiftry,Grass,Dark,480,90,100,60,90,60,80,3,False +276,Taillow,Normal,Flying,270,40,55,30,30,30,85,3,False +277,Swellow,Normal,Flying,430,60,85,60,50,50,125,3,False +278,Wingull,Water,Flying,270,40,30,30,55,30,85,3,False +279,Pelipper,Water,Flying,430,60,50,100,85,70,65,3,False +280,Ralts,Psychic,Fairy,198,28,25,25,45,35,40,3,False +281,Kirlia,Psychic,Fairy,278,38,35,35,65,55,50,3,False +282,Gardevoir,Psychic,Fairy,518,68,65,65,125,115,80,3,False +282,GardevoirMega Gardevoir,Psychic,Fairy,618,68,85,65,165,135,100,3,False +283,Surskit,Bug,Water,269,40,30,32,50,52,65,3,False +284,Masquerain,Bug,Flying,414,70,60,62,80,82,60,3,False +285,Shroomish,Grass,,295,60,40,60,40,60,35,3,False +286,Breloom,Grass,Fighting,460,60,130,80,60,60,70,3,False +287,Slakoth,Normal,,280,60,60,60,35,35,30,3,False +288,Vigoroth,Normal,,440,80,80,80,55,55,90,3,False +289,Slaking,Normal,,670,150,160,100,95,65,100,3,False +290,Nincada,Bug,Ground,266,31,45,90,30,30,40,3,False +291,Ninjask,Bug,Flying,456,61,90,45,50,50,160,3,False +292,Shedinja,Bug,Ghost,236,1,90,45,30,30,40,3,False +293,Whismur,Normal,,240,64,51,23,51,23,28,3,False +294,Loudred,Normal,,360,84,71,43,71,43,48,3,False +295,Exploud,Normal,,490,104,91,63,91,73,68,3,False +296,Makuhita,Fighting,,237,72,60,30,20,30,25,3,False +297,Hariyama,Fighting,,474,144,120,60,40,60,50,3,False +298,Azurill,Normal,Fairy,190,50,20,40,20,40,20,3,False +299,Nosepass,Rock,,375,30,45,135,45,90,30,3,False +300,Skitty,Normal,,260,50,45,45,35,35,50,3,False +301,Delcatty,Normal,,380,70,65,65,55,55,70,3,False +302,Sableye,Dark,Ghost,380,50,75,75,65,65,50,3,False +302,SableyeMega Sableye,Dark,Ghost,480,50,85,125,85,115,20,3,False +303,Mawile,Steel,Fairy,380,50,85,85,55,55,50,3,False +303,MawileMega Mawile,Steel,Fairy,480,50,105,125,55,95,50,3,False +304,Aron,Steel,Rock,330,50,70,100,40,40,30,3,False +305,Lairon,Steel,Rock,430,60,90,140,50,50,40,3,False +306,Aggron,Steel,Rock,530,70,110,180,60,60,50,3,False +306,AggronMega Aggron,Steel,,630,70,140,230,60,80,50,3,False +307,Meditite,Fighting,Psychic,280,30,40,55,40,55,60,3,False +308,Medicham,Fighting,Psychic,410,60,60,75,60,75,80,3,False +308,MedichamMega Medicham,Fighting,Psychic,510,60,100,85,80,85,100,3,False +309,Electrike,Electric,,295,40,45,40,65,40,65,3,False +310,Manectric,Electric,,475,70,75,60,105,60,105,3,False +310,ManectricMega Manectric,Electric,,575,70,75,80,135,80,135,3,False +311,Plusle,Electric,,405,60,50,40,85,75,95,3,False +312,Minun,Electric,,405,60,40,50,75,85,95,3,False +313,Volbeat,Bug,,400,65,73,55,47,75,85,3,False +314,Illumise,Bug,,400,65,47,55,73,75,85,3,False +315,Roselia,Grass,Poison,400,50,60,45,100,80,65,3,False +316,Gulpin,Poison,,302,70,43,53,43,53,40,3,False +317,Swalot,Poison,,467,100,73,83,73,83,55,3,False +318,Carvanha,Water,Dark,305,45,90,20,65,20,65,3,False +319,Sharpedo,Water,Dark,460,70,120,40,95,40,95,3,False +319,SharpedoMega Sharpedo,Water,Dark,560,70,140,70,110,65,105,3,False +320,Wailmer,Water,,400,130,70,35,70,35,60,3,False +321,Wailord,Water,,500,170,90,45,90,45,60,3,False +322,Numel,Fire,Ground,305,60,60,40,65,45,35,3,False +323,Camerupt,Fire,Ground,460,70,100,70,105,75,40,3,False +323,CameruptMega Camerupt,Fire,Ground,560,70,120,100,145,105,20,3,False +324,Torkoal,Fire,,470,70,85,140,85,70,20,3,False +325,Spoink,Psychic,,330,60,25,35,70,80,60,3,False +326,Grumpig,Psychic,,470,80,45,65,90,110,80,3,False +327,Spinda,Normal,,360,60,60,60,60,60,60,3,False +328,Trapinch,Ground,,290,45,100,45,45,45,10,3,False +329,Vibrava,Ground,Dragon,340,50,70,50,50,50,70,3,False +330,Flygon,Ground,Dragon,520,80,100,80,80,80,100,3,False +331,Cacnea,Grass,,335,50,85,40,85,40,35,3,False +332,Cacturne,Grass,Dark,475,70,115,60,115,60,55,3,False +333,Swablu,Normal,Flying,310,45,40,60,40,75,50,3,False +334,Altaria,Dragon,Flying,490,75,70,90,70,105,80,3,False +334,AltariaMega Altaria,Dragon,Fairy,590,75,110,110,110,105,80,3,False +335,Zangoose,Normal,,458,73,115,60,60,60,90,3,False +336,Seviper,Poison,,458,73,100,60,100,60,65,3,False +337,Lunatone,Rock,Psychic,440,70,55,65,95,85,70,3,False +338,Solrock,Rock,Psychic,440,70,95,85,55,65,70,3,False +339,Barboach,Water,Ground,288,50,48,43,46,41,60,3,False +340,Whiscash,Water,Ground,468,110,78,73,76,71,60,3,False +341,Corphish,Water,,308,43,80,65,50,35,35,3,False +342,Crawdaunt,Water,Dark,468,63,120,85,90,55,55,3,False +343,Baltoy,Ground,Psychic,300,40,40,55,40,70,55,3,False +344,Claydol,Ground,Psychic,500,60,70,105,70,120,75,3,False +345,Lileep,Rock,Grass,355,66,41,77,61,87,23,3,False +346,Cradily,Rock,Grass,495,86,81,97,81,107,43,3,False +347,Anorith,Rock,Bug,355,45,95,50,40,50,75,3,False +348,Armaldo,Rock,Bug,495,75,125,100,70,80,45,3,False +349,Feebas,Water,,200,20,15,20,10,55,80,3,False +350,Milotic,Water,,540,95,60,79,100,125,81,3,False +351,Castform,Normal,,420,70,70,70,70,70,70,3,False +352,Kecleon,Normal,,440,60,90,70,60,120,40,3,False +353,Shuppet,Ghost,,295,44,75,35,63,33,45,3,False +354,Banette,Ghost,,455,64,115,65,83,63,65,3,False +354,BanetteMega Banette,Ghost,,555,64,165,75,93,83,75,3,False +355,Duskull,Ghost,,295,20,40,90,30,90,25,3,False +356,Dusclops,Ghost,,455,40,70,130,60,130,25,3,False +357,Tropius,Grass,Flying,460,99,68,83,72,87,51,3,False +358,Chimecho,Psychic,,425,65,50,70,95,80,65,3,False +359,Absol,Dark,,465,65,130,60,75,60,75,3,False +359,AbsolMega Absol,Dark,,565,65,150,60,115,60,115,3,False +360,Wynaut,Psychic,,260,95,23,48,23,48,23,3,False +361,Snorunt,Ice,,300,50,50,50,50,50,50,3,False +362,Glalie,Ice,,480,80,80,80,80,80,80,3,False +362,GlalieMega Glalie,Ice,,580,80,120,80,120,80,100,3,False +363,Spheal,Ice,Water,290,70,40,50,55,50,25,3,False +364,Sealeo,Ice,Water,410,90,60,70,75,70,45,3,False +365,Walrein,Ice,Water,530,110,80,90,95,90,65,3,False +366,Clamperl,Water,,345,35,64,85,74,55,32,3,False +367,Huntail,Water,,485,55,104,105,94,75,52,3,False +368,Gorebyss,Water,,485,55,84,105,114,75,52,3,False +369,Relicanth,Water,Rock,485,100,90,130,45,65,55,3,False +370,Luvdisc,Water,,330,43,30,55,40,65,97,3,False +371,Bagon,Dragon,,300,45,75,60,40,30,50,3,False +372,Shelgon,Dragon,,420,65,95,100,60,50,50,3,False +373,Salamence,Dragon,Flying,600,95,135,80,110,80,100,3,False +373,SalamenceMega Salamence,Dragon,Flying,700,95,145,130,120,90,120,3,False +374,Beldum,Steel,Psychic,300,40,55,80,35,60,30,3,False +375,Metang,Steel,Psychic,420,60,75,100,55,80,50,3,False +376,Metagross,Steel,Psychic,600,80,135,130,95,90,70,3,False +376,MetagrossMega Metagross,Steel,Psychic,700,80,145,150,105,110,110,3,False +377,Regirock,Rock,,580,80,100,200,50,100,50,3,True +378,Regice,Ice,,580,80,50,100,100,200,50,3,True +379,Registeel,Steel,,580,80,75,150,75,150,50,3,True +380,Latias,Dragon,Psychic,600,80,80,90,110,130,110,3,True +380,LatiasMega Latias,Dragon,Psychic,700,80,100,120,140,150,110,3,True +381,Latios,Dragon,Psychic,600,80,90,80,130,110,110,3,True +381,LatiosMega Latios,Dragon,Psychic,700,80,130,100,160,120,110,3,True +382,Kyogre,Water,,670,100,100,90,150,140,90,3,True +382,KyogrePrimal Kyogre,Water,,770,100,150,90,180,160,90,3,True +383,Groudon,Ground,,670,100,150,140,100,90,90,3,True +383,GroudonPrimal Groudon,Ground,Fire,770,100,180,160,150,90,90,3,True +384,Rayquaza,Dragon,Flying,680,105,150,90,150,90,95,3,True +384,RayquazaMega Rayquaza,Dragon,Flying,780,105,180,100,180,100,115,3,True +385,Jirachi,Steel,Psychic,600,100,100,100,100,100,100,3,True +386,DeoxysNormal Forme,Psychic,,600,50,150,50,150,50,150,3,True +386,DeoxysAttack Forme,Psychic,,600,50,180,20,180,20,150,3,True +386,DeoxysDefense Forme,Psychic,,600,50,70,160,70,160,90,3,True +386,DeoxysSpeed Forme,Psychic,,600,50,95,90,95,90,180,3,True +387,Turtwig,Grass,,318,55,68,64,45,55,31,4,False +388,Grotle,Grass,,405,75,89,85,55,65,36,4,False +389,Torterra,Grass,Ground,525,95,109,105,75,85,56,4,False +390,Chimchar,Fire,,309,44,58,44,58,44,61,4,False +391,Monferno,Fire,Fighting,405,64,78,52,78,52,81,4,False +392,Infernape,Fire,Fighting,534,76,104,71,104,71,108,4,False +393,Piplup,Water,,314,53,51,53,61,56,40,4,False +394,Prinplup,Water,,405,64,66,68,81,76,50,4,False +395,Empoleon,Water,Steel,530,84,86,88,111,101,60,4,False +396,Starly,Normal,Flying,245,40,55,30,30,30,60,4,False +397,Staravia,Normal,Flying,340,55,75,50,40,40,80,4,False +398,Staraptor,Normal,Flying,485,85,120,70,50,60,100,4,False +399,Bidoof,Normal,,250,59,45,40,35,40,31,4,False +400,Bibarel,Normal,Water,410,79,85,60,55,60,71,4,False +401,Kricketot,Bug,,194,37,25,41,25,41,25,4,False +402,Kricketune,Bug,,384,77,85,51,55,51,65,4,False +403,Shinx,Electric,,263,45,65,34,40,34,45,4,False +404,Luxio,Electric,,363,60,85,49,60,49,60,4,False +405,Luxray,Electric,,523,80,120,79,95,79,70,4,False +406,Budew,Grass,Poison,280,40,30,35,50,70,55,4,False +407,Roserade,Grass,Poison,515,60,70,65,125,105,90,4,False +408,Cranidos,Rock,,350,67,125,40,30,30,58,4,False +409,Rampardos,Rock,,495,97,165,60,65,50,58,4,False +410,Shieldon,Rock,Steel,350,30,42,118,42,88,30,4,False +411,Bastiodon,Rock,Steel,495,60,52,168,47,138,30,4,False +412,Burmy,Bug,,224,40,29,45,29,45,36,4,False +413,WormadamPlant Cloak,Bug,Grass,424,60,59,85,79,105,36,4,False +413,WormadamSandy Cloak,Bug,Ground,424,60,79,105,59,85,36,4,False +413,WormadamTrash Cloak,Bug,Steel,424,60,69,95,69,95,36,4,False +414,Mothim,Bug,Flying,424,70,94,50,94,50,66,4,False +415,Combee,Bug,Flying,244,30,30,42,30,42,70,4,False +416,Vespiquen,Bug,Flying,474,70,80,102,80,102,40,4,False +417,Pachirisu,Electric,,405,60,45,70,45,90,95,4,False +418,Buizel,Water,,330,55,65,35,60,30,85,4,False +419,Floatzel,Water,,495,85,105,55,85,50,115,4,False +420,Cherubi,Grass,,275,45,35,45,62,53,35,4,False +421,Cherrim,Grass,,450,70,60,70,87,78,85,4,False +422,Shellos,Water,,325,76,48,48,57,62,34,4,False +423,Gastrodon,Water,Ground,475,111,83,68,92,82,39,4,False +424,Ambipom,Normal,,482,75,100,66,60,66,115,4,False +425,Drifloon,Ghost,Flying,348,90,50,34,60,44,70,4,False +426,Drifblim,Ghost,Flying,498,150,80,44,90,54,80,4,False +427,Buneary,Normal,,350,55,66,44,44,56,85,4,False +428,Lopunny,Normal,,480,65,76,84,54,96,105,4,False +428,LopunnyMega Lopunny,Normal,Fighting,580,65,136,94,54,96,135,4,False +429,Mismagius,Ghost,,495,60,60,60,105,105,105,4,False +430,Honchkrow,Dark,Flying,505,100,125,52,105,52,71,4,False +431,Glameow,Normal,,310,49,55,42,42,37,85,4,False +432,Purugly,Normal,,452,71,82,64,64,59,112,4,False +433,Chingling,Psychic,,285,45,30,50,65,50,45,4,False +434,Stunky,Poison,Dark,329,63,63,47,41,41,74,4,False +435,Skuntank,Poison,Dark,479,103,93,67,71,61,84,4,False +436,Bronzor,Steel,Psychic,300,57,24,86,24,86,23,4,False +437,Bronzong,Steel,Psychic,500,67,89,116,79,116,33,4,False +438,Bonsly,Rock,,290,50,80,95,10,45,10,4,False +439,Mime Jr.,Psychic,Fairy,310,20,25,45,70,90,60,4,False +440,Happiny,Normal,,220,100,5,5,15,65,30,4,False +441,Chatot,Normal,Flying,411,76,65,45,92,42,91,4,False +442,Spiritomb,Ghost,Dark,485,50,92,108,92,108,35,4,False +443,Gible,Dragon,Ground,300,58,70,45,40,45,42,4,False +444,Gabite,Dragon,Ground,410,68,90,65,50,55,82,4,False +445,Garchomp,Dragon,Ground,600,108,130,95,80,85,102,4,False +445,GarchompMega Garchomp,Dragon,Ground,700,108,170,115,120,95,92,4,False +446,Munchlax,Normal,,390,135,85,40,40,85,5,4,False +447,Riolu,Fighting,,285,40,70,40,35,40,60,4,False +448,Lucario,Fighting,Steel,525,70,110,70,115,70,90,4,False +448,LucarioMega Lucario,Fighting,Steel,625,70,145,88,140,70,112,4,False +449,Hippopotas,Ground,,330,68,72,78,38,42,32,4,False +450,Hippowdon,Ground,,525,108,112,118,68,72,47,4,False +451,Skorupi,Poison,Bug,330,40,50,90,30,55,65,4,False +452,Drapion,Poison,Dark,500,70,90,110,60,75,95,4,False +453,Croagunk,Poison,Fighting,300,48,61,40,61,40,50,4,False +454,Toxicroak,Poison,Fighting,490,83,106,65,86,65,85,4,False +455,Carnivine,Grass,,454,74,100,72,90,72,46,4,False +456,Finneon,Water,,330,49,49,56,49,61,66,4,False +457,Lumineon,Water,,460,69,69,76,69,86,91,4,False +458,Mantyke,Water,Flying,345,45,20,50,60,120,50,4,False +459,Snover,Grass,Ice,334,60,62,50,62,60,40,4,False +460,Abomasnow,Grass,Ice,494,90,92,75,92,85,60,4,False +460,AbomasnowMega Abomasnow,Grass,Ice,594,90,132,105,132,105,30,4,False +461,Weavile,Dark,Ice,510,70,120,65,45,85,125,4,False +462,Magnezone,Electric,Steel,535,70,70,115,130,90,60,4,False +463,Lickilicky,Normal,,515,110,85,95,80,95,50,4,False +464,Rhyperior,Ground,Rock,535,115,140,130,55,55,40,4,False +465,Tangrowth,Grass,,535,100,100,125,110,50,50,4,False +466,Electivire,Electric,,540,75,123,67,95,85,95,4,False +467,Magmortar,Fire,,540,75,95,67,125,95,83,4,False +468,Togekiss,Fairy,Flying,545,85,50,95,120,115,80,4,False +469,Yanmega,Bug,Flying,515,86,76,86,116,56,95,4,False +470,Leafeon,Grass,,525,65,110,130,60,65,95,4,False +471,Glaceon,Ice,,525,65,60,110,130,95,65,4,False +472,Gliscor,Ground,Flying,510,75,95,125,45,75,95,4,False +473,Mamoswine,Ice,Ground,530,110,130,80,70,60,80,4,False +474,Porygon-Z,Normal,,535,85,80,70,135,75,90,4,False +475,Gallade,Psychic,Fighting,518,68,125,65,65,115,80,4,False +475,GalladeMega Gallade,Psychic,Fighting,618,68,165,95,65,115,110,4,False +476,Probopass,Rock,Steel,525,60,55,145,75,150,40,4,False +477,Dusknoir,Ghost,,525,45,100,135,65,135,45,4,False +478,Froslass,Ice,Ghost,480,70,80,70,80,70,110,4,False +479,Rotom,Electric,Ghost,440,50,50,77,95,77,91,4,False +479,RotomHeat Rotom,Electric,Fire,520,50,65,107,105,107,86,4,False +479,RotomWash Rotom,Electric,Water,520,50,65,107,105,107,86,4,False +479,RotomFrost Rotom,Electric,Ice,520,50,65,107,105,107,86,4,False +479,RotomFan Rotom,Electric,Flying,520,50,65,107,105,107,86,4,False +479,RotomMow Rotom,Electric,Grass,520,50,65,107,105,107,86,4,False +480,Uxie,Psychic,,580,75,75,130,75,130,95,4,True +481,Mesprit,Psychic,,580,80,105,105,105,105,80,4,True +482,Azelf,Psychic,,580,75,125,70,125,70,115,4,True +483,Dialga,Steel,Dragon,680,100,120,120,150,100,90,4,True +484,Palkia,Water,Dragon,680,90,120,100,150,120,100,4,True +485,Heatran,Fire,Steel,600,91,90,106,130,106,77,4,True +486,Regigigas,Normal,,670,110,160,110,80,110,100,4,True +487,GiratinaAltered Forme,Ghost,Dragon,680,150,100,120,100,120,90,4,True +487,GiratinaOrigin Forme,Ghost,Dragon,680,150,120,100,120,100,90,4,True +488,Cresselia,Psychic,,600,120,70,120,75,130,85,4,False +489,Phione,Water,,480,80,80,80,80,80,80,4,False +490,Manaphy,Water,,600,100,100,100,100,100,100,4,False +491,Darkrai,Dark,,600,70,90,90,135,90,125,4,True +492,ShayminLand Forme,Grass,,600,100,100,100,100,100,100,4,True +492,ShayminSky Forme,Grass,Flying,600,100,103,75,120,75,127,4,True +493,Arceus,Normal,,720,120,120,120,120,120,120,4,True +494,Victini,Psychic,Fire,600,100,100,100,100,100,100,5,True +495,Snivy,Grass,,308,45,45,55,45,55,63,5,False +496,Servine,Grass,,413,60,60,75,60,75,83,5,False +497,Serperior,Grass,,528,75,75,95,75,95,113,5,False +498,Tepig,Fire,,308,65,63,45,45,45,45,5,False +499,Pignite,Fire,Fighting,418,90,93,55,70,55,55,5,False +500,Emboar,Fire,Fighting,528,110,123,65,100,65,65,5,False +501,Oshawott,Water,,308,55,55,45,63,45,45,5,False +502,Dewott,Water,,413,75,75,60,83,60,60,5,False +503,Samurott,Water,,528,95,100,85,108,70,70,5,False +504,Patrat,Normal,,255,45,55,39,35,39,42,5,False +505,Watchog,Normal,,420,60,85,69,60,69,77,5,False +506,Lillipup,Normal,,275,45,60,45,25,45,55,5,False +507,Herdier,Normal,,370,65,80,65,35,65,60,5,False +508,Stoutland,Normal,,500,85,110,90,45,90,80,5,False +509,Purrloin,Dark,,281,41,50,37,50,37,66,5,False +510,Liepard,Dark,,446,64,88,50,88,50,106,5,False +511,Pansage,Grass,,316,50,53,48,53,48,64,5,False +512,Simisage,Grass,,498,75,98,63,98,63,101,5,False +513,Pansear,Fire,,316,50,53,48,53,48,64,5,False +514,Simisear,Fire,,498,75,98,63,98,63,101,5,False +515,Panpour,Water,,316,50,53,48,53,48,64,5,False +516,Simipour,Water,,498,75,98,63,98,63,101,5,False +517,Munna,Psychic,,292,76,25,45,67,55,24,5,False +518,Musharna,Psychic,,487,116,55,85,107,95,29,5,False +519,Pidove,Normal,Flying,264,50,55,50,36,30,43,5,False +520,Tranquill,Normal,Flying,358,62,77,62,50,42,65,5,False +521,Unfezant,Normal,Flying,488,80,115,80,65,55,93,5,False +522,Blitzle,Electric,,295,45,60,32,50,32,76,5,False +523,Zebstrika,Electric,,497,75,100,63,80,63,116,5,False +524,Roggenrola,Rock,,280,55,75,85,25,25,15,5,False +525,Boldore,Rock,,390,70,105,105,50,40,20,5,False +526,Gigalith,Rock,,515,85,135,130,60,80,25,5,False +527,Woobat,Psychic,Flying,313,55,45,43,55,43,72,5,False +528,Swoobat,Psychic,Flying,425,67,57,55,77,55,114,5,False +529,Drilbur,Ground,,328,60,85,40,30,45,68,5,False +530,Excadrill,Ground,Steel,508,110,135,60,50,65,88,5,False +531,Audino,Normal,,445,103,60,86,60,86,50,5,False +531,AudinoMega Audino,Normal,Fairy,545,103,60,126,80,126,50,5,False +532,Timburr,Fighting,,305,75,80,55,25,35,35,5,False +533,Gurdurr,Fighting,,405,85,105,85,40,50,40,5,False +534,Conkeldurr,Fighting,,505,105,140,95,55,65,45,5,False +535,Tympole,Water,,294,50,50,40,50,40,64,5,False +536,Palpitoad,Water,Ground,384,75,65,55,65,55,69,5,False +537,Seismitoad,Water,Ground,509,105,95,75,85,75,74,5,False +538,Throh,Fighting,,465,120,100,85,30,85,45,5,False +539,Sawk,Fighting,,465,75,125,75,30,75,85,5,False +540,Sewaddle,Bug,Grass,310,45,53,70,40,60,42,5,False +541,Swadloon,Bug,Grass,380,55,63,90,50,80,42,5,False +542,Leavanny,Bug,Grass,500,75,103,80,70,80,92,5,False +543,Venipede,Bug,Poison,260,30,45,59,30,39,57,5,False +544,Whirlipede,Bug,Poison,360,40,55,99,40,79,47,5,False +545,Scolipede,Bug,Poison,485,60,100,89,55,69,112,5,False +546,Cottonee,Grass,Fairy,280,40,27,60,37,50,66,5,False +547,Whimsicott,Grass,Fairy,480,60,67,85,77,75,116,5,False +548,Petilil,Grass,,280,45,35,50,70,50,30,5,False +549,Lilligant,Grass,,480,70,60,75,110,75,90,5,False +550,Basculin,Water,,460,70,92,65,80,55,98,5,False +551,Sandile,Ground,Dark,292,50,72,35,35,35,65,5,False +552,Krokorok,Ground,Dark,351,60,82,45,45,45,74,5,False +553,Krookodile,Ground,Dark,519,95,117,80,65,70,92,5,False +554,Darumaka,Fire,,315,70,90,45,15,45,50,5,False +555,DarmanitanStandard Mode,Fire,,480,105,140,55,30,55,95,5,False +555,DarmanitanZen Mode,Fire,Psychic,540,105,30,105,140,105,55,5,False +556,Maractus,Grass,,461,75,86,67,106,67,60,5,False +557,Dwebble,Bug,Rock,325,50,65,85,35,35,55,5,False +558,Crustle,Bug,Rock,475,70,95,125,65,75,45,5,False +559,Scraggy,Dark,Fighting,348,50,75,70,35,70,48,5,False +560,Scrafty,Dark,Fighting,488,65,90,115,45,115,58,5,False +561,Sigilyph,Psychic,Flying,490,72,58,80,103,80,97,5,False +562,Yamask,Ghost,,303,38,30,85,55,65,30,5,False +563,Cofagrigus,Ghost,,483,58,50,145,95,105,30,5,False +564,Tirtouga,Water,Rock,355,54,78,103,53,45,22,5,False +565,Carracosta,Water,Rock,495,74,108,133,83,65,32,5,False +566,Archen,Rock,Flying,401,55,112,45,74,45,70,5,False +567,Archeops,Rock,Flying,567,75,140,65,112,65,110,5,False +568,Trubbish,Poison,,329,50,50,62,40,62,65,5,False +569,Garbodor,Poison,,474,80,95,82,60,82,75,5,False +570,Zorua,Dark,,330,40,65,40,80,40,65,5,False +571,Zoroark,Dark,,510,60,105,60,120,60,105,5,False +572,Minccino,Normal,,300,55,50,40,40,40,75,5,False +573,Cinccino,Normal,,470,75,95,60,65,60,115,5,False +574,Gothita,Psychic,,290,45,30,50,55,65,45,5,False +575,Gothorita,Psychic,,390,60,45,70,75,85,55,5,False +576,Gothitelle,Psychic,,490,70,55,95,95,110,65,5,False +577,Solosis,Psychic,,290,45,30,40,105,50,20,5,False +578,Duosion,Psychic,,370,65,40,50,125,60,30,5,False +579,Reuniclus,Psychic,,490,110,65,75,125,85,30,5,False +580,Ducklett,Water,Flying,305,62,44,50,44,50,55,5,False +581,Swanna,Water,Flying,473,75,87,63,87,63,98,5,False +582,Vanillite,Ice,,305,36,50,50,65,60,44,5,False +583,Vanillish,Ice,,395,51,65,65,80,75,59,5,False +584,Vanilluxe,Ice,,535,71,95,85,110,95,79,5,False +585,Deerling,Normal,Grass,335,60,60,50,40,50,75,5,False +586,Sawsbuck,Normal,Grass,475,80,100,70,60,70,95,5,False +587,Emolga,Electric,Flying,428,55,75,60,75,60,103,5,False +588,Karrablast,Bug,,315,50,75,45,40,45,60,5,False +589,Escavalier,Bug,Steel,495,70,135,105,60,105,20,5,False +590,Foongus,Grass,Poison,294,69,55,45,55,55,15,5,False +591,Amoonguss,Grass,Poison,464,114,85,70,85,80,30,5,False +592,Frillish,Water,Ghost,335,55,40,50,65,85,40,5,False +593,Jellicent,Water,Ghost,480,100,60,70,85,105,60,5,False +594,Alomomola,Water,,470,165,75,80,40,45,65,5,False +595,Joltik,Bug,Electric,319,50,47,50,57,50,65,5,False +596,Galvantula,Bug,Electric,472,70,77,60,97,60,108,5,False +597,Ferroseed,Grass,Steel,305,44,50,91,24,86,10,5,False +598,Ferrothorn,Grass,Steel,489,74,94,131,54,116,20,5,False +599,Klink,Steel,,300,40,55,70,45,60,30,5,False +600,Klang,Steel,,440,60,80,95,70,85,50,5,False +601,Klinklang,Steel,,520,60,100,115,70,85,90,5,False +602,Tynamo,Electric,,275,35,55,40,45,40,60,5,False +603,Eelektrik,Electric,,405,65,85,70,75,70,40,5,False +604,Eelektross,Electric,,515,85,115,80,105,80,50,5,False +605,Elgyem,Psychic,,335,55,55,55,85,55,30,5,False +606,Beheeyem,Psychic,,485,75,75,75,125,95,40,5,False +607,Litwick,Ghost,Fire,275,50,30,55,65,55,20,5,False +608,Lampent,Ghost,Fire,370,60,40,60,95,60,55,5,False +609,Chandelure,Ghost,Fire,520,60,55,90,145,90,80,5,False +610,Axew,Dragon,,320,46,87,60,30,40,57,5,False +611,Fraxure,Dragon,,410,66,117,70,40,50,67,5,False +612,Haxorus,Dragon,,540,76,147,90,60,70,97,5,False +613,Cubchoo,Ice,,305,55,70,40,60,40,40,5,False +614,Beartic,Ice,,485,95,110,80,70,80,50,5,False +615,Cryogonal,Ice,,485,70,50,30,95,135,105,5,False +616,Shelmet,Bug,,305,50,40,85,40,65,25,5,False +617,Accelgor,Bug,,495,80,70,40,100,60,145,5,False +618,Stunfisk,Ground,Electric,471,109,66,84,81,99,32,5,False +619,Mienfoo,Fighting,,350,45,85,50,55,50,65,5,False +620,Mienshao,Fighting,,510,65,125,60,95,60,105,5,False +621,Druddigon,Dragon,,485,77,120,90,60,90,48,5,False +622,Golett,Ground,Ghost,303,59,74,50,35,50,35,5,False +623,Golurk,Ground,Ghost,483,89,124,80,55,80,55,5,False +624,Pawniard,Dark,Steel,340,45,85,70,40,40,60,5,False +625,Bisharp,Dark,Steel,490,65,125,100,60,70,70,5,False +626,Bouffalant,Normal,,490,95,110,95,40,95,55,5,False +627,Rufflet,Normal,Flying,350,70,83,50,37,50,60,5,False +628,Braviary,Normal,Flying,510,100,123,75,57,75,80,5,False +629,Vullaby,Dark,Flying,370,70,55,75,45,65,60,5,False +630,Mandibuzz,Dark,Flying,510,110,65,105,55,95,80,5,False +631,Heatmor,Fire,,484,85,97,66,105,66,65,5,False +632,Durant,Bug,Steel,484,58,109,112,48,48,109,5,False +633,Deino,Dark,Dragon,300,52,65,50,45,50,38,5,False +634,Zweilous,Dark,Dragon,420,72,85,70,65,70,58,5,False +635,Hydreigon,Dark,Dragon,600,92,105,90,125,90,98,5,False +636,Larvesta,Bug,Fire,360,55,85,55,50,55,60,5,False +637,Volcarona,Bug,Fire,550,85,60,65,135,105,100,5,False +638,Cobalion,Steel,Fighting,580,91,90,129,90,72,108,5,True +639,Terrakion,Rock,Fighting,580,91,129,90,72,90,108,5,True +640,Virizion,Grass,Fighting,580,91,90,72,90,129,108,5,True +641,TornadusIncarnate Forme,Flying,,580,79,115,70,125,80,111,5,True +641,TornadusTherian Forme,Flying,,580,79,100,80,110,90,121,5,True +642,ThundurusIncarnate Forme,Electric,Flying,580,79,115,70,125,80,111,5,True +642,ThundurusTherian Forme,Electric,Flying,580,79,105,70,145,80,101,5,True +643,Reshiram,Dragon,Fire,680,100,120,100,150,120,90,5,True +644,Zekrom,Dragon,Electric,680,100,150,120,120,100,90,5,True +645,LandorusIncarnate Forme,Ground,Flying,600,89,125,90,115,80,101,5,True +645,LandorusTherian Forme,Ground,Flying,600,89,145,90,105,80,91,5,True +646,Kyurem,Dragon,Ice,660,125,130,90,130,90,95,5,True +646,KyuremBlack Kyurem,Dragon,Ice,700,125,170,100,120,90,95,5,True +646,KyuremWhite Kyurem,Dragon,Ice,700,125,120,90,170,100,95,5,True +647,KeldeoOrdinary Forme,Water,Fighting,580,91,72,90,129,90,108,5,False +647,KeldeoResolute Forme,Water,Fighting,580,91,72,90,129,90,108,5,False +648,MeloettaAria Forme,Normal,Psychic,600,100,77,77,128,128,90,5,False +648,MeloettaPirouette Forme,Normal,Fighting,600,100,128,90,77,77,128,5,False +649,Genesect,Bug,Steel,600,71,120,95,120,95,99,5,False +650,Chespin,Grass,,313,56,61,65,48,45,38,6,False +651,Quilladin,Grass,,405,61,78,95,56,58,57,6,False +652,Chesnaught,Grass,Fighting,530,88,107,122,74,75,64,6,False +653,Fennekin,Fire,,307,40,45,40,62,60,60,6,False +654,Braixen,Fire,,409,59,59,58,90,70,73,6,False +655,Delphox,Fire,Psychic,534,75,69,72,114,100,104,6,False +656,Froakie,Water,,314,41,56,40,62,44,71,6,False +657,Frogadier,Water,,405,54,63,52,83,56,97,6,False +658,Greninja,Water,Dark,530,72,95,67,103,71,122,6,False +659,Bunnelby,Normal,,237,38,36,38,32,36,57,6,False +660,Diggersby,Normal,Ground,423,85,56,77,50,77,78,6,False +661,Fletchling,Normal,Flying,278,45,50,43,40,38,62,6,False +662,Fletchinder,Fire,Flying,382,62,73,55,56,52,84,6,False +663,Talonflame,Fire,Flying,499,78,81,71,74,69,126,6,False +664,Scatterbug,Bug,,200,38,35,40,27,25,35,6,False +665,Spewpa,Bug,,213,45,22,60,27,30,29,6,False +666,Vivillon,Bug,Flying,411,80,52,50,90,50,89,6,False +667,Litleo,Fire,Normal,369,62,50,58,73,54,72,6,False +668,Pyroar,Fire,Normal,507,86,68,72,109,66,106,6,False +669,Flabébé,Fairy,,303,44,38,39,61,79,42,6,False +670,Floette,Fairy,,371,54,45,47,75,98,52,6,False +671,Florges,Fairy,,552,78,65,68,112,154,75,6,False +672,Skiddo,Grass,,350,66,65,48,62,57,52,6,False +673,Gogoat,Grass,,531,123,100,62,97,81,68,6,False +674,Pancham,Fighting,,348,67,82,62,46,48,43,6,False +675,Pangoro,Fighting,Dark,495,95,124,78,69,71,58,6,False +676,Furfrou,Normal,,472,75,80,60,65,90,102,6,False +677,Espurr,Psychic,,355,62,48,54,63,60,68,6,False +678,MeowsticMale,Psychic,,466,74,48,76,83,81,104,6,False +678,MeowsticFemale,Psychic,,466,74,48,76,83,81,104,6,False +679,Honedge,Steel,Ghost,325,45,80,100,35,37,28,6,False +680,Doublade,Steel,Ghost,448,59,110,150,45,49,35,6,False +681,AegislashBlade Forme,Steel,Ghost,520,60,150,50,150,50,60,6,False +681,AegislashShield Forme,Steel,Ghost,520,60,50,150,50,150,60,6,False +682,Spritzee,Fairy,,341,78,52,60,63,65,23,6,False +683,Aromatisse,Fairy,,462,101,72,72,99,89,29,6,False +684,Swirlix,Fairy,,341,62,48,66,59,57,49,6,False +685,Slurpuff,Fairy,,480,82,80,86,85,75,72,6,False +686,Inkay,Dark,Psychic,288,53,54,53,37,46,45,6,False +687,Malamar,Dark,Psychic,482,86,92,88,68,75,73,6,False +688,Binacle,Rock,Water,306,42,52,67,39,56,50,6,False +689,Barbaracle,Rock,Water,500,72,105,115,54,86,68,6,False +690,Skrelp,Poison,Water,320,50,60,60,60,60,30,6,False +691,Dragalge,Poison,Dragon,494,65,75,90,97,123,44,6,False +692,Clauncher,Water,,330,50,53,62,58,63,44,6,False +693,Clawitzer,Water,,500,71,73,88,120,89,59,6,False +694,Helioptile,Electric,Normal,289,44,38,33,61,43,70,6,False +695,Heliolisk,Electric,Normal,481,62,55,52,109,94,109,6,False +696,Tyrunt,Rock,Dragon,362,58,89,77,45,45,48,6,False +697,Tyrantrum,Rock,Dragon,521,82,121,119,69,59,71,6,False +698,Amaura,Rock,Ice,362,77,59,50,67,63,46,6,False +699,Aurorus,Rock,Ice,521,123,77,72,99,92,58,6,False +700,Sylveon,Fairy,,525,95,65,65,110,130,60,6,False +701,Hawlucha,Fighting,Flying,500,78,92,75,74,63,118,6,False +702,Dedenne,Electric,Fairy,431,67,58,57,81,67,101,6,False +703,Carbink,Rock,Fairy,500,50,50,150,50,150,50,6,False +704,Goomy,Dragon,,300,45,50,35,55,75,40,6,False +705,Sliggoo,Dragon,,452,68,75,53,83,113,60,6,False +706,Goodra,Dragon,,600,90,100,70,110,150,80,6,False +707,Klefki,Steel,Fairy,470,57,80,91,80,87,75,6,False +708,Phantump,Ghost,Grass,309,43,70,48,50,60,38,6,False +709,Trevenant,Ghost,Grass,474,85,110,76,65,82,56,6,False +710,PumpkabooAverage Size,Ghost,Grass,335,49,66,70,44,55,51,6,False +710,PumpkabooSmall Size,Ghost,Grass,335,44,66,70,44,55,56,6,False +710,PumpkabooLarge Size,Ghost,Grass,335,54,66,70,44,55,46,6,False +710,PumpkabooSuper Size,Ghost,Grass,335,59,66,70,44,55,41,6,False +711,GourgeistAverage Size,Ghost,Grass,494,65,90,122,58,75,84,6,False +711,GourgeistSmall Size,Ghost,Grass,494,55,85,122,58,75,99,6,False +711,GourgeistLarge Size,Ghost,Grass,494,75,95,122,58,75,69,6,False +711,GourgeistSuper Size,Ghost,Grass,494,85,100,122,58,75,54,6,False +712,Bergmite,Ice,,304,55,69,85,32,35,28,6,False +713,Avalugg,Ice,,514,95,117,184,44,46,28,6,False +714,Noibat,Flying,Dragon,245,40,30,35,45,40,55,6,False +715,Noivern,Flying,Dragon,535,85,70,80,97,80,123,6,False +716,Xerneas,Fairy,,680,126,131,95,131,98,99,6,True +717,Yveltal,Dark,Flying,680,126,131,95,131,98,99,6,True +718,Zygarde50% Forme,Dragon,Ground,600,108,100,121,81,95,95,6,True +719,Diancie,Rock,Fairy,600,50,100,150,100,150,50,6,True +719,DiancieMega Diancie,Rock,Fairy,700,50,160,110,160,110,110,6,True +720,HoopaHoopa Confined,Psychic,Ghost,600,80,110,60,150,130,70,6,True +720,HoopaHoopa Unbound,Psychic,Dark,680,80,160,60,170,130,80,6,True +721,Volcanion,Fire,Water,600,80,110,120,130,90,70,6,True diff --git a/docs/modules/dia_3/material/filtrado/heroes_information.csv b/docs/modules/dia_3/material/filtrado/heroes_information.csv new file mode 100644 index 0000000..a89af4f --- /dev/null +++ b/docs/modules/dia_3/material/filtrado/heroes_information.csv @@ -0,0 +1,735 @@ +"","name","Gender","Eye color","Race","Hair color","Height","Publisher","Skin color","Alignment","Weight" +"0","A-Bomb","Male","yellow","Human","No Hair","203","Marvel Comics","-","good","441" +"1","Abe Sapien","Male","blue","Icthyo Sapien","No Hair","191","Dark Horse Comics","blue","good","65" +"2","Abin Sur","Male","blue","Ungaran","No Hair","185","DC Comics","red","good","90" +"3","Abomination","Male","green","Human / Radiation","No Hair","203","Marvel Comics","-","bad","441" +"4","Abraxas","Male","blue","Cosmic Entity","Black","-99","Marvel Comics","-","bad","-99" +"5","Absorbing Man","Male","blue","Human","No Hair","193","Marvel Comics","-","bad","122" +"6","Adam Monroe","Male","blue","-","Blond","-99","NBC - Heroes","-","good","-99" +"7","Adam Strange","Male","blue","Human","Blond","185","DC Comics","-","good","88" +"8","Agent 13","Female","blue","-","Blond","173","Marvel Comics","-","good","61" +"9","Agent Bob","Male","brown","Human","Brown","178","Marvel Comics","-","good","81" +"10","Agent Zero","Male","-","-","-","191","Marvel Comics","-","good","104" +"11","Air-Walker","Male","blue","-","White","188","Marvel Comics","-","bad","108" +"12","Ajax","Male","brown","Cyborg","Black","193","Marvel Comics","-","bad","90" +"13","Alan Scott","Male","blue","-","Blond","180","DC Comics","-","good","90" +"14","Alex Mercer","Male","-","Human","-","-99","Wildstorm","-","bad","-99" +"15","Alex Woolsly","Male","-","-","-","-99","NBC - Heroes","-","good","-99" +"16","Alfred Pennyworth","Male","blue","Human","Black","178","DC Comics","-","good","72" +"17","Alien","Male","-","Xenomorph XX121","No Hair","244","Dark Horse Comics","black","bad","169" +"18","Allan Quatermain","Male","-","-","-","-99","Wildstorm","-","good","-99" +"19","Amazo","Male","red","Android","-","257","DC Comics","-","bad","173" +"20","Ammo","Male","brown","Human","Black","188","Marvel Comics","-","bad","101" +"21","Ando Masahashi","Male","-","-","-","-99","NBC - Heroes","-","good","-99" +"22","Angel","Male","blue","-","Blond","183","Marvel Comics","-","good","68" +"23","Angel","Male","-","Vampire","-","-99","Dark Horse Comics","-","good","-99" +"24","Angel Dust","Female","yellow","Mutant","Black","165","Marvel Comics","-","good","57" +"25","Angel Salvadore","Female","brown","-","Black","163","Marvel Comics","-","good","54" +"26","Angela","Female","-","-","-","-99","Image Comics","-","bad","-99" +"27","Animal Man","Male","blue","Human","Blond","183","DC Comics","-","good","83" +"28","Annihilus","Male","green","-","No Hair","180","Marvel Comics","-","bad","90" +"29","Ant-Man","Male","blue","Human","Blond","211","Marvel Comics","-","good","122" +"30","Ant-Man II","Male","blue","Human","Blond","183","Marvel Comics","-","good","86" +"31","Anti-Monitor","Male","yellow","God / Eternal","No Hair","61","DC Comics","-","bad","-99" +"32","Anti-Spawn","Male","-","-","-","-99","Image Comics","-","bad","-99" +"33","Anti-Venom","Male","blue","Symbiote","Blond","229","Marvel Comics","-","-","358" +"34","Apocalypse","Male","red","Mutant","Black","213","Marvel Comics","grey","bad","135" +"35","Aquababy","Male","blue","-","Blond","-99","DC Comics","-","good","-99" +"36","Aqualad","Male","blue","Atlantean","Black","178","DC Comics","-","good","106" +"37","Aquaman","Male","blue","Atlantean","Blond","185","DC Comics","-","good","146" +"38","Arachne","Female","blue","Human","Blond","175","Marvel Comics","-","good","63" +"39","Archangel","Male","blue","Mutant","Blond","183","Marvel Comics","blue","good","68" +"40","Arclight","Female","violet","-","Purple","173","Marvel Comics","-","bad","57" +"41","Ardina","Female","white","Alien","Orange","193","Marvel Comics","gold","good","98" +"42","Ares","Male","brown","-","Brown","185","Marvel Comics","-","good","270" +"43","Ariel","Female","purple","-","Pink","165","Marvel Comics","-","good","59" +"44","Armor","Female","black","-","Black","163","Marvel Comics","-","good","50" +"45","Arsenal","Male","-","Human","-","-99","DC Comics","-","good","-99" +"46","Astro Boy","Male","brown","-","Black","-99","","-","good","-99" +"47","Atlas","Male","brown","Mutant","Red","183","Marvel Comics","-","good","101" +"48","Atlas","Male","blue","God / Eternal","Brown","198","DC Comics","-","bad","126" +"49","Atom","Male","blue","-","Red","178","DC Comics","-","good","68" +"50","Atom","Male","-","-","-","-99","DC Comics","-","good","-99" +"51","Atom Girl","Female","black","-","Black","168","DC Comics","-","good","54" +"52","Atom II","Male","brown","Human","Auburn","183","DC Comics","-","good","81" +"53","Atom III","Male","-","-","Red","-99","DC Comics","-","good","-99" +"54","Atom IV","Male","brown","-","Black","-99","DC Comics","-","good","72" +"55","Aurora","Female","blue","Mutant","Black","180","Marvel Comics","-","good","63" +"56","Azazel","Male","yellow","Neyaphem","Black","183","Marvel Comics","red","bad","67" +"57","Azrael","Male","brown","Human","Black","-99","DC Comics","-","good","-99" +"58","Aztar","Male","-","-","-","-99","DC Comics","-","good","-99" +"59","Bane","Male","-","Human","-","203","DC Comics","-","bad","180" +"60","Banshee","Male","green","Human","Strawberry Blond","183","Marvel Comics","-","good","77" +"61","Bantam","Male","brown","-","Black","165","Marvel Comics","-","good","54" +"62","Batgirl","Female","-","-","-","-99","DC Comics","-","good","-99" +"63","Batgirl","Female","green","Human","Red","170","DC Comics","-","good","57" +"64","Batgirl III","Female","-","-","-","-99","DC Comics","-","good","-99" +"65","Batgirl IV","Female","green","Human","Black","165","DC Comics","-","good","52" +"66","Batgirl V","Female","-","-","-","-99","DC Comics","-","good","-99" +"67","Batgirl VI","Female","blue","-","Blond","168","DC Comics","-","good","61" +"68","Batman","Male","blue","Human","black","188","DC Comics","-","good","95" +"69","Batman","Male","blue","Human","Black","178","DC Comics","-","good","77" +"70","Batman II","Male","blue","Human","Black","178","DC Comics","-","good","79" +"71","Battlestar","Male","brown","-","Black","198","Marvel Comics","-","good","133" +"72","Batwoman V","Female","green","Human","Red","178","DC Comics","-","good","-99" +"73","Beak","Male","black","-","White","175","Marvel Comics","-","good","63" +"74","Beast","Male","blue","Mutant","Blue","180","Marvel Comics","blue","good","181" +"75","Beast Boy","Male","green","Human","Green","173","DC Comics","green","good","68" +"76","Beetle","Male","-","-","-","-99","Marvel Comics","-","bad","-99" +"77","Ben 10","Male","-","-","-","-99","DC Comics","-","good","-99" +"78","Beta Ray Bill","Male","-","-","No Hair","201","Marvel Comics","-","good","216" +"79","Beyonder","Male","-","God / Eternal","-","-99","Marvel Comics","-","good","-99" +"80","Big Barda","Female","blue","New God","Black","188","DC Comics","-","bad","135" +"81","Big Daddy","Male","-","-","-","-99","Icon Comics","-","good","-99" +"82","Big Man","Male","blue","-","Brown","165","Marvel Comics","-","bad","71" +"83","Bill Harken","Male","-","Alpha","-","-99","SyFy","-","good","-99" +"84","Billy Kincaid","Male","-","-","-","-99","Image Comics","-","bad","-99" +"85","Binary","Female","blue","-","Blond","180","Marvel Comics","-","good","54" +"86","Bionic Woman","Female","blue","Cyborg","Black","-99","","-","good","-99" +"87","Bird-Brain","-","-","-","-","-99","Marvel Comics","-","good","-99" +"88","Bird-Man","Male","-","Human","-","-99","Marvel Comics","-","bad","-99" +"89","Bird-Man II","Male","-","Human","-","-99","Marvel Comics","-","bad","-99" +"90","Birdman","Male","-","God / Eternal","-","-99","Hanna-Barbera","-","good","-99" +"91","Bishop","Male","brown","Mutant","No Hair","198","Marvel Comics","-","good","124" +"92","Bizarro","Male","black","Bizarro","Black","191","DC Comics","white","neutral","155" +"93","Black Abbott","Male","red","-","Black","-99","Marvel Comics","-","bad","-99" +"94","Black Adam","Male","brown","-","Black","191","DC Comics","-","bad","113" +"95","Black Bolt","Male","blue","Inhuman","Black","188","Marvel Comics","-","good","95" +"96","Black Canary","Female","blue","Human","Blond","165","DC Comics","-","good","58" +"97","Black Canary","Female","blue","Metahuman","Blond","170","DC Comics","-","good","59" +"98","Black Cat","Female","green","Human","Blond","178","Marvel Comics","-","good","54" +"99","Black Flash","Male","-","God / Eternal","-","-99","DC Comics","-","neutral","-99" +"100","Black Goliath","Male","-","-","-","-99","Marvel Comics","-","good","-99" +"101","Black Knight III","Male","brown","Human","Brown","183","Marvel Comics","-","good","86" +"102","Black Lightning","Male","brown","-","No Hair","185","DC Comics","-","good","90" +"103","Black Mamba","Female","green","-","Black","170","Marvel Comics","-","bad","52" +"104","Black Manta","Male","black","Human","No Hair","188","DC Comics","-","bad","92" +"105","Black Panther","Male","brown","Human","Black","183","Marvel Comics","-","good","90" +"106","Black Widow","Female","green","Human","Auburn","170","Marvel Comics","-","good","59" +"107","Black Widow II","Female","blue","-","Blond","170","Marvel Comics","-","good","61" +"108","Blackout","Male","red","Demon","White","191","Marvel Comics","white","bad","104" +"109","Blackwing","Male","blue","-","Black","185","Marvel Comics","-","bad","86" +"110","Blackwulf","Male","red","Alien","White","188","Marvel Comics","-","-","88" +"111","Blade","Male","brown","Vampire","Black","188","Marvel Comics","-","good","97" +"112","Blaquesmith","-","black","-","No Hair","-99","Marvel Comics","-","good","-99" +"113","Bling!","Female","-","-","-","168","Marvel Comics","-","good","68" +"114","Blink","Female","green","Mutant","Magenta","165","Marvel Comics","pink","good","56" +"115","Blizzard","Male","-","-","-","-99","Marvel Comics","-","bad","-99" +"116","Blizzard","Male","-","-","Brown","-99","Marvel Comics","-","bad","-99" +"117","Blizzard II","Male","brown","-","Brown","175","Marvel Comics","-","bad","77" +"118","Blob","Male","brown","-","Brown","178","Marvel Comics","-","bad","230" +"119","Bloodaxe","Female","blue","Human","Brown","218","Marvel Comics","-","bad","495" +"120","Bloodhawk","Male","black","Mutant","No Hair","-99","Marvel Comics","-","good","-99" +"121","Bloodwraith","Male","white","-","No Hair","30.5","Marvel Comics","-","bad","-99" +"122","Blue Beetle","Male","blue","-","Brown","-99","DC Comics","-","good","-99" +"123","Blue Beetle","Male","-","-","-","-99","DC Comics","-","good","-99" +"124","Blue Beetle II","Male","blue","-","Brown","183","DC Comics","-","good","86" +"125","Blue Beetle III","Male","brown","Human","Black","-99","DC Comics","-","good","-99" +"126","Boba Fett","Male","brown","Human / Clone","Black","183","George Lucas","-","bad","-99" +"127","Bolt","Male","-","-","-","-99","Marvel Comics","-","good","-99" +"128","Bomb Queen","Female","-","-","-","-99","Image Comics","-","bad","-99" +"129","Boom-Boom","Female","blue","Mutant","Blond","165","Marvel Comics","-","good","55" +"130","Boomer","Female","-","-","-","-99","Marvel Comics","-","good","-99" +"131","Booster Gold","Male","blue","Human","Blond","196","DC Comics","-","good","97" +"132","Box","Male","-","-","-","-99","Marvel Comics","-","good","-99" +"133","Box III","-","blue","-","Blond","193","Marvel Comics","-","good","110" +"134","Box IV","-","brown","-","Brown / Black","-99","Marvel Comics","-","good","-99" +"135","Brainiac","Male","green","Android","No Hair","198","DC Comics","green","bad","135" +"136","Brainiac 5","Male","green","-","Blond","170","DC Comics","-","good","61" +"137","Brother Voodoo","Male","brown","Human","Brown / White","183","Marvel Comics","-","good","99" +"138","Brundlefly","Male","-","Mutant","-","193","","-","-","-99" +"139","Buffy","Female","green","Human","Blond","157","Dark Horse Comics","-","good","52" +"140","Bullseye","Male","blue","Human","blond","183","Marvel Comics","-","bad","90" +"141","Bumblebee","Female","brown","Human","Black","170","DC Comics","-","good","59" +"142","Bumbleboy","Male","-","-","-","-99","Marvel Comics","-","good","-99" +"143","Bushido","Male","-","Human","-","-99","DC Comics","-","good","-99" +"144","Cable","Male","blue","Mutant","White","203","Marvel Comics","-","good","158" +"145","Callisto","Female","blue","-","Black","175","Marvel Comics","-","bad","74" +"146","Cameron Hicks","Male","-","Alpha","-","-99","SyFy","-","good","-99" +"147","Cannonball","Male","blue","-","Blond","183","Marvel Comics","-","good","81" +"148","Captain America","Male","blue","Human","blond","188","Marvel Comics","-","good","108" +"149","Captain Atom","Male","blue","Human / Radiation","Silver","193","DC Comics","silver","good","90" +"150","Captain Britain","Male","blue","Human","Blond","198","Marvel Comics","-","good","116" +"151","Captain Cold","Male","brown","Human","Brown","-99","DC Comics","-","neutral","-99" +"152","Captain Epic","Male","blue","-","Brown","188","Team Epic TV","-","good","-99" +"153","Captain Hindsight","Male","-","Human","Black","-99","South Park","-","good","-99" +"154","Captain Mar-vell","Male","blue","-","Blond","188","Marvel Comics","-","good","108" +"155","Captain Marvel","Female","blue","Human-Kree","Blond","180","Marvel Comics","-","good","74" +"156","Captain Marvel","Male","blue","Human","Black","193","DC Comics","-","good","101" +"157","Captain Marvel II","Male","blue","Human","Black","175","DC Comics","-","good","74" +"158","Captain Midnight","Male","-","Human","-","-99","Dark Horse Comics","-","good","-99" +"159","Captain Planet","Male","red","God / Eternal","Green","-99","Marvel Comics","-","good","-99" +"160","Captain Universe","-","-","God / Eternal","-","-99","Marvel Comics","-","good","-99" +"161","Carnage","Male","green","Symbiote","Red","185","Marvel Comics","-","bad","86" +"162","Cat","Female","blue","-","Blond","173","Marvel Comics","-","good","61" +"163","Cat II","Female","-","-","-","-99","Marvel Comics","-","good","-99" +"164","Catwoman","Female","green","Human","Black","175","DC Comics","-","good","61" +"165","Cecilia Reyes","-","brown","-","Brown","170","Marvel Comics","-","good","62" +"166","Century","Male","white","Alien","White","201","Marvel Comics","grey","good","97" +"167","Cerebra","Female","-","Mutant","-","-99","Marvel Comics","-","good","-99" +"168","Chamber","Male","brown","Mutant","Brown","175","Marvel Comics","-","good","63" +"169","Chameleon","Male","-","-","-","-99","DC Comics","-","bad","-99" +"170","Changeling","Male","brown","-","Black","180","Marvel Comics","-","bad","81" +"171","Cheetah","Female","green","Human","Blond","163","DC Comics","-","bad","50" +"172","Cheetah II","Female","green","Human","Brown","170","DC Comics","-","bad","55" +"173","Cheetah III","Female","brown","Human","Brown","175","DC Comics","-","bad","54" +"174","Chromos","Male","brown","-","Red / Grey","185","Team Epic TV","-","bad","86" +"175","Chuck Norris","Male","-","-","-","178","","-","good","-99" +"176","Citizen Steel","Male","green","Human","Red","183","DC Comics","-","good","170" +"177","Claire Bennet","Female","blue","-","Blond","-99","NBC - Heroes","-","good","-99" +"178","Clea","-","-","-","White","-99","Marvel Comics","-","good","-99" +"179","Cloak","Male","brown","-","black","226","Marvel Comics","-","good","70" +"180","Clock King","Male","blue","Human","Black","178","DC Comics","-","bad","78" +"181","Cogliostro","Male","-","-","-","-99","Image Comics","-","bad","-99" +"182","Colin Wagner","Male","grey","-","Brown","-99","HarperCollins","-","good","-99" +"183","Colossal Boy","Male","-","-","-","-99","DC Comics","-","good","-99" +"184","Colossus","Male","silver","Mutant","Black","226","Marvel Comics","-","good","225" +"185","Copycat","Female","red","Mutant","White","183","Marvel Comics","blue","neutral","67" +"186","Corsair","Male","brown","-","Brown","191","Marvel Comics","-","good","79" +"187","Cottonmouth","Male","brown","Human","Black","183","Marvel Comics","-","bad","99" +"188","Crimson Crusader","Male","blue","-","Strawberry Blond","-99","Marvel Comics","-","good","-99" +"189","Crimson Dynamo","Male","brown","-","No Hair","180","Marvel Comics","-","good","104" +"190","Crystal","Female","green","Inhuman","Red","168","Marvel Comics","-","good","50" +"191","Curse","Male","-","-","-","-99","Image Comics","-","bad","-99" +"192","Cy-Gor","Male","-","-","-","-99","Image Comics","-","bad","-99" +"193","Cyborg","Male","brown","Cyborg","Black","198","DC Comics","-","good","173" +"194","Cyborg Superman","Male","blue","Cyborg","Black","-99","DC Comics","-","bad","-99" +"195","Cyclops","Male","brown","Mutant","Brown","191","Marvel Comics","-","good","88" +"196","Cypher","-","blue","-","Blond","175","Marvel Comics","-","good","68" +"197","Dagger","Female","blue","-","Blond","165","Marvel Comics","-","good","52" +"198","Danny Cooper","Male","brown","-","Blond","-99","HarperCollins","-","good","-99" +"199","Daphne Powell","Female","-","-","-","-99","ABC Studios","-","good","-99" +"200","Daredevil","Male","blue","Human","Red","183","Marvel Comics","-","good","90" +"201","Darkhawk","Male","brown","Human","Brown","185","Marvel Comics","-","good","81" +"202","Darkman","Male","-","-","-","-99","Universal Studios","-","good","-99" +"203","Darkseid","Male","red","New God","No Hair","267","DC Comics","grey","bad","817" +"204","Darkside","-","-","-","-","-99","","-","bad","-99" +"205","Darkstar","Female","brown","Mutant","Blond","168","Marvel Comics","-","good","56" +"206","Darth Maul","Male","yellow / red","Dathomirian Zabrak","-","170","George Lucas","red / black","bad","-99" +"207","Darth Vader","Male","yellow","Cyborg","No Hair","198","George Lucas","-","bad","135" +"208","Dash","Male","blue","Human","Blond","122","Dark Horse Comics","-","good","27" +"209","Data","Male","yellow","Android","Brown","-99","Star Trek","-","good","-99" +"210","Dazzler","Female","blue","Mutant","Blond","173","Marvel Comics","-","good","52" +"211","Deadman","Male","blue","Human","Black","183","DC Comics","-","good","90" +"212","Deadpool","Male","brown","Mutant","No Hair","188","Marvel Comics","-","neutral","95" +"213","Deadshot","Male","brown","Human","Brown","185","DC Comics","-","bad","91" +"214","Deathlok","Male","brown","Cyborg","Grey","193","Marvel Comics","-","good","178" +"215","Deathstroke","Male","blue","Human","White","193","DC Comics","-","neutral","101" +"216","Demogoblin","Male","red","Demon","No Hair","185","Marvel Comics","-","bad","95" +"217","Destroyer","Male","-","-","-","188","Marvel Comics","-","bad","383" +"218","Diamondback","Male","brown","Human","Black","193","Marvel Comics","-","bad","90" +"219","DL Hawkins","Male","-","-","-","-99","NBC - Heroes","-","good","-99" +"220","Doc Samson","Male","blue","Human / Radiation","Green","198","Marvel Comics","-","good","171" +"221","Doctor Doom","Male","brown","Human","Brown","201","Marvel Comics","-","bad","187" +"222","Doctor Doom II","Male","brown","-","Brown","201","Marvel Comics","-","bad","132" +"223","Doctor Fate","Male","blue","Human","Blond","188","DC Comics","-","good","89" +"224","Doctor Octopus","Male","brown","Human","Brown","175","Marvel Comics","-","bad","110" +"225","Doctor Strange","Male","grey","Human","Black","188","Marvel Comics","-","good","81" +"226","Domino","Female","blue","Human","Black","173","Marvel Comics","white","good","54" +"227","Donatello","Male","green","Mutant","No Hair","-99","IDW Publishing","green","good","-99" +"228","Donna Troy","Female","blue","Amazon","Black","175","DC Comics","-","good","63" +"229","Doomsday","Male","red","Alien","White","244","DC Comics","-","bad","412" +"230","Doppelganger","Male","white","-","No Hair","196","Marvel Comics","-","bad","104" +"231","Dormammu","Male","yellow","-","No Hair","185","Marvel Comics","-","bad","-99" +"232","Dr Manhattan","Male","white","Human / Cosmic","No Hair","-99","DC Comics","blue","good","-99" +"233","Drax the Destroyer","Male","red","Human / Altered","No Hair","193","Marvel Comics","green","good","306" +"234","Ego","-","-","-","-","-99","Marvel Comics","-","bad","-99" +"235","Elastigirl","Female","brown","Human","Brown","168","Dark Horse Comics","-","good","56" +"236","Electro","Male","blue","Human","Auburn","180","Marvel Comics","-","bad","74" +"237","Elektra","Female","blue","Human","Black","175","Marvel Comics","-","good","59" +"238","Elle Bishop","Female","blue","-","Blond","-99","NBC - Heroes","-","bad","-99" +"239","Elongated Man","Male","blue","-","Red","185","DC Comics","-","good","80" +"240","Emma Frost","Female","blue","-","Blond","178","Marvel Comics","-","good","65" +"241","Enchantress","Female","blue","Human","Blond","168","DC Comics","-","good","57" +"242","Energy","Female","-","-","-","-99","HarperCollins","-","good","-99" +"243","ERG-1","Male","-","-","-","-99","DC Comics","-","good","-99" +"244","Ethan Hunt","Male","brown","Human","Brown","168","","-","good","-99" +"245","Etrigan","Male","red","Demon","No Hair","193","DC Comics","yellow","neutral","203" +"246","Evil Deadpool","Male","white","Mutant","Red","188","Marvel Comics","-","bad","95" +"247","Evilhawk","Male","red","Alien","Black","191","Marvel Comics","green","bad","106" +"248","Exodus","Male","blue","Mutant","Black","183","Marvel Comics","red","bad","88" +"249","Fabian Cortez","-","blue","-","Brown","196","Marvel Comics","-","bad","96" +"250","Falcon","Male","brown","Human","Black","188","Marvel Comics","-","good","108" +"251","Fallen One II","Male","black","-","Blue","-99","Marvel Comics","-","bad","-99" +"252","Faora","Female","-","Kryptonian","-","-99","DC Comics","-","bad","-99" +"253","Feral","-","yellow (without irises)","-","Orange / White","175","Marvel Comics","-","good","50" +"254","Fighting Spirit","Female","-","-","Red","-99","DC Comics","-","good","-99" +"255","Fin Fang Foom","Male","red","Kakarantharaian","No Hair","975","Marvel Comics","green","good","18" +"256","Firebird","Female","brown","-","Black","165","Marvel Comics","-","good","56" +"257","Firelord","-","white","-","Yellow","193","Marvel Comics","-","good","99" +"258","Firestar","Female","green","Mutant","Red","173","Marvel Comics","-","good","56" +"259","Firestorm","Male","brown","-","Black","-99","DC Comics","-","good","-99" +"260","Firestorm","Male","blue","Human","Auburn","188","DC Comics","-","good","91" +"261","Fixer","-","red","-","No Hair","-99","Marvel Comics","-","bad","-99" +"262","Flash","Male","blue","Human","Brown / White","180","DC Comics","-","good","81" +"263","Flash Gordon","Male","-","-","-","-99","","-","good","-99" +"264","Flash II","Male","blue","Human","Blond","183","DC Comics","-","good","88" +"265","Flash III","Male","-","Human","-","183","DC Comics","-","good","86" +"266","Flash IV","Male","yellow","Human","Auburn","157","DC Comics","-","good","52" +"267","Forge","-","brown","-","Black","183","Marvel Comics","-","good","81" +"268","Franklin Richards","Male","blue","Mutant","Blond","142","Marvel Comics","-","good","45" +"269","Franklin Storm","-","blue","-","Grey","188","Marvel Comics","-","good","92" +"270","Frenzy","Female","brown","-","Black","211","Marvel Comics","-","bad","104" +"271","Frigga","Female","blue","-","White","180","Marvel Comics","-","good","167" +"272","Galactus","Male","black","Cosmic Entity","Black","876","Marvel Comics","-","neutral","16" +"273","Gambit","Male","red","Mutant","Brown","185","Marvel Comics","-","good","81" +"274","Gamora","Female","yellow","Zen-Whoberian","Black","183","Marvel Comics","green","good","77" +"275","Garbage Man","Male","-","Mutant","-","-99","DC Comics","-","good","-99" +"276","Gary Bell","Male","-","Alpha","-","-99","SyFy","-","good","-99" +"277","General Zod","Male","black","Kryptonian","Black","-99","DC Comics","-","bad","-99" +"278","Genesis","Male","blue","-","Blond","185","Marvel Comics","-","good","86" +"279","Ghost Rider","Male","red","Demon","No Hair","188","Marvel Comics","-","good","99" +"280","Ghost Rider II","-","-","-","-","-99","Marvel Comics","-","good","-99" +"281","Giant-Man","Male","-","Human","-","-99","Marvel Comics","-","good","-99" +"282","Giant-Man II","Male","-","-","-","-99","Marvel Comics","-","good","-99" +"283","Giganta","Female","green","-","Red","62.5","DC Comics","-","bad","630" +"284","Gladiator","Male","blue","Strontian","Blue","198","Marvel Comics","purple","neutral","268" +"285","Goblin Queen","Female","green","-","Red","168","Marvel Comics","-","bad","50" +"286","Godzilla","-","-","Kaiju","-","108","","grey","bad","" +"287","Gog","Male","-","-","-","-99","DC Comics","-","bad","-99" +"288","Goku","Male","-","Saiyan","-","175","Shueisha","-","good","62" +"289","Goliath","Male","-","-","-","-99","Marvel Comics","-","good","-99" +"290","Goliath","Male","-","Human","-","-99","Marvel Comics","-","good","-99" +"291","Goliath","Male","-","Human","-","-99","Marvel Comics","-","good","-99" +"292","Goliath IV","Male","brown","-","Black","183","Marvel Comics","-","good","90" +"293","Gorilla Grodd","Male","yellow","Gorilla","Black","198","DC Comics","-","bad","270" +"294","Granny Goodness","Female","blue","-","White","178","DC Comics","-","bad","115" +"295","Gravity","Male","blue","Human","Brown","178","Marvel Comics","-","good","79" +"296","Greedo","Male","purple","Rodian","-","170","George Lucas","green","bad","-99" +"297","Green Arrow","Male","green","Human","Blond","188","DC Comics","-","good","88" +"298","Green Goblin","Male","blue","Human","Auburn","180","Marvel Comics","-","bad","83" +"299","Green Goblin II","Male","blue","-","Auburn","178","Marvel Comics","-","bad","77" +"300","Green Goblin III","Male","-","-","-","183","Marvel Comics","-","good","88" +"301","Green Goblin IV","Male","green","-","Brown","178","Marvel Comics","-","good","79" +"302","Groot","Male","yellow","Flora Colossus","-","701","Marvel Comics","-","good","4" +"303","Guardian","Male","brown","Human","Black","-99","Marvel Comics","-","good","-99" +"304","Guy Gardner","Male","blue","Human-Vuldarian","Red","188","DC Comics","-","good","95" +"305","Hal Jordan","Male","brown","Human","Brown","188","DC Comics","-","good","90" +"306","Han Solo","Male","brown","Human","Brown","183","George Lucas","-","good","79" +"307","Hancock","Male","brown","Human","Black","188","Sony Pictures","-","good","-99" +"308","Harley Quinn","Female","blue","Human","Blond","170","DC Comics","-","bad","63" +"309","Harry Potter","Male","green","Human","Black","-99","J. K. Rowling","-","good","-99" +"310","Havok","Male","blue","Mutant","Blond","183","Marvel Comics","-","good","79" +"311","Hawk","Male","red","-","Brown","185","DC Comics","-","good","89" +"312","Hawkeye","Male","blue","Human","Blond","191","Marvel Comics","-","good","104" +"313","Hawkeye II","Female","blue","Human","Black","165","Marvel Comics","-","good","57" +"314","Hawkgirl","Female","green","-","Red","175","DC Comics","-","good","61" +"315","Hawkman","Male","blue","-","Brown","185","DC Comics","-","good","88" +"316","Hawkwoman","Female","green","-","Red","175","DC Comics","-","good","54" +"317","Hawkwoman II","Female","-","-","-","-99","DC Comics","-","good","-99" +"318","Hawkwoman III","Female","blue","-","Red","170","DC Comics","-","good","65" +"319","Heat Wave","Male","blue","Human","No Hair","180","DC Comics","-","bad","81" +"320","Hela","Female","green","Asgardian","Black","213","Marvel Comics","-","bad","225" +"321","Hellboy","Male","gold","Demon","Black","259","Dark Horse Comics","-","good","158" +"322","Hellcat","Female","blue","Human","Red","173","Marvel Comics","-","good","61" +"323","Hellstorm","Male","red","-","Red","185","Marvel Comics","-","good","81" +"324","Hercules","Male","blue","Demi-God","Brown","196","Marvel Comics","-","good","146" +"325","Hiro Nakamura","Male","-","-","-","-99","NBC - Heroes","-","good","-99" +"326","Hit-Girl","Female","-","Human","-","-99","Icon Comics","-","good","-99" +"327","Hobgoblin","Male","blue","-","Grey","180","Marvel Comics","-","bad","83" +"328","Hollow","Female","blue","-","Red","170","Marvel Comics","-","good","-99" +"329","Hope Summers","Female","green","-","Red","168","Marvel Comics","-","good","48" +"330","Howard the Duck","Male","brown","-","Yellow","79","Marvel Comics","-","good","18" +"331","Hulk","Male","green","Human / Radiation","Green","244","Marvel Comics","green","good","630" +"332","Human Torch","Male","blue","Human / Radiation","Blond","178","Marvel Comics","-","good","77" +"333","Huntress","Female","blue","-","Black","180","DC Comics","-","good","59" +"334","Husk","Female","blue","Mutant","Blond","170","Marvel Comics","-","good","58" +"335","Hybrid","Male","brown","Symbiote","Black","175","Marvel Comics","-","good","77" +"336","Hydro-Man","Male","brown","-","Brown","188","Marvel Comics","-","bad","119" +"337","Hyperion","Male","blue","Eternal","Red","183","Marvel Comics","-","good","207" +"338","Iceman","Male","brown","Mutant","Brown","173","Marvel Comics","-","good","65" +"339","Impulse","Male","yellow","Human","Auburn","170","DC Comics","-","good","65" +"340","Indiana Jones","Male","-","Human","-","183","George Lucas","-","good","79" +"341","Indigo","Female","-","Alien","Purple","-99","DC Comics","-","neutral","-99" +"342","Ink","Male","blue","Mutant","No Hair","180","Marvel Comics","-","good","81" +"343","Invisible Woman","Female","blue","Human / Radiation","Blond","168","Marvel Comics","-","good","54" +"344","Iron Fist","Male","blue","Human","Blond","180","Marvel Comics","-","good","79" +"345","Iron Man","Male","blue","Human","Black","198","Marvel Comics","-","good","191" +"346","Iron Monger","Male","blue","-","No Hair","-99","Marvel Comics","-","bad","2" +"347","Isis","Female","-","-","-","-99","DC Comics","-","good","-99" +"348","Jack Bauer","Male","-","-","-","-99","","-","good","-99" +"349","Jack of Hearts","Male","blue / white","Human","Brown","155","Marvel Comics","-","good","79" +"350","Jack-Jack","Male","blue","Human","Brown","71","Dark Horse Comics","-","good","14" +"351","James Bond","Male","blue","Human","Blond","183","Titan Books","-","good","-99" +"352","James T. Kirk","Male","hazel","Human","Brown","178","Star Trek","-","good","77" +"353","Jar Jar Binks","Male","yellow","Gungan","-","193","George Lucas","orange / white","good","-99" +"354","Jason Bourne","Male","-","Human","-","-99","","-","good","-99" +"355","Jean Grey","Female","green","Mutant","Red","168","Marvel Comics","-","good","52" +"356","Jean-Luc Picard","Male","-","Human","-","-99","Star Trek","-","good","-99" +"357","Jennifer Kale","Female","blue","-","Blond","168","Marvel Comics","-","good","55" +"358","Jesse Quick","Female","-","Human","-","-99","DC Comics","-","good","-99" +"359","Jessica Cruz","Female","green","Human","Brown","-99","DC Comics","-","good","-99" +"360","Jessica Jones","Female","brown","Human","Brown","170","Marvel Comics","-","good","56" +"361","Jessica Sanders","Female","-","-","-","-99","NBC - Heroes","-","good","-99" +"362","Jigsaw","Male","blue","-","Black","188","Marvel Comics","-","bad","113" +"363","Jim Powell","Male","-","-","-","-99","ABC Studios","-","good","-99" +"364","JJ Powell","Male","-","-","-","-99","ABC Studios","-","good","-99" +"365","Johann Krauss","Male","-","-","-","-99","Dark Horse Comics","-","good","-99" +"366","John Constantine","Male","blue","Human","Blond","183","DC Comics","-","good","-99" +"367","John Stewart","Male","green","Human","Black","185","DC Comics","-","good","90" +"368","John Wraith","Male","brown","-","Black","183","Marvel Comics","-","good","88" +"369","Joker","Male","green","Human","Green","196","DC Comics","white","bad","86" +"370","Jolt","Female","blue","-","Black","165","Marvel Comics","-","good","49" +"371","Jubilee","Female","red","Mutant","Black","165","Marvel Comics","-","good","52" +"372","Judge Dredd","Male","-","Human","-","188","Rebellion","-","good","-99" +"373","Juggernaut","Male","blue","Human","Red","287","Marvel Comics","-","neutral","855" +"374","Junkpile","Male","-","Mutant","-","-99","Marvel Comics","-","bad","-99" +"375","Justice","Male","hazel","Human","Brown","178","Marvel Comics","-","good","81" +"376","Jyn Erso","Female","green","Human","Brown","-99","George Lucas","-","good","-99" +"377","K-2SO","Male","white","Android","No Hair","213","George Lucas","gray","good","-99" +"378","Kang","Male","brown","-","Brown","191","Marvel Comics","-","bad","104" +"379","Karate Kid","Male","brown","Human","Brown","173","DC Comics","-","good","72" +"380","Kathryn Janeway","Female","-","Human","-","-99","Star Trek","-","good","-99" +"381","Katniss Everdeen","Female","-","Human","-","-99","","-","good","-99" +"382","Kevin 11","Male","-","Human","Black","-99","DC Comics","-","good","-99" +"383","Kick-Ass","Male","blue","Human","Blond","-99","Icon Comics","-","good","-99" +"384","Kid Flash","Male","green","Human","Red","-99","DC Comics","-","good","-99" +"385","Kid Flash II","Male","-","-","-","-99","DC Comics","-","good","-99" +"386","Killer Croc","Male","red","Metahuman","No Hair","244","DC Comics","green","bad","356" +"387","Killer Frost","Female","blue","Human","Blond","-99","DC Comics","blue","bad","-99" +"388","Kilowog","Male","red","Bolovaxian","No Hair","234","DC Comics","pink","good","324" +"389","King Kong","Male","yellow","Animal","Black","30.5","","-","good","" +"390","King Shark","Male","black","Animal","No Hair","-99","DC Comics","-","bad","-99" +"391","Kingpin","Male","blue","Human","No Hair","201","Marvel Comics","-","bad","203" +"392","Klaw","Male","red","Human","No Hair","188","Marvel Comics","red","bad","97" +"393","Kool-Aid Man","Male","black","-","No Hair","-99","","red","good","-99" +"394","Kraven II","Male","brown","Human","Black","191","Marvel Comics","-","bad","99" +"395","Kraven the Hunter","Male","brown","Human","Black","183","Marvel Comics","-","bad","106" +"396","Krypto","Male","blue","Kryptonian","White","64","DC Comics","-","good","18" +"397","Kyle Rayner","Male","green","Human","Black","180","DC Comics","-","good","79" +"398","Kylo Ren","Male","-","Human","-","-99","George Lucas","-","bad","-99" +"399","Lady Bullseye","Female","-","-","Black","-99","Marvel Comics","-","bad","-99" +"400","Lady Deathstrike","Female","brown","Cyborg","Black","175","Marvel Comics","-","bad","58" +"401","Leader","Male","green","-","No Hair","178","Marvel Comics","-","bad","63" +"402","Leech","Male","-","-","-","-99","Marvel Comics","-","good","-99" +"403","Legion","Male","green / blue","Mutant","Black","175","Marvel Comics","-","good","59" +"404","Leonardo","Male","blue","Mutant","No Hair","-99","IDW Publishing","green","good","-99" +"405","Lex Luthor","Male","green","Human","No Hair","188","DC Comics","-","bad","95" +"406","Light Lass","Female","blue","-","Red","165","DC Comics","-","good","54" +"407","Lightning Lad","Male","blue","-","Red","155","DC Comics","-","good","65" +"408","Lightning Lord","Male","blue","-","Red","191","DC Comics","-","bad","95" +"409","Living Brain","-","yellow","-","-","198","Marvel Comics","-","bad","360" +"410","Living Tribunal","-","blue","Cosmic Entity","No Hair","-99","Marvel Comics","gold","neutral","-99" +"411","Liz Sherman","Female","-","-","-","-99","Dark Horse Comics","-","good","-99" +"412","Lizard","Male","red","Human","No Hair","203","Marvel Comics","-","bad","230" +"413","Lobo","Male","red","Czarnian","Black","229","DC Comics","blue-white","neutral","288" +"414","Loki","Male","green","Asgardian","Black","193","Marvel Comics","-","bad","236" +"415","Longshot","Male","blue","Human","Blond","188","Marvel Comics","-","good","36" +"416","Luke Cage","Male","brown","Human","Black","198","Marvel Comics","-","good","191" +"417","Luke Campbell","Male","-","-","-","-99","NBC - Heroes","-","bad","-99" +"418","Luke Skywalker","Male","blue","Human","Blond","168","George Lucas","-","good","77" +"419","Luna","Female","-","Human","-","-99","Marvel Comics","-","good","-99" +"420","Lyja","Female","green","-","Green","-99","Marvel Comics","-","good","-99" +"421","Mach-IV","Male","brown","-","Brown","180","Marvel Comics","-","bad","79" +"422","Machine Man","-","red","-","Black","183","Marvel Comics","-","good","383" +"423","Magneto","Male","grey","Mutant","White","188","Marvel Comics","-","bad","86" +"424","Magog","Male","blue","-","Blond","-99","DC Comics","-","good","-99" +"425","Magus","Male","black","-","-","183","Marvel Comics","-","bad","-99" +"426","Man of Miracles","-","blue","God / Eternal","Silver","-99","Image Comics","-","-","-99" +"427","Man-Bat","Male","brown","Human","Brown","-99","DC Comics","-","neutral","-99" +"428","Man-Thing","Male","red","-","No Hair","213","Marvel Comics","green","good","225" +"429","Man-Wolf","Male","brown","-","Auburn","188","Marvel Comics","-","good","90" +"430","Mandarin","Male","blue","Human","White","188","Marvel Comics","-","bad","97" +"431","Mantis","Female","green","Human-Kree","Black","168","Marvel Comics","green","good","52" +"432","Martian Manhunter","Male","red","Martian","No Hair","201","DC Comics","green","good","135" +"433","Marvel Girl","Female","green","-","Red","170","Marvel Comics","-","good","56" +"434","Master Brood","Male","blue","-","Black","183","Team Epic TV","-","good","81" +"435","Master Chief","Male","brown","Human / Altered","Brown","213","Microsoft","-","good","-99" +"436","Match","Male","black","-","Black","-99","DC Comics","-","bad","-99" +"437","Matt Parkman","Male","-","-","-","-99","NBC - Heroes","-","good","-99" +"438","Maverick","Male","blue","-","Black","193","Marvel Comics","-","good","110" +"439","Maxima","Female","brown","-","Red","180","DC Comics","-","bad","72" +"440","Maya Herrera","Female","-","-","-","-99","NBC - Heroes","-","good","-99" +"441","Medusa","Female","green","Inhuman","Red","180","Marvel Comics","-","good","59" +"442","Meltdown","Female","blue","-","Blond","165","Marvel Comics","-","good","54" +"443","Mephisto","Male","white","-","Black","198","Marvel Comics","-","bad","140" +"444","Mera","Female","blue","Atlantean","Red","175","DC Comics","-","good","72" +"445","Metallo","Male","green","Android","Brown","196","DC Comics","-","bad","90" +"446","Metamorpho","Male","black","-","No Hair","185","DC Comics","-","good","90" +"447","Meteorite","Female","-","-","-","-99","Marvel Comics","-","good","-99" +"448","Metron","Male","blue","-","Black","185","DC Comics","-","good","86" +"449","Micah Sanders","Male","brown","-","Black","-99","NBC - Heroes","-","good","-99" +"450","Michelangelo","Male","blue","Mutant","-","-99","IDW Publishing","green","good","-99" +"451","Micro Lad","Male","grey","-","Brown","183","DC Comics","-","good","77" +"452","Mimic","Male","brown","-","Brown","188","Marvel Comics","-","good","101" +"453","Minna Murray","Female","-","-","-","-99","Wildstorm","-","good","-99" +"454","Misfit","Female","blue","-","Red","-99","DC Comics","-","good","-99" +"455","Miss Martian","Female","red","-","Red","178","DC Comics","-","good","61" +"456","Mister Fantastic","Male","brown","Human / Radiation","Brown","185","Marvel Comics","-","good","81" +"457","Mister Freeze","Male","-","Human","-","183","DC Comics","-","bad","86" +"458","Mister Knife","Male","blue","Spartoi","Brown","-99","Marvel Comics","-","bad","-99" +"459","Mister Mxyzptlk","Male","-","God / Eternal","-","-99","DC Comics","-","bad","-99" +"460","Mister Sinister","Male","red","Human / Altered","Black","196","Marvel Comics","-","bad","128" +"461","Mister Zsasz","Male","blue","Human","Blond","-99","DC Comics","-","bad","-99" +"462","Mockingbird","Female","blue","Human","Blond","175","Marvel Comics","-","good","61" +"463","MODOK","Male","white","Cyborg","Brownn","366","Marvel Comics","-","bad","338" +"464","Mogo","Male","-","Planet","-","-99","DC Comics","-","good","-99" +"465","Mohinder Suresh","Male","-","-","-","-99","NBC - Heroes","-","good","-99" +"466","Moloch","Male","-","-","-","-99","DC Comics","-","bad","-99" +"467","Molten Man","Male","gold","-","Gold","196","Marvel Comics","-","bad","248" +"468","Monarch","Male","blue","-","White","193","DC Comics","-","good","90" +"469","Monica Dawson","Female","-","-","-","-99","NBC - Heroes","-","good","-99" +"470","Moon Knight","Male","brown","Human","Brown","188","Marvel Comics","-","good","101" +"471","Moonstone","Female","blue","-","Blond","180","Marvel Comics","-","bad","59" +"472","Morlun","Male","white / red","-","Black","188","Marvel Comics","-","bad","79" +"473","Morph","Male","white","-","No Hair","178","Marvel Comics","-","good","79" +"474","Moses Magnum","Male","brown","-","Black","175","Marvel Comics","-","bad","72" +"475","Mr Immortal","Male","blue","Mutant","Blond","188","Marvel Comics","-","good","70" +"476","Mr Incredible","Male","blue","Human","Blond","201","Dark Horse Comics","-","good","158" +"477","Ms Marvel II","Female","blue","-","Red","173","Marvel Comics","-","good","61" +"478","Multiple Man","Male","blue","-","Brown","180","Marvel Comics","-","good","70" +"479","Mysterio","Male","brown","Human","No Hair","180","Marvel Comics","-","bad","79" +"480","Mystique","Female","yellow (without irises)","Mutant","Red / Orange","178","Marvel Comics","blue","bad","54" +"481","Namor","Male","-","-","-","-99","Marvel Comics","-","good","-99" +"482","Namor","Male","grey","Atlantean","Black","188","Marvel Comics","-","good","125" +"483","Namora","Female","blue","-","Blond","180","Marvel Comics","-","good","85" +"484","Namorita","Female","blue","-","Blond","168","Marvel Comics","-","good","101" +"485","Naruto Uzumaki","Male","-","Human","-","168","Shueisha","-","good","54" +"486","Nathan Petrelli","Male","brown","-","-","-99","NBC - Heroes","-","good","-99" +"487","Nebula","Female","blue","Luphomoid","No Hair","185","Marvel Comics","blue","bad","83" +"488","Negasonic Teenage Warhead","Female","black","Mutant","Black","-99","Marvel Comics","-","good","-99" +"489","Nick Fury","Male","brown","Human","Brown / White","185","Marvel Comics","-","good","99" +"490","Nightcrawler","Male","yellow","-","Indigo","175","Marvel Comics","-","good","88" +"491","Nightwing","Male","blue","Human","Black","178","DC Comics","-","good","79" +"492","Niki Sanders","Female","blue","-","Blond","-99","NBC - Heroes","-","good","-99" +"493","Nina Theroux","Female","-","Alpha","-","-99","SyFy","-","good","-99" +"494","Nite Owl II","Male","-","-","-","-99","DC Comics","-","good","-99" +"495","Northstar","Male","blue","-","Black","180","Marvel Comics","-","good","83" +"496","Nova","Male","brown","Human","Brown","185","Marvel Comics","-","good","86" +"497","Nova","Female","white","Human / Cosmic","Red","163","Marvel Comics","gold","good","59" +"498","Odin","Male","blue","God / Eternal","White","206","Marvel Comics","-","good","293" +"499","Offspring","Male","-","-","-","-99","DC Comics","-","good","-99" +"500","Omega Red","Male","red","-","Blond","211","Marvel Comics","-","bad","191" +"501","Omniscient","Male","brown","-","Black","180","Team Epic TV","-","good","65" +"502","One Punch Man","Male","-","Human","No Hair","175","Shueisha","-","good","69" +"503","One-Above-All","-","-","Cosmic Entity","-","-99","Marvel Comics","-","neutral","-99" +"504","Onslaught","Male","red","Mutant","No Hair","305","Marvel Comics","-","bad","405" +"505","Oracle","Female","blue","Human","Red","178","DC Comics","-","good","59" +"506","Osiris","Male","brown","-","Brown","-99","DC Comics","-","good","-99" +"507","Overtkill","Male","-","-","-","-99","Image Comics","-","bad","-99" +"508","Ozymandias","Male","blue","Human","Blond","-99","DC Comics","-","bad","-99" +"509","Parademon","-","-","Parademon","-","-99","DC Comics","-","bad","-99" +"510","Paul Blart","Male","-","Human","-","170","Sony Pictures","-","good","117" +"511","Penance","-","-","-","-","-99","Marvel Comics","-","good","-99" +"512","Penance I","Female","-","-","-","-99","Marvel Comics","-","good","-99" +"513","Penance II","Male","blue","-","Blond","183","Marvel Comics","-","good","89" +"514","Penguin","Male","blue","Human","Black","157","DC Comics","-","bad","79" +"515","Peter Petrelli","Male","-","-","-","-99","NBC - Heroes","-","good","-99" +"516","Phantom","Male","-","-","-","-99","DC Comics","-","good","-99" +"517","Phantom Girl","Female","blue","-","Black","168","DC Comics","-","good","54" +"518","Phoenix","Female","green","Mutant","Red","168","Marvel Comics","-","good","52" +"519","Plantman","Male","green","Mutant","Grey","183","Marvel Comics","-","bad","87" +"520","Plastic Lad","Male","-","-","-","-99","DC Comics","-","good","-99" +"521","Plastic Man","Male","blue","Human","Black","185","DC Comics","-","good","80" +"522","Plastique","Female","blue","-","Red","168","DC Comics","-","bad","55" +"523","Poison Ivy","Female","green","Human","Red","168","DC Comics","green","bad","50" +"524","Polaris","Female","green","Mutant","Green","170","Marvel Comics","-","good","52" +"525","Power Girl","Female","blue","Kryptonian","blond","180","DC Comics","-","good","81" +"526","Power Man","Male","-","Mutant","-","-99","Marvel Comics","-","good","-99" +"527","Predator","Male","-","Yautja","-","213","Dark Horse Comics","-","bad","234" +"528","Professor X","Male","blue","Mutant","No Hair","183","Marvel Comics","-","good","86" +"529","Professor Zoom","Male","blue","Human","Strawberry Blond","180","DC Comics","-","bad","81" +"530","Proto-Goblin","Male","green","-","Blond","-99","Marvel Comics","-","bad","-99" +"531","Psylocke","Female","blue","Mutant","Purple","180","Marvel Comics","-","good","70" +"532","Punisher","Male","blue","Human","Black","183","Marvel Comics","-","good","90" +"533","Purple Man","Male","purple","Human","Purple","180","Marvel Comics","purple","bad","74" +"534","Pyro","Male","blue","-","Blond","178","Marvel Comics","-","bad","68" +"535","Q","Male","-","God / Eternal","-","-99","Star Trek","-","-","-99" +"536","Quantum","Male","-","-","-","-99","HarperCollins","-","good","-99" +"537","Question","Male","blue","Human","Blond","188","DC Comics","-","good","83" +"538","Quicksilver","Male","blue","Mutant","Silver","183","Marvel Comics","-","good","79" +"539","Quill","Male","brown","-","Brown","163","Marvel Comics","-","good","56" +"540","Ra's Al Ghul","Male","green","Human","Grey","193","DC Comics","-","bad","97" +"541","Rachel Pirzad","Female","-","Alpha","-","-99","SyFy","-","good","-99" +"542","Rambo","Male","brown","Human","Black","178","","-","good","83" +"543","Raphael","Male","-","Mutant","No Hair","-99","IDW Publishing","green","good","-99" +"544","Raven","Female","indigo","Human","Black","165","DC Comics","-","neutral","50" +"545","Ray","Male","green","Human","Red","178","DC Comics","-","good","70" +"546","Razor-Fist II","Male","blue","-","No Hair","191","Marvel Comics","-","bad","117" +"547","Red Arrow","Male","green","Human","Red","180","DC Comics","-","good","83" +"548","Red Hood","Male","blue","Human","Black","183","DC Comics","-","neutral","81" +"549","Red Hulk","Male","yellow","Human / Radiation","Black","213","Marvel Comics","red","neutral","630" +"550","Red Mist","Male","-","-","-","-99","Icon Comics","-","bad","-99" +"551","Red Robin","Male","blue","Human","Black","165","DC Comics","-","good","56" +"552","Red Skull","Male","blue","-","No Hair","188","Marvel Comics","-","bad","108" +"553","Red Tornado","Male","green","Android","No Hair","185","DC Comics","-","good","146" +"554","Redeemer II","Male","-","-","-","-99","Image Comics","-","bad","-99" +"555","Redeemer III","Male","-","-","-","-99","Image Comics","-","bad","-99" +"556","Renata Soliz","Female","-","-","-","-99","HarperCollins","-","good","-99" +"557","Rey","Female","hazel","Human","Brown","297","George Lucas","-","good","-99" +"558","Rhino","Male","brown","Human / Radiation","Brown","196","Marvel Comics","-","bad","320" +"559","Rick Flag","Male","blue","-","Brown","185","DC Comics","-","bad","85" +"560","Riddler","Male","-","-","-","-99","DC Comics","-","bad","-99" +"561","Rip Hunter","Male","blue","Human","Blond","-99","DC Comics","-","good","-99" +"562","Ripcord","Female","green","-","Black","180","Marvel Comics","-","good","72" +"563","Robin","Male","blue","Human","Black","178","DC Comics","-","good","79" +"564","Robin II","Male","blue","Human","Red","183","DC Comics","-","good","101" +"565","Robin III","Male","blue","Human","Black","165","DC Comics","-","good","56" +"566","Robin V","Male","blue","Human","Black","137","DC Comics","-","good","38" +"567","Robin VI","Female","green","Human","Red","-99","DC Comics","-","neutral","-99" +"568","Rocket Raccoon","Male","brown","Animal","Brown","122","Marvel Comics","-","good","25" +"569","Rogue","Female","green","-","Brown / White","173","Marvel Comics","-","good","54" +"570","Ronin","Male","blue","Human","Blond","191","Marvel Comics","-","good","104" +"571","Rorschach","Male","blue","Human","Red","168","DC Comics","-","good","63" +"572","Sabretooth","Male","amber","Mutant","Blond","198","Marvel Comics","-","bad","171" +"573","Sage","Female","blue","-","Black","170","Marvel Comics","-","good","61" +"574","Sandman","Male","brown","Human","Brown","185","Marvel Comics","-","neutral","203" +"575","Sasquatch","Male","red","-","Orange","305","Marvel Comics","-","good","900" +"576","Sauron","Male","-","Maiar","-","279","J. R. R. Tolkien","-","bad","-99" +"577","Savage Dragon","Male","-","-","-","-99","Image Comics","-","good","-99" +"578","Scarecrow","Male","blue","Human","Brown","183","DC Comics","-","bad","63" +"579","Scarlet Spider","Male","blue","Human","Blond","178","Marvel Comics","-","good","74" +"580","Scarlet Spider II","Male","brown","Clone","Brown","193","Marvel Comics","-","good","113" +"581","Scarlet Witch","Female","blue","Mutant","Brown","170","Marvel Comics","-","bad","59" +"582","Scorpia","Female","green","-","Red","-99","Marvel Comics","-","bad","-99" +"583","Scorpion","Male","brown","Human","Brown","211","Marvel Comics","-","bad","310" +"584","Sebastian Shaw","Male","-","Mutant","-","-99","Marvel Comics","-","bad","-99" +"585","Sentry","Male","blue","Mutant","Blond","188","Marvel Comics","-","neutral","87" +"586","Shadow King","-","red","-","-","185","Marvel Comics","-","good","149" +"587","Shadow Lass","Female","black","Talokite","Black","173","DC Comics","blue","good","54" +"588","Shadowcat","Female","hazel","Mutant","Brown","168","Marvel Comics","-","good","50" +"589","Shang-Chi","Male","brown","Human","Black","178","Marvel Comics","-","good","79" +"590","Shatterstar","Male","brown","-","Red","191","Marvel Comics","-","good","88" +"591","She-Hulk","Female","green","Human","Green","201","Marvel Comics","-","good","315" +"592","She-Thing","Female","blue","Human / Radiation","No Hair","183","Marvel Comics","-","good","153" +"593","Shocker","Male","brown","Human","Brown","175","Marvel Comics","-","bad","79" +"594","Shriek","Female","yellow / blue","-","Black","173","Marvel Comics","-","good","52" +"595","Shrinking Violet","Female","-","-","-","-99","DC Comics","-","good","-99" +"596","Sif","Female","blue","Asgardian","Black","188","Marvel Comics","-","good","191" +"597","Silk","Female","brown","Human","Black","-99","Marvel Comics","-","good","-99" +"598","Silk Spectre","Female","-","-","-","-99","DC Comics","-","good","-99" +"599","Silk Spectre II","Female","-","-","-","-99","DC Comics","-","good","-99" +"600","Silver Surfer","Male","white","Alien","No Hair","193","Marvel Comics","silver","good","101" +"601","Silverclaw","Female","brown","-","Black","157","Marvel Comics","-","good","50" +"602","Simon Baz","Male","bown","Human","Black","-99","DC Comics","-","good","-99" +"603","Sinestro","Male","black","Korugaran","Black","201","DC Comics","red","neutral","92" +"604","Siren","Female","blue","Atlantean","Purple","175","DC Comics","-","bad","72" +"605","Siren II","Female","black","-","-","-99","DC Comics","-","bad","-99" +"606","Siryn","Female","blue","-","Strawberry Blond","168","Marvel Comics","-","bad","52" +"607","Skaar","Male","green","-","Black","198","Marvel Comics","-","good","180" +"608","Snake-Eyes","Male","-","Animal","-","-99","Marvel Comics","-","bad","-99" +"609","Snowbird","Female","white","-","Blond","178","Marvel Comics","-","good","49" +"610","Sobek","Male","white","-","No Hair","-99","DC Comics","-","good","-99" +"611","Solomon Grundy","Male","black","Zombie","White","279","DC Comics","-","bad","437" +"612","Songbird","Female","green","-","Red / White","165","Marvel Comics","-","good","65" +"613","Space Ghost","Male","-","Human","-","188","DC Comics","-","good","113" +"614","Spawn","Male","brown","Demon","Black","211","Image Comics","-","good","405" +"615","Spectre","Male","white","God / Eternal","No Hair","-99","DC Comics","white","good","-99" +"616","Speedball","Male","-","-","-","-99","Marvel Comics","-","good","-99" +"617","Speedy","Male","-","Human","-","-99","DC Comics","-","good","-99" +"618","Speedy","Female","green","Human","Brown","-99","DC Comics","-","good","-99" +"619","Spider-Carnage","Male","-","Symbiote","-","-99","Marvel Comics","-","bad","-99" +"620","Spider-Girl","Female","blue","Human","Brown","170","Marvel Comics","-","good","54" +"621","Spider-Gwen","Female","blue","Human","Blond","165","Marvel Comics","-","good","56" +"622","Spider-Man","Male","hazel","Human","Brown","178","Marvel Comics","-","good","74" +"623","Spider-Man","-","red","Human","Brown","178","Marvel Comics","-","good","77" +"624","Spider-Man","Male","brown","Human","Black","157","Marvel Comics","-","good","56" +"625","Spider-Woman","Female","green","Human","Black","178","Marvel Comics","-","good","59" +"626","Spider-Woman II","Female","-","-","-","-99","Marvel Comics","-","good","-99" +"627","Spider-Woman III","Female","brown","-","Brown","173","Marvel Comics","-","good","55" +"628","Spider-Woman IV","Female","red","-","White","178","Marvel Comics","-","bad","58" +"629","Spock","Male","brown","Human-Vulcan","Black","185","Star Trek","-","good","81" +"630","Spyke","Male","brown","Mutant","Blond","183","Marvel Comics","-","good","83" +"631","Stacy X","Female","-","-","-","-99","Marvel Comics","-","good","-99" +"632","Star-Lord","Male","blue","Human-Spartoi","Blond","188","Marvel Comics","-","good","79" +"633","Stardust","Male","-","-","-","-99","Marvel Comics","-","good","-99" +"634","Starfire","Female","green","Tamaranean","Auburn","193","DC Comics","orange","good","71" +"635","Stargirl","Female","blue","Human","Blond","165","DC Comics","-","good","62" +"636","Static","Male","brown","Mutant","Black","170","DC Comics","-","good","63" +"637","Steel","Male","brown","-","No Hair","201","DC Comics","-","good","131" +"638","Stephanie Powell","Female","-","-","Blond","-99","ABC Studios","-","good","-99" +"639","Steppenwolf","Male","red","New God","Black","183","DC Comics","white","bad","91" +"640","Storm","Female","blue","Mutant","White","180","Marvel Comics","-","good","57" +"641","Stormtrooper","Male","-","Human","-","183","George Lucas","-","bad","-99" +"642","Sunspot","Male","brown","Mutant","black","173","Marvel Comics","-","good","77" +"643","Superboy","Male","blue","-","Black","170","DC Comics","-","good","68" +"644","Superboy-Prime","Male","blue","Kryptonian","Black / Blue","180","DC Comics","-","bad","77" +"645","Supergirl","Female","blue","Kryptonian","Blond","165","DC Comics","-","good","54" +"646","Superman","Male","blue","Kryptonian","Black","191","DC Comics","-","good","101" +"647","Swamp Thing","Male","red","God / Eternal","No Hair","-99","DC Comics","green","bad","-99" +"648","Swarm","Male","yellow","Mutant","No Hair","196","Marvel Comics","yellow","bad","47" +"649","Sylar","Male","-","-","-","-99","NBC - Heroes","-","bad","-99" +"650","Synch","Male","brown","-","Black","180","Marvel Comics","-","good","74" +"651","T-1000","Male","-","Android","-","183","Dark Horse Comics","silver","bad","146" +"652","T-800","Male","red","Cyborg","-","-99","Dark Horse Comics","-","bad","176" +"653","T-850","Male","red","Cyborg","-","-99","Dark Horse Comics","-","bad","198" +"654","T-X","Female","-","Cyborg","-","-99","Dark Horse Comics","silver","bad","149" +"655","Taskmaster","Male","brown","Human","Brown","188","Marvel Comics","-","bad","99" +"656","Tempest","Female","brown","-","Black","163","Marvel Comics","-","good","54" +"657","Thanos","Male","red","Eternal","No Hair","201","Marvel Comics","purple","bad","443" +"658","The Cape","Male","-","-","-","-99","","-","good","-99" +"659","The Comedian","Male","brown","Human","Black","188","DC Comics","-","neutral","101" +"660","Thing","Male","blue","Human / Radiation","No Hair","183","Marvel Comics","-","good","225" +"661","Thor","Male","blue","Asgardian","Blond","198","Marvel Comics","-","good","288" +"662","Thor Girl","Female","blue","Asgardian","Blond","175","Marvel Comics","-","good","143" +"663","Thunderbird","Male","brown","-","Black","185","Marvel Comics","-","good","101" +"664","Thunderbird II","Male","-","-","-","-99","Marvel Comics","-","good","-99" +"665","Thunderbird III","Male","brown","-","Black","175","Marvel Comics","-","good","74" +"666","Thunderstrike","Male","blue","-","Blond","198","Marvel Comics","-","good","288" +"667","Thundra","Female","green","-","Red","218","Marvel Comics","-","good","158" +"668","Tiger Shark","Male","grey","Human","No Hair","185","Marvel Comics","grey","bad","203" +"669","Tigra","Female","green","-","Auburn","178","Marvel Comics","-","good","81" +"670","Tinkerer","Male","brown","-","White","163","Marvel Comics","-","bad","54" +"671","Titan","Male","-","-","-","-99","HarperCollins","-","good","-99" +"672","Toad","Male","black","Mutant","Brown","175","Marvel Comics","green","neutral","76" +"673","Toxin","Male","blue","Symbiote","Brown","188","Marvel Comics","-","good","97" +"674","Toxin","Male","black","Symbiote","Blond","191","Marvel Comics","-","good","117" +"675","Tracy Strauss","Female","-","-","-","-99","NBC - Heroes","-","good","-99" +"676","Trickster","Male","blue","Human","Blond","183","DC Comics","-","-","81" +"677","Trigon","Male","yellow","God / Eternal","Black","-99","DC Comics","red","bad","-99" +"678","Triplicate Girl","Female","purple","-","Brown","168","DC Comics","-","good","59" +"679","Triton","Male","green","Inhuman","No Hair","188","Marvel Comics","green","good","86" +"680","Two-Face","Male","-","-","-","183","DC Comics","-","bad","82" +"681","Ultragirl","Female","blue","-","Blond","168","Marvel Comics","-","good","105" +"682","Ultron","Male","red","Android","-","206","Marvel Comics","silver","bad","331" +"683","Utgard-Loki","Male","blue","Frost Giant","White","15.2","Marvel Comics","-","bad","58" +"684","Vagabond","Female","blue","-","Strawberry Blond","168","Marvel Comics","-","good","54" +"685","Valerie Hart","Female","hazel","-","Black","175","Team Epic TV","-","good","56" +"686","Valkyrie","Female","blue","-","Blond","191","Marvel Comics","-","good","214" +"687","Vanisher","Male","green","-","No Hair","165","Marvel Comics","-","bad","79" +"688","Vegeta","Male","-","Saiyan","Black","168","Shueisha","-","bad","73" +"689","Venom","Male","blue","Symbiote","Strawberry Blond","191","Marvel Comics","-","bad","117" +"690","Venom II","Male","brown","-","Black","175","Marvel Comics","-","bad","50" +"691","Venom III","Male","brown","Symbiote","Brown","229","Marvel Comics","-","bad","334" +"692","Venompool","Male","-","Symbiote","-","226","Marvel Comics","-","-","-99" +"693","Vertigo II","Female","blue","-","Silver","168","Marvel Comics","-","good","52" +"694","Vibe","Male","brown","Human","Black","178","DC Comics","-","good","71" +"695","Vindicator","Female","green","Human","Red","165","Marvel Comics","-","good","54" +"696","Vindicator","Male","-","-","-","-99","Marvel Comics","-","good","-99" +"697","Violator","Male","-","-","-","-99","Image Comics","-","bad","-99" +"698","Violet Parr","Female","violet","Human","Black","137","Dark Horse Comics","-","good","41" +"699","Vision","Male","gold","Android","No Hair","191","Marvel Comics","red","good","135" +"700","Vision II","-","red","-","No Hair","191","Marvel Comics","-","good","135" +"701","Vixen","Female","amber","Human","Black","175","DC Comics","-","good","63" +"702","Vulcan","Male","black","-","Black","-99","Marvel Comics","-","good","-99" +"703","Vulture","Male","brown","Human","No Hair","180","Marvel Comics","-","bad","79" +"704","Walrus","Male","blue","Human","Black","183","Marvel Comics","-","bad","162" +"705","War Machine","Male","brown","Human","Brown","185","Marvel Comics","-","good","95" +"706","Warbird","Female","blue","-","Blond","180","Marvel Comics","-","good","54" +"707","Warlock","Male","red","-","Blond","188","Marvel Comics","-","good","108" +"708","Warp","Male","brown","-","Black","173","DC Comics","-","bad","67" +"709","Warpath","Male","brown","Mutant","Black","218","Marvel Comics","-","good","158" +"710","Wasp","Female","blue","Human","Auburn","163","Marvel Comics","-","good","50" +"711","Watcher","Male","-","-","-","-99","Marvel Comics","-","good","-99" +"712","Weapon XI","Male","-","-","-","-99","Marvel Comics","-","bad","-99" +"713","White Canary","Female","brown","Human","Black","-99","DC Comics","-","bad","-99" +"714","White Queen","Female","blue","-","Blond","178","Marvel Comics","-","good","65" +"715","Wildfire","Male","-","-","-","-99","DC Comics","-","good","-99" +"716","Winter Soldier","Male","brown","Human","Brown","175","Marvel Comics","-","good","117" +"717","Wiz Kid","-","brown","-","Black","140","Marvel Comics","-","good","39" +"718","Wolfsbane","Female","green","-","Auburn","366","Marvel Comics","-","good","473" +"719","Wolverine","Male","blue","Mutant","Black","160","Marvel Comics","-","good","135" +"720","Wonder Girl","Female","blue","Demi-God","Blond","165","DC Comics","-","good","51" +"721","Wonder Man","Male","red","-","Black","188","Marvel Comics","-","good","171" +"722","Wonder Woman","Female","blue","Amazon","Black","183","DC Comics","-","good","74" +"723","Wondra","Female","-","-","-","-99","Marvel Comics","-","good","-99" +"724","Wyatt Wingfoot","Male","brown","-","Black","196","Marvel Comics","-","good","117" +"725","X-23","Female","green","Mutant / Clone","Black","155","Marvel Comics","-","good","50" +"726","X-Man","Male","blue","-","Brown","175","Marvel Comics","-","good","61" +"727","Yellow Claw","Male","blue","-","No Hair","188","Marvel Comics","-","bad","95" +"728","Yellowjacket","Male","blue","Human","Blond","183","Marvel Comics","-","good","83" +"729","Yellowjacket II","Female","blue","Human","Strawberry Blond","165","Marvel Comics","-","good","52" +"730","Ymir","Male","white","Frost Giant","No Hair","304.8","Marvel Comics","white","good","-99" +"731","Yoda","Male","brown","Yoda's species","White","66","George Lucas","green","good","17" +"732","Zatanna","Female","blue","Human","Black","170","DC Comics","-","good","57" +"733","Zoom","Male","red","-","Brown","185","DC Comics","-","bad","81" diff --git a/docs/modules/dia_3/material/redireccionYPipes/poesia_artificial b/docs/modules/dia_3/material/redireccionYPipes/poesia_artificial new file mode 100644 index 0000000..c0b48c5 --- /dev/null +++ b/docs/modules/dia_3/material/redireccionYPipes/poesia_artificial @@ -0,0 +1,29 @@ +Bajo el vasto cielo de Unix, un poeta teclea, +con comandos forjados en la historia, su obra desvela. +`>` redirige la salida, un flujo de esperanza, +creando archivos de log, donde la luz descansa. + +`<` trae de regreso, con un toque sutil, +la entrada de archivos, en un acto febril. +Un puente entre mundos, donde datos fluyen, +transformando el código, en lo que susurran los buhos. + +`2>` es el guardián del error, vigilante nocturno, +capturando susurros de fallos, en el infierno eterno. +Dirige a un archivo, lejos de la vista, +donde los errores reposan, en una triste pista. + +Pero el mago combina, con un gesto audaz, +`>&`, donde salida y error, un camino hallarán. +Juntos se mezclan, en un destino compartido, +donde mensajes y fallos, son unidos y asimilados. + +En este reino de bytes, donde el shell es ley, +el redireccionamiento es arte, poesía en pie. +Una danza de comandos, un espectáculo sin par, +en el escenario de Linux, bajo el cálido solar. + +Así el poeta concluye, con una reverencia y un signo, +el poder de GNU/Linux, en un mundo infinito. +Donde cada redirección, cada comando y error, +teje historias de código, en un eterno fulgor. diff --git a/docs/modules/dia_3/nav.adoc b/docs/modules/dia_3/nav.adoc new file mode 100644 index 0000000..0962fba --- /dev/null +++ b/docs/modules/dia_3/nav.adoc @@ -0,0 +1,6 @@ +* Día 3 +** xref:procesos.adoc[Procesos] +*** xref:anexos/procesos.adoc[Anexos] +** xref:pipes.adoc[Pipes] +** xref:filtrado.adoc[Filtrado] + diff --git a/docs/modules/dia_3/pages/anexos/procesos.adoc b/docs/modules/dia_3/pages/anexos/procesos.adoc new file mode 100644 index 0000000..ad0a366 --- /dev/null +++ b/docs/modules/dia_3/pages/anexos/procesos.adoc @@ -0,0 +1,39 @@ += Anexos + +:table-caption: Tabla +:figure-caption: Figura + +[#monitores_procesos] +== Monitores de procesos + +El comando `ps` muestra una una _captura_ de los procesos del sistema tal y como estaban en el momento de ejecutar el comando. Sin embargo, a menudo, esa muestra limitada de información es insuficiente para transmitir el panorama general de lo que está sucediendo en el sistema. + +Con el fin de resolver este problema, se han desarrolado diferentes programas basados en `ps` que proporcionan una vista dinámica en tiempo real de la ejecución del sistema. Además, muestran un resumen de la información del sistema, así como una lista de procesos o subprocesos que actualmente administra el kernel de Linux. + +[#top] +=== top + +---- +top - 10:18:52 up 4 days, 21:57, 1 user, load average: 0.03, 0.01, 0.00 +Tasks: 165 total, 1 running, 164 sleeping, 0 stopped, 0 zombie +%Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st +MiB Mem : 13743.2 total, 12845.6 free, 232.5 used, 665.2 buff/cache +MiB Swap: 8187.0 total, 8187.0 free, 0.0 used. 13226.2 avail Mem + + PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND + 14286 root 20 0 0 0 0 I 1.0 0.0 0:00.06 kworker/... + 1 root 20 0 240824 13816 9024 S 0.0 0.1 0:05.09 systemd + 2 root 20 0 0 0 0 S 0.0 0.0 0:00.05 kthreadd + 3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp + 4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp + 5 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 slub_flushwq + 7 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/... + 9 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq +... +---- + +[#htop] +=== htop + +image::procesos/htop.png["htop"] + diff --git a/docs/modules/dia_3/pages/filtrado.adoc b/docs/modules/dia_3/pages/filtrado.adoc new file mode 100644 index 0000000..814b2d4 --- /dev/null +++ b/docs/modules/dia_3/pages/filtrado.adoc @@ -0,0 +1,225 @@ += Comandos de filtrado + +En linux trabajamos mucho con archivos de texto, debido a esto tenemos +a nuestra disposición una variedad de comandos que ayudan a filtrar la +información que se encuentra en este tipo de archivos. + +== Obtengamos un poco de información de los archivos. +El comando *wc* cuenta líneas, palabras o caracteres dentro de un archivo. + +Opciones +[cols="1,4"] +|=== +|`-c` | Muestra el total de caracteres. +|`-w` | Muestra el total de palabras. +|`-l` | Muestra el total de líneas. +|=== + +=== Práctica +Para estas prácticas se utilizará el archivo datos.csv. + +Muestra el total de líneas, palabras y caractéres dentro del archivo de datos. + + +== ¿Cómo filtrar información? +*grep* es un comando de unix que nos permite filtrar líneas de un +archivo de texto, *grep* busca patrones de texto en cada línea y solo +muestra las líneas en las que encuentra el patrón. + +Por lo general estos patrones son cadenas de texto pero no se limitan +solo a patrones de este tipo. + +Forma de uso. +[source,shell] +---- +grep [opciones] patron [archivo] +grep [opciones] [-e patron]... [-f archivo]... [archivo] +---- + +Algunas opciones de *grep* +[cols="1,5"] +|=== +|`-i` + +`--ignore-case`| Ignora si las letras son mayúsculas o minúsculas. +|`-v` + +`--invert-`| En lugar de mostrar las líneas que coinciden los patrones, +muestra las líneas que no coinciden. +|=== + +=== Prácticas + +1. Filtra las lineas del archivo de datos que copiaste para que solo muestre las lineas que contienen la palabra "Fire". +2. Muestra el total de lineas dentro del archivo de datos que contienen la palabra water. + +.Respuesta +[%collapsible] +==== +Primero filtramos "water" en el archivo y lo pasamos al comando *wc* con la opción *-l* +[source,shell] +---- +grep water datos.csv | wc -l +---- +==== + + +== Head y Tail +*head* y *tail* son comandos que muestran solo las primeras y las últimas +líneas de un archivo respectivamente. + +Opción importante +[cols="1,5"] +|=== +|`-n` *N* | Muestra *N* líneas. +|=== + +=== Práctica +. Muestra las líneas de la 5 a la 10 del archivo de datos. +. Muestra la penúltima línea del archivo de datos. + +== Cut +*cut* es un comando que se usa en archivos que contienen diferentes +campos en cada línea, y nos permite mostrar solo los campos seleccionados, +para que *cut* funcione es necesario que los campos estén separados por +un carácter especifico. + +Opciones importantes. +[cols="1,5"] +|=== +|`-d` *D* | De esta forma indicamos que *D* delimita los campos dentro del archivo. +|`-f` *F* | De esta forma indicamos cuales son los campos que queremos mostrar. *F* es una lista de números. +|=== + +=== Práctica +Muestra el segundo y sexto campo de las primeras 10 líneas del archivo de datos. + +.Pista +[%collapsible] +==== +Primero averigua qué carácter se usa para separar los campos en el archivo mencionado. +==== + +.Respuesta +[%collapsible] +==== +De la siguiente manera podemos ve que se usan comas como separador de campos: +[source,shell] +---- +head -n 1 datos.csv +---- +De modo que el ejercicio se resuelve de la siguiente manera. +[source,shell] +---- +cut -d "," -f 2,6 datos.csv | head +---- +==== + +== Sort +*sort* ordena las líneas de un archivo, para esto podemos indicar los +campos que se usaran para el ordenamiento y la forma en la que se ordenarán. + +Opciones de *sort*. +[cols="1,4"] +|=== +|`-k` *K*| *K* es la lista de campos usados en el ordenamiento. +|`-t` *T*| *T* es el separador de campos. +|`-n` | Ordena las líneas en orden numérico. +|`-r` | Usa el orden inverso. +|=== + +=== Práctica +* Considerando el nombre de los pokémon, ordena los datos en orden alfábetico. + +.Respuesta +[%collapsible] +==== +[source,shell] +---- +sort -t ',' -k 2 datos.csv +---- +==== + +* Muestra la segunda columna por orden alfabético. + +.Respuesta +[%collapsible] +==== +[source,shell] +---- +tail -n 800 datos.csv | cut -d ',' -f 2 | sort +---- +==== + + +== Ejemplos prácticos + +Utilizando el archivo *heroes_information.csv*, obtener lo siguiente: + +1. ¿Cuál es el número de personajes que aparecen en el archivo? +2. ¿Cuántas mujeres hay(Female)? ¿Y cuántos hombres(Male)? +3. Obtener únicamente las columnas con el nombre de los personajes (name) y su raza (race). +4. ¿Qué tipo de personajes hay más? ¿Buenos (good), malos (bad) o neutrales (neutral)? +5. Mostrar todas las editoriales de los personajes (sin repetirlas). +6. Mostrar qué personajes que no tiene la información de su editorial (mostrar columnas de personaje y editorial). +7. Mostrar los personajes que sean mujeres y a la vez buenos (mostrar las columnas de nombre, genero y Alignment). +8. Mostrar los personajes que sean mujeres y a la vez de la editorial Marvel Comics (mostrar las columnas de nombre, genero y editorial). + +.Respuestas +[%collapsible] +==== +* Número de personajes: 734 +[source,shell] +---- +wc -l heroes_information.csv +---- + +* Número de mujeres +[source,shell] +---- +grep -c Female heroes_information.csv +---- +[source,shell] +---- +grep Female heroes_information.csv | wc -l +---- + +* Número de hombres +[source,shell] +---- +grep -c Male heroes_information.csv +---- +[source,shell] +---- +grep Male heroes_information.csv | wc -l +---- + +* Nombres y raza de personajes +[source,shell] +---- +tail -n 734 heroes_information.csv | cut -d , -f 2,5 +---- + +* Editoriales de los personajes. +[source,shell] +---- +tail -n 734 heroes_information.csv | cut -d , -f 8 | sort -u +---- + +* Personaje sin editorial. +[source,shell] +---- +tail -n 734 heroes_information.csv | cut -d , -f 2,8 | grep '""' +---- + +* Cantidad de mujeres buenas +[source,shell] +---- +cut -d , -f 2,3,10 heroes_information.csv | grep Female | grep good +---- + +*Cantidad de mujeres de Marvel Comics +[source,shell] +---- +cut -d , -f 2,3,8 heroes_information.csv | grep Female | grep "Marvel Comics" +---- + +==== \ No newline at end of file diff --git a/docs/modules/dia_3/pages/pipes.adoc b/docs/modules/dia_3/pages/pipes.adoc new file mode 100644 index 0000000..a49344a --- /dev/null +++ b/docs/modules/dia_3/pages/pipes.adoc @@ -0,0 +1,110 @@ += Redirección y Pipes + +== Redirección + +=== Comenzamos con una historia + +Imaginemos lo siguiente: + +En una cierta escuela, un profesor esté revisando trabajos y, dependiendo de si el trabajo está bien hecho, los niños pueden ser mandados a: + +- Un campo de juegos si tienen todo bien. +- Un salón si hay un error en su trabajo. + +Cuando se haga el trabajo bien lo representaremos con ‘>’ o con ‘>>’; cuando se haga mal lo representaremos con ‘2>’ o con ‘2>>’ + +El profesor puede mandar a un niño a estudiar/jugar con sus compañeros al lugar correspondiente o puede mandarlo a avisar a los demás que ya se pueden ir, pero este niño debe quedarse. + +Supongamos que Luis está bien, entonces cuando llega al campo de juegues pueden pasar tres cosas: + +1. No es el primero en llegar y les dice a los demás compañeros que pueden irse pero él se queda ( > ). +2. No es el primero en llegar y se queda con los demás compañeros ( >> ). +3. Es el primero en llegar ( > / >> ). + +Ahora tenemos que Diego se equivocó, las alternativas son las mismas que antes, solo que irá a un salón en vez del campo de juegos. + +1. No es el primero en llegar y les dice a los demás compañeros que pueden irse pero él se queda ( 2> ). +2. No es el primero en llegar y se queda con los demás compañeros ( 2>> ). +3. Es el primero en llegar ( 2> / 2>> ). + +=== Ahora seamos más técnicos + +Cada proceso tiene al menos tres canales de comunicación. + +* Entrada estándar (STDIN) +* Salida estándar (STDOUT) +* Error estándar (STDERR) + +Muchos comandos de UNIX aceptan su entrada desde STDIN y escriben su +salida a STDOUT. Esto permite enlazar comandos como si se tratara de bloques de construcción. + +El shell interpreta los símbolos <, > y >> como instrucciones de redirigir +las entradas desde algún archivo, al igual que las salidas. + +Comportamiento de los operadores <, >, >> y 2> +[cols="1,3"] +|=== +|`<`| Usa el contenido de un archivo como STDIN +|`>`| Redirige STDOUT a un archivo, sustituye el contenido previo del archivo +|`>>`| Redirige STDOUT a un archivo, escribe al final del contenido previo del archivo +|`2>`| Redirige STDERR a un archivo +|`2>>`| Redirige STDERR a un archivo, escribe al final del contenido previo del archivo +|=== + +Uso de los operadores <, >, >>, 2> y 2>>. +[source,shell] +comando < archivo-entrada +comando > archivo-salida +comando >> archivo-salida +comando 2> archivo-error +comando 2>> archivo-error + +image::redireccionamiento/redir.png[align=center] + +=== Práctica + +Primero, obtengamos el material. *En tu home*, copia el directorio *dia3* utilizando el siguiente comando: + +[source,shell] +cp -r /tmp/material-curso/dia3/redireccionYPipes . + +Ahora realiza las siguientes actividades. + +. Copia el contenido del archivo *redireccionYPipes/poesia_artificial* al archivo */home/poesia_redireccionada* usando el comando *cat*. + +. Usa el comando *ls* con un directorio que no exista, y guarda el mensaje de error en un archivo. + +. Agrega la linea "Esto es una copia de redireccionYPipes/poesia_artificial" al final del archivo *~/poesia_redireccionada* usando el comando *echo*. + +== Pipes + +=== Volvemos a comenzar con una historia + +Un grupo de amigos se enfrenta a la siguiente tarea: necesitan realizar una serie de operaciones. Son operaciones sencillas: suma, resta, multiplicación, división; sin embargo, el número de operaciones que hay que realizar es muy grande, lo que hace de esta tarea algo tedioso y aburrido. Como no quieren dejar que solo uno de ellos sufra ni tener que hacerlo todos, se les ocurre lo siguiente: + +Cada uno de ellos realizará una operación y entonces les dirá al que sigue: “Yo obtuve *este* resultado, ahora te toca a ti hacer *esta* operación”. + +Así se formará una cadena de operaciones. Se irá pasando información de uno a otro y se darán instrucciones acerca de qué hacer con esa información. + +El grupo de amigos hará esto hasta llegar a la última de las operaciones, momento en que obtendrán el resultado. + +De esta manera habrán logrado terminar una tarea que era muy aburrida, de una manera muy sencilla. + +Esto es lo que hace un pipe. Después de que un comando ejecuta una acción, se obtiene información y esta información es pasada al siguiente comando para que éste la utilice para trabajar. + +=== Volvamos a ser un poco más técnicos + +Para enviar la salida estándar de un comando como entrada estándar de otro, +usamos el símbolo pipe (|), de esta forma se pueden enlazar tantos comandos como se desee. + +Uso del operador | +[source,shell] +comando1 | comando2 | comando3 + +La salida del comando1 es usada como entrada para el comando2 y +la salida del comando 2 es usada comoentrada para el comando3. + +Ejemplo. +[source,shell] +cat /proc/cpuinfo +cat /proc/cpuinfo | head diff --git a/docs/modules/dia_3/pages/procesos.adoc b/docs/modules/dia_3/pages/procesos.adoc new file mode 100644 index 0000000..bd16734 --- /dev/null +++ b/docs/modules/dia_3/pages/procesos.adoc @@ -0,0 +1,138 @@ += Procesos + +:table-caption: Tabla +:figure-caption: Figura + +Un proceso representa un programa en ejecución. Es la abstracción a través de la cual se pueden administrar y monitorear la memoria, el tiempo de CPU y los recursos de entrada/salida. + + +[#elementos] +== Elementos + +El kernel registra varias piezas de información sobre cada proceso. Estos son algunas de los más importantes: + +* El mapa del espacio de direcciones del proceso +* El estado actual del proceso (dormido, detenido, en ejecución, etc) +* La prioridad de ejecución del proceso +* Información sobre los recursos que ha utilizado el proceso (CPU, memoria, etc.) +* Información sobre los archivos y puertos de red que ha abierto el proceso +* El dueño del proceso + +[#pid] +=== PID: ID de proceso + +El kernel asigna un identificador único a cada proceso. La mayoría de los comandos que manipulan procesos requieren que se especifique un PID para identificar el objetivo de la operación. Los PID se asignan en orden a medida que se crean los procesos. + +[#ppid] +=== PPID: ID del proceso padre + +En Linux cuando un proceso crea un nuevo proceso, al proceso recién creado se le llama hijo y al proceso que lo lanzó, padre. El PPID es el PID del proceso padre. + +[#uid] +=== UID: ID de propietario + +El UID de un proceso es el ID de usuario que lo creó. En general, solo el creador (propietario) y el superusuario pueden manipular el proceso. + + +[#mostrar_procesos] +== ¿Cómo muestro los procesos del sistema? + +El comando `ps` muestra una _captura_ de los procesos actuales en el sistema: +---- +ps [OPCIONES] +---- + +[#ejemplo_1] +=== Ejemplo 1 + +Para mostrar todos los procesos del sistema, ejecute el comando: +---- +$ ps aux +USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND +root 1 0.0 0.0 240824 13816 ? Ss jun23 0:05 /usr/lib/systemd/... +root 2 0.0 0.0 0 0 ? S jun23 0:00 [kthreadd] +root 3 0.0 0.0 0 0 ? I< jun23 0:00 [rcu_gp] +root 4 0.0 0.0 0 0 ? I< jun23 0:00 [rcu_par_gp] +root 5 0.0 0.0 0 0 ? I< jun23 0:00 [slub_flushwq] +root 7 0.0 0.0 0 0 ? I< jun23 0:00 [kworker/...] +root 9 0.0 0.0 0 0 ? I< jun23 0:00 [mm_percpu_wq] +root 10 0.0 0.0 0 0 ? S jun23 0:00 [rcu_tasks_rude_] +... +---- + +[#actividades_1] +=== Actividades + +. ¿Cómo muestro todos los proceso de un usuario en particular? + +.Respuestas +[%collapsible] +==== +. `ps uU USUARIO` +==== + +[#señales] +== Señales + +Las señales son solicitudes de interrupción a nivel de proceso. Se definen alrededor de treinta tipos diferentes, y se utilizan de diversas maneras: + +* Se pueden enviar entre procesos como medio de comunicación. +* Pueden ser enviados por medio de la terminal al presionar ciertas combinaciones de teclas. +* Pueden ser enviada por el administrador del sistema. +* Pueden ser enviados por el núcleo cuando un proceso comete una infracción como la división por cero. +* Pueden ser enviadas por el kernel para notificar a un proceso sobre una condición de interés, por ejemplo, cuando un proceso hijo termina. + +Cuando se recibe una señal, puede suceder una de dos cosas. Si el proceso receptor definió un comportamiento para la señal, entonces es manejada por el proceso. De lo contrario, el kernel realiza alguna acción predeterminada en nombre del proceso. El comportamiento por defecto cambia dependiendo del tipo de señal. + +[#int] +=== Señal INT +La señal INT es enviada por medio de la terminal cuando el usuario presiona la combinación de teclas Ctrl-C. Es una solicitud para terminar la ejecución actual. + +[#term] +=== Señal TERM +La señal TERM es una solicitud para terminar la ejecución completamente. Se espera que el proceso de receptor limpie su estado y salga. + +[#kill] +=== Señal KILL +La señal KILL finaliza la ejecución de un proceso. Un proceso no puede ignorar, bloquear o manejar esta señal. El kernel es el encargado terminar el proceso. + + +[#enviar_señal] +== ¿Cómo envío una señal? + +El comando `kill` puede enviar cualquier señal a un proceso, aunque por defecto envía una señal `TERM`: +---- +kill PID +kill -s SEÑAL PID +---- + +Este comando puede ser utilizado por cualquier usuario en sus propios procesos o por el superusuario en cualquier proceso. + +[#actividades] +=== Actividades + +. Ejecute el siguiente comando: ++ +---- +$ watch uptime & +---- ++ +para crear un nuevo proceso. ++ +* ¿Cómo puedo puedo verificar que el proceso está en ejecución? +* ¿Cómo finalizo la ejecución del proceso? + +.Respuestas +[%collapsible] +==== +. - ++ +* `ps uU USUARIO` ++ +* `ps u --pid PID` +. - ++ +* `kill PID` ++ +* `kill -s KILL PID` +==== diff --git a/docs/modules/dia_4/images/historia/KTyDR.jpg b/docs/modules/dia_4/images/historia/KTyDR.jpg new file mode 100644 index 0000000..5f2726d Binary files /dev/null and b/docs/modules/dia_4/images/historia/KTyDR.jpg differ diff --git a/docs/modules/dia_4/images/historia/kent.webp b/docs/modules/dia_4/images/historia/kent.webp new file mode 100644 index 0000000..aec93cb Binary files /dev/null and b/docs/modules/dia_4/images/historia/kent.webp differ diff --git a/docs/modules/dia_4/images/historia/linus.jpg b/docs/modules/dia_4/images/historia/linus.jpg new file mode 100644 index 0000000..73646a3 Binary files /dev/null and b/docs/modules/dia_4/images/historia/linus.jpg differ diff --git a/docs/modules/dia_4/images/historia/stallman.jpeg b/docs/modules/dia_4/images/historia/stallman.jpeg new file mode 100644 index 0000000..9be730d Binary files /dev/null and b/docs/modules/dia_4/images/historia/stallman.jpeg differ diff --git a/docs/modules/dia_4/images/historia/stallman_uam.jpeg b/docs/modules/dia_4/images/historia/stallman_uam.jpeg new file mode 100644 index 0000000..41593a8 Binary files /dev/null and b/docs/modules/dia_4/images/historia/stallman_uam.jpeg differ diff --git a/docs/modules/dia_4/images/historia/unix.jpg b/docs/modules/dia_4/images/historia/unix.jpg new file mode 100644 index 0000000..e52c89e Binary files /dev/null and b/docs/modules/dia_4/images/historia/unix.jpg differ diff --git a/docs/modules/dia_4/nav.adoc b/docs/modules/dia_4/nav.adoc new file mode 100644 index 0000000..2b44b33 --- /dev/null +++ b/docs/modules/dia_4/nav.adoc @@ -0,0 +1,3 @@ +* Día 4 +** xref:scripts.adoc[Scripts] +** xref:anexos.adoc[Anexos] diff --git a/docs/modules/dia_4/pages/anexos.adoc b/docs/modules/dia_4/pages/anexos.adoc new file mode 100644 index 0000000..24d91f9 --- /dev/null +++ b/docs/modules/dia_4/pages/anexos.adoc @@ -0,0 +1,172 @@ += Anexos + +:table-caption: Tabla +:figure-caption: Figura + +[#bash] +== Bash + +Un shell es un programa diseñado para leer comandos escritos por un usuario y ejecutar +los programas adecuados para responder a dichos comandos. También puede ser llamado +interprete de comandos. + +Los shells no solo fueron diseñados para un uso interactivo. + +Si puedes escribir comandos en un shell, entonces puedes escribir scripts. +Un script de shell es una serie de comandos escritos en un archivo. El shell +lee los comandos desde el archivo tal como si fueran escritos dentro de la terminal + +Ejemplos de shells son: + +* sh +* bash +* zsh +* fish + +[#comandos_extra] +== Comandos extra + +=== sleep + +El comando *sleep* hace una pausa con el número de segundos que se le indican. + +---- +$ sleep 3 +---- +En este caso la terminal hará una pausa y posteriormente nos regresará el control. + +=== curl + +*curl* es una herramienta de línea de comandos que permite transferir datos hacia o desde un servidor sin interacción del usuario. + +[#condicionales] +== Condicionales + +Los condicionales se utilizan en los lenguajes de programación para realizar cualquier tarea de toma de decisiones. + +.Estructura general de un condicional en Bash +---- +if [ COMANDO_1 ] +then + # Código +elif [ COMANDO_2 ] +then + # Código +else + # Código +fi +---- + +Las palabras _if_, _then_, _elif_, _else_ y _fi_ son palabras reservadas o palabras clave (keywords), es decir, que tiene un significado especial para el shell. + +.Operadores de comparación numérica +[cols="^.^1,.^1", options="autowidth, header"] +|=== +|Operador +|Descripción + +|-gt +|Es mayor que + +|-lt +|Es menor que + +|-ge +|Es mayor que o igual a + +|-le +|Es menor que o igual a + +|-eq +|Es igual a + +|-ne +|No es igual a +|=== + +.Ejemplo de condicional +---- +#!/bin/bash + +mayoria_edad=18 +tercera_edad=60 +edad=15 + +if [ $edad -ge $tercera_edad ] +then + echo "Eres un adulto mayor" +elif [ $edad -ge $mayoria_edad ] +then + echo "Eres mayor de edad" +else + echo "Eres menor de edad" +fi +---- + +[#ciclos] +== Ciclos + +Un ciclo es una secuencia de comandos que se ejecutan repetidas veces, hasta alcanzar una condición determinada. + +Hay dos tipos de bucles en Bash: + +* for +* while + + +[#for] +=== for + +.Estructura básica del ciclo for en Bash +---- +for VARIABLE in ELEMENTOS +do + # Código +done +---- + +Las palabras _for_, _in_, _do_ y _done_ son palabras reservadas. + +.Imprime los números del 1 al 5 utilizando el ciclo for +---- +#!/bin/bash + +for numero in 1 2 3 4 5 +do + echo $numero +done +---- + + +[#while] +=== while + +.Estructura básica del ciclo while en Bash +---- +while COMANDO +do + # Código +done +---- + +Las palabras _while_, _do_ y _done_ son palabras reservadas. + +.Imprime los números del 1 al 5 utilizando el ciclo while +---- +#!/bin/bash + +x=1 + +while [ $x -le 5 ] +do + echo $x + x=$(( $x + 1 )) +done +---- + +[#actividades] +== Actividades + +. Utilizando el ciclo `for`, escribe un script que imprima los número pares entre el 1 y el 50. +. Utilizando el ciclo `while`, escribe un script que imprima los número impares entre el 1 y el 50. +. Escribe un script que determine el mayor de tres números. \ No newline at end of file diff --git a/docs/modules/dia_4/pages/historia.adoc b/docs/modules/dia_4/pages/historia.adoc new file mode 100644 index 0000000..102a7ff --- /dev/null +++ b/docs/modules/dia_4/pages/historia.adoc @@ -0,0 +1,179 @@ += Historia +:table-caption: Tabla +:figure-caption: Figura + +== Historia del sistema operativo GNU/LINUX + +=== UNIX +==== La cuna de UNIX: Los laboratorios Bell +*Importante* compañía de investigación y desarrollo científico,fundada en +enero de 1925 + +Para enfatizar aún más la palabra importante: + +link:https://en.wikipedia.org/wiki/Bell_Labs#Nobel_Prize,_Turing_Award,_IEEE_Medal_of_Honor[Algunos premios por trabajo realizada en los laboratorios Bell o por gente que trabajó en ellos] + +==== Ken thompson y Dennis Ritchie + +image::historia/KTyDR.jpg[align=center] + +[cols="2,2a"] +|=== +| | Conocido, entre muchas otras cosas, por + +| Ken Thompson +| + +* Crear el lenguaje de programación B + +* Su trabajo en el desarrollo de Go +* La computadora de ajedrez Belle +* *Co-crear el sistema operativo UNIX* + +| Dennis Ritchie +| + +* Crear el lenguaje de programación C +* Co-escribir el libro _El lenguaje de programación C_ +* *Co-crear el sistema operativo UNIX* + +|=== + +video::XvDZLjaCJuw[youtube,start=198,end=314,lang=es,align=center] + +.Linea del tiempo de UNIX +[cols="1,4a"] +|=== +|Año | Evento + +| 1964 +|Desarrollo de Multics +| 1969 +| Primera implementación de UNIX +Para link:https://www.youtube.com/watch?v=pvaPaWyiuLA&t=1s[PDP-7] +| 1970 +| Unix fue implementado PDP-11 *En ensamblador* +| 1971 +| Primera edición oficial de UNIX +| 1972 +| Se escribe Unix *en C* +| 1975 +| Sexta edición de UNIX + +* La primera edición que se uso ampliamente fuera de AT&T +* licenciada para universidades a cambio de una cuota nominal por distribución. +* contenía: +** Documentación +** *Código fuente del Kernel* +| 1982 +| Ruptura del sistema Bell +|=== + +[%collapsible] +==== +image::historia/unix.jpg[align=center] +==== + +=== GNU + +GNU:: GNU is not UNIX +[%collapsible] +==== +image::https://upload.wikimedia.org/wikipedia/commons/thumb/2/22/Heckert_GNU_white.svg/1024px-Heckert_GNU_white.svg.png[align=center] +==== + +==== Richard Stallman +image::historia/stallman.jpeg[align=center] + +Conocido entre muchas otras cosas por: + +* Fundar el movimiento del software libre +* Fundar La https://www.fsf.org[Free Software fundation] +* Lanzar el proyecto GNU +* Desarrollar GNU compiller collection +* Escribir la GNU General Public License (GPL) + +===== Las 4 libertades esenciales +* Libertad 0: la libertad de usar el programa, con cualquier propósito (uso) +* Libertad 1: la libertad de estudiar cómo funciona el programa y modificarlo, adaptándolo a las propias necesidades (estudio). +* Libertad 2: la libertad de distribuir copias del programa, con lo cual se puede ayudar a otros usuarios (distribución). +* Libertad 3: la libertad de mejorar el programa y hacer públicas esas mejoras a los demás, de modo que toda la comunidad se beneficie (mejora). + +video::8SdPLG-_wtA[youtube,start=58,end=367,lang=es,align=center] + +Entre los programas más conocidos producidos por GNU están + +[%collapsible] +==== +image::historia/stallman_uam.jpeg[align=center] +==== + +.Linea del tiempo de GNU +[cols="2,2a"] +|=== +|Año | Evento +| 1984 +| +* Richard Stallman empieza a trabajar en un sistema UNIX libre +* Inicia el proyecto link:https://www.gnu.org/home.es.html[GNU] +| 1985 +| +* Stallman funda la link:https://www.fsf.org/[FSF] +* Desarrollo de la link:https://es.wikipedia.org/wiki/GNU_General_Public_License[licencia GPL] +| 1990 +| * El proyecto GNU había producido un sistema operativo casi completo +|=== + +=== Linux +==== Linus Torvalds + +image::historia/linus.jpg[align=center] + +Conocido entre muchas otras cosas por: + +* *Ser el creador y desarrollador líder del Kernel Linux* +* Ser el creador de git + +[quote,Linus Torbalds, 5 de octubre de 1991] +---- +¿Añoras los buenos días de minix 1.1, cuando los hombres eran hombres y escribían sus propios drivers? +¿no tienes ningún proyecto y te mueres por hincarle el diente a un sistema operativo que puedas intentar modificar para tus necesidades? +¿te empieza a parecer frustrante que todo funcione bien en minix? +¿no más noches en vela para hacer que un ingenioso programa funcione? +Entonces este post podría ser para ti :-) ... +---- +link:https://www.cs.cmu.edu/~awb/linux.history.html[correo] + +.Linea del tiempo de Linux +[cols="2,2a"] +|=== +|Año | Evento +|1991 +|Linus torvalds solicita ayuda de otros programadores anunciando su kernel 0.02 en comp.os.minix +|1992 +|la versión link:https://mirrors.edge.kernel.org/pub/linux/kernel/Historic/old-versions/RELNOTES-0.12[0.12] empieza a utilizar la licencia gpl + +|=== + +- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/about/[tiene un desarrollo muy activo] + +=== GNU/LINUX + +https://distrowatch.com/[Distribuciones] + +.Linea del tiempo de GNU/LINUX +[cols="2,2a"] +|=== +|Año | Evento +| 1992 +| primera distribución de linux +| 1993 +| surge slackware, Suse, Redhat, Debian link:https://upload.wikimedia.org/wikipedia/commons/1/1b/Linux_Distribution_Timeline.svg[Distro_map] +| 2004 +| aparece ubuntu +| 2022 +| CentOS 8 es descontinuado +|=== + +* https://www.top500.org/statistics/details/osfam/1[Top500] + diff --git a/docs/modules/dia_4/pages/scripts.adoc b/docs/modules/dia_4/pages/scripts.adoc new file mode 100644 index 0000000..2df0261 --- /dev/null +++ b/docs/modules/dia_4/pages/scripts.adoc @@ -0,0 +1,249 @@ += Scripts + +:table-caption: Tabla +:figure-caption: Figura + +Un script de shell es una serie de comandos escritos en un archivo; el shell lee los comandos del archivo tal como lo haría si los escribieramos en una terminal. + +Los scripts de Bash comienzan con la siguiente línea, la cual indica que el programa `/bin/bash` debe ejecutar los comandos en el archivo de script. + +---- +#!/bin/bash +---- + +.Estructura de un script de Bash +---- +#!/bin/bash + +# Soy un comentario +# Soy otro comentario + +Instruccion 1 +Instruccion 2 +... +Instrucción n +---- + +[NOTE, caption=NOTA] +==== +Se conoce como shebang al conjunto de caracteres #!. Con excepción del shebang en la parte superior de un script, un # al comienzo de una línea indica un comentario; es decir, el shell ignora cualquier cosa en la línea después de #. +==== + +Para ejecutar un script utilizamos el comando `bash` seguido del nombre del script. Por ejemplo: + +---- +bash mi_script.sh +---- + +o de forma alternativa: + +---- +./mi_script.sh +---- + +Sin embargo, para esta última forma hay que asegurarse de que el archivo tenga permisos de ejecución. + +//Se escribe un script que imprima la frase "Hola, Mundo!". + +[#variables] +== Variables + +En matemáticas, se llama variable a cualquier símbolo que representa a cualquier valor de los comprendidos en un conjunto. + +---- +$ x = 3.141592 +$ z = 1.618034 +---- + +En programación, una variable es un contenedor con nombre para un conjunto particular de bits o tipo de datos. + + +[#asignacion] +=== Asignación + +Para asignar un valor a una variable, se debe seguir el formato: + +---- +nombre_variable=valor +---- + +Una variable puede contener un número, un caracter o una cadena de caracteres. Por ejemplo: + +---- +nombre=juan +edad=23 +tipo_sangre=A +estatura=1.75 +---- + +Otra manera de de asignar un valor a una variable es mediante el comando *read*. A continuación se muestra utilización del comando mediante un ejemplo: + +---- +$ read apellido +$ Belmont +---- + +Esto sirve para guardar en la variable _apellido_ el contenido _Belmont_. Al pulsar la tecla Enter después del comando *read*, la terminal quedará a la espera de que introduzcamos el valor que almacenará la variable. + +Cuando guardamos el resultado de un comando en una variable, el comando va entre paréntesis y precedido de un *$*. Ejemplo: + +---- +$ ruta=$(pwd) +$ echo $ruta +/home/usuario +---- + +[NOTE, caption=NOTA] +==== +En Bash no es necesario declarar una variable, solo asignarle un valor. +==== + + + +[#valor] +=== Valor + +Para obtener el valor de una variable, utilizamos el símbolo *"$"* seguido del nombre de la variable. Por ejemplo, para imprimir el valor de una variable se utilizaría el siguiente formato: + +---- +echo $mi_variable +---- + +Un caso particular sería: + +---- +echo $edad +23 +---- + +[#variables_especiales] +== Variables especiales + +Son variables que el shell establece internamente y que están disponibles para el usuario. + +.Variables especiales del shell +[cols="^.^1,.^1", options="autowidth, header"] +|=== +|Variable +|Descripción + +|`$0` +|Nombre del script. + +|`$n` +|Argumento `n` pasado al script. + +|`$#` +|Número de argumentos pasados al script. + +|`$@` +|Todos los argumentos pasados al script. +|`$$` + +|ID de proceso del shell actual. + +|`$?` +|Código de salida del último comando que el shell ejecutó. +|=== + + +[#codigos_salida] +=== Códigos de salida + +Cuando un programa finaliza, éste deja un _código de salida_, un valor numérico también conocido como _código de error_ o _valor de salida_. Cuando el código de salida es cero (0), generalmente significa que el programa se ejecutó sin problemas. Sin embargo, si el programa tiene un error, suele salir con un número distinto de 0. + + +[#operadores_logicos] +== Operadores lógicos + +[#and] +=== *AND* + +El operador lógico `&&` (and) funciona de la siguiente forma: + +---- +COMANDO_1 && COMANDO_2 +---- + +El shell ejecuta el `COMANDO_1`: + +. Si su código de salida es 0, entonces el shell ejecuta el `COMANDO_2`. +. En caso contrario, el shell no ejecuta el `COMANDO_2`. + + +[#or] +=== *OR* + +El operador lógico `||` (or) funciona de la siguiente forma: + +---- +COMANDO_1 || COMANDO_2 +---- + +El shell ejecuta el `COMANDO_1`: + +. Si su código de salida es 0, el shell no ejecuta el `COMANDO_2`. +. En caso contrario, el shell ejecuta el `COMANDO_2`. + +== Ejercicios. + +Para los ejercicios primero copiamos el directorio _/tmp/material-curso/dia4_ a nuestro home: + +---- +$ cd +$ cp -r /tmp/material-curso/dia4 . +---- + +* Realizar un script que haga lo siguiente: + + .. Busque archivos con nombre _conejo_ dentro del directorio _dia4/scripts_ y muestrelos utilizando el comando *find*. + +.Pista +[%collapsible] +==== +echo Se encontraron los siguientes conejos: + +find . -name conejo +==== + + .. Guarde los archivos (la ruta que regresa el comando) en un archivo temporal _conejos.tmp_ + +.Pista +[%collapsible] +==== +find . -name conejo > conejos.tmp +==== + + .. Guarde la primer entrada en una variable llamada _archivo_. + +.Pista +[%collapsible] +==== +archivo=$(head -n 1 conejos.tmp) +==== + + .. Borre el archivo que coincide con la primer entrada (y con el valor de la variable _archivo_). + +.Pista +[%collapsible] +==== +rm $archivo +==== + + .. Avise que se eliminó la primer coincidencia. + + .. Utilice *find* para mostrar que el archivo se ha ido. + + .. Borre el archivo temporal _conejos.tmp_ + +.Pista +[%collapsible] +==== +rm conejos.tmp +==== + +* Hacer un pequeño script que haga lo que sigue: + + .. Intentar usar el comando type sobre curl (curl es el argumento del comando type) *y*, si se pudo lograr, que la terminal espere 3 segundos (usamos el comando *sleep 3* ). + + .. Mostrar el contenido del archivo _about_periquito.txt_ *y*, si se logra, que la terminal espere 7 segundos *y* si se logra, ejecutamos el comando *curl parrot.live* diff --git a/docs/modules/nivel_0/images/anexos/putty/configuracion.png b/docs/modules/nivel_0/images/anexos/putty/configuracion.png deleted file mode 100755 index 32ab238..0000000 Binary files a/docs/modules/nivel_0/images/anexos/putty/configuracion.png and /dev/null differ diff --git a/docs/modules/nivel_0/images/anexos/putty/login.png b/docs/modules/nivel_0/images/anexos/putty/login.png deleted file mode 100755 index a12c6bc..0000000 Binary files a/docs/modules/nivel_0/images/anexos/putty/login.png and /dev/null differ diff --git a/docs/modules/nivel_0/images/anexos/putty/pantalla_inicio.png b/docs/modules/nivel_0/images/anexos/putty/pantalla_inicio.png deleted file mode 100755 index 7ff2072..0000000 Binary files a/docs/modules/nivel_0/images/anexos/putty/pantalla_inicio.png and /dev/null differ diff --git a/docs/modules/nivel_0/images/anexos/putty/security_alert.png b/docs/modules/nivel_0/images/anexos/putty/security_alert.png deleted file mode 100755 index 364cd47..0000000 Binary files a/docs/modules/nivel_0/images/anexos/putty/security_alert.png and /dev/null differ diff --git a/docs/modules/nivel_0/images/anexos/shellinabox/accept_the_risk.png b/docs/modules/nivel_0/images/anexos/shellinabox/accept_the_risk.png deleted file mode 100644 index 4e0d03d..0000000 Binary files a/docs/modules/nivel_0/images/anexos/shellinabox/accept_the_risk.png and /dev/null differ diff --git a/docs/modules/nivel_0/images/anexos/shellinabox/advanced.png b/docs/modules/nivel_0/images/anexos/shellinabox/advanced.png deleted file mode 100644 index 4b5736c..0000000 Binary files a/docs/modules/nivel_0/images/anexos/shellinabox/advanced.png and /dev/null differ diff --git a/docs/modules/nivel_0/images/anexos/shellinabox/login.png b/docs/modules/nivel_0/images/anexos/shellinabox/login.png deleted file mode 100644 index 2d3d903..0000000 Binary files a/docs/modules/nivel_0/images/anexos/shellinabox/login.png and /dev/null differ diff --git a/docs/modules/nivel_0/images/anexos/smartty/ok.png b/docs/modules/nivel_0/images/anexos/smartty/ok.png deleted file mode 100755 index ac1f422..0000000 Binary files a/docs/modules/nivel_0/images/anexos/smartty/ok.png and /dev/null differ diff --git a/docs/modules/nivel_0/images/anexos/smartty/pantalla_inicio.png b/docs/modules/nivel_0/images/anexos/smartty/pantalla_inicio.png deleted file mode 100755 index 8e820b2..0000000 Binary files a/docs/modules/nivel_0/images/anexos/smartty/pantalla_inicio.png and /dev/null differ diff --git a/docs/modules/nivel_0/images/anexos/smartty/quick_ssh_connection.png b/docs/modules/nivel_0/images/anexos/smartty/quick_ssh_connection.png deleted file mode 100755 index f5b304b..0000000 Binary files a/docs/modules/nivel_0/images/anexos/smartty/quick_ssh_connection.png and /dev/null differ diff --git a/docs/modules/nivel_0/images/anexos/smartty/save_host_key.png b/docs/modules/nivel_0/images/anexos/smartty/save_host_key.png deleted file mode 100755 index 02e80fb..0000000 Binary files a/docs/modules/nivel_0/images/anexos/smartty/save_host_key.png and /dev/null differ diff --git a/docs/modules/nivel_0/images/anexos/smartty/virtual_terminals.png b/docs/modules/nivel_0/images/anexos/smartty/virtual_terminals.png deleted file mode 100755 index 7152306..0000000 Binary files a/docs/modules/nivel_0/images/anexos/smartty/virtual_terminals.png and /dev/null differ diff --git a/docs/modules/nivel_0/images/dia_2/permisos/permisos.png b/docs/modules/nivel_0/images/dia_2/permisos/permisos.png deleted file mode 100644 index b4eb68b..0000000 Binary files a/docs/modules/nivel_0/images/dia_2/permisos/permisos.png and /dev/null differ diff --git a/docs/modules/nivel_0/nav.adoc b/docs/modules/nivel_0/nav.adoc deleted file mode 100644 index 4d230ea..0000000 --- a/docs/modules/nivel_0/nav.adoc +++ /dev/null @@ -1,16 +0,0 @@ -* Nivel 0 -** Día 1 -*** xref:dia_1/historia.adoc[Historia] -*** xref:dia_1/bootstrapping.adoc[Bootstrapping] -*** xref:dia_1/sistema_archivos.adoc[Sistema de archivos] -** Día 2 -*** xref:dia_2/usuarios.adoc[Usuarios] -*** xref:dia_2/permisos.adoc[Permisos] -*** xref:dia_2/procesos.adoc[Procesos] -*** xref:dia_2/instalacion.adoc[Instalación] -** Día 3 -*** xref:dia_3/pipes.adoc[Pipes] -*** xref:dia_3/filtrado.adoc[Filtrado] -*** xref:dia_3/scripts.adoc[Scripts] -** Anexos -*** xref:anexos/ssh.adoc[SSH] diff --git a/docs/modules/nivel_0/pages/anexos/ssh.adoc b/docs/modules/nivel_0/pages/anexos/ssh.adoc deleted file mode 100644 index 6eb4306..0000000 --- a/docs/modules/nivel_0/pages/anexos/ssh.adoc +++ /dev/null @@ -1,164 +0,0 @@ -= SSH -:table-caption: Tabla -:figure-caption: Figura - - -[#terminal_web] -== Terminal web - -. Desde su navegador ingrese a la URL: -+ ----- -https://148.206.50.80:3039 ----- - -. Pulse en el botón _Advanced..._: -+ -image::anexos/shellinabox/advanced.png["Advanced..."] - -. Pulse en el botón _Accept the Risk and Continue_: -+ -image::anexos/shellinabox/accept_the_risk.png["Accept the Risk and Continue"] - -. Se mostrará una nueva pantalla en donde se le solicitará su nombre de usuario y su contraseña: -+ -image::anexos/shellinabox/login.png["Login"] - -. Si los datos proporcionados son correctos, se mostrará la pantalla de bienvenida. - - -[#ssh_linux_os] -== SSH GNU/Linux - -Desde la terminal ejecute el comando: -[source,cli] ----- -ssh -l -p ----- - -[NOTE,caption=NOTA] -==== -Opción `-l` (letra ele minúscula) -==== - -.Ejemplo de conexión -**** -Desde la terminal ejecute el comando: ----- -ssh -l frodo -p 3040 148.206.50.80 ----- - -Una vez que se ha establecido la conexión, el sistema le solicitará su contraseña: ----- -ssh -l frodo -p 3040 148.206.50.80 -frodo@148.206.50.80's password: ----- - -Si la contraseña proporcionada es correcta, se mostrará la pantalla de bienvenida. - -[NOTE,caption=NOTA] -==== -La primera vez que realice la conexión se le mostrará un mensaje como el siguiente: ----- -ssh -l frodo -p 3040 148.206.50.80 -The authenticity of host '148.206.50.80 (148.206.50.80)' can't be established. -RSA key fingerprint is SHA256:ivxk1BSj+OaS9JGCwUoVwuXJnxlU2YWxKD34m1XPAd8. -This key is not known by any other names -Are you sure you want to continue connecting (yes/no/[fingerprint])? ----- - -Este mensaje es para indicarle que el servidor al que se desea conectar, necesita guardar un identificador en su equipo para poder tener una sesión segura. Escriba la palabra "yes" y presione la tecla "Enter" para continuar: ----- -Are you sure you want to continue connecting (yes/no)? yes -Warning: Permanently added '148.206.50.80' (RSA) to the list of known hosts. ----- -==== -**** - - -[#ssh_windows] -== SSH Windows -Para el sistema operativo Windows existen varias alternativas comerciales y libres de clientes SSH. + -Los siguientes dos clientes son gratuitos y sabemos que funcionan bien para realizar conexiones SSH desde el sistema operativo Windows: - -[square] -* https://portableapps.com/apps/internet/putty_portable[PuTTY] -* http://smartty.sysprogs.com/[SmarTTY] - -[NOTE, caption=NOTA] -==== -Las versiones portables de estos clientes no requieren instalación y pueden ser ejecutadas directamente. -==== - -[#windows_putty] -=== PuTTY: Ejemplo de conexión -. Ejecute _PuTTY_. Al iniciar el programa se le mostrará la siguiente pantalla: -+ -image::anexos/putty/pantalla_inicio.png["Pantalla de Inicio"] - -. Complete los campos de la ventana _PuTTY Configuration_ con la siguiente información: -[square] -* *Host Name (or IP address):* 148.206.50.80 -* *Port:* 3040 -* *Connection type:* SSH - -. Pulse el botón _Open_: -+ -image::anexos/putty/configuracion.png["PuTTY Configuration"] - -. Se abrirá una nueva ventana en donde se le solicitará su nombre de usuario y su contraseña: -+ -image::anexos/putty/login.png["Login"] - -. Si los datos proporcionados son correctos, se mostrará la pantalla de bienvenida. - -[NOTE, caption=NOTA] -==== -Al conectarse por primera vez se le mostrará el siguiente mensaje: - -image::anexos/putty/security_alert.png["Putty Security Alert"] - -pulse el botón _Accept_ para continuar. - -Este mensaje es para indicarle que el servidor al que se desea conectar, necesita guardar un identificador en su equipo para poder tener una sesión segura. -==== - -[#windows_smartty] -=== SmarTTY: Ejemplo de conexión -. Ejecute _SmarTTY_. Al iniciar el programa se le mostrará la siguiente pantalla: -+ -image::anexos/smartty/pantalla_inicio.png["Pantalla de Inicio"] -+ -pulse en el texto _Quick SSH conection..._ - -. Se abrirá la siguiente ventana: -+ -image::anexos/smartty/quick_ssh_connection.png["Quick SSH Conection"] - -. Complete los campos de la ventana _Quick SSH Conection_ con la siguiente información: -[square] -* *Machine:* frodo@148.206.50.80:3040 -* *Password:* Su contraseña - -. Pulse el botón _OK_: -+ -image::anexos/smartty/ok.png[OK] - -. Si los datos proporcionados son correctos, se abrirá la siguiente ventana: -+ -image::anexos/smartty/virtual_terminals.png["Virtual Terminals"] -+ -pulse el botón _Start with a regular Terminal_. - -. Finalmente, se mostrará la pantalla de bienvenida. - -[NOTE, caption=NOTA] -==== -Al conectarse por primera vez al clúster se le mostrará el siguiente mensaje: - -image::anexos/smartty/save_host_key.png[Save host key] - -pulse el botón _Save_ para continuar. - -Este mensaje es para indicarle que el servidor al que se desea conectar, necesita guardar un identificador en su equipo para poder tener una sesión segura. -==== diff --git a/docs/modules/nivel_0/pages/dia_1/bootstrapping.adoc b/docs/modules/nivel_0/pages/dia_1/bootstrapping.adoc deleted file mode 100644 index b840db0..0000000 --- a/docs/modules/nivel_0/pages/dia_1/bootstrapping.adoc +++ /dev/null @@ -1,52 +0,0 @@ -= Bootstrapping - -:table-caption: Tabla -:figure-caption: Figura - -[#bios] -== BIOS -- El firmware tradicional para PC es llamado BIOS (Basic input/output system) -- En la actualidad Bios ha sido suplantado por un estándar más moderno (UEFI) - -Proceso de booteo en bios - -- Se asume que el dispositivo de booteo comienza con un MBR (Master boot record) - -- Se asume que el dispositivo de booteo comienza con un ESP - -[#grub] -== GRUB -GNU GRand Unified Bootloader - -Es un programa que se encarga de ejecutar y editar la forma en que se ejecutan ciertos sistemas operativos -- Actualmente se usa GRUB 2 - -[#init] -== init -- Se carga el kernel y se crean procesos instantáneos -- Se ejecuta el primer proceso **init** - -init mantiene una noción del modo en el que el sistema debería operar -- single-user mode -- multiuser mode -- server mode - -Cada modo está asociado a una colección de procesos - -init se encarga de -- asignarle un nombre al equipo -- asignarle una zona horaria -- revisar que los discos funcionen correctamente -- montar los sistemas de archivos -- remover viejos archivos -- configurar interfaces de red -- configurar filtradores de paquetes -iniciar otros demonios - - -Hay varias implementaciones de init -- system V -- systemd - -Este es un tema controversial -link:https://ihatesystemd.com/[I Hate Systemd] diff --git a/docs/modules/nivel_0/pages/dia_1/historia.adoc b/docs/modules/nivel_0/pages/dia_1/historia.adoc deleted file mode 100644 index 263464f..0000000 --- a/docs/modules/nivel_0/pages/dia_1/historia.adoc +++ /dev/null @@ -1,104 +0,0 @@ -= Historia - -:table-caption: Tabla -:figure-caption: Figura - -[#Prologo] -== Prologo -Para entender qué es Linux. - -=== Agentes o personajes claves en su desarrollo. - -* UNIX -** Ken Thompson -** Dennis Ritchie -** Laboratorios Bell -** Berkley -* GNU -** Richard Stallman -** GPL -* LINUX -** Linus torbalds - -[#unix] -== Unix -* 1964: Multics -** Un esfuerzo de General Electric y link:https://en.wikipedia.org/wiki/Bell_Labs[laboratorios Bell] link:https://www.youtube.com/watch?v=OJsKgiGGzzs[(La fabrica de ideas)] -** Ideas que se utilizaron para UNIX: -*** Sistema de archivos en árbol -*** Archivos como flujo de bytes -*** Shell -* 1969: Primera implementación de UNIX - ** Por link:https://en.wikipedia.org/wiki/Ken_Thompson[Ken Thompson] y link:https://en.wikipedia.org/wiki/Dennis_Ritchie[Dennis Ritchie] - *** Que trabajaba en el videojuego link:https://web.archive.org/web/20151210211809/http://sites.fas.harvard.edu/~lib215/reference/history/spacetravel.html[space travel] - ** Para link:https://www.youtube.com/watch?v=pvaPaWyiuLA&t=1s[PDP-7] -* 1970: Unix fue implementado PDP-11 - ** En ensamblador -* 1971: primera edición de UNIX - ** Ya tenía - *** compilador de FORTRAN - *** ar, cat, chmod, chown,cp,dc,ed,find,ln,ls,mail,mkdir,mv,rm,sh,su,who -* 1975: sexta edición de UNIX - ** La primera edición que se uso ampliamente fuera de AT&T - ** licenciada para universidades a cambio de una cuota nominal por distribución. - ** contenía: - *** Documentación - *** Código fuente del Kernel -* 1977 UNIX corría ya en - ** ~500 sites - ** ~125 universidades en Estados Unidos y otros países -* 1979: séptima edición de UNIX - ** awk,make,sed,tar,uucp,bourne shell, fortran 77 -* 1979: 3BSD(Berkeley software distribution) - ** c shell, vi, sendmail, pascal -* 1982: ruptura del sistema Bell link:https://www.youtube.com/watch?v=XvDZLjaCJuw&t=187s[ATT] -* 1983: system V -* 1989: system V release 4 (SVR4) - ** incorpora características de BSD - ** Se licenció para vendedores privados - *** SunOS,Solaris,Ultrix,IBM's AIX,HP-UX,A/UX de Apple y Microsoft... - -[#gnu] -== GNU -link:https://e00-elmundo.uecdn.es/elmundo/imagenes/2012/05/11/navegante/1336715775_1.jpg[Richard Stallman] - -* 1984: link:https://www.youtube.com/watch?v=ihmw5vAWXno[Richard stallman] empieza a trabajar en un sistema UNIX libre - ** Inicia el proyecto link:https://www.gnu.org/home.es.html[GNU] -* 1985: Stallman funda la link:https://www.fsf.org/[FSF] - ** desarrollo de la link:https://es.wikipedia.org/wiki/GNU_General_Public_License[licencia GPL] -* 1990: GNU había producido un sistema casi completo -Entre los programas más conocidos producidos por GNU están - -* emacs -* gcc -* bash -* glibc - -[#linux] -== Linux -link:https://en.wikipedia.org/wiki/Linux_kernel[linux] -link:https://es.wikipedia.org/wiki/Linus_Torvalds[linus torvalds] - -- 1991: octubre 5 Linus torvalds solicita ayuda de otros programadores anunciando su kernel 0.02 en comp.os.minix - -mediante un famoso link:https://www.cs.cmu.edu/~awb/linux.history.html[correo] - -¿Añoras los buenos días de minix 1.1, cuando los hombres eran hombres y escribían sus propios drivers? -¿no tienes ningún proyecto y te mueres por hincarle el diente a un sistema operativo que puedas intentar -modificar para tus necesidades? ¿te empieza a parecer frustrante que todo funcione bien en minix? -¿no más noches en vela para hacer que un ingenioso programa funcione? Entonces este post podría ser para ti... - -- la versión link:https://mirrors.edge.kernel.org/pub/linux/kernel/Historic/old-versions/RELNOTES-0.12[0.12] empieza a utilizar la licencia gpl - -Actualmente -- link:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/about/[tiene un desarrollo muy activo] -- link:https://www.top500.org/statistics/details/osfam/1/[se usa ampliamente] - -[#GNU/Linux] -== GNU/Linux - -link:https://distrowatch.com/[Distribuciones] - -- 1992: primera distribución de linux -- 1993: surge slackware, Suse, Redhat, Debian link:https://upload.wikimedia.org/wikipedia/commons/1/1b/Linux_Distribution_Timeline.svg[Distro_map] -- 2004: aparece ubuntu diff --git a/docs/modules/nivel_0/pages/dia_1/sistema_archivos.adoc b/docs/modules/nivel_0/pages/dia_1/sistema_archivos.adoc deleted file mode 100644 index 9e69d92..0000000 --- a/docs/modules/nivel_0/pages/dia_1/sistema_archivos.adoc +++ /dev/null @@ -1,609 +0,0 @@ -= Sistema de archivos - -:table-caption: Tabla -:figure-caption: Figura - -Un sistema de archivos o sistema de ficheros, (file system: fs), en informática, es un elemento que -controla cómo se almacenan y recuperan los datos. - -Los sistemas de archivos se utilizan para estructurar la información que se guarda en las unidad de -almacenamiento disponibles para un sistema de computo. - -El propósito básico de un sistema de archivos es representar y organizar los recursos de almacenamiento -del sistema. - -[#filosofia_unix] -== Filosofía Unix - -"Everything is a file" (Todo es un archivo) describe una de las principales características -de Unix y sus derivados, - -=== ¿Qué es un archivo? - -Un archivo o fichero informático es una secuencia de bytes que son almacenados en un dispositivo. - -=== ¿por qué todo es un archivo en UNIX? - -Hay tres ventajas principales en el enfoque de "todo es un archivo": - - -1. Archivos y dispositivos de Entrada/Salida (teclado,pantalla, etc.) son tan similares como es posible. - -2. Los nombres de archivo y dispositivo tienen la misma sintaxis y significado, por lo que un programa -que espera un nombre de archivo como parámetro puede pasar un nombre de dispositivo - -3. Los archivos especiales están sujetos al mismo mecanismo de protección que los archivos normales - - -Esto significa que consiste en que casi todos los recursos del sistema, como documentos, directorios, -unidades de disco, módems, teclados, impresoras, e incluso algunas comunicaciones de red y de procesos -son simples flujos de bits expuestos a través del sistema de archivos Unix. - -Dado que cada "archivo" se expone a través de la misma interfaz, puede usar el mismo conjunto de comandos -básicos para manipularlos. - - -[#arbol_archivos] -== Árbol de archivos - - -image::dia_1/filesystem/arbol.png["Jerarquia de archivos"] - - -* / : El carácter de barra inclinada / por sí solo denota la raíz del árbol del sistema de archivos. - -* /bin : Significa "binarios" y contiene comandos fundamentales, como ls o cp, que generalmente necesitan todos los usuarios. - -* /boot: Contiene todos los archivos necesarios para un proceso de arranque exitoso. - -* /dev : Significa "dispositivos". Contiene representaciones de archivos de dispositivos periféricos y pseudodispositivos. - -* /etc: contiene archivos de configuración de todo el sistema y bases de datos del sistema. - -* /sbin : Comandos para la administración del sistema. - -* /home: contiene los directorios de inicio de los usuarios. - -* /lib: contiene bibliotecas del sistema y algunos archivos críticos, como módulos del kernel o controladores de dispositivos. - -* /media : punto de montaje predeterminado para dispositivos extraíbles, como memorias USB, reproductores multimedia, etc. - -* /mnt: significa "montar". Contiene puntos de montaje del sistema de archivos. - -* /proc: sistema de archivos virtual que muestra información sobre los procesos como archivos. - -* /root: el directorio de inicio del superusuario "root", es decir, el administrador del sistema. - -* /tmp : Un lugar para archivos temporales. - -* /usr: contiene ejecutables, bibliotecas y recursos compartidos que no son críticos para el sistema - -* /usr/bin: este directorio almacena todos los programas binarios distribuidos con el sistema operativo que no residen en /bin, /sbin o (raramente) /etc. - -* /usr/lib: almacena las bibliotecas y los archivos de datos necesarios para los programas almacenados en /usr o en otro lugar. - -* /var: una abreviatura de "variable". Un lugar para archivos que pueden cambiar con frecuencia, especialmente en tamaño - - -[#pathnames] -== Pathnames - -Los archivos en un sistema tipo Unix están organizados en una estructura jerárquica de varios niveles -conocida como árbol de directorios. En la parte superior del sistema de archivos hay un directorio -llamado "raíz" que se representa con "/". Todos los demás archivos son "descendientes" de la raíz. - - -image::dia_1/filesystem/pathname.png["Ejemplo de Pathname"] - -La lista de directorios que se deben recorrer para localizar un archivo en particular más el nombre de -ese archivo forman un pathname o ruta. Los nombres de directorios y de archivos van separados por -una / (barra oblicua) en las rutas. - -Ejemplo: - ----- -/home/gerardo/archivo1 ----- - -=== Ruta absoluta - -Una ruta absoluta se basa en la raíz del árbol de Linux. Toda ruta absoluta empieza, por /. - - -=== Ruta relativa - -Las rutas relativas dependen del directorio actual en el que se encuentra el usuario. Para definir una ruta, se usan los símbolos: - -|=== -| Símbolo | Descripción - -| `/` | Hace referencia al directorio raíz - -| `.` | Hace referencia al directorio actual - -| `..` | Hace referencia al directorio padre del directorio actual - -|=== - -Ejemplos: - ----- -../willy/colores/azul ----- - - -[#tipos_archivos] -== Tipos de archivos - -El sistema de archivos UNIX contiene varios tipos diferentes de archivos: - -1. Archivos ordinarios: un archivo ordinario es un archivo en el sistema que contiene datos, texto o instrucciones de programa. - -2. Directorios: archivos que son listas de otros archivos. - -3. Archivos especiales: se utilizan para representar un dispositivo físico real, como una impresora - -4. Pipes (Tuberías): UNIX le permite vincular comandos mediante una tubería. La tubería actúa como un archivo temporal que solo existe para contener datos de un comando hasta que los lea otro. - -5. Sockets: un socket Unix (o socket de comunicación entre procesos) es un archivo especial que permite una comunicación avanzada entre procesos. - -6. Enlace simbólico: el enlace simbólico se utiliza para hacer referencia a algún otro archivo del sistema de archivos. - - -[#comandos_navegacion] -== Comandos de navegación - -Estructura general de un comando - ----- -$ comando [opciones] [argumentos] | [archivos] ----- - -Entrada, salida y error estándar. - -image::dia_1/filesystem/estandar.png["Entrada,salida y error estándar"] - - -*man* - -Como habrá notado GNU/Linux está dotado de una gran colección de comandos, los cuales nos ayudan a -interactuar con el sistema a diferentes niveles. La tarea de memorizar todo es complicado, si en algún momento -desea recordar o aprender el funcionamiento de algún comando en especial basta con revisar los manuales. - -Ejemplo: - ----- -[frodo@comarca1 ~]$ man man - - -MAN(1) Utilidades de paginador del manual MAN(1) - -NOMBRE - man - interfaz de los manuales de referencia del sistema - -SINOPSIS - man [opciones de man] [[sección] página ...] ... - man -k [opciones de apropos] regexp ... - man -K [opciones de man] [sección] term ... - man -f [whatis opciones] página ... - man -l [opciones de man] archivo ... - man -w|-W [opciones de man] página ... - -DESCRIPCIÓN - man es el paginador de manuales del sistema. Cada argumento de página dado a man normalmente es el nombre de un programa, utilidad o función. La - página de manual asociada con cada uno de estos argumentos es, pues, encontrada y mostrada. Si se proporciona una sección, man mirará solo en esa - sección del manual. La acción predeterminada es buscar en todas las secciones disponibles siguiendo un orden predefinido (véase DEFAULTS), y - mostrar solo la primera página encontrada, incluso si la página existe en varias secciones. -... - ----- - -Puede navegar a través de estas paginas con las flechas del teclado, para salir presione `q`. - -*pwd* - -Visualiza o muestra la ruta donde el usuario se encuentra trabajando. Este comando es uno de los pocos que no tiene opciones. - ----- -[frodo@comarca1 ~]$ pwd - -/home/frodo/ ----- - -*ls* - -ls (list directory): El comando lista el contenido que hay en la ruta especificada. - -|=== -| Comando | Descripción - -| ls | En el caso que ls se ejecute sin parámetros, despliega el contenido del directorio donde se encuentre. - -| ls /etc/apt | Despliegue el contenido de la ruta que se especifique. - -| ls -l | Utiliza formato de lista larga. - -| ls -a | No ignora entradas que empiecen con . - -| ls -t | Ordenar por tiempo de modificación, la más reciente primero. - -| ls -S | Ordena por tamaño el archivo - -|=== - - -*cd* - -cd (change directory) : Generalmente cuando el usuario inicia una sesión, el directorio donde comienza -es su directorio personal. Desde ahí uno puede moverse a los diferentes directorios donde se tenga acceso usando este comando. - - -|=== -| Comando | Descripción - -| cd | En el caso que *cd* se ejecute sin parámetros, cambiará al directorio personal o home directory del usuario. - -| cd /etc/apt/ | Ir a la ruta especificada, tenga en cuenta que es una ruta absoluta. - -| cd . | Directorio actual. - -| cd .. | Cambiar a directorio actual. - -| cd / | Cambia al directorio raíz - -| cd - | Cambia al directorio donde estaba anteriormente - -|=== - -*mkdir* - -mkdir (make directory) : Este comando permite crear un nuevo directorio en la ruta donde se especifique - -|=== -| Comando | Descripción - -| mkdir NAME | Crea el directorio NAME en la ruta actual - -| mkdir /home/frodo/NAME2 | Crea el directorio NAME2 en la ruta especificada - -| mkdir -p Documentos/NAME3 | Crea el directorio NAME3 y directorios padres especificados en el pathname si no existen. - -| mkdir -m MODE directorio_nuevo | Crea directorio con permisos - -|=== - -*cp* - -cp (copy) : Este comando sirve para hacer una copia de archivos y/o directorios. - - -|=== -| Comando | Descripción - -| cp file1 file2 | Realiza copia idéntica de file1 y le llama file1 - -| cp /etc/passwd . | Copia el archivo passwd al directorio actual - -| cp file1 /tmp/ | Copia el archivo file1 al directorio /tmp - -| cp -r /tmp/ | Copia de manera recursiva - -|=== - -*mv* - -mv (move) : Este comando realiza la misma función que cp pero además destruye el archivo original. -Se puede decir que mueve el archivo. - -|=== -| Comando | Descripción - -| mv file1 file2 | "Mueve" el archivo file1 a file. Se puede interpretar como un cambio de nombre. - -| mv /etc/passwords . | Mueve el archivo passwords al directorio actual - -| mv file1 /tmp/ | Mueve el archivo file1 al directorio /tmp - -|=== - -*rm* - -Elimina archivos o directorios. - -|=== -| Comando | Descripción - -| rm file1 | Borra archivo file1 - -| rm -r Directorio | Borra directorio de forma recursiva (el directorio y su contenido) - -|=== - -*rmdir* - -Elimina directorio vacio - ----- -rmdir directorio1/ ----- - -*cat* - -Se utiliza para listar el contenido de un archivo en la salida estándar - -Ejemplo - ----- -cat archivo.txt ----- - -*touch* - -El comando touch te permite crear un nuevo archivo en blanco. - -Ejemplo - ----- -touch new_file.txt ----- - -Si el archivo existe, se modifica la hora y fecha de modificación. - -== Atributos de un archivo - - -image::dia_1/filesystem/atributos.png["Ejemplo de atributos de un archivo"] - -1. Tipo de arhivo -+ -image::dia_1/filesystem/tipo.png["Tipo de archivos"] - -2. Permisos del archivo - -* Lectura (r) - -* Escritura (w) - -* Ejecución (x) - -+ -Se divide en tres secciones: - -- Usuario (u) - -- Grupo (g) - -- Otros (o) - - -3. Numero de enlaces del archivo - -4. Nombre del propietario del archivo - -5. Grupo al que pertenece el archivo - -6. Tamaño del archivo en bytes - -7. Fecha de la ultima modificación del archivo - -8. Nombre del archivo - -* No puede contener el carácter / - -* No se debe utilizar los caracteres: `|` `&` `;` `,` `(` `)` `<` `>` `[` `]` `{` `}` `~` `"` `'` `*` `\` `?` `#` Espacios - - -== Practica - -[source, bash] ----- -frodo@casa1:~$ pwd -/home/frodo - -frodo@casa1:~$ mkdir -m 700 Curso_0 - -frodo@casa1:~$ ls -ld Curso_0/ -drwx------ 2 frodo frodo 6 Sep 29 23:24 Curso_0/ - -frodo@casa1:~$ cd Curso_0/ - -frodo@casa1:~/Curso_0$ pwd -/home/frodo/Curso_0 - -frodo@casa1:~/Curso_0$ ls -ltrha -total 0 -drwxr-xr-x 1 frodo frodo 89 Sep 29 23:24 .. -drwx------ 2 frodo frodo 6 Sep 29 23:24 . - -frodo@casa1:~/Curso_0$ cp /etc/passwd passwords - -frodo@casa1:~/Curso_0$ cat passwords -root:x:0:0:root:/root:/bin/bash -daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin -bin:x:2:2:bin:/bin:/usr/sbin/nologin -sys:x:3:3:sys:/dev:/usr/sbin/nologin -sync:x:4:65534:sync:/bin:/bin/sync -games:x:5:60:games:/usr/games:/usr/sbin/nologin -man:x:6:12:man:/var/cache/man:/usr/sbin/nologin -lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin -mail:x:8:8:mail:/var/mail:/usr/sbin/nologin -news:x:9:9:news:/var/spool/news:/usr/sbin/nologin -uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin -proxy:x:13:13:proxy:/bin:/usr/sbin/nologin -www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin -backup:x:34:34:backup:/var/backups:/usr/sbin/nologin -list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin -irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin -gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin -nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin -systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false -systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false -systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false -systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false -_apt:x:104:65534::/nonexistent:/bin/false -sshd:x:105:65534::/var/run/sshd:/usr/sbin/nologin -frodo:x:1000:1000::/home/frodo:/bin/bash - -frodo@casa1:~/Curso_0$ ls -ltrha -total 4.0K -drwxr-xr-x 1 frodo frodo 89 Sep 29 23:24 .. --rw-r--r-- 1 frodo frodo 1.3K Sep 29 23:25 passwords -drwx------ 2 frodo frodo 23 Sep 29 23:25 . - -frodo@casa1:~/Curso_0$ cp -r /etc/init.d/ . - -frodo@casa1:~/Curso_0$ ls -ltrha -total 8.0K -drwxr-xr-x 1 frodo frodo 89 Sep 29 23:24 .. --rw-r--r-- 1 frodo frodo 1.3K Sep 29 23:25 passwords -drwx------ 3 frodo frodo 37 Sep 29 23:27 . -drwxr-xr-x 2 frodo frodo 4.0K Sep 29 23:27 init.d - -frodo@casa1:~/Curso_0$ mkdir subdir - -frodo@casa1:~/Curso_0$ cp passwords archivo_passwords - -frodo@casa1:~/Curso_0$ ls -ltrha -total 12K -drwxr-xr-x 1 frodo frodo 89 Sep 29 23:24 .. --rw-r--r-- 1 frodo frodo 1.3K Sep 29 23:25 passwords -drwxr-xr-x 2 frodo frodo 4.0K Sep 29 23:27 init.d -drwxrwxr-x 2 frodo frodo 6 Sep 29 23:27 subdir --rw-r--r-- 1 frodo frodo 1.3K Sep 29 23:27 archivo_passwords -drwx------ 4 frodo frodo 76 Sep 29 23:27 . - -frodo@casa1:~/Curso_0$ mv archivo_passwords subdir/passwords - -frodo@casa1:~/Curso_0$ ls -ltrha -total 8.0K -drwxr-xr-x 1 frodo frodo 89 Sep 29 23:24 .. --rw-r--r-- 1 frodo frodo 1.3K Sep 29 23:25 passwords -drwxr-xr-x 2 frodo frodo 4.0K Sep 29 23:27 init.d -drwxrwxr-x 2 frodo frodo 23 Sep 29 23:28 subdir -drwx------ 4 frodo frodo 51 Sep 29 23:28 . -frodo@casa1:~/Curso_0$ ls -ltrha subdir/ -total 4.0K --rw-r--r-- 1 frodo frodo 1.3K Sep 29 23:27 passwords -drwx------ 4 frodo frodo 51 Sep 29 23:28 .. -drwxrwxr-x 2 frodo frodo 23 Sep 29 23:28 . - -frodo@casa1:~/Curso_0$ rmdir subdir/ -rmdir: failed to remove 'subdir/': Directory not empty - -frodo@casa1:~/Curso_0$ rm subdir/passwords - -frodo@casa1:~/Curso_0$ rmdir subdir/ - -frodo@casa1:~/Curso_0$ rm -rf init.d/ - -frodo@casa1:~/Curso_0$ ls -ltrha subdir/ -ls: cannot access 'subdir/': No such file or directory - -frodo@casa1:~/Curso_0$ ls -ltrha -total 4.0K -drwxr-xr-x 1 frodo frodo 89 Sep 29 23:24 .. --rw-r--r-- 1 frodo frodo 1.3K Sep 29 23:25 passwords -drwx------ 2 frodo frodo 23 Sep 29 23:29 . - -frodo@casa1:~/Curso_0$ ----- - -== Comodines - -Los comodines (también conocidos como metacaracteres) son símbolos o caracteres especiales que representan -a otros caracteres. Puede usarlos con cualquier comando, como el comando `ls` o el comando `rm`, para enumerar -o eliminar archivos que coincidan con un criterio dado - -=== Descripción de metacaracteres - -|=== -| Metacaracter | Descripción | Ejemplo - -| `*` | Cualquier cadena, sin importar su longitud | 12*3 coincide con 1223, 12345 y 123 - -| `?` | Cualquier carácter | sept? coincide con sept y sepa. - -| `[-]` | Indica un rango de valores que se van a comparar (El rango debe estar entre paréntesis.).| [1–5][1-9][1-9] [1-9][1-9] coincide con cadenas, como por ejemplo, 12345 o 26589, pero no 67890. - -| `[...]` | Contiene caracteres específicos y rangos de valores que deben coincidir. | [xyz] coincide con cadenas que contienen x, y o z. - -| `[!..]` | Cualquier carácter excepto los caracteres en el rango | sep[!1] coincide con sep2, sept y sepa pero no con sep1. - -| `{}` | Para hacer coincidir un grupo de patrones de nombres/comodines | touch prueba{1..3}.txt creara los archivos prueba1.txt, prueba2.txt y prueba2.txt - -|=== - -*Practica* - -Los metacaracteres son utilizados para construir expresiones regulares. Con BASH, el propio shell expande -los comodines. Esto significa que los comandos generalmente no ven estos caracteres especiales porque BASH -ya los ha expandido antes de ejecutar el comando. Intente familiarizarse con los comodines con los siguientes ejemplos: - ----- -$ touch gcutError_recon-all.log s{10,1,6,8}_recon-all.log s3-recon-all.log - -$ ls -gcutError_recon-all.log s10_recon-all.log s1_recon-all.log -s3-recon-all.log s6_recon-all.log s8_recon-all.log - -$ ls *recon-all.log -gcutError_recon-all.log s10_recon-all.log s1_recon-all.log -s6_recon-all.log s8_recon-all.log - -$ ls gcut* -gcutError_recon-all.log - -$ ls s[0-9]* -s10_recon-all.log s1_recon-all.log s3-recon-all.log -s6_recon-all.log s8_recon-all.log - -$ ls s[0-9]_* -s1_recon-all.log s6_recon-all.log s8_recon-all.log - -$ ls s[0-9][0-9]_* -s10_recon-all.log - -$ ls [a-z][0-9][0-9]???con-all.log -s10_recon-all.log - -$ ls s?_recon-all.log -s1_recon-all.log s6_recon-all.log s8_recon-all.log - -$ touch subject_{1..5}.dat - -$ ls -gcutError_recon-all.log s1_recon-all.log s6_recon-all.log -s10_recon-all.log s3-recon-all.log s8_recon-all.log -subject_1.dat subject_3.dat subject_5.dat -subject_2.dat subject_4.dat - ----- - -¿Entiendes todos los patrones y cómo devolvieron lo que hicieron? - - -Tu tarea - -1. Encuentre un patrón de búsqueda que devuelva todos los archivos que terminan en `.txt` - -2. Encuentre un patrón de búsqueda que devuelva todos los archivos que comiencen con `s` y terminen en `.log` - -3. Encuentre un patrón de búsqueda que devuelva todos los archivos que comiencen con `s` seguidos de dos dígitos - -4. Encuentre un patrón de búsqueda que devuelva todos los archivos que comiencen con `s` seguidos de un *solo* dígito - -5. Ejecute un comando que elimine todos los archivos que terminen con `.dat` - - -.Respuestas -[%collapsible] -==== -1. ls *.txt -2. ls s*.log -3. ls s[0-9][0-9]* -4. ls s[0-9][!0-9]* -5. rm *.dat -==== - - - diff --git a/docs/modules/nivel_0/pages/dia_2/instalacion.adoc b/docs/modules/nivel_0/pages/dia_2/instalacion.adoc deleted file mode 100644 index 0cd448a..0000000 --- a/docs/modules/nivel_0/pages/dia_2/instalacion.adoc +++ /dev/null @@ -1,244 +0,0 @@ -= Instalación - -:table-caption: Tabla -:figure-caption: Figura - -[#compilación] -== Compilación con GNU Tools -En linux la mayor parte de los programas son de software libre, -esto significa que podemos obtener el código fuente lo que nos -permite modificar los programas y compilarlos para nuestro hardware. - -=== GCC (Gnu Compilers Collection) -*GCC* fue desarrollado como un compilador de lenguaje C para el proyecto -GNU, con el tiempo paso a ser una colección de compiladores ya que empezó -a dar soporte a mas lenguajes, actualmente en la versión 12.2 *gcc* -puede compilar C, C++, Objective-C, Fortran, Ada, Go y D. - -==== Práctica -* Copia el directorio /tmp/material/hola_mundo a tu directorio home. -* Entra en tu copia del directorio. -* Compila el código usando *gcc*. -[source,shell] -gcc hola.cpp main.cpp -o hola_mundo - -* Ejecuta el programa. -[source,shell] -./hola_mundo - -=== Make -Cuando un proyecto se vuelve grande o complejo se hace mas -difícil compilarlo a mano, para estos casos existe *make*. - -*make* ayuda a automatizar la compilación de programas, los desarrolladores -definen reglas para tareas especificas, estas reglas son usadas por *make* -para saber que debe hacer. - -Las reglas son definidas en un archivo llamado *Makefile* o *makefile*, -cuando vemos uno de estos archivos en el código fuente significa que -podemos usar *make* para compilarlo. - -Ejemplos de como compilar. -[source,shell] -make -make all - -Ejemplo de como instalar. (Debe estar definido en el *Makefile*) -[source,shell] -make install - -Si el *makefile* no tiene la operación *install* entonces la -instalación debe realizarse por otros medios. Esto puede hacerse copiando -los binarios al directorio donde deseamos hacer la instalación (usualmente -/usr/local/bin) y arreglando los permisos para que puedan ser ejecutados -por cualquier usuario. - -Los desarrolladores regularmente incluyen en el código fuente instrucciones -para compilar e instalar el programa. - -==== Práctica -Compilar e instalar *figlet* usando make. - -* Descargar el código fuente desde github. -[source,shell] -git clone https://github.com/cmatsuoka/figlet.git -* Entra en el directorio del código. -* Usa *make* para compilar el programa. -* Usa *make* para instalar el programa.(Requiere *sudo*) - -=== Autoconf -En muchas ocasiones las diferencias en el hardware y sistema operativo -hacen imposible para los desarrolladores el poder compilar el código -usando solo un *makefile*, algunas formas de solucionar esto fueron -escribir diferentes *makefile* para los diferentes escenarios o proveer uno -que fuera fácil de modificar. Con el tiempo evolucionó a scripts que -generan de forma automática el *makefile* haciendo un análisis de diferentes -aspectos del sistema en el que se ejecutan. - -*autoconf* nos ayuda a generar un *makefile* para esto genera un script -llamado *configure*, este es el encargado de analizar el sistema y generar -el *makefile* adecuado. - -Para poder usar *autoconf* es necesario que los desarrolladores incluyan -un archivo llamado *configure.ac* o *configure.in*. - -*configure* algunas opciones para personalizar la instalación, estas -opciones pueden ser consultadas con el siguiente comando. - -[source,shell] - ./configure --help - -==== Autoreconf -En ocasiones no es suficiente con ejecutar *autoconf*, para estos casos -existe *autoreconf* esta herramienta se encarga de ejecutar *autoconf* -junto con algunas otras herramientas que son necesarias en el proceso -de generar un script de configuración. - -Ejemplo de uso. -[source,shell] -autoreconf -i - -=== Ventajas y desventajas de compilar los programas - -==== Ventajas -* Los programas pueden ser adaptados a nuestras necesidades. -* Podemos instalar versiones especificas. -* Podemos tener múltiples versiones instaladas al mismo tiempo. -* Podemos optimizar los programas para nuestro hardware. - -==== Desventajas -* Se necesitan conocimientos específicos para compilar. -* Se vuelve complicado administrar todos los programas que instalamos -de esta forma. -* Se necesita experiencia para optimizar los programas. -* Se necesita tener mucho tiempo libre para hacer pruebas. - -[#manejador_paquetes] -== Manejador de paquetes -Debido a los problemas que tiene compilar los programas con el tiempo -surgieron los manejadores de paquetes, estos hacen mas fácil la tarea -de administrar los programas que instalamos. - -Un paquete incluye todos los archivos necesarios para la ejecución de -un programa, esto incluye binarios previamente compilados, información -sobre las dependencias y archivos de configuración. - -Los paquetes también incluyen scripts que pueden ser ejecutados durante -cualquier punto de la instalación. - -Los manejadores de paquetes tienen un modelo de dependencias, esto garantiza -que todas las librerías y otros programas de los que depende un paquete sean -instalados previamente. - -=== Formatos -En linux hay dos principales formatos de paquetes que son usados por -la mayoría de las distribuciones son *rpm* y *deb*. - -*rpm* fue creado para RedHat y es heredado por todas las distros basadas -en esta. De la misma forma *deb* es el formato de Debian, y es compartido -por sus derivadas. - -Cada uno de estos formatos tiene una herramienta encargada de instalar -y desinstalar los paquetes. Para *rpm* el instalador de paquetes es *rpm* -y *dpkg* es el respectivo de *deb*. - -==== Comandos básicos -Instalar un paquete -[source,shell] -rpm -i nombre_del_paquete.rpm -dpkg --install nombre_del_paquete.deb - -Desinstalar un paquete -[source,shell] -rpm -e nombre_del_paquete -dpkg --remove nombre_del_paquete - -Listar los paquetes instalados -[source,shell] -rpm -qa -dpkg -l - -==== Práctica -Instala el paquete cowsay que se encuentra en el directorio -/tmp/material/cowsay - -=== Repositorios -Un repositorio es un servidor que funciona como un almacén de paquetes, -los repositorios son mantenidos por el equipo desarrollador de cada -distribución, de esta forma controlan las versiones de cada paquete para -asegurarse de que son compatibles entre si. - -Por lo general las distros tienen una versión de cada paquete para -cada tipo de arquitectura a la que dan soporte (64-bits, 32-bits, arm, -etc), también suelen almacenar varias versiones del mismo paquete. - -=== Manejadores de paquetes de alto nivel -Los manejadores de alto nivel ayudan a hacer mas simple las tareas -de buscar y descargar paquetes, instalar dependencias de forma automática -y hacer actualizaciones de paquetes. - -Este tipo de manejadores de paquetes se conecta con los repositorios de -la distro para buscar y descargar los paquetes que queremos instalar, -además puede consultar si hay versiones mas recientes de los paquetes -que tenemos instalados para que estos sean actualizados. - -Otra de sus funciones es que pueden consultar en que paquete se encuentra -algún archivo en específico, - -Los manejadores de paquetes para las principales distribuciones son los -siguientes. - -Para RedHat y derivadas. -[source,shell] -yum - -Para Debian y derivadas. -[source,shell] -apt - -Para Arch y derivadas. -[source,shell] -pacman - -==== Comando básicos -Buscar un paquete en los repositorios. -[source,shell] -yum search nombre_del_paquete -apt search nombre_del_paquete -pacman -Ss nombre_del_paquete - -Instalar un paquete desde los repositorios. -[source,shell] -yum install nombre_del_paquete -apt install nombre_del_paquete -pacman -S nomre_del_paquete - -Desinstalar un paquete. -[source,shell] -yum remove nombre_del_paquete -apt remove nombre_del_paquete -pacman -R nombre_del_paquete - -Actualizar todos los paquetes instalados. -[source,shell] -apt update && apt upgrade -yum update -pacman -Su - -Buscar un archivo dentro de los paquetes de los repositorios. -[source,shell] -yum provides nombre_del_archivo -apt-file search nombre_del_archivo -pacman -F nombre_del_archivo - -==== Práctica -Instala los paquetes *fortune* y *apt-file* desde los repositorios. - -=== Práctica -Compila e instala los programas *cmatrix* y *sl* desde el codigo. - -Descarga el codigo usando. -[source,shell] -git clone https://github.com/abishekvashok/cmatrix.git -git clone https://github.com/mtoyoda/sl.git - diff --git a/docs/modules/nivel_0/pages/dia_2/permisos.adoc b/docs/modules/nivel_0/pages/dia_2/permisos.adoc deleted file mode 100644 index 5b39cd8..0000000 --- a/docs/modules/nivel_0/pages/dia_2/permisos.adoc +++ /dev/null @@ -1,425 +0,0 @@ -= Permisos - -:table-caption: Tabla -:figure-caption: Figura - -Cada archivo tiene nueve permisos que determinan qué operaciones se pueden realizar sobre el y por quién. - ----- -$ ls -l vfd.txt --rw-r--r-- 1 violet baudelaire 174 Sep 13 06:54 vfd.txt ----- - -Estos permisos están agrupados en tres conjuntos: - -* Permisos para el propietario del archivo -* Permisos para grupo de propietarios del archivo -* Permisos para el resto de usuarios - -.Permisos de archivo -image::dia_2/permisos/permisos.png["Permisos de archivo"] - -[#bits] -== Bits - -Cada conjunto de permisos tiene tres bits: - -* Un bit de lectura -* Un bit de escritura -* Un bit de ejecución. - -.Efecto de los permisos en archivos y directorios -[cols="^.^1,^.^1,^.^1,.^1,.^1", options="autowidth, header"] -|=== -|Permiso -|Octal -|Binario -|Archivo -|Directorio - -|`r` -|4 -|100 -|Leer el contenido del archivo. -|Listar el contenido del directorio. - -|`w` -|2 -|010 -|Modificar/eliminar el archivo. -|Crear/eliminar archivos. - -|`x` -|1 -|001 -|Ejecutar el archivo. -|Acceder al directorio. -|=== - - -[#comandos] -== Comandos - -[#ls] -=== ls - -Lista el contenido de un directorio. - ----- -ls [OPCIONES] [ARCHIVO] ----- - -[cols=".^1,.^1", options="autowidth, header"] -|=== -|Opcion -|Descripción - -|`-a` + -`--all` -|Lista todos los archivos, incluyendo los ocultos. - -|`-d` + -`--directory` -|Muestra información del directorio, no de su contenido. - -|`-h` + -`--human-readable` -|Muestra el tamaño de los archivos en formato legible para los humanos. - -|`-l` -|Utiliza el formato de listado largo. - -|`-S` -|Lista los archivos por tamaño, en orden descendente. - -|`-t` -|Lista los archivos por fecha de modificación, en orden descendente. -|=== - - -[#chmod] -=== chmod - -Modifica los permisos de un archivo. - ----- -chmod [OPCIONES]... MODO ARCHIVO ----- - -[WARNING, caption=IMPORTANTE] -==== -Solo el dueño del archivo y el superusuario pueden cambiar los permisos de un archivo. -==== - -[cols=".^1,.^1", options="autowidth, header"] -|=== -|Opcion -|Descripción - -|`-R` + -`--recursive` -|Cambia los permisos de archivos y directorios recursivamente. -|=== - -.Codificación de permisos -[cols="^.^1,^.^1", options="autowidth, header"] -|=== -|Permiso -|Octal -|Binario - -|`---` -|0 - -|`--x` -|1 - -|`-w-` -|2 - -|`-wx` -|3 - -|`r--` -|4 - -|`r-x` -|5 - -|`rw-` -|6 - -|`rwx` -|7 -|=== - -[#ejemplo_chmod] -==== Ejemplo - -Para asignarle los siguientes permisos: - ----- -rw-r--r-- ----- - -al archivo `pozole`, siga los siguientes pasos: - -. Cree el archivo `pozole`: -+ ----- -touch pozole ----- - -. Ejecute el comando: -+ ----- -chmod 644 pozole ----- - -. Verifique los permisos del archivo `pozole`: -+ ----- -ls -l pozole --rw-r--r-- 1 frodo frodo 0 Oct 12 12:00 pozole ----- - - -[#chown] -=== chown - -Cambia el usuario y grupo propietarios de un archivo. - ----- -chown [OPCIONES] PROPIETARIO:GRUPO ARCHIVO ----- - -[cols=".^1,.^1", options="autowidth, header"] -|=== -|Opcion -|Descripción - -|`-R` + -`--recursive` -|El comando se ejecuta recursivamente. -|=== - -[#ejemplo_chown] -==== Ejemplo - -Para modificar el usuario y grupo del archivo `mole` de `frodo:frodo` a `root:root`, siga los siguientes pasos: - -. Cree el archivo `mole`: -+ ----- -touch mole ----- - -. Ejecute el comando: -+ ----- -sudo chown root:root mole ----- - -. Verifique el dueño y grupo del archivo `mole`: -+ ----- -ls -l mole --rw-rw-r-- 1 root root 0 Oct 12 12:00 mole ----- - - -[#chgrp] -=== chgrp - -Cambia el grupo propietario de un archivo. - ----- -chgrp [OPCIONES] GRUPO ARCHIVO ----- - -[cols=".^1,.^1", options="autowidth, header"] -|=== -|Opcion -|Descripción - -|`-R` + -`--recursive` -|El comando se ejecuta recursivamente. -|=== - -[#ejemplo_chgrp] -==== Ejemplo - -Para modificar el grupo del archivo `huarache` de `frodo` a `comida`, siga los siguientes pasos: - -. Cree el archivo `huarache`: -+ ----- -touch huarache ----- - -. Cree el grupo `comida`: -+ ----- -sudo groupadd comida ----- - -. Ejecute el comando: -+ ----- -sudo chgrp comida huarache ----- - -. Verifique el grupo del archivo `huarache`: -+ ----- -ls -l huarache --rw-rw-r-- 1 frodo comida 0 Oct 12 12:00 huarache ----- - - -[#actividades] -== Actividades - -. Crea el siguiente árbol de directorios: -+ ----- -animales/ -├── escarabajo -│ ├── hercules -│ └── verde -├── gato -│ ├── bengali -│ └── siames -├── tortuga -│ ├── caguama -│ └── leopardo -└── zorro - ├── artico - └── rojo ----- - -. Cambia los permisos del directorio _animales/escarabajo_ a: -+ ----- ---x------ ----- -+ -Utiliza el comando _ls_ en este directorio. - -. Cambia los permisos del archivo _animales/gato/siames_ a: -+ ----- --w------- ----- -+ -Utiliza el comando _cat_ en este archivo. - -. Cambia los permisos de todos los archivos en el directorio _animales/tortuga_ a: -+ ----- -rwx------ ----- -+ -Utiliza el comando _ls_ en este directorio. - -. Crea un nuevo grupo llamado `animalia`. -* Cambia el grupo del directorio _animales/zorro_ de `frodo` a `animalia`. - -. Cambia el propietario y grupo del directorio _animales_ de `frodo:frodo` a `root:root`. - - -[#respuestas] -=== Respuestas - -. Crea el siguiente árbol de directorios: -+ ----- -animales/ -├── escarabajo -│ ├── hercules -│ └── verde -├── gato -│ ├── bengali -│ └── siames -├── tortuga -│ ├── caguama -│ └── leopardo -└── zorro - ├── artico - └── rojo ----- -+ ----- -cp -r /tmp/material/animales/ . ----- - -. Cambia los permisos del directorio _animales/escarabajo_ a: -+ ----- ---x------ ----- -+ ----- -chmod 100 animales/escarabajo ----- -+ -Utiliza el comando _ls_ en este directorio. -+ ----- -ls animales/escarabajo -ls: cannot open directory 'animales/escarabajo': Permission denied ----- - -. Cambia los permisos del archivo _animales/gato/siames_ a: -+ ----- --w------- ----- -+ ----- -chmod 200 animales/gato/siames ----- -+ -Utiliza el comando _cat_ en este archivo. -+ ----- -cat animales/gato/siames -cat: animales/gato/siames: Permission denied ----- - -. Cambia los permisos de todos los archivos en el directorio _animales/tortuga_ a: -+ ----- -rwx------ ----- -+ ----- -chmod -R 700 animales/tortuga ----- -+ -Utiliza el comando _ls_ en este directorio. -+ ----- -ls -l animales/tortuga/ -total 0 --rwx------ 1 frodo frodo 0 Oct 12 12:00 caguama --rwx------ 1 frodo frodo 0 Oct 12 12:00 leopardo ----- - -. Crea un nuevo grupo llamado `animalia`. -+ ----- -sudo groupadd animalia ----- -* Cambia el grupo del directorio _animales/zorro_ de `frodo` a `animalia`. -+ ----- -sudo chgrp animalia animales/zorro ----- - -. Cambia el propietario y grupo del directorio _animales_ de `frodo:frodo` a `root:root`. -+ ----- -sudo chown root:root animales ----- diff --git a/docs/modules/nivel_0/pages/dia_2/procesos.adoc b/docs/modules/nivel_0/pages/dia_2/procesos.adoc deleted file mode 100644 index c7a726b..0000000 --- a/docs/modules/nivel_0/pages/dia_2/procesos.adoc +++ /dev/null @@ -1,130 +0,0 @@ -= Control de procesos - -:table-caption: Tabla -:figure-caption: Figura - -[#procesos] -== Proceso -Un proceso representa un programa en ejecución. Es una abstracción con la -cual podemos administrar y monitorizar la memoria, tiempo de ejecución y -recursos de entrada y salida. - -[#elementos] -== Elementos de un proceso -//// -Un proceso consiste en un espacio de memoria y un conjunto de estructuras -de datos dentro del kernel. Este espacio de memoria contiene el código y -librerías que el proceso ejecuta. Así como sus variables, pila e información -extra que el kernel mientras el proceso esta corriendo. -//// -Internamente el kernel guarda algunas piezas de información de cada proceso. -Estas son algunas de las mas importantes: - -* Un mapa del espacio de memoria del proceso. -* El estado actual del proceso (dormido, detenido, en ejecución, etc). -* La prioridad de ejecución del proceso. -* Información sobre los recursos usados por el proceso (CPU, memoria, etc). -* Información sobre los archivos y puertos de red abiertos por el proceso. -* El dueño del proceso. - -=== PID: ID de proceso -El kernel asigna un identificador único a cada proceso. Los PID son asignados -de acuerdo al orden en el que los procesos fueron creados. La mayoría de los -comandos que manipulan procesos requieren que se indique un PID para identificar -al objetivo de la operación. - -=== PPID: ID del proceso padre -En Linux cuando un proceso crea un nuevo proceso, al proceso recién creado se -le llama hijo y al proceso que lo lanzo padre. El PPID es el PID del proceso padre. - -=== UID: ID de propietario -EL UID de un proceso es el ID del usuario que es propietario del proceso, -solo el propietario y el superusuario pueden manipular el proceso. - -[#ps] -== Comando ps -El comando ps es la herramienta principal para monitorizar procesos. Con ps podemos -listar los procesos en ejecución así como su información. - -Ejemplo. -[source,shell] -ps aux - -* a - muestra todos los procesos. -* u - hace que la salida sea legible para usuarios. -* x - muestra los procesos que no tienen una terminal. - -Ejemplo con mas información. -[source,shell] -ps lax - -ps solo muestra la información de los procesos en el momento en el que se ejecuto. -No muestra información en tiempo real. - -== Señales -Las señales son solicitudes de interrupción a nivel de procesos. En Linux hay al -rededor de treinta tipos diferentes y son usadas de diferentes formas. - -* Pueden ser enviadas entre procesos como medio de comunicación. -* Pueden ser enviadas por la terminal cuando se presiona alguna combinación -de teclas específica. -* Pueden ser enviada por el administrador del sistema (con el comando kill). -* Pueden ser enviadas por el kernel cuando un procesos comete alguna infracción -como dividir entre cero. -* Pueden ser enviadas por el kernel para notificar a un proceso sobre una condición -de interés por ejemplo cuando un proceso hijo termina. - -Cuando una señal es recibida puede ocurrir una de las siguientes cosas. Si el proceso definió -un comportamiento para la señal, entonces es manejada por el proceso. En otro caso -el kernel toma una acción por defecto. El comportamiento por defecto cambia dependiendo del tipo de señal. - -=== Señal INT -Esta señal es enviada por la terminal cuando el usuario presiona Ctrl-c. -Es una solicitud de terminar la ejecución actual. - -=== Señal TERM -Esta señal es una solicitud de terminar completamente la ejecución. -Se espera que el proceso que recibe la señal haga la limpieza necesaria y termine. - -=== Señal KILL -Esta señal detiene por completo la ejecución del proceso. No puede ser cachada, -bloqueada o ignorada por el proceso, el kernel es el encargado terminar el proceso. - -== Comando kill -El comando kill nos sirve para terminar la ejecución de un proceso, -por defecto envía la señal TERM, aunque también nos ayuda a enviar otras señales. - -Ejemplos -[source,shell] -kill PID - -[source,shell] -kill -s TERM PID - -[source,shell] -kill -s KILL PID - -== Comando htop -El comando ps esta limitado ya que no refleja la información de los procesos -en tiempo real, lo cual puede llegar a ser necesario. Para resolver esta -problemática podemos usar el comando htop, el cual nos muestra una lista de los -procesos con la información que muestra ps, pero actualiza la información cada -pocos segundos. Además muestra el uso total de recursos de todos los procesos. - -[#proc] -== El directorio /proc -En el directorio /proc el kernel expone parte de la información que tiene -sobre los procesos. Dentro se encuentra un directorio para cada PID y dentro -se encuentra la información del proceso correspondiente. - -Algunos archivos importantes en /proc son -[cols="2,5"] -|=== -|cmdline|Contiene el comando completo usado para la ejecución -|exe|Es un link al ejecutable usado. -|cwd |Es un link al directorio desde el cual se ejecuto. -|environ| Contiene todas las variables de entorno del proceso -|fd | Es un subdirectorio, contiene un link por cada descriptor de archivo abierto -|status| Contiene el estado del proceso -|=== - diff --git a/docs/modules/nivel_0/pages/dia_2/usuarios.adoc b/docs/modules/nivel_0/pages/dia_2/usuarios.adoc deleted file mode 100644 index 11ebffb..0000000 --- a/docs/modules/nivel_0/pages/dia_2/usuarios.adoc +++ /dev/null @@ -1,343 +0,0 @@ -= Usuarios - -:table-caption: Tabla -:figure-caption: Figura - -Un usuario es una entidad que puede ejecutar procesos y poseer archivos. Un usuario suele asociarse con un nombre de usuario; por ejemplo, un sistema podría tener un usuario llamado _celeste_. - -Sin embargo, el kernel no administra los nombres de usuario; en cambio, identifica a los usuarios mediante identificadores numéricos simples llamados ID de usuario. - -Existen tres tipos de usuarios: - -. Usuario `root`. El administrador del sistema -. Usuarios especiales. Cuentas del sistema -. Usuarios regulares - - -[#grupos] -== Grupos - -Los grupos son conjuntos de usuarios. El objetivo principal de los grupos es permitir que un usuario comparta el acceso a archivos con otros miembros de un grupo. - - -[#archivos_usuario] -== Archivos de usuarios - -[#etc_passwd] -=== /etc/passwd - -El archivo _/etc/passwd_ asigna nombres de usuario a IDs de usuario. - -.Una lista de usuarios en _/etc/passwd_ ----- -root:x:0:0:Superuser:/root:/bin/sh -daemon:*:1:1:daemon:/usr/sbin:/bin/sh -bin:*:2:2:bin:/bin:/bin/sh -sys:*:3:3:sys:/dev:/bin/sh -nobody:*:65534:65534:nobody:/home:/bin/false -juser:x:3119:1000:J. Random User:/home/juser:/bin/bash -beazley:x:143:1000:David Beazley:/home/beazley:/bin/bash ----- - -Cada línea representa un usuario y tiene siete campos separados por dos puntos. - -. Nombre del usuario. -. Contraseña cifrada del usuario. En la mayoría de los sistemas Linux, la contraseña ya no se almacena en el archivo _passwd_, sino en el archivo _shadow_. -. ID del usuario (UID), que es la representación del usuario en el kernel. El ID de usuario debe ser único. -. ID del grupo (GID), que debe ser una de las entradas numeradas en el archivo _/etc/group_. El ID del grupo debe ser único. -. Nombre real del usuario. -. Directorio de inicio del usuario. -. Shell del usuario (el programa que se ejecuta cuando el usuario ejecuta una terminal sesión). - -.Una entrada del archivo _passwd_ -image::dia_2/usuarios/passwd.png["Una entrada del archivo _passwd_"] - - -[#etc_group] -=== /etc/group - -El archivo _/etc/group_ contiene los nombres de los grupos en el sistema y una lista de los miembros de cada grupo. - -.Una lista de grupos en _/etc/group_ ----- -root:*:0:juser -daemon:*:1: -bin:*:2: -sys:*:3: -adm:*:4: -disk:*:6:juser,beazley -nogroup:*:65534: -user:*:1000: ----- - -Cada línea representa un grupo y tiene cuatro campos separados por dos puntos: - -. Nombre del grupo. -. Contraseña cifrada del grupo. -. ID del grupo (GID). -. Lista de miembros del grupo, separados por comas. - -.Una entrada del archivo _groups_ -image::dia_2/usuarios/groups.png["Una entrada del archivo _group_"] - -[TIP, caption=TIP] -==== -Para ver los grupos a los que perteneces, utiliza el comando `groups`. -==== - - -[#shadow] -=== shadow - -El archivo _/etc/shadow_ contiene la información de autenticación de los usuarios. - -.Una lista de usuarios en _/etc/shadow_ ----- -root:$6$xP.qrgsIXaIaS4h6$ZeA/pqmicjEBSRduFToBCX.fYUNqAwOQ/zP.KUUkIWBLQog6znFb.81X/V3ztyfTC3uxR4Ws5TCEHJS7Hvgbi/::0:99999:7::: -bin:*:18505:0:99999:7::: -daemon:*:18505:0:99999:7::: -adm:*:18505:0:99999:7::: -lp:*:18505:0:99999:7::: -nobody:*:18505:0:99999:7::: ----- - -Cada línea representa un usuario y tiene nueve campos separados por dos puntos: - -. Nombre del usuario. Es el mismo que en el archivo _/etc/passwd_. -. Contraseña cifrada del usuario. -. Fecha del último cambio de contraseña. -. Número mínimo de días entre cambios de contraseña. -. Número máximo de días entre cambios de contraseña. -. Número de días de anticipación para advertir a los usuarios sobre el vencimiento de la contraseña. -. Días después del vencimiento de la contraseña en que se deshabilita la cuenta. -. Fecha de vencimiento de la cuenta. -. Un campo reservado para uso futuro que actualmente siempre está vacío. - - -[#comandos] -== Comandos - -[#useradd] -=== useradd - -Crea un nuevo usuario. - ----- -useradd [OPCIONES]... USUARIO ----- - -[cols=".^1,.^1", options="autowidth, header"] -|=== -|Opcion -|Descripción - -|`-d` + -`--home-dir` -|Establece el directorio de inicio del usuario. - -|`-s` + -`--shell` -|Establece el shell del usuario. - -|`-u` + -`--uid` -|Establece el ID del usuario (UID). -|=== - -[#ejemplo_useradd] -==== *Ejemplo* - -Para crear el usuario `anquilosaurio`, ejecute el comando: - ----- -sudo useradd anquilosaurio ----- - - -[#userdel] -=== userdel - -Elimina un usuario. - ----- -userdel [OPCIONES]... USUARIO ----- - -[cols=".^1,.^1", options="autowidth, header"] -|=== -|Opcion -|Descripción - -|`-r` + -`--remove` -|Elimina el directorio personal del usuario. -|=== - -[#ejemplo_userdel] -==== *Ejemplo* - -Para eliminar el usuario `anquilosaurio`, ejecute el comando: - ----- -sudo userdel anquilosaurio ----- - - -[#groupadd] -=== groupadd - -Crea un nuevo grupo. - ----- -groupadd [OPCIONES]... GRUPO ----- - -[cols=".^1,.^1", options="autowidth, header"] -|=== -|Opcion -|Descripción - -|`-g` + -`--gid` -|Establece el ID del grupo (GID). -|=== - -[#ejemplo_1_groupadd] -==== *Ejemplo 1* - -Para crear el grupo `dinosaurio`, ejecute el comando: - ----- -sudo groupadd dinosaurio ----- - -[#ejemplo_2_groupadd] -==== *Ejemplo 2* - -Para agregar al usuario `frodo` al grupo `dinosaurio`, ejecute el comando: - ----- -sudo usermod -aG dinosaurio frodo ----- - - -[#groupdel] -=== groupdel - -Elimina un grupo. - ----- -groupdel [OPCIONES]... GRUPO ----- - -[#ejemplo_groupdel] -==== *Ejemplo* - -Para eliminar el grupo `dinosaurio`, ejecute el comando: - ----- -sudo groupdel dinosaurio ----- - - -[#passwd] -=== passwd - -Actualiza la contraseña de un usuario. - ----- -passwd [OPCIONES]... USUARIO ----- - -[cols=".^1,.^1", options="autowidth, header"] -|=== -|Opcion -|Descripción - -|`-d` + -`--delete` -|Elimina la contraseña de la cuenta de un usuario. -|=== - -Como pauta general, las contraseñas deben constar de 6 a 8 caracteres, incluyendo uno o más caracteres de los siguientes conjuntos: - -* Alfabeto en minúsculas -* Dígitos del 0 al 9 -* Signos de puntuación - -[WARNING, caption=IMPORTANTE] -==== -`passwd` rechazará cualquier contraseña que no sea lo suficientemente compleja. -==== - -[#sudo] -=== sudo - -Permite ejecutar un comando como superusuario. - ----- -sudo [OPCIONES]... COMANDO ----- - - -[#actividades] -== Actividades - -. Crea un nuevo usuario llamado `pistache`. -* Asigna una contraseña al usuario `pistache`. -* Revisa los archivos _/etc/passwd_, _/etc/group_ y _/etc/shadow_. -. Crea un nuevo grupo llamado `helado`. -* Agrega al usuario `pistache` al grupo `helado`. -* Verifica a que grupos pertenece el usuario `pistache`. -. Elimina al usuario `pistache`. -. Modifica la contraseña de tu usuario. - - -[#respuestas] -=== Respuestas - -. Crea un nuevo usuario llamado `pistache`. -+ ----- -sudo useradd pistache ----- -* Asigna una contraseña al usuario `pistache`. -+ ----- -sudo passwd pistache ----- -* Revisa los archivos _/etc/passwd_, _/etc/group_ y _/etc/shadow_. -+ ----- -cat /etc/passwd -cat /etc/group -sudo cat /etc/shadow ----- - -. Crea un nuevo grupo llamado `helado`. -+ ----- -sudo groupadd helado ----- -* Agrega al usuario `pistache` al grupo `helado`. -+ ----- -sudo usermod -aG helado pistache ----- -* Verifica a que grupos pertenece el usuario `pistache`. -+ ----- -groups pistache ----- - -. Elimina al usuario `pistache`. -+ ----- -sudo userdel pistache ----- - -. Modifica la contraseña de tu usuario. -+ ----- -passwd ----- \ No newline at end of file diff --git a/docs/modules/nivel_0/pages/dia_3/bash.adoc b/docs/modules/nivel_0/pages/dia_3/bash.adoc deleted file mode 100644 index 8a17525..0000000 --- a/docs/modules/nivel_0/pages/dia_3/bash.adoc +++ /dev/null @@ -1,42 +0,0 @@ -= Bash - -:table-caption: Tabla -:figure-caption: Figura - -Un shell es un programa diseñado para leer comandos escritos por un usuario y ejecutar -los programas adecuados para responder a dichos comandos. También puede ser llamado -interprete de comandos. - -Los shells no solo fueron diseñados para un uso interactivo. - -Si puedes escribir comandos en un shell, entonces puedes escribir scripts. -Un script de shell es una serie de comandos escritos en un archivo. El shell -lee los comandos desde el archivo tal como si fueran escritos dentro de la terminal - -Ejemplos de shells son: - -* sh -* bash -* zsh -* fish - -//// -[#filosofía] -== Filosofía - - -[#pipes] -== Pipes - - -[#variables] -== Variables - - -[#comandos_filtrado] -== Comandos de filtrado - - -[#estructuras_control] -== Estructuras de control -//// diff --git a/docs/modules/nivel_0/pages/dia_3/filtrado.adoc b/docs/modules/nivel_0/pages/dia_3/filtrado.adoc deleted file mode 100644 index 80f6d5e..0000000 --- a/docs/modules/nivel_0/pages/dia_3/filtrado.adoc +++ /dev/null @@ -1,96 +0,0 @@ -= Comandos de filtrado - -En linux trabajamos mucho con archivos de texto, debido a esto tenemos -a nuestra disposición una variedad de comandos que ayudan a filtrar la -información que se encuentra en este tipo de archivos. - - -== Grep -*grep* es un comando de unix que nos permite filtrar lineas de un -archivo de texto, *grep* busca patrones de texto en cada linea y solo -muestra las lineas en las que encuentra el patrón. - -Por lo general estos patrones son cadenas de texto pero no se limitan -solo a patrones de este tipo. - -Forma de uso. -[source,shell] -grep [opciones] patron [archivo] -grep [opciones] [-e patron]... [-f archivo]... [archivo] - -Algunas opciones de *grep* -[cols="1,5"] -|=== -|`-i` + -`--ignore-case`| Ignora si las letras son mayúsculas o minúsculas. -|`-v` + -`--invert-`| En lugar de mostrar las lineas que coinciden los patrones, -muestra las lineas que no coinciden. -|=== - -=== Práctica -Para las practicas de esta sección copia el archivo -/tmp/material/datos/datos.csv - -Filtra las lineas del archivo de datos que copiaste para que solo muestre -las lineas que contienen la palabra "Fire". - -== Head y Tail -*head* y *tail* son comandos que muestran solo las primeras y las ultimas -lineas de un archivo respectivamente. - -Opción importante -[cols="1,5"] -|=== -|`-n` *N* | Muestra *N* lineas. -|=== - -=== Práctica -. Muestra las lineas de la 5 a la 10 del archivo de datos. -. Muestra la penúltima linea del archivo de datos. - -== Cut -*cut* es un comando que se usa en archivos que contienen diferentes -campos en cada linea, y nos permite mostrar solo los campos seleccionados, -para que *cut* funcione es necesario que los campos estén separados por -un carácter especifico. - -Opciones importantes. -[cols="1,5"] -|=== -|`-d` *D* | De esta forma indicamos que *D* delimita los campos dentro del archivo. -|`-f` *F* | De esta forma indicamos cuales son los campos que queremos mostrar. *F* es una lista de números. -|=== - -=== Práctica -Muestra el segundo y sexto campo de las primeras 10 lineas del archivo de datos. - -== Sort -*sort* ordena las lineas de un archivo, para esto podemos indicar los -campos que se usaran para el ordenamiento y la forma en la que se ordenaran. - -Opciones de *sort*. -[cols="1,4"] -|=== -|`-k` *K*| *K* es la lista de campos usados en el ordenamiento. -|`-t` *T*| *T* es el separador de campos. -|`-n` | Ordena las lineas en orden numérico. -|`-r` | Usa el orden inverso. -|=== - -=== Práctica -Muestra la segunda columna por orden alfabético. - -== Wc -*wc* cuenta lineas, palabras o caracteres dentro de un archivo. - -Opciones -[cols="1,4"] -|=== -|`-c` | Muestra el total de caracteres. -|`-w` | Muestra el total de palabras. -|`-l` | Muestra el total de lineas. -|=== - -=== Práctica -Muestra el total de lineas dentro del archivo de datos que contienen la palabra water. diff --git a/docs/modules/nivel_0/pages/dia_3/pipes.adoc b/docs/modules/nivel_0/pages/dia_3/pipes.adoc deleted file mode 100644 index ee03dfe..0000000 --- a/docs/modules/nivel_0/pages/dia_3/pipes.adoc +++ /dev/null @@ -1,53 +0,0 @@ -= Redirección y Pipes - -== Redirección -Cada proceso tiene al menos tres canales de comunicación. - -* Entrada estándar (STDIN) -* Salida estándar (STDOUT) -* Error estándar (STDERR) - -Muchos comandos de UNIX aceptan su entrada desde STDIN y escriben su -salida a STDOUT. Esto permite enlazar comandos como si se tratara de bloques de construcción. - -El shell interpreta los símbolos <, > y >> como instrucciones de redirigir -las entradas desde algún archivo, al igual que las salidas. - -Comportamiento de los operadores <, >, >> y 2> -[cols="1,3"] -|=== -|`<`| Usa el contenido de un archivo como STDIN -|`>`| Redirige STDOUT a un archivo, sustituye el contenido previo del archivo -|`>>`| Redirige STDOUT a un archivo, escribe al final del contenido previo del archivo -|`2>`| Redirige STDERR a un archivo -|=== - -Uso de los operadores <, >, >>. -[source,shell] -comando < archivo-entrada -comando > archivo-salida -comando >> archivo-salida -comando 2> archivo-error - -=== Práctica -. Copia el contenido del archivo */etc/passwd* al archivo */tmp/passwd* usando el comando *cat*. - -. Usa el comando *ls* con un directorio que no exista, y guarda el mensaje de error en un archivo. - -. Agrega la linea "Esto es una copia de /etc/passwd" al final del archivo */tmp/passwd* usando el comando *echo*. - -== Pipes -Para enviar la salida estándar de un comando como entrada estándar de otro, -usamos el símbolo pipe (|), de esta forma se pueden enlazar tantos comandos como se desee. - -Uso del operador | -[source,shell] -comando1 | comando2 | comando3 - -La salida del comando1 es usada como entrada para el comando2 y -la salida del comando 2 es usada comoentrada para el comando3. - -Ejemplo. -[source,shell] -head /proc/cpuinfo -head /proc/cpuinfo | tr a-z A-Z diff --git a/docs/modules/nivel_0/pages/dia_3/scripts.adoc b/docs/modules/nivel_0/pages/dia_3/scripts.adoc deleted file mode 100644 index d7dc1b0..0000000 --- a/docs/modules/nivel_0/pages/dia_3/scripts.adoc +++ /dev/null @@ -1,333 +0,0 @@ -= Scripts - -:table-caption: Tabla -:figure-caption: Figura - -Un script de shell es una serie de comandos escritos en un archivo; el shell lee los comandos del archivo tal como lo haría si los escribieras en una terminal. - -Los scripts de Bash comienzan con la siguiente línea, que indica que el programa `/bin/bash` debe ejecutar los comandos en el archivo de script. - ----- -#!/bin/bash ----- - -.Estructura de un script de Bash ----- -#!/bin/bash - -# Soy un comentario -# Soy otro comentario - -# Instruccion 1 -# Instruccion 2 -... -# Instrucción n ----- - -[NOTE, caption=NOTA] -==== -Se conoce como shebang al conjunto de caracteres #!. Con excepción del shebang en la parte superior de un script, un # al comienzo de una línea indica un comentario; es decir, el shell ignora cualquier cosa en la línea después de #. -==== - -Para ejecutar un script utilice el comando `bash` seguido del nombre del script: - ----- -bash mi_script.sh ----- - -o de forma alternativa: - ----- -./mi_script.sh ----- - -*Actividades* - -* Escriba un script que imprima la frase "Hola, Mundo!". - - -[#variables] -== Variables - -En matemáticas se llama variable a cualquier símbolo que representa a cualquier valor de los comprendidos en un conjunto. - ----- -x = 3.141592 -z = 1.618034 ----- - -En programación una variable es un contenedor con nombre para un conjunto particular de bits o tipo de datos. - - -[#asignacion] -=== Asignación - -Para asignar un valor a una variable, siga el formato: - ----- -nombre_variable=valor ----- - -Una variable puede contener un número, un carácter o una cadena de caracteres. Por ejemplo: - ----- -nombre=juan -edad=23 -tipo_sangre=A ----- - -[NOTE, caption=NOTA] -==== -En Bash no es necesario declarar una variable, solo asignarle un valor. -==== - - -[#valor] -=== Valor - -Para obtener el valor de una variable, utilice el símbolo `$` seguido del nombre de la variable: - ----- -$nombre_variable ----- - -En particular, para imprimir el valor de una variable, siga el formato: - ----- -echo $mi_variable ----- - -Por ejemplo: - ----- -echo $edad -23 ----- - -[#variables_especiales] -== Variables especiales - -Son variables que el shell establece internamente y que están disponibles para el usuario. - -.Variables especiales del shell -[cols="^.^1,.^1", options="autowidth, header"] -|=== -|Variable -|Descripción - -|`$0` -|Nombre del script. - -|`$n` -|Argumento `n` pasado al script. - -|`$#` -|Número de argumentos pasados al script. - -|`$@` -|Todos los argumentos pasados al script. -|`$$` - -|ID de proceso del shell actual. - -|`$?` -|Código de salida del último comando que el shell ejecutó. -|=== - - -[#codigos_salida] -=== Códigos de salida - -Cuando un programa finaliza, deja un _código de salida_, un valor numérico también conocido como _código de error_ o _valor de salida_. Cuando el código de salida es cero (0), generalmente significa que el programa se ejecutó sin problemas. Sin embargo, si el programa tiene un error, suele salir con un número distinto de 0. - -*Actividades* - -. Ejecuta el script _variables_especiales.sh_. -. Imprime el código de salida del script _variables_especiales.sh_. - - -[#condicionales] -== Condicionales - -Los condicionales se utilizan en los lenguajes de programación para realizar cualquier tarea de toma de decisiones. - -.Estructura general de un condicional en Bash ----- -if [ COMANDO_1 ] -then - # Código -elif [ COMANDO_2 ] -then - # Código -else - # Código -fi ----- - -Las palabras _if_, _then_, _elif_, _else_ y _fi_ son palabras reservadas o palabras clave (keywords), es decir, que tiene un significado especial para el shell. - -.Operadores de comparación numérica -[cols="^.^1,.^1", options="autowidth, header"] -|=== -|Operador -|Descripción - -|-gt -|Es mayor que - -|-lt -|Es menor que - -|-ge -|Es mayor que o igual a - -|-le -|Es menor que o igual a - -|-eq -|Es igual a - -|-ne -|No es igual a -|=== - -.Ejemplo de condicional ----- -#!/bin/bash - -mayoria_edad=18 -tercera_edad=60 -edad=15 - -if [ $edad -ge $tercera_edad ] -then - echo "Eres un adulto mayor" -elif [ $edad -ge $mayoria_edad ] -then - echo "Eres mayor de edad" -else - echo "Eres menor de edad" -fi ----- - - -[#operadores_logicos] -=== Operadores lógicos - -[#and] -==== *AND* - -El operador lógico `&&` (and) funciona de la siguiente forma: - ----- -COMANDO_1 && COMANDO_2 ----- - -El shell ejecuta el `COMANDO_1`: - -. Si su código de salida es 0, entonces el shell ejecuta el `COMANDO_2`. -. En caso contrario, el shell no ejecuta el `COMANDO_2`. - -.Ejemplo de condicional utilizando el operador lógico && ----- -#!/bin/sh - -if [ $1 -gt 1 ] && [ $1 -lt 10 ] -then - echo "El numero $1 es mayor que 1 y menor que 10" -fi ----- - -[#or] -==== *OR* - -El operador lógico `||` (or) funciona de la siguiente forma: - ----- -COMANDO_1 || COMANDO_2 ----- - -El shell ejecuta el `COMANDO_1`: - -. Si su código de salida es 0, el shell no ejecuta el `COMANDO_2`. -. En caso contrario, el shell ejecuta el `COMANDO_2`. - -.Ejemplo de condicional utilizando el operador lógico || ----- -#!/bin/sh - -if [ $1 -lt 10 ] || [ $1 -gt 20 ] -then - echo "El numero $1 es menor que 10 o mayor que 20" -fi ----- - - -[#ciclos] -== Ciclos - -Un ciclo es una secuencia de comandos que se ejecutan repetidas veces, hasta alcanzar una condición determinada. - -Hay dos tipos de bucles en Bash: - -* for -* while - - -[#for] -=== for - -.Estructura básica del ciclo for en Bash ----- -for VARIABLE in ELEMENTOS -do - # Código -done ----- - -Las palabras _for_, _in_, _do_ y _done_ son palabras reservadas. - -.Imprime los números del 1 al 5 utilizando el ciclo for ----- -#!/bin/bash - -for numero in 1 2 3 4 5 -do - echo $numero -done ----- - - -[#while] -=== while - -.Estructura básica del ciclo while en Bash ----- -while COMANDO -do - # Código -done ----- - -Las palabras _while_, _do_ y _done_ son palabras reservadas. - -.Imprime los números del 1 al 5 utilizando el ciclo while ----- -#!/bin/bash - -x=1 - -while [ $x -le 5 ] -do - echo $x - x=$(( $x + 1 )) -done ----- - - -[#actividades] -== Actividades - -. Utilizando el ciclo `for`, escribe un script que imprima los número pares entre el 1 y el 50. -. Utilizando el ciclo `while`, escribe un script que imprima los número impares entre el 1 y el 50. -. Escribe un script que determine el mayor de tres números. \ No newline at end of file