Skip to content
Merged

Dev #68

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ __pycache__/
*.ruff_cache/
.cache
.complexipy_cache/
.kiro

# Files
*.pyc
Expand Down
134 changes: 81 additions & 53 deletions docs/capt_1_operative_systems/topic_1_linux.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,10 @@ El modelo de desarrollo abierto de Linux, sustentado por una comunidad global de
desarrolladores y usuarios, facilita una evolución constante, con mejoras continuas en
rendimiento, estabilidad y seguridad. Esta diversidad se manifiesta en la existencia de
múltiples distribuciones que integran el _kernel_ con diferentes herramientas, entornos
gráficos y gestores de paquetes. Cuando estas componentes se combinan con
configuraciones específicas y, en muchos casos, un entorno gráfico, se obtiene una
**distribución**. Ejemplos representativos como Ubuntu, Debian, Fedora o Arch Linux
ilustran cómo un mismo núcleo puede ajustarse a contextos de uso muy distintos.
gráficos y gestores de paquetes. Cuando estas componentes se combinan con configuraciones
específicas y, en muchos casos, un entorno gráfico, se obtiene una **distribución**.
Ejemplos representativos como Ubuntu, Debian, Fedora o Arch Linux ilustran cómo un mismo
núcleo puede ajustarse a contextos de uso muy distintos.

### La terminal

Expand All @@ -65,10 +65,10 @@ que especifican el objetivo de la acción.
formato detallado, y el argumento `/home/usuario`, que especifica la ubicación del
directorio cuyo contenido se desea visualizar.

El propio sistema facilita la consulta y el aprendizaje mediante documentación
integrada. Para ello, herramientas como `man`, `help` o `type` permiten comprender el
funcionamiento interno de los comandos y distinguir entre utilidades externas, funciones
internas o alias definidos por el usuario.
El propio sistema facilita la consulta y el aprendizaje mediante documentación integrada.
Para ello, herramientas como `man`, `help` o `type` permiten comprender el funcionamiento
interno de los comandos y distinguir entre utilidades externas, funciones internas o
alias definidos por el usuario.

Los manuales se encuentran organizados en secciones que agrupan la información según su
naturaleza, lo que permite acceder de manera más precisa a la documentación. Las
Expand All @@ -84,11 +84,10 @@ secciones más comunes son las siguientes:
4. **Archivos especiales y dispositivos**: Describe archivos del sistema y dispositivos
especiales ubicados en `/dev` u otras rutas del sistema de archivos. Ejemplo:
`/dev/null`.
5. **Formatos de archivo y convenciones**: Incluye descripciones de formatos de
archivos, convenciones de configuración y estructuras de datos. Ejemplo:
`/etc/passwd`.
6. **Juegos y diversiones**: Contiene documentación sobre juegos, ejemplos o programas
de entretenimiento incluidos en el sistema.
5. **Formatos de archivo y convenciones**: Incluye descripciones de formatos de archivos,
convenciones de configuración y estructuras de datos. Ejemplo: `/etc/passwd`.
6. **Juegos y diversiones**: Contiene documentación sobre juegos, ejemplos o programas de
entretenimiento incluidos en el sistema.
7. **Miscelánea**: Agrupa temas varios, convenciones, estándares o programas que no
encajan en otras secciones.
8. **Comandos de administración del sistema**: Incluye comandos reservados para la
Expand All @@ -104,8 +103,8 @@ directamente a la información relevante.
`man 1 open` podría referirse a un comando de usuario llamado `open`.

No todos los comandos necesariamente cuentan con una sección específica en el manual, en
algunos casos, la información puede encontrarse únicamente mediante otras herramientas
de ayuda o documentación externa.
algunos casos, la información puede encontrarse únicamente mediante otras herramientas de
ayuda o documentación externa.

### Comandos básicos

Expand Down Expand Up @@ -136,14 +135,14 @@ administración de sistemas locales y remotos.

