Funciones Puras
This commit is contained in:
11
.obsidian/graph.json
vendored
11
.obsidian/graph.json
vendored
@@ -5,7 +5,7 @@
|
|||||||
"showAttachments": false,
|
"showAttachments": false,
|
||||||
"hideUnresolved": false,
|
"hideUnresolved": false,
|
||||||
"showOrphans": true,
|
"showOrphans": true,
|
||||||
"collapse-color-groups": true,
|
"collapse-color-groups": false,
|
||||||
"colorGroups": [
|
"colorGroups": [
|
||||||
{
|
{
|
||||||
"query": "SQL",
|
"query": "SQL",
|
||||||
@@ -13,6 +13,13 @@
|
|||||||
"a": 1,
|
"a": 1,
|
||||||
"rgb": 16514816
|
"rgb": 16514816
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"query": "Bash Scripting Avanzado",
|
||||||
|
"color": {
|
||||||
|
"a": 1,
|
||||||
|
"rgb": 11403519
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"collapse-display": true,
|
"collapse-display": true,
|
||||||
@@ -25,6 +32,6 @@
|
|||||||
"repelStrength": 10,
|
"repelStrength": 10,
|
||||||
"linkStrength": 1,
|
"linkStrength": 1,
|
||||||
"linkDistance": 250,
|
"linkDistance": 250,
|
||||||
"scale": 0.9999999999999993,
|
"scale": 0.6666666666666659,
|
||||||
"close": true
|
"close": true
|
||||||
}
|
}
|
||||||
23
.obsidian/workspace.json
vendored
23
.obsidian/workspace.json
vendored
@@ -13,12 +13,12 @@
|
|||||||
"state": {
|
"state": {
|
||||||
"type": "markdown",
|
"type": "markdown",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "README.md",
|
"file": "Documentación personal/Mecanica de Unix/Bash Scripting Avanzado/Funciones puras.md",
|
||||||
"mode": "source",
|
"mode": "preview",
|
||||||
"source": false
|
"source": false
|
||||||
},
|
},
|
||||||
"icon": "lucide-file",
|
"icon": "lucide-file",
|
||||||
"title": "README"
|
"title": "Funciones puras"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
"state": {
|
"state": {
|
||||||
"type": "search",
|
"type": "search",
|
||||||
"state": {
|
"state": {
|
||||||
"query": "",
|
"query": "tag:#Temario-BSA",
|
||||||
"matchingCase": false,
|
"matchingCase": false,
|
||||||
"explainSearch": false,
|
"explainSearch": false,
|
||||||
"collapseAll": false,
|
"collapseAll": false,
|
||||||
@@ -74,11 +74,13 @@
|
|||||||
"title": "Marcadores"
|
"title": "Marcadores"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
"currentTab": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"direction": "horizontal",
|
"direction": "horizontal",
|
||||||
"width": 221.5
|
"width": 221.5,
|
||||||
|
"collapsed": true
|
||||||
},
|
},
|
||||||
"right": {
|
"right": {
|
||||||
"id": "519d5773673c1040",
|
"id": "519d5773673c1040",
|
||||||
@@ -196,16 +198,19 @@
|
|||||||
},
|
},
|
||||||
"active": "6baa04c1fda7d92f",
|
"active": "6baa04c1fda7d92f",
|
||||||
"lastOpenFiles": [
|
"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/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",
|
"Documentación personal/Lenguajes de programación absurdos",
|
||||||
"BDD/SQL/Importación y exportación de base de datos.md",
|
"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/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",
|
"Documentación personal/Mecanica de Unix",
|
||||||
"BDD/SQL/Diario/Clase 4 de diciembre.md",
|
"BDD/SQL/Diario/Clase 4 de diciembre.md",
|
||||||
"BDD/SQL/Lenguaje de Manupulación de Datos (DML).md",
|
"BDD/SQL/Lenguaje de Manupulación de Datos (DML).md",
|
||||||
"BDD/SQL/Lenguaje de definición de datos (DDL).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/Vista General 1.canvas",
|
||||||
"Documentación personal/Seguridad-Informatica/desktop.ini",
|
"Documentación personal/Seguridad-Informatica/desktop.ini",
|
||||||
"Documentación personal/Seguridad-Informatica/Tipos de ataque/Worm/Metodos/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/Virus/Metodos/desktop.ini",
|
||||||
"Documentación personal/Seguridad-Informatica/Tipos de ataque/Trojan/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/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/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/Worm/Gusano.md",
|
||||||
"Documentación personal/Seguridad-Informatica/Tipos de ataque/Virus/Virus informatico.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/Exploit/Exploits.md",
|
||||||
"Documentación personal/Seguridad-Informatica/Tipos de ataque/DoS/DoS.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/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/specops.svg",
|
||||||
"Documentación personal/Seguridad-Informatica/1_Imagenes/tools/software/satan.png",
|
"Documentación personal/Seguridad-Informatica/1_Imagenes/tools/software/satan.png",
|
||||||
"Documentación personal/Seguridad-Informatica/1_Imagenes/tools/software/nessuslogo.png",
|
"Documentación personal/Seguridad-Informatica/1_Imagenes/tools/software/nessuslogo.png",
|
||||||
|
|||||||
@@ -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.
|
||||||
@@ -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.
|
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:
|
# Lo que voy a apuntar va a ser:
|
||||||
- Bash Scripting (Hasta nivel avanzado)
|
|
||||||
- `awk`, `sed` y `grep`.
|
---
|
||||||
- Señales, pipes, TTY, pseudo terminales
|
### 1. Bash Scripting Avanzado
|
||||||
- ncurses
|
Aquí no se va a tratar solo de escribir scripts, sino de:
|
||||||
- Procesamiento de ficheros grandes en la terminal
|
- [[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:
|
### 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.
|
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.
|
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.
|
||||||
Reference in New Issue
Block a user