From 82a2cadde76992005fa2fcf973b9eb0fd223b3e6 Mon Sep 17 00:00:00 2001 From: Sven Riwoldt Date: Mon, 3 Aug 2026 13:22:29 +0200 Subject: [PATCH] Linux begonnen --- Linux-Sammelsurium.md | 337 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 337 insertions(+) create mode 100644 Linux-Sammelsurium.md diff --git a/Linux-Sammelsurium.md b/Linux-Sammelsurium.md new file mode 100644 index 0000000..38a5cd0 --- /dev/null +++ b/Linux-Sammelsurium.md @@ -0,0 +1,337 @@ +# Linux: Projekte ablegen, Dateien suchen/löschen und `xargs` + +## Projekte unter Linux organisieren + +Es gibt keine feste Vorgabe, aber einige Verzeichnisstrukturen haben sich etabliert. + +### Für persönliche Entwicklungsprojekte + +Empfohlen: + +- `~/Projects/` +- `~/Code/` +- `~/src/` (unter Entwicklern sehr verbreitet) + +Beispiel: + +```text +/home/max/ +├── Documents/ +├── Downloads/ +├── Projects/ +│ ├── website/ +│ ├── python-tool/ +│ └── homelab/ +``` + +Oder eine nach Git-Hosting strukturierte Variante: + +```text +~/src/ +├── github.com/ +│ └── benutzer/ +│ ├── projekt1/ +│ └── projekt2/ +└── private/ +``` + +Verzeichnis anlegen: + +```bash +mkdir -p ~/Projects +``` + +oder + +```bash +mkdir -p ~/src +``` + +### Für mehrere Benutzer + +| Verzeichnis | Zweck | +|-------------|-------| +| `/srv/` | Gemeinsam genutzte Projekte oder Dienste | +| `/usr/local/src/` | Systemweiter Quellcode | +| `/opt/` | Installierte Drittanbieter-Software (nicht für eigenen Quellcode) | + +--- + +# Dateien mit `find` suchen und löschen + +## Dateien nach Namen löschen + +Alle `.tmp`-Dateien löschen: + +```bash +find . -name "*.tmp" -delete +``` + +--- + +## Erst suchen, dann löschen (empfohlen) + +Dateien anzeigen: + +```bash +find . -name "*.tmp" +``` + +Anschließend löschen: + +```bash +find . -name "*.tmp" -delete +``` + +--- + +## Mit Rückfrage löschen + +```bash +find . -name "*.tmp" -ok rm {} \; +``` + +oder + +```bash +find . -name "*.tmp" -exec rm -i {} \; +``` + +--- + +## Nach Alter löschen + +Logdateien, die älter als 30 Tage sind: + +```bash +find . -name "*.log" -mtime +30 -delete +``` + +--- + +## Leere Verzeichnisse löschen + +```bash +find . -type d -empty -delete +``` + +--- + +## Achtung + +`-delete` löscht Dateien sofort und ohne Papierkorb. + +Deshalb empfiehlt sich immer: + +1. `find` ohne `-delete` +2. Ergebnisse prüfen +3. `-delete` ergänzen + +Beispiel: + +```bash +find ~/Downloads -name "*.zip" + +find ~/Downloads -name "*.zip" -delete +``` + +--- + +# `xargs` erklärt + +## Was macht `xargs`? + +`xargs` nimmt Eingaben (meist aus einer Pipe) entgegen und macht daraus Argumente für einen anderen Befehl. + +Beispiel: + +```bash +echo "a.txt b.txt c.txt" | xargs rm +``` + +Das entspricht: + +```bash +rm a.txt b.txt c.txt +``` + +--- + +## Typischer Einsatz mit `find` + +Ohne `xargs`: + +```bash +find . -name "*.log" -exec rm {} \; +``` + +Mit `xargs`: + +```bash +find . -name "*.log" | xargs rm +``` + +`xargs` bündelt mehrere Dateinamen zu einem einzigen `rm`-Aufruf und ist dadurch oft effizienter. + +--- + +## Problem mit Leerzeichen + +Angenommen, es gibt eine Datei: + +```text +Meine Datei.txt +``` + +Dann liefert: + +```bash +find . -name "*.txt" | xargs rm +``` + +`xargs` trennt standardmäßig an Leerzeichen und Zeilenumbrüchen. + +Es interpretiert: + +```text +./Meine Datei.txt +``` + +als zwei Argumente: + +- `./Meine` +- `Datei.txt` + +Das führt zu Fehlern. + +--- + +## Die sichere Lösung + +Deshalb verwendet man fast immer: + +```bash +find . -name "*.txt" -print0 | xargs -0 rm +``` + +### Warum? + +- `find -print0` trennt Dateinamen mit einem Nullbyte (`\0`) +- `xargs -0` liest genau dieses Format + +Dadurch funktionieren auch Dateinamen mit: + +- Leerzeichen +- Tabs +- Zeilenumbrüchen +- Sonderzeichen + +--- + +## Platzhalter mit `-I` + +Soll der Dateiname mitten im Befehl stehen: + +```bash +find . -name "*.jpg" | xargs -I {} cp {} /backup/ +``` + +Für jede Datei wird ausgeführt: + +```bash +cp datei.jpg /backup/ +``` + +--- + +## Anzahl der Argumente begrenzen + +```bash +seq 1 10 | xargs -n 3 echo +``` + +Ausgabe: + +```text +1 2 3 +4 5 6 +7 8 9 +10 +``` + +`-n 3` bedeutet: maximal drei Argumente pro Befehlsaufruf. + +--- + +## Parallelisierung + +Mehrere Prozesse gleichzeitig starten: + +```bash +find . -name "*.png" | xargs -P 4 -n 1 convert +``` + +Parameter: + +- `-P 4` → bis zu vier Prozesse parallel +- `-n 1` → ein Dateiname pro Prozess + +--- + +## Alternative ohne `xargs` + +Viele moderne Befehle unterstützen bereits mehrere Dateien gleichzeitig. + +Beispiel: + +```bash +find . -name "*.log" -exec rm {} + +``` + +Das erreicht nahezu denselben Effekt wie: + +```bash +find . -name "*.log" -print0 | xargs -0 rm +``` + +--- + +# Merksätze + +### Projekte + +- Eigene Projekte → `~/Projects` oder `~/src` +- Gemeinsame Projekte → `/srv` +- Installierte Software → `/opt` + +### `find` + +- Dateien suchen: + ```bash + find . -name "*.txt" + ``` + +- Direkt löschen: + ```bash + find . -name "*.txt" -delete + ``` + +### `xargs` + +- Macht aus Pipe-Ausgabe Befehlsargumente. +- Spart viele einzelne Programmaufrufe. +- Immer sicher verwenden mit: + +```bash +find . -print0 | xargs -0 +``` + +### Moderne Alternative + +Wenn möglich: + +```bash +find . -exec {} + +``` + +Diese Variante ist oft einfacher und ebenso effizient. \ No newline at end of file