====== Ü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}}