Estos son algunos de los comandos más utilizados para el día a día. Sin embargo, existen
aún más comandos cuyo comportamiento puede verse alterado gracias a las opciones que
ofrecen. Es por ello que resulta impracticable enumerar todos los comandos de Linux
junto con sus múltiples opciones, debido a la gran cantidad y diversidad que presentan.
ofrecen. Es por ello que resulta impracticable enumerar todos los comandos de Linux junto
con sus múltiples opciones, debido a la gran cantidad y diversidad que presentan.

Por esta razón, es posible utilizar la opción `--help` en cualquier comando para obtener
información detallada sobre su uso, incluyendo las opciones disponibles y una breve
descripción de su funcionalidad. También existe Google o tu LLM de confianza, pero
quizás te lo pases mejor explorando en tu propio sistema. Aunque mejor hazlo en una
máquina virtual, por si acaso.
descripción de su funcionalidad. También existen recursos externos como la documentación
oficial o motores de búsqueda, aunque explorar el propio sistema resulta igualmente
enriquecedor, preferiblemente en un entorno controlado como una máquina virtual.

En cualquier caso, aquí tienes una recopilación de los comandos más utilizados:

Expand Down Expand Up @@ -181,9 +180,9 @@ En cualquier caso, aquí tienes una recopilación de los comandos más utilizado
Linux organiza su almacenamiento siguiendo una estructura jerárquica unificada en forma
de árbol cuyo origen se encuentra en el directorio raíz (`/`).

A diferencia de otros sistemas operativos, no existen unidades identificadas por letras
(no tienes tu disco local C como en Windows), todos los dispositivos de almacenamiento
se incorporan a esta jerarquía mediante el proceso de montaje.
A diferencia de otros sistemas operativos, no existen unidades identificadas por letras;
todos los dispositivos de almacenamiento se incorporan a esta jerarquía mediante el
proceso de montaje.

<p align="center">
<img src="https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fwww.tecmint.com%2Fwp-content%2Fuploads%2F2012%2F07%2FLinux-File-System.jpg&f=1&nofb=1&ipt=b56b5b1d3ede73ff5f4eeeba1bd0c56bc7573349258800f0aca2cf57fa506845"/>
Expand All @@ -193,10 +192,10 @@ se incorporan a esta jerarquía mediante el proceso de montaje.

Dentro de esta estructura destacan una serie de directorios esenciales, entre ellos:

- **/boot**: Alberga los componentes necesarios para el arranque del sistema, incluido
el kernel y el gestor **GRUB** (un programa que aparece al iniciar Linux y permite
manejar el proceso de inicio, permitiéndote elegir el sistema operativo en caso de que
tengas varias particiones, por ejemplo).
- **/boot**: Alberga los componentes necesarios para el arranque del sistema, incluido el
kernel y el gestor **GRUB** (un programa que aparece al iniciar Linux y permite manejar
el proceso de inicio, permitiéndote elegir el sistema operativo en caso de que tengas
varias particiones, por ejemplo).
- **/etc**: Concentra los archivos de configuración en formato de texto plano,
determinando el comportamiento del sistema y sus servicios.
- **/bin** y **/sbin**: Contienen ejecutables imprescindibles para la operación básica y
Expand Down Expand Up @@ -228,15 +227,15 @@ administrativas.
### Seguridad y permisos

Cada archivo o directorio define privilegios de **lectura**, **escritura** y
**ejecución** para tres categorías claramente diferenciadas: a) el **propietario**, b)
el **grupo** asociado y c) el resto de usuarios, denominados **otros**.
**ejecución** para tres categorías claramente diferenciadas: a) el **propietario**, b) el
**grupo** asociado y c) el resto de usuarios, denominados **otros**.

Este esquema limita el acceso indebido a los recursos. Por encima de estas restricciones
se sitúa el **superusuario**, identificado como `root`, que posee control total sobre el
sistema y puede ignorar el modelo de permisos convencional.

La categoría de **otros** representa a cualquier usuario que no sea ni el propietario
del archivo ni miembro del grupo asociado.
La categoría de **otros** representa a cualquier usuario que no sea ni el propietario del
archivo ni miembro del grupo asociado.

