Programación

Unix

>

_

Presentación

Instrucciones para la presentación

1.  Piense en el nombre de un animal que inicie con la primera letra de su nombre.

2. Este no deberá repetirse.

3. Al presentarse deberá completar la siguiente frase: Mi nombre es: _______ y he venido sobre un/a: _______ a la escuela desde _____

4. Dar respuesta a las preguntas:

4.1  ¿Porqué estudio está carrera?

4.2  ¿Qué me ha gustado de la carrera hasta ahora?

Temas del curso

Unidad 1. Introducción

1.1. Sistemas unix/linux.

1.2. El sistema de archivos.

Temas del curso

Unidad 2. El shell.

2.1. Uso del shell.
2.2. Programación en el shell
2.2.1. Variables, operadores y expresiones.

2.2.2. Control de flujo.
2.2.3. Funciones.
2.2.4. Expresiones. Regulares.
2.2.5. Entrada y salida estándar.
2.2.6. Entubamientos.

Temas del curso

Unidad 3. Programación con entrada y salida estándar.

3.1. Entrada y salida estándar.
3.2. Argumentos de programas.
3.3. Archivos.

3.4. Depuración.

Temas del curso

Unidad 4. Llamadas al sistema

4.1. Entrada y salida de bajo nivel.

4.2. Procesos.
4.3. Señales e interrupciones.

Temas del curso

Unidad 5. Programación del kernel.

5.1. Compilación e instalación del kernel y módulos. 5.2. Creación de módulos.
5.3. Programación de módulos para hardware.

Temas del curso

Unidad 6 El entorno gráfico

6.1. Servidor x
6.2. Lenguajes y juegos de herramientas
6.2.1. tk, gtk , qt
6.2.4. wxwidgets
6.2.5. Otros
6.3. Administrador de ventanas
6.4. Comunicación entre componentes y procesos. 6.5. Eventos y salida.
6.6. Programación de scripts.
6.7. Generadores de código.
6.8. Consideraciones de diseño.

Políticas de clase

  • Teléfono móvil en modo silencio.
  • Las llamadas urgentes /prio se contestan fuera del salón.
  • Turnos de una sola persona para ir al WC.
  • Dos faltas a la semana sin justificante perderían derecho a las cuestiones de aprendizaje.
  • Levantar la mano para participar.
  • Respetar la participación de cada alumno.

Lineamientos de clase

  • Mantenerse informado acerca de las lecturas, actividades y tareas del curso asistiendo por lo menos dos veces por semana, durante la duración del curso.
  • Cumplir dentro del aula virtual con todas las tareas, foros y actividades detalladas por el programa académico y el profesor, en el tiempo y forma establecidos.
  • El incumplimiento de las tareas en tiempo y forma llevarán a una no aprobación del curso.

Lineamientos de clase

  • Mantenerse informado acerca de las actividades del curso asistiendo mínimo dos veces por semana, durante la duración del curso.
  • Cumplir dentro del aula virtual con todas las tareas, en el tiempo y forma establecidos.
  • El incumplimiento de las tareas en tiempo y forma llevarán a una no aprobación del curso.

  • Realizar el seguimiento personal desde el Aula Virtual.

  • Estar pendiente de los resultados de las evaluacion/es parcial/es y final/es.

  • Notificar al tutor por escrito, con copia a la coordinación académica, si, por alguna razón excepcional, se encontrara en una circunstancia especial que le impidiera continuar con el curso y recibir así indicaciones de cómo proceder a partir de ese momento.

Descripción de las actividades

Unidad 1 Introducción.

  • Tabla comparativa 
  • Cuestionamientos de aprendizaje

Descripción de las actividades

Unidad 2 El shell.

  • Solución de ejercicios.
  • Cuestionamientos de aprendizaje

Descripción de las actividades

Unidad 3 Programación con entrada y salida estándar.

  • Ejercicios
  • Cuestionamientos de aprendizaje

Descripción de las actividades

Unidad 4 Llamadas al sistema

  • Ejercicios.
  • Cuestionamientos de aprendizaje

Descripción de las actividades

Unidad 5 Programación del kernel.

  • Ejercicios
  • Cuestionamientos de aprendizaje

Descripción de las actividades

Unidad 6 El entorno gráfico

  • Estudio de casos
  • Cuestionamientos de aprendizaje

Actividades de encuadre

Actividades de encuadre

Instrucciones:

  1.  En una hoja escribe la respuesta a la siguiente pregunta:
    1. ¿Qué esperas que se enseñe en este curso?

Tiempo de la actividad: 6 minutos.

Actividades de encuadre

Instrucciones:

  1.  Debajo de la pregunta anterior responde la siguiente cuestión:
    1. ¿A qué te comprometes en este curso?

Tiempo de la actividad: 6 minutos.

Actividades de encuadre

Instrucciones:

  1.  Debajo de la pregunta anterior responde la siguiente cuestión:
    1. ¿Qué deseas aprender en este curso?

Tiempo de la actividad: 6 minutos.

Actividades de encuadre

Una vez contestadas las preguntas anteriores escribir en el foro respectivo la respuesta a cada pregunta.

Tiempo de la actividad: 6 minutos.

Recomendaciones para las actividades

Trabajos:

  • Presentación / portada
  • Introducción
  • Conclusión

Párrafos:

  • Mayores a tres líneas
  • Menores a ocho líneas
  • Coherencia entre párrafos

Ortografía - Gramática

  • Acentuación.
  • Evitar redundancia.
  • Pleonasmos.
  • Mínimo tres errores.

Recomendaciones para las actividades

Referencias bibliográfica

  • Al menos tres citas dentro del trabajo.
  • En formato APA 7ma edición.

Lista referencia bibliográfica

  • Al menos tres fuentes de diversos autores.
  • Con sangría francesa al inicio de cuatro espacios.
  • Fuente Times New Roman.
  • 12 puntos.
  • Sin enlaces activos.

Recomendaciones para las actividades

