# 💻 CLI Cheatsheet: Git, Linux & Neovim

Eine zentrale Referenz für Befehle, Shortcuts und Workflows.

---

# 🐙 Git (Version Control)

 #### ♻️
**Merkregel:** Git speichert Snapshots, nicht nur Deltas.
Working Dir (Lokal) -> Staging Area (Vorbereitung) -> Repository(Commit).


### 🔄 Basis-Workflow
| Befehl | Beschreibung |
| :--- | :--- |
| `git status` | Zeigt den aktuellen Zustand (geänderte/neue Dateien). |
| `git add .` | Fügt **alle** Änderungen zur Staging-Area hinzu. |
| `git add -p` | Interaktives Staging (Hunks einzeln auswählen). |
| `git commit -m "msg"` | Erstellt einen Snapshot (Commit) mit Nachricht. |
| `git push` | Synchronisiert lokale Commits zum Remote-Server. |
| `git pull` | Holt Änderungen vom Server und merged sie. |

### ↩️ Undo & Rettungsanker
| Befehl | Beschreibung |
| :--- | :--- |
| `git checkout .` | **Gefährlich:** Verwirft alle lokalen Änderungen an Dateien. |
| `git reset --soft HEAD~1` | Macht den letzten Commit rückgängig, behält Änderungen aber im Staging. |
| `git commit --amend` | Fügt Änderungen zum *letzten* Commit hinzu (History Rewrite!). |
| `git stash` | Verschiebt Änderungen temporär auf einen Stack (Arbeitsverzeichnis sauber). |
| `git stash pop` | Holt Änderungen vom Stack zurück. |
| `git log --oneline --graph` | Zeigt den Commit-Baum visuell an. |

#### ‼️
git reset --hard HEAD~1
Löscht den letzten Commit und alle darin enthaltenen Änderungen unwiderruflich. Reset auf den Zustand davor.

---

# 🐧 Linux / Bash (Shell)

### 📂 Datei- & Ordner-Operationen
| Befehl | Beschreibung |
| :--- | :--- |
| `ls -lah` | Listet alles (all), ausführlich (long), menschenlesbar (human). |
| `cp -r src dest` | Kopiert Ordner rekursiv (`-r`). |
| `rsync -av src/ dest/` | Synchronisiert Ordner (besser als cp, behält Rechte/Zeitstempel). |
| `mkdir -p a/b/c` | Erstellt ganze Ordner-Pfade (parents). |
| `du -sh folder` | Zeigt die Speicherbelegung eines Ordners (`disk usage`). |
| `chmod +x file.sh` | Macht eine Datei ausführbar (e**x**ecutable). |

### 🔍 Suchen & Filtern (Grep & Find)
| Befehl | Beschreibung |
| :--- | :--- |
| `grep -r "Text" .` | Sucht "Text" rekursiv im aktuellen Verzeichnis. |
| `grep -Fw "IP" file` | Sucht nach fixem String (`-F`) und ganzem Wort (`-w`). |
| `find . -name "*.conf"` | Sucht Dateien anhand des Namens. |
| `find . -size +100M` | Findet Dateien größer als 100 MB. |
| `history | grep "befehl"` | Durchsucht die eigene Befehls-Historie. |

### ⚙️ System & Prozesse
| Befehl | Beschreibung |
| :--- | :--- |
| `htop` / `btop` | Interaktiver Prozess-Manager (CPU/RAM). |
| `ps aux | grep [app]` | Zeigt spezifische laufende Prozesse. |
| `kill -9 [PID]` | Beendet Prozess hart (SIGKILL). |
| `systemctl status [dienst]` | Prüft Status eines Service (z.B. docker, sshd). |
| `journalctl -xe` | Zeigt System-Logs (bei Fehlern). |

---

# ⛵ Neovim (NVIM)

#### ⚠️
**Modi:** ESC = Normal (Bewegen), i = Insert (Schreiben), v = Visual (Markieren).

### 🏃 Navigation (Muscle Memory)
| Taste | Bewegung |
| :--- | :--- |
| `h` `j` `k` `l` | Links, Runter, Hoch, Rechts. |
| `w` / `b` | Wort vorwärts / Wort rückwärts. |
| `0` / `$` | Zeilenanfang / Zeilenende. |
| `gg` / `G` | Dateianfang / Dateiende. |
| `Ctrl + u` / `d` | Seite hoch / Seite runter (Up/Down). |
| `/suchbegriff` | Suche (n = weiter, N = zurück). |

### ✏️ Editieren (Normal Mode)
| Taste | Aktion |
| :--- | :--- |
| `u` / `Ctrl + r` | Undo / Redo. |
| `dd` | Zeile ausschneiden (löschen). |
| `yy` | Zeile kopieren (yank). |
| `p` | Einfügen (paste) nach Cursor. |
| `ciw` | "Change Inner Word" (Löscht Wort unter Cursor & wechselt zu Insert). |
| `A` | Springt ans Zeilenende & wechselt zu Insert (Append). |
| `o` | Neue Zeile unterhalb einfügen & Insert. |

### 💾 Ex-Kommandos (`:`)
| Befehl | Aktion |
| :--- | :--- |
| `:w` | Speichern. |
| `:q!` | Schließen ohne Speichern (Force). |
| `:wq` | Speichern & Schließen. |
| `:%s/old/new/g` | Suchen & Ersetzen in ganzer Datei. |
| `:vsp file` | Vertikaler Split (Fensterteilung). |

---

## 🔐 SSH & Netzwerk

| Befehl | Beschreibung |
| :--- | :--- |
| `ssh user@ip` | Verbindet zum Server. |
| `ssh -p 2222 user@ip` | Verbindet auf spezifischem Port. |
| `ssh-copy-id user@ip` | Kopiert den Public Key auf den Server (Passwortloses Login). |
| `ip a` | Zeigt eigene IP-Adressen und Interfaces. |
| `ss -tulpn` | Zeigt offene Ports und lauschende Dienste (Sockets). |