El sistema evalúa los permisos siguiendo un orden de prioridad estricto: primero
comprueba si el usuario es el propietario, en cuyo caso aplica los permisos
Expand All @@ -253,9 +252,8 @@ Los permisos se visualizan habitualmente mediante el comando `ls -l`, que muestr
cadena simbólica como `rwxr-xr--`.

Esta notación agrupa los permisos en tres bloques de tres caracteres, cada uno
correspondiente al propietario, al grupo y a otros, respectivamente. Cada carácter
indica si el permiso de lectura (`r`), escritura (`w`) o ejecución (`x`) está concedido
o no.
correspondiente al propietario, al grupo y a otros, respectivamente. Cada carácter indica
si el permiso de lectura (`r`), escritura (`w`) o ejecución (`x`) está concedido o no.

???+ example "Ejemplo"

Expand Down Expand Up @@ -286,8 +284,8 @@ o no.

Es importante destacar que cada bloque de tres caracteres sigue siempre el orden `rwx`.

Cuando un permiso no está habilitado, se reemplaza con un guion (`-`). Por ejemplo,
`r--` indica que únicamente se permite la lectura, mientras que `rw-` permite lectura y
Cuando un permiso no está habilitado, se reemplaza con un guion (`-`). Por ejemplo, `r--`
indica que únicamente se permite la lectura, mientras que `rw-` permite lectura y
escritura, pero no ejecución.

### Modificación de permisos
Expand All @@ -297,8 +295,8 @@ Podemos modificar los permisos de los archivos y directorios utilizando el coman

En la **notación octal**, cada permiso tiene un valor numérico fijo, donde la lectura
equivale a 4, la escritura a 2 y la ejecución a 1. La suma de estos valores determina el
permiso final para cada categoría. El comando recibe siempre tres dígitos que
representan de izquierda a derecha los permisos del propietario, del grupo y de otros.
permiso final para cada categoría. El comando recibe siempre tres dígitos que representan
de izquierda a derecha los permisos del propietario, del grupo y de otros.

???+ example "Ejemplo"

Expand All @@ -323,13 +321,13 @@ emplear operadores para añadir, quitar o asignar permisos.
que pudiera tener ese grupo (como el de escritura) de una sola vez.

El sistema emplea el comando `umask` para definir los permisos **por defecto** de los
nuevos archivos y directorios. Mientras que `chmod` modifica permisos existentes,
`umask` actúa como una máscara que restringe los permisos máximos iniciales.
nuevos archivos y directorios. Mientras que `chmod` modifica permisos existentes, `umask`
actúa como una máscara que restringe los permisos máximos iniciales.

Para los archivos, el sistema parte de un valor máximo de lectura y escritura para
todos, y para los directorios, de permisos completos. El valor de `umask` indica qué
permisos deben eliminarse automáticamente, de modo que cuanto más restrictiva sea la
máscara, más limitados serán los permisos resultantes.
Para los archivos, el sistema parte de un valor máximo de lectura y escritura para todos,
y para los directorios, de permisos completos. El valor de `umask` indica qué permisos
deben eliminarse automáticamente, de modo que cuanto más restrictiva sea la máscara, más
limitados serán los permisos resultantes.

???+ example "Ejemplo"

Expand All @@ -349,8 +347,8 @@ máscara, más limitados serán los permisos resultantes.
Además de los permisos, cada archivo y directorio posee un **propietario** y un
**grupo**, que determinan quién ejerce la autoridad principal sobre él.

El comando `chown` permite modificar esta propiedad, definiendo quién es el dueño y a
qué grupo pertenece un recurso. A diferencia de `chmod`, que puede ser utilizado por el
El comando `chown` permite modificar esta propiedad, definiendo quién es el dueño y a qué
grupo pertenece un recurso. A diferencia de `chmod`, que puede ser utilizado por el
propietario del archivo para ajustar sus permisos, `chown` requiere privilegios
administrativos, ya que cambiar la propiedad implica transferir el control efectivo del
recurso.
Expand Down Expand Up @@ -393,11 +391,10 @@ simultáneamente, y puede aplicarse de forma recursiva a directorios completos.

