175 lines
9.9 KiB
HTML
175 lines
9.9 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="de">
|
|
<head>
|
|
<link rel="icon" type="image/svg+xml" href="../../../assets/favicon.svg">
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Bash 01: Terminal-Navigation & Globbing</title>
|
|
<link rel="stylesheet" href="../../../assets/style.css">
|
|
<style>
|
|
.module-grid {
|
|
display: grid;
|
|
grid-template-columns: 7fr 5fr;
|
|
gap: 24px;
|
|
margin-top: 20px;
|
|
}
|
|
@media (max-width: 992px) {
|
|
.module-grid {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="app-layout">
|
|
<div class="app-main">
|
|
<header>
|
|
<div class="header-container">
|
|
<div style="display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 8px;">
|
|
<span class="badge badge-neutral">🐧 Linux Bash & Cloud DevOps</span>
|
|
<span class="badge badge-neutral">Modul 01 von 16</span>
|
|
<span class="badge badge-neutral">⏱️ ca. 15 Min.</span>
|
|
<span class="badge badge-success">🎓 IHK AP1 & AP2 Relevanz</span>
|
|
</div>
|
|
<h1>Bash 01: Terminal-Navigation, Dateioperationen & Globbing</h1>
|
|
<p class="content-readable" style="color: #cbd5e1; font-size: 1.05rem;">Beherrsche den Linux-Dateibaum, lerne blitzschnelle Pfad-Navigation und automatisiere Dateioperationen mit Wildcards und Brace Expansion.</p>
|
|
</div>
|
|
</header>
|
|
|
|
<main class="container">
|
|
<div class="module-grid">
|
|
<!-- LINKE SPALTE: Konzept & Aufgaben -->
|
|
<div class="module-main-col">
|
|
<!-- 1. KERNKONZEPT -->
|
|
<section class="card">
|
|
<h2>🧭 1. Der Unix-Dateibaum & Pfad-Navigation</h2>
|
|
<p class="content-readable">In Unix gibt es keine Laufwerksbuchstaben (wie <code>C:</code>). Alles entspringt dem Root-Verzeichnis <code>/</code> (Single Root Tree). Wir unterscheiden strikt zwischen absoluten Pfaden (beginnen immer mit <code>/</code>) und relativen Pfaden (relativ zum aktuellen Arbeitsverzeichnis <code>pwd</code>).</p>
|
|
|
|
<div class="code-block">
|
|
<div class="code-block-header">
|
|
<span class="code-block-title">bash • Navigation & Pfade</span>
|
|
<button type="button" class="code-copy-btn" onclick="navigator.clipboard.writeText(this.parentElement.nextElementSibling.innerText); this.innerText='Kopiert! ✓'; setTimeout(()=>this.innerText='Kopieren', 2000);">Kopieren</button>
|
|
</div>
|
|
<pre style="padding: 12px; margin: 0; background: transparent; color: #f8fafc; font-family: var(--font-mono); font-size: 0.88rem;"><code># Wo bin ich?
|
|
pwd # Ausgabe: /home/devops/projects
|
|
|
|
# Relative vs. Absolute Navigation:
|
|
cd /var/log/nginx # Absoluter Pfad
|
|
cd ../../etc # Relativer Pfad: Zwei Ebenen hoch, dann in 'etc'
|
|
cd ~ # Home-Verzeichnis
|
|
cd - # Vorheriges Verzeichnis</code></pre>
|
|
</div>
|
|
|
|
<div class="box box-analogie">
|
|
<div class="box-title">🏢 Didaktische Analogie: Das Hochregallager des Betriebssystems</div>
|
|
<p><strong>Der Dateibaum:</strong> Stell dir das Linux-Dateisystem wie ein gigantisches Logistikzentrum vor. <code>/</code> ist das Haupttor. Mit <code>mkdir -p</code> stellst du mit einer einzigen Anweisung eine ganze Regalreihe mit Fächern auf.</p>
|
|
<p><strong>Globbing (<code>*</code> und <code>{a,b}</code>):</strong> Statt jedes Paket einzeln zu scannen, hältst du eine Schablone hoch: <code>*.yaml</code> greift automatisch alle Konfigurationen, während <code>{dev,prod}</code> im Handumdrehen zwei Umgebungen parallel anlegt!</p>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- 2. SUBGOAL-BOARD -->
|
|
<section class="card">
|
|
<h2>🎯 2. Dein Arbeitsauftrag: 4 Subgoals (Teilziele)</h2>
|
|
<p class="content-readable" style="color: var(--text-muted); margin-bottom: 16px;">Bearbeite die Aufgaben in <code>aufgabe.sh</code> schrittweise:</p>
|
|
|
|
<div class="subgoal-item">
|
|
<span class="subgoal-badge">Subgoal 1</span>
|
|
<div>
|
|
<strong>Projektverzeichnisse anlegen:</strong>
|
|
<p style="margin: 4px 0 0 0; font-size: 0.88rem; color: var(--text-secondary);">Implementiere <code>erstelle_projektstruktur(basis_dir)</code> mit <code>mkdir -p</code> für <code>src/components</code>, <code>src/utils</code>, <code>docs/api</code> und <code>backup/logs</code>.</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="subgoal-item">
|
|
<span class="subgoal-badge">Subgoal 2</span>
|
|
<div>
|
|
<strong>Testdateien erzeugen:</strong>
|
|
<p style="margin: 4px 0 0 0; font-size: 0.88rem; color: var(--text-secondary);">Erstelle mit <code>touch</code> und Brace Expansion Beispieldateien in den angelegten Ordnern.</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="subgoal-item">
|
|
<span class="subgoal-badge">Subgoal 3</span>
|
|
<div>
|
|
<strong>Dateien kopieren & Globbing:</strong>
|
|
<p style="margin: 4px 0 0 0; font-size: 0.88rem; color: var(--text-secondary);">Kopiere mit <code>cp</code> und Wildcards (<code>*.yaml</code>, <code>*.log</code>) alle Konfigurationsdateien in das Backup-Verzeichnis.</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="subgoal-item">
|
|
<span class="subgoal-badge">Subgoal 4</span>
|
|
<div>
|
|
<strong>Temporäre Dateien bereinigen:</strong>
|
|
<p style="margin: 4px 0 0 0; font-size: 0.88rem; color: var(--text-secondary);">Nutze <code>rm -f</code> und <code>rm -rf</code>, um Cache- und temporäre Logdateien sauber zu entfernen.</p>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
|
|
<!-- RECHTE SPALTE: Referenz, Gotchas & Spickzettel -->
|
|
<div class="module-side-col">
|
|
<!-- GOTCHAS (STOLPERFALLEN) -->
|
|
<div class="box-gotcha">
|
|
<h4>⚠️ Häufige Stolperfallen (Pre-Mortem)</h4>
|
|
<p style="margin-bottom: 8px;"><strong>1. Fehlendes <code>-p</code> bei mkdir:</strong> Wenn du <code>mkdir a/b/c</code> aufrufst und Ordner <code>a</code> noch nicht existiert, bricht die Shell mit <em>No such file or directory</em> ab. Verwende immer <code>mkdir -p</code>!</p>
|
|
<p style="margin: 0;"><strong>2. Word Splitting ohne Quotes:</strong> Setze Variablenpfade in Skripten stets in doppelte Anführungszeichen: <code>"$basis_dir/src"</code>, sonst führen Leerzeichen im Ordnernamen zu fatalen Syntaxfehlern.</p>
|
|
</div>
|
|
|
|
<!-- SYNTAX QUICK REF -->
|
|
<div class="box-syntax">
|
|
<h4>📌 Syntax-Spickzettel: Shell-Muster</h4>
|
|
<table style="width: 100%; border-collapse: collapse; font-size: 0.84rem; text-align: left;">
|
|
<thead>
|
|
<tr style="border-bottom: 2px solid var(--border-color); background: var(--bg-subtle);">
|
|
<th style="padding: 6px 8px;">Muster</th>
|
|
<th style="padding: 6px 8px;">Bedeutung</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr style="border-bottom: 1px solid var(--border-color);">
|
|
<td style="padding: 6px 8px;"><code>*</code></td>
|
|
<td style="padding: 6px 8px;">Matcht 0 bis unendlich viele Zeichen</td>
|
|
</tr>
|
|
<tr style="border-bottom: 1px solid var(--border-color);">
|
|
<td style="padding: 6px 8px;"><code>?</code></td>
|
|
<td style="padding: 6px 8px;">Matcht exakt 1 Zeichen</td>
|
|
</tr>
|
|
<tr style="border-bottom: 1px solid var(--border-color);">
|
|
<td style="padding: 6px 8px;"><code>{a,b}</code></td>
|
|
<td style="padding: 6px 8px;">Brace Expansion (Permutation)</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="padding: 6px 8px;"><code>mkdir -p</code></td>
|
|
<td style="padding: 6px 8px;">Erstellt Elternordner automatisch</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<!-- IHK PRÜFUNGSRELEVANZ -->
|
|
<div class="card" style="background: rgba(37, 99, 235, 0.05); border: 1px solid rgba(37, 99, 235, 0.2);">
|
|
<h4 style="margin: 0 0 6px 0; color: var(--primary);">💡 IHK-Prüfungstipp (AP1)</h4>
|
|
<p style="font-size: 0.86rem; color: var(--text-secondary); margin: 0;">In der IHK-Abschlussprüfung Teil 1 wird regelmäßig der Unterschied zwischen relativer und absoluter Pfadangabe sowie die Bedeutung von <code>cd ..</code> und <code>ls -l</code> abgefragt.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</main>
|
|
|
|
<!-- PERSISTENT STICKY LAUNCH ACTION BAR -->
|
|
<div class="sticky-launch-bar">
|
|
<div style="display: flex; align-items: center; gap: 12px; color: #f8fafc; font-size: 0.9rem;">
|
|
<span>🎯 <strong>Status:</strong> Bereit für die Praxis (4 Teilziele definiert)</span>
|
|
</div>
|
|
<div style="display: flex; align-items: center; gap: 12px;">
|
|
<a href="../../../dashboard.html" class="btn btn-ghost" style="color: #cbd5e1 !important;">← Dashboard</a>
|
|
<a href="../../../workspace.html?course=bash&track=track_1_terminal_grundlagen&chapter=01_navigation_dateien_und_globbing" class="btn-cta-launch">
|
|
💻 In Web-IDE öffnen & Teilziel 1 anpacken →
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<script src="../../../assets/courses_manifest.js"></script>
|
|
<script src="../../../assets/course_sidebar.js"></script>
|
|
</body>
|
|
</html>
|