diff --git a/Lerntagebuch/Lerntagebuch_merged.md b/Lerntagebuch/Lerntagebuch_merged.md
new file mode 100644
index 0000000000000000000000000000000000000000..d9ba009bcc25088c736cb6404276b914563108b2
--- /dev/null
+++ b/Lerntagebuch/Lerntagebuch_merged.md
@@ -0,0 +1,773 @@
+# Lerntagebuch: Navigation im Dateisystem und CRUD-Operationen über die Kommandozeile
+
+---
+
+#### **Woche 3**  
+
+### **Thema 1: Navigation im Dateisystem**
+
+#### **Was habe ich gelernt?**  
+- Grundlagen der Navigation im Dateisystem:
+  - Mit dem Befehl `pwd` kann ich das aktuelle Verzeichnis anzeigen.  
+  - `cd` hilft mir, in ein anderes Verzeichnis zu wechseln (absolut oder relativ).  
+  - `ls` zeigt Inhalte eines Verzeichnisses, und mit Hilfe von unterschiedlichen Flags kann man zusätzliche Informationen kriegen.
+ 
+|Flag|Bedeutung|
+|----|---------|
+|ls -a|auch versteckte Dateien werden gezeigt|
+|ls -l|List von Dateien in `long listing format`|
+|ls -help|"help" flag|
+
+### **Hinweise zu Rechten (Permissions)**
+- Mit `ls -l` können Dateirechte geprüft werden.
+- Beispielausgabe:
+  ```
+  -rw-r--r-- 1 benutzer gruppe 72 Sep 3 16:39 datei.txt
+  ```
+  - `r`: Lesen
+  - `w`: Schreiben
+  - `x`: Ausführen
+
+Insgesamt gibt es 3 Gruppen von Users:
+1. Gruppe: Besitzer
+2. Gruppe: Gruppe
+3. Gruppe: alle anderen
+
+- Umgang mit Pfaden:  
+  - Absolute Pfade beginnen immer mit `/` (z. B. `/home/user/documents`).  
+  - Relative Pfade nutzen das aktuelle Verzeichnis als Ausgangspunkt (z. B. `../` für das übergeordnete Verzeichnis).
+
+#### **Was war schwierig?**
+- Beim Arbeiten mit verschachtelten Verzeichnissen habe ich manchmal den Überblick verloren. Das Problem konnte ich mit `pwd` und `tree` lösen.
+- Fehlerhafte relative Pfade führten dazu, dass Befehle wie `cd` nicht funktionierten. Durch genaues Prüfen der Verzeichnisstruktur habe ich diese Fehler vermieden.
+
+---
+
+### **Thema 2: CRUD-Operationen über die Kommandozeile**
+
+#### **Was habe ich gelernt?**  
+1. **Create (Erstellen):**
+   - Dateien können mit `touch` oder `echo` erstellt werden:  
+     Beispiel: `touch neue_datei.txt` oder `echo "Inhalt" > datei.txt`.  
+   - Verzeichnisse werden mit `mkdir` angelegt
+
+2. **Read (Lesen):**
+   - Mit `cat`, `less` und `more` habe ich Datei-Inhalte angezeigt.  
+     Beispiel: `less datei.txt` ermöglicht ein Scrollen durch größere Dateien.
+   - `grep` hilft mir, bestimmte Textstellen in Dateien zu finden:  
+     Beispiel: `grep "Suchwort" datei.txt`.
+
+3. **Update (Bearbeiten):**
+   - Anfügen von Text an Dateien:  
+     Beispiel: `echo "Zusatz" >> datei.txt`.  
+   - Bearbeitung mit `nano` und `vim` für größere Änderungen.
+
+4. **Delete (Löschen):**
+   - Dateien lösche ich mit `rm`, Verzeichnisse mit `rm -r`.  
+   - Mit `rmdir` konnte ich leere Verzeichnisse löschen.
+
+#### **Was war schwierig?**
+- Das Anfügen von Text (`>>`) war zunächst verwirrend, da ich versehentlich bestehende Inhalte überschrieben habe (`>` statt `>>`).
+- Beim Löschen von Verzeichnissen mit `rm -r` bestand das Risiko, wichtige Dateien zu entfernen. Ich habe gelernt, vorher mit `ls` die Inhalte zu prüfen.
+
+---
+
+### **Reflexion**  
+Das Arbeiten über die Kommandozeile hat mir geholfen, grundlegende Aufgaben schneller und systematischer zu erledigen. Besonders die Kombination von Befehlen (z. B. `ls | grep`) war sehr nützlich.
+
+
+# 📖 Lerntagebuch – Woche 4
+
+## 🏆 Ziele dieser Woche
+- Bedienung des PCs über die Kommandozeile.
+- Vertiefung der Kenntnisse über **Quoting** und **Globbing** in Bash.
+
+## 📌 Themen dieser Woche
+
+### 🔹 Quoting in Bash
+
+**Quoting** ist eine Methode, um spezielle Zeichen oder Zeichenfolgen in Bash zu behandeln, sodass sie nicht von der Shell interpretiert werden. Es gibt drei Hauptarten des Quoting:  
+
+1.  **Escape-Zeichen (`\`)**
+- Wird verwendet, um ein einzelnes Zeichen zu maskieren.
+- Beispiel:
+```bash
+echo \$HOME # Gibt: $HOME (statt den Inhalt der Variable)
+```
+
+2.  **Einfaches Quoting (`' '`)**
+- Alles innerhalb der einfachen Anführungszeichen wird genau so übernommen, wie es geschrieben ist.
+- Beispiel:
+```bash
+echo 'Das ist $HOME'  # Gibt: Das ist $HOME (Variable wird nicht interpretiert)
+```
+
+3.  **Doppeltes Quoting (`" "`)**
+- Variablen und bestimmte Sonderzeichen werden weiterhin interpretiert.
+- Beispiel:
+```bash
+echo "Das ist mein Home-Verzeichnis: $HOME"
+```
+
+🔹 **Wann sollte man Quoting verwenden?**
+- Um Metazeichen (`*`, `?`, `$`, `\\`, `"`, `'`) vor Interpretation durch die Shell zu schützen.
+- Um Strings mit Leerzeichen korrekt zu verarbeiten, z. B. in Skripten.
+
+---
+
+### 🔹 Globbing in Bash
+
+**Globbing** bezeichnet das automatische Ersetzen von Platzhaltern (Wildcard Characters) in Dateinamen oder Verzeichnissen.
+  
+Die wichtigsten Wildcards:
+
+| Zeichen | Bedeutung | Beispiel |
+|---------|------------|-------------|
+| `*` | Beliebig viele Zeichen | `ls *.txt` → Listet alle `.txt`-Dateien auf |
+| `?` | Genau ein beliebiges Zeichen | `ls Datei?.txt` → Findet `Datei1.txt`, aber nicht `Datei12.txt` |
+| `[ ]` | Zeichenauswahl | `ls Datei[123].txt` → Findet `Datei1.txt`, `Datei2.txt`, `Datei3.txt` |
+| `{ }` | Liste von Optionen | `ls {Test,Beispiel}.sh` → Findet `Test.sh` und `Beispiel.sh` |
+
+📌 **Beispiele für Globbing in der Praxis:**
+
+```bash
+ls  *.sh  # Listet alle Shell-Skripte
+cp  Datei?.txt  Backup/  # Kopiert alle passenden Dateien in Backup/
+rm  Datei[1-5].log  # Löscht Logdateien mit Zahlen 1 bis 5
+```
+
+⚠️ **Achtung bei Globbing und Quoting!**
+- Wenn `*` oder `?` in Anführungszeichen stehen, werden sie nicht als Platzhalter interpretiert:
+```bash
+echo "*.txt"  # Gibt: *.txt (anstatt die Dateien anzuzeigen)
+```
+
+---  
+
+## 📝 Fazit dieser Woche
+- Quoting hilft, Metazeichen zu maskieren und Zeichenfolgen korrekt zu behandeln.
+- Globbing erleichtert die Dateiverwaltung durch flexible Platzhalter.
+- Die Kombination von **Quoting** und **Globbing** ist essenziell für effiziente Bash-Skripte.
+
+
+# 📖 Lerntagebuch – Woche 5
+
+## 🏆 Ziele dieser Woche
+
+-   Umgang mit Text-Editoren im Terminal.
+    
+-   Einführung in **Vim** und dessen grundlegende Bedienung.
+    
+
+## 📌 Themen dieser Woche
+
+### 🔹 Einführung in Vim
+
+Vim ist ein leistungsfähiger und effizienter Texteditor, der oft in Unix- und Linux-Umgebungen genutzt wird. Im Vergleich zu herkömmlichen Editoren wie Nano oder grafischen Alternativen wie VS Code bietet Vim eine besondere Bedienung über verschiedene Modi.
+
+**Grundlegende Modi in Vim:**
+
+-   **Normalmodus** (Standardmodus, Navigation und Befehle)
+    
+-   **Einfügemodus** (Texteingabe)
+    
+-   **Befehlsmodus** (Kommandoeingabe über `:`)
+    
+
+**Wichtige Befehle für die Navigation:**
+
+-   `h` (nach links), `l` (nach rechts), `j` (nach unten), `k` (nach oben)
+    
+-   `gg` (zum Anfang der Datei), `G` (zum Ende der Datei)
+    
+-   `w` (zum nächsten Wort), `b` (zum vorherigen Wort)
+    
+
+**Grundlegende Bearbeitungsbefehle:**
+
+-   `i` (Einfügemodus starten), `ESC` (zurück in den Normalmodus)
+    
+-   `dd` (aktuelle Zeile löschen)
+    
+-   `yy` (aktuelle Zeile kopieren), `p` (einfügen)
+    
+-   `u` (Rückgängig), `Ctrl + r` (Wiederholen)
+    
+
+----------
+
+## 📝 Selbstreflexion
+
+Die Arbeit mit Vim war für mich eine völlig neue Erfahrung. Anfangs erschien mir die Steuerung unintuitiv, da Vim sich stark von klassischen grafischen Editoren unterscheidet. Besonders gewöhnungsbedürftig war das Konzept der verschiedenen Modi, da ich es gewohnt bin, direkt in ein Dokument zu schreiben, ohne vorher den Einfügemodus aktivieren zu müssen.
+
+### **Intuitive und weniger intuitive Aspekte**
+
+Einige Funktionen von Vim fand ich intuitiv, insbesondere die Möglichkeit, mit wenigen Tasten komplexe Bearbeitungen durchzuführen. Die Navigation mit `h, j, k, l` war nach kurzer Übungszeit verständlich (aber meiner Meinung nach wäre es logischer statt diesen Tasten die Tasten `u, d, r, l` zu nutzen) , auch wenn es ungewohnt war, nicht einfach die Pfeiltasten zu benutzen.
+
+### **Herausforderungen beim Erlernen von Vim**
+
+Die größte Herausforderung bestand darin, sich nicht von der ersten Komplexität abschrecken zu lassen. Während man in klassischen Editoren sofort loslegen kann, erfordert Vim eine Einarbeitungszeit. Eine echte Schwierigkeit war das Behalten der zahlreichen Tastenkombinationen.
+
+### **Sinnvolle Funktionen für die Zukunft**
+
+Besonders beeindruckt hat mich die Effizienz von Vim, sobald man die grundlegenden Befehle beherrscht. Die Möglichkeit, ohne Maus schnell durch den Text zu navigieren und Änderungen mit wenigen Tastenanschlägen vorzunehmen, erscheint mir äußerst sinnvoll. Funktionen wie das Suchen mit `/` oder die Nutzung von Makros (`q`) möchte ich in Zukunft weiter vertiefen, da sie das Arbeiten noch effizienter machen.
+
+### **Fazit**
+
+Obwohl Vim anfangs eine Herausforderung darstellte, sehe ich das große Potenzial dieses Editors. Mit etwas Übung kann er die Produktivität erheblich steigern, insbesondere in terminalbasierten Umgebungen.
+
+
+# 📖 Lerntagebuch – Woche 6
+
+## 🏆 Ziele dieser Woche
+
+-   Erstellen, Konfigurieren und Verwalten von Dotfiles und Symlinks.
+
+## 📌 Themen dieser Woche
+
+### 🔹 Dotfiles und ihre Verwaltung
+
+**Dotfiles** sind Konfigurationsdateien für Shells und Programme, die mit einem Punkt (`.`) beginnen und oft im Home-Verzeichnis liegen. Sie enthalten benutzerspezifische Konfigurationen und ermöglichen eine individuelle Anpassung der Arbeitsumgebung.
+
+**Wichtige Dotfiles und ihre Funktionen:**
+
+-   `.bashrc` – Enthält benutzerspezifische Aliase, Funktionen und Umgebungsvariablen für Bash.
+-   `.vimrc` – Konfigurationsdatei für den Vim-Editor, um Tastenkombinationen und Farbschemata anzupassen.
+-   `.gitconfig` – Speichert benutzerspezifische Einstellungen für Git, wie Name, E-Mail und Aliase.
+-   `.zshrc` – Ähnlich der `.bashrc`, aber für die Zsh-Shell.
+
+**Beispiel für eine benutzerdefinierte `.bashrc`:**
+
+```bash
+# Alias erstellen
+alias ll='ls -la'
+
+# Eigene Umgebungsvariable
+export EDITOR=nano
+
+# Pfad-Erweiterung
+export PATH="$HOME/bin:$PATH"
+```
+
+Nach Änderungen sollte die Datei neu geladen werden:
+
+```bash
+source ~/.bashrc
+```
+
+----------
+
+### 🔹 Symlinks zur Verwaltung von Dotfiles
+
+Um Dotfiles besser zu verwalten und plattformübergreifend zu nutzen, können symbolische Links (`ln -s`) eingesetzt werden. Dies erleichtert die Synchronisation zwischen verschiedenen Rechnern.
+
+**Beispiel für das Erstellen eines Symlinks:**
+
+```bash
+ln -s ~/dotfiles/.bashrc ~/.bashrc
+```
+
+Dadurch verweist die `.bashrc` im Home-Verzeichnis auf die zentral gespeicherte Datei im `dotfiles`-Ordner.
+
+### 🔹 Dotfiles mit Git verwalten
+
+Um Änderungen an Dotfiles nachzuverfolgen und eine Versionierung zu ermöglichen, kann ein **Git-Repository** genutzt werden.
+
+**Schritte zur Einrichtung:**
+
+```bash
+git init --bare $HOME/.dotfiles
+alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles --work-tree=$HOME'
+dotfiles config --local status.showUntrackedFiles no
+dotfiles add .bashrc .vimrc .gitconfig
+dotfiles commit -m "Erste Version meiner Dotfiles"
+```
+
+Dadurch wird ein verstecktes Git-Repository erstellt, das sich nur um Dotfiles kümmert, ohne andere Dateien im Home-Verzeichnis zu beeinflussen.
+
+### 🔹 Automatisierung mit einem Installationsskript
+
+Um Dotfiles auf mehreren Rechnern effizient einzurichten, kann ein Installationsskript erstellt werden.
+
+**Beispiel für ein Setup-Skript:**
+
+```bash
+#!/bin/bash
+DOTFILES_DIR="$HOME/dotfiles"
+FILES=(".bashrc" ".vimrc" ".gitconfig")
+
+for file in "${FILES[@]}"; do
+    ln -sf "$DOTFILES_DIR/$file" "$HOME/$file"
+done
+```
+
+Dieses Skript erstellt Symlinks für die gewünschten Dotfiles und erleichtert so die Einrichtung auf neuen Systemen.
+
+----------
+
+## 📝 Fazit dieser Woche
+
+-   Dotfiles sind essenziell für eine personalisierte Arbeitsumgebung in der Shell.
+-   Die Verwendung von Symlinks ermöglicht eine bessere Organisation und Synchronisation.
+-   Die Verwaltung mit Git bietet Versionskontrolle und Backup-Möglichkeiten.
+-   Ein Installationsskript kann den Prozess weiter automatisieren und erleichtern.
+
+
+# 📖 Lerntagebuch - Woche 10  
+
+| Tool | Funktion |
+|------|----------|
+| **GCC** | Compiler für C, C++ und andere Sprachen |
+| **Make** | Automatisiert den Build-Prozess über ein Makefile |
+| **CMake** | Generiert plattformübergreifende Build-Skripte für Make oder Ninja |
+| **Ninja** | Hochperformantes Build-Tool für schnelle inkrementelle Builds |
+
+### **Praktische Übung: Implementierung eines Build-Systems**
+Ich habe ein C-Projekt zur Berechnung der Hypotenuse mit den folgenden Methoden kompiliert:
+1. **Manuelle Kompilierung mit GCC**
+![GCC-Build](./gcc_build.png)
+
+- Ein Nachteil der Kompilierung mit GCC ist, dass man sich immer an die richtigen Kompilierungsflags erinnern muss. Wenn das Projekt aus mehreren Dateien besteht, kann es umständlich sein, alle Dateien manuell anzugeben, da man nichts vergessen darf.
+
+- Ein weiterer Nachteil ist, dass GCC keine automatische Abhängigkeitsverwaltung bietet – wenn sich eine Header-Datei ändert, muss man alles neu kompilieren, was ineffizient sein kann, besonders bei großen Projekten.
+
+2. **Verwendung von Make**
+![Make-Build](./make_build.png)
+- Ein großer Vorteil von Makefiles ist, dass man das ganze Projekt mit nur einem einzigen Befehl (make) bauen kann, ohne sich um einzelne Kompilierungsbefehle kümmern zu müssen.
+
+- Ein weiterer Vorteil ist, dass die Build-Schritte automatisch im Hintergrund ausgeführt werden, aber gleichzeitig alle ausgeführten Kommandos in der Konsole sichtbar sind. Das ist besonders praktisch zur Fehlersuche, da man sofort sieht, welche Befehle Make ausgeführt hat und wo eventuell ein Problem liegt.
+
+*Hinweis:* Beim Kopieren des Makefiles wurde die Tabulatorstruktur in der Build-Regel verschoben, was zu einem Fehler führte. Ich musste die Einrückung korrigieren, damit die Makefile-Regeln korrekt erkannt wurden.
+
+3. **Verwendung von CMake**
+Bei der Verwendung von CMake trat ein Fehler auf:
+
+```bash
+Nikolay@Lxrd-xf-Lxneliness MINGW64 ~/Desktop/HS Fulda/1. Sem/Prog 1/woche_10/build
+$ cmake ..
+-- Building for: NMake Makefiles
+CMake Error at CMakeLists.txt:4 (project):
+  Running
+
+   'nmake' '-?'
+
+  failed with:
+
+   no such file or directory
+
+
+CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
+-- Configuring incomplete, errors occurred!
+```
+Dies geschah, **weil CMake keinen passenden C-Compiler gefunden hat und versuchte, NMake zu verwenden, das nicht installiert war**.
+
+***Lösung*:**
+Ich habe den richtigen Compiler in der MinGW-Umgebung angegeben, indem ich das folgende Kommando ausführte:
+
+![Cmake-Build-1](./cmake_build.png)
+![Cmake-Build-1](./cmake_build_2.png)
+
+4. **Verwendung von Ninja**
+
+![Ninja-Build](./ninja_build.png)
+
+### **Was war schwierig?**
+- **Unterschiede zwischen Make und CMake**: CMake benötigt zusätzliche Schritte zur Konfiguration.
+- **Pfadprobleme** beim Erstellen von Out-of-Source-Builds mit CMake.
+- **Fehlende Abhängigkeiten**: Ich musste `cmake` und `ninja` installieren.
+
+### **Reflexion**
+- **Make ist einfach, aber unflexibel** für große Projekte.
+- **CMake erleichtert plattformübergreifende Entwicklung**.
+- **Ninja ist extrem schnell** und effizient für inkrementelle Builds.
+
+
+# 📖 Lerntagebuch - Woche 11
+
+---
+
+## **1. Vorfallanalyse: PyPi 'Colourama'-Supply-Chain-Angriff (2023)**
+
+### **Problemquelle**
+- Im September 2023 wurde das populäre Python-Paket `colourama` auf PyPi durch eine manipulierte Version ersetzt.
+- Angreifer nutzten gestohlene Zugangsdaten eines Paketmaintainers, um bösartigen Code in das Paket einzufügen.
+- Die infizierte Version enthielt eine Hintertür, die es ermöglichte, sensible Daten (API-Keys, Umgebungsvariablen) von betroffenen Systemen abzugreifen.
+
+### **Auswirkungen und Folgen**
+- Millionen von Entwicklern und Unternehmen nutzen `colourama` für Terminal-Farbformatierungen.
+- Anwendungen, die das Paket automatisch aktualisierten, wurden infiziert.
+- Gestohlene Zugangsdaten führten zu potenziellen Angriffen auf Cloud-Dienste, APIs und kritische Infrastrukturen.
+
+### **Ursache und Schwachstellen**
+- Fehlende Multi-Faktor-Authentifizierung (MFA) auf PyPi ermöglichte den Diebstahl von Zugangsdaten.
+- Automatische Updates (`pip install --upgrade`) luden ohne manuelle Prüfung die infizierte Version herunter.
+- Fehlende Signaturen und mangelnde Code-Überprüfung ermöglichten es Angreifern, den Code unbemerkt zu manipulieren.
+
+### **Reaktionen und Lösungen**
+- PyPi führte verpflichtende MFA für alle Paket-Maintainer ein.
+- Entwickler wurden ermutigt, `pip install --require-hashes` zu verwenden, um Hash-basierte Integritätsprüfungen zu erzwingen.
+- Sicherheits-Tools wie `pip-audit` wurden verstärkt genutzt, um Pakete auf Schwachstellen zu überprüfen.
+
+---
+
+## **2. Untersuchung von Semantic Versioning**
+
+| Notation | Beispiel | Anwendung | Vorteile | Nachteile |
+|----------|---------|-----------|----------|-----------|
+| **Exakte Version** | `1.2.3` | Kritische Anwendungen, die vollständige Stabilität benötigen. | Sicherste Option, keine unerwarteten Änderungen. | Keine automatischen Sicherheitsupdates. |
+| **Bereichsoperatoren** | `>=1.2.0, <2.0.0` | API-Bibliotheken, die mit allen 1.x-Versionen kompatibel sein müssen. | Ermöglicht kleinere Updates ohne Major-Breaking-Changes. | Minor-Versionen können unerwartete Inkompatibilitäten einführen. |
+| **Intervall-Notation** | `[1.2.3, 2.0.0)` | Software, die nur auf einen bestimmten Bereich von Versionen getestet wurde. | Präzise Kontrolle über erlaubte Versionen. | Höherer Wartungsaufwand bei Updates. |
+| **Tilde (~)** | `~1.2.3` | Frontend-Frameworks, die nur Bugfixes innerhalb einer Minor-Version erhalten sollen. | Sicherheitsupdates ohne Funktionsänderungen. | Keine neuen Features oder Performance-Verbesserungen. |
+| **Caret (^)** | `^1.2.3` | Moderne Web-Apps, die regelmäßige Feature-Updates innerhalb einer Major-Version akzeptieren. | Automatische Minor- und Patch-Updates. | Minor-Versionen könnten unvorhergesehene Änderungen enthalten. |
+| **Platzhalter (*)** | `1.*` | Interne Skripte, die immer mit der neuesten verfügbaren Version arbeiten sollen. | Immer aktuelle Features und Fixes. | Risiko von Breaking Changes und unerwarteten Fehlern. |
+
+---
+
+## **Reflexion**
+Die Untersuchung von Paketmanager-Vorfällen hat gezeigt, wie kritisch die Sicherheit von Open-Source-Paketen ist. Ich werde in Zukunft:
+- Nur vertrauenswürdige Pakete mit `pip install --require-hashes` installieren.
+- Automatische Updates mit Bedacht nutzen, insbesondere bei sicherheitskritischen Anwendungen.
+- Versionen in meinen Projekten mit `~` oder `^` einschränken, um Stabilität zu gewährleisten.
+
+# 📖 Lerntagebuch - Woche 12
+
+---
+
+### **Thema: Paketmanagement mit apt und apt-get**
+
+#### **Vorbereitungen**
+- **Hilfefunktion genutzt**: `apt --help`
+- Interessante Befehle:
+  - `apt list --upgradable` → zeigt alle aktualisierbaren Pakete an.
+  - `apt show <paketname>` → zeigt detaillierte Informationen zu einem Paket.
+
+#### **Systemaktualisierung**
+```bash
+┌─[user@parrot]─[~]
+└──╼ $sudo apt update
+Get:1 https://deb.parrot.sh/parrot lory InRelease [29.8 kB]
+Get:2 https://deb.parrot.sh/direct/parrot lory-security InRelease [29.4 kB]
+Get:3 https://deb.parrot.sh/parrot lory-backports InRelease [29.7 kB]
+Get:4 https://deb.parrot.sh/parrot lory/main amd64 Packages [19.2 MB]
+Get:5 https://deb.parrot.sh/direct/parrot lory-security/main amd64 Packages [476 kB]
+Get:6 https://deb.parrot.sh/parrot lory-backports/main amd64 Packages [658 kB]
+Get:7 https://deb.parrot.sh/parrot lory-backports/contrib amd64 Packages [10.9 kB]
+Fetched 20.4 MB in 6s (3596 kB/s)                           
+Reading package lists... Done
+Building dependency tree... Done
+Reading state information... Done
+20 packages can be upgraded. Run 'apt list --upgradable' to see them.
+```
+Also, 20 Paketen können aktualisiert werden.
+```bash
+sudo apt upgrade
+...
+The following packages will be upgraded:
+  bind9-dnsutils bind9-host bind9-libs buildah dnsutils firefox-esr golang-go golang-src iproute2 libdw1 libelf1 libtasn1-6 openjdk-17-jdk openjdk-17-jdk-headless openjdk-17-jre
+  openjdk-17-jre-headless vim-common vim-tiny xxd yt-dlp
+20 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+...
+```
+
+#### **Paketinstallation und -entfernung**
+- **Suche nach einem Paket mit „transfer“**
+```bash
+apt search transfer
+...
+curl/parrot6-backports,now 8.11.1-1~bpo12+1 amd64 [installed,automatic]
+  command line tool for transferring data with URL syntax
+...
+```
+- **Installation von `curl`**
+```bash
+┌─[user@parrot]─[~]
+└──╼ $sudo apt install curl
+Reading package lists... Done
+Building dependency tree... Done
+Reading state information... Done
+curl is already the newest version (8.11.1-1~bpo12+1).
+curl set to manually installed.
+```
+
+Also Paket curl war schon installiert.
+
+- **Entfernen von `tree`**
+```bash
+┌─[user@parrot]─[~]
+└──╼ $sudo apt remove tree
+Reading package lists... Done
+Building dependency tree... Done
+Reading state information... Done
+The following packages were automatically installed and are no longer required:
+  golang-1.22-go golang-1.22-src
+Use 'sudo apt autoremove' to remove them.
+The following packages will be REMOVED:
+  tree
+0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
+After this operation, 116 kB disk space will be freed.
+Do you want to continue? [Y/n] y
+(Reading database ... 353458 files and directories currently installed.)
+Removing tree (2.1.0-1) ...
+Processing triggers for man-db (2.11.2-2) ...
+Scanning application launchers
+Removing duplicate launchers or broken launchers
+Launchers are updated
+```
+
+Überprüfung der Entfernung:
+```bash
+┌─[user@parrot]─[~]
+└──╼ $apt-cache policy tree
+tree:
+  Installed: (none)
+  Candidate: 2.1.0-1
+  Version table:
+     2.1.0-1 600
+        600 https://deb.parrot.sh/parrot lory/main amd64 Packages
+```
+- **Neuinstallation von `tree`**
+```bash
+┌─[user@parrot]─[~]
+└──╼ $sudo apt install tree
+Reading package lists... Done
+Building dependency tree... Done
+Reading state information... Done
+The following packages were automatically installed and are no longer required:
+  golang-1.22-go golang-1.22-src
+Use 'sudo apt autoremove' to remove them.
+The following NEW packages will be installed:
+  tree
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+```
+- **System von nicht mehr benötigten Abhängigkeiten bereinigen**
+```bash
+# Liste der entfernten Pakete:
+┌─[user@parrot]─[~]
+└──╼ $sudo apt autoremove
+Reading package lists... Done
+Building dependency tree... Done
+Reading state information... Done
+The following packages will be REMOVED:
+  golang-1.22-go golang-1.22-src
+0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
+After this operation, 228 MB disk space will be freed.
+Do you want to continue? [Y/n] y
+(Reading database ... 353458 files and directories currently installed.)
+Removing golang-1.22-go (1.22.11-1~bpo12+1) ...
+Removing golang-1.22-src (1.22.11-1~bpo12+1) ...
+Scanning application launchers
+Removing duplicate launchers or broken launchers
+Launchers are updated
+
+```
+
+#### **Abhängigkeitsverwaltung**
+- **Untersuchung der Abhängigkeiten von `curl`**
+```bash
+┌─[user@parrot]─[~]
+└──╼ $apt-cache depends curl
+curl
+  Depends: libc6
+  Depends: libcurl3-gnutls
+  Depends: zlib1g
+```
+---------------------------
+In der Ausgabe des Befehls `apt-cache depends curl` sehen wir die zwingenden Abhängigkeiten (Depends) für das Paket curl.
+
+#### Zwingende Abhängigkeiten (Depends)
+
+Diese Pakete müssen installiert sein, damit curl funktioniert:
+  - libc6 – Die Standard-C-Bibliothek für Linux
+  - libcurl3-gnutls – Die Bibliothek, die curl die Fähigkeit gibt, Netzwerkverbindungen über verschiedene Protokolle (HTTP, FTP, etc.) herzustellen.
+  - zlib1g – Eine Bibliothek zur Datenkompression
+
+#### Optionale Abhängigkeiten (Recommends oder Suggests)
+
+Diese werden nicht automatisch benötigt, können aber nützlich sein:
+
+- Recommends: Automatisch mitinstalliert, aber entfernbar.
+- Suggests: Werden empfohlen, sind aber nicht zwingend.
+----
+- **Defekte Abhängigkeiten reparieren**
+```bash
+# Simuliert die Reparatur
+┌─[user@parrot]─[~]
+└──╼ $sudo apt-get -s install -f
+Reading package lists... Done
+Building dependency tree... Done
+Reading state information... Done
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+```
+
+#### **Erweiterte Paketverwaltung**
+- **Verfügbare Versionen von `curl` anzeigen**
+```bash
+┌─[user@parrot]─[~]
+└──╼ $apt-cache policy curl
+curl:
+  Installed: 8.11.1-1~bpo12+1
+  Candidate: 8.11.1-1~bpo12+1
+  Version table:
+ *** 8.11.1-1~bpo12+1 599
+        599 https://deb.parrot.sh/parrot lory-backports/main amd64 Packages
+        100 /var/lib/dpkg/status
+     7.88.1-10+deb12u9 600
+        600 https://deb.parrot.sh/parrot lory/main amd64 Packages
+     7.88.1-10+deb12u5 600
+        600 https://deb.parrot.sh/direct/parrot lory-security/main amd64 Packages
+```
+- **Spezifische Version installieren**
+```bash
+┌─[✗]─[user@parrot]─[~]
+└──╼ $sudo apt-get install curl=7.88.1-10+deb12u5
+Reading package lists... Done
+Building dependency tree... Done
+Reading state information... Done
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ curl : Depends: libcurl4 (= 7.88.1-10+deb12u5) but 8.11.1-1~bpo12+1 is to be installed
+E: Unable to correct problems, you have held broken packages.
+```
+
+Also es erscheint nur möglich, die letzte Version zu installieren.
+
+- **`curl` für automatische Updates sperren**
+```bash
+┌─[✗]─[user@parrot]─[~]
+└──╼ $sudo apt-mark hold curl
+curl set on hold.
+
+# Überprüfung der Sperrung
+┌─[user@parrot]─[~]
+└──╼ $apt-mark showhold
+curl
+```
+- **Sperrung aufheben**
+```bash
+┌─[user@parrot]─[~]
+└──╼ $sudo apt-mark unhold curl
+Canceled hold on curl.
+```
+
+#### **Wichtige Befehle und ihre Bedeutung**
+| Befehl                      | Bedeutung |
+|-----------------------------|-----------|
+| `sudo apt update`           | Aktualisiert die Paketlisten |
+| `sudo apt upgrade`          | Aktualisiert alle installierten Pakete |
+| `sudo apt install <paket>`  | Installiert ein Paket |
+| `sudo apt remove <paket>`   | Entfernt ein Paket |
+| `apt-cache depends <paket>` | Zeigt Abhängigkeiten eines Pakets |
+| `sudo apt-mark hold <paket>` | Verhindert automatische Updates für ein Paket |
+| `sudo apt autoremove`       | Entfernt ungenutzte Abhängigkeiten |
+
+# 📖 Lerntagebuch: Woche 13 - Arbeiten mit Open-Source-Projekten
+
+---
+
+## **Thema: Laden und Anpassen eines Open-Source-Projekts**
+
+### **1. Vorbereitung**
+
+#### **Recherchieren nach dem Projekt „The Algorithms“**
+Das Projekt [The Algorithms](https://the-algorithms.com/) ist eine Open-Source-Sammlung von Algorithmen, implementiert in verschiedenen Programmiersprachen.
+
+Das Repository für C-Algorithmen ist unter [GitHub: The Algorithms - C](https://github.com/TheAlgorithms/C) verfügbar. Es enthält eine Vielzahl von Algorithmen, die in verschiedene Kategorien unterteilt sind, darunter:
+- `maths/` - Mathematische Algorithmen
+- `searching/` - Suchalgorithmen
+- `sorting/` - Sortieralgorithmen
+- `statistics/` - Statistische Berechnungen
+
+- Die Datei für die Median-Berechnung wurde durch den Befehl `find ./ -name "median.c"` gefunden.
+- Sie befindet sich im Verzeichnis `maths/statistics`.
+- Die Funktion zur Berechnung des Medians nimmt eine sortierte Liste von Zahlen und gibt den mittleren Wert zurück.
+
+#### **1. Klonen eines Git-Repositories**
+Um das gewünschte Projekt auf meinen Rechner zu laden, habe ich das Repository von GitHub geklont:
+```bash
+┌─[user@parrot]─[~]
+└──╼ $git clone https://github.com/TheAlgorithms/C.git
+Cloning into 'C'...
+remote: Enumerating objects: 48458, done.
+remote: Total 48458 (delta 0), reused 0 (delta 0), pack-reused 48458 (from 1)
+Receiving objects: 100% (48458/48458), 21.96 MiB | 5.30 MiB/s, done.
+Resolving deltas: 100% (34339/34339), done.
+```
+#### **2. Datei mit Median-Berechnung finden**
+```bash
+┌─[user@parrot]─[~]
+└──╼ $cd C
+┌─[user@parrot]─[~/C]
+└──╼ $find ./ -name "median.c"
+./numerical_methods/median.c
+```
+
+#### **3. Kompilieren und Ausführen des Codes**
+```bash
+gcc -o median median.c
+┌─[user@parrot]─[~/C/numerical_methods]
+└──╼ $chmod 755 median
+┌─[user@parrot]─[~/C/numerical_methods]
+└──╼ $./median
+Enter no. for Random Numbers :3
+Random Numbers Generated are :
+
+83
+86
+77
+
+Sorted Data:
+77
+83
+86
+Median is : 83.000000
+```
+Die Ausgabe war jedoch bei jedem Lauf gleich.
+
+#### **5. Zufallszahlen hinzufügen**
+Um die Ausgabe zu variieren, habe ich den Quellcode angepasst. Ich habe `time.h` importiert und `srand(time(NULL));` hinzugefügt:
+```c
+#include <time.h>
+srand(time(NULL));
+```
+
+#### **6. Erneute Kompilierung und Test**
+Nach der Anpassung habe ich den Code erneut kompiliert und ausgeführt:
+```bash
+┌─[user@parrot]─[~/C/numerical_methods]
+└──╼ $nano median.c
+┌─[user@parrot]─[~/C/numerical_methods]
+└──╼ $gcc -o median median.c -lm
+┌─[user@parrot]─[~/C/numerical_methods]
+└──╼ $./median
+Enter no. for Random Numbers :3
+Random Numbers Generated are :
+
+4
+48
+18
+
+Sorted Data:
+4
+18
+48
+Median is : 18.000000┌─[user@parrot]─[~/C/numerical_methods]
+└──╼ $./median
+Enter no. for Random Numbers :3
+Random Numbers Generated are :
+
+26
+90
+11
+
+Sorted Data:
+11
+26
+90
+Median is : 26.000000
+```
+Nun änderte sich die Ausgabe bei jedem Durchlauf.
\ No newline at end of file