La gestión de usuarios se completa con comandos orientados a la creación y mantenimiento
de cuentas. Herramientas como `adduser` permiten crear nuevos usuarios de forma
interactiva, mientras que `passwd` se utiliza para establecer o modificar contraseñas.
La pertenencia a grupos puede consultarse mediante `groups`, tanto para el usuario
actual como para cualquier otro usuario del sistema, y modificarse añadiendo usuarios a
grupos específicos, como `sudo`, para concederles capacidades administrativas
controladas.
interactiva, mientras que `passwd` se utiliza para establecer o modificar contraseñas. La
pertenencia a grupos puede consultarse mediante `groups`, tanto para el usuario actual
como para cualquier otro usuario del sistema, y modificarse añadiendo usuarios a grupos
específicos, como `sudo`, para concederles capacidades administrativas controladas.

???+ example "Ejemplos"

Expand All @@ -424,8 +421,8 @@ inicia un programa, el sistema operativo carga el archivo binario en memoria, as
recursos necesarios y lo transforma en un proceso activo.

Cada proceso es gestionado por el kernel y recibe un identificador único denominado
**PID** (_Process ID_). Todos los procesos forman una jerarquía cuyo origen es el
proceso con PID 1, gestionado actualmente por **`systemd`**.
**PID** (_Process ID_). Todos los procesos forman una jerarquía cuyo origen es el proceso
con PID 1, gestionado actualmente por **`systemd`**.

A lo largo de su ciclo de vida, un proceso puede encontrarse en distintos estados, que
van desde ejecución activa hasta espera o finalización, y puede supervisarse mediante
Expand Down Expand Up @@ -537,3 +534,34 @@ cambios sin necesidad de cerrar la sesión, manteniendo la continuidad del traba
Más allá de los alias, Linux ofrece otras herramientas de automatización, como **scripts
Bash** y **Makefiles**, que permiten ejecutar secuencias de comandos de manera periódica
o en respuesta a eventos específicos.

## Gestión de red y puertos

En entornos de desarrollo y administración de sistemas, es habitual necesitar
inspeccionar el estado de la red, identificar qué puertos están en uso o verificar la
conectividad con servicios remotos. Para ello, Linux dispone de varias herramientas que
pueden instalarse con los siguientes comandos:

```bash linenums="1"
sudo apt install net-tools
sudo apt-get install telnet
```

Una vez instaladas, es posible listar todos los puertos TCP activos en el sistema:

```bash linenums="1"
netstat -n --all --tcp
```

Para localizar el proceso que está utilizando un puerto específico, como el 9000:

```bash linenums="1"
sudo lsof -i -P -n | grep 9000
```

Finalmente, para comprobar la conectividad con un servicio concreto mediante Telnet,
indicando la dirección IP y el puerto:

```bash linenums="1"
telnet localhost 5433
```
12 changes: 6 additions & 6 deletions docs/capt_2_tools/topic_1_git.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ El **control de versiones** es una herramienta que permite gestionar los cambios
archivos a lo largo del tiempo, facilitando la recuperación de versiones anteriores
cuando sea necesario.

Puedes imaginarlo como un sistema de **etiquetas de cambios**, cada vez que guardas un
cambio usando un _commit_ en Git, se genera un **identificador único** que registra el
estado exacto de los archivos en ese momento. Esto te permite consultar, comparar o
Puede entenderse como un sistema de **etiquetas de cambios**, cada vez que se guarda un
cambio mediante un _commit_ en Git, se genera un **identificador único** que registra el
estado exacto de los archivos en ese momento. Esto permite consultar, comparar o
restaurar versiones anteriores de manera segura y organizada.

### Terminología
Expand Down Expand Up @@ -726,9 +726,9 @@ borrado seguro (solo si está fusionada), usa `-d`:
git fetch --prune && git branch -vv | grep ': gone]' | awk '{print $1}' | xargs git branch -d
```

También, como recomendación, revisa primero qué se va a borrar ejecutando solo el
siguiente comando:
También, como recomendación, conviene revisar primero qué ramas se van a eliminar
ejecutando únicamente el siguiente comando antes de proceder al borrado:

```bash linenums="1"
`git branch -vv | grep ': gone]'` antes de eliminar.
git branch -vv | grep ': gone]'
```
Loading