====== Übungen Tag 1: Kommandozeile und Textverarbeitung ======
Diese Übungen vertiefen die Themen von Tag 1 des Linux Expert Workshops.
[[agenda:agenda-expert_2|← Zurück zur Agenda]]
===== Übung 1.1: Navigation und Dateiverwaltung =====
**Ziel:** Sicherer Umgang mit cd, pwd, ls, cp, mv, rm
**Aufgaben:**
- Erstellen Sie folgende Verzeichnisstruktur in Ihrem Home-Verzeichnis:
* projekt/src/main
* projekt/src/test
* projekt/docs
* projekt/backup
- Navigieren Sie mit **relativen** Pfaden von main zu test
- Erstellen Sie 5 Test-Dateien in src/main (file1.txt bis file5.txt)
- Kopieren Sie alle .txt-Dateien nach backup/
- Verschieben Sie file1.txt und file2.txt nach test/
- Löschen Sie file3.txt aus main/
- Listen Sie alle Dateien mit Details auf (Größe, Datum, Rechte)
mkdir -p projekt/{src/{main,test},docs,backup}
cd projekt/src/main
pwd
touch file{1..5}.txt
cp *.txt ../../backup/
mv file1.txt file2.txt ../test/
rm file3.txt
ls -lah ~/projekt/backup/
\\
===== Übung 1.2: Vim-Training =====
**Ziel:** Vim-Grundlagen beherrschen
**Aufgaben:**
- Öffnen Sie eine Datei namens server.conf mit vim
- Wechseln Sie in den Insert-Modus und schreiben Sie:
ServerName web01
Port 8080
MaxConnections 100
- Speichern und beenden Sie (:wq)
- Öffnen Sie die Datei erneut
- Ändern Sie Port auf 8443
- Fügen Sie eine neue Zeile hinzu: SSL on
- Löschen Sie die Zeile MaxConnections
- Kopieren Sie die ServerName-Zeile und fügen Sie sie am Ende ein
- Suchen Sie nach "Port" (/Port)
**Erweitert:**
- Nutzen Sie dd, yy, p
- Nutzen Sie :%s/old/new/g für Suchen & Ersetzen
# Datei erstellen
vim server.conf
# Im vim:
# i - Insert-Modus
# Text eingeben
# ESC - zurück zu Normal-Modus
# :wq - speichern und beenden
# Datei erneut öffnen
vim server.conf
# Port ändern:
# /Port - suchen
# cw8443 - Change Word zu 8443
# ESC
# Neue Zeile:
# o - neue Zeile unten
# SSL on
# ESC
# Zeile löschen:
# /MaxConnections
# dd - Zeile löschen
# Zeile kopieren:
# gg - zum Anfang
# yy - Zeile kopieren (yank)
# G - zum Ende
# p - einfügen (paste)
# Suchen & Ersetzen:
# :%s/8080/8443/g
\\
===== Übung 1.3: Pipes und Umleitungen =====
**Ziel:** Effektive Nutzung von Pipes und Umleitungen
**Aufgaben:**
- Erstellen Sie eine Datei users.txt mit 20 Benutzernamen (Zeile 1-20)
- Erstellen Sie eine Datei errors.log mit verschiedenen Log-Einträgen (ERROR, WARNING, INFO)
- Führen Sie folgende Aufgaben aus:
* Zeigen Sie nur die ersten 10 Zeilen von users.txt
* Zeigen Sie nur die letzten 5 Zeilen von users.txt
* Filtern Sie nur ERROR-Einträge aus errors.log
* Zählen Sie wie viele ERROR-Einträge es gibt
* Sortieren Sie users.txt und entfernen Sie Duplikate
* Leiten Sie alle ERROR-Einträge in eine neue Datei errors_only.log um
**Lösung:**
# Testdaten erstellen
for i in {1..20}; do echo "user$i"; done > users.txt
cat > errors.log << EOF
2024-01-15 ERROR Failed to connect
2024-01-15 INFO Server started
2024-01-15 WARNING Low memory
2024-01-15 ERROR Database timeout
2024-01-15 INFO Request processed
EOF
# Aufgaben
head -10 users.txt
tail -5 users.txt
grep "ERROR" errors.log
grep -c "ERROR" errors.log
sort users.txt | uniq
grep "ERROR" errors.log > errors_only.log
# Testdaten erstellen
for i in {1..20}; do echo "user$i"; done > users.txt
cat > errors.log << EOF
2024-01-15 ERROR Failed to connect
2024-01-15 INFO Server started
2024-01-15 WARNING Low memory
2024-01-15 ERROR Database timeout
2024-01-15 INFO Request processed
EOF
# Aufgaben
head -10 users.txt
tail -5 users.txt
grep "ERROR" errors.log
grep -c "ERROR" errors.log
sort users.txt | uniq
grep "ERROR" errors.log > errors_only.log
\\
===== Übung 1.4: grep und find kombiniert =====
**Ziel:** Dateien suchen und Inhalte filtern
**Aufgaben:**
- Erstellen Sie 10 .txt-Dateien mit verschiedenen Inhalten
- Finden Sie alle .txt-Dateien in Ihrem Home-Verzeichnis
- Finden Sie alle Dateien, die größer als 1KB sind
- Suchen Sie in allen .txt-Dateien nach dem Wort "ERROR"
- Finden Sie alle Dateien, die in den letzten 24 Stunden geändert wurden
- Suchen Sie rekursiv nach allen Dateien, die "password" enthalten
**Lösung:**
# Testdaten
for i in {1..10}; do echo "Test $i ERROR warning" > test$i.txt; done
# Aufgaben
find ~ -name "*.txt"
find ~ -type f -size +1k
grep -r "ERROR" *.txt
find ~ -type f -mtime -1
grep -r "password" /etc/ 2>/dev/null
\\
===== Übung 1.5: Textmanipulation mit sed (Optional) =====
**Ziel:** Sed für Textbearbeitung nutzen
**Aufgaben:**
- Erstellen Sie eine Datei config.txt:
server_name=localhost
port=8080
database=test_db
user=admin
- Ersetzen Sie "localhost" durch "production.example.com"
- Ändern Sie alle Ports von 8080 auf 8443
- Fügen Sie vor jeder Zeile ein "#" ein (auskommentieren)
- Löschen Sie alle Zeilen, die "user" enthalten
- Ersetzen Sie alle "=" durch ": "
**Lösung:**
sed 's/localhost/production.example.com/' config.txt
sed 's/8080/8443/g' config.txt
sed 's/^/#/' config.txt
sed '/user/d' config.txt
sed 's/=/: /g' config.txt
\\
===== Zusatz-Challenge =====
**Erstellen Sie ein Bash-Skript, das:**
- Alle .log-Dateien im aktuellen Verzeichnis findet
- ERROR-Einträge extrahiert
- Diese nach Datum sortiert in error_summary.txt speichert
- Die Anzahl der Fehler pro Log-Datei ausgibt
#!/bin/bash
echo "Error Summary" > error_summary.txt
echo "==============" >> error_summary.txt
for logfile in *.log; do
echo "Processing $logfile..."
error_count=$(grep -c "ERROR" "$logfile")
echo "$logfile: $error_count errors" >> error_summary.txt
grep "ERROR" "$logfile" >> error_summary.txt
done
sort error_summary.txt > error_summary_sorted.txt
cat error_summary_sorted.txt
\\
===== Siehe auch =====
* [[sammlung:bash_kommandos|Bash Kommandos]]
* [[sammlung:vim|Vim-Editor]]
* [[sammlung:grep|grep-Dokumentation]]
* [[sammlung:find|find-Dokumentation]]
{{tag>übung workshop linux kommandozeile}}