Introducción y conclusión

  • Al menos tres párrafos.

Formato del trabajo

  • Fuente Arial.
  • Tamaño de título: 14 puntos.
  • Tamaño de texto: 12 puntos.
  • Interlineado 1.5
  • Alineación justificada del texto.
  • Los títulos alineados a la izquierda.
  • En el encabezado del documento colocar el logotipo del instituto alineado a la derecha. Nombre de la carrera a la izquierda.

Recomendaciones para las actividades

Diagramas:

  • Hacerlos en día.
  • Exportarlos a jpg / png

Códigos fuentes:

  • Colocarlos en github.
  • En el documento a entregar, colocar el enlace al código.

Tablas:

  • Colocarle al pie de la tabla un nombre a la tabla, bajo el siguiente formato:  <nombre_tabla numero consecutivo>. <nombre_tabla> <fuente:> <donde_fue_tomada> .
  • Colocar un párrafo descriptivo

Recomendaciones para las actividades

Imagenes / diagramas / gráficas:

  • Colocarle al pie de la imagen / diagrama / gráfica un nombre, bajo el siguiente formato:  <nombre_objeto numero consecutivo>. <nombre_objeto> <fuente:> <donde_fue_tomada> .
  • Colocar un párrafo donde se describa la imagen / diagrama / gráfica

¿Dudas / Preguntas / comentarios?

Unidad 1

1. Introducción.

1.1. Sistemas unix/linux.

1.2. El sistema de archivos.

# Unix

¿Qué es Unix?

  • Es un sistema operativo multitarea y multiusuario desarrollado en la década de 1960 y 1970 en los laboratorios Bell de AT&T.
  • Conocido por su diseño modular, su capacidad para soportar múltiples usuarios concurrentes y su flexibilidad.
  • Influyo en muchos sistemas operativos modernos y ha sido una base fundamental para el desarrollo de sistemas operativos tipo Unix, como Linux y macOS.
# Unix

Aspectos claves

Multiusuario:

UNIX permite que múltiples usuarios accedan al sistema simultáneamente. Cada usuario tiene su propio espacio de trabajo y puede ejecutar procesos independientes.

Multitarea:

Permite la ejecución simultánea de múltiples procesos, lo que significa que el sistema puede realizar varias tareas al mismo tiempo.

# Unix

Aspectos claves

Sistema de Archivos Jerárquico:

Los archivos y directorios en UNIX están organizados en una estructura de árbol jerárquico. Esto facilita la organización y navegación de archivos.

Interfaz de Línea de Comandos (CLI):

UNIX es conocido por su interfaz de línea de comandos, donde los usuarios interactúan con el sistema ingresando comandos en una terminal.

# Unix

Aspectos claves

Shell:

El shell es la interfaz de usuario entre el usuario y el núcleo del sistema operativo. Proporciona un intérprete de comandos que ejecuta comandos dados por el usuario.

Programas Pequeños y Especializados:

En lugar de utilizar programas monolíticos, UNIX sigue el principio de tener programas pequeños y especializados que realizan tareas específicas y se pueden combinar mediante la canalización (pipes) para lograr funcionalidades más complejas.

# Unix

Aspectos claves

Seguridad

UNIX tiene un sistema de permisos robusto que controla el acceso a los archivos y recursos del sistema. Cada archivo y proceso tiene atributos de permisos que especifican quién puede leer, escribir o ejecutarlos.

Portabilidad

La filosofía de diseño de UNIX ha influido en sistemas operativos posteriores, y muchos de sus conceptos se han adoptado en diferentes plataformas.

# Unix

Aspectos claves

Redes:

UNIX tiene una sólida capacidad de red, lo que lo hace muy adecuado para servidores y entornos de red.

Variantes:

Es importante señalar que hay varias variantes de UNIX, como AIX, HP-UX, Solaris y BSD. Cada una tiene sus propias características y peculiaridades. Además, Linux, aunque no es estrictamente UNIX, sigue muchos de los principios y conceptos de diseño de UNIX.

# Unix

Aspectos claves

Redes:

UNIX tiene una sólida capacidad de red, lo que lo hace muy adecuado para servidores y entornos de red.

Variantes:

Es importante señalar que hay varias variantes de UNIX, como AIX, HP-UX, Solaris y BSD. Cada una tiene sus propias características y peculiaridades. Además, Linux, aunque no es estrictamente UNIX, sigue muchos de los principios y conceptos de diseño de UNIX.

# Unix

Actividad de aprendizaje

  1. En la barra de búsqueda teclea la palabra: frexus.
  2. Pulsa en la opción que dice: Generando valor agregado.
  3. Haz clic sobre la opción academia. Luego en el nombre de la materia.
  4. Lee el recurso: Unix para la exploración espacial.
  5. Responde lo siguiente:
  1. ¿Por qué la Agencia Espacial XYZ eligió UNIX como entorno operativo para el desarrollo de software en misiones de exploración espacial?
  2. ¿Cómo abordó la agencia el gran volumen de datos recopilados durante las misiones de exploración espacial?
  3. ¿Cuáles fueron las características clave de UNIX que contribuyeron a la estabilidad operativa del sistema desarrollado por la agencia?

Unidad 1

Sistemas Unix/Linux

# Unix / linux

Unix

Linux

  • Multiusuario: Permite a varios usuarios acceder simultáneamente.
  • Multitarea: Realiza varias tareas al mismo tiempo.
  • Portabilidad: Es portable en diversas plataformas.
  • Jerarquía de Archivos: Organiza los archivos en una estructura de árbol o jerarquía.
  • CLI: La interacción se realiza principalmente a través de comandos escritos en la terminal.
  • Núcleo Monolítico: Las funciones esenciales del O.S, se ejecutan en el espacio del núcleo.
  • Multiplataforma: Se ejecuta en una variedad de arquitecturas de hardware.
  • Escalabilidad: Utilizado desde dispositivos embebidos hasta server
  • Seguridad: Mecanismos robustos de control de acceso y seguridad.
  • Código Abierto: Es accesible para cualquier persona.
