From be86b7441f7bbbfb893453f7288b5b4c75a77889 Mon Sep 17 00:00:00 2001 From: Lil-Carpi Date: Mon, 8 Dec 2025 18:59:14 +0100 Subject: [PATCH] Funciones Puras --- .obsidian/graph.json | 11 ++- .obsidian/workspace.json | 23 +++--- .../Bash Scripting Avanzado/Funciones puras.md | 40 +++++++++++ .../Mecánica Unix - Manejo de la shell.md | 70 +++++++++++++++++-- 4 files changed, 126 insertions(+), 18 deletions(-) create mode 100644 Documentación personal/Mecanica de Unix/Bash Scripting Avanzado/Funciones puras.md diff --git a/.obsidian/graph.json b/.obsidian/graph.json index 58e4353..0ccb51d 100644 --- a/.obsidian/graph.json +++ b/.obsidian/graph.json @@ -5,7 +5,7 @@ "showAttachments": false, "hideUnresolved": false, "showOrphans": true, - "collapse-color-groups": true, + "collapse-color-groups": false, "colorGroups": [ { "query": "SQL", @@ -13,6 +13,13 @@ "a": 1, "rgb": 16514816 } + }, + { + "query": "Bash Scripting Avanzado", + "color": { + "a": 1, + "rgb": 11403519 + } } ], "collapse-display": true, @@ -25,6 +32,6 @@ "repelStrength": 10, "linkStrength": 1, "linkDistance": 250, - "scale": 0.9999999999999993, + "scale": 0.6666666666666659, "close": true } \ No newline at end of file diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index b1b2668..3f42e94 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -13,12 +13,12 @@ "state": { "type": "markdown", "state": { - "file": "README.md", - "mode": "source", + "file": "Documentación personal/Mecanica de Unix/Bash Scripting Avanzado/Funciones puras.md", + "mode": "preview", "source": false }, "icon": "lucide-file", - "title": "README" + "title": "Funciones puras" } } ] @@ -53,7 +53,7 @@ "state": { "type": "search", "state": { - "query": "", + "query": "tag:#Temario-BSA", "matchingCase": false, "explainSearch": false, "collapseAll": false, @@ -74,11 +74,13 @@ "title": "Marcadores" } } - ] + ], + "currentTab": 1 } ], "direction": "horizontal", - "width": 221.5 + "width": 221.5, + "collapsed": true }, "right": { "id": "519d5773673c1040", @@ -196,16 +198,19 @@ }, "active": "6baa04c1fda7d92f", "lastOpenFiles": [ + "Documentación personal/Mecanica de Unix/Bash Scripting Avanzado/Funciones puras.md", "Documentación personal/Mecanica de Unix/Mecánica Unix - Manejo de la shell.md", + "Documentación personal/Mecanica de Unix/Bash Scripting/Fundamentos de Bash.md", + "README.md", + "Documentación personal/Mecanica de Unix/Bash Scripting/Sin nombre", "Documentación personal/Lenguajes de programación absurdos", "BDD/SQL/Importación y exportación de base de datos.md", "Documentación personal/Mecanica de Unix/Bash Scripting/s.md", - "Documentación personal/Mecanica de Unix/Bash Scripting", + "Documentación personal/Mecanica de Unix/Bash Scripting Avanzado", "Documentación personal/Mecanica de Unix", "BDD/SQL/Diario/Clase 4 de diciembre.md", "BDD/SQL/Lenguaje de Manupulación de Datos (DML).md", "BDD/SQL/Lenguaje de definición de datos (DDL).md", - "README.md", "Documentación personal/Seguridad-Informatica/Vista General 1.canvas", "Documentación personal/Seguridad-Informatica/desktop.ini", "Documentación personal/Seguridad-Informatica/Tipos de ataque/Worm/Metodos/desktop.ini", @@ -214,7 +219,6 @@ "Documentación personal/Seguridad-Informatica/Tipos de ataque/Virus/Metodos/desktop.ini", "Documentación personal/Seguridad-Informatica/Tipos de ataque/Trojan/Metodos/desktop.ini", "Documentación personal/Seguridad-Informatica/Tipos de ataque/Spyware/Metodos/desktop.ini", - "Documentación personal/Seguridad-Informatica/Tipos de ataque/Sniffing/Metodos/desktop.ini", "Documentación personal/Seguridad-Informatica/Tipos de ataque/XSS/Cross-Site Scripting (XSS).md", "Documentación personal/Seguridad-Informatica/Tipos de ataque/Worm/Gusano.md", "Documentación personal/Seguridad-Informatica/Tipos de ataque/Virus/Virus informatico.md", @@ -231,7 +235,6 @@ "Documentación personal/Seguridad-Informatica/Tipos de ataque/Exploit/Exploits.md", "Documentación personal/Seguridad-Informatica/Tipos de ataque/DoS/DoS.md", "Documentación personal/Seguridad-Informatica/Tipos de ataque/DDoS/DDoS.md", - "Documentación personal/Seguridad-Informatica/Tipos de ataque/Brute Force/Ataque a fuerza bruta.md", "Documentación personal/Seguridad-Informatica/1_Imagenes/tools/software/specops.svg", "Documentación personal/Seguridad-Informatica/1_Imagenes/tools/software/satan.png", "Documentación personal/Seguridad-Informatica/1_Imagenes/tools/software/nessuslogo.png", diff --git a/Documentación personal/Mecanica de Unix/Bash Scripting Avanzado/Funciones puras.md b/Documentación personal/Mecanica de Unix/Bash Scripting Avanzado/Funciones puras.md new file mode 100644 index 0000000..6f8388d --- /dev/null +++ b/Documentación personal/Mecanica de Unix/Bash Scripting Avanzado/Funciones puras.md @@ -0,0 +1,40 @@ +#Temario-BSA - Bash Scripting Avanzado + +--- +## ¿Qué es una "Función Pura"? +En programación, el concepto de la programación pura es aquella función que no cause efectos secundarios en el programa, cuyas funciones estén aisladas del resto del programa y no afecten a nada más que a lo que se le pide que haga. + +### Un ejemplo de una "Función Impura": +```SHELL +contador=0 # Esto es un estado global + +incrementar() { + #Efecto secundario: Se esta modificando una variable externa + contador=$((contador + 1)) +} + +incrementar +echo $contador # imprimirá 1 +incrementar +echo $contador # imprimirá 2 (¡El resultado cambió sin cambiar imputs!) +``` +Esta función depende de una variable global y la modifica. Si la ejecutas dos veces, el resultado cambia aunque no le pases argumentos. + +### Un ejemplo de una "Función Pura": +```SHELL +sumar() { + # 1. Se usa 'local' para aislar variables del resto del script + local num1=$1 + local num2=$2 + + local resultado=$((num1 + num2)) + + # 2. 'Devolver' el valor por salida estándar (stdout) + echo "$resultado" +} + +# Uso: Capturamos la salida +total=$(sumar 10 5) +echo "El total es: $total" +``` +Esta función es aislada. Recibe datos, calcula y "devuelve" el dato imprimiéndolo (stdout), sin tocar nada más. diff --git a/Documentación personal/Mecanica de Unix/Mecánica Unix - Manejo de la shell.md b/Documentación personal/Mecanica de Unix/Mecánica Unix - Manejo de la shell.md index 6f0308b..9592d8d 100644 --- a/Documentación personal/Mecanica de Unix/Mecánica Unix - Manejo de la shell.md +++ b/Documentación personal/Mecanica de Unix/Mecánica Unix - Manejo de la shell.md @@ -1,13 +1,71 @@ En este apartado, me dedico a aprender todo lo que tiene que ver con la terminal. Pondré obviamente apuntes sobre lo que ya sé y sobre lo que no. -Lo que voy a apuntar va a ser: -- Bash Scripting (Hasta nivel avanzado) -- `awk`, `sed` y `grep`. -- Señales, pipes, TTY, pseudo terminales -- ncurses -- Procesamiento de ficheros grandes en la terminal +# Lo que voy a apuntar va a ser: + +--- +### 1. Bash Scripting Avanzado +Aquí no se va a tratar solo de escribir scripts, sino de: +- [[Funciones puras]] +- Patrones de diseño en bash +- Trampas (`traps`) +- Señales +- Expansión de parámetros +- Arrays asociativos +- Subshells +- Procesos hijos y paralelismo (`&`, `wait`, `coproc`) +- Seguridad en scripts (validación, sanitización, quoting correcto) +*Y esto aporta:* + **Automatización de sistemas enteros y escritura de pipelines complejos.** + +--- +### 2. awk/sed/grep a nivel serio +- Parsing avanzado de logs +- Extracción de datos estructurados +- Reescritura de texto +- Creación de mini-lenguajes personalizados +- Manipulación de CSV, JSON simplificado, logs de sistemas +*Y esto aporta:* + Con awk, puedo literalmente escribir programas completos. + Podría hacer un analizador sintáctico, un intérprete simple o un procesador de logs en tiempo real. + +--- + +### 3. Señales, pipes. TTYs y pseudoterminales +- Funcionamiento de una terminal +- Comunicacion entre procesos +- Que pasa por debajo de un pipe +- Funcionamiento de los PTY con `except`, `script`, `ssh`, `tmux` +- Control de procesos con señales (`SIGINT`, `SIGTERM`, `SIGHUP`) +- Capturar e interpretar señales de scripts propios +*Y esto aporta:* + **Entendimiento de Linux desde dentro.** + +--- + +### 4. ncurses +- Creación de interfaces interactivas +- Menús +- Ventanas +- Teclas especiales +- Actualización dinámica de pantalla sin flickering +*Y esto aporta:* + Podría crear programas como `htop`, mini editor de texto... Hasta un navegador interactivo que imprima HTML parseado (esto es sadomasoquismo, pero lo voy a hacer igualmente). + +--- + +### 5. Procesamiento de ficheros MUY grandes +- Streaming (line by line) +- Evitar cargar la RAM por completo +- `split`, `parallel`, `pv` +- Ordenar grandes cantidades de datos sin reventar la memoria (`sort` con flags correctos) +- Map-reduce cutre en bash +*Y esto aporta:* + Analisis de **Big Data** chapucero, pero cumpliré con la función. ### Cuál es el objetivo de esto: Aprender y profundizar aún más en lo que ya sé y conozco. Tengo pensado dedicarle aproximadamente entre 1 y 2 meses solo a esto. +Me deja conocimiento como la dominación de la terminal de forma completa, entender Linux desde la raíz, automatización sin dependencia de lenguajes externos, analizado, procesado y transformación de datos masivos, creación de herramientas internas de consola, depuración de sistemas con logs y pipes, creación de interfaces CLI y la construcción de una infraestructura funcional con bash. + + Al final de todo, tengo pensado hacer algunos proyectos absurdos, como por ejemplo, un navegador hecho solo con Bash. Es complicado (y roza lo masoquista), pero divertido. \ No newline at end of file