# Unix / linux

Unix

Desarrollado a fines de la década de 1960 en los laboratorios Bell de AT&T por Ken Thompson, Dennis Ritchie y otros.

Iniciado por Linus Torvalds en 1991 como un sistema operativo compatible con Unix y de código abierto.

Linux

Origen

Similitud

  • Linux fue modelado de acuerdo a los principios de Unix.
  • Utilizan una estructura de archivos similar y comparten muchos comandos y utilidades en la línea de comandos.
  • Son sistemas operativos poderosos y versátiles que han sido fundamentales en el desarrollo de la informática.
  • Linux, por ser de código abierto, flexibilidad y robustez; ha ganado adopción.
# Unix / linux

Aspectos claves de linux

Núcleo (Kernel) de Linux:

  • El núcleo de Linux es el componente central del sistema operativo.
  • Gestiona recursos del hardware y proporciona servicios esenciales para el funcionamiento del sistema.

Sistema de Archivos Hierárquico:

  • Organiza archivos y directorios en una estructura jerárquica.
  • Utiliza una convención de nomenclatura y ubicación de archivos estándar.
# Unix / linux

Aspectos claves de linux

Interfaz de Línea de Comandos (CLI) y Entorno Gráfico:

  • Proporciona una interfaz de línea de comandos poderosa y versátil.
  • Los entornos gráficos como GNOME y KDE ofrecen interfaces visuales.

Código Abierto y Licencia GNU:

  • Linux es un sistema operativo de código abierto, lo que significa que su código fuente es accesible y modificable.
  • Se distribuye bajo la Licencia Pública General de GNU (GNU GPL).
# Unix / linux

Aspectos claves de linux

Multitarea y Multiusuario:

  • Permite la ejecución simultánea de múltiples procesos y la interacción de varios usuarios.

Seguridad:

  • Incorpora funciones de seguridad, como permisos de archivos y autenticación de usuarios.
  • Actualizaciones frecuentes para abordar vulnerabilidades de seguridad.
# Unix / linux

Aspectos claves de linux

Gestión de Paquetes:

  • Utiliza sistemas de gestión de paquetes como APT (Advanced Package Tool) y YUM para facilitar la instalación y actualización de software.

Redes y Comunicación:

  • Soporta una variedad de protocolos de red.
  • Funciones de servidor y cliente para servicios de red como SSH, HTTP, FTP, entre otros.
# Unix / linux

Aspectos claves de linux

Amplia Variedad de Software:

  • Ofrece una amplia gama de software y herramientas para diversas aplicaciones y propósitos.
  • Desarrollo de software, servidores web, bases de datos, herramientas de productividad, etc.

Comunidad Activa y Documentación Extensa:

  • La comunidad de usuarios y desarrolladores de Linux es activa y colaborativa.
  • Existe una amplia documentación en línea y foros de soporte.
# Unix / linux

Aspectos claves de linux

Portabilidad:

  • Linux es conocido por su capacidad para ejecutarse en una variedad de arquitecturas de hardware.

Actualizaciones y Personalización:

  • Recibe actualizaciones regulares del núcleo y software.
  • Permite una gran flexibilidad y personalización según las necesidades del usuario.

Actividad de aprendizaje

  1. En la barra de búsqueda teclea la palabra: frexus.
  2. Pulsa en la opción que dice: Generando valor agregado.
  3. Haz clic sobre la opción academia. Luego en el nombre de la materia.
  4. Lee el recurso: Linux y el entorno empresarial.
  5. Responde lo siguiente:
  1. ¿Cuáles fueron los motivos principales que llevaron a la empresa a considerar la migración a Linux?
  2. ¿Cuáles fueron los principales beneficios observados después de la migración a Linux en términos de eficiencia operativa y reducción de costos?
  3. ¿Cuál fue el papel de la monitorización continua en el mantenimiento del rendimiento y la seguridad?
# Unix / linux

Unidad 1

El sistema de ficheros

# Sistema de fichero

Un sistema de archivos (o sistema de ficheros) es una estructura lógica utilizada por las computadoras para organizar y almacenar datos en dispositivos de almacenamiento (discos duros, SSD, USB, entre otros). 

En un sistema de archivos típico, se organizan en directorios (o carpetas), y fichero con nombre único que lo identifica. Incluyen métodos para realizar operaciones  (leer, escribir, borrar y renombrar), así como para crear y eliminar directorios.

Cada O.S. tiene su propio sistema de archivos, y los más comunes son NTFS y FAT en sistemas Windows, HFS+ en macOS, y ext4 en sistemas basados en Linux.

# Sistema de fichero

Aspectos claves de NTF (New Technology File System)

Seguridad:

  • NTFS ofrece características de seguridad avanzadas, como permisos de archivos y cifrado de archivos.

Compresión:

  • Permite la compresión de archivos y carpetas para ahorrar espacio de almacenamiento.
# Sistema de fichero

Aspectos claves de NTF (New Technology File System)

Recuperación:

  • Tiene capacidades de recuperación de archivos y permite la creación de puntos de restauración del sistema.
# Sistema de fichero

Aspectos claves de FAT (File Allocation Table)

Compatibilidad:

  • Es un sistema de archivos simple que es compatible con una amplia variedad de sistemas operativos y dispositivos.

Limitaciones:

  • Tiene limitaciones en el tamaño máximo de archivos y particiones.
# Sistema de fichero

Aspectos claves de FAT (File Allocation Table)

Sin seguridad avanzada:

  • No ofrece características avanzadas de seguridad o control de acceso.
# Sistema de fichero

Aspectos claves de HFS+ (Hierarchical File System Plus)

Diseñado para macOS:

  • Es el sistema de archivos principal utilizado en sistemas operativos macOS anteriores a macOS High Sierra.

Soporte para metadatos:

  • Ofrece un soporte eficiente para metadatos y permite el registro de acceso a archivos.
# Sistema de fichero

Aspectos claves de ext4 (Fourth Extended File System)

Tamaño de archivo y sistema de archivos grande:

  • Permite tamaños de archivo y sistemas de archivos mucho más grandes en comparación con sus predecesores.

Journaling:

  • Incluye journaling para una mayor integridad del sistema de archivos y recuperación después de fallos del sistema.
# Sistema de fichero

Aspectos claves de ext4 (Fourth Extended File System)

Compatibilidad con versiones anteriores:

  • Es compatible con versiones anteriores de ext2 y ext3.

Actividad de aprendizaje

  1. En la barra de búsqueda teclea la palabra: frexus.
  2. Pulsa en la opción que dice: Generando valor agregado.
  3. Haz clic sobre la opción academia. Luego en el nombre de la materia.
  4. Lee el recurso: Gestión de datos.
  5. Responde lo siguiente:
  1. ¿Cuáles son los desafíos clave que enfrenta la institución de investigación científica en relación con la gestión de datos?
  2. ¿Cómo se abordan las necesidades de seguridad de los datos en el caso del sistema NTFS?
  3. ¿Qué ventajas ofrece el sistema de archivos ext4 en el entorno basado en Linux de la institución?
# Sistema de ficheros

Unidad 2

Unidad 2

Shell

# Shell
  • Un shell es una interfaz de línea de comandos que proporciona un medio para que los usuarios interactúen con un sistema operativo.
  • Es una capa de software que permite a los usuarios ingresar comandos y recibir respuestas del sistema.
  • Los shells son comunes en sistemas operativos tipo Unix, como Linux y macOS, aunque también existen variantes en sistemas operativos Windows.
# Shell

Aspectos claves

Interfaz de Línea de Comandos (CLI):

  • Los usuarios interactúan con el sistema ingresando comandos de texto directamente en el shell.

Intérprete de Comandos::

  • El shell interpreta los comandos ingresados por el usuario y los ejecuta. Puede realizar diversas tareas, desde la manipulación de archivos hasta la ejecución de programas.
# Shell

Aspectos claves

Automatización mediante Scripts:

  • Los usuarios interactúan con el sistema ingresando comandos de texto directamente en el shell.

Intérprete de Comandos:

  • Los usuarios pueden escribir scripts, que son secuencias de comandos almacenados en archivos, para realizar tareas repetitivas o complejas.
# Shell

Aspectos claves

Redirección y Piping:

  • Los shells permiten la redirección de la entrada y salida estándar, lo que significa que los resultados de un comando pueden utilizarse como entrada para otro. Esto se conoce como piping.

Personalización:

  • Los usuarios pueden personalizar su entorno de shell configurando variables de entorno, creando alias para comandos y utilizando diferentes tipos de shells.
# Shell

Actividad de aprendizaje

  1. En la barra de búsqueda teclea la palabra: frexus.
  2. Pulsa en la opción que dice: Generando valor agregado.
  3. Haz clic sobre la opción academia. Luego en el nombre de la materia.
  4. Lee y ejecutar el recurso:  Tails.
  5. Responde lo siguiente:
  1. ¿Qué fue lo más dificil?
  2. ¿A qué problemas se enfrentó y como los resolvio?
  3. ¿Qué dificultad encontro al ejecutar tails desde la usb?

Unidad 2

Uso del Shell

# Usando el Shell

Abrir la Terminal:

  • En sistemas basados en Linux, puedes abrir la Terminal desde el menú de aplicaciones o utilizando combinaciones de teclas como Ctrl + Alt + T.
  • En sistemas Unix (como macOS), puedes encontrar la Terminal en la carpeta "Utilidades" dentro de la carpeta "Aplicaciones".
# Usando el Shell

Navegación por Directorios:

cd [directorio]

Donde [directorio] es la ruta al directorio al cual deseas cambiar.

Cambiar al directorio "Documentos":

cd Documentos

Cambiar al directorio superior (directorio padre):

cd ..

Cambiar al directorio personal del usuario:

cd ~

Cambiar al directorio raíz:

cd /

Ejemplos

# Usando el Shell

Listar Archivos y Directorios:

ls [opciones] [directorio]

Donde:

[opciones] son parámetros adicionales que puedes incluir para personalizar la salida del comando.

[directorio] es el directorio del cual quieres listar el contenido. Si no se especifica, por defecto lista el contenido del directorio actual.

  • -l: Muestra la lista en formato largo, incluye permisos, propietario, grupo, tamaño y fecha de modificación.
  • -a: Muestra todos los archivos, incluyendo los ocultos.
  • -h: Con la opción -l, muestra los tamaños de los archivos en formato legible para humanos (por ejemplo, KB, MB).
  • -R: Lista de manera recursiva, mostrando el contenido de subdirectorios.
# Usando el Shell

Manipular archivos y directorios:

mkdir nombre_directorio
  • -p: Crea directorios padres si no existen.

Crear directorio:

# Usando el Shell

Manipular archivos y directorios:

rm nombre_archivo
  • -f: Elimina sin confirmación.
  • -r o -R: Elimina directorios y su contenido.

Eliminar archivos:

# Usando el Shell

Manipular archivos y directorios:

cp origen destino
  • -r o -R: Copia directorios y su contenido.

Copiar archivos y directorios:

# Usando el Shell

Manipular archivos y directorios:

mv origen destino
  • También se utiliza para renombrar.

Mover o renombrar archivos y directorios:

# Usando el Shell

Manipular archivos y directorios:

cat nombre_archivo
  • less o more: Permiten visualizar el contenido de un archivo página por página.

Visualizar el contenido de un archivo:

# Usando el Shell

Manipular archivos y directorios:

nano nombre_archivo
  • También puedes usar vim o emacs.

Editar un archivo:

# Usando el Shell

Acceder a la Ayuda:

man nombre_comando
  • Muchos comandos tienen opciones y parámetros.
  • Utilizando el comando man que significa "manual"
# Usando el Shell

Actividad de aprendizaje

  1. En la barra de búsqueda teclea la palabra: frexus.
  2. Pulsa en la opción que dice: Generando valor agregado.
  3. Haz clic sobre la opción academia. Luego en el nombre de la materia.
  4. Lee y ejecutar el recurso:  Usando el shell.
  5. Responde lo siguiente:
  1. ¿Qué comando te permite ver los permisos del fichero que creaste?
  2. ¿Qué comando te permitió ver el contenido del fichero?
  3. ¿Qué dificultad encontro al crear los directorios y archivos?

Unidad 2

Programación en el shell

# Programando el Shell
  • Conocida como scripting de shell, implica la creación de secuencias de comandos que el intérprete del shell ejecuta de manera secuencial.
  • Estos scripts pueden contener una serie de comandos que automatizan tareas, toman decisiones basadas en condiciones y realizan otras operaciones útiles.
# Programando el Shell

Nociones básicas y conceptos clave

Interprete de Comandos:

Los scripts de shell son interpretados por el shell, lo que significa que el intérprete del shell ejecuta cada comando en el script uno tras otro.

# Programando el Shell

Nociones básicas y conceptos clave

Variables:

Puedes definir y utilizar variables en tus scripts. Las variables almacenan información que puede ser referenciada y modificada a lo largo del script.

# Programando el Shell

Nociones básicas y conceptos clave

Control de Flujo:

Al igual que en otros lenguajes de programación, puedes utilizar estructuras de control de flujo, como bucles (for, while) y condicionales (if, else), para controlar la ejecución de tus comandos.

# Programando el Shell

Nociones básicas y conceptos clave

Funciones:

Puedes definir funciones en tus scripts para modularizar y reutilizar código.

# Programando el Shell

Nociones básicas y conceptos clave

Entrada/Salida:

Puedes interactuar con archivos y directorios, leer y escribir datos, y utilizar la entrada y salida estándar.

# Programando el Shell

Nociones básicas y conceptos clave

Comentarios:

Puedes incluir comentarios en tus scripts precediendo líneas con el símbolo #.

# Programando el Shell

Nociones básicas y conceptos clave

Ejecución de Comandos Externos:

Puedes ejecutar comandos externos, programas y utilidades desde tu script.

# Programando el Shell

Nociones básicas y conceptos clave

Ejemplo

#!/bin/bash

# Script que imprime los nombres de archivos en un directorio

DIRECTORIO="/ruta/al/directorio"

for FILE in $DIRECTORIO/*; do
  if [ -f "$FILE" ]; then
    echo "Nombre del archivo: $FILE"
  fi
done
# Programando el Shell

Actividad de aprendizaje

  1. En la barra de búsqueda teclea la palabra: frexus.
  2. Pulsa en la opción que dice: Generando valor agregado.
  3. Haz clic sobre la opción academia. Luego en el nombre de la materia.
  4. Lee y ejecutar el recurso:  Programando el shell.
  5. Responde lo siguiente:
  1. ¿Cómo harías un "hola mundo"?
  2. ¿Cómo podrías imprimir los primeros 10 números naturales?
  3. ¿Cómo harías la suma de dos números introducidos por el usuario?

Unidad 2

Entubamiento

# Entubamiento

En la programación en el shell, la tubería (|) es un mecanismo que permite combinar la salida de un comando con la entrada de otro. Esto es útil para realizar operaciones más complejas y encadenar varios comandos.

# Entubamiento

Aspectos claves

Sintaxis Básica:

  • La sintaxis para usar tuberías es mediante el operador |.
  • Por ejemplo: comando1 | comando2 - La salida de comando1 se convierte en la entrada de comando2.
# Entubamiento

Aspectos claves

Comunicación entre Procesos:

  • Las tuberías permiten la comunicación directa entre dos comandos, donde la salida del primero se convierte en la entrada del segundo.
# Entubamiento

Aspectos claves

Encadenamiento de Comandos:

  • Se pueden encadenar varios comandos utilizando múltiples operadores de tubería.
comando1 | comando2 | comando3.
# Entubamiento

Aspectos claves

Flujo de Datos Unidireccional:

  • Las tuberías permiten un flujo de datos unidireccional, desde el primer comando hacia el siguiente.
# Entubamiento

Aspectos claves

Uso en Scripts:

  • Las tuberías son comúnmente utilizadas en scripts de shell para combinar la funcionalidad de varios comandos.
# Entubamiento

Aspectos claves

Filtros y Procesamiento de Datos:

  • Se utilizan para filtrar y procesar datos de manera eficiente.
  • Por ejemplo: ls -l | grep "file" | awk '{print $1}' - lista los permisos de los archivos que contienen "file".
# Entubamiento

Aspectos claves

Redirección de Salida:

  • La salida del último comando en una cadena de tuberías se puede redirigir a un archivo si es necesario.
  • Por ejemplo: comando1 | comando2 > salida.txt.
# Entubamiento

Aspectos claves

Uso con Comandos de Texto:

  • Las tuberías son particularmente útiles con comandos que manejan texto, como grep, sed y awk.
# Entubamiento

Aspectos claves

Eficiencia y Conveniencia:

  • Las tuberías permiten realizar operaciones complejas de manera eficiente y a menudo son más convenientes que escribir programas separados.
# Entubamiento

Aspectos claves

Interoperabilidad:

  • Diferentes comandos y utilidades pueden combinarse de manera flexible mediante tuberías para lograr resultados deseados.
# Entubamiento

Actividad de aprendizaje

  1. En la barra de búsqueda teclea la palabra: frexus.
  2. Pulsa en la opción que dice: Generando valor agregado.
  3. Haz clic sobre la opción academia. Luego en el nombre de la materia.
  4. Lee y ejecutar el recurso:  Tuberías.
  5. Responde lo siguiente:
  1. ¿Qué tipo de tubería tendrías que hacer para sacar a un archivo de texto la información de tu computadora?
  2. ¿Del archivo anterior cuantas palabras tiene?
  3. ¿Qué otros puedes encontrar al uso de las tuberías?

Unidad 3

Unidad 3

Programación con entrada y salida estándar

# Programación con entrada y salida estándar

La programación de entrada y salida estándar en el shell se refiere a la manipulación de datos que fluyen entre un programa y el entorno del sistema operativo a través de los canales de entrada y salida estándar. Estos canales son normalmente el teclado (entrada estándar) y la pantalla (salida estándar).

# Programación con entrada y salida estándar

Aspectos Claves

Redirección de Entrada y Salida:

Redirección de Salida (>):

Permite redirigir la salida estándar de un comando hacia un archivo en lugar de la pantalla.

ls > lista_archivos.txt
# Programación con entrada y salida estándar

Aspectos Claves

Redirección de Entrada y Salida:

Redirección de Entrada (<):

Permite que un comando lea su entrada estándar desde un archivo en lugar del teclado.

sort < archivo_desordenado.txt
# Programación con entrada y salida estándar

Aspectos Claves

Redirección de Entrada y Salida:

Redirección de Salida y Anexar (>>):

Agrega la salida estándar al final de un archivo en lugar de sobrescribirlo.

echo "Nuevo contenido" >> archivo_existente.txt
# Programación con entrada y salida estándar

Aspectos Claves

Pipes (|):

Permite tomar la salida estándar de un comando y utilizarla como entrada estándar para otro.

cat archivo.txt | grep "palabra"
# Programación con entrada y salida estándar

Aspectos Claves

Comandos de Lectura y Escritura:

echo: Imprime texto en la salida estándar.

echo "Hola, mundo!"
# Programación con entrada y salida estándar

Aspectos Claves

Comandos de Lectura y Escritura:

read: Lee la entrada desde el teclado y asigna el valor a una variable.

read -p "Ingrese su nombre: " nombre
# Programación con entrada y salida estándar

Aspectos Claves

Comandos de Lectura y Escritura:

printf: Imprime texto con formato.

printf "El resultado es: %d\n" 42
# Programación con entrada y salida estándar
  1. En la barra de búsqueda teclea la palabra: frexus.
  2. Pulsa en la opción que dice: Generando valor agregado.
  3. Haz clic sobre la opción academia. Luego en el nombre de la materia.
  4. Lee y ejecutar el recurso:  i/o standar en the shell.
  5. Copia y pega el contenido del recurso, del punto anterior, en un fichero con nombre standar_io.txt.
  6. Responde lo siguiente:
  1. ¿Qué comandos usarías para que se muestre en pantalla la palabra pipes?
  2. ¿Qué comando usarías para agregar tu nombre al fichero standar_io.txt?

Actividad de aprendizaje

Unidad 3

Argumentos de programas

  • Los argumentos son los valores que se proporcionan a un script o comando cuando se ejecutan.
  • Estos valores son suministrados después del nombre del script o comando en la línea de comandos.
  • Permiten que el script o comando actúe de manera diferente según la información proporcionada durante la ejecución.
# Argumentos de programas

Ejemplo

# Argumentos de programas
./mi_script.sh argumento1 argumento2

Los scripts de shell pueden acceder a estos argumentos dentro del código y utilizarlos para realizar operaciones específicas.

En un script de shell en bash, puedes referenciar los argumentos utilizando variables especiales. Por ejemplo:

# Argumentos de programas
#!/bin/bash

echo "El primer argumento es: $1"
echo "El segundo argumento es: $2"

En un script de shell en bash, puedes referenciar los argumentos utilizando variables especiales. Por ejemplo:

# Argumentos de programas
#!/bin/bash

echo "El primer argumento es: $1"
echo "El segundo argumento es: $2"

Al ejecutar el script como ./mi_script.sh valor1 valor2

El primer argumento es: valor1
El segundo argumento es: valor2

Actividad de aprendizaje

# Argumentos de programas
  1. En la barra de búsqueda teclea la palabra: frexus.
  2. Pulsa en la opción que dice: Generando valor agregado.
  3. Haz clic sobre la opción academia. Luego en el nombre de la materia.
  4. Lee y ejecutar el recurso:  argumentos.
  5. Copia y pega el contenido del recurso, del punto anterior, en un fichero con nombre argumentos.txt.
  6. Responde lo siguiente:
  1. ¿Qué resultados se mostro en la pantalla?
  2. ¿Qué líneas de código modificarías para que el script resolviera suma pasando dos números como argumentos?

Unidad 3

Archivos

# Archivos

Los archivos son esenciales para manipular datos almacenados en dispositivos de almacenamiento.

# Archivos

Se puede crear archivos directamente desde el shell utilizando comandos como touch o echo.

Aspectos claves

Creación y Manipulación de Archivos:

echo "Hola, mundo" > archivo.txt 

Ejemplo

# Archivos

Se puede editar archivos directamente desde el shell utilizando editores de texto como nano, vim, o emacs.

Aspectos claves

Edición de Archivos:

nano demo.txt

Ejemplo

# Archivos

Puedes eliminar archivos con el comando rm.

Aspectos claves

Eliminación de Archivos:

rm archivo.txt

Ejemplo

# Archivos

Comandos como cp (copiar), mv (mover), y ln (crear enlaces) te permiten realizar operaciones avanzadas con archivos.

Aspectos claves

Operaciones con Archivos:

# Archivos
  • El comando chmod te permite cambiar los permisos de un archivo.
  • El comando chown te permite cambiar el propietario de un archivo.

Aspectos claves

Permisos y Propietarios:

# Archivos

Actividad de aprendizaje

  1. En la barra de búsqueda teclea la palabra: frexus.
  2. Pulsa en la opción que dice: Generando valor agregado.
  3. Haz clic sobre la opción academia. Luego en el nombre de la materia.
  4. Lee y ejecutar el recurso:  archivos.
  5. Responde lo siguiente:
  1. ¿Qué comandos usarías para crear un script que pueda restar dos números proporcionado por el usuario pero que la salida este en un fichero?
  2. ¿Qué problemas tuviste al realizar este ejercicio?

Unidad 4

Unidad 4

Llamadas al sistema

# Llamadas al sistema
  • Son funciones proporcionadas por el kernel del sistema operativo que permiten a los programas de usuario interactuar con el hardware y realizar diversas operaciones.
  • Se utilizan para realizar operaciones de bajo nivel, como la manipulación de archivos, la gestión de procesos y la interacción con el sistema operativo.
# Llamadas al sistema

Aspectos claves

Creación y Gestión de Procesos:

  • fork(): Esta llamada al sistema se utiliza para crear un nuevo proceso hijo. El proceso hijo es una copia exacta del proceso padre, pero tiene su espacio de memoria independiente.

  • exec(): Después de fork(), exec() reemplaza la imagen del proceso actual con un nuevo programa. Puede ser execvp, execl, etc.

  • wait() y waitpid(): Estas llamadas al sistema permiten que un proceso padre espere a que su proceso hijo termine la ejecución.

# Llamadas al sistema

Aspectos claves

Manipulación de Archivos:

  • open() y close(): open() se utiliza para abrir un archivo, mientras que close() se utiliza para cerrar un descriptor de archivo abierto.

  • read() y write(): Permiten la lectura y escritura de datos desde/hacia un archivo.

  • lseek(): Se utiliza para cambiar la posición del puntero de archivo en el archivo abierto.

  • unlink(): Elimina un enlace a un archivo, y si es el último enlace, elimina el archivo.

# Llamadas al sistema

Aspectos claves

Gestión de Procesos:

  • kill(): Se utiliza para enviar señales a procesos. Por ejemplo, kill -9 PID envía la señal SIGKILL para terminar un proceso.

  • ps() y top(): Aunque no son llamadas al sistema directas, son comandos que proporcionan información sobre los procesos en ejecución.

# Llamadas al sistema

Aspectos claves

Comunicación entre Procesos:

  • pipe(): Crea una tubería para la comunicación entre dos procesos.

  • shmget(), shmat(), y shmdt(): Estas llamadas al sistema se utilizan para la gestión de memoria compartida entre procesos.

# Llamadas al sistema

Aspectos claves

Otros:

  • chdir(): Cambia el directorio de trabajo del proceso.

  • umask(): Establece la máscara de modo del proceso.

  • time() y date(): Proporcionan información sobre la hora actual.

# Llamadas al sistema

Actividad de aprendizaje

  1. En la barra de búsqueda teclea la palabra: frexus.
  2. Pulsa en la opción que dice: Generando valor agregado.
  3. Haz clic sobre la opción academia. Luego en el nombre de la materia.
  4. Lee y ejecutar el recurso:  Llamadas.
  5. Responde lo siguiente:
  1. ¿Qué comandos usarías para crear un script que pueda leer un fichero y contar las palabras que esté contiene?
  2. ¿Qué problemas tuviste al realizar este ejercicio?

Unidad 4

Entrada y salida de bajo nivel

# Entrada y salida bajo nivel

Se refieren a operaciones que interactúan directamente con los descriptores de archivo y se centran en la manipulación detallada de los datos.

# Entrada y salida bajo nivel

Aspectos claves

Descriptores de Archivo:

Los descriptores de archivo son enteros que identifican una conexión abierta con un archivo o un dispositivo. En la programación de shell, los descriptores de archivo se utilizan para manipular las entradas y salidas.

  • stdin (Descriptor 0):

    • Es el descriptor de archivo estándar para la entrada. Se utiliza para leer datos desde el teclado o desde la salida de otro comando.
# Entrada y salida bajo nivel

Aspectos claves

Descriptores de Archivo:

  • stdout (Descriptor 1):

    • Se utiliza para escribir datos que se mostrarán en la pantalla o se redirigirán a un archivo.

  • stderr (Descriptor 2):

    • Se utiliza para escribir mensajes de error que no deben interferir con la salida estándar.

# Entrada y salida bajo nivel

Aspectos claves

Redirección de Entrada y Salida:

La redirección es una técnica que permite cambiar la fuente o el destino de los datos.

Se utiliza el símbolo > para redireccionar la salida a un archivo y < para redireccionar la entrada desde un archivo.

# Redirigir la salida estándar a un archivo
echo "Hola, mundo" > salida.txt

# Redirigir la entrada estándar desde un archivo
cat < entrada.txt
# Entrada y salida bajo nivel

Aspectos claves

Duplicación de Descriptores de Archivo:

La duplicación de descriptores de archivo (dup y dup2) permite copiar un descriptor de archivo existente a otro. Esto es útil para redirigir la salida estándar a un archivo, por ejemplo.

# Duplicar la salida estándar y redirigirla a un archivo
exec 3>&1
exec > salida.txt

# ...comandos...

# Restaurar la salida estándar
exec 1>&3
# Entrada y salida bajo nivel

Aspectos claves

Archivos Especiales:

En la programación de shell, algunos archivos especiales simplifican la entrada y salida.

  • /dev/null: Un archivo especial que descarta todo lo que se escribe en él. Útil para suprimir la salida.
# Redirigir la salida estándar a /dev/null
comando > /dev/null
# Entrada y salida bajo nivel

Aspectos claves

Archivos Especiales:

/dev/tty: Se refiere al terminal actual y se puede usar para redirigir la salida a la pantalla.

# Redirigir la salida estándar al terminal actual
comando > /dev/tty
# Entrada y salida bajo nivel

Actividad de aprendizaje

  1. En la barra de búsqueda teclea la palabra: frexus.
  2. Pulsa en la opción que dice: Generando valor agregado.
  3. Haz clic sobre la opción academia. Luego en el nombre de la materia.
  4. Lee y ejecutar el recurso:  Archivos, tuberias y Llamadas.
  5. Responde lo siguiente:
  1. ¿Qué comandos usarías para crear un script que pueda leer un fichero y contar las palabras que esté contiene, mostrandolo en la pantalla y sacando a otro fichero las veces que se repitio?
  2. ¿Qué problemas tuviste al realizar este ejercicio?

Unidad 4

Procesos

# Procesos

Es una instancia en ejecución de un programa. Cuando ejecutas un programa en el shell, se crea un nuevo proceso para ese programa.

# Procesos

Aspectos Claves

Creación de Procesos:

Al ejecutar un programa en el shell, se crea un nuevo proceso. Puedes hacer esto usando comandos como ./nombre_del_programa o simplemente escribiendo el nombre del comando.

# Procesos

Aspectos Claves

Identificación de Procesos:

Cada proceso tiene un identificador único llamado PID (Identificador de Proceso). Puedes ver los PIDs de los procesos en ejecución usando comandos como ps o top.

# Procesos

Aspectos Claves

Llamadas al Sistema:

  • Las llamadas al sistema son interfaz entre el espacio de usuario (tu programa) y el núcleo del sistema operativo.
  • Algunas llamadas al sistema comunes incluyen fork() para crear un nuevo proceso, exec() para reemplazar la imagen del proceso actual con otro programa, y wait() para esperar a que un proceso hijo termine.
# Procesos

Aspectos Claves

Comunicación entre Procesos:

  • Los procesos pueden comunicarse entre sí. Los pipes (|) y redirecciones (>, <) son ejemplos de cómo los procesos pueden compartir información a través del shell.
# Procesos

Aspectos Claves

Fondo y Primer Plano:

  • Puedes ejecutar procesos en primer plano (ocupando la terminal) o en segundo plano (liberando la terminal). Para ejecutar en segundo plano, puedes agregar un & al final del comando.
# Procesos

Aspectos Claves

Señales:

  • Los procesos pueden enviar y recibir señales para comunicarse. Por ejemplo, puedes enviar la señal SIGKILL para terminar un proceso.
# Procesos

Aspectos Claves

Ejemplo

#!/bin/bash

# Crear un nuevo proceso
echo "Hola desde el proceso padre $$"

# Crear un proceso hijo
./mi_programa_hijo.sh &

# Esperar a que el proceso hijo termine
wait

echo "Proceso hijo finalizado"
# Procesos

Actividad de aprendizaje

  1. En la barra de búsqueda teclea la palabra: frexus.
  2. Pulsa en la opción que dice: Generando valor agregado.
  3. Haz clic sobre la opción academia. Luego en el nombre de la materia.
  4. Lee y ejecutar el recurso:  Procesos
  5. Responde lo siguiente:

¿Qué problemas tuviste al realizar cada ejecución?

Unidad 4

Señales e Interrupciones

# Señales e Interrupciones

Señales:

  • Algunas señales comunes incluyen:

    • SIGTERM (15): Solicita la terminación del proceso de manera ordenada.
    • SIGKILL (9): Solicita la terminación inmediata e incondicional del proceso.
    • SIGINT (2): Enviada cuando se interrumpe el proceso con Ctrl+C en la terminal.

Las señales son mecanismos de comunicación asincrónica entre procesos o entre el núcleo y los procesos. Son utilizadas para notificar eventos o solicitar ciertas acciones.

# Señales e Interrupciones

Manejo de Señales en Shell:

Se puede establecer cómo tu script de shell manejará ciertas señales mediante el comando trap.

# Ejemplo de manejo de señales en un script de shell
trap 'echo "Recibida la señal SIGINT (Ctrl+C)"; exit' SIGINT
trap 'echo "Recibida la señal SIGTERM"; exit' SIGTERM

# Resto del script
echo "El script está en ejecución..."

# Espera indefinida
while true; do
    sleep 1
done
# Señales e Interrupciones

Interrupciones y Programas en Segundo Plano:

Cuando se ejecuta un programa en segundo plano y luego se cierra la terminal, el proceso puede recibir la señal SIGHUP (hang-up) si la terminal se cierra. Se puedes prevenir esto usando nohup o redirigiendo la entrada y salida estándar.

# Ejecutar un programa en segundo plano sin verse afectado por SIGHUP
nohup ./mi_programa.sh &
# Señales e Interrupciones

Interrupciones con Ctrl+C:

Cuando se presiona Ctrl+C en la terminal, se envía la señal SIGINT al proceso en primer plano. Se puedes interceptar esta señal para realizar acciones específicas antes de que el programa termine.

# Ejemplo de manejo de la señal SIGINT en un script
trap 'echo "Script interrumpido por Ctrl+C"; cleanup_function' SIGINT

cleanup_function() {
    # Realizar acciones de limpieza o manejo antes de salir
    echo "Realizando limpieza..."
    exit
}

# Resto del script
echo "El script está en ejecución..."

# Espera indefinida
while true; do
    sleep 1
done
# Señales e Interrupciones

Interrupciones con Ctrl+C:

Cuando se presiona Ctrl+C en la terminal, se envía la señal SIGINT al proceso en primer plano. Se puedes interceptar esta señal para realizar acciones específicas antes de que el programa termine.

# Ejemplo de manejo de la señal SIGINT en un script
trap 'echo "Script interrumpido por Ctrl+C"; cleanup_function' SIGINT

cleanup_function() {
    # Realizar acciones de limpieza o manejo antes de salir
    echo "Realizando limpieza..."
    exit
}

# Resto del script
echo "El script está en ejecución..."

# Espera indefinida
while true; do
    sleep 1
done
# Señales e Interrupciones

Actividad de aprendizaje

  1. En la barra de búsqueda teclea la palabra: frexus.
  2. Pulsa en la opción que dice: Generando valor agregado.
  3. Haz clic sobre la opción academia. Luego en el nombre de la materia.
  4. Lee y ejecutar el recurso:  Señales
  5. Responde lo siguiente:

¿Qué comandos debes de utilizar para que en un script se ejecute un ping a google.com y aún que se precione ctrl+c no se interrumpa?