# LINUX

# Linux Commands



# Linux Commands

<p id="bkmrk-"><strong>Basics</strong></p>
<table id="bkmrk-ctrl%2Bd-log-out-ctrl%2B" style="height: 2777px; width: 107.407407%;" cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p>Ctrl+Shift+T&nbsp;</p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p>Terminal Öffnen</p>
</td>
<td style="height: 140px; width: 24.103832%;" rowspan="4">
<p><br></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</p>
<br>
<p>&nbsp; &nbsp;<strong>Steuerung Terminal</strong></p>
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p>Ctrl+C&nbsp;</p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p>Abrechen / neue Befehlszeile</p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p>Ctrl+D</p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p>Log out</p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;">
<p>Ctrl+L</p>
</td>
<td style="width: 43.016069%; height: 35px;">
<p>Verlauf löschen</p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;">
<p><br></p>
</td>
<td style="width: 43.016069%; height: 35px;">
<p><br></p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p>cd ..</p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p>Ordner zurück &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;⬅️ 📁</p>
</td>
<td style="width: 24.103832%; height: 35px;"><br></td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p>cd ~</p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p>in home wechseln &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;➡️ 🏠</p>
</td>
<td style="width: 24.103832%; height: 35px;"><br></td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p>touch</p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p>Datei erstellen &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;➕ 📄</p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr>
<td style="width: 33.003708%;">
<p>mkdir</p>
</td>
<td style="width: 43.016069%;">
<p>Ordner erstellen &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ➕ 📁</p>
</td>
<td style="width: 24.103832%;">
<p><br></p>
</td>
</tr>
<tr>
<td style="width: 33.003708%; height: 35px;" valign="top">
<p>rm -r<span class="Apple-converted-space">&nbsp;</span></p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p>Löschen &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ❌ 📄</p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr>
<td style="width: 33.003708%;">
<p><br></p>
</td>
<td style="width: 43.016069%;">
<p><br></p>
</td>
<td style="width: 24.103832%;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p>ls</p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p>Liste anzeigen &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 📁+📄</p>
</td>
<td style="height: 219px; width: 24.103832%;" rowspan="5">
<p><br></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;👀</p>
<p><strong>&nbsp; &nbsp; &nbsp; &nbsp; Anzeigen mit LS</strong></p>
<br>
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;">
<p>ls -l /home</p>
</td>
<td style="width: 43.016069%; height: 35px;">
<p>anzeigen aller /home Ordner &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /🏠 /🏠</p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;">
<p>ls -l&nbsp;</p>
</td>
<td style="width: 43.016069%; height: 35px;">
<p>Inhalt &nbsp;anzeigen. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;🔐 👤 👥 📄</p>
</td>
</tr>
<tr style="height: 79px;">
<td style="width: 33.003708%; height: 79px;">
<p>ls -la<span class="Apple-converted-space">&nbsp;</span></p>
<p><span class="Apple-converted-space">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span></p>
<p><span class="Apple-converted-space">(optional -h = KB, MB)</span></p>
</td>
<td style="width: 43.016069%; height: 79px;">
<p>Inhalt &nbsp;anzeigen. &nbsp; &nbsp; &nbsp;</p>
<p data-pm-slice="1 1 []">(Rechte,User,Group,Größe,Datum+versteckte) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; . &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 👻 🔐 👤 👥 &nbsp;📄</p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;">
<p><br></p>
</td>
<td style="width: 43.016069%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;">
<p><br></p>
</td>
<td style="width: 43.016069%; height: 35px;">
<p><br></p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;">
<p>tree</p>
</td>
<td style="width: 43.016069%; height: 35px;">
<p>tree struktur anzeigen &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 🌳└──</p>
</td>
<td style="height: 127px; width: 24.103832%;" rowspan="3">
<p><br></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 👀</p>
<p><strong>&nbsp; &nbsp; &nbsp;Anzeigen Struktur</strong></p>
<br>
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;">
<p>tree -L 1</p>
</td>
<td style="width: 43.016069%; height: 35px;">
<p>Zeigt erstes unter level an &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 🌳├──</p>
</td>
</tr>
<tr style="height: 57px;">
<td style="width: 33.003708%; height: 57px;">
<p>tree -pug</p>
</td>
<td style="width: 43.016069%; height: 57px;">
<p>&nbsp;tree mit &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 🌳</p>
<p>-pug(<strong>Zugriffsrecht, User, Gruppe</strong>) 🔐,👤,👥</p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;">
<p><br></p>
</td>
<td style="width: 43.016069%; height: 35px;">
<p><br></p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p>getent passwd</p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p>Alle user anzeigen &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 👤👤👤</p>
</td>
<td style="height: 127px; width: 24.103832%;" rowspan="3">
<p><br></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;👀</p>
<p>&nbsp;<strong>Anzeigen User &amp; Group</strong></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p>getent group</p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p>Gruppe anzeigen<span class="Apple-converted-space">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;👥👥👥</span></p>
</td>
</tr>
<tr style="height: 57px;">
<td style="width: 33.003708%; height: 57px;">
<p># getent shadow<span class="Apple-converted-space">&nbsp;</span></p>
</td>
<td style="width: 43.016069%; height: 57px;">
<p>Passwort-Hashes anzeigen</p>
<p>Sudo oder aus Root &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #️⃣ 🔑</p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;">
<p><br></p>
</td>
<td style="width: 43.016069%; height: 35px;">
<p><br></p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 79px;">
<td style="width: 33.003708%; height: 79px;" valign="top">
<p># useradd -m -s /bin/bash</p>
<p>user</p>
</td>
<td style="width: 43.016069%; height: 79px;" valign="top">
<p>Benutzer erstellen + Home + Bash. &nbsp; &nbsp; &nbsp;➕ 👤🏠</p>
<p>&nbsp;&amp; (erstellt Standart Hauptgruppe mit user Namen)</p>
</td>
<td style="height: 321px; width: 24.103832%;" rowspan="7">
<p><br></p>
<p><br></p>
<p><strong>&nbsp; Benutzer &amp; </strong></p>
<p><strong>&nbsp; Gruppen erstellen</strong></p>
<p><strong>&nbsp; </strong></p>
<p>&nbsp;</p>
<p><strong>&nbsp;</strong> -g Hauptgruppe</p>
<p>&nbsp; -G Nebengruppe&nbsp;</p>
<p>&nbsp; (alleinstehend ersetzt alle bisherigen nebengrupen)</p>
<p>&nbsp; -aG Nebengruppe adden</p>
<p><strong>&nbsp; &nbsp;&nbsp;</strong></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</td>
</tr>
<tr style="height: 57px;">
<td style="width: 33.003708%; height: 57px;">
<p># useradd -m -s /bin/bash</p>
<p>-g HAUPT -G NEBENGRUPPE user</p>
</td>
<td style="width: 43.016069%; height: 57px;">
<p>Benutzer erstellen + Home + Bash &nbsp; &nbsp; &nbsp;➕ 👤🏠</p>
<p>+HauptG +NebenG &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 👥 (👥)</p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;">
<p><br></p>
</td>
<td style="width: 43.016069%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;">
<p><br></p>
</td>
<td style="width: 43.016069%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;">
<p><br></p>
</td>
<td style="width: 43.016069%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;">
<p><br></p>
</td>
<td style="width: 43.016069%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 45px;">
<td style="width: 33.003708%; height: 45px;" valign="top">
<p># groupadd groupName</p>
</td>
<td style="width: 43.016069%; height: 45px;" valign="top">
<p>neue Gruppe erstellen &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 👥 ✅</p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;">
<p><br></p>
</td>
<td style="width: 43.016069%; height: 35px;">
<p><br></p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;">
<p># usermod -aG NebenGruppe user</p>
</td>
<td style="width: 43.016069%; height: 35px;">
<p>User zur Nebengruppe hinzufügen. &nbsp; 👤→👥</p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;">
<p># groupmod -n neuerName alterName</p>
</td>
<td style="width: 43.016069%; height: 35px;">
<p>Gruppe umbenennen. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;👥 <span class="Apple-converted-space">🔄Name</span></p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 57px;">
<td style="width: 33.003708%; height: 57px;">
<p># chgrp -R gruppe /...</p>
</td>
<td style="width: 43.016069%; height: 57px;">
<p>Gruppe ändern + ALLE Daten &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 👥 + 📄</p>
</td>
<td style="width: 24.103832%; height: 57px;">
<p><strong data-start="1871" data-end="1898">-R = Rekursiv &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (Alle Dateien)</strong></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p># usermod -s /bin/bash user</p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p>Bash nachträglich hinzufügen</p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p>{ }</p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p>Kaskadieren</p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;">
<p><br></p>
</td>
<td style="width: 43.016069%; height: 35px;">
<p><br></p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p>cp</p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p>Kopie</p>
</td>
<td style="height: 123px; width: 24.103832%;" rowspan="2">
<p><strong>kopieren oder &nbsp; &nbsp; verschieben</strong></p>
<p><br></p>
<p>&nbsp;Bsp. &nbsp;mv OldName NewName</p>
</td>
</tr>
<tr style="height: 88px;">
<td style="width: 33.003708%; height: 88px;" valign="top">
<p>mv</p>
</td>
<td style="width: 43.016069%; height: 88px;" valign="top">
<p>Verschiebt o. benennt Dateien</p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p><span class="Apple-converted-space">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span></p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p><br></p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p>getent passwd</p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p>Alle user anzeigen</p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p>getent group</p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p>Gruppe anzeigen<span class="Apple-converted-space">&nbsp;</span></p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p><br></p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p><br></p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p># passwd user</p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p>Passwort zuweisen</p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p>su - user</p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p>Nutzer wechseln</p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p><br></p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p><br></p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p><br></p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p><br></p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p># chown user:group /home/OldUser</p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p>Besitzer übergeben &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 🫴 &nbsp; &nbsp; &nbsp; 👤👥 &nbsp;🏠</p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p># chgrp group datei</p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p>Ändert nur gruppe &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;🔄.... &nbsp; &nbsp; &nbsp; &nbsp;👥 ➝ 📄</p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p># chown user:group dateiname</p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p>Ändert besitzer &amp; gruppe. &nbsp; &nbsp; &nbsp;🔄.... &nbsp;👤👥 ➝ 📄</p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p># usermod -l oldUser newUser</p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p>Ändern des namen<span class="Apple-converted-space">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;👤🔄Name</span></p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p><br></p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p><br></p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 35px;">
<td style="width: 33.003708%; height: 35px;" valign="top">
<p>fdisk -L</p>
</td>
<td style="width: 43.016069%; height: 35px;" valign="top">
<p>Zeigt alle festplatten und formate an</p>
</td>
<td style="width: 24.103832%; height: 35px;">
<p><br></p>
</td>
</tr>
<tr style="height: 57px;">
<td style="width: 33.003708%; height: 57px;" valign="top">
<p>crontab -e</p>
</td>
<td style="width: 43.016069%; height: 57px;" valign="top">
<p>Um zeitlich gesteuerte dinge zu starten</p>
</td>
<td style="width: 24.103832%; height: 57px;">
<p><br></p>
</td>
</tr>
</tbody>
</table>
<p id="bkmrk-%23-%3D-sudo"># = sudo</p>

CHMOD EINSTELLUNGEN:

- **Löschen hängt vom Ordner ab, nicht von der Datei**  
  → benötigt: `w + x` auf dem Ordner

- **Ordnerrechte ≠ Dateirechte**  
  → Datei: `r=lesen`, `w=ändern`, `x=ausführen`  
  → Ordner: `r=sehen`, `w=erstellen/löschen`, `x=betreten`

- **`x` ist Pflicht für Zugriff**  
  → ohne `x`: kein `cd`, kein Öffnen, egal was sonst gesetzt ist

- **`r` ohne `x`**  
  → sehen eingeschränkt möglich, aber nicht nutzen

- **`x` ohne `r`**  
  → betreten möglich, aber kein `ls` (Blindzugriff)

- **`w` ohne `x`**  
  → praktisch nutzlos (kein Zugriff auf den Ordner)

- **Verschieben (`mv`)**  
  → benötigt `w + x` auf Quell- UND Zielordner

- **Datei löschen ohne Dateirechte möglich**  
  → wenn Ordner `w + x` hat

- **root ignoriert Rechte weitgehend**  
  → kann fast alles unabhängig von Permissions

- **`chmod 777`**  
  → funktioniert immer, aber unsicher (jeder darf alles)

- **Sticky Bit (`t`) z. B. `/tmp`**  
  → alle dürfen schreiben, aber nur eigene Dateien löschen


--

**Linux Prompt (Befehlszeile) – komplett kompakt**

**Grundaufbau**  
`user@hostname:pfad$`  
oder als Admin:  
`root@hostname:pfad#`

**Bestandteile**

- `user` → aktueller Benutzer  
  - `user` = normaler Benutzer  
  - `root` = Administrator

- `hostname` → Rechner- oder Systemname  
  - z. B. `server`, `NASSI`, `raspberrypi`, `container`

- `pfad` → aktueller Ordner  
  - `~` = Home-Verzeichnis von `user` = `/home/user`  
  - `/` = Root-Verzeichnis, also die oberste Ebene des Systems  
  - `/etc`, `/var/log`, `/tmp` = absolute Pfade  
  - `..` = eine Ebene zurück

- `$` / `#` → Rechte-Stufe  
  - `$` = normaler Benutzer  
  - `#` = root / Admin

**Beispiele**

`user@server:~$`  
→ Benutzer `user`, Host `server`, im Home-Verzeichnis, normale Rechte

`root@server:~#`  
→ Benutzer `root`, Host `server`, im Home-Verzeichnis von root (`/root`), volle Rechte

`user@server:/home/user/projects$`  
→ Benutzer `user`, Host `server`, im Ordner `/home/user/projects`, normale Rechte

`root@server:/etc#`  
→ Benutzer `root`, Host `server`, im Ordner `/etc`, volle Rechte

`user@NASSI:/var/log$`  
→ Benutzer `user`, Host `NASSI`, im Log-Verzeichnis `/var/log`, normale Rechte

`root@container:/app#`  
→ Benutzer `root`, Host `container`, im Ordner `/app`, volle Rechte

`user@raspberrypi:~$`  
→ Benutzer `user`, Host `raspberrypi`, im Home-Verzeichnis, normale Rechte

`~/projects $`  
→ verkürzter Prompt, nur Pfad sichtbar, aktueller Ordner ist `projects` im Home-Verzeichnis

`$`  
→ minimaler Prompt, keine Infos zu Benutzer, Host oder Pfad sichtbar

`user@server:/tmp$`  
→ Benutzer `user`, Host `server`, im temporären Ordner `/tmp`

`user@server:/$`  
→ Benutzer `user`, Host `server`, im Root-Verzeichnis `/`

**Wichtige Bedeutungen**

- `~` = Home-Verzeichnis des aktuellen Benutzers  
- `/` = oberste Ebene des gesamten Systems  
- `..` = ein Verzeichnis zurück  
- `user@host` = zeigt, **wer** du bist und **auf welchem System** du bist  
- `pfad` = zeigt, **wo** du dich gerade befindest  
- `$` oder `#` = zeigt, **mit welchen Rechten** du arbeitest

**Typische Prüfungsfallen**

- `#` bedeutet nicht Kommentar im Prompt, sondern **root-Rechte**
- `~` ist **nicht** dasselbe wie `/`
  - `~` = Benutzerbereich
  - `/` = gesamtes System
- Der Hostname ist wichtig, weil du damit erkennst, auf welchem Gerät du gerade arbeitest
- Ein Prompt mit `$` ist deutlich ungefährlicher als ein Prompt mit `#`

**Merksatz**

`user@host = WER und WO`  
`pfad = an welcher Stelle im System`  
`$ / # = wie viele Rechte du hast`

# 1. Linux-Grundlagen



# 1.1 Linux-Grundlagen

Linux ist ein freies,
unixähnliches Betriebssystem,
das besonders häufig auf Servern,
Netzwerkgeräten,
Cloud-Systemen,
Containern,
Embedded-Systemen
und Entwicklerarbeitsplätzen eingesetzt wird.

Für Fachinformatiker Systemintegration ist Linux wichtig,
weil viele Serverdienste,
Automatisierungen,
Container,
Firewalls,
NAS-Systeme,
Cloud-Umgebungen
und Webdienste auf Linux basieren.

Merksatz:

    Linux ist besonders stark im Serverbetrieb,
    bei Automatisierung,
    Netzwerkdiensten
    und stabilen Systemumgebungen.

---

**Lernziele**

Nach dieser Seite solltest du erklären können:

    - was Linux ist
    - was der Linux-Kernel ist
    - was eine Linux-Distribution ist
    - was eine Shell ist
    - was ein Terminal ist
    - was der Unterschied zwischen Root und normalen Benutzern ist
    - warum Linux im Serverbereich wichtig ist
    - welche Grundbegriffe in der Prüfung häufig vorkommen

---

**Was ist Linux?**

Linux ist im engeren Sinn der **Kernel** eines Betriebssystems.

Der Kernel ist der zentrale Teil,
der zwischen Hardware und Software vermittelt.

Im Alltag meint man mit „Linux“ meistens ein komplettes Betriebssystem,
bestehend aus:

    - Linux-Kernel
    - Systemprogrammen
    - Shell
    - Paketverwaltung
    - Diensten
    - Bibliotheken
    - Benutzerprogrammen
    - optional grafischer Oberfläche

Beispiel:

    Ubuntu,
    Debian,
    Fedora,
    Arch Linux,
    openSUSE,
    Rocky Linux
    oder Alpine Linux

sind keine unterschiedlichen Kernel,
sondern unterschiedliche Linux-Distributionen.

Merksatz:

    Linux ist streng genommen der Kernel.
    Im Alltag meint man mit Linux meist die ganze Distribution.

---

**Kernel**

Der Kernel ist der Kern des Betriebssystems.

Er verwaltet unter anderem:

    - Prozesse
    - Arbeitsspeicher
    - Dateisysteme
    - Gerätetreiber
    - Netzwerkzugriffe
    - Rechte und Systemaufrufe
    - Kommunikation zwischen Hardware und Programmen

Programme greifen nicht direkt unkontrolliert auf die Hardware zu.
Sie nutzen Funktionen des Betriebssystems,
die vom Kernel bereitgestellt werden.

Beispiel:

    Ein Webserver schreibt eine Logdatei.
    Das Programm schreibt nicht direkt auf die Festplatte,
    sondern nutzt Betriebssystemfunktionen,
    die vom Kernel verarbeitet werden.

Merksatz:

    Der Kernel verbindet Hardware und Software.

---

**Linux-Distribution**

Eine Linux-Distribution ist ein vollständiges Betriebssystempaket
auf Basis des Linux-Kernels.

Eine Distribution enthält typischerweise:

    - Linux-Kernel
    - Paketverwaltung
    - Standardprogramme
    - Systemdienste
    - Konfigurationsstruktur
    - Installationssystem
    - Sicherheitsupdates
    - Dokumentation
    - optional grafische Oberfläche

Beispiele:

| Distribution | Typischer Einsatz |
|---|---|
| Debian | Server, stabile Systeme |
| Ubuntu | Desktop, Server, Cloud |
| Fedora | moderne Linux-Technologien |
| Rocky Linux | Enterprise-Server |
| openSUSE | Desktop und Server |
| Arch Linux | sehr individuell, fortgeschritten |
| Alpine Linux | kleine Container-Images |
| Kali Linux | Security- und Testumgebungen |

Wichtig:

    Die Distribution bestimmt,
    wie Pakete installiert werden,
    wo bestimmte Konfigurationsdateien liegen
    und wie Updates bereitgestellt werden.

Merksatz:

    Distribution = Linux-Kernel plus Systemumgebung.

---

**Warum gibt es verschiedene Distributionen?**

Distributionen unterscheiden sich zum Beispiel bei:

    - Paketverwaltung
    - Update-Strategie
    - Stabilität
    - Aktualität der Software
    - Zielgruppe
    - Sicherheitskonzept
    - Standardkonfiguration
    - Supportdauer
    - Einsatzgebiet

Beispiele:

    Debian ist sehr stabil
    und wird häufig für Server genutzt.

    Ubuntu ist weit verbreitet
    und wird auf Desktop,
    Servern
    und in der Cloud genutzt.

    Alpine ist sehr klein
    und wird oft für Container verwendet.

    Rocky Linux orientiert sich am Enterprise-Server-Umfeld.

Merksatz:

    Nicht jede Linux-Distribution verfolgt dasselbe Ziel.

---

**CLI und GUI**

Linux kann mit grafischer Oberfläche oder über die Kommandozeile bedient werden.

GUI bedeutet:

    Graphical User Interface

Also:

    grafische Benutzeroberfläche

CLI bedeutet:

    Command Line Interface

Also:

    Kommandozeile

Im Serverbereich wird Linux sehr häufig über die Kommandozeile verwaltet,
weil sie:

    - ressourcenschonend ist
    - gut automatisierbar ist
    - per SSH erreichbar ist
    - exakt dokumentierbare Befehle erlaubt
    - auf Servern ohne Monitor funktioniert

Merksatz:

    GUI ist grafisch.
    CLI ist textbasiert.
    Server werden häufig über CLI administriert.

---

**Terminal und Shell**

Terminal und Shell werden oft verwechselt.

**Terminal**

Das Terminal ist das Programm oder die Umgebung,
in der Befehle eingegeben werden.

Beispiele:

    Terminal-App

    SSH-Sitzung

    Konsolenfenster

    virtuelle Konsole

**Shell**

Die Shell interpretiert die eingegebenen Befehle
und führt sie aus.

Bekannte Shells:

    bash

    zsh

    sh

    fish

Beispiel:

    Du gibst im Terminal einen Befehl ein.
    Die Shell verarbeitet diesen Befehl.

Merksatz:

    Terminal = Eingabefenster.
    Shell = Befehlsinterpreter.

---

**Bash**

Bash steht für:

    Bourne Again Shell

Die Bash ist eine der bekanntesten Shells unter Linux.

Sie kann:

    - Befehle ausführen
    - Variablen verwenden
    - Skripte ausführen
    - Bedingungen prüfen
    - Schleifen nutzen
    - Ausgaben umleiten
    - Befehle verketten

Beispielhafte Bash-Befehle:

    pwd

    ls

    cd

    cp

    mv

    rm

    grep

    find

    chmod

    systemctl

Merksatz:

    Bash ist Shell und Skriptsprache zugleich.

---

**Prompt**

Der Prompt ist die Eingabeaufforderung der Shell.

Er zeigt häufig Informationen wie:

    - Benutzername
    - Hostname
    - aktuelles Verzeichnis
    - Benutzerrolle

Beispiel:

    felix@server:~$

Bedeutung:

| Teil | Bedeutung |
|---|---|
| felix | Benutzer |
| server | Hostname |
| ~ | Home-Verzeichnis |
| $ | normaler Benutzer |

Ein Prompt mit Raute zeigt häufig Root-Rechte an:

    root@server:~#

Wichtig:

    # bedeutet oft:
    Root-Shell oder administrative Rechte.

Merksatz:

    $ steht meist für normalen Benutzer.
    # steht häufig für Root.

---

**Root**

Root ist der administrative Hauptbenutzer unter Linux.

Root darf grundsätzlich alles:

    - Dateien ändern
    - Benutzer verwalten
    - Dienste starten und stoppen
    - Systemkonfiguration ändern
    - Software installieren
    - Rechte verändern
    - Systemdateien löschen

Das ist mächtig,
aber auch gefährlich.

Ein falscher Befehl als Root kann das System beschädigen.

Beispiel:

    Ein Löschbefehl mit Root-Rechten kann auch wichtige Systemdateien entfernen.

Merksatz:

    Root darf fast alles.
    Deshalb Root-Rechte nur bewusst verwenden.

---

**Normale Benutzer**

Normale Benutzer haben eingeschränkte Rechte.

Sie dürfen typischerweise:

    - eigene Dateien bearbeiten
    - eigene Prozesse starten
    - Programme ausführen
    - im eigenen Home-Verzeichnis arbeiten

Sie dürfen normalerweise nicht:

    - Systemdateien beliebig ändern
    - fremde Dateien lesen
    - Dienste systemweit verändern
    - Benutzer anlegen
    - Pakete installieren

Vorteil:

    Fehler oder Angriffe haben weniger Auswirkungen.

Merksatz:

    Normale Benutzer schützen das System vor unnötigen Risiken.

---

**sudo**

sudo bedeutet sinngemäß:

    führe einen Befehl mit erhöhten Rechten aus

Mit sudo kann ein berechtigter Benutzer einzelne administrative Befehle ausführen,
ohne dauerhaft als Root angemeldet zu sein.

Beispiel:

    sudo systemctl restart nginx

Bedeutung:

    Der Dienst nginx wird mit administrativen Rechten neu gestartet.

Vorteile:

    - keine dauerhafte Root-Sitzung nötig
    - bessere Nachvollziehbarkeit
    - gezielte Rechtevergabe möglich
    - weniger Risiko durch versehentliche Root-Befehle

Merksatz:

    sudo erlaubt gezielte administrative Befehle.

---

**Linux im Serverbetrieb**

Linux wird häufig als Serverbetriebssystem genutzt.

Typische Serveraufgaben:

    - Webserver
    - Datenbankserver
    - Dateiserver
    - DNS-Server
    - DHCP-Server
    - Mailserver
    - Container-Host
    - Firewall
    - VPN-Server
    - Monitoring-System
    - Backup-Server

Gründe für Linux im Serverbereich:

    - stabil
    - ressourcenschonend
    - gut automatisierbar
    - viele Serverdienste verfügbar
    - starke Netzwerkfunktionen
    - gute Fernadministration per SSH
    - weit verbreitet in Cloud und Containern

Merksatz:

    Linux ist ein Standardbetriebssystem im Serverbereich.

---

**Linux und Open Source**

Linux ist eng mit Open Source verbunden.

Open Source bedeutet:

    Der Quellcode ist offen einsehbar
    und kann je nach Lizenz genutzt,
    verändert
    und weitergegeben werden.

Vorteile:

    - Transparenz
    - große Community
    - Anpassbarkeit
    - viele freie Werkzeuge
    - schnelle Fehleranalyse möglich
    - breite Nutzung in Bildung und Unternehmen

Wichtig:

    Open Source bedeutet nicht automatisch kostenlos in jedem geschäftlichen Zusammenhang.
    Lizenzen und Supportmodelle müssen beachtet werden.

Merksatz:

    Open Source bedeutet offener Quellcode,
    nicht automatisch regelfrei.

---

**Linux und Dateisystem-Hierarchie**

Linux nutzt einen hierarchischen Verzeichnisbaum.

Der oberste Punkt ist:

    /

Das nennt man Root-Verzeichnis.

Wichtige Verzeichnisse:

| Verzeichnis | Bedeutung |
|---|---|
| / | Wurzel des Dateisystems |
| /home | Benutzerverzeichnisse |
| /root | Home-Verzeichnis des Root-Benutzers |
| /etc | Konfigurationsdateien |
| /var | veränderliche Daten, Logs, Spool |
| /tmp | temporäre Dateien |
| /usr | Programme und Bibliotheken |
| /bin | wichtige Programme |
| /sbin | Systemprogramme |
| /dev | Gerätedateien |
| /mnt | temporäre Mountpoints |
| /media | Wechselmedien |
| /proc | Kernel- und Prozessinformationen |

Diese Verzeichnisse werden auf der nächsten Seite genauer erklärt.

Merksatz:

    Unter Linux beginnt alles bei /.

---

**Linux und Dienste**

Viele Serverfunktionen laufen unter Linux als Dienste.

Ein Dienst ist ein Programm,
das im Hintergrund läuft
und eine bestimmte Aufgabe erfüllt.

Beispiele:

    Webserver

    Datenbankserver

    SSH-Server

    DNS-Server

    Backupdienst

    Monitoring-Agent

Dienste werden auf vielen Linux-Systemen mit systemd verwaltet.

Typische Befehle:

    systemctl status dienstname

    systemctl start dienstname

    systemctl stop dienstname

    systemctl restart dienstname

    systemctl enable dienstname

    systemctl disable dienstname

Merksatz:

    Dienste laufen im Hintergrund
    und stellen Funktionen bereit.

---

**Linux und Prozesse**

Ein Prozess ist ein laufendes Programm.

Beispiele:

    Shell

    Webserver-Prozess

    Datenbankprozess

    Editor

    Backupskript

Jeder Prozess hat unter Linux eine Prozess-ID.

Diese nennt man:

    PID

Prozesse können angezeigt,
überwacht
und beendet werden.

Typische Befehle:

    ps

    top

    htop

    kill

Merksatz:

    Prozess = laufendes Programm.

---

**Linux und Netzwerk**

Linux bringt viele Werkzeuge für Netzwerkdiagnose mit.

Typische Netzwerkbefehle:

| Befehl | Zweck |
|---|---|
| ip addr | IP-Adressen anzeigen |
| ip route | Routing anzeigen |
| ping | Erreichbarkeit per ICMP testen |
| ss | Ports und Verbindungen anzeigen |
| curl | HTTP/HTTPS prüfen |
| dig | DNS prüfen |
| nslookup | DNS prüfen |
| ssh | sichere Fernadministration |

Für FISI ist das besonders wichtig,
weil Linux häufig im Server,
Container-
und Cloud-Umfeld genutzt wird.

Merksatz:

    Linux ist sehr stark bei Netzwerkdiagnose und Serverbetrieb.

---

**Linux und Paketverwaltung**

Software wird unter Linux meistens über Paketverwaltungen installiert.

Beispiele:

| Distribution | Paketverwaltung |
|---|---|
| Debian / Ubuntu | apt |
| Fedora | dnf |
| Rocky Linux | dnf |
| openSUSE | zypper |
| Arch Linux | pacman |
| Alpine Linux | apk |

Paketverwaltungen können:

    - Software installieren
    - Software entfernen
    - Updates einspielen
    - Abhängigkeiten verwalten
    - Paketquellen nutzen
    - Versionsstände prüfen

Merksatz:

    Paketverwaltung installiert Software kontrolliert aus Paketquellen.

---

**Linux und Konfiguration**

Viele Linux-Programme werden über Textdateien konfiguriert.

Häufige Orte:

    /etc

    /etc/systemd

    /etc/ssh

    /etc/nginx

    /etc/fstab

Vorteile:

    - gut dokumentierbar
    - per SSH änderbar
    - versionierbar
    - automatisierbar
    - auch ohne GUI nutzbar

Wichtig:

    Änderungen an Konfigurationsdateien sollten nachvollziehbar,
    vorsichtig
    und möglichst mit Backup erfolgen.

Merksatz:

    Linux-Konfiguration liegt häufig in Textdateien.

---

**Linux und Logs**

Linux schreibt viele Ereignisse in Logdateien oder das Journal.

Logs helfen bei:

    - Fehlersuche
    - Sicherheitsanalyse
    - Dienstproblemen
    - Loginproblemen
    - Startproblemen
    - Netzwerkproblemen

Typische Werkzeuge:

    journalctl

    dmesg

    tail

    grep

Typische Orte:

    /var/log

    systemd-journal

Merksatz:

    Logs sind bei Linux-Fehlersuche zentral.

---

**Linux und Automatisierung**

Linux eignet sich sehr gut für Automatisierung.

Typische Mittel:

    - Shell-Skripte
    - Cronjobs
    - systemd Timer
    - SSH
    - Paketmanager
    - Konfigurationsdateien
    - Pipes und Umleitungen

Beispiele:

    Backups automatisch starten

    Logs auswerten

    Dienste überwachen

    Dateien regelmäßig synchronisieren

    Systeme aktualisieren

Merksatz:

    Linux wird stark über Skripte und Automatisierung verwaltet.

---

**Typische Linux-Begriffe**

| Begriff | Bedeutung |
|---|---|
| Kernel | Kern des Betriebssystems |
| Distribution | vollständiges Linux-Systempaket |
| Shell | Befehlsinterpreter |
| Terminal | Eingabeumgebung für Befehle |
| Root | administrativer Hauptbenutzer |
| sudo | Befehl mit erhöhten Rechten ausführen |
| Prozess | laufendes Programm |
| Dienst | Hintergrundprogramm mit Aufgabe |
| Paketmanager | installiert und aktualisiert Software |
| Repository | Paketquelle |
| Log | Protokolldatei oder Ereignisprotokoll |
| Mount | Einhängen eines Dateisystems |
| Pfad | Ort einer Datei oder eines Verzeichnisses |
| Home-Verzeichnis | persönlicher Benutzerbereich |

---

**Typische Prüfungsfragen**

| Frage | Kurzantwort |
|---|---|
| Was ist Linux im engeren Sinn? | der Kernel |
| Was ist eine Distribution? | Linux-Kernel plus Systemumgebung |
| Was macht der Kernel? | verwaltet Hardwarezugriffe und Systemressourcen |
| Was ist eine Shell? | Befehlsinterpreter |
| Was ist ein Terminal? | Eingabeumgebung für Befehle |
| Was ist Root? | administrativer Hauptbenutzer |
| Was macht sudo? | führt Befehle mit erhöhten Rechten aus |
| Warum wird Linux auf Servern genutzt? | stabil, automatisierbar, ressourcenschonend |
| Wo liegen viele Konfigurationen? | unter /etc |
| Wo liegen viele Logs? | unter /var/log oder im Journal |

---

**Typische Prüfungsfallen**

| Falle | Richtig denken |
|---|---|
| Linux immer als komplette Distribution bezeichnen | streng genommen ist Linux der Kernel |
| Terminal und Shell gleichsetzen | Terminal ist Umgebung, Shell interpretiert Befehle |
| Root dauerhaft nutzen | besser gezielt sudo verwenden |
| GUI für Server voraussetzen | viele Linux-Server laufen ohne GUI |
| Paketmanager mit App Store gleichsetzen | Paketmanager verwaltet Pakete und Abhängigkeiten |
| Logs ignorieren | Logs sind zentral für Fehlersuche |
| Konfiguration nur grafisch erwarten | Linux nutzt häufig Textdateien |
| Open Source mit automatisch kostenlos gleichsetzen | Lizenz und Support beachten |

---

**IHK-sichere Kurzformulierung**

Linux ist im engeren Sinn der Kernel eines Betriebssystems. Im Alltag bezeichnet Linux meist eine vollständige Distribution, also ein System aus Linux-Kernel, Systemprogrammen, Shell, Paketverwaltung, Diensten und Benutzerprogrammen. Der Kernel verwaltet zentrale Ressourcen wie Prozesse, Arbeitsspeicher, Dateisysteme, Treiber und Netzwerkzugriffe. Eine Shell ist ein Befehlsinterpreter, der Eingaben verarbeitet und Befehle ausführt. Das Terminal ist die Umgebung, in der diese Befehle eingegeben werden. Root ist der administrative Hauptbenutzer, während sudo einzelnen berechtigten Benutzern erlaubt, gezielt Befehle mit erhöhten Rechten auszuführen. Linux wird im Serverbereich häufig eingesetzt, weil es stabil, ressourcenschonend, gut automatisierbar und sehr gut per SSH administrierbar ist.

---

**Merksätze**

    Linux ist streng genommen der Kernel.

    Im Alltag meint Linux oft die ganze Distribution.

    Kernel verbindet Hardware und Software.

    Distribution = Kernel plus Systemumgebung.

    Terminal = Eingabeumgebung.

    Shell = Befehlsinterpreter.

    Bash ist eine bekannte Shell.

    Root ist der administrative Hauptbenutzer.

    sudo führt einzelne Befehle mit erhöhten Rechten aus.

    Normale Benutzer begrenzen Risiken.

    Linux-Server laufen häufig ohne grafische Oberfläche.

    CLI ist gut automatisierbar.

    SSH ist wichtig für Fernadministration.

    Unter Linux beginnt der Verzeichnisbaum bei /.

    /etc enthält viele Konfigurationsdateien.

    /var/log enthält viele Logdateien.

    systemd verwaltet viele Dienste.

    Prozess = laufendes Programm.

    Dienst = Hintergrundprogramm mit Aufgabe.

    Paketmanager verwalten Software und Abhängigkeiten.

    Logs sind zentral für Fehlersuche.

    Linux ist stark im Serverbetrieb,
    bei Netzwerkdiensten,
    in Containern
    und in der Cloud.

# 2. Dateisystem, Pfade und Verzeichnisse



# 2.1 Dateisystem, Pfade und Verzeichnisse

Linux verwendet einen hierarchischen Verzeichnisbaum.

Das bedeutet:

    Alle Dateien,
    Verzeichnisse,
    Geräte,
    Mountpoints
    und Systembereiche befinden sich unter einem gemeinsamen Startpunkt.

Dieser Startpunkt heißt:

    /

Das ist das Root-Verzeichnis des Dateisystems.

Wichtig:

    Das Root-Verzeichnis / ist nicht dasselbe wie der Benutzer root.

Merksatz:

    Unter Linux beginnt alles bei /.

---

**Lernziele**

Nach dieser Seite solltest du erklären können:

    - wie der Linux-Verzeichnisbaum aufgebaut ist
    - was absolute und relative Pfade sind
    - was das Root-Verzeichnis ist
    - was das Home-Verzeichnis ist
    - welche wichtigen Systemverzeichnisse es gibt
    - was versteckte Dateien sind
    - was Mountpoints sind
    - warum unter Linux Laufwerke nicht wie C: oder D: eingebunden werden

---

**Grundidee des Linux-Dateisystems**

Unter Linux gibt es keinen Laufwerksbuchstaben wie bei Windows.

Windows-Beispiel:

    C:\Users\Felix\Dokumente

Linux-Beispiel:

    /home/felix/Dokumente

Unter Linux werden Datenträger,
Partitionen,
USB-Sticks,
Netzlaufwerke
oder andere Dateisysteme in den bestehenden Verzeichnisbaum eingehängt.

Dieses Einhängen nennt man:

    Mounten

Merksatz:

    Linux nutzt einen gemeinsamen Verzeichnisbaum,
    keine Laufwerksbuchstaben.

---

**Root-Verzeichnis /**

Das Root-Verzeichnis ist der oberste Punkt im Linux-Dateisystem.

Es wird dargestellt durch:

    /

Alle anderen Verzeichnisse liegen darunter.

Beispiele:

    /home

    /etc

    /var

    /usr

    /tmp

    /root

    /dev

    /proc

Wichtig:

    / ist der Anfang des Dateisystems.
    root ist der administrative Benutzer.

Merksatz:

    / ist ein Verzeichnis.
    root ist ein Benutzer.

---

**Verzeichnisbaum**

Ein einfacher Linux-Verzeichnisbaum kann so aussehen:

    /
    ├── bin
    ├── boot
    ├── dev
    ├── etc
    ├── home
    │   └── felix
    ├── root
    ├── tmp
    ├── usr
    └── var

Bedeutung:

    / ist der oberste Punkt.

    /home/felix ist ein Benutzerverzeichnis.

    /etc enthält viele Konfigurationen.

    /var enthält veränderliche Daten wie Logs.

Merksatz:

    Pfade beschreiben die Position im Verzeichnisbaum.

---

**Absolute Pfade**

Ein absoluter Pfad beginnt immer bei:

    /

Beispiele:

    /home/felix

    /etc/ssh/sshd_config

    /var/log

    /usr/bin

    /tmp/test.txt

Vorteil:

    Ein absoluter Pfad ist eindeutig,
    egal in welchem Verzeichnis man sich gerade befindet.

Merksatz:

    Absoluter Pfad beginnt mit /.

---

**Relative Pfade**

Ein relativer Pfad beginnt nicht bei /,
sondern bezieht sich auf das aktuelle Verzeichnis.

Beispiel:

    dokumente/datei.txt

Wenn man sich gerade in

    /home/felix

befindet,
dann bedeutet der relative Pfad:

    /home/felix/dokumente/datei.txt

Merksatz:

    Relativer Pfad hängt vom aktuellen Verzeichnis ab.

---

**Aktuelles Verzeichnis**

Das aktuelle Verzeichnis ist der Ort,
an dem man sich gerade in der Shell befindet.

Anzeigen mit:

    pwd

pwd steht für:

    print working directory

Beispielausgabe:

    /home/felix

Merksatz:

    pwd zeigt,
    wo du gerade bist.

---

**In Verzeichnisse wechseln**

Mit cd wechselt man das aktuelle Verzeichnis.

Beispiele:

    cd /etc

    cd /home/felix

    cd ..

    cd ~

    cd -

Bedeutung:

| Befehl | Bedeutung |
|---|---|
| cd /etc | wechselt nach /etc |
| cd .. | eine Ebene nach oben |
| cd ~ | ins eigene Home-Verzeichnis |
| cd - | zurück ins vorherige Verzeichnis |
| cd | ebenfalls meist ins eigene Home-Verzeichnis |

Merksatz:

    cd wechselt das Verzeichnis.

---

**Punkt und Doppelpunkt**

Unter Linux haben . und .. eine besondere Bedeutung.

| Zeichen | Bedeutung |
|---|---|
| . | aktuelles Verzeichnis |
| .. | übergeordnetes Verzeichnis |

Beispiele:

    ./script.sh

bedeutet:

    script.sh im aktuellen Verzeichnis ausführen

    cd ..

bedeutet:

    eine Ebene nach oben wechseln

Merksatz:

    . ist hier.
    .. ist eine Ebene höher.

---

**Home-Verzeichnis**

Jeder normale Benutzer hat meist ein eigenes Home-Verzeichnis.

Beispiel:

    /home/felix

Dort liegen persönliche Dateien,
Konfigurationen
und Benutzerdaten.

Typische Inhalte:

    Dokumente

    Downloads

    Skripte

    versteckte Konfigurationsdateien

    persönliche Einstellungen

Das Home-Verzeichnis kann mit ~ abgekürzt werden.

Beispiel:

    ~/Dokumente

bedeutet:

    /home/felix/Dokumente

Merksatz:

    ~ steht für das eigene Home-Verzeichnis.

---

**Root-Benutzer und /root**

Der administrative Benutzer heißt:

    root

Sein Home-Verzeichnis ist meist:

    /root

Das ist nicht dasselbe wie:

    /

Unterschied:

| Begriff | Bedeutung |
|---|---|
| / | Root-Verzeichnis des gesamten Dateisystems |
| root | administrativer Benutzer |
| /root | Home-Verzeichnis des Benutzers root |

Merksatz:

    /,
    root
    und /root sind drei verschiedene Dinge.

---

**Wichtige Linux-Verzeichnisse**

| Verzeichnis | Bedeutung |
|---|---|
| / | Wurzel des Dateisystems |
| /home | Home-Verzeichnisse normaler Benutzer |
| /root | Home-Verzeichnis des Root-Benutzers |
| /etc | Konfigurationsdateien |
| /var | veränderliche Daten |
| /var/log | Logdateien |
| /tmp | temporäre Dateien |
| /usr | Programme, Bibliotheken und Ressourcen |
| /bin | wichtige Benutzerprogramme |
| /sbin | wichtige Systemprogramme |
| /boot | Bootdateien und Kernel |
| /dev | Gerätedateien |
| /proc | Prozess- und Kernelinformationen |
| /sys | Kernel- und Geräteinformationen |
| /mnt | temporäre Mountpoints |
| /media | automatisch eingebundene Wechselmedien |
| /opt | optionale Zusatzsoftware |
| /srv | Daten für bereitgestellte Dienste |
| /run | Laufzeitdaten seit Systemstart |

Merksatz:

    /etc für Konfiguration.
    /var/log für Logs.
    /home für Benutzer.

---

**/etc**

Das Verzeichnis /etc enthält viele systemweite Konfigurationsdateien.

Beispiele:

    /etc/ssh/sshd_config

    /etc/fstab

    /etc/hosts

    /etc/passwd

    /etc/group

    /etc/resolv.conf

Typische Inhalte:

    Dienstkonfiguration

    Netzwerkkonfiguration

    Benutzer- und Gruppendateien

    Mount-Konfiguration

    Systemkonfiguration

Merksatz:

    /etc ist zentral für Konfigurationen.

---

**/var**

Das Verzeichnis /var enthält veränderliche Daten.

var steht für:

    variable

Typische Inhalte:

    Logs

    Spool-Dateien

    Caches

    Daten von Diensten

    Warteschlangen

Beispiele:

    /var/log

    /var/cache

    /var/spool

    /var/lib

Merksatz:

    /var enthält Daten,
    die sich im Betrieb ändern.

---

**/var/log**

Das Verzeichnis /var/log enthält viele Logdateien.

Logs helfen bei:

    Fehlersuche

    Dienstproblemen

    Loginproblemen

    Sicherheitsanalyse

    Systemereignissen

Beispiele:

    /var/log/syslog

    /var/log/auth.log

    /var/log/messages

    /var/log/nginx

    /var/log/apache2

Wichtig:

    Welche Logdateien vorhanden sind,
    hängt von Distribution und Diensten ab.

Merksatz:

    /var/log ist wichtig für Fehlersuche.

---

**/tmp**

Das Verzeichnis /tmp enthält temporäre Dateien.

Typische Nutzung:

    Zwischenspeicher

    temporäre Skriptdateien

    Installationsreste

    kurzfristige Arbeitsdateien

Wichtig:

    Daten in /tmp können automatisch gelöscht werden,
    zum Beispiel beim Neustart oder durch Aufräumdienste.

Merksatz:

    /tmp ist nicht für dauerhafte Speicherung gedacht.

---

**/usr**

Das Verzeichnis /usr enthält viele Programme,
Bibliotheken
und gemeinsam genutzte Ressourcen.

Typische Unterverzeichnisse:

    /usr/bin

    /usr/sbin

    /usr/lib

    /usr/share

Beispiele:

    Programme für Benutzer

    Systemprogramme

    Bibliotheken

    Dokumentation

Merksatz:

    /usr enthält viele installierte Programme und Ressourcen.

---

**/bin und /sbin**

/bin enthält wichtige Benutzerprogramme.

Beispiele:

    ls

    cp

    mv

    rm

    cat

/sbin enthält wichtige Systemprogramme.

Beispiele:

    ip

    reboot

    shutdown

    fsck

Hinweis:

    Auf modernen Distributionen sind /bin und /sbin teilweise symbolische Links nach /usr/bin und /usr/sbin.

Merksatz:

    bin = Programme.
    sbin = Systemprogramme.

---

**/boot**

Das Verzeichnis /boot enthält Dateien,
die für den Systemstart wichtig sind.

Typische Inhalte:

    Kernel

    Bootloader-Dateien

    Initramfs

Wichtig:

    Fehler in /boot können dazu führen,
    dass das System nicht mehr startet.

Merksatz:

    /boot enthält wichtige Startdateien.

---

**/dev**

Das Verzeichnis /dev enthält Gerätedateien.

Unter Linux werden viele Geräte als Dateien dargestellt.

Beispiele:

    /dev/sda

    /dev/nvme0n1

    /dev/null

    /dev/tty

    /dev/random

Bedeutung:

    Festplatten

    Partitionen

    Terminals

    virtuelle Geräte

Merksatz:

    Unter Linux erscheinen Geräte oft als Dateien unter /dev.

---

**/proc**

Das Verzeichnis /proc ist ein virtuelles Dateisystem.

Es enthält Informationen über:

    Prozesse

    Kernel

    Speicher

    CPU

    Systemzustand

Beispiele:

    /proc/cpuinfo

    /proc/meminfo

    /proc/1

Wichtig:

    /proc liegt nicht einfach normal auf der Festplatte.
    Es wird vom Kernel bereitgestellt.

Merksatz:

    /proc zeigt laufende Kernel- und Prozessinformationen.

---

**/sys**

Das Verzeichnis /sys ist ebenfalls ein virtuelles Dateisystem.

Es enthält Informationen über:

    Geräte

    Treiber

    Kernelobjekte

    Hardwarezustände

Wichtig:

    /sys wird häufig von Systemdiensten,
    Hardwareverwaltung
    und Diagnosewerkzeugen genutzt.

Merksatz:

    /sys zeigt System- und Geräteinformationen.

---

**/mnt und /media**

/mnt wird häufig für temporäre manuelle Mountpoints genutzt.

Beispiel:

    /mnt/backup

    /mnt/usb

/media wird häufig für automatisch eingebundene Wechselmedien genutzt.

Beispiel:

    /media/felix/USB-STICK

Merksatz:

    /mnt für manuelle Mounts.
    /media oft für Wechselmedien.

---

**/opt**

Das Verzeichnis /opt ist für optionale Zusatzsoftware gedacht.

Beispiele:

    herstellerspezifische Programme

    manuell installierte Anwendungen

    große Zusatzpakete

Merksatz:

    /opt enthält optionale Zusatzsoftware.

---

**/srv**

Das Verzeichnis /srv kann Daten enthalten,
die von Serverdiensten bereitgestellt werden.

Beispiele:

    Webdaten

    FTP-Daten

    Projektdaten für Dienste

Merksatz:

    /srv kann Dienst-Daten enthalten.

---

**/run**

Das Verzeichnis /run enthält Laufzeitdaten seit dem Systemstart.

Beispiele:

    PID-Dateien

    Sockets

    temporäre Dienstinformationen

Wichtig:

    Inhalte in /run sind nicht dauerhaft.

Merksatz:

    /run enthält aktuelle Laufzeitinformationen.

---

**Versteckte Dateien**

Dateien und Verzeichnisse,
deren Name mit einem Punkt beginnt,
gelten unter Linux als versteckt.

Beispiele:

    .bashrc

    .profile

    .ssh

    .config

    .local

Anzeigen mit:

    ls -a

Typische Nutzung:

    Benutzerkonfigurationen

    SSH-Schlüssel

    Programmeinstellungen

Merksatz:

    Punkt am Anfang bedeutet versteckt.

---

**Dateitypen unter Linux**

Unter Linux gibt es verschiedene Dateitypen.

| Typ | Bedeutung |
|---|---|
| normale Datei | Textdatei, Programm, Bild, Archiv |
| Verzeichnis | enthält Dateien und weitere Verzeichnisse |
| symbolischer Link | Verweis auf andere Datei oder Verzeichnis |
| Gerätedatei | Zugriff auf Geräte |
| Socket | Kommunikation zwischen Prozessen |
| Pipe | Datenstrom zwischen Prozessen |

Mit folgendem Befehl kann man Dateiinformationen anzeigen:

    ls -l

Merksatz:

    Unter Linux ist nicht jede „Datei“ eine normale Datei.

---

**Symbolische Links**

Ein symbolischer Link ist ein Verweis auf eine andere Datei oder ein anderes Verzeichnis.

Beispiel:

    /bin kann auf /usr/bin zeigen

Symbolische Links erkennt man bei ls -l häufig an:

    ->

Beispiel:

    bin -> usr/bin

Nutzen:

    Kompatibilität

    Abkürzungen

    flexible Pfade

    Verweise auf gemeinsame Orte

Merksatz:

    Symbolischer Link = Verweis.

---

**Mountpoints**

Ein Mountpoint ist ein Verzeichnis,
an dem ein Dateisystem eingehängt wird.

Beispiel:

    /mnt/backup

Dort kann zum Beispiel eine externe Festplatte,
eine Partition
oder ein Netzlaufwerk eingebunden werden.

Wichtig:

    Das Dateisystem erscheint dann an dieser Stelle im Verzeichnisbaum.

Merksatz:

    Mountpoint = Einhängepunkt im Verzeichnisbaum.

---

**Warum Linux keine Laufwerksbuchstaben nutzt**

Windows nutzt oft Laufwerksbuchstaben:

    C:

    D:

    E:

Linux nutzt stattdessen einen einheitlichen Verzeichnisbaum.

Beispiel:

    /

    /home

    /mnt/backup

    /media/usb

Vorteil:

    Alle Dateisysteme erscheinen an einer Stelle im Baum.
    Programme können mit festen Pfaden arbeiten,
    unabhängig davon,
    welches Gerät darunter eingebunden ist.

Merksatz:

    Linux hängt Laufwerke in den Verzeichnisbaum ein.

---

**Groß- und Kleinschreibung**

Linux unterscheidet bei Dateinamen zwischen Groß-
und Kleinschreibung.

Diese Dateien wären unterschiedlich:

    Datei.txt

    datei.txt

    DATEI.txt

Wichtig:

    Befehle,
    Pfade
    und Dateinamen müssen exakt geschrieben werden.

Merksatz:

    Linux ist case-sensitive.

---

**Leerzeichen in Dateinamen**

Leerzeichen in Dateinamen können in der Shell Probleme verursachen,
wenn sie nicht korrekt behandelt werden.

Beispiel:

    Meine Datei.txt

Mögliche Schreibweisen:

    "Meine Datei.txt"

oder:

    Meine\ Datei.txt

Besser für Server und Skripte:

    meine_datei.txt

    meine-datei.txt

Merksatz:

    Leerzeichen in Dateinamen besser vermeiden,
    besonders in Skripten.

---

**Dateiendungen unter Linux**

Linux ist weniger abhängig von Dateiendungen als Windows.

Eine Datei kann ausführbar sein,
wenn sie die passenden Rechte besitzt,
nicht nur,
weil sie eine bestimmte Endung hat.

Beispiele:

    script.sh

    backup

    programm

Trotzdem sind Endungen nützlich,
um Dateien leichter zu erkennen.

Beispiele:

    .txt

    .conf

    .log

    .sh

    .tar.gz

Merksatz:

    Unter Linux sind Rechte wichtiger als Dateiendung.

---

**Wichtige Befehle zu Pfaden und Verzeichnissen**

| Befehl | Bedeutung |
|---|---|
| pwd | aktuelles Verzeichnis anzeigen |
| ls | Inhalt anzeigen |
| ls -l | ausführliche Liste anzeigen |
| ls -a | versteckte Dateien anzeigen |
| cd | Verzeichnis wechseln |
| cd .. | eine Ebene höher |
| cd ~ | ins Home-Verzeichnis |
| mkdir | Verzeichnis erstellen |
| rmdir | leeres Verzeichnis löschen |
| tree | Verzeichnisbaum anzeigen, falls installiert |

Merksatz:

    pwd,
    ls
    und cd sind Grundbefehle für Navigation.

---

**Typische Beispiele**

Aktuelles Verzeichnis anzeigen:

    pwd

In das Home-Verzeichnis wechseln:

    cd ~

Nach /etc wechseln:

    cd /etc

Eine Ebene nach oben wechseln:

    cd ..

Inhalt anzeigen:

    ls

Ausführliche Liste anzeigen:

    ls -l

Auch versteckte Dateien anzeigen:

    ls -a

Verzeichnis erstellen:

    mkdir testordner

Merksatz:

    Erst wissen,
    wo man ist.
    Dann Befehl ausführen.

---

**Typische Prüfungsfragen**

| Frage | Kurzantwort |
|---|---|
| Was ist /? | Root-Verzeichnis des Dateisystems |
| Was ist /root? | Home-Verzeichnis des Root-Benutzers |
| Was ist root? | administrativer Benutzer |
| Wo liegen viele Konfigurationsdateien? | /etc |
| Wo liegen viele Logs? | /var/log |
| Wo liegen Benutzerverzeichnisse? | /home |
| Was bedeutet ~? | eigenes Home-Verzeichnis |
| Was bedeutet ..? | übergeordnetes Verzeichnis |
| Was ist ein absoluter Pfad? | Pfad ab / |
| Was ist ein relativer Pfad? | Pfad relativ zum aktuellen Verzeichnis |
| Was ist ein Mountpoint? | Einhängepunkt für ein Dateisystem |
| Was bedeutet versteckte Datei? | Name beginnt mit Punkt |

---

**Typische Prüfungsfallen**

| Falle | Richtig denken |
|---|---|
| / und /root verwechseln | / ist Dateisystemwurzel, /root ist Root-Home |
| root und / verwechseln | root ist Benutzer, / ist Verzeichnis |
| absolute und relative Pfade verwechseln | absolut beginnt mit / |
| ~ als normales Zeichen verstehen | ~ steht für Home-Verzeichnis |
| /tmp dauerhaft nutzen | /tmp ist temporär |
| /etc löschen oder blind ändern | enthält wichtige Konfiguration |
| Logs nicht unter /var/log suchen | /var/log ist zentral |
| Groß- und Kleinschreibung ignorieren | Linux unterscheidet |
| Leerzeichen in Skripten vergessen | Anführungszeichen oder Escape nötig |
| Mountpoint nicht verstehen | Dateisystem wird in Verzeichnis eingehängt |

---

**IHK-sichere Kurzformulierung**

Linux verwendet einen hierarchischen Verzeichnisbaum, der beim Root-Verzeichnis / beginnt. Alle Dateien, Verzeichnisse, Geräte und eingebundenen Dateisysteme befinden sich unterhalb dieses Baums. Ein absoluter Pfad beginnt immer mit /, ein relativer Pfad bezieht sich auf das aktuelle Verzeichnis. Benutzerdateien liegen meist unter /home, systemweite Konfigurationen unter /etc und Logdateien häufig unter /var/log. Das Home-Verzeichnis des administrativen Benutzers root ist /root und darf nicht mit dem Root-Verzeichnis / verwechselt werden. Datenträger werden unter Linux nicht über Laufwerksbuchstaben angesprochen, sondern an Mountpoints in den Verzeichnisbaum eingehängt.

---

**Merksätze**

    Unter Linux beginnt alles bei /.

    / ist das Root-Verzeichnis.

    root ist der administrative Benutzer.

    /root ist das Home-Verzeichnis von root.

    /home enthält Benutzerverzeichnisse.

    /etc enthält Konfigurationen.

    /var enthält veränderliche Daten.

    /var/log enthält Logs.

    /tmp ist temporär.

    /usr enthält Programme und Ressourcen.

    /dev enthält Gerätedateien.

    /proc enthält Prozess- und Kernelinformationen.

    /sys enthält System- und Geräteinformationen.

    /mnt ist oft für manuelle Mounts.

    /media ist oft für Wechselmedien.

    /opt ist für optionale Zusatzsoftware.

    Absoluter Pfad beginnt mit /.

    Relativer Pfad hängt vom aktuellen Verzeichnis ab.

    pwd zeigt das aktuelle Verzeichnis.

    cd wechselt das Verzeichnis.

    . bedeutet aktuelles Verzeichnis.

    .. bedeutet übergeordnetes Verzeichnis.

    ~ bedeutet eigenes Home-Verzeichnis.

    Punkt am Anfang bedeutet versteckte Datei.

    Linux unterscheidet Groß- und Kleinschreibung.

    Laufwerke werden unter Linux eingehängt,
    nicht als C: oder D: angezeigt.

    Mountpoint = Einhängepunkt im Verzeichnisbaum.

# 3. Dateien suchen, anzeigen und bearbeiten



# 3.1 Dateien suchen, anzeigen und bearbeiten

In diesem Kapitel geht es um den praktischen Umgang mit Dateien unter Linux.

Dazu gehören:

    - Dateien anzeigen
    - Dateien erstellen
    - Dateien kopieren
    - Dateien verschieben
    - Dateien löschen
    - Inhalte lesen
    - Inhalte filtern
    - Dateien suchen
    - einfache Textbearbeitung

Für Fachinformatiker Systemintegration ist das wichtig,
weil viele Linux-Aufgaben direkt mit Dateien,
Konfigurationen,
Logs
und Skripten zu tun haben.

Merksatz:

    Unter Linux ist sehr vieles eine Datei:
    Konfigurationen,
    Logs,
    Geräteinformationen
    und Skripte.

---

**Lernziele**

Nach dieser Seite solltest du erklären und anwenden können:

    - wie man Dateien und Verzeichnisse auflistet
    - wie man Dateiinhalte anzeigt
    - wie man Dateien erstellt
    - wie man Dateien kopiert,
      verschiebt
      und löscht
    - wie man nach Dateien sucht
    - wie man Inhalte in Dateien findet
    - wofür cat,
      less,
      head,
      tail,
      grep,
      find
      und nano genutzt werden
    - welche typischen Fehler beim Umgang mit Dateien auftreten

---

**Grundidee**

Viele administrative Aufgaben unter Linux bestehen daraus,
Dateien zu lesen,
zu ändern
oder zu prüfen.

Beispiele:

    - Konfigurationsdatei unter /etc bearbeiten
    - Logdatei unter /var/log auswerten
    - Skript im Home-Verzeichnis erstellen
    - Backup-Dateien prüfen
    - Dienstkonfiguration vergleichen
    - Text in Dateien suchen
    - alte Dateien finden und löschen

Wichtig:

    Vor Änderungen an wichtigen Konfigurationsdateien sollte man eine Sicherungskopie erstellen.

Merksatz:

    Erst lesen,
    dann sichern,
    dann ändern.

---

**Dateien und Verzeichnisse anzeigen**

Der wichtigste Befehl zum Anzeigen von Verzeichnisinhalten ist:

    ls

Beispiele:

    ls

    ls -l

    ls -a

    ls -la

Bedeutung:

| Befehl | Bedeutung |
|---|---|
| ls | Inhalt des aktuellen Verzeichnisses anzeigen |
| ls -l | ausführliche Liste anzeigen |
| ls -a | auch versteckte Dateien anzeigen |
| ls -la | ausführlich und mit versteckten Dateien |
| ls /etc | Inhalt von /etc anzeigen |
| ls -lh | Größen menschenlesbar anzeigen |

Merksatz:

    ls zeigt Dateien und Verzeichnisse an.

---

**Ausgabe von ls -l verstehen**

Beispiel:

    -rw-r--r-- 1 felix users 1200 Jul 08 12:30 beispiel.txt

Bedeutung:

| Teil | Bedeutung |
|---|---|
| -rw-r--r-- | Dateityp und Rechte |
| 1 | Anzahl der Links |
| felix | Besitzer |
| users | Gruppe |
| 1200 | Dateigröße in Byte |
| Jul 08 12:30 | Änderungsdatum |
| beispiel.txt | Dateiname |

Der erste Buchstabe zeigt den Dateityp:

| Zeichen | Bedeutung |
|---|---|
| - | normale Datei |
| d | Verzeichnis |
| l | symbolischer Link |
| c | Zeichen-Gerät |
| b | Block-Gerät |
| s | Socket |
| p | Pipe |

Merksatz:

    ls -l zeigt Rechte,
    Besitzer,
    Größe,
    Datum
    und Dateinamen.

---

**Dateiinhalte mit cat anzeigen**

cat zeigt den Inhalt einer Datei direkt im Terminal an.

Beispiel:

    cat datei.txt

Typische Nutzung:

    kleine Textdateien anzeigen

    Konfigurationsdateien kurz prüfen

    Inhalt in Skripten ausgeben

Wichtig:

    cat ist unpraktisch bei sehr langen Dateien,
    weil der Inhalt direkt durchläuft.

Merksatz:

    cat zeigt kleine Dateien direkt an.

---

**Dateiinhalte mit less anzeigen**

less zeigt Dateien seitenweise an.

Beispiel:

    less /var/log/syslog

Navigation in less:

| Taste | Bedeutung |
|---|---|
| Leertaste | eine Seite weiter |
| b | eine Seite zurück |
| Pfeiltasten | zeilenweise bewegen |
| /suchwort | innerhalb der Datei suchen |
| n | nächster Treffer |
| q | less verlassen |

Vorteil:

    less eignet sich gut für lange Dateien und Logs.

Merksatz:

    less ist besser für lange Dateien.

---

**Anfang einer Datei anzeigen**

Mit head zeigt man den Anfang einer Datei.

Beispiel:

    head datei.txt

Standardmäßig werden die ersten 10 Zeilen angezeigt.

Mehr Zeilen anzeigen:

    head -n 20 datei.txt

Typische Nutzung:

    Anfang einer Logdatei prüfen

    CSV-Datei kurz ansehen

    Kopfzeilen prüfen

Merksatz:

    head zeigt den Anfang.

---

**Ende einer Datei anzeigen**

Mit tail zeigt man das Ende einer Datei.

Beispiel:

    tail datei.txt

Standardmäßig werden die letzten 10 Zeilen angezeigt.

Mehr Zeilen anzeigen:

    tail -n 50 datei.txt

Live mitlesen:

    tail -f /var/log/syslog

Typische Nutzung:

    aktuelle Logeinträge verfolgen

    Dienstfehler live beobachten

    neue Einträge prüfen

Merksatz:

    tail zeigt das Ende.
    tail -f liest live mit.

---

**Dateien erstellen mit touch**

touch erstellt eine leere Datei,
wenn sie noch nicht existiert.

Beispiel:

    touch notiz.txt

Wenn die Datei bereits existiert,
wird der Zeitstempel aktualisiert.

Typische Nutzung:

    leere Datei anlegen

    Testdatei erstellen

    Zeitstempel aktualisieren

Merksatz:

    touch erstellt leere Dateien oder aktualisiert Zeitstempel.

---

**Verzeichnisse erstellen mit mkdir**

Mit mkdir erstellt man Verzeichnisse.

Beispiel:

    mkdir testordner

Mehrere Ebenen erstellen:

    mkdir -p projekt/logs/archiv

Bedeutung:

| Befehl | Bedeutung |
|---|---|
| mkdir test | Verzeichnis test erstellen |
| mkdir -p a/b/c | komplette Verzeichnisstruktur erstellen |

Merksatz:

    mkdir erstellt Verzeichnisse.
    mkdir -p erstellt auch fehlende Zwischenordner.

---

**Dateien kopieren mit cp**

Mit cp kopiert man Dateien.

Beispiele:

    cp quelle.txt ziel.txt

    cp datei.txt /tmp/

    cp /etc/hosts ~/hosts.backup

Verzeichnisse rekursiv kopieren:

    cp -r ordner1 ordner2

Wichtige Optionen:

| Option | Bedeutung |
|---|---|
| -r | rekursiv, für Verzeichnisse |
| -i | vor Überschreiben nachfragen |
| -v | zeigt ausgeführte Aktionen |
| -p | erhält Zeitstempel und Rechte möglichst bei |

Merksatz:

    cp kopiert.
    Für Verzeichnisse braucht man meist cp -r.

---

**Dateien verschieben oder umbenennen mit mv**

Mit mv verschiebt oder benennt man Dateien um.

Umbenennen:

    mv alt.txt neu.txt

Verschieben:

    mv datei.txt /tmp/

Verzeichnis verschieben:

    mv projekt /tmp/

Wichtig:

    mv kann bestehende Dateien überschreiben,
    wenn man nicht aufpasst.

Sicherer:

    mv -i alt.txt neu.txt

Merksatz:

    mv verschiebt und benennt um.

---

**Dateien löschen mit rm**

Mit rm löscht man Dateien.

Beispiel:

    rm datei.txt

Mit Nachfrage:

    rm -i datei.txt

Verzeichnis mit Inhalt löschen:

    rm -r ordner

Sehr vorsichtig verwenden:

    rm -rf ordner

Bedeutung:

| Option | Bedeutung |
|---|---|
| -r | rekursiv, auch Unterordner |
| -f | force, keine Rückfrage |
| -i | interaktiv, mit Nachfrage |

Wichtig:

    rm löscht normalerweise nicht in einen Papierkorb.
    Gelöschte Dateien sind nicht einfach wiederherstellbar.

Merksatz:

    rm löscht direkt.
    rm -rf nur sehr bewusst verwenden.

---

**Leere Verzeichnisse löschen mit rmdir**

rmdir löscht nur leere Verzeichnisse.

Beispiel:

    rmdir leerer_ordner

Wenn das Verzeichnis nicht leer ist,
schlägt der Befehl fehl.

Merksatz:

    rmdir löscht nur leere Verzeichnisse.

---

**Dateien mit nano bearbeiten**

nano ist ein einfacher Texteditor im Terminal.

Datei öffnen oder erstellen:

    nano datei.txt

Wichtige Tastenkombinationen:

| Tastenkombination | Bedeutung |
|---|---|
| Strg + O | speichern |
| Enter | Dateiname bestätigen |
| Strg + X | nano verlassen |
| Strg + W | suchen |
| Strg + K | Zeile ausschneiden |
| Strg + U | Zeile einfügen |

Typische Nutzung:

    Konfigurationsdateien bearbeiten

    Notizen erstellen

    kleine Skripte schreiben

Merksatz:

    nano ist ein einfacher Terminal-Editor.

---

**Dateien sicher bearbeiten**

Vor Änderungen an wichtigen Dateien sollte man eine Sicherung erstellen.

Beispiel:

    cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

Danach bearbeiten:

    nano /etc/ssh/sshd_config

Vorteil:

    Bei Fehlern kann man die alte Version wiederherstellen.

Beispiel:

    cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config

Merksatz:

    Vor Konfigurationsänderung Backup-Datei erstellen.

---

**In Dateien suchen mit grep**

grep sucht Text in Dateien.

Beispiel:

    grep "error" logfile.txt

Groß- und Kleinschreibung ignorieren:

    grep -i "error" logfile.txt

Zeilennummern anzeigen:

    grep -n "error" logfile.txt

Rekursiv in Verzeichnissen suchen:

    grep -r "PermitRootLogin" /etc/ssh

Wichtige Optionen:

| Option | Bedeutung |
|---|---|
| -i | Groß-/Kleinschreibung ignorieren |
| -n | Zeilennummer anzeigen |
| -r | rekursiv in Verzeichnissen suchen |
| -v | Treffer umkehren, also nicht passende Zeilen |
| -l | nur Dateinamen mit Treffern anzeigen |

Merksatz:

    grep sucht Textmuster in Dateien.

---

**Typische grep-Beispiele**

Fehler in Logdatei suchen:

    grep -i "error" /var/log/syslog

SSH-Konfiguration prüfen:

    grep "PermitRootLogin" /etc/ssh/sshd_config

Alle Zeilen ohne Kommentar anzeigen:

    grep -v "^#" datei.conf

Mehrere Treffer mit Zeilennummern:

    grep -n "root" /etc/passwd

Merksatz:

    grep ist eines der wichtigsten Werkzeuge für Logs und Konfigurationen.

---

**Dateien suchen mit find**

find sucht Dateien und Verzeichnisse im Dateisystem.

Beispiele:

    find /home -name "datei.txt"

    find /var/log -name "*.log"

    find /etc -name "*ssh*"

Bedeutung:

| Befehl | Bedeutung |
|---|---|
| find /home -name "test.txt" | sucht test.txt unter /home |
| find . -name "*.txt" | sucht .txt-Dateien ab aktuellem Verzeichnis |
| find /var/log -type f | sucht normale Dateien unter /var/log |
| find /var/log -type d | sucht Verzeichnisse unter /var/log |

Merksatz:

    find sucht Dateien nach Kriterien.

---

**find nach Dateityp**

Mit -type kann man Dateitypen einschränken.

Beispiele:

    find /home -type f

    find /home -type d

    find /home -type l

Bedeutung:

| Option | Bedeutung |
|---|---|
| -type f | normale Dateien |
| -type d | Verzeichnisse |
| -type l | symbolische Links |

Merksatz:

    find -type f sucht Dateien.
    find -type d sucht Verzeichnisse.

---

**find nach Größe**

Dateien größer als 100 MB finden:

    find /home -type f -size +100M

Dateien kleiner als 1 MB finden:

    find /home -type f -size -1M

Dateien genau 10 KB:

    find /home -type f -size 10k

Merksatz:

    find kann auch nach Dateigröße suchen.

---

**find nach Zeit**

Dateien suchen,
die in den letzten 7 Tagen geändert wurden:

    find /home -type f -mtime -7

Dateien suchen,
die älter als 30 Tage sind:

    find /tmp -type f -mtime +30

Bedeutung:

| Ausdruck | Bedeutung |
|---|---|
| -mtime -7 | jünger als 7 Tage |
| -mtime +30 | älter als 30 Tage |
| -mtime 1 | ungefähr vor einem Tag geändert |

Merksatz:

    find kann alte oder neue Dateien finden.

---

**which und whereis**

which zeigt,
welcher Programmpfad beim Ausführen verwendet wird.

Beispiel:

    which ssh

Mögliche Ausgabe:

    /usr/bin/ssh

whereis zeigt weitere Orte zu einem Programm an.

Beispiel:

    whereis ssh

Merksatz:

    which zeigt,
    welches Programm ausgeführt wird.

---

**Dateiinformationen mit file anzeigen**

file erkennt den Dateityp anhand des Inhalts.

Beispiel:

    file dokument.txt

    file script.sh

    file bild.png

Nützlich,
wenn die Dateiendung unklar oder falsch ist.

Merksatz:

    file erkennt Dateitypen anhand des Inhalts.

---

**Dateigrößen anzeigen**

Mit ls -lh werden Größen besser lesbar angezeigt.

Beispiel:

    ls -lh

Mit du kann man Speicherverbrauch anzeigen.

Beispiel:

    du -sh ordner

Bedeutung:

| Befehl | Bedeutung |
|---|---|
| ls -lh | Dateigrößen lesbar anzeigen |
| du -sh ordner | Gesamtgröße eines Ordners anzeigen |
| du -h | Größen rekursiv anzeigen |

Merksatz:

    ls zeigt Dateigröße.
    du zeigt Speicherverbrauch.

---

**Dateien zählen**

Dateien in einem Verzeichnis zählen:

    ls | wc -l

Alle normalen Dateien unter einem Verzeichnis zählen:

    find /home/felix -type f | wc -l

Bedeutung:

| Befehl | Zweck |
|---|---|
| wc -l | Zeilen zählen |
| find ... \| wc -l | gefundene Einträge zählen |

Merksatz:

    wc -l zählt Zeilen.

---

**Ausgaben mit Platzhaltern**

Die Shell kann Platzhalter verwenden.

| Platzhalter | Bedeutung |
|---|---|
| * | beliebige Zeichen |
| ? | genau ein beliebiges Zeichen |
| [abc] | eines der Zeichen a, b oder c |

Beispiele:

    ls *.txt

    rm *.tmp

    cp *.conf backup/

Wichtig:

    Platzhalter werden von der Shell erweitert,
    bevor der Befehl ausgeführt wird.

Merksatz:

    * steht für beliebige Zeichen.

---

**Achtung bei rm und Platzhaltern**

Beispiel:

    rm *.tmp

löscht alle Dateien,
die auf .tmp enden.

Gefährlich:

    rm *

löscht alle passenden Dateien im aktuellen Verzeichnis.

Noch gefährlicher:

    rm -rf *

löscht rekursiv alles Passende im aktuellen Verzeichnis.

Merksatz:

    Vor rm mit Platzhaltern immer prüfen,
    was betroffen ist.

---

**Sichere Arbeitsweise**

Vor riskanten Befehlen:

    pwd

    ls

    ls -la

    echo *.tmp

    dann erst löschen oder verschieben

Beispiel:

    echo *.tmp

zeigt,
welche Dateien vom Platzhalter betroffen wären.

Merksatz:

    Erst anzeigen,
    dann löschen.

---

**Typische Datei-Aufgaben im Admin-Alltag**

| Aufgabe | Möglicher Befehl |
|---|---|
| aktuelle Position anzeigen | pwd |
| Dateien anzeigen | ls -la |
| Datei lesen | cat datei.txt |
| lange Datei lesen | less datei.txt |
| Log live verfolgen | tail -f logfile |
| Datei erstellen | touch datei.txt |
| Verzeichnis erstellen | mkdir ordner |
| Datei kopieren | cp quelle ziel |
| Verzeichnis kopieren | cp -r quelle ziel |
| Datei verschieben | mv quelle ziel |
| Datei löschen | rm datei |
| leeres Verzeichnis löschen | rmdir ordner |
| Text suchen | grep "text" datei |
| Datei suchen | find /pfad -name "datei" |
| Datei bearbeiten | nano datei |

---

**Typische Fehlerbilder**

| Fehlerbild | Wahrscheinliche Ursache |
|---|---|
| Datei nicht gefunden | falscher Pfad oder falscher Name |
| Permission denied | fehlende Rechte |
| No such file or directory | Datei oder Verzeichnis existiert nicht |
| Is a directory | Befehl erwartet Datei, Ziel ist Verzeichnis |
| Not a directory | Pfadbestandteil ist keine Ordnerstruktur |
| Datei leer nach Umleitung | falscher Einsatz von > |
| rm löscht zu viel | Platzhalter oder falscher Pfad |
| grep findet nichts | Groß-/Kleinschreibung oder falsches Muster |
| find findet nichts | falscher Startpfad oder Suchkriterium |

---

**Permission denied**

Die Meldung:

    Permission denied

bedeutet:

    Zugriff verweigert

Mögliche Ursachen:

    fehlende Leserechte

    fehlende Schreibrechte

    fehlende Ausführrechte

    Datei gehört anderem Benutzer

    Verzeichnisrechte fehlen

    administrative Rechte nötig

Nicht immer ist sudo die beste Lösung.

Besser zuerst prüfen:

    ls -l datei

    ls -ld verzeichnis

Merksatz:

    Permission denied bedeutet Rechteproblem.

---

**No such file or directory**

Die Meldung:

    No such file or directory

bedeutet:

    Datei oder Verzeichnis wurde nicht gefunden.

Mögliche Ursachen:

    Tippfehler

    falscher Pfad

    falsche Groß-/Kleinschreibung

    Datei wurde gelöscht

    relativer Pfad falsch verstanden

Prüfen:

    pwd

    ls

    ls -la

Merksatz:

    Linux unterscheidet Groß- und Kleinschreibung.

---

**Vor Änderungen an Konfigurationsdateien**

Sicheres Vorgehen:

    1. Datei ansehen

    2. Backup erstellen

    3. Datei bearbeiten

    4. Syntax prüfen,
       falls möglich

    5. Dienst neu laden oder neu starten

    6. Status prüfen

    7. Logs prüfen

Beispiel:

    cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

    nano /etc/ssh/sshd_config

    systemctl restart ssh

    systemctl status ssh

Merksatz:

    Konfiguration nie blind ändern.

---

**Wichtige Befehle dieser Seite**

| Befehl | Zweck |
|---|---|
| ls | Dateien anzeigen |
| cat | Datei direkt ausgeben |
| less | Datei seitenweise lesen |
| head | Anfang anzeigen |
| tail | Ende anzeigen |
| tail -f | live mitlesen |
| touch | leere Datei erstellen |
| mkdir | Verzeichnis erstellen |
| cp | kopieren |
| mv | verschieben oder umbenennen |
| rm | löschen |
| rmdir | leeres Verzeichnis löschen |
| nano | Datei bearbeiten |
| grep | Text suchen |
| find | Dateien suchen |
| file | Dateityp erkennen |
| which | Programmpfad anzeigen |
| du | Speicherverbrauch anzeigen |
| wc | zählen |

---

**Typische Prüfungsfragen**

| Frage | Kurzantwort |
|---|---|
| Wofür ist ls? | Verzeichnisinhalt anzeigen |
| Wofür ist cat? | Dateiinhalt direkt anzeigen |
| Wofür ist less? | lange Dateien seitenweise anzeigen |
| Wofür ist tail -f? | Datei live mitlesen |
| Wofür ist touch? | leere Datei erstellen oder Zeitstempel ändern |
| Wofür ist cp? | kopieren |
| Wofür ist mv? | verschieben oder umbenennen |
| Wofür ist rm? | löschen |
| Wofür ist grep? | Text in Dateien suchen |
| Wofür ist find? | Dateien im Dateisystem suchen |
| Wofür ist nano? | Textdateien im Terminal bearbeiten |
| Was bedeutet Permission denied? | fehlende Rechte |
| Was bedeutet No such file or directory? | Datei oder Pfad existiert nicht |

---

**Typische Prüfungsfallen**

| Falle | Richtig denken |
|---|---|
| cat für riesige Logs nutzen | besser less oder tail verwenden |
| rm wie Papierkorb verstehen | rm löscht direkt |
| cp ohne -r bei Verzeichnissen | Verzeichnisse rekursiv kopieren |
| mv nur als Verschieben verstehen | mv benennt auch um |
| grep ohne -i bei unbekannter Schreibweise | -i ignoriert Groß-/Kleinschreibung |
| find im falschen Startpfad | Suchpfad bewusst wählen |
| sudo sofort verwenden | zuerst Rechte und Pfad prüfen |
| Konfigurationsdatei ohne Backup ändern | vorher Kopie erstellen |
| Platzhalter bei rm unterschätzen | vorher mit echo prüfen |
| relative Pfade falsch verstehen | pwd prüfen |

---

**IHK-sichere Kurzformulierung**

Unter Linux werden Dateien und Verzeichnisse häufig über die Shell verwaltet. Mit ls werden Verzeichnisinhalte angezeigt, mit cat, less, head und tail werden Dateiinhalte gelesen. tail -f eignet sich besonders zum Live-Mitlesen von Logdateien. Dateien werden mit touch erstellt, mit cp kopiert, mit mv verschoben oder umbenannt und mit rm gelöscht. grep sucht Textmuster in Dateien, während find Dateien und Verzeichnisse anhand von Kriterien wie Name, Typ, Größe oder Änderungszeit sucht. Vor Änderungen an wichtigen Konfigurationsdateien sollte eine Sicherungskopie erstellt werden. Fehlermeldungen wie Permission denied deuten auf Rechteprobleme hin, während No such file or directory auf einen falschen oder nicht vorhandenen Pfad hinweist.

---

**Merksätze**

    ls zeigt Dateien und Verzeichnisse.

    ls -l zeigt Details.

    ls -a zeigt versteckte Dateien.

    cat zeigt kleine Dateien direkt.

    less ist besser für lange Dateien.

    head zeigt den Anfang.

    tail zeigt das Ende.

    tail -f liest live mit.

    touch erstellt leere Dateien.

    mkdir erstellt Verzeichnisse.

    mkdir -p erstellt Zwischenordner mit.

    cp kopiert.

    cp -r kopiert Verzeichnisse.

    mv verschiebt und benennt um.

    rm löscht direkt.

    rmdir löscht leere Verzeichnisse.

    nano bearbeitet Textdateien.

    grep sucht Text.

    find sucht Dateien.

    file erkennt Dateitypen.

    which zeigt den Programmpfad.

    du zeigt Speicherverbrauch.

    wc -l zählt Zeilen.

    Permission denied bedeutet Rechteproblem.

    No such file or directory bedeutet:
    Datei oder Pfad existiert nicht.

    Vor Konfigurationsänderungen Backup erstellen.

    Erst anzeigen,
    dann löschen.

    Platzhalter bei rm sehr vorsichtig verwenden.

    Linux unterscheidet Groß- und Kleinschreibung.

# 4. Benutzer, Gruppen und Rechte



# 4.1 Benutzer, Gruppen und Rechte

Linux ist ein Mehrbenutzersystem.

Das bedeutet:

    Mehrere Benutzer können auf demselben System arbeiten,
    ohne automatisch Zugriff auf alle Dateien,
    Prozesse
    oder Systemfunktionen zu haben.

Dafür nutzt Linux:

    - Benutzer
    - Gruppen
    - Besitzer
    - Dateirechte
    - sudo
    - Root-Rechte
    - optional ACLs

Für Fachinformatiker Systemintegration ist dieses Thema besonders wichtig,
weil Rechteprobleme,
Sicherheitskonzepte,
Dienstkonten,
SSH-Zugriffe
und Datei-Freigaben sehr häufig mit Benutzer-
und Gruppenrechten zusammenhängen.

Merksatz:

    Linux-Sicherheit beginnt bei Benutzern,
    Gruppen
    und Rechten.

---

**Lernziele**

Nach dieser Seite solltest du erklären können:

    - was Benutzer unter Linux sind
    - was Gruppen sind
    - was UID und GID bedeuten
    - wie Linux Dateirechte aufteilt
    - was Besitzer,
      Gruppe
      und Andere bedeuten
    - was r,
      w
      und x bedeuten
    - wie chmod,
      chown
      und chgrp grundsätzlich funktionieren
    - was sudo macht
    - warum Root-Rechte gefährlich sein können
    - welche typischen Rechtefehler auftreten

---

**Grundidee**

Jede Datei und jedes Verzeichnis unter Linux hat Berechtigungen.

Diese Berechtigungen regeln:

    - wer lesen darf
    - wer schreiben darf
    - wer ausführen darf
    - wem die Datei gehört
    - welcher Gruppe die Datei zugeordnet ist

Linux unterscheidet dabei klassisch drei Bereiche:

| Bereich | Bedeutung |
|---|---|
| Benutzer / Besitzer | Eigentümer der Datei |
| Gruppe | zugeordnete Benutzergruppe |
| Andere | alle übrigen Benutzer |

Merksatz:

    Linux-Rechte gelten für Besitzer,
    Gruppe
    und Andere.

---

**Benutzer**

Ein Benutzer ist ein Konto auf dem Linux-System.

Benutzer können:

    - sich anmelden
    - Dateien besitzen
    - Prozesse starten
    - Gruppen zugeordnet sein
    - Rechte erhalten
    - Dienste ausführen

Beispiele:

    felix

    root

    www-data

    postgres

    backup

Wichtig:

    Nicht jeder Benutzer ist ein Mensch.
    Viele Dienste laufen unter eigenen Systembenutzern.

Merksatz:

    Benutzer können Menschen oder Dienstkonten sein.

---

**Root**

root ist der administrative Hauptbenutzer unter Linux.

root darf fast alles:

    - Systemdateien ändern
    - Benutzer anlegen
    - Rechte ändern
    - Dienste starten und stoppen
    - Software installieren
    - Dateien anderer Benutzer lesen oder löschen
    - Systemkonfiguration ändern

Das ist mächtig,
aber auch gefährlich.

Ein falscher Befehl mit Root-Rechten kann das System beschädigen.

Merksatz:

    Root-Rechte nur bewusst verwenden.

---

**Normale Benutzer**

Normale Benutzer haben eingeschränkte Rechte.

Sie dürfen typischerweise:

    - im eigenen Home-Verzeichnis arbeiten
    - eigene Dateien bearbeiten
    - eigene Prozesse starten
    - Programme ausführen

Sie dürfen normalerweise nicht:

    - Systemdateien ändern
    - Dienste systemweit verwalten
    - fremde Dateien beliebig lesen
    - Pakete installieren
    - Benutzer anlegen

Vorteil:

    Fehler oder Angriffe wirken sich weniger stark auf das gesamte System aus.

Merksatz:

    Normale Benutzer begrenzen Risiken.

---

**Systembenutzer und Dienstkonten**

Viele Dienste laufen unter eigenen Benutzern.

Beispiele:

| Benutzer | Typischer Zweck |
|---|---|
| www-data | Webserver-Prozesse |
| nginx | Webserver-Prozesse |
| postgres | PostgreSQL-Datenbank |
| mysql | MySQL/MariaDB-Datenbank |
| backup | Backup-Aufgaben |
| nobody | stark eingeschränkter Benutzer |

Warum?

    Dienste sollen nicht mit Root-Rechten laufen,
    wenn das nicht notwendig ist.

Vorteil:

    Wenn ein Dienst kompromittiert wird,
    ist der Schaden begrenzter.

Merksatz:

    Dienste sollten nur die Rechte haben,
    die sie benötigen.

---

**UID und GID**

Linux identifiziert Benutzer und Gruppen intern über Zahlen.

UID bedeutet:

    User ID

GID bedeutet:

    Group ID

Beispiele:

| Begriff | Bedeutung |
|---|---|
| UID | eindeutige Benutzerkennung |
| GID | eindeutige Gruppenkennung |
| UID 0 | root-Benutzer |
| normale UID | normaler Benutzer oder Systembenutzer |

Wichtig:

    Der Benutzername ist für Menschen lesbar.
    Intern arbeitet Linux stark mit UID und GID.

Merksatz:

    UID identifiziert Benutzer.
    GID identifiziert Gruppen.

---

**Benutzerinformationen anzeigen**

Aktuellen Benutzer anzeigen:

    whoami

Benutzer-ID und Gruppen anzeigen:

    id

Beispiel:

    id felix

Mögliche Ausgabe:

    uid=1000(felix) gid=1000(felix) groups=1000(felix),27(sudo)

Bedeutung:

    Benutzer felix hat UID 1000,
    Hauptgruppe felix
    und ist zusätzlich in der Gruppe sudo.

Merksatz:

    id zeigt Benutzer,
    UID,
    GID
    und Gruppen.

---

**Gruppen**

Gruppen fassen Benutzer zusammen.

Damit können Rechte einfacher vergeben werden.

Beispiel:

    Alle Benutzer der Gruppe developers
    dürfen auf ein Projektverzeichnis zugreifen.

Vorteile:

    Rechte müssen nicht einzeln pro Benutzer vergeben werden

    Verwaltung wird übersichtlicher

    Zugriff kann über Gruppenmitgliedschaft gesteuert werden

    Rollen lassen sich besser abbilden

Merksatz:

    Gruppen vereinfachen Rechteverwaltung.

---

**Hauptgruppe und Zusatzgruppen**

Ein Benutzer hat eine Hauptgruppe
und kann zusätzlich Mitglied weiterer Gruppen sein.

Beispiel:

    Benutzer:
    felix

    Hauptgruppe:
    felix

    Zusatzgruppen:
    sudo,
    docker,
    www-data

Die Hauptgruppe wird oft für neu erstellte Dateien verwendet.

Zusatzgruppen geben weitere Rechte.

Merksatz:

    Hauptgruppe ist Standardgruppe.
    Zusatzgruppen geben zusätzliche Rechte.

---

**Wichtige Dateien für Benutzer und Gruppen**

Linux speichert Benutzer-
und Gruppeninformationen in bestimmten Dateien.

| Datei | Bedeutung |
|---|---|
| /etc/passwd | Benutzerkonten |
| /etc/group | Gruppen |
| /etc/shadow | Passwort-Hashes und Passwortinformationen |
| /etc/sudoers | sudo-Regeln |
| /etc/sudoers.d/ | zusätzliche sudo-Regeln |

Wichtig:

    /etc/shadow ist besonders geschützt,
    weil dort Passwort-Hashes liegen.

Merksatz:

    Benutzer stehen in /etc/passwd,
    Gruppen in /etc/group.

---

**/etc/passwd**

Die Datei /etc/passwd enthält Benutzerinformationen.

Beispielzeile:

    felix:x:1000:1000:Felix Ulrich:/home/felix:/bin/bash

Bedeutung:

| Feld | Bedeutung |
|---|---|
| felix | Benutzername |
| x | Passwort liegt nicht direkt hier |
| 1000 | UID |
| 1000 | GID |
| Felix Ulrich | Kommentar oder Beschreibung |
| /home/felix | Home-Verzeichnis |
| /bin/bash | Login-Shell |

Merksatz:

    /etc/passwd enthält Benutzerstammdaten.

---

**/etc/group**

Die Datei /etc/group enthält Gruppeninformationen.

Beispielzeile:

    sudo:x:27:felix

Bedeutung:

| Feld | Bedeutung |
|---|---|
| sudo | Gruppenname |
| x | Passwortfeld, meist ungenutzt |
| 27 | GID |
| felix | Mitglieder der Gruppe |

Merksatz:

    /etc/group zeigt Gruppen und Mitglieder.

---

**Dateirechte anzeigen**

Dateirechte zeigt man mit:

    ls -l

Beispiel:

    -rw-r--r-- 1 felix users 1200 Jul 08 12:30 notiz.txt

Wichtiger Teil:

    -rw-r--r--

Aufteilung:

    -    rw-    r--    r--
    Typ  User   Gruppe Andere

Merksatz:

    ls -l zeigt Dateityp,
    Rechte,
    Besitzer
    und Gruppe.

---

**Rechtebereiche**

Linux-Rechte sind klassisch in drei Bereiche aufgeteilt:

| Bereich | Bedeutung |
|---|---|
| User / Owner | Besitzer der Datei |
| Group | zugeordnete Gruppe |
| Others | alle anderen Benutzer |

Beispiel:

    -rw-r--r--

Bedeutung:

| Bereich | Rechte |
|---|---|
| Besitzer | rw- |
| Gruppe | r-- |
| Andere | r-- |

Merksatz:

    Rechte werden in Dreiergruppen gelesen.

---

**r, w und x**

Die Buchstaben bedeuten:

| Zeichen | Name | Bei Dateien | Bei Verzeichnissen |
|---|---|---|---|
| r | read | Datei lesen | Inhalt auflisten |
| w | write | Datei ändern | Einträge erstellen/löschen/umbenennen |
| x | execute | Datei ausführen | Verzeichnis betreten |

Wichtig:

    x hat bei Dateien und Verzeichnissen unterschiedliche praktische Bedeutung.

Merksatz:

    r = lesen.
    w = schreiben.
    x = ausführen oder betreten.

---

**Rechte bei Dateien**

Bei Dateien bedeutet:

| Recht | Bedeutung |
|---|---|
| r | Inhalt lesen |
| w | Inhalt ändern |
| x | Datei ausführen |

Beispiel:

    -rwxr-xr--

Bedeutung:

    Besitzer darf lesen,
    schreiben
    und ausführen.

    Gruppe darf lesen
    und ausführen.

    Andere dürfen nur lesen.

Merksatz:

    x macht eine Datei ausführbar.

---

**Rechte bei Verzeichnissen**

Bei Verzeichnissen bedeutet:

| Recht | Bedeutung |
|---|---|
| r | Inhalt des Verzeichnisses anzeigen |
| w | Dateien im Verzeichnis erstellen, löschen oder umbenennen |
| x | Verzeichnis betreten und Pfade darin nutzen |

Wichtig:

    Ohne x kann man ein Verzeichnis nicht sinnvoll betreten,
    auch wenn r gesetzt ist.

Beispiel:

    drwxr-x---

Bedeutung:

    Besitzer darf alles.

    Gruppe darf betreten und auflisten.

    Andere haben keinen Zugriff.

Merksatz:

    Bei Verzeichnissen ist x besonders wichtig.

---

**Numerische Rechte**

Rechte können auch als Zahlen dargestellt werden.

| Recht | Wert |
|---|---:|
| r | 4 |
| w | 2 |
| x | 1 |

Kombinationen:

| Rechte | Zahl |
|---|---:|
| --- | 0 |
| --x | 1 |
| -w- | 2 |
| -wx | 3 |
| r-- | 4 |
| r-x | 5 |
| rw- | 6 |
| rwx | 7 |

Beispiele:

| Zahl | Bedeutung |
|---|---|
| 644 | Besitzer rw-, Gruppe r--, Andere r-- |
| 600 | Besitzer rw-, Gruppe ---, Andere --- |
| 755 | Besitzer rwx, Gruppe r-x, Andere r-x |
| 700 | Besitzer rwx, Gruppe ---, Andere --- |

Merksatz:

    r=4,
    w=2,
    x=1.

---

**chmod**

Mit chmod ändert man Dateirechte.

Beispiele:

    chmod 644 datei.txt

    chmod 600 geheim.txt

    chmod 755 script.sh

    chmod +x script.sh

Bedeutung:

| Befehl | Bedeutung |
|---|---|
| chmod 644 datei.txt | typische Rechte für normale Textdatei |
| chmod 600 geheim.txt | nur Besitzer darf lesen und schreiben |
| chmod 755 script.sh | Besitzer darf alles, andere lesen/ausführen |
| chmod +x script.sh | Ausführrecht hinzufügen |

Merksatz:

    chmod ändert Rechte.

---

**chown**

Mit chown ändert man den Besitzer einer Datei.

Beispiel:

    chown felix datei.txt

Besitzer und Gruppe ändern:

    chown felix:users datei.txt

Rekursiv für Verzeichnisse:

    chown -R felix:users projektordner

Wichtig:

    chown benötigt häufig administrative Rechte.

Merksatz:

    chown ändert Besitzer und optional Gruppe.

---

**chgrp**

Mit chgrp ändert man die Gruppe einer Datei.

Beispiel:

    chgrp developers projekt.txt

Rekursiv:

    chgrp -R developers projektordner

Merksatz:

    chgrp ändert die Gruppenzuordnung.

---

**sudo**

sudo erlaubt berechtigten Benutzern,
einzelne Befehle mit erhöhten Rechten auszuführen.

Beispiel:

    sudo systemctl restart ssh

Vorteile:

    keine dauerhafte Root-Sitzung nötig

    bessere Nachvollziehbarkeit

    gezielte administrative Rechte

    geringeres Risiko als dauerhaft als root zu arbeiten

Wichtig:

    sudo sollte nur berechtigten Benutzern gegeben werden.

Merksatz:

    sudo gibt gezielt erhöhte Rechte für einzelne Befehle.

---

**su**

su steht für:

    substitute user

Mit su kann man zu einem anderen Benutzer wechseln.

Beispiel:

    su -

Häufig wird damit zu root gewechselt,
wenn das Root-Konto aktiviert ist.

Unterschied zu sudo:

| Befehl | Bedeutung |
|---|---|
| sudo befehl | einzelnen Befehl mit erhöhten Rechten ausführen |
| su | Benutzer wechseln |
| su - | Login-Shell des Zielbenutzers starten |

Merksatz:

    sudo führt Befehl aus.
    su wechselt Benutzer.

---

**Dateien ausführbar machen**

Ein Skript muss ausführbar sein,
wenn man es direkt starten möchte.

Beispiel:

    chmod +x backup.sh

Starten:

    ./backup.sh

Wichtig:

    ./ bedeutet:
    Datei im aktuellen Verzeichnis ausführen.

Ohne Ausführrecht kommt häufig:

    Permission denied

Merksatz:

    Skript direkt starten braucht x-Recht.

---

**Typische Rechte für Dateien**

| Zweck | Rechte | Bedeutung |
|---|---|---|
| normale Textdatei | 644 | Besitzer schreibt, andere lesen |
| private Datei | 600 | nur Besitzer liest und schreibt |
| Skript oder Programm | 755 | Besitzer schreibt, alle dürfen ausführen |
| geheimes Skript | 700 | nur Besitzer darf alles |
| öffentlich lesbares Verzeichnis | 755 | andere können betreten und lesen |
| privates Verzeichnis | 700 | nur Besitzer Zugriff |

Merksatz:

    644 für normale Dateien.
    755 für ausführbare Programme oder Verzeichnisse.
    600 für private Dateien.

---

**Rechte und Sicherheit**

Zu breite Rechte sind ein Sicherheitsrisiko.

Beispiel kritisch:

    chmod 777 datei

777 bedeutet:

    Besitzer darf alles.

    Gruppe darf alles.

    Andere dürfen alles.

Risiko:

    Jeder Benutzer kann lesen,
    schreiben
    und ausführen.

Besser:

    Rechte gezielt setzen.

Merksatz:

    777 ist selten eine saubere Lösung.

---

**Permission denied**

Die Meldung:

    Permission denied

bedeutet:

    Zugriff verweigert.

Mögliche Ursachen:

    Datei nicht lesbar

    Datei nicht beschreibbar

    Datei nicht ausführbar

    Verzeichnis nicht betretbar

    falscher Besitzer

    falsche Gruppe

    sudo nötig

Prüfen:

    ls -l datei

    ls -ld verzeichnis

    id

Merksatz:

    Permission denied zuerst mit ls -l und id prüfen.

---

**Rechteproblem bei Verzeichnissen**

Ein Benutzer hat Leserecht auf eine Datei,
kann sie aber trotzdem nicht öffnen.

Mögliche Ursache:

    fehlendes x-Recht auf einem übergeordneten Verzeichnis.

Beispiel:

    /srv/projekt/datei.txt

Damit der Benutzer die Datei erreichen kann,
braucht er passende Rechte auf:

    /srv

    /srv/projekt

    /srv/projekt/datei.txt

Merksatz:

    Für Zugriff auf Dateien müssen auch Verzeichnisrechte passen.

---

**Gruppenbasierter Zugriff**

Beispiel:

    Mehrere Benutzer sollen auf /srv/projekt zugreifen.

Sinnvolles Vorgehen:

    Gruppe projekt anlegen

    Benutzer zur Gruppe hinzufügen

    Verzeichnis der Gruppe projekt zuordnen

    Gruppenrechte passend setzen

Beispielhafte Befehle:

    chgrp -R projekt /srv/projekt

    chmod -R 770 /srv/projekt

Bedeutung:

    Besitzer und Gruppe dürfen alles.
    Andere haben keinen Zugriff.

Merksatz:

    Gemeinsamer Zugriff wird sauber über Gruppen geregelt.

---

**Benutzer anlegen**

Typische Befehle je nach Distribution:

    useradd

    adduser

Beispiel:

    adduser felix

oder:

    useradd -m felix

Bedeutung:

    -m erstellt ein Home-Verzeichnis.

Wichtig:

    Die genaue Bedienung kann je nach Distribution unterschiedlich sein.

Merksatz:

    Benutzerverwaltung kann je nach Distribution leicht unterschiedlich sein.

---

**Passwort setzen**

Passwort für Benutzer setzen:

    passwd felix

Eigenes Passwort ändern:

    passwd

Wichtig:

    Starke Passwörter verwenden.

    Für administrative Zugänge zusätzlich MFA oder Schlüsselverfahren nutzen,
    wenn möglich.

Merksatz:

    passwd setzt oder ändert Passwörter.

---

**Benutzer zu Gruppe hinzufügen**

Beispiel:

    usermod -aG gruppe benutzer

Wichtig:

    -aG bedeutet:
    zur Zusatzgruppe hinzufügen,
    ohne bestehende Gruppen zu entfernen.

Beispiel:

    usermod -aG sudo felix

Nach Gruppenänderungen ist oft eine neue Anmeldung erforderlich.

Merksatz:

    usermod -aG fügt Benutzer zu Zusatzgruppe hinzu.

---

**Benutzer löschen**

Benutzer löschen:

    userdel benutzer

Benutzer inklusive Home-Verzeichnis löschen:

    userdel -r benutzer

Wichtig:

    Vor dem Löschen prüfen:

    Gibt es noch Dateien des Benutzers?

    Gibt es laufende Prozesse?

    Gibt es Dienste oder Cronjobs?

    Müssen Daten archiviert werden?

Merksatz:

    Benutzer nicht löschen,
    ohne Daten und Dienste zu prüfen.

---

**ACLs**

ACL steht für:

    Access Control List

ACLs erlauben feinere Rechte als klassische Linux-Rechte.

Beispiel:

    Eine bestimmte Benutzerin soll Zugriff erhalten,
    ohne Besitzer oder Gruppe zu ändern.

Typische Befehle:

    getfacl datei

    setfacl -m u:benutzer:r datei

Wichtig:

    ACLs sind nützlich,
    können Rechteverwaltung aber komplexer machen.

Merksatz:

    ACLs erweitern klassische Linux-Rechte.

---

**SetUID, SetGID und Sticky Bit**

Neben normalen Rechten gibt es Sonderrechte.

| Sonderrecht | Bedeutung |
|---|---|
| SetUID | Programm läuft mit Rechten des Dateibesitzers |
| SetGID | Programm oder Verzeichnis nutzt Gruppenlogik besonders |
| Sticky Bit | in Verzeichnissen dürfen Benutzer nur eigene Dateien löschen |

Typisches Beispiel für Sticky Bit:

    /tmp

Rechte häufig:

    drwxrwxrwt

Das t am Ende zeigt das Sticky Bit.

Merksatz:

    Sticky Bit schützt gemeinsame Verzeichnisse wie /tmp.

---

**Typische Fehlerbilder**

| Fehlerbild | Wahrscheinliche Ursache |
|---|---|
| Permission denied beim Lesen | fehlendes Leserecht |
| Permission denied beim Schreiben | fehlendes Schreibrecht |
| Skript startet nicht | fehlendes Ausführrecht |
| Datei trotz Rechten nicht erreichbar | Verzeichnisrecht fehlt |
| Benutzer sieht Datei nicht | fehlendes r auf Verzeichnis |
| Benutzer kann Datei nicht löschen | fehlendes w auf Verzeichnis |
| sudo nicht erlaubt | Benutzer nicht in sudoers |
| Gruppenrecht wirkt nicht | Benutzer neu anmelden oder falsche Gruppe |
| Dienst kann Datei nicht lesen | Dienstbenutzer hat keine Rechte |
| 777 wurde gesetzt | unsichere Notlösung |

---

**Sichere Arbeitsweise bei Rechteproblemen**

Nicht sofort:

    chmod 777

Besser prüfen:

    whoami

    id

    ls -l datei

    ls -ld verzeichnis

    groups benutzer

    getfacl datei

Dann gezielt entscheiden:

    Besitzer ändern?

    Gruppe ändern?

    Rechte ändern?

    Benutzer in Gruppe aufnehmen?

    sudo nötig?

Merksatz:

    Rechteprobleme gezielt lösen,
    nicht pauschal mit 777.

---

**Typische Prüfungsfragen**

| Frage | Kurzantwort |
|---|---|
| Was ist root? | administrativer Hauptbenutzer |
| Was bedeutet UID? | User ID |
| Was bedeutet GID? | Group ID |
| Was macht chmod? | ändert Rechte |
| Was macht chown? | ändert Besitzer |
| Was macht chgrp? | ändert Gruppe |
| Was macht sudo? | führt Befehl mit erhöhten Rechten aus |
| Was bedeutet r? | lesen |
| Was bedeutet w? | schreiben |
| Was bedeutet x bei Dateien? | ausführen |
| Was bedeutet x bei Verzeichnissen? | betreten |
| Was bedeutet 755? | rwx r-x r-x |
| Was bedeutet 644? | rw- r-- r-- |
| Was bedeutet 600? | nur Besitzer lesen/schreiben |
| Warum ist 777 kritisch? | jeder darf alles |

---

**Typische Prüfungsfallen**

| Falle | Richtig denken |
|---|---|
| x bei Verzeichnissen vergessen | x bedeutet Verzeichnis betreten |
| chmod 777 als Lösung | unsicher und meist falsch |
| nur Dateirechte prüfen | auch Verzeichnisrechte prüfen |
| sudo immer verwenden | erst Ursache prüfen |
| Besitzer und Gruppe verwechseln | beides getrennt betrachten |
| Gruppenänderung wirkt sofort erwarten | neue Anmeldung kann nötig sein |
| Dienst läuft als root | Sicherheitsrisiko, wenn nicht nötig |
| /etc/shadow frei lesbar erwarten | besonders geschützt |
| ACLs übersehen | zusätzliche Rechte können existieren |
| Root und normales Konto gleich behandeln | Root hat besondere Rechte |

---

**IHK-sichere Kurzformulierung**

Linux ist ein Mehrbenutzersystem und steuert Zugriffe über Benutzer, Gruppen und Rechte. Jede Datei und jedes Verzeichnis hat einen Besitzer, eine zugeordnete Gruppe und Rechte für Besitzer, Gruppe und Andere. Die klassischen Rechte sind r für Lesen, w für Schreiben und x für Ausführen beziehungsweise bei Verzeichnissen für Betreten. Mit chmod werden Rechte geändert, mit chown der Besitzer und mit chgrp die Gruppe. sudo erlaubt berechtigten Benutzern, einzelne Befehle mit erhöhten Rechten auszuführen. Rechteprobleme sollten mit whoami, id, ls -l und ls -ld geprüft werden. Pauschale Rechte wie 777 sind unsicher und sollten vermieden werden.

---

**Merksätze**

    Linux ist ein Mehrbenutzersystem.

    Benutzer können Menschen oder Dienste sein.

    Root ist der administrative Hauptbenutzer.

    UID identifiziert Benutzer.

    GID identifiziert Gruppen.

    Gruppen vereinfachen Rechteverwaltung.

    Jede Datei hat Besitzer,
    Gruppe
    und Rechte.

    Rechte gelten für Besitzer,
    Gruppe
    und Andere.

    r bedeutet lesen.

    w bedeutet schreiben.

    x bedeutet bei Dateien ausführen.

    x bedeutet bei Verzeichnissen betreten.

    chmod ändert Rechte.

    chown ändert Besitzer.

    chgrp ändert Gruppe.

    sudo gibt gezielt erhöhte Rechte.

    su wechselt Benutzer.

    644 ist typisch für normale Dateien.

    600 ist typisch für private Dateien.

    755 ist typisch für Programme oder Verzeichnisse.

    700 ist typisch für private Verzeichnisse oder Skripte.

    777 ist selten eine gute Lösung.

    Permission denied bedeutet Rechteproblem.

    Bei Dateien auch Verzeichnisrechte prüfen.

    Dienstkonten sollten nur notwendige Rechte haben.

    Gruppenänderungen können neue Anmeldung erfordern.

    ACLs erweitern klassische Rechte.

    Sticky Bit schützt gemeinsame Verzeichnisse wie /tmp.

# 5. Prozesse, Dienste und systemd



# 5.1 Prozesse, Dienste und systemd

Linux führt Programme als Prozesse aus.

Ein Prozess ist ein laufendes Programm.
Ein Dienst ist ein Programm,
das meist im Hintergrund läuft
und eine bestimmte Aufgabe für das System oder Netzwerk bereitstellt.

Für Fachinformatiker Systemintegration ist dieses Thema wichtig,
weil Serverdienste wie SSH,
Webserver,
Datenbanken,
DNS,
DHCP,
Backupdienste
oder Monitoring-Agenten auf Linux-Systemen als Prozesse und Dienste laufen.

Merksatz:

    Prozess = laufendes Programm.
    Dienst = Hintergrundprogramm mit Aufgabe.

---

**Lernziele**

Nach dieser Seite solltest du erklären können:

    - was ein Prozess ist
    - was eine PID ist
    - was ein Dienst ist
    - was ein Daemon ist
    - wie man Prozesse anzeigt
    - wie man Prozesse beendet
    - wie man Systemressourcen prüft
    - wie Dienste mit systemd verwaltet werden
    - was systemctl macht
    - was enable und disable bedeuten
    - wie man typische Dienstfehler eingrenzt

---

**Grundidee**

Wenn unter Linux ein Programm gestartet wird,
entsteht daraus ein Prozess.

Beispiele:

    - Shell
    - Texteditor
    - Webserver
    - Datenbankserver
    - Backupskript
    - SSH-Server
    - Cronjob
    - Monitoring-Agent

Jeder Prozess verbraucht Ressourcen,
zum Beispiel:

    - CPU
    - Arbeitsspeicher
    - Dateizugriffe
    - Netzwerkverbindungen
    - Prozess-IDs
    - offene Dateien

Merksatz:

    Alles,
    was läuft,
    ist als Prozess im System sichtbar.

---

**Prozess**

Ein Prozess ist eine laufende Instanz eines Programms.

Beispiel:

    Das Programm nginx ist installiert.

    Wenn nginx gestartet wird,
    laufen ein oder mehrere nginx-Prozesse.

Ein Programm kann mehrfach als Prozess laufen.

Beispiele:

    mehrere Shells

    mehrere Webserver-Worker

    mehrere Datenbankprozesse

    mehrere SSH-Sitzungen

Merksatz:

    Programm = Datei auf dem System.
    Prozess = laufendes Programm.

---

**PID**

PID steht für:

    Process ID

Die PID ist eine eindeutige Nummer eines laufenden Prozesses.

Beispiel:

    PID 1234

Mit der PID kann ein Prozess gezielt angesprochen werden,
zum Beispiel zum Beenden oder Prüfen.

Merksatz:

    PID = eindeutige Nummer eines Prozesses.

---

**PPID**

PPID steht für:

    Parent Process ID

Das ist die Prozess-ID des Elternprozesses.

Viele Prozesse werden von anderen Prozessen gestartet.

Beispiel:

    Eine Shell startet ein Skript.

    Die Shell ist der Elternprozess.

    Das Skript ist der Kindprozess.

Merksatz:

    Prozesse können Eltern-
    und Kindprozesse haben.

---

**Prozesse anzeigen mit ps**

Der Befehl ps zeigt Prozesse an.

Beispiele:

    ps

    ps aux

    ps -ef

Bedeutung:

| Befehl | Bedeutung |
|---|---|
| ps | Prozesse der aktuellen Shell anzeigen |
| ps aux | viele Prozesse systemweit anzeigen |
| ps -ef | Prozesse in anderem verbreiteten Format anzeigen |

Typische Spalten:

| Spalte | Bedeutung |
|---|---|
| USER | Benutzer, unter dem der Prozess läuft |
| PID | Prozess-ID |
| %CPU | CPU-Nutzung |
| %MEM | Speicheranteil |
| COMMAND | gestarteter Befehl |
| PPID | Elternprozess-ID |

Merksatz:

    ps zeigt laufende Prozesse.

---

**Prozesse suchen**

Prozesse kann man mit ps und grep suchen.

Beispiel:

    ps aux | grep nginx

Bedeutung:

    ps aux zeigt Prozesse.

    grep nginx filtert nach nginx.

Alternative Befehle:

    pgrep nginx

    pidof nginx

Bedeutung:

| Befehl | Bedeutung |
|---|---|
| pgrep nginx | sucht Prozess-IDs nach Namen |
| pidof nginx | zeigt PID eines laufenden Programms |

Merksatz:

    ps zeigt,
    grep filtert.

---

**Prozesse live überwachen mit top**

top zeigt laufende Prozesse und Systemauslastung live an.

Starten:

    top

Typische Informationen:

    CPU-Auslastung

    RAM-Nutzung

    laufende Prozesse

    Load Average

    Prozessliste

    Benutzer

    Prozess-IDs

Beenden:

    q

Merksatz:

    top zeigt Systemlast live.

---

**htop**

htop ist eine komfortablere Alternative zu top.

Starten:

    htop

Vorteile:

    übersichtlicher

    farbliche Anzeige

    einfachere Prozessauswahl

    leichteres Beenden von Prozessen

Wichtig:

    htop ist nicht immer standardmäßig installiert.

Merksatz:

    htop ist ein komfortabler Prozessmonitor,
    falls installiert.

---

**CPU,
RAM
und Load Average**

Bei Prozessproblemen sind drei Werte besonders wichtig:

| Wert | Bedeutung |
|---|---|
| CPU | Rechenleistung |
| RAM | Arbeitsspeicher |
| Load Average | durchschnittliche Systemlast |

Hohe CPU-Auslastung kann bedeuten:

    Prozess rechnet stark

    Endlosschleife

    hohe Nutzerlast

    Angriff oder Fehlkonfiguration

Hohe RAM-Nutzung kann bedeuten:

    Dienst benötigt viel Speicher

    Speicherleck

    zu viele Prozesse

    falsche Konfiguration

Merksatz:

    Langsame Systeme immer mit Messwerten prüfen.

---

**Load Average einfach erklärt**

Load Average zeigt,
wie viele Prozesse im Durchschnitt auf CPU oder I/O warten.

Typische Anzeige:

    load average: 0.50, 1.20, 2.10

Die drei Werte stehen für:

    letzte 1 Minute

    letzte 5 Minuten

    letzte 15 Minuten

Ein hoher Wert kann auf Überlastung hindeuten.

Wichtig:

    Bewertung hängt von der Anzahl der CPU-Kerne ab.

Merksatz:

    Load Average zeigt durchschnittliche Systemlast.

---

**Prozesse beenden mit kill**

Mit kill sendet man ein Signal an einen Prozess.

Beispiel:

    kill 1234

Das sendet standardmäßig ein TERM-Signal.

TERM bedeutet:

    Prozess soll sauber beendet werden.

Wenn das nicht funktioniert:

    kill -9 1234

Das sendet ein KILL-Signal.

Wichtig:

    kill -9 beendet hart
    und sollte nur verwendet werden,
    wenn normales Beenden nicht funktioniert.

Merksatz:

    Erst normal beenden,
    dann nur notfalls kill -9.

---

**Wichtige Signale**

| Signal | Nummer | Bedeutung |
|---|---:|---|
| TERM | 15 | sauber beenden |
| KILL | 9 | sofort hart beenden |
| HUP | 1 | häufig Konfiguration neu laden |
| INT | 2 | Unterbrechung, ähnlich Strg+C |

Beispiele:

    kill -15 1234

    kill -9 1234

    kill -HUP 1234

Merksatz:

    TERM bittet um Beenden.
    KILL erzwingt Beenden.

---

**Prozess mit Namen beenden**

Mit pkill kann man Prozesse anhand des Namens beenden.

Beispiel:

    pkill nginx

Wichtig:

    Vorsichtig verwenden,
    weil mehrere Prozesse betroffen sein können.

Besser vorher prüfen:

    pgrep -a nginx

Merksatz:

    pkill beendet nach Namen,
    deshalb vorher genau prüfen.

---

**Prozesse im Vordergrund und Hintergrund**

Ein Prozess kann im Vordergrund oder Hintergrund laufen.

Vordergrund:

    blockiert die aktuelle Shell,
    bis er beendet ist.

Hintergrund:

    läuft weiter,
    während man die Shell weiter nutzen kann.

Befehl im Hintergrund starten:

    befehl &

Beispiel:

    sleep 60 &

Jobs anzeigen:

    jobs

Merksatz:

    & startet einen Befehl im Hintergrund.

---

**Strg+C und Strg+Z**

Wichtige Tastenkombinationen:

| Tastenkombination | Bedeutung |
|---|---|
| Strg+C | laufenden Vordergrundprozess abbrechen |
| Strg+Z | Prozess anhalten |
| fg | angehaltenen Job in Vordergrund holen |
| bg | angehaltenen Job im Hintergrund fortsetzen |

Merksatz:

    Strg+C beendet meist.
    Strg+Z hält an.

---

**Daemon**

Ein Daemon ist ein Hintergrundprozess,
der dauerhaft oder bei Bedarf eine Systemaufgabe erfüllt.

Typische Daemons:

    sshd

    cron

    nginx

    mysqld

    systemd

    rsyslogd

Viele Daemon-Namen enden auf:

    d

Beispiele:

    sshd = SSH-Daemon

    cron oder crond = Cron-Daemon

Merksatz:

    Daemon = Hintergrunddienst.

---

**Dienst**

Ein Dienst ist eine Systemfunktion,
die meist im Hintergrund bereitgestellt wird.

Beispiele:

| Dienst | Zweck |
|---|---|
| ssh | Fernadministration |
| nginx | Webserver |
| apache2 | Webserver |
| mariadb | Datenbank |
| postgresql | Datenbank |
| cron | zeitgesteuerte Aufgaben |
| systemd-journald | Logging |
| docker | Containerdienst |

Merksatz:

    Dienste stellen Funktionen bereit.

---

**systemd**

systemd ist auf vielen modernen Linux-Distributionen das zentrale Init-
und Dienstverwaltungssystem.

systemd ist zuständig für:

    - Systemstart
    - Dienste
    - Abhängigkeiten
    - Units
    - Logging-Anbindung
    - Timer
    - Mounts
    - Targets
    - Systemzustände

Wichtig:

    Nicht jede Linux-Distribution nutzt systemd.
    Viele Serverdistributionen tun es aber.

Merksatz:

    systemd verwaltet auf vielen Linux-Systemen Dienste und Systemstart.

---

**Unit**

Eine Unit ist eine Verwaltungseinheit von systemd.

Typische Unit-Arten:

| Unit-Art | Bedeutung |
|---|---|
| .service | Dienst |
| .socket | Socket-Aktivierung |
| .timer | zeitgesteuerte Aufgabe |
| .mount | Mountpoint |
| .target | Zielzustand des Systems |

Beispiel:

    ssh.service

    nginx.service

    docker.service

Merksatz:

    .service steht für einen Dienst.

---

**systemctl**

systemctl ist das wichtigste Werkzeug zur Verwaltung von systemd.

Typische Befehle:

    systemctl status ssh

    systemctl start ssh

    systemctl stop ssh

    systemctl restart ssh

    systemctl reload ssh

    systemctl enable ssh

    systemctl disable ssh

Merksatz:

    systemctl verwaltet systemd-Units.

---

**Dienststatus prüfen**

Status eines Dienstes prüfen:

    systemctl status ssh

Typische Informationen:

    Dienstname

    aktiv oder inaktiv

    Fehlerstatus

    PID

    Startzeit

    letzte Logzeilen

    Pfad zur Unit-Datei

Wichtige Zustände:

| Zustand | Bedeutung |
|---|---|
| active | Dienst läuft |
| inactive | Dienst läuft nicht |
| failed | Dienst ist fehlgeschlagen |
| enabled | startet automatisch beim Boot |
| disabled | startet nicht automatisch beim Boot |

Merksatz:

    systemctl status ist die erste Prüfung bei Dienstproblemen.

---

**Dienst starten**

Dienst starten:

    systemctl start ssh

Bedeutung:

    Der Dienst wird jetzt gestartet.

Wichtig:

    start bedeutet nicht automatisch,
    dass der Dienst beim nächsten Neustart wieder startet.

Merksatz:

    start startet jetzt.

---

**Dienst stoppen**

Dienst stoppen:

    systemctl stop ssh

Bedeutung:

    Der Dienst wird jetzt gestoppt.

Wichtig:

    stop deaktiviert nicht automatisch den Autostart.

Merksatz:

    stop stoppt jetzt.

---

**Dienst neu starten**

Dienst neu starten:

    systemctl restart ssh

Bedeutung:

    Der Dienst wird gestoppt und neu gestartet.

Typische Nutzung:

    nach Konfigurationsänderungen

    nach Fehlern

    nach Updates

Wichtig:

    Bei SSH vorsichtig sein,
    besonders wenn man gerade per SSH verbunden ist.

Merksatz:

    restart startet Dienst komplett neu.

---

**Dienst neu laden**

Dienst neu laden:

    systemctl reload nginx

Bedeutung:

    Der Dienst lädt seine Konfiguration neu,
    ohne vollständig beendet zu werden.

Nicht jeder Dienst unterstützt reload.

Unterschied:

| Befehl | Bedeutung |
|---|---|
| restart | Dienst komplett neu starten |
| reload | Konfiguration neu laden, falls unterstützt |

Merksatz:

    reload ist oft schonender als restart,
    wenn der Dienst es unterstützt.

---

**Autostart aktivieren**

Dienst beim Systemstart automatisch starten:

    systemctl enable ssh

Wichtig:

    enable startet den Dienst nicht unbedingt sofort.

Dafür braucht man:

    systemctl start ssh

Oder kombiniert:

    systemctl enable --now ssh

Merksatz:

    enable aktiviert Autostart.

---

**Autostart deaktivieren**

Autostart deaktivieren:

    systemctl disable ssh

Wichtig:

    disable stoppt den aktuell laufenden Dienst nicht unbedingt sofort.

Dafür braucht man:

    systemctl stop ssh

Merksatz:

    disable entfernt Autostart.

---

**enable,
disable,
start
und stop unterscheiden**

| Befehl | Wirkung |
|---|---|
| start | startet Dienst jetzt |
| stop | stoppt Dienst jetzt |
| enable | startet Dienst künftig automatisch beim Boot |
| disable | startet Dienst künftig nicht automatisch beim Boot |
| restart | stoppt und startet Dienst jetzt neu |
| reload | lädt Konfiguration neu, falls unterstützt |

Merksatz:

    start und stop gelten jetzt.
    enable und disable gelten für den Systemstart.

---

**Dienst prüfen nach Änderung**

Nach Änderung an einem Dienst:

    systemctl restart dienstname

    systemctl status dienstname

    journalctl -u dienstname

Typisches Vorgehen:

    1. Konfiguration ändern

    2. Syntax prüfen,
       falls möglich

    3. Dienst neu laden oder neu starten

    4. Status prüfen

    5. Logs prüfen

Merksatz:

    Nach Dienständerung immer Status und Logs prüfen.

---

**journalctl für Dienste**

Logs eines Dienstes anzeigen:

    journalctl -u ssh

Live mitlesen:

    journalctl -u ssh -f

Seit letztem Boot:

    journalctl -u ssh -b

Nur letzte Einträge:

    journalctl -u ssh -n 50

Merksatz:

    journalctl -u zeigt Logs einer Unit.

---

**Dienst läuft,
aber Port ist nicht erreichbar**

Mögliche Ursachen:

    Dienst lauscht nicht auf erwarteter Adresse

    Dienst lauscht auf anderem Port

    lokale Firewall blockiert

    Netzwerkfirewall blockiert

    Dienst ist nur lokal gebunden

    falsche Konfiguration

    IPv4/IPv6-Verwechslung

Prüfen:

    systemctl status dienst

    ss -tulpen

    journalctl -u dienst

    Firewall-Regeln

Merksatz:

    Dienst läuft heißt nicht automatisch:
    Port ist erreichbar.

---

**Offene Ports anzeigen**

Mit ss kann man offene Ports und Verbindungen anzeigen.

Beispiele:

    ss -tulpen

    ss -tulpn

Bedeutung der Optionen:

| Option | Bedeutung |
|---|---|
| -t | TCP |
| -u | UDP |
| -l | listening |
| -p | Prozess anzeigen |
| -e | erweiterte Informationen |
| -n | numerische Anzeige |

Merksatz:

    ss zeigt,
    welche Dienste auf welchen Ports lauschen.

---

**Dienst lauscht nur auf localhost**

Wenn ein Dienst nur auf 127.0.0.1 lauscht,
ist er nur lokal erreichbar.

Beispiel:

    127.0.0.1:8080

Bedeutung:

    Nur Programme auf demselben System können direkt darauf zugreifen.

Wenn ein Dienst auf allen IPv4-Schnittstellen lauscht:

    0.0.0.0:8080

Bedeutung:

    Dienst lauscht auf allen IPv4-Interfaces.

Merksatz:

    127.0.0.1 = nur lokal.
    0.0.0.0 = alle IPv4-Interfaces.

---

**Dienst startet nicht**

Wenn ein Dienst nicht startet,
sollte man prüfen:

    systemctl status dienst

    journalctl -u dienst

    Konfigurationsdatei

    Syntaxprüfung

    Ports bereits belegt?

    Rechte auf Dateien

    Abhängigkeiten

    Speicherplatz

    Benutzer des Dienstes

    Pfade

    Zertifikate

Merksatz:

    Dienstfehler immer mit Status und Logs eingrenzen.

---

**Port bereits belegt**

Ein Dienst kann nicht starten,
wenn ein anderer Prozess denselben Port bereits nutzt.

Beispiel:

    nginx soll TCP 80 nutzen,
    aber Apache läuft bereits auf TCP 80.

Prüfen:

    ss -tulpen

Lösung:

    einen Dienst stoppen

    Port ändern

    Konfiguration anpassen

Merksatz:

    Ein Port kann pro IP und Protokoll nur passend gebunden werden.

---

**Dienst hat Rechteproblem**

Ein Dienst läuft oft unter einem eigenen Benutzer.

Beispiel:

    www-data

    nginx

    postgres

Wenn dieser Benutzer keine Rechte auf Dateien oder Verzeichnisse hat,
kann der Dienst fehlschlagen.

Prüfen:

    systemctl status dienst

    journalctl -u dienst

    ls -l datei

    ls -ld verzeichnis

Merksatz:

    Dienstprobleme können Rechteprobleme sein.

---

**Dienst hat Konfigurationsfehler**

Viele Dienste starten nicht,
wenn die Konfiguration fehlerhaft ist.

Beispiele:

    falsche Syntax

    falscher Pfad

    falscher Port

    Zertifikat fehlt

    Benutzer existiert nicht

    ungültige Option

Viele Dienste bieten Syntaxprüfungen.

Beispiele:

    nginx -t

    apachectl configtest

Wichtig:

    Vor restart möglichst Syntax prüfen,
    wenn der Dienst das unterstützt.

Merksatz:

    Konfiguration prüfen,
    bevor man produktive Dienste neu startet.

---

**Abhängigkeiten**

Dienste können voneinander abhängig sein.

Beispiele:

    Webanwendung braucht Datenbank.

    Backupdienst braucht Netzwerkshare.

    Monitoring braucht Netzwerk.

    Containerdienst braucht Storage.

Wenn eine Abhängigkeit fehlt,
startet der Dienst eventuell nicht korrekt
oder funktioniert nur teilweise.

Merksatz:

    Dienste funktionieren oft nur mit ihren Abhängigkeiten.

---

**Dienste beim Boot**

Beim Systemstart werden Dienste automatisch gestartet,
wenn sie aktiviert sind.

Prüfen,
ob ein Dienst aktiviert ist:

    systemctl is-enabled ssh

Prüfen,
ob ein Dienst läuft:

    systemctl is-active ssh

Merksatz:

    enabled heißt Autostart.
    active heißt läuft gerade.

---

**Targets**

Targets sind systemd-Zielzustände.

Beispiele:

| Target | Bedeutung |
|---|---|
| multi-user.target | Mehrbenutzerbetrieb ohne grafische Oberfläche |
| graphical.target | Mehrbenutzerbetrieb mit grafischer Oberfläche |
| rescue.target | Rettungsmodus |
| emergency.target | Minimaler Notfallmodus |

Merksatz:

    Targets beschreiben Systemzustände.

---

**Cron und systemd Timer**

Zeitgesteuerte Aufgaben können unter Linux über cron oder systemd Timer laufen.

cron:

    klassischer Zeitplaner

systemd Timer:

    systemd-eigene zeitgesteuerte Units

Beispiele für Aufgaben:

    Backup starten

    Logs aufräumen

    Updates prüfen

    Skript regelmäßig ausführen

Merksatz:

    Wiederkehrende Aufgaben laufen oft über cron oder systemd Timer.

---

**Typische Prozessbefehle**

| Befehl | Zweck |
|---|---|
| ps | Prozesse anzeigen |
| ps aux | viele Prozesse anzeigen |
| pgrep | Prozesse nach Namen suchen |
| pidof | PID eines Programms anzeigen |
| top | Prozesse live überwachen |
| htop | komfortabler Prozessmonitor |
| kill | Signal an Prozess senden |
| pkill | Prozess nach Namen beenden |
| jobs | Hintergrundjobs anzeigen |
| fg | Job in Vordergrund holen |
| bg | Job im Hintergrund fortsetzen |

---

**Typische Dienstbefehle**

| Befehl | Zweck |
|---|---|
| systemctl status dienst | Dienststatus prüfen |
| systemctl start dienst | Dienst jetzt starten |
| systemctl stop dienst | Dienst jetzt stoppen |
| systemctl restart dienst | Dienst neu starten |
| systemctl reload dienst | Konfiguration neu laden |
| systemctl enable dienst | Autostart aktivieren |
| systemctl disable dienst | Autostart deaktivieren |
| systemctl enable --now dienst | Autostart aktivieren und sofort starten |
| systemctl is-active dienst | prüfen, ob Dienst läuft |
| systemctl is-enabled dienst | prüfen, ob Autostart aktiv ist |
| journalctl -u dienst | Dienstlogs anzeigen |

---

**Typische Fehlerbilder**

| Fehlerbild | Wahrscheinliche Ursache |
|---|---|
| Dienst ist inactive | Dienst läuft nicht |
| Dienst ist failed | Startfehler oder Absturz |
| Dienst startet nicht | Konfiguration, Rechte, Port, Abhängigkeit |
| Dienst läuft, aber nicht erreichbar | Firewall, Port, Bind-Adresse, Netzwerk |
| Port bereits belegt | anderer Prozess nutzt denselben Port |
| Dienst nach Boot nicht gestartet | Autostart nicht enabled |
| Dienst kann Datei nicht lesen | Rechteproblem |
| Dienst findet Datei nicht | falscher Pfad |
| Dienst bricht nach Änderung ab | Konfigurationsfehler |
| System langsam | CPU, RAM, I/O oder Prozesslast prüfen |

---

**Sichere Arbeitsweise bei Dienständerungen**

Vor Änderung:

    aktuelle Konfiguration sichern

    Dokumentation prüfen

    Wartungsfenster beachten

    aktive Verbindung berücksichtigen

Während Änderung:

    Syntax prüfen,
    falls möglich

    Dienst reload statt restart nutzen,
    wenn ausreichend

Nach Änderung:

    systemctl status prüfen

    journalctl -u prüfen

    Funktion testen

    Rollback bereithalten

Merksatz:

    Dienständerungen immer prüfbar und rückgängig planbar machen.

---

**Typische Prüfungsfragen**

| Frage | Kurzantwort |
|---|---|
| Was ist ein Prozess? | laufendes Programm |
| Was ist eine PID? | eindeutige Prozess-ID |
| Was ist ein Dienst? | Hintergrundprogramm mit Aufgabe |
| Was ist ein Daemon? | Hintergrundprozess |
| Was macht ps? | Prozesse anzeigen |
| Was macht top? | Prozesse live überwachen |
| Was macht kill? | Signal an Prozess senden |
| Was macht systemctl? | systemd-Units verwalten |
| Was bedeutet active? | Dienst läuft |
| Was bedeutet inactive? | Dienst läuft nicht |
| Was bedeutet failed? | Dienst ist fehlgeschlagen |
| Was bedeutet enabled? | Autostart aktiv |
| Was bedeutet disabled? | Autostart nicht aktiv |
| Was macht journalctl -u? | Logs einer Unit anzeigen |

---

**Typische Prüfungsfallen**

| Falle | Richtig denken |
|---|---|
| Programm und Prozess gleichsetzen | Programm ist Datei, Prozess läuft |
| kill immer als hartes Beenden verstehen | kill sendet Signale, Standard ist TERM |
| kill -9 sofort verwenden | erst sauber beenden |
| Dienst läuft = erreichbar | Firewall, Port und Bind-Adresse prüfen |
| enable mit start verwechseln | enable ist Autostart, start ist jetzt |
| disable mit stop verwechseln | disable entfernt Autostart, stop stoppt jetzt |
| Logs nicht prüfen | journalctl -u ist zentral |
| reload und restart gleichsetzen | reload lädt Konfiguration, restart startet neu |
| SSH unvorsichtig neu starten | Remote-Zugriff kann abbrechen |
| Portproblem nur am Dienst suchen | auch Firewall und Bind-Adresse prüfen |

---

**IHK-sichere Kurzformulierung**

Ein Prozess ist eine laufende Instanz eines Programms und besitzt eine eindeutige Prozess-ID, die PID. Dienste sind Hintergrundprogramme, die System- oder Netzwerkfunktionen bereitstellen, zum Beispiel SSH, Webserver oder Datenbanken. Auf vielen Linux-Systemen werden Dienste mit systemd verwaltet. Das Werkzeug systemctl dient zum Starten, Stoppen, Neustarten, Aktivieren und Prüfen von Diensten. active bedeutet, dass ein Dienst läuft, enabled bedeutet, dass er beim Systemstart automatisch gestartet wird. Bei Dienstproblemen sollten systemctl status, journalctl -u, offene Ports, Rechte, Konfiguration und Abhängigkeiten geprüft werden. Ein laufender Dienst ist nicht automatisch von außen erreichbar, weil Firewall-Regeln, Bind-Adresse und Netzwerkpfade ebenfalls passen müssen.

---

**Merksätze**

    Prozess = laufendes Programm.

    Programm = Datei auf dem System.

    PID = Prozess-ID.

    PPID = Elternprozess-ID.

    Dienst = Hintergrundprogramm mit Aufgabe.

    Daemon = Hintergrunddienst.

    ps zeigt Prozesse.

    top zeigt Prozesse live.

    htop ist komfortabler,
    falls installiert.

    kill sendet Signale.

    TERM beendet sauber.

    KILL beendet hart.

    kill -9 nur im Notfall.

    systemd verwaltet Dienste und Systemstart.

    systemctl verwaltet systemd-Units.

    .service steht für Dienst.

    status prüft Dienstzustand.

    start startet jetzt.

    stop stoppt jetzt.

    restart startet neu.

    reload lädt Konfiguration neu.

    enable aktiviert Autostart.

    disable deaktiviert Autostart.

    active heißt:
    läuft gerade.

    enabled heißt:
    startet beim Boot.

    Dienst läuft heißt nicht automatisch:
    Port erreichbar.

    127.0.0.1 heißt:
    nur lokal.

    0.0.0.0 heißt:
    alle IPv4-Interfaces.

    journalctl -u zeigt Dienstlogs.

    Dienstfehler mit Status,
    Logs,
    Ports,
    Rechten,
    Konfiguration
    und Abhängigkeiten prüfen.

# 6. Paketverwaltung und Updates



# 6.1 Paketverwaltung und Updates

Unter Linux wird Software meistens nicht einzeln von Webseiten heruntergeladen,
sondern über eine Paketverwaltung installiert,
aktualisiert
und entfernt.

Die Paketverwaltung sorgt dafür,
dass Programme,
Bibliotheken,
Abhängigkeiten
und Updates kontrolliert verwaltet werden.

Für Fachinformatiker Systemintegration ist das wichtig,
weil Server sicher,
aktuell
und nachvollziehbar administriert werden müssen.

Merksatz:

    Paketverwaltung installiert,
    aktualisiert
    entfernt
    und verwaltet Software kontrolliert.

---

**Lernziele**

Nach dieser Seite solltest du erklären können:

    - was ein Paket ist
    - was ein Paketmanager ist
    - was ein Repository ist
    - was Abhängigkeiten sind
    - wie Updates grundsätzlich funktionieren
    - warum Sicherheitsupdates wichtig sind
    - was apt,
      dnf,
      zypper,
      pacman
      und apk sind
    - wie man Software installiert,
      entfernt
      und aktualisiert
    - welche typischen Fehler bei Paketverwaltung auftreten

---

**Grundidee**

Ein Linux-System besteht aus vielen Softwarepaketen.

Ein Paket enthält zum Beispiel:

    - Programmdateien
    - Bibliotheken
    - Konfigurationsvorlagen
    - Dokumentation
    - Metadaten
    - Installationsskripte
    - Abhängigkeitsinformationen

Die Paketverwaltung weiß,
welche Pakete installiert sind,
welche Versionen verfügbar sind
und welche Pakete voneinander abhängen.

Merksatz:

    Ein Paket ist eine verwaltete Softwareeinheit.

---

**Paketmanager**

Ein Paketmanager ist das Werkzeug,
mit dem Software verwaltet wird.

Er kann:

    - Pakete installieren
    - Pakete entfernen
    - Pakete aktualisieren
    - Paketinformationen anzeigen
    - Abhängigkeiten auflösen
    - Paketquellen nutzen
    - Versionsstände prüfen
    - Sicherheitsupdates einspielen

Beispiele:

| Distribution | Paketmanager |
|---|---|
| Debian | apt |
| Ubuntu | apt |
| Fedora | dnf |
| Rocky Linux | dnf |
| openSUSE | zypper |
| Arch Linux | pacman |
| Alpine Linux | apk |

Merksatz:

    Paketmanager unterscheiden sich je nach Distribution.

---

**Repository**

Ein Repository ist eine Paketquelle.

Dort liegen Softwarepakete,
Metadaten
und Versionsinformationen.

Ein System lädt aus Repositories Informationen darüber,
welche Pakete verfügbar sind
und welche Updates existieren.

Beispiele für Repository-Inhalte:

    - Webserver
    - Datenbanken
    - Bibliotheken
    - Sicherheitsupdates
    - Systemwerkzeuge
    - Entwicklungswerkzeuge

Merksatz:

    Repository = Paketquelle.

---

**Abhängigkeiten**

Viele Programme benötigen andere Pakete,
damit sie funktionieren.

Diese benötigten Pakete nennt man:

    Abhängigkeiten

Beispiel:

    Ein Programm benötigt eine bestimmte Bibliothek.

Die Paketverwaltung installiert diese Abhängigkeit automatisch mit,
wenn sie fehlt.

Vorteil:

    Programme werden nicht isoliert,
    sondern passend zum System installiert.

Merksatz:

    Abhängigkeiten sind Pakete,
    die andere Pakete benötigen.

---

**Warum Paketverwaltung statt manueller Installation?**

Paketverwaltung hat viele Vorteile:

    - zentrale Installation
    - automatische Abhängigkeitsauflösung
    - einfache Updates
    - einfache Entfernung
    - nachvollziehbare Paketlisten
    - Sicherheitsupdates
    - Versionsverwaltung
    - saubere Integration ins System

Manuelle Installation kann problematisch sein,
weil:

    - Abhängigkeiten fehlen können
    - Updates unklar sind
    - Dateien schwer zu entfernen sind
    - Sicherheitsupdates nicht automatisch kommen
    - Versionskonflikte entstehen können

Merksatz:

    Paketmanager sorgen für Ordnung,
    Updates
    und Nachvollziehbarkeit.

---

**Debian und Ubuntu: apt**

Debian und Ubuntu nutzen häufig:

    apt

Typische Befehle:

| Befehl | Bedeutung |
|---|---|
| apt update | Paketlisten aktualisieren |
| apt upgrade | installierte Pakete aktualisieren |
| apt install paket | Paket installieren |
| apt remove paket | Paket entfernen |
| apt purge paket | Paket inklusive Konfigurationsdateien entfernen |
| apt search begriff | Paket suchen |
| apt show paket | Paketinformationen anzeigen |
| apt autoremove | nicht mehr benötigte Abhängigkeiten entfernen |

Merksatz:

    apt update aktualisiert Paketlisten.
    apt upgrade aktualisiert installierte Pakete.

---

**apt update**

Der Befehl:

    apt update

lädt aktuelle Paketlisten aus den Repositories.

Wichtig:

    apt update installiert noch keine Updates.

Es aktualisiert nur die Information darüber,
welche Pakete und Versionen verfügbar sind.

Merksatz:

    apt update aktualisiert die Paketinformationen,
    nicht die Software selbst.

---

**apt upgrade**

Der Befehl:

    apt upgrade

aktualisiert installierte Pakete,
wenn neuere Versionen verfügbar sind.

Typische Nutzung:

    apt update

    apt upgrade

Bedeutung:

    Erst Paketlisten aktualisieren,
    dann Pakete aktualisieren.

Merksatz:

    update holt Listen.
    upgrade installiert Updates.

---

**Paket installieren mit apt**

Paket installieren:

    apt install nginx

Bedeutung:

    Das Paket nginx wird installiert.
    Benötigte Abhängigkeiten werden automatisch mitinstalliert.

Häufig benötigt man administrative Rechte:

    sudo apt install nginx

Merksatz:

    apt install installiert Pakete.

---

**Paket entfernen mit apt**

Paket entfernen:

    apt remove nginx

Das entfernt das Programm,
aber Konfigurationsdateien können erhalten bleiben.

Paket inklusive Konfigurationsdateien entfernen:

    apt purge nginx

Nicht mehr benötigte Abhängigkeiten entfernen:

    apt autoremove

Merksatz:

    remove entfernt Paket.
    purge entfernt Paket plus Konfiguration.

---

**Paket suchen mit apt**

Paket suchen:

    apt search nginx

Paketinformationen anzeigen:

    apt show nginx

Installierte Pakete anzeigen:

    apt list --installed

Merksatz:

    apt search sucht Pakete.
    apt show zeigt Details.

---

**Fedora und Rocky Linux: dnf**

Fedora und Rocky Linux nutzen häufig:

    dnf

Typische Befehle:

| Befehl | Bedeutung |
|---|---|
| dnf check-update | verfügbare Updates prüfen |
| dnf upgrade | Pakete aktualisieren |
| dnf install paket | Paket installieren |
| dnf remove paket | Paket entfernen |
| dnf search begriff | Paket suchen |
| dnf info paket | Paketinformationen anzeigen |

Beispiele:

    dnf install nginx

    dnf upgrade

    dnf remove nginx

Merksatz:

    dnf ist typisch für Fedora-
    und Enterprise-nahe Distributionen.

---

**openSUSE: zypper**

openSUSE nutzt häufig:

    zypper

Typische Befehle:

| Befehl | Bedeutung |
|---|---|
| zypper refresh | Paketquellen aktualisieren |
| zypper update | Pakete aktualisieren |
| zypper install paket | Paket installieren |
| zypper remove paket | Paket entfernen |
| zypper search begriff | Paket suchen |
| zypper info paket | Paketinformationen anzeigen |

Merksatz:

    zypper ist typisch für openSUSE.

---

**Arch Linux: pacman**

Arch Linux nutzt:

    pacman

Typische Befehle:

| Befehl | Bedeutung |
|---|---|
| pacman -Syu | System aktualisieren |
| pacman -S paket | Paket installieren |
| pacman -R paket | Paket entfernen |
| pacman -Ss begriff | Paket suchen |
| pacman -Qi paket | installiertes Paket anzeigen |

Merksatz:

    pacman ist typisch für Arch Linux.

---

**Alpine Linux: apk**

Alpine Linux nutzt:

    apk

Typische Befehle:

| Befehl | Bedeutung |
|---|---|
| apk update | Paketlisten aktualisieren |
| apk upgrade | Pakete aktualisieren |
| apk add paket | Paket installieren |
| apk del paket | Paket entfernen |
| apk search begriff | Paket suchen |
| apk info paket | Paketinformationen anzeigen |

Alpine ist besonders häufig bei kleinen Container-Images.

Merksatz:

    apk ist typisch für Alpine Linux.

---

**Update,
Upgrade
und Dist-Upgrade**

Die Begriffe können je nach Distribution unterschiedlich verwendet werden.

Bei Debian/Ubuntu gilt grob:

| Befehl | Bedeutung |
|---|---|
| apt update | Paketlisten aktualisieren |
| apt upgrade | installierte Pakete aktualisieren |
| apt full-upgrade | Pakete aktualisieren, auch mit Entfernen/Ersetzen bei Bedarf |

Wichtig:

    full-upgrade kann stärker in das System eingreifen als upgrade.

Merksatz:

    Nicht jedes Upgrade ist gleich tiefgreifend.

---

**Sicherheitsupdates**

Sicherheitsupdates schließen bekannte Schwachstellen.

Sie sind wichtig,
weil ungepatchte Systeme ein Risiko darstellen.

Risiken ungepatchter Systeme:

    - Ausnutzung bekannter Sicherheitslücken
    - Malware-Infektion
    - unberechtigter Zugriff
    - Datenabfluss
    - Manipulation
    - Ausfall von Diensten
    - Compliance-Probleme

Merksatz:

    Patchmanagement reduziert bekannte Risiken.

---

**Patchmanagement**

Patchmanagement bedeutet:

    Updates geplant,
    kontrolliert
    und nachvollziehbar einspielen.

Dazu gehören:

    - Updates prüfen
    - Risiko bewerten
    - Wartungsfenster planen
    - Backup erstellen
    - Abhängigkeiten beachten
    - Updates installieren
    - Dienste prüfen
    - Logs prüfen
    - Rollback-Möglichkeit vorbereiten
    - Dokumentation aktualisieren

Merksatz:

    Updates sind nicht nur Technik,
    sondern auch Prozess.

---

**Warum Updates nicht blind einspielen?**

Updates können Probleme verursachen.

Beispiele:

    - Dienst startet nach Update nicht
    - Konfiguration ist nicht mehr kompatibel
    - Abhängigkeit ändert sich
    - API-Verhalten ändert sich
    - Kernel-Update benötigt Neustart
    - Softwareversion passt nicht zur Anwendung
    - Paket entfernt ältere Komponente

Deshalb wichtig:

    testen

    sichern

    dokumentieren

    Wartungsfenster nutzen

Merksatz:

    Sicherheitsupdates sind wichtig,
    aber produktive Systeme brauchen kontrollierte Änderungen.

---

**Kernel-Updates**

Kernel-Updates aktualisieren den Kern des Betriebssystems.

Wichtig:

    Ein neuer Kernel wird häufig erst nach einem Neustart aktiv.

Prüfen:

    uname -r

zeigt den aktuell laufenden Kernel.

Nach Kernel-Update:

    Neustart planen

    Bootfähigkeit prüfen

    Dienste prüfen

    Treiber oder Module beachten

Merksatz:

    Kernel-Update braucht oft Neustart.

---

**Distribution-Upgrade**

Ein Distribution-Upgrade ist ein Wechsel auf eine neue Hauptversion der Distribution.

Beispiele:

    Ubuntu 22.04 auf 24.04

    Debian 12 auf Debian 13

Das ist umfangreicher als normale Paketupdates.

Vorher wichtig:

    Backup

    Kompatibilität prüfen

    Release Notes lesen

    Drittanbieter-Repositories prüfen

    Wartungsfenster planen

    Rollback-Plan

    Testsystem nutzen

Merksatz:

    Distribution-Upgrade ist größer als normales Update.

---

**Paketquellen und Drittanbieter-Repositories**

Neben offiziellen Repositories können Drittanbieter-Quellen eingebunden werden.

Vorteile:

    neuere Software

    spezielle Anwendungen

    Herstellerpakete

Risiken:

    Vertrauenswürdigkeit

    Sicherheitsrisiko

    Versionskonflikte

    unklare Updateversorgung

    Abhängigkeiten

    Paketquelle kann wegfallen

Merksatz:

    Drittanbieter-Repositories nur bewusst und dokumentiert nutzen.

---

**GPG-Schlüssel und Paketvertrauen**

Viele Paketquellen nutzen Signaturen,
damit Pakete und Paketlisten geprüft werden können.

Grundidee:

    Das System prüft,
    ob Pakete aus einer vertrauenswürdigen Quelle stammen.

Wichtig:

    Nur vertrauenswürdige Paketquellen und Schlüssel einbinden.

Risiko:

    Eine unsichere Paketquelle kann manipulierte Software liefern.

Merksatz:

    Paketquellen sind Vertrauensquellen.

---

**Paketinformationen prüfen**

Paketinformationen helfen,
ein Paket vor der Installation einzuschätzen.

Bei apt:

    apt show paket

Typische Informationen:

    Version

    Beschreibung

    Abhängigkeiten

    Paketquelle

    Größe

    Maintainer

    Homepage

Merksatz:

    Vor Installation prüfen,
    was installiert wird.

---

**Installierte Pakete anzeigen**

Bei apt:

    apt list --installed

Nach bestimmtem Paket suchen:

    apt list --installed | grep nginx

Alternativen je nach Distribution:

    dnf list installed

    pacman -Q

    apk info

Merksatz:

    Installierte Pakete sollten nachvollziehbar sein.

---

**Paketdateien und Konfiguration**

Paketmanager installieren Dateien an bestimmte Orte.

Beispiele:

    Programme nach /usr/bin

    Konfigurationen nach /etc

    Dienste nach systemd-Unit-Pfaden

    Daten nach /var/lib

    Logs nach /var/log

Wichtig:

    Konfigurationsdateien können bei Updates besondere Behandlung bekommen.
    Änderungen sollten dokumentiert werden.

Merksatz:

    Pakete verteilen Dateien an standardisierte Orte.

---

**Dienste nach Paketinstallation**

Ein installiertes Paket bedeutet nicht immer,
dass der Dienst läuft.

Nach Installation prüfen:

    systemctl status dienst

    systemctl is-enabled dienst

    ss -tulpen

Beispiel:

    nginx ist installiert,
    aber der Dienst ist nicht gestartet.

Dann nötig:

    systemctl start nginx

    systemctl enable nginx

Merksatz:

    Installiert heißt nicht automatisch:
    Dienst läuft.

---

**Paket entfernen und Reste**

Beim Entfernen können Reste bleiben.

Mögliche Reste:

    Konfigurationsdateien

    Datenverzeichnisse

    Logdateien

    Benutzerkonten

    systemd-Units

    Cache-Dateien

Beispiel:

    apt remove paket

entfernt meist nicht alle Konfigurationen.

    apt purge paket

entfernt zusätzlich Paketkonfigurationen.

Wichtig:

    Datenbanken oder Anwendungsdaten werden oft nicht automatisch gelöscht.

Merksatz:

    Entfernen heißt nicht immer vollständig bereinigt.

---

**Autoremove**

autoremove entfernt Pakete,
die als Abhängigkeiten installiert wurden
und nicht mehr benötigt werden.

Bei apt:

    apt autoremove

Wichtig:

    Vorher prüfen,
    welche Pakete entfernt werden sollen.

Merksatz:

    autoremove räumt nicht mehr benötigte Abhängigkeiten auf.

---

**Paketcache**

Paketmanager speichern heruntergeladene Paketdaten teilweise im Cache.

Bei apt kann man aufräumen mit:

    apt clean

oder:

    apt autoclean

Nutzen:

    Speicherplatz freigeben

Merksatz:

    Paketcache kann Speicherplatz belegen.

---

**Typische Fehler: Paketlisten veraltet**

Fehlerbild:

    Paket wird nicht gefunden

Mögliche Ursache:

    Paketlisten sind veraltet.

Bei apt prüfen:

    apt update

Danach erneut:

    apt search paket

    apt install paket

Merksatz:

    Wenn apt ein Paket nicht findet,
    zuerst Paketlisten prüfen.

---

**Typische Fehler: Repository nicht erreichbar**

Fehlerbild:

    Paketmanager kann keine Paketlisten laden.

Mögliche Ursachen:

    kein Internet

    DNS-Problem

    Proxy-Problem

    Repository offline

    falsche Paketquelle

    Zertifikatsproblem

    Firewall blockiert

Prüfen:

    Netzwerkverbindung

    DNS

    Repository-URL

    Proxy

    Uhrzeit

Merksatz:

    Paketfehler können Netzwerkfehler sein.

---

**Typische Fehler: Abhängigkeitskonflikt**

Fehlerbild:

    Paket kann nicht installiert werden,
    weil Abhängigkeiten nicht erfüllt sind.

Mögliche Ursachen:

    gemischte Paketquellen

    falsche Distribution-Version

    Drittanbieter-Repository

    Paketversion passt nicht

    unvollständiges Upgrade

Merksatz:

    Abhängigkeitsprobleme entstehen oft durch Versions-
    oder Repository-Konflikte.

---

**Typische Fehler: Paketdatenbank gesperrt**

Fehlerbild bei apt:

    Could not get lock

Bedeutung:

    Ein anderer Paketverwaltungsprozess läuft gerade
    oder wurde nicht sauber beendet.

Mögliche Ursachen:

    automatisches Update läuft

    anderer apt-Prozess offen

    vorheriger Vorgang abgebrochen

Sicheres Vorgehen:

    prüfen,
    ob ein Paketprozess läuft

    warten,
    wenn Updates aktiv sind

    nicht blind Sperrdateien löschen

Merksatz:

    Paketdatenbank-Sperren nicht unüberlegt entfernen.

---

**Typische Fehler: Speicherplatz voll**

Paketinstallationen können fehlschlagen,
wenn Speicherplatz fehlt.

Prüfen:

    df -h

    du -sh /var/cache

    du -sh /var/log

Mögliche Maßnahmen:

    Logs prüfen und sauber rotieren

    Paketcache bereinigen

    alte Kernel prüfen

    nicht benötigte Pakete entfernen

Merksatz:

    Updatefehler können Speicherplatzprobleme sein.

---

**Typische Fehler: Dienst startet nach Update nicht**

Mögliche Ursachen:

    Konfigurationsänderung

    veraltete Option

    neue Version inkompatibel

    Rechteproblem

    Port bereits belegt

    Abhängigkeit fehlt

Prüfen:

    systemctl status dienst

    journalctl -u dienst

    Konfiguration prüfen

    Änderungsnotizen prüfen

    Rollback oder Fix planen

Merksatz:

    Nach Update immer Dienste und Logs prüfen.

---

**Paketverwaltung und Sicherheit**

Paketverwaltung ist Teil der Systemsicherheit.

Sicheres Vorgehen:

    - offizielle Paketquellen bevorzugen
    - Drittanbieterquellen dokumentieren
    - Updates regelmäßig prüfen
    - Sicherheitsupdates priorisieren
    - Dienste nach Updates testen
    - Paketquellen absichern
    - keine unbekannten Installationsskripte blind ausführen
    - minimale Installation bevorzugen

Merksatz:

    Weniger unnötige Pakete bedeutet kleinere Angriffsfläche.

---

**Minimale Installation**

Auf Servern sollte nur installiert sein,
was benötigt wird.

Vorteile:

    weniger Angriffsfläche

    weniger Updates

    weniger Abhängigkeiten

    weniger Fehlerquellen

    bessere Übersicht

Beispiel:

    Ein Datenbankserver braucht normalerweise keine grafische Desktopumgebung.

Merksatz:

    Installiere nur,
    was für den Zweck nötig ist.

---

**Paketverwaltung in Containern**

Container-Images nutzen ebenfalls Paketmanager,
aber anders als normale Server.

Beispiel Alpine:

    apk add paket

Beispiel Debian-basiertes Image:

    apt update

    apt install paket

Wichtig bei Containern:

    Images klein halten

    Paketlisten nach Installation bereinigen

    feste Versionen prüfen

    keine unnötigen Tools installieren

    Sicherheitsupdates über neue Images einspielen

Merksatz:

    In Containern wird Software meist über neue Images aktualisiert.

---

**Typische Paketmanager-Befehle im Vergleich**

| Aufgabe | Debian/Ubuntu | Fedora/Rocky | openSUSE | Arch | Alpine |
|---|---|---|---|---|---|
| Paketlisten aktualisieren | apt update | dnf check-update | zypper refresh | pacman -Sy | apk update |
| System aktualisieren | apt upgrade | dnf upgrade | zypper update | pacman -Syu | apk upgrade |
| Paket installieren | apt install | dnf install | zypper install | pacman -S | apk add |
| Paket entfernen | apt remove | dnf remove | zypper remove | pacman -R | apk del |
| Paket suchen | apt search | dnf search | zypper search | pacman -Ss | apk search |
| Paketinfo anzeigen | apt show | dnf info | zypper info | pacman -Qi | apk info |

Merksatz:

    Gleiche Aufgabe,
    anderer Paketmanager.

---

**Typische Admin-Reihenfolge bei Updates**

Sicheres Vorgehen bei Servern:

    1. System und Dienste dokumentieren

    2. Backup oder Snapshot prüfen

    3. freie Kapazität prüfen

    4. Paketlisten aktualisieren

    5. verfügbare Updates prüfen

    6. Wartungsfenster beachten

    7. Updates installieren

    8. Dienste prüfen

    9. Logs prüfen

    10. Funktion testen

    11. Dokumentation aktualisieren

Merksatz:

    Updates brauchen Vorbereitung,
    Durchführung
    und Nachprüfung.

---

**Typische Prüfungsfragen**

| Frage | Kurzantwort |
|---|---|
| Was ist ein Paket? | verwaltete Softwareeinheit |
| Was ist ein Paketmanager? | Werkzeug zur Verwaltung von Softwarepaketen |
| Was ist ein Repository? | Paketquelle |
| Was sind Abhängigkeiten? | benötigte Zusatzpakete |
| Was macht apt update? | Paketlisten aktualisieren |
| Was macht apt upgrade? | installierte Pakete aktualisieren |
| Was macht apt install? | Paket installieren |
| Was macht apt remove? | Paket entfernen |
| Was macht apt purge? | Paket inklusive Konfiguration entfernen |
| Was ist Patchmanagement? | geplanter Umgang mit Updates |
| Warum sind Sicherheitsupdates wichtig? | schließen bekannte Schwachstellen |
| Warum nicht blind updaten? | Dienste oder Abhängigkeiten können brechen |
| Warum minimale Installation? | kleinere Angriffsfläche |

---

**Typische Prüfungsfallen**

| Falle | Richtig denken |
|---|---|
| apt update als Softwareupdate verstehen | aktualisiert nur Paketlisten |
| apt upgrade vergessen | installiert die Updates |
| installierter Dienst läuft automatisch | nicht immer, systemctl prüfen |
| Paket entfernen heißt alles weg | Daten und Konfiguration können bleiben |
| Drittanbieter-Repos blind nutzen | Vertrauens- und Versionsrisiko |
| Updates ohne Backup | riskant bei produktiven Systemen |
| Kernel-Update ohne Neustart einplanen | neuer Kernel oft erst nach Reboot aktiv |
| Sicherheitsupdates aufschieben | bekannte Lücken bleiben offen |
| Paketfehler nur als Paketproblem sehen | Netzwerk, DNS, Speicher prüfen |
| manuelle Installationsskripte blind ausführen | Sicherheitsrisiko |

---

**IHK-sichere Kurzformulierung**

Unter Linux wird Software meist über Paketmanager installiert, entfernt und aktualisiert. Ein Paket ist eine verwaltete Softwareeinheit, ein Repository ist eine Paketquelle. Paketmanager wie apt, dnf, zypper, pacman oder apk lösen Abhängigkeiten auf und stellen Updates bereit. Bei Debian und Ubuntu aktualisiert apt update die Paketlisten, während apt upgrade installierte Pakete aktualisiert. Sicherheitsupdates sind wichtig, weil sie bekannte Schwachstellen schließen. In produktiven Umgebungen sollten Updates geplant durchgeführt werden, mit Backup, Wartungsfenster, Prüfung der Dienste, Logkontrolle und Dokumentation. Drittanbieter-Repositories sollten nur bewusst genutzt werden, da sie Vertrauens- und Versionsrisiken mit sich bringen.

---

**Merksätze**

    Paket = verwaltete Softwareeinheit.

    Paketmanager verwaltet Pakete.

    Repository = Paketquelle.

    Abhängigkeiten sind benötigte Zusatzpakete.

    apt ist typisch für Debian und Ubuntu.

    dnf ist typisch für Fedora und Rocky Linux.

    zypper ist typisch für openSUSE.

    pacman ist typisch für Arch Linux.

    apk ist typisch für Alpine Linux.

    apt update aktualisiert Paketlisten.

    apt upgrade aktualisiert installierte Pakete.

    apt install installiert Pakete.

    apt remove entfernt Pakete.

    apt purge entfernt Paketkonfigurationen mit.

    apt autoremove entfernt nicht mehr benötigte Abhängigkeiten.

    Sicherheitsupdates schließen bekannte Lücken.

    Patchmanagement ist ein Prozess.

    Updates auf Servern brauchen Planung.

    Kernel-Updates brauchen oft Neustart.

    Installiert heißt nicht automatisch:
    Dienst läuft.

    Drittanbieter-Repositories sind Vertrauensquellen.

    Paketfehler können Netzwerkprobleme sein.

    Speicherplatzprobleme können Updates verhindern.

    Minimale Installation reduziert Angriffsfläche.

    Nach Updates Dienste,
    Ports
    und Logs prüfen.

# 7. Netzwerk, SSH und Firewall



# 7.1 Netzwerk, SSH und Firewall

Linux wird sehr häufig für Netzwerkdienste,
Server,
Container,
Router,
Firewalls,
VPN-Systeme
und Cloud-Systeme eingesetzt.

Deshalb gehört Netzwerkdiagnose unter Linux zu den wichtigsten Fähigkeiten in der Systemadministration.

In diesem Kapitel geht es um:

    - IP-Adressen anzeigen
    - Routing prüfen
    - DNS prüfen
    - Erreichbarkeit testen
    - Ports und Verbindungen prüfen
    - SSH verstehen
    - Firewall-Grundlagen unter Linux
    - typische Netzwerkfehler eingrenzen

Merksatz:

    Linux ist im Serverbetrieb stark,
    weil Netzwerk,
    Dienste,
    Logs
    und Fernadministration gut über die Shell prüfbar sind.

---

**Lernziele**

Nach dieser Seite solltest du erklären und anwenden können:

    - wie man IP-Adressen unter Linux prüft
    - wie man Routing und Gateway prüft
    - wie man DNS prüft
    - wie man Erreichbarkeit mit ping testet
    - wie man Ports mit ss prüft
    - was SSH ist
    - warum SSH sicherer als Telnet ist
    - wie SSH-Schlüssel grundsätzlich funktionieren
    - was eine lokale Firewall macht
    - wie man typische Netzwerkfehler systematisch eingrenzt

---

**Grundidee**

Netzwerkprobleme unter Linux können viele Ursachen haben.

Typische Fehlerquellen:

    - falsche IP-Adresse
    - falsche Subnetzmaske
    - falsches Gateway
    - falscher DNS-Server
    - Dienst läuft nicht
    - Port ist nicht offen
    - Firewall blockiert
    - Dienst lauscht nur lokal
    - falsche Route
    - SSH-Zugang falsch konfiguriert
    - Rechte oder Schlüsselproblem

Merksatz:

    Bei Netzwerkproblemen immer trennen:
    IP,
    Route,
    DNS,
    Port,
    Dienst,
    Firewall
    und Anwendung.

---

**Wichtige Netzwerkbefehle**

| Befehl | Zweck |
|---|---|
| ip addr | IP-Adressen anzeigen |
| ip link | Netzwerkschnittstellen anzeigen |
| ip route | Routing-Tabelle anzeigen |
| ping | Erreichbarkeit per ICMP prüfen |
| traceroute | Weg zum Ziel prüfen, falls installiert |
| tracepath | Weg zum Ziel prüfen, häufig einfacher verfügbar |
| ss | Ports und Verbindungen anzeigen |
| curl | HTTP/HTTPS testen |
| dig | DNS prüfen |
| nslookup | DNS prüfen |
| hostname | Hostname anzeigen |
| resolvectl | DNS-Status bei systemd-resolved anzeigen |
| ssh | sichere Fernadministration |

Merksatz:

    ip,
    ping,
    ss,
    dig
    und ssh gehören zu den wichtigsten Linux-Netzwerkbefehlen.

---

**Netzwerkschnittstellen anzeigen**

Netzwerkschnittstellen zeigt man mit:

    ip link

Beispielausgabe:

    1: lo: <LOOPBACK,UP,LOWER_UP>
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP>

Typische Schnittstellen:

| Schnittstelle | Bedeutung |
|---|---|
| lo | Loopback |
| eth0 | Ethernet-Schnittstelle |
| ens18 | Ethernet-Schnittstelle nach moderner Benennung |
| enp0s3 | Ethernet-Schnittstelle nach moderner Benennung |
| wlan0 | WLAN-Schnittstelle |
| docker0 | Docker-Bridge |
| br0 | Bridge |
| tun0 | VPN-Tunnel |
| wg0 | WireGuard-Schnittstelle |

Merksatz:

    ip link zeigt,
    welche Netzwerkinterfaces existieren und ob sie aktiv sind.

---

**Loopback**

Die Loopback-Adresse ist:

    127.0.0.1

Der Name dazu ist meist:

    localhost

Bedeutung:

    Kommunikation mit dem eigenen System.

Beispiele:

    curl http://127.0.0.1:8080

    ping 127.0.0.1

Wichtig:

    Wenn ein Dienst nur auf 127.0.0.1 lauscht,
    ist er nur lokal auf dem Server erreichbar,
    nicht von anderen Systemen.

Merksatz:

    127.0.0.1 bedeutet:
    dieses System selbst.

---

**IP-Adressen anzeigen**

IP-Adressen zeigt man mit:

    ip addr

oder kurz:

    ip a

Beispiel:

    ip addr show eth0

Typische Informationen:

    Schnittstellenname

    MAC-Adresse

    IPv4-Adresse

    IPv6-Adresse

    Status

    Netzpräfix

Beispiel:

    inet 192.168.1.50/24

Bedeutung:

    IPv4-Adresse:
    192.168.1.50

    Präfix:
    /24

Merksatz:

    ip addr zeigt IP-Adressen und Präfixe.

---

**IPv4-Adresse und Präfix**

Beispiel:

    192.168.10.25/24

Bedeutung:

    IP-Adresse:
    192.168.10.25

    Präfix:
    /24

    Netz:
    192.168.10.0/24

Ein Client mit /24 kann direkt mit anderen Geräten im gleichen Netz kommunizieren,
zum Beispiel:

    192.168.10.1

    192.168.10.50

    192.168.10.200

Für andere Netze braucht er ein Gateway.

Merksatz:

    Präfix bestimmt,
    was lokal erreichbar ist.

---

**Routing-Tabelle anzeigen**

Die Routing-Tabelle zeigt man mit:

    ip route

Beispielausgabe:

    default via 192.168.1.1 dev eth0
    192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.50

Bedeutung:

| Eintrag | Bedeutung |
|---|---|
| default via 192.168.1.1 | Standardgateway |
| dev eth0 | über Schnittstelle eth0 |
| 192.168.1.0/24 | lokales Netz |
| src 192.168.1.50 | eigene Quelladresse |

Merksatz:

    ip route zeigt,
    wohin Pakete gesendet werden.

---

**Standardgateway**

Das Standardgateway ist der Router in andere Netze.

In der Routing-Tabelle steht es meist als:

    default via ...

Beispiel:

    default via 192.168.1.1 dev eth0

Bedeutung:

    Alle Ziele,
    für die keine spezifischere Route existiert,
    werden über 192.168.1.1 gesendet.

Wichtig:

    Das Gateway muss im lokalen Subnetz erreichbar sein.

Merksatz:

    Gateway führt aus dem lokalen Netz heraus.

---

**Erreichbarkeit mit ping prüfen**

ping prüft Erreichbarkeit per ICMP.

Beispiel:

    ping 192.168.1.1

Nur 4 Pakete senden:

    ping -c 4 192.168.1.1

Beispiele:

    ping -c 4 127.0.0.1

    ping -c 4 192.168.1.1

    ping -c 4 8.8.8.8

    ping -c 4 example.com

Wichtig:

    ping prüft nicht,
    ob ein TCP- oder UDP-Dienst funktioniert.

Merksatz:

    ping prüft Host-Erreichbarkeit,
    nicht Dienst-Erreichbarkeit.

---

**ping richtig einordnen**

| Ergebnis | Bedeutung |
|---|---|
| ping 127.0.0.1 geht | eigener Netzwerkstack funktioniert grundsätzlich |
| ping eigene IP geht | lokale IP ist aktiv |
| ping Gateway geht | lokales Netz zum Gateway funktioniert |
| ping externe IP geht | Routing ins externe Netz funktioniert |
| ping Domain geht nicht, IP geht | DNS-Problem wahrscheinlich |
| ping geht nicht | ICMP blockiert oder Ziel nicht erreichbar |

Wichtig:

    Manche Systeme blockieren ICMP.
    Dann kann ein Dienst trotzdem erreichbar sein.

Merksatz:

    ping-Ergebnis immer im Zusammenhang bewerten.

---

**DNS prüfen**

DNS löst Namen in IP-Adressen auf.

Typische Befehle:

    nslookup example.com

    dig example.com

    resolvectl status

Beispiel:

    dig ulrich-wiki.com

Wichtig:

    Wenn IP-Adressen erreichbar sind,
    Namen aber nicht,
    ist DNS wahrscheinlich das Problem.

Merksatz:

    IP geht,
    Name geht nicht:
    DNS prüfen.

---

**DNS-Server anzeigen**

Je nach Distribution und Konfiguration gibt es verschiedene Wege.

Häufig:

    cat /etc/resolv.conf

Bei systemd-resolved:

    resolvectl status

Wichtig:

    /etc/resolv.conf kann eine echte Datei
    oder ein symbolischer Link auf systemd-resolved sein.

Merksatz:

    DNS-Konfiguration hängt von Distribution und Resolver ab.

---

**/etc/hosts**

Die Datei:

    /etc/hosts

enthält lokale Namenszuordnungen.

Beispiel:

    127.0.0.1 localhost
    192.168.1.10 server01.local

Wichtig:

    Einträge in /etc/hosts können DNS-Abfragen übersteuern oder ergänzen.

Typische Nutzung:

    lokale Tests

    feste interne Namen

    kleine Umgebungen

    Fehleranalyse

Merksatz:

    /etc/hosts ist lokale Namensauflösung.

---

**Hostname anzeigen**

Hostname anzeigen:

    hostname

Mehr Informationen:

    hostnamectl

Hostname setzen,
wenn systemd genutzt wird:

    hostnamectl set-hostname server01

Wichtig:

    Hostname,
    DNS-Name
    und Eintrag in /etc/hosts sollten sinnvoll zusammenpassen.

Merksatz:

    hostname zeigt den Systemnamen.

---

**Ports und Verbindungen mit ss prüfen**

Offene Ports und Verbindungen zeigt man mit:

    ss

Häufige Variante:

    ss -tulpen

Bedeutung:

| Option | Bedeutung |
|---|---|
| -t | TCP |
| -u | UDP |
| -l | listening |
| -p | Prozess anzeigen |
| -e | erweiterte Informationen |
| -n | numerisch, keine Namensauflösung |

Beispiel:

    ss -tulpen

Merksatz:

    ss zeigt,
    welche Dienste auf welchen Ports lauschen.

---

**LISTEN verstehen**

Wenn ein Dienst auf einem Port wartet,
steht er im Zustand:

    LISTEN

Beispiel:

    0.0.0.0:22

Bedeutung:

    Der Dienst lauscht auf TCP 22 auf allen IPv4-Schnittstellen.

Beispiel:

    127.0.0.1:8080

Bedeutung:

    Der Dienst lauscht nur lokal auf dem System.

Merksatz:

    LISTEN heißt:
    Dienst wartet auf Verbindungen.

---

**127.0.0.1 und 0.0.0.0**

| Adresse | Bedeutung bei lauschendem Dienst |
|---|---|
| 127.0.0.1 | nur lokal erreichbar |
| 0.0.0.0 | auf allen IPv4-Schnittstellen erreichbar |
| ::1 | IPv6 localhost |
| :: | auf allen IPv6-Schnittstellen erreichbar |

Beispiel:

    127.0.0.1:8080

nur lokal.

    0.0.0.0:8080

grundsätzlich von außen erreichbar,
wenn Firewall,
Routing
und Netz passen.

Merksatz:

    127.0.0.1 ist lokal.
    0.0.0.0 ist auf allen IPv4-Interfaces.

---

**HTTP und HTTPS mit curl prüfen**

curl kann HTTP-
und HTTPS-Verbindungen testen.

Beispiele:

    curl http://localhost

    curl http://127.0.0.1:8080

    curl https://example.com

Nur Header anzeigen:

    curl -I https://example.com

Ausführlichere Verbindungsausgabe:

    curl -v https://example.com

Typische Nutzung:

    Webdienst prüfen

    Reverse Proxy testen

    HTTP-Statuscode sehen

    TLS-Probleme erkennen

Merksatz:

    curl prüft Webdienste direkt auf Anwendungsebene.

---

**HTTP-Statuscodes kurz**

| Code | Bedeutung |
|---|---|
| 200 | OK |
| 301 | dauerhaft weitergeleitet |
| 302 | temporär weitergeleitet |
| 400 | fehlerhafte Anfrage |
| 401 | nicht authentifiziert |
| 403 | verboten |
| 404 | nicht gefunden |
| 500 | interner Serverfehler |
| 502 | Bad Gateway |
| 503 | Dienst nicht verfügbar |

Merksatz:

    ping prüft ICMP.
    curl prüft HTTP oder HTTPS.

---

**SSH**

SSH steht für:

    Secure Shell

SSH dient zur sicheren Fernadministration.

Typischer Port:

    TCP 22

Beispiel:

    ssh felix@192.168.1.10

Bedeutung:

    Verbindung als Benutzer felix zum Server 192.168.1.10 herstellen.

SSH verschlüsselt die Verbindung
und ist deshalb sicherer als Telnet.

Merksatz:

    SSH = sichere Fernadministration über TCP 22.

---

**SSH und Telnet**

Telnet ist unsicher,
weil es Daten unverschlüsselt überträgt.

SSH ist sicherer,
weil es die Verbindung verschlüsselt.

| Protokoll | Sicherheit |
|---|---|
| Telnet | unverschlüsselt, unsicher |
| SSH | verschlüsselt, sicherer |

Merksatz:

    Telnet vermeiden,
    SSH nutzen.

---

**SSH-Server und SSH-Client**

SSH besteht aus Client und Server.

SSH-Client:

    baut Verbindung auf

Beispiel:

    ssh felix@server

SSH-Server:

    nimmt Verbindungen an

Dienstname häufig:

    ssh

oder:

    sshd

Prüfen:

    systemctl status ssh

oder je nach Distribution:

    systemctl status sshd

Merksatz:

    ssh ist der Client.
    sshd ist der SSH-Dienst.

---

**SSH-Konfiguration**

Die wichtige SSH-Server-Konfiguration liegt häufig unter:

    /etc/ssh/sshd_config

Typische Einstellungen:

    Port

    PermitRootLogin

    PasswordAuthentication

    PubkeyAuthentication

    AllowUsers

    ListenAddress

Wichtig:

    Nach Änderungen SSH-Konfiguration prüfen,
    Dienst neu laden oder neu starten
    und bestehende Sitzung nicht sofort schließen.

Merksatz:

    SSH-Änderungen vorsichtig durchführen,
    damit man sich nicht aussperrt.

---

**SSH-Root-Login**

Direkter Root-Login per SSH ist sicherheitskritisch.

Risiken:

    Angreifer kennen den Benutzernamen root

    Brute-Force-Angriffe einfacher

    Aktionen weniger personenbezogen nachvollziehbar

Besser:

    normaler Benutzer meldet sich an

    administrative Befehle gezielt mit sudo

Merksatz:

    Kein direkter Root-Login per SSH,
    wenn nicht zwingend nötig.

---

**SSH-Passwort und SSH-Schlüssel**

SSH kann verschiedene Authentifizierungsarten nutzen.

| Methode | Bedeutung |
|---|---|
| Passwort | Benutzer meldet sich mit Passwort an |
| Schlüssel | Anmeldung über privates und öffentliches Schlüsselpaar |

SSH-Schlüssel bestehen aus:

    privatem Schlüssel

    öffentlichem Schlüssel

Der öffentliche Schlüssel liegt auf dem Server.
Der private Schlüssel bleibt beim Benutzer.

Merksatz:

    Öffentlicher Schlüssel auf Server.
    Privater Schlüssel bleibt geheim.

---

**SSH-Schlüssel-Grundprinzip**

Vereinfachtes Prinzip:

    1. Benutzer besitzt privaten Schlüssel.

    2. Server kennt passenden öffentlichen Schlüssel.

    3. SSH prüft,
       ob der private Schlüssel zum öffentlichen Schlüssel passt.

    4. Der private Schlüssel wird nicht an den Server übertragen.

Wichtig:

    Der private Schlüssel sollte mit einer Passphrase geschützt sein.

Merksatz:

    Der private SSH-Schlüssel darf nicht weitergegeben werden.

---

**authorized_keys**

Öffentliche SSH-Schlüssel eines Benutzers liegen häufig in:

    ~/.ssh/authorized_keys

Beispiel:

    /home/felix/.ssh/authorized_keys

Wichtige Rechte:

    ~/.ssh sollte nicht für andere beschreibbar sein.

    authorized_keys sollte nicht für andere beschreibbar sein.

Typische Rechte:

    chmod 700 ~/.ssh

    chmod 600 ~/.ssh/authorized_keys

Merksatz:

    SSH-Schlüsselzugriff hängt auch von Dateirechten ab.

---

**SSH-Fehlerbilder**

| Fehlerbild | Mögliche Ursache |
|---|---|
| Connection refused | SSH-Dienst läuft nicht oder Port falsch |
| Connection timed out | Firewall, Routing oder Ziel nicht erreichbar |
| Permission denied | Benutzer, Passwort oder Schlüssel falsch |
| Host key verification failed | Host-Key hat sich geändert |
| No route to host | Routingproblem oder Zielnetz nicht erreichbar |
| Port 22 nicht erreichbar | Firewall oder Dienstproblem |
| Login als root nicht möglich | PermitRootLogin deaktiviert |

Merksatz:

    SSH-Fehler unterscheiden:
    Netzwerk,
    Port,
    Dienst,
    Schlüssel
    oder Benutzer.

---

**Host-Key**

Beim ersten Verbinden speichert SSH den Host-Key des Servers.

Datei auf dem Client:

    ~/.ssh/known_hosts

Zweck:

    prüfen,
    ob man wieder mit demselben Server spricht.

Warnung:

    Host key verification failed

kann bedeuten:

    Server wurde neu installiert

    IP zeigt auf anderes System

    Host-Key wurde geändert

    möglicher Man-in-the-Middle-Angriff

Merksatz:

    Host-Key schützt vor unbemerktem Serverwechsel.

---

**SCP und SFTP**

SSH kann auch für Dateiübertragung genutzt werden.

SCP:

    Dateiübertragung über SSH

SFTP:

    SSH File Transfer Protocol

Beispiele:

    scp datei.txt felix@server:/tmp/

    sftp felix@server

Wichtig:

    SFTP ist nicht dasselbe wie FTPS.

Merksatz:

    SFTP nutzt SSH.
    FTPS ist FTP mit TLS.

---

**Firewall unter Linux**

Eine Firewall filtert Netzwerkverkehr.

Sie kann entscheiden:

    - welche Verbindungen erlaubt sind
    - welche Ports erreichbar sind
    - welche Quellen zugreifen dürfen
    - welcher Verkehr blockiert wird

Linux-Firewall-Techniken:

    iptables

    nftables

    firewalld

    ufw

Wichtig:

    Je nach Distribution wird ein anderes Werkzeug verwendet.

Merksatz:

    Linux-Firewall kann mit unterschiedlichen Werkzeugen verwaltet werden.

---

**ufw**

ufw steht für:

    Uncomplicated Firewall

ufw wird häufig bei Ubuntu verwendet
und ist eine vereinfachte Oberfläche für Firewall-Regeln.

Typische Befehle:

    ufw status

    ufw allow 22/tcp

    ufw allow 443/tcp

    ufw deny 445/tcp

    ufw enable

    ufw disable

Wichtig:

    Vor dem Aktivieren einer Firewall per SSH sicherstellen,
    dass SSH erlaubt ist.

Merksatz:

    Firewall per SSH nie aktivieren,
    ohne SSH-Regel zu erlauben.

---

**firewalld**

firewalld wird häufig bei Fedora,
Rocky Linux
und ähnlichen Distributionen genutzt.

Typische Konzepte:

    Zonen

    Dienste

    Ports

    permanente Regeln

Beispielbefehle:

    firewall-cmd --state

    firewall-cmd --list-all

    firewall-cmd --add-service=ssh --permanent

    firewall-cmd --reload

Merksatz:

    firewalld arbeitet stark mit Zonen und Diensten.

---

**nftables**

nftables ist ein moderner Linux-Firewall-Unterbau.

Es ersetzt in vielen Umgebungen ältere iptables-Strukturen.

Prüfen:

    nft list ruleset

Wichtig:

    nftables ist leistungsfähig,
    aber weniger einsteigerfreundlich als ufw.

Merksatz:

    nftables ist moderner Firewall-Unterbau unter Linux.

---

**iptables**

iptables ist ein älteres,
aber noch häufig anzutreffendes Firewall-Werkzeug.

Prüfen:

    iptables -L -n -v

Wichtig:

    Auf modernen Systemen kann iptables intern auf nftables aufsetzen.

Merksatz:

    iptables ist klassisch,
    nftables ist moderner.

---

**Firewall-Regeln vollständig denken**

Eine Firewall-Regel sollte nicht nur aus einem Port bestehen.

Wichtige Angaben:

    Quelle

    Ziel

    Protokoll

    Port

    Richtung

    Aktion

    Zweck

Beispiel:

    Quelle:
    Adminnetz

    Ziel:
    Linux-Server

    Protokoll:
    TCP

    Port:
    22

    Aktion:
    erlauben

    Zweck:
    SSH-Administration

Merksatz:

    Port allein ist keine vollständige Firewall-Regel.

---

**Lokale Firewall und Netzwerkfirewall**

Ein Zugriff kann an mehreren Stellen blockiert werden.

Beispiele:

    lokale Firewall auf dem Linux-Server

    Firewall auf Router

    Firewall zwischen VLANs

    Cloud Security Group

    Container-Firewall oder Docker-Regeln

    Provider-Firewall

Merksatz:

    Bei Portproblemen alle Filterstellen prüfen.

---

**Dienst läuft,
aber Zugriff geht nicht**

Mögliche Ursachen:

    Dienst lauscht nur auf 127.0.0.1

    Dienst lauscht auf anderem Port

    lokale Firewall blockiert

    Netzwerkfirewall blockiert

    Routingproblem

    DNS zeigt auf falsche IP

    falsches Protokoll TCP/UDP

    Dienst erwartet TLS oder Hostname

Prüfen:

    systemctl status dienst

    ss -tulpen

    ip addr

    ip route

    Firewall-Regeln

    Logs

Merksatz:

    Dienststatus allein reicht nicht.

---

**Netzwerkdiagnose: sinnvolle Reihenfolge**

Bei Linux-Netzwerkproblemen:

    1. Schnittstelle aktiv?

    2. IP-Adresse korrekt?

    3. Route und Gateway korrekt?

    4. DNS korrekt?

    5. Ziel per IP erreichbar?

    6. Ziel per Name erreichbar?

    7. Port offen?

    8. Dienst läuft?

    9. Firewall-Regeln korrekt?

    10. Logs prüfen

Merksatz:

    Erst IP,
    dann Route,
    dann DNS,
    dann Port,
    dann Dienst.

---

**Beispiel: Kein Internet**

Fehlerbild:

    Server kommt nicht ins Internet.

Prüfen:

    ip addr

    ip route

    ping -c 4 gateway-ip

    ping -c 4 8.8.8.8

    ping -c 4 example.com

Mögliche Einordnung:

| Ergebnis | Ursache |
|---|---|
| keine IP | DHCP oder Interface |
| Gateway nicht erreichbar | lokales Netz oder Gateway |
| externe IP nicht erreichbar | Routing, NAT oder Firewall |
| Domain nicht erreichbar, IP geht | DNS |

Merksatz:

    Kein Internet ist kein genauer Fehler.
    Schrittweise eingrenzen.

---

**Beispiel: Webseite geht nicht**

Fehlerbild:

    Webseite auf Linux-Server ist nicht erreichbar.

Prüfen:

    systemctl status nginx

    ss -tulpen

    curl http://127.0.0.1

    curl http://server-ip

    ip addr

    ip route

    Firewall

    journalctl -u nginx

Mögliche Ursachen:

    Webserver läuft nicht

    Port 80 oder 443 nicht offen

    Dienst lauscht nur lokal

    Firewall blockiert

    falsche IP

    Reverse Proxy falsch

    Zertifikatproblem

Merksatz:

    Webseite prüfen:
    Dienst,
    Port,
    Bind-Adresse,
    Firewall,
    Logs.

---

**Beispiel: SSH geht nicht**

Fehlerbild:

    SSH-Verbindung schlägt fehl.

Prüfen auf Clientseite:

    ssh -v benutzer@server

Prüfen auf Serverseite:

    systemctl status ssh

    ss -tulpen

    journalctl -u ssh

    Firewall-Regeln

    Benutzer und Rechte

    ~/.ssh/authorized_keys

Mögliche Ursachen:

    Dienst läuft nicht

    TCP 22 blockiert

    falscher Benutzer

    Schlüssel fehlt

    Rechte auf .ssh falsch

    Root-Login deaktiviert

Merksatz:

    SSH-Fehler mit -v,
    Dienststatus,
    Port
    und Logs eingrenzen.

---

**Beispiel: DNS geht nicht**

Fehlerbild:

    IP funktioniert,
    Name funktioniert nicht.

Prüfen:

    cat /etc/resolv.conf

    resolvectl status

    dig name

    nslookup name

    ping -c 4 dns-server-ip

    Firewall UDP/TCP 53

Mögliche Ursachen:

    falscher DNS-Server

    DNS-Server nicht erreichbar

    falscher Suchsuffix

    Firewall blockiert DNS

    /etc/hosts überschreibt Namen

Merksatz:

    IP ja,
    Name nein:
    DNS.

---

**Typische Fehlerbilder**

| Fehlerbild | Wahrscheinliches Thema |
|---|---|
| keine IP-Adresse | DHCP oder Interface |
| Gateway nicht erreichbar | lokales Netz, VLAN, Gateway |
| externe IP nicht erreichbar | Routing, NAT oder Firewall |
| IP erreichbar, Name nicht | DNS |
| Dienst läuft, Port nicht erreichbar | Firewall, Bind-Adresse, Port |
| Port lauscht auf 127.0.0.1 | nur lokal erreichbar |
| SSH Connection refused | Dienst läuft nicht oder Port falsch |
| SSH Connection timed out | Firewall oder Routing |
| SSH Permission denied | Benutzer, Passwort oder Schlüssel |
| curl zeigt 404 | Ressource oder Pfad nicht gefunden |
| curl zeigt 502 | Proxy oder Backendproblem |

---

**Typische Prüfungsfragen**

| Frage | Kurzantwort |
|---|---|
| Wofür ist ip addr? | IP-Adressen anzeigen |
| Wofür ist ip route? | Routing-Tabelle anzeigen |
| Was ist default via? | Standardgateway |
| Wofür ist ping? | ICMP-Erreichbarkeit prüfen |
| Warum ersetzt ping keinen Porttest? | ping prüft nicht TCP/UDP-Dienste |
| Wofür ist ss? | Ports und Verbindungen anzeigen |
| Was bedeutet LISTEN? | Dienst wartet auf Verbindungen |
| Was bedeutet 127.0.0.1? | localhost, nur eigenes System |
| Was bedeutet 0.0.0.0 bei Diensten? | alle IPv4-Schnittstellen |
| Was ist SSH? | sichere Fernadministration |
| Welchen Port nutzt SSH? | TCP 22 |
| Warum ist Telnet unsicher? | unverschlüsselte Übertragung |
| Was ist /etc/hosts? | lokale Namensauflösung |
| Was ist ufw? | einfache Firewall-Verwaltung |
| Was ist firewalld? | Firewall-Verwaltung mit Zonen |

---

**Typische Prüfungsfallen**

| Falle | Richtig denken |
|---|---|
| ping geht, also Dienst geht | falsch, ping prüft nur ICMP |
| 127.0.0.1 als extern erreichbar verstehen | nur lokal |
| 0.0.0.0 als Zieladresse verwenden | bei LISTEN bedeutet alle Interfaces |
| DNS und Internet verwechseln | IP kann gehen, DNS trotzdem nicht |
| SSH-Problem nur als Passwortproblem sehen | Netzwerk, Port, Dienst, Schlüssel prüfen |
| Firewall nur lokal prüfen | auch Netzwerkfirewall, Cloud, Router prüfen |
| Portnummer ohne TCP/UDP nennen | unvollständig |
| SSH-Root-Login erlauben | Sicherheitsrisiko |
| private SSH-Schlüssel weitergeben | niemals weitergeben |
| /etc/hosts vergessen | kann Namensauflösung beeinflussen |

---

**IHK-sichere Kurzformulierung**

Unter Linux werden Netzwerkprobleme systematisch mit Werkzeugen wie ip addr, ip route, ping, dig, nslookup, ss, curl und journalctl geprüft. ip addr zeigt IP-Adressen und Schnittstellen, ip route zeigt Routing-Tabelle und Standardgateway. ping prüft die ICMP-Erreichbarkeit, ersetzt aber keinen Port- oder Diensttest. ss zeigt, welche Dienste auf welchen TCP- oder UDP-Ports lauschen. DNS-Probleme erkennt man häufig daran, dass eine IP-Adresse erreichbar ist, ein Name aber nicht aufgelöst wird. SSH dient der sicheren Fernadministration über TCP 22 und ist Telnet vorzuziehen, weil die Verbindung verschlüsselt ist. Bei Verbindungsproblemen müssen Dienststatus, Port, Bind-Adresse, Firewall, Routing, DNS und Logs gemeinsam geprüft werden.

---

**Merksätze**

    Netzwerkfehler systematisch eingrenzen.

    ip addr zeigt IP-Adressen.

    ip link zeigt Schnittstellen.

    ip route zeigt Routing.

    default via ist das Standardgateway.

    ping prüft ICMP.

    ping ist kein Porttest.

    DNS löst Namen auf.

    IP ja,
    Name nein:
    DNS.

    ss zeigt Ports und Verbindungen.

    LISTEN heißt:
    Dienst wartet.

    127.0.0.1 heißt:
    nur lokal.

    0.0.0.0 heißt:
    alle IPv4-Interfaces.

    curl prüft HTTP und HTTPS.

    SSH nutzt TCP 22.

    SSH ist verschlüsselt.

    Telnet ist unverschlüsselt.

    ssh ist der Client.

    sshd ist der Dienst.

    Privater SSH-Schlüssel bleibt geheim.

    authorized_keys enthält öffentliche Schlüssel.

    Host-Key schützt vor unbemerktem Serverwechsel.

    ufw ist eine einfache Firewall-Oberfläche.

    firewalld arbeitet mit Zonen.

    nftables ist moderner Firewall-Unterbau.

    iptables ist klassisch.

    Firewall-Regeln brauchen Quelle,
    Ziel,
    Protokoll,
    Port,
    Aktion
    und Zweck.

    Dienst läuft heißt nicht automatisch:
    Dienst ist erreichbar.

    Erst IP,
    dann Route,
    dann DNS,
    dann Port,
    dann Dienst,
    dann Logs.

# 8. Speicher, Mounts und Dateisysteme



# 8.1 Speicher, Mounts und Dateisysteme

Linux verwaltet Datenträger,
Partitionen,
Dateisysteme
und eingebundene Speicherbereiche anders als Windows.

Es gibt keine Laufwerksbuchstaben wie C: oder D:.
Stattdessen werden Dateisysteme in den gemeinsamen Verzeichnisbaum eingehängt.

Dieses Einhängen nennt man:

    Mounten

Für Fachinformatiker Systemintegration ist dieses Thema wichtig,
weil Server,
NAS-Systeme,
Backups,
Container,
Logdateien,
Datenbanken
und Freigaben sehr häufig von korrektem Speicherplatz,
Mountpoints
und Dateisystemen abhängen.

Merksatz:

    Linux hängt Speicher in den Verzeichnisbaum ein.

---

**Lernziele**

Nach dieser Seite solltest du erklären können:

    - was ein Datenträger ist
    - was eine Partition ist
    - was ein Dateisystem ist
    - was ein Mountpoint ist
    - wie man Speicherplatz prüft
    - wie man Datenträger und Partitionen anzeigt
    - was /etc/fstab macht
    - was df,
      du,
      lsblk,
      mount
      und umount machen
    - warum volle Dateisysteme Dienste stören können
    - welche typischen Speicherfehler unter Linux auftreten

---

**Grundidee**

Ein Linux-System kann verschiedene Speicherbereiche nutzen:

    - interne SSDs
    - interne HDDs
    - externe USB-Datenträger
    - Netzlaufwerke
    - NAS-Freigaben
    - virtuelle Datenträger
    - Container-Volumes
    - RAM-Dateisysteme
    - Backup-Speicher

Damit Daten dort gespeichert werden können,
braucht man meistens:

    1. Datenträger

    2. Partition oder Volume

    3. Dateisystem

    4. Mountpoint

    5. Einbindung ins System

Merksatz:

    Datenträger allein reicht nicht.
    Er muss passend partitioniert,
    formatiert
    und eingebunden sein.

---

**Datenträger**

Ein Datenträger ist das physische oder virtuelle Speichermedium.

Beispiele:

    - SSD
    - HDD
    - USB-Stick
    - SD-Karte
    - virtuelles Laufwerk einer VM
    - iSCSI-LUN
    - Cloud-Block-Storage

Unter Linux erscheinen Datenträger häufig unter:

    /dev

Beispiele:

    /dev/sda

    /dev/sdb

    /dev/nvme0n1

Merksatz:

    Datenträger erscheinen unter Linux oft als Gerätedateien unter /dev.

---

**Partition**

Eine Partition ist ein Bereich auf einem Datenträger.

Beispiel:

    /dev/sda

ist der Datenträger.

    /dev/sda1

ist die erste Partition auf diesem Datenträger.

Bei NVMe-Datenträgern sieht es oft so aus:

    /dev/nvme0n1

Datenträger

    /dev/nvme0n1p1

erste Partition

    /dev/nvme0n1p2

zweite Partition

Merksatz:

    Datenträger ist das Gerät.
    Partition ist ein Bereich darauf.

---

**Dateisystem**

Ein Dateisystem legt fest,
wie Dateien und Verzeichnisse auf einem Speicher organisiert werden.

Beispiele für Dateisysteme:

| Dateisystem | Typischer Einsatz |
|---|---|
| ext4 | sehr verbreitet unter Linux |
| XFS | häufig auf Servern |
| Btrfs | Snapshots, moderne Funktionen |
| ZFS | Integrität, Snapshots, Storage-Systeme |
| FAT32 | einfache Wechselmedien |
| exFAT | größere Wechselmedien |
| NTFS | Windows-Dateisystem |
| tmpfs | Dateisystem im RAM |

Merksatz:

    Dateisystem = Organisationsform für Dateien auf Speicher.

---

**Formatieren**

Beim Formatieren wird auf einer Partition oder einem Volume ein Dateisystem erstellt.

Beispiel:

    ext4-Dateisystem auf einer Partition erstellen

Wichtig:

    Formatieren löscht normalerweise vorhandene Daten
    oder macht sie nicht mehr direkt nutzbar.

Merksatz:

    Formatieren ist gefährlich,
    wenn Daten erhalten bleiben sollen.

---

**Mountpoint**

Ein Mountpoint ist ein Verzeichnis,
an dem ein Dateisystem eingebunden wird.

Beispiele:

    /mnt/backup

    /media/usb

    /srv/data

    /var/lib/docker

Wenn ein Dateisystem dort gemountet ist,
erscheinen seine Inhalte an dieser Stelle im Verzeichnisbaum.

Merksatz:

    Mountpoint = Einhängepunkt im Verzeichnisbaum.

---

**mount**

Mit mount kann man anzeigen,
welche Dateisysteme aktuell eingebunden sind.

Befehl:

    mount

Gefiltert anzeigen:

    mount | grep /mnt

Ein Dateisystem manuell einhängen:

    mount /dev/sdb1 /mnt/backup

Wichtig:

    Der Mountpoint muss existieren.

Beispiel:

    mkdir -p /mnt/backup

    mount /dev/sdb1 /mnt/backup

Merksatz:

    mount hängt Dateisysteme ein oder zeigt Mounts an.

---

**umount**

Mit umount wird ein Dateisystem ausgehängt.

Beispiel:

    umount /mnt/backup

oder:

    umount /dev/sdb1

Wichtig:

    Der Befehl heißt umount,
    nicht unmount.

Wenn ein Dateisystem noch benutzt wird,
kann umount fehlschlagen.

Mögliche Ursache:

    Datei ist noch offen

    Prozess nutzt das Verzeichnis

    Shell befindet sich im Mountpoint

Merksatz:

    umount hängt ein Dateisystem aus.

---

**Warum umount fehlschlagen kann**

Fehlerbild:

    target is busy

Bedeutung:

    Das Dateisystem wird noch verwendet.

Mögliche Ursachen:

    Terminal befindet sich im Verzeichnis

    Prozess liest oder schreibt Dateien

    Dienst nutzt den Mount

    Datei ist geöffnet

Prüfen kann man je nach System mit Werkzeugen wie:

    lsof

    fuser

Merksatz:

    Ein benutzter Mount kann nicht sauber ausgehängt werden.

---

**lsblk**

lsblk zeigt Blockgeräte übersichtlich an.

Befehl:

    lsblk

Mit Dateisysteminformationen:

    lsblk -f

Typische Ausgabe enthält:

    Name

    Größe

    Typ

    Mountpoint

    Dateisystem

    UUID

Beispiel:

    sda
    ├─sda1  ext4  /
    └─sda2  swap

Merksatz:

    lsblk zeigt Datenträger,
    Partitionen
    und Mountpoints.

---

**df**

df zeigt belegten und freien Speicherplatz von eingehängten Dateisystemen.

Häufiger Befehl:

    df -h

Bedeutung:

| Spalte | Bedeutung |
|---|---|
| Filesystem | Dateisystem oder Gerät |
| Size | Gesamtgröße |
| Used | belegt |
| Avail | frei |
| Use% | prozentuale Nutzung |
| Mounted on | Mountpoint |

Merksatz:

    df zeigt,
    wie voll Dateisysteme sind.

---

**df -h**

Die Option -h bedeutet:

    human-readable

Also:

    menschenlesbar

Beispiel:

    df -h

zeigt Größen in:

    K

    M

    G

    T

statt nur in Blöcken oder Bytes.

Merksatz:

    df -h ist Standard zur Speicherplatzprüfung.

---

**du**

du zeigt,
wie viel Speicher Dateien oder Verzeichnisse belegen.

Beispiele:

    du -sh /var/log

    du -sh /home/felix

    du -h /var/log

Bedeutung:

| Befehl | Bedeutung |
|---|---|
| du -sh ordner | Gesamtgröße eines Ordners |
| du -h ordner | Größen rekursiv anzeigen |
| du -sh * | Größen im aktuellen Verzeichnis zusammenfassen |

Merksatz:

    df zeigt Dateisysteme.
    du zeigt Verzeichnisgrößen.

---

**df und du unterscheiden**

| Befehl | Zeigt |
|---|---|
| df | freien und belegten Platz von Dateisystemen |
| du | Speicherverbrauch von Dateien und Ordnern |

Beispiel:

    df -h

zeigt,
ob /var voll ist.

    du -sh /var/log

zeigt,
wie groß der Logordner ist.

Merksatz:

    df für Dateisystem.
    du für Ordner.

---

**Speicherplatz voll**

Wenn ein Dateisystem voll ist,
können viele Probleme entstehen.

Mögliche Folgen:

    Dienste starten nicht

    Logs können nicht geschrieben werden

    Datenbanken stoppen oder beschädigen Transaktionen

    Updates schlagen fehl

    Benutzer können keine Dateien speichern

    Backups schlagen fehl

    temporäre Dateien können nicht erstellt werden

    System wird instabil

Merksatz:

    Volle Dateisysteme verursachen viele scheinbar unterschiedliche Fehler.

---

**Typische volle Verzeichnisse**

Häufige Ursachen für vollen Speicher:

| Verzeichnis | Möglicher Grund |
|---|---|
| /var/log | zu viele oder zu große Logs |
| /var/lib | Datenbanken, Docker, Anwendungen |
| /tmp | temporäre Dateien |
| /home | Benutzerdateien |
| /var/cache | Paketcache oder Anwendungscache |
| /var/spool | Warteschlangen, Mail, Druck |
| /backup | alte Sicherungen |

Merksatz:

    Bei vollem Speicher zuerst /var,
    Logs,
    Cache
    und Anwendungsdaten prüfen.

---

**Inodes**

Neben Speicherplatz gibt es Inodes.

Ein Inode ist eine Verwaltungsstruktur für Dateien.

Ein Dateisystem kann voll sein,
auch wenn noch Speicherplatz frei ist,
wenn alle Inodes verbraucht sind.

Prüfen:

    df -i

Typische Ursache:

    sehr viele kleine Dateien

Beispiele:

    Cache-Dateien

    Session-Dateien

    Mailspool

    temporäre Dateien

Merksatz:

    Speicher kann auch durch zu viele Dateien knapp werden.

---

**df -i**

df -i zeigt Inode-Nutzung.

Beispiel:

    df -i

Wichtige Spalten:

    Inodes

    IUsed

    IFree

    IUse%

Wenn IUse% bei 100 Prozent liegt,
können keine neuen Dateien mehr angelegt werden,
auch wenn noch Speicherplatz frei ist.

Merksatz:

    df -i prüft,
    ob zu viele Dateien existieren.

---

**/etc/fstab**

Die Datei:

    /etc/fstab

legt fest,
welche Dateisysteme beim Systemstart automatisch eingebunden werden.

fstab steht für:

    file system table

Typische Inhalte:

    Gerät oder UUID

    Mountpoint

    Dateisystemtyp

    Mountoptionen

    Dump

    fsck-Reihenfolge

Beispielzeile:

    UUID=abcd-1234 /mnt/backup ext4 defaults 0 2

Merksatz:

    /etc/fstab regelt automatische Mounts beim Start.

---

**Warum UUIDs in fstab sinnvoll sind**

Gerätenamen wie /dev/sdb1 können sich ändern,
zum Beispiel wenn Datenträger in anderer Reihenfolge erkannt werden.

UUIDs sind eindeutige Kennungen von Dateisystemen.

Anzeigen:

    lsblk -f

oder:

    blkid

Vorteil:

    Mounts bleiben stabiler,
    auch wenn sich Gerätenamen ändern.

Merksatz:

    UUID ist zuverlässiger als /dev/sdX für dauerhafte Mounts.

---

**fstab-Fehler**

Fehler in /etc/fstab können dazu führen,
dass das System beim Start Probleme bekommt
oder ein Dateisystem nicht eingehängt wird.

Typische Fehler:

    falsche UUID

    falscher Mountpoint

    Mountpoint existiert nicht

    falscher Dateisystemtyp

    falsche Optionen

    Netzwerkfreigabe beim Boot nicht erreichbar

Sicher prüfen:

    mount -a

Bedeutung:

    mount -a versucht,
    alle fstab-Einträge einzuhängen.

Merksatz:

    fstab-Änderungen immer testen,
    bevor man neu startet.

---

**mount -a**

Der Befehl:

    mount -a

liest /etc/fstab
und versucht,
alle noch nicht gemounteten Einträge einzuhängen.

Nutzen:

    fstab testen

    Fehler vor Neustart erkennen

Wichtig:

    Bei Fehlern Ausgabe genau lesen.

Merksatz:

    mount -a prüft fstab praktisch.

---

**Mountoptionen**

Mountoptionen steuern,
wie ein Dateisystem eingebunden wird.

Beispiele:

| Option | Bedeutung |
|---|---|
| defaults | Standardoptionen |
| ro | read-only, nur lesbar |
| rw | read-write, lesbar und beschreibbar |
| noexec | keine Programme ausführen |
| nosuid | SetUID ignorieren |
| nodev | Gerätedateien ignorieren |
| noatime | Zugriffszeit nicht ständig aktualisieren |
| user | Benutzer dürfen mounten |

Merksatz:

    Mountoptionen beeinflussen Sicherheit und Verhalten.

---

**read-only Mount**

Ein Dateisystem kann nur lesbar eingebunden sein.

Anzeige möglich über:

    mount

oder:

    findmnt

Typische Ursache:

    bewusst so konfiguriert

    Dateisystemfehler

    Schutzmodus

    Rettungsmodus

Folge:

    Schreiben ist nicht möglich.

Merksatz:

    ro bedeutet read-only.
    rw bedeutet read-write.

---

**findmnt**

findmnt zeigt Mounts übersichtlich an.

Befehl:

    findmnt

Bestimmten Mountpoint prüfen:

    findmnt /mnt/backup

Merksatz:

    findmnt zeigt eingebundene Dateisysteme strukturiert.

---

**blkid**

blkid zeigt Informationen zu Blockgeräten.

Befehl:

    blkid

Typische Informationen:

    UUID

    Dateisystemtyp

    Label

Merksatz:

    blkid hilft,
    UUIDs und Dateisysteme zu erkennen.

---

**Dateisystemprüfung**

Dateisysteme können geprüft und repariert werden.

Typisches Werkzeug:

    fsck

Wichtig:

    Dateisysteme sollten in der Regel nicht im eingehängten,
    aktiv genutzten Zustand repariert werden.

Risiko:

    Datenverlust

    weitere Beschädigung

    inkonsistenter Zustand

Merksatz:

    fsck vorsichtig verwenden,
    besonders auf produktiven Systemen.

---

**Swap**

Swap ist Auslagerungsspeicher.

Wenn RAM knapp wird,
kann Linux Speicherbereiche auf Datenträger auslagern.

Swap kann sein:

    Swap-Partition

    Swap-Datei

Prüfen:

    swapon --show

    free -h

Wichtig:

    Swap ersetzt keinen ausreichenden RAM.
    Sehr starke Swap-Nutzung kann das System langsam machen.

Merksatz:

    Swap hilft bei Speicherdruck,
    ist aber langsamer als RAM.

---

**free -h**

free zeigt Arbeitsspeicher und Swap.

Befehl:

    free -h

Typische Werte:

    total

    used

    free

    available

    swap

Merksatz:

    free -h zeigt RAM und Swap.

---

**Speicher und Container**

Container nutzen häufig:

    Images

    Container-Dateisysteme

    Volumes

    Bind Mounts

    Logs

    Caches

Typische Speicherorte je nach System:

    /var/lib/docker

    /var/lib/containerd

Wichtig:

    Container-Logs,
    Images
    und Volumes können viel Speicher belegen.

Merksatz:

    Container können Speicher durch Images,
    Volumes
    und Logs verbrauchen.

---

**Volumes und Bind Mounts**

Container können Daten außerhalb des Containers speichern.

Volume:

    vom Container-System verwalteter Speicher

Bind Mount:

    bestimmter Host-Ordner wird in Container eingebunden

Beispielhafte Idee:

    Host-Ordner:
    /srv/appdata

    im Container:
    /data

Vorteil:

    Daten bleiben erhalten,
    auch wenn der Container neu erstellt wird.

Merksatz:

    Containerdaten sollten nicht nur im Container-Dateisystem liegen.

---

**Netzwerkspeicher**

Linux kann Netzwerkspeicher einbinden.

Beispiele:

    NFS

    SMB/CIFS

    SSHFS

Typische Nutzung:

    Backups

    gemeinsame Daten

    NAS-Freigaben

    zentrale Projektordner

Wichtig:

    Netzwerk-Mounts hängen von Netzwerk,
    DNS,
    Berechtigungen
    und Serververfügbarkeit ab.

Merksatz:

    Netzwerkspeicher braucht Netzwerk und Rechte.

---

**NFS**

NFS steht für:

    Network File System

Typischer Einsatz:

    Linux/Unix-Netzwerkfreigaben

Vorteile:

    gut in Linux-Umgebungen integriert

    geeignet für Server-zu-Server-Freigaben

Wichtig:

    Rechte,
    UID/GID
    und Export-Regeln müssen passen.

Merksatz:

    NFS ist typisch für Linux/Unix-Freigaben.

---

**SMB/CIFS**

SMB wird häufig für Windows-Freigaben genutzt,
kann aber auch unter Linux eingebunden werden.

Typische Nutzung:

    Windows-Freigaben

    NAS-Freigaben

    gemischte Umgebungen

Wichtig:

    Benutzer,
    Passwort,
    Domain,
    Rechte
    und Mountoptionen müssen passen.

Merksatz:

    SMB/CIFS ist typisch für Windows-
    und NAS-Freigaben.

---

**Backup-Speicher**

Backup-Speicher sollte besonders geschützt werden.

Wichtig:

    getrennte Rechte

    keine normalen Benutzer mit Löschrechten

    Monitoring

    genügend Speicherplatz

    Retention

    Restore-Test

    Schutz vor Ransomware

Merksatz:

    Backup-Speicher ist sicherheitskritisch.

---

**Typische Speicherbefehle**

| Befehl | Zweck |
|---|---|
| lsblk | Datenträger und Partitionen anzeigen |
| lsblk -f | Dateisysteme und UUIDs anzeigen |
| blkid | UUIDs und Dateisystemtypen anzeigen |
| df -h | Speicherplatz von Dateisystemen anzeigen |
| df -i | Inode-Nutzung anzeigen |
| du -sh ordner | Größe eines Ordners anzeigen |
| mount | Mounts anzeigen oder einhängen |
| umount | Dateisystem aushängen |
| findmnt | Mounts strukturiert anzeigen |
| free -h | RAM und Swap anzeigen |
| swapon --show | Swap anzeigen |

---

**Typische Fehlerbilder**

| Fehlerbild | Wahrscheinliche Ursache |
|---|---|
| No space left on device | Speicherplatz oder Inodes voll |
| Read-only file system | Dateisystem nur lesbar eingebunden oder Fehler |
| target is busy | Mount wird noch verwendet |
| mount: wrong fs type | falscher Dateisystemtyp oder fehlender Treiber |
| Mount nach Neustart fehlt | fstab fehlt oder fehlerhaft |
| System startet mit Mountfehler | fstab-Fehler |
| Dienst kann nicht schreiben | Rechte, voller Speicher oder read-only |
| Backup schlägt fehl | Ziel voll, nicht gemountet oder Rechteproblem |
| Daten scheinbar verschwunden | Mount nicht aktiv oder anderer Mount überlagert Verzeichnis |
| Container belegt viel Speicher | Images, Volumes oder Logs |

---

**No space left on device**

Diese Meldung bedeutet:

    Auf dem Ziel-Dateisystem kann nicht geschrieben werden.

Mögliche Ursachen:

    Speicherplatz voll

    Inodes voll

    Quota erreicht

Prüfen:

    df -h

    df -i

    du -sh pfad

Merksatz:

    Bei No space left on device Speicherplatz und Inodes prüfen.

---

**Read-only file system**

Diese Meldung bedeutet:

    Das Dateisystem ist nur lesbar eingebunden.

Mögliche Ursachen:

    bewusst read-only gemountet

    Dateisystemfehler

    Schutzmodus nach Fehler

    Rettungssystem

Prüfen:

    mount

    findmnt

    Logs

Merksatz:

    read-only verhindert Schreibzugriffe.

---

**Mount überlagert vorhandene Daten**

Wenn ein Dateisystem auf ein Verzeichnis gemountet wird,
verdeckt es die bisherigen Inhalte dieses Verzeichnisses.

Beispiel:

    In /mnt/data liegen Dateien.

    Dann wird ein anderes Dateisystem auf /mnt/data gemountet.

    Nun sieht man die Inhalte des gemounteten Dateisystems.

Die ursprünglichen Dateien sind nicht weg,
aber durch den Mount verdeckt.

Merksatz:

    Mounts können vorhandene Verzeichnisinhalte verdecken.

---

**Sicheres Vorgehen bei fstab-Änderungen**

Vor Änderung:

    aktuelle fstab sichern

    cp /etc/fstab /etc/fstab.bak

Änderung durchführen:

    nano /etc/fstab

Testen:

    mount -a

Prüfen:

    findmnt

    df -h

Wichtig:

    Erst testen,
    dann neu starten.

Merksatz:

    fstab nie ungetestet ändern.

---

**Sichere Arbeitsweise bei Speicherproblemen**

Bei Speicherproblemen:

    1. Fehler genau lesen

    2. df -h prüfen

    3. df -i prüfen

    4. du -sh für große Ordner nutzen

    5. Logs prüfen

    6. Mountstatus prüfen

    7. Rechte prüfen

    8. Dienste erst danach neu starten

Nicht sofort:

    wahllos Dateien löschen

    Logs blind entfernen

    Datenbanken im laufenden Betrieb löschen

    Backup-Verzeichnisse ohne Prüfung leeren

Merksatz:

    Speicherprobleme erst messen,
    dann gezielt bereinigen.

---

**Typische Prüfungsfragen**

| Frage | Kurzantwort |
|---|---|
| Was ist ein Datenträger? | physisches oder virtuelles Speichermedium |
| Was ist eine Partition? | Bereich auf einem Datenträger |
| Was ist ein Dateisystem? | Organisationsform für Dateien |
| Was ist ein Mountpoint? | Einhängepunkt im Verzeichnisbaum |
| Was macht mount? | Dateisystem einhängen oder Mounts anzeigen |
| Was macht umount? | Dateisystem aushängen |
| Was zeigt lsblk? | Datenträger und Partitionen |
| Was zeigt df -h? | freien und belegten Speicherplatz |
| Was zeigt du -sh? | Größe eines Ordners |
| Was zeigt df -i? | Inode-Nutzung |
| Was macht /etc/fstab? | automatische Mounts beim Systemstart |
| Warum UUID statt /dev/sdb1? | stabiler bei wechselnder Geräteerkennung |
| Was ist Swap? | Auslagerungsspeicher |
| Was bedeutet read-only? | nur lesbar eingebunden |

---

**Typische Prüfungsfallen**

| Falle | Richtig denken |
|---|---|
| Linux mit C: und D: erklären | Linux nutzt Mountpoints |
| df und du verwechseln | df Dateisystem, du Ordner |
| Speicher frei, aber keine Datei möglich | Inodes prüfen |
| fstab ungetestet ändern | immer mount -a testen |
| /dev/sdb1 fest erwarten | Gerätenamen können sich ändern |
| UUID ignorieren | für dauerhafte Mounts besser |
| umount falsch als unmount schreiben | Befehl heißt umount |
| Mountpoint nicht vorhanden | Verzeichnis vorher erstellen |
| Mount verdeckt vorhandene Daten | Daten sind überlagert |
| Swap mit RAM gleichsetzen | Swap ist langsamer Auslagerungsspeicher |
| Containerdaten im Container lassen | Volumes oder Bind Mounts nutzen |
| Backup-Speicher normal freigeben | Sicherheitsrisiko |

---

**IHK-sichere Kurzformulierung**

Linux verwendet keine Laufwerksbuchstaben, sondern bindet Dateisysteme über Mountpoints in den gemeinsamen Verzeichnisbaum ein. Ein Datenträger kann in Partitionen aufgeteilt werden, auf denen Dateisysteme wie ext4, XFS oder Btrfs erstellt werden. Mit lsblk werden Datenträger und Partitionen angezeigt, df -h zeigt belegten und freien Speicherplatz von Dateisystemen und du -sh zeigt die Größe einzelner Verzeichnisse. Die Datei /etc/fstab legt fest, welche Dateisysteme beim Systemstart automatisch eingebunden werden. Für dauerhafte Mounts sind UUIDs oft zuverlässiger als Gerätenamen wie /dev/sdb1, weil sich Gerätenamen ändern können. Bei Speicherproblemen sollten Speicherplatz, Inodes, Mountstatus, Rechte und Logs geprüft werden.

---

**Merksätze**

    Linux nutzt Mountpoints statt Laufwerksbuchstaben.

    Datenträger erscheinen oft unter /dev.

    Partition = Bereich auf einem Datenträger.

    Dateisystem = Organisationsform für Dateien.

    Mountpoint = Einhängepunkt.

    mount hängt ein.

    umount hängt aus.

    Der Befehl heißt umount,
    nicht unmount.

    lsblk zeigt Datenträger und Partitionen.

    lsblk -f zeigt Dateisysteme und UUIDs.

    df -h zeigt Speicherplatz von Dateisystemen.

    du -sh zeigt Größe eines Ordners.

    df -i zeigt Inode-Nutzung.

    No space left on device:
    Speicherplatz oder Inodes prüfen.

    /etc/fstab regelt automatische Mounts.

    fstab-Änderungen mit mount -a testen.

    UUIDs sind stabiler als /dev/sdX.

    ro bedeutet read-only.

    rw bedeutet read-write.

    findmnt zeigt Mounts übersichtlich.

    Swap ist Auslagerungsspeicher.

    Swap ist langsamer als RAM.

    Netzwerk-Mounts brauchen Netzwerk,
    DNS
    und Rechte.

    Containerdaten brauchen Volumes oder Bind Mounts.

    Backup-Speicher besonders schützen.

    Mounts können vorhandene Verzeichnisinhalte verdecken.

    Erst messen,
    dann löschen.

# 9. Logs, Monitoring und Fehlersuche



# 9.1 Logs, Monitoring und Fehlersuche

Logs und Monitoring sind zentrale Werkzeuge,
um Linux-Systeme zu überwachen,
Fehler zu finden
und Sicherheitsereignisse nachzuvollziehen.

Unter Linux werden viele Ereignisse protokolliert:

    - Systemstarts
    - Dienststarts
    - Fehler
    - Warnungen
    - Anmeldungen
    - SSH-Zugriffe
    - Kernelmeldungen
    - Paketinstallationen
    - Netzwerkprobleme
    - Sicherheitsereignisse

Für Fachinformatiker Systemintegration ist dieses Thema besonders wichtig,
weil man im Serverbetrieb nicht nur Befehle ausführt,
sondern Probleme gezielt anhand von Logs,
Messwerten
und Statusinformationen eingrenzen muss.

Merksatz:

    Gute Fehlersuche basiert auf Logs,
    Messwerten
    und systematischer Eingrenzung.

---

**Lernziele**

Nach dieser Seite solltest du erklären können:

    - was Logs sind
    - wo Linux-Logs häufig liegen
    - was journalctl macht
    - was /var/log enthält
    - wie man Dienstlogs prüft
    - wie man aktuelle Logeinträge live mitliest
    - wie man CPU,
      RAM,
      Speicher
      und Prozesse prüft
    - wie man typische Fehlerbilder systematisch eingrenzt
    - warum Monitoring wichtig ist
    - was Alerting bedeutet

---

**Grundidee**

Logs sind Protokolle von Ereignissen.

Sie helfen bei Fragen wie:

    - Warum startet ein Dienst nicht?
    - Warum schlägt eine Anmeldung fehl?
    - Warum ist ein Server langsam?
    - Warum ist Speicher voll?
    - Warum wird eine Verbindung blockiert?
    - Wann trat der Fehler erstmals auf?
    - Welcher Benutzer war beteiligt?
    - Welche Meldung schreibt der Dienst?

Merksatz:

    Logs beantworten oft:
    was,
    wann,
    wo
    und warum etwas passiert ist.

---

**Typische Logquellen**

| Quelle | Bedeutung |
|---|---|
| systemd-Journal | zentrale systemd-Logs |
| /var/log | klassische Logdateien |
| Dienstlogs | Logs einzelner Anwendungen |
| Kernelmeldungen | Hardware, Treiber, Kernel |
| Authentifizierungslogs | Login, sudo, SSH |
| Paketmanager-Logs | Installationen und Updates |
| Webserver-Logs | HTTP-Zugriffe und Fehler |
| Firewall-Logs | erlaubter oder blockierter Verkehr |
| Anwendungslogs | Fehler und Ereignisse von Anwendungen |

Merksatz:

    Nicht alle Logs liegen an derselben Stelle.

---

**/var/log**

Viele klassische Logdateien liegen unter:

    /var/log

Beispiele:

| Pfad | Bedeutung |
|---|---|
| /var/log/syslog | allgemeine Systemmeldungen, häufig Debian/Ubuntu |
| /var/log/messages | allgemeine Systemmeldungen, häufig RHEL/Fedora-Umfeld |
| /var/log/auth.log | Authentifizierung, häufig Debian/Ubuntu |
| /var/log/secure | Authentifizierung, häufig RHEL/Fedora-Umfeld |
| /var/log/kern.log | Kernelmeldungen, je nach Distribution |
| /var/log/dmesg | Boot- und Kernelmeldungen, je nach Distribution |
| /var/log/nginx | Nginx-Logs |
| /var/log/apache2 | Apache-Logs |
| /var/log/apt | apt-Logs |
| /var/log/journal | dauerhaftes systemd-Journal, falls aktiviert |

Wichtig:

    Welche Dateien vorhanden sind,
    hängt von Distribution,
    Diensten
    und Logging-Konfiguration ab.

Merksatz:

    /var/log ist der klassische Ort für Logdateien.

---

**systemd-Journal**

Auf vielen modernen Linux-Systemen sammelt systemd Logs im Journal.

Das Journal enthält unter anderem:

    - Systemmeldungen
    - Dienstmeldungen
    - Bootmeldungen
    - Fehler
    - Warnungen
    - Logs einzelner Units

Auswertung mit:

    journalctl

Merksatz:

    journalctl liest das systemd-Journal.

---

**journalctl Grundlagen**

Alle Journal-Einträge anzeigen:

    journalctl

Letzte Einträge anzeigen:

    journalctl -n 50

Live mitlesen:

    journalctl -f

Logs seit letztem Boot:

    journalctl -b

Logs eines Dienstes:

    journalctl -u ssh

Live-Logs eines Dienstes:

    journalctl -u ssh -f

Merksatz:

    journalctl ist eines der wichtigsten Werkzeuge für Linux-Fehlersuche.

---

**Dienstlogs mit journalctl**

Wenn ein Dienst Probleme macht,
prüft man zuerst:

    systemctl status dienstname

Dann:

    journalctl -u dienstname

Beispiel:

    systemctl status nginx

    journalctl -u nginx

Nur letzte Einträge:

    journalctl -u nginx -n 50

Live mitlesen:

    journalctl -u nginx -f

Seit letztem Boot:

    journalctl -u nginx -b

Merksatz:

    Dienstproblem:
    status prüfen,
    dann journalctl -u.

---

**Zeitfilter bei journalctl**

journalctl kann nach Zeit filtern.

Beispiele:

    journalctl --since "1 hour ago"

    journalctl --since "today"

    journalctl --since "2026-07-08 10:00"

    journalctl --until "2026-07-08 12:00"

Kombiniert mit Dienst:

    journalctl -u ssh --since "today"

Merksatz:

    Zeitfilter helfen,
    Fehler auf einen Zeitraum einzugrenzen.

---

**Prioritäten bei journalctl**

Logs haben Prioritäten.

Nur Fehler anzeigen:

    journalctl -p err

Warnungen und Schlimmeres anzeigen:

    journalctl -p warning

Häufige Prioritäten:

| Priorität | Bedeutung |
|---|---|
| emerg | System unbenutzbar |
| alert | sofortiges Eingreifen nötig |
| crit | kritischer Fehler |
| err | Fehler |
| warning | Warnung |
| notice | Hinweis |
| info | Information |
| debug | Debug-Ausgabe |

Merksatz:

    journalctl -p err zeigt Fehler.

---

**dmesg**

dmesg zeigt Kernelmeldungen.

Befehl:

    dmesg

Menschenlesbare Zeitstempel:

    dmesg -T

Typische Inhalte:

    - Hardwareerkennung
    - Treiberprobleme
    - USB-Geräte
    - Festplattenfehler
    - Kernelwarnungen
    - Netzwerkadapter
    - Dateisystemfehler

Merksatz:

    dmesg hilft bei Kernel-,
    Hardware-
    und Treiberproblemen.

---

**Logdateien mit less lesen**

Lange Logdateien liest man besser mit less.

Beispiel:

    less /var/log/syslog

In less suchen:

    /error

Nächster Treffer:

    n

Verlassen:

    q

Merksatz:

    less ist besser als cat für lange Logs.

---

**Logdateien live mitlesen**

Mit tail kann man neue Logeinträge live verfolgen.

Beispiel:

    tail -f /var/log/syslog

Letzte 100 Zeilen und live weiter:

    tail -n 100 -f /var/log/syslog

Typische Nutzung:

    Dienst neu starten

    gleichzeitig Logs beobachten

    Fehler direkt sehen

Merksatz:

    tail -f liest neue Logeinträge live mit.

---

**grep in Logs**

Mit grep sucht man gezielt nach Begriffen.

Beispiele:

    grep -i "error" /var/log/syslog

    grep -i "failed" /var/log/auth.log

    grep -i "denied" /var/log/auth.log

Mit Zeilennummer:

    grep -n "error" datei.log

Groß-/Kleinschreibung ignorieren:

    grep -i "error" datei.log

Merksatz:

    grep filtert relevante Logzeilen.

---

**Typische Suchbegriffe in Logs**

| Suchbegriff | Mögliche Bedeutung |
|---|---|
| error | Fehler |
| failed | fehlgeschlagen |
| denied | verweigert |
| refused | abgelehnt |
| timeout | Zeitüberschreitung |
| not found | nicht gefunden |
| permission | Rechteproblem |
| authentication | Anmeldung |
| invalid | ungültig |
| disconnect | Verbindung getrennt |
| no space | Speicherproblem |
| read-only | nur lesbares Dateisystem |

Merksatz:

    Gute Suchbegriffe beschleunigen Logauswertung.

---

**Logrotation**

Logs wachsen mit der Zeit.

Damit sie nicht unbegrenzt Speicher verbrauchen,
werden sie rotiert.

Logrotation bedeutet:

    alte Logs werden umbenannt,
    komprimiert,
    gelöscht
    oder archiviert.

Typisches Werkzeug:

    logrotate

Beispielhafte rotierte Dateien:

    syslog

    syslog.1

    syslog.2.gz

Merksatz:

    Logrotation verhindert,
    dass Logs den Speicher füllen.

---

**Warum Logs Speicher füllen können**

Logs können sehr groß werden,
wenn:

    ein Dienst ständig Fehler schreibt

    Debug-Logging aktiviert ist

    Angriffe viele Einträge erzeugen

    Logrotation nicht funktioniert

    ein Dienst in einer Fehlerschleife hängt

Folgen:

    Dateisystem voll

    Dienste können nicht schreiben

    Updates schlagen fehl

    System wird instabil

Prüfen:

    df -h

    du -sh /var/log

Merksatz:

    Viele Logs können Ursache und Folge eines Problems sein.

---

**Monitoring**

Monitoring bedeutet:

    Systeme,
    Dienste
    Ressourcen
    und Zustände regelmäßig überwachen.

Überwacht werden zum Beispiel:

    - CPU
    - RAM
    - Speicherplatz
    - Inodes
    - Netzwerk
    - Dienste
    - Ports
    - Antwortzeiten
    - Backups
    - Zertifikate
    - Logs
    - Sicherheitsereignisse

Merksatz:

    Monitoring soll Probleme erkennen,
    bevor Benutzer sie melden.

---

**Alerting**

Alerting bedeutet:

    Bei bestimmten Ereignissen oder Grenzwerten wird eine Benachrichtigung ausgelöst.

Beispiele:

    Speicher über 90 Prozent

    Backup fehlgeschlagen

    Dienst nicht erreichbar

    Zertifikat läuft bald ab

    CPU dauerhaft sehr hoch

    viele fehlgeschlagene Logins

Wichtig:

    Alarme müssen sinnvoll sein.
    Zu viele unwichtige Alarme führen zu Alarmmüdigkeit.

Merksatz:

    Alerting macht aus Monitoring eine aktive Warnung.

---

**Wichtige Systemwerte**

| Wert | Warum wichtig? |
|---|---|
| CPU | hohe Last kann Dienste verlangsamen |
| RAM | Speichermangel führt zu Swap oder Fehlern |
| Swap | starke Nutzung kann System verlangsamen |
| Speicherplatz | volle Dateisysteme verhindern Schreibzugriffe |
| Inodes | zu viele Dateien verhindern neue Dateien |
| Load Average | zeigt Systemlast |
| Netzwerk | Verbindungsprobleme oder Paketverlust |
| Dienststatus | zeigt, ob Dienste laufen |
| Logs | zeigen Ursachen und Fehler |

Merksatz:

    Langsame Systeme brauchen Messwerte,
    keine Vermutungen.

---

**CPU und Prozesse prüfen**

Prozesse und CPU prüfen mit:

    top

oder:

    htop

Prozesse anzeigen:

    ps aux

Nach Prozess suchen:

    ps aux | grep nginx

Mögliche Ursachen hoher CPU:

    hohe Nutzerlast

    Endlosschleife

    fehlerhafter Prozess

    Angriff

    falsche Konfiguration

Merksatz:

    Hohe CPU immer pro Prozess einordnen.

---

**RAM und Swap prüfen**

RAM prüfen:

    free -h

Live prüfen:

    top

Swap prüfen:

    swapon --show

Mögliche Fehlerbilder:

    System langsam

    Prozesse werden beendet

    starke Swap-Nutzung

    Dienst startet nicht

    Out-of-Memory-Ereignis

Merksatz:

    Swap ist langsamer als RAM.
    Viel Swap kann System stark verlangsamen.

---

**Out of Memory**

Wenn der Arbeitsspeicher knapp wird,
kann Linux Prozesse beenden,
um das System zu stabilisieren.

Das nennt man häufig:

    OOM

oder:

    Out of Memory

Suchen in Logs:

    journalctl -k | grep -i "out of memory"

    dmesg -T | grep -i "killed process"

Merksatz:

    Wenn Prozesse plötzlich verschwinden,
    OOM in Kernelmeldungen prüfen.

---

**Speicherplatz prüfen**

Dateisysteme prüfen:

    df -h

Inodes prüfen:

    df -i

Große Ordner prüfen:

    du -sh /var/log

    du -sh /var/lib

    du -sh /home/*

Typische Ursachen:

    Logs

    Backups

    Datenbanken

    Container-Images

    Cache

    temporäre Dateien

Merksatz:

    No space left on device:
    df -h und df -i prüfen.

---

**Netzwerk prüfen**

IP-Adressen:

    ip addr

Routen:

    ip route

Gateway testen:

    ping -c 4 gateway-ip

DNS prüfen:

    dig example.com

Ports prüfen:

    ss -tulpen

Webdienst prüfen:

    curl -I http://localhost

Merksatz:

    Netzwerkfehler Schritt für Schritt prüfen:
    IP,
    Route,
    DNS,
    Port,
    Dienst.

---

**Dienststatus prüfen**

Dienststatus:

    systemctl status dienstname

Autostart prüfen:

    systemctl is-enabled dienstname

Aktiv prüfen:

    systemctl is-active dienstname

Logs prüfen:

    journalctl -u dienstname

Merksatz:

    Dienstfehler:
    systemctl status
    und journalctl -u.

---

**HTTP-Fehler einordnen**

| Code | Bedeutung | Wahrscheinliche Richtung |
|---|---|---|
| 200 | OK | Dienst antwortet |
| 301 / 302 | Weiterleitung | Webserver oder Anwendung |
| 401 | nicht authentifiziert | Login fehlt oder falsch |
| 403 | verboten | Rechteproblem |
| 404 | nicht gefunden | Pfad oder Ressource falsch |
| 500 | interner Serverfehler | Anwendung oder Backend |
| 502 | Bad Gateway | Proxy erreicht Backend nicht |
| 503 | Dienst nicht verfügbar | Backend oder Dienst nicht bereit |

Merksatz:

    HTTP-Code zeigt,
    auf welcher Ebene man weiter suchen sollte.

---

**Fehlersuche nach Änderung**

Wenn ein Fehler direkt nach einer Änderung auftritt,
ist diese Änderung besonders relevant.

Mögliche Änderungen:

    Update

    Konfigurationsänderung

    Firewall-Regel

    Rechteänderung

    Zertifikatswechsel

    Mountänderung

    DNS-Änderung

    Neustart

Sinnvolle Fragen:

    Was wurde geändert?

    Wann wurde geändert?

    Wer hat geändert?

    Gibt es ein Backup?

    Gibt es einen Rollback-Plan?

Merksatz:

    Fehler nach Änderung:
    Änderung zuerst prüfen.

---

**Systematische Fehlersuche**

Eine gute Reihenfolge:

    1. Fehler genau beschreiben

    2. Zeitpunkt feststellen

    3. betroffene Systeme eingrenzen

    4. letzte Änderungen prüfen

    5. Status prüfen

    6. Logs prüfen

    7. Ressourcen prüfen

    8. Netzwerk prüfen

    9. Berechtigungen prüfen

    10. Maßnahme testen und dokumentieren

Merksatz:

    Nicht raten,
    sondern eingrenzen.

---

**Einzelnes System oder viele Systeme?**

Wichtige Eingrenzung:

| Betroffen | Wahrscheinliche Richtung |
|---|---|
| ein Benutzer | Benutzerrechte, Client, Konto |
| alle Benutzer | Dienst, Server, Netzwerk, Authentifizierung |
| ein Server | Dienst, Ressourcen, lokale Konfiguration |
| alle Server | Netzwerk, DNS, zentrale Dienste |
| eine Anwendung | Anwendung, Datenbank, Backend |
| mehrere Anwendungen | Infrastruktur, DNS, Storage, Netzwerk |

Merksatz:

    Anzahl der Betroffenen hilft bei der Eingrenzung.

---

**Typische Linux-Fehlerbilder**

| Fehlerbild | Wahrscheinliche Ursache |
|---|---|
| Dienst startet nicht | Konfiguration, Rechte, Port, Abhängigkeit |
| Permission denied | Rechteproblem |
| No such file or directory | falscher Pfad oder Datei fehlt |
| No space left on device | Speicherplatz oder Inodes voll |
| Read-only file system | Dateisystem nur lesbar oder Fehler |
| Connection refused | Dienst läuft nicht oder Port geschlossen |
| Connection timed out | Firewall, Routing oder Ziel nicht erreichbar |
| Name or service not known | DNS oder Name falsch |
| Too many open files | Limit für offene Dateien erreicht |
| Out of memory | RAM knapp, OOM-Killer aktiv |
| Target is busy | Mount oder Datei wird noch verwendet |

---

**Connection refused**

Bedeutung:

    Das Zielsystem ist erreichbar,
    aber der Dienst nimmt auf diesem Port keine Verbindung an.

Mögliche Ursachen:

    Dienst läuft nicht

    falscher Port

    Dienst lauscht nur auf anderer Adresse

    lokale Firewall lehnt aktiv ab

Prüfen:

    systemctl status dienst

    ss -tulpen

    journalctl -u dienst

Merksatz:

    Connection refused:
    Ziel erreichbar,
    Dienst oder Port problematisch.

---

**Connection timed out**

Bedeutung:

    Die Verbindung erhält keine Antwort innerhalb der Zeit.

Mögliche Ursachen:

    Firewall verwirft Pakete

    Routingproblem

    Ziel nicht erreichbar

    falsche IP

    Netzwerkproblem

    Cloud Security Group blockiert

Prüfen:

    ping

    ip route

    Firewall-Regeln

    Netzwerkpfad

Merksatz:

    Timeout deutet oft auf Firewall,
    Routing
    oder Nichterreichbarkeit hin.

---

**Permission denied**

Bedeutung:

    Zugriff verweigert.

Mögliche Ursachen:

    fehlende Dateirechte

    falscher Besitzer

    falsche Gruppe

    fehlendes x-Recht auf Verzeichnis

    sudo nötig

    Dienstbenutzer hat keine Rechte

Prüfen:

    whoami

    id

    ls -l datei

    ls -ld verzeichnis

Merksatz:

    Permission denied ist meist ein Rechteproblem.

---

**No such file or directory**

Bedeutung:

    Datei oder Verzeichnis existiert nicht.

Mögliche Ursachen:

    falscher Pfad

    Tippfehler

    falsche Groß-/Kleinschreibung

    Datei wurde gelöscht

    Mount fehlt

    relativer Pfad falsch verstanden

Prüfen:

    pwd

    ls -la

    find

    mount

Merksatz:

    Linux unterscheidet Groß-
    und Kleinschreibung.

---

**Too many open files**

Bedeutung:

    Ein Prozess oder Benutzer hat zu viele Dateien,
    Sockets
    oder Verbindungen geöffnet.

Mögliche Ursachen:

    hohe Last

    Fehler in Anwendung

    zu niedriges Limit

    Verbindungsleck

Prüfen:

    Logs

    Prozessstatus

    Limits

    offene Dateien

Merksatz:

    Unter Linux zählen auch Netzwerkverbindungen als offene Dateien.

---

**Logs und Sicherheit**

Logs sind auch für Sicherheit wichtig.

Wichtige Ereignisse:

    fehlgeschlagene Logins

    sudo-Nutzung

    SSH-Zugriffe

    neue Benutzer

    Rechteänderungen

    Dienststarts

    Firewall-Blockierungen

    ungewöhnliche Prozesse

    viele Anmeldeversuche

Beispiele:

    journalctl -u ssh

    grep -i "failed" /var/log/auth.log

    grep -i "sudo" /var/log/auth.log

Merksatz:

    Sicherheitsanalyse beginnt oft in Auth-
    und Dienstlogs.

---

**Backup und Logs**

Logs können nach einem Vorfall wichtig sein.

Aber:

    Logs auf demselben kompromittierten System können manipuliert werden.

Besser:

    zentrale Logsammlung

    SIEM

    manipulationsgeschützte Logs

    Zeitserver verwenden

    ausreichende Aufbewahrung

Merksatz:

    Für Sicherheitsvorfälle sind zentrale und geschützte Logs wertvoll.

---

**Zeit und Logs**

Korrekte Uhrzeit ist für Logs wichtig.

Wenn die Systemzeit falsch ist,
werden Ereignisse schwer nachvollziehbar.

Prüfen:

    timedatectl

Zeitdienst prüfen:

    systemctl status systemd-timesyncd

oder je nach System:

    chrony

    ntpd

Merksatz:

    Ohne korrekte Zeit sind Logs schwer auswertbar.

---

**Dokumentation bei Fehlersuche**

Bei Fehlersuche dokumentieren:

    - Fehlerbild
    - Zeitpunkt
    - betroffene Systeme
    - ausgeführte Prüfungen
    - relevante Logmeldungen
    - Ursache
    - Maßnahme
    - Ergebnis
    - offene Punkte

Warum?

    Nachvollziehbarkeit

    Wiederverwendbarkeit

    Übergabe an Kollegen

    spätere Analyse

    Prüfungsrelevanz

Merksatz:

    Gute Administration dokumentiert Fehler und Lösung.

---

**Typische Befehle dieser Seite**

| Befehl | Zweck |
|---|---|
| journalctl | systemd-Journal anzeigen |
| journalctl -u dienst | Logs eines Dienstes anzeigen |
| journalctl -f | Logs live mitlesen |
| journalctl -b | Logs seit letztem Boot |
| dmesg | Kernelmeldungen anzeigen |
| dmesg -T | Kernelmeldungen mit lesbarer Zeit |
| less logfile | lange Logdatei lesen |
| tail -f logfile | Log live verfolgen |
| grep muster logfile | Log nach Muster filtern |
| systemctl status dienst | Dienststatus prüfen |
| top | Prozesse und Last live prüfen |
| free -h | RAM und Swap prüfen |
| df -h | Speicherplatz prüfen |
| df -i | Inodes prüfen |
| du -sh ordner | Ordnergröße prüfen |
| ip addr | IP-Adressen prüfen |
| ip route | Routing prüfen |
| ss -tulpen | Ports prüfen |
| curl -I URL | Webantwort prüfen |
| timedatectl | Uhrzeit und Zeitsynchronisation prüfen |

---

**Typische Prüfungsfragen**

| Frage | Kurzantwort |
|---|---|
| Was sind Logs? | Protokolle von Ereignissen |
| Wo liegen viele klassische Logs? | /var/log |
| Was macht journalctl? | systemd-Journal anzeigen |
| Wie zeigt man Dienstlogs? | journalctl -u dienst |
| Wie liest man Logs live mit? | tail -f oder journalctl -f |
| Was macht dmesg? | Kernelmeldungen anzeigen |
| Was ist Monitoring? | regelmäßige Überwachung |
| Was ist Alerting? | Benachrichtigung bei Ereignissen |
| Warum ist Logrotation wichtig? | verhindert zu große Logs |
| Was prüft df -h? | Speicherplatz |
| Was prüft free -h? | RAM und Swap |
| Was bedeutet Connection refused? | Ziel erreichbar, Dienst/Port lehnt ab |
| Was bedeutet Connection timed out? | keine Antwort, oft Firewall/Routing |
| Warum ist korrekte Zeit wichtig? | Logs müssen zeitlich stimmen |

---

**Typische Prüfungsfallen**

| Falle | Richtig denken |
|---|---|
| Logs ignorieren | Logs liefern Ursache und Zeitbezug |
| nur Dienst neu starten | erst Status und Logs prüfen |
| cat für riesige Logs nutzen | less, tail oder grep verwenden |
| Monitoring mit Logging verwechseln | Logs protokollieren, Monitoring überwacht |
| Alerting vergessen | Monitoring ohne Alarm wird leicht übersehen |
| hohe CPU ohne Prozessbezug nennen | verursachenden Prozess ermitteln |
| Speicher frei, aber Fehler beim Schreiben | Inodes prüfen |
| Zeitfehler ignorieren | falsche Zeit erschwert Loganalyse |
| Connection refused und timed out gleichsetzen | unterschiedliche Ursachen |
| nach Änderung nicht an Rollback denken | Änderungen dokumentieren und absichern |

---

**IHK-sichere Kurzformulierung**

Logs sind Protokolle von Ereignissen und dienen der Fehlersuche, Überwachung und Sicherheitsanalyse. Viele klassische Logdateien liegen unter /var/log, während auf systemd-Systemen journalctl das zentrale Journal auswertet. Dienstprobleme werden typischerweise mit systemctl status und journalctl -u geprüft. tail -f oder journalctl -f können neue Logeinträge live anzeigen. Monitoring überwacht Ressourcen und Dienste wie CPU, RAM, Speicherplatz, Inodes, Netzwerk, Ports, Backups und Zertifikate. Alerting benachrichtigt bei Grenzwerten oder Fehlern. Eine systematische Fehlersuche grenzt das Problem anhand von Fehlerbild, Zeitpunkt, betroffenen Systemen, Logs, Ressourcen, Netzwerk, Rechten und letzten Änderungen ein.

---

**Merksätze**

    Logs zeigen Ereignisse.

    Monitoring überwacht Zustände.

    Alerting warnt aktiv.

    /var/log enthält viele klassische Logs.

    journalctl liest das systemd-Journal.

    journalctl -u zeigt Dienstlogs.

    journalctl -f liest live mit.

    journalctl -b zeigt Logs seit letztem Boot.

    dmesg zeigt Kernelmeldungen.

    less ist gut für lange Logs.

    tail -f liest Logdateien live mit.

    grep filtert relevante Logzeilen.

    Logrotation verhindert zu große Logs.

    df -h prüft Speicherplatz.

    df -i prüft Inodes.

    free -h prüft RAM und Swap.

    top zeigt Last und Prozesse.

    ss zeigt Ports.

    curl prüft HTTP oder HTTPS.

    systemctl status zeigt Dienstzustand.

    Connection refused:
    Dienst oder Port problematisch.

    Connection timed out:
    Firewall,
    Routing
    oder Nichterreichbarkeit.

    Permission denied:
    Rechteproblem.

    No space left on device:
    Speicherplatz oder Inodes prüfen.

    Nach Änderung zuerst Änderung prüfen.

    Nicht raten,
    sondern eingrenzen.

    Gute Fehlersuche wird dokumentiert.

    Korrekte Uhrzeit ist wichtig für Logs.

# 10. Shell, Pipes und Umleitungen



# 10.1 Shell, Pipes und Umleitungen

Die Shell ist eines der wichtigsten Werkzeuge unter Linux.

Sie nimmt Befehle entgegen,
führt sie aus
und kann Ausgaben,
Eingaben
und Fehlermeldungen gezielt weiterleiten.

Besonders wichtig sind dabei:

    - Pipes
    - Umleitungen
    - Wildcards
    - Variablen
    - Befehlsverkettung
    - Exit-Codes
    - einfache Filterbefehle

Für Fachinformatiker Systemintegration ist dieses Thema wichtig,
weil viele administrative Aufgaben unter Linux aus mehreren kleinen Befehlen bestehen,
die miteinander kombiniert werden.

Merksatz:

    Die Stärke der Shell liegt darin,
    einfache Werkzeuge sinnvoll zu kombinieren.

---

**Lernziele**

Nach dieser Seite solltest du erklären können:

    - was eine Shell ist
    - was Bash ist
    - was Standardausgabe,
      Standardeingabe
      und Standardfehler sind
    - was Pipes machen
    - wie Umleitungen funktionieren
    - was >,
      >>,
      <,
      2>
      und &> bedeuten
    - wie man Befehle verkettet
    - was Exit-Codes sind
    - wie man grep,
      sort,
      uniq,
      wc,
      cut
      und tee sinnvoll nutzt

---

**Grundidee**

Unter Linux geben viele Befehle Text aus.

Diese Ausgabe kann man:

    - anzeigen
    - filtern
    - speichern
    - an andere Befehle weitergeben
    - in Dateien schreiben
    - zählen
    - sortieren
    - durchsuchen

Beispiel:

    ps aux | grep nginx

Bedeutung:

    ps aux zeigt Prozesse.

    grep nginx filtert nur Zeilen mit nginx.

Merksatz:

    Befehle können ihre Ausgabe an andere Befehle weitergeben.

---

**Shell**

Eine Shell ist ein Befehlsinterpreter.

Sie verarbeitet eingegebene Befehle
und startet Programme.

Bekannte Shells:

| Shell | Bedeutung |
|---|---|
| sh | klassische Unix-Shell |
| bash | Bourne Again Shell |
| zsh | moderne interaktive Shell |
| fish | benutzerfreundliche Shell |

Viele Linux-Systeme nutzen Bash als Standardshell.

Merksatz:

    Shell = Befehlsinterpreter.

---

**Bash**

Bash steht für:

    Bourne Again Shell

Bash kann:

    - Befehle ausführen
    - Variablen verwenden
    - Ausgaben umleiten
    - Pipes nutzen
    - Bedingungen auswerten
    - Schleifen ausführen
    - Skripte starten

Beispiel:

    echo "Hallo Linux"

Merksatz:

    Bash ist Shell und Skriptumgebung.

---

**Prompt**

Der Prompt ist die Eingabeaufforderung.

Beispiel:

    felix@server:~$

Bedeutung:

| Teil | Bedeutung |
|---|---|
| felix | Benutzer |
| server | Hostname |
| ~ | Home-Verzeichnis |
| $ | normaler Benutzer |

Bei Root sieht man häufig:

    root@server:~#

Merksatz:

    $ normaler Benutzer.
    # häufig Root.

---

**Standardkanäle**

Linux-Programme verwenden drei wichtige Standardkanäle.

| Kanal | Nummer | Bedeutung |
|---|---:|---|
| stdin | 0 | Standardeingabe |
| stdout | 1 | Standardausgabe |
| stderr | 2 | Standardfehler |

Beispiel:

    Ein Befehl liest Eingaben über stdin,
    schreibt normale Ergebnisse nach stdout
    und Fehlermeldungen nach stderr.

Merksatz:

    0 = Eingabe.
    1 = Ausgabe.
    2 = Fehler.

---

**Standardausgabe**

Die Standardausgabe ist die normale Ausgabe eines Befehls.

Beispiel:

    ls

zeigt Dateien im Terminal an.

Diese Ausgabe kann man umleiten oder weiterverarbeiten.

Beispiel:

    ls > dateiliste.txt

Merksatz:

    stdout ist die normale Ausgabe.

---

**Standardfehler**

Die Standardfehlerausgabe enthält Fehlermeldungen.

Beispiel:

    ls /nicht-vorhanden

Mögliche Fehlermeldung:

    No such file or directory

Diese Fehlermeldung kommt über stderr.

Merksatz:

    stderr ist für Fehlermeldungen.

---

**Ausgabe umleiten mit >**

Mit > wird die Standardausgabe in eine Datei geschrieben.

Beispiel:

    ls > dateien.txt

Wichtig:

    Wenn die Datei bereits existiert,
    wird sie überschrieben.

Beispiel:

    echo "Test" > datei.txt

schreibt Test in datei.txt
und ersetzt vorhandenen Inhalt.

Merksatz:

    > schreibt neu und überschreibt.

---

**Ausgabe anhängen mit >>**

Mit >> wird die Standardausgabe an eine Datei angehängt.

Beispiel:

    echo "Neue Zeile" >> datei.txt

Der vorhandene Inhalt bleibt erhalten.

Typische Nutzung:

    Logs erweitern

    Ergebnisse sammeln

    Text an Datei anhängen

Merksatz:

    >> hängt an.

---

**Eingabe umleiten mit <**

Mit < wird eine Datei als Eingabe für einen Befehl verwendet.

Beispiel:

    wc -l < datei.txt

Bedeutung:

    wc zählt Zeilen,
    liest die Eingabe aber aus datei.txt.

Merksatz:

    < nutzt Datei als Eingabe.

---

**Fehler umleiten mit 2>**

Mit 2> leitet man Fehlermeldungen um.

Beispiel:

    ls /nicht-vorhanden 2> fehler.txt

Bedeutung:

    Fehlermeldungen werden in fehler.txt geschrieben.

Normale Ausgabe bleibt davon getrennt.

Merksatz:

    2> leitet Fehlermeldungen um.

---

**Fehler anhängen mit 2>>**

Mit 2>> werden Fehlermeldungen an eine Datei angehängt.

Beispiel:

    ls /nicht-vorhanden 2>> fehler.log

Merksatz:

    2>> hängt Fehlermeldungen an.

---

**Ausgabe und Fehler gemeinsam umleiten**

Ausgabe und Fehler gemeinsam umleiten:

    befehl > ausgabe.log 2>&1

Bedeutung:

    stdout geht nach ausgabe.log.

    stderr wird ebenfalls dorthin geleitet.

Kurzform bei Bash:

    befehl &> ausgabe.log

Anhängen:

    befehl &>> ausgabe.log

Merksatz:

    &> leitet Ausgabe und Fehler gemeinsam um.

---

**/dev/null**

/dev/null ist ein spezielles Gerät,
das Ausgaben verwirft.

Beispiel:

    befehl > /dev/null

Fehler verwerfen:

    befehl 2> /dev/null

Alles verwerfen:

    befehl &> /dev/null

Typische Nutzung:

    unerwünschte Ausgaben unterdrücken

Wichtig:

    Nicht blind verwenden,
    weil Fehlermeldungen dann verloren gehen.

Merksatz:

    /dev/null ist der digitale Papierkorb.

---

**Pipe**

Eine Pipe leitet die Ausgabe eines Befehls an den nächsten Befehl weiter.

Zeichen:

    |

Beispiel:

    ls -l | grep ".log"

Bedeutung:

    ls -l erzeugt Ausgabe.

    grep filtert diese Ausgabe.

Merksatz:

    Pipe verbindet Befehle.

---

**Pipe-Beispiel mit Prozessen**

Beispiel:

    ps aux | grep ssh

Bedeutung:

    ps aux zeigt Prozesse.

    grep ssh filtert Zeilen mit ssh.

Typische Nutzung:

    Prozesse suchen

    Logs filtern

    Paketlisten durchsuchen

    Ausgaben zählen

Merksatz:

    Pipe macht aus mehreren einfachen Befehlen eine Auswertung.

---

**Pipe-Beispiel mit Logs**

Beispiel:

    journalctl -u ssh | grep -i "failed"

Bedeutung:

    journalctl -u ssh zeigt SSH-Logs.

    grep -i "failed" filtert fehlgeschlagene Einträge.

Merksatz:

    Logs werden mit Pipes schnell auswertbar.

---

**grep**

grep sucht nach Textmustern.

Beispiele:

    grep "error" logfile.txt

    grep -i "error" logfile.txt

    grep -n "error" logfile.txt

    grep -r "PermitRootLogin" /etc/ssh

Wichtige Optionen:

| Option | Bedeutung |
|---|---|
| -i | Groß-/Kleinschreibung ignorieren |
| -n | Zeilennummer anzeigen |
| -r | rekursiv suchen |
| -v | Treffer umkehren |
| -l | nur Dateinamen mit Treffern anzeigen |

Merksatz:

    grep filtert Text.

---

**sort**

sort sortiert Textzeilen.

Beispiel:

    cat namen.txt | sort

Numerisch sortieren:

    sort -n zahlen.txt

Rückwärts sortieren:

    sort -r namen.txt

Merksatz:

    sort sortiert Zeilen.

---

**uniq**

uniq entfernt direkt aufeinanderfolgende doppelte Zeilen.

Beispiel:

    sort namen.txt | uniq

Wichtig:

    uniq erkennt doppelte Zeilen nur,
    wenn sie nebeneinander stehen.
    Deshalb wird oft vorher sort verwendet.

Anzahl anzeigen:

    sort namen.txt | uniq -c

Merksatz:

    sort und uniq werden oft kombiniert.

---

**wc**

wc zählt Zeilen,
Wörter
und Zeichen.

Beispiele:

    wc datei.txt

    wc -l datei.txt

    ps aux | wc -l

Bedeutung:

| Option | Bedeutung |
|---|---|
| -l | Zeilen zählen |
| -w | Wörter zählen |
| -c | Bytes zählen |

Merksatz:

    wc -l zählt Zeilen.

---

**cut**

cut schneidet Spalten oder Zeichen aus Text.

Beispiel mit Trennzeichen:

    cut -d ":" -f 1 /etc/passwd

Bedeutung:

    -d ":" verwendet Doppelpunkt als Trenner.

    -f 1 gibt das erste Feld aus.

Typische Nutzung:

    einfache strukturierte Dateien auswerten

    Spalten ausgeben

Merksatz:

    cut extrahiert Felder aus Text.

---

**awk kurz eingeordnet**

awk ist ein Werkzeug zur Textverarbeitung.

Beispiel:

    awk '{print $1}' datei.txt

Bedeutung:

    gibt die erste Spalte aus.

awk ist mächtiger als cut,
weil es Bedingungen,
Berechnungen
und komplexere Ausgaben kann.

Merksatz:

    awk verarbeitet spaltenorientierten Text.

---

**sed kurz eingeordnet**

sed ist ein Stream-Editor.

Er kann Textströme verändern.

Beispiel:

    sed 's/alt/neu/g' datei.txt

Bedeutung:

    ersetzt alt durch neu in der Ausgabe.

Wichtig:

    Ohne passende Option wird die Datei nicht automatisch geändert,
    sondern nur die Ausgabe.

Merksatz:

    sed verändert Textströme.

---

**tee**

tee schreibt Ausgabe gleichzeitig auf den Bildschirm
und in eine Datei.

Beispiel:

    echo "Test" | tee datei.txt

Anhängen:

    echo "Neue Zeile" | tee -a datei.txt

Nützlich,
wenn man Ausgabe sehen und speichern möchte.

Beispiel:

    systemctl status ssh | tee ssh-status.txt

Merksatz:

    tee zeigt und speichert gleichzeitig.

---

**Befehle nacheinander ausführen mit ;**

Mit ; führt man Befehle nacheinander aus,
unabhängig davon,
ob der vorherige erfolgreich war.

Beispiel:

    echo "Start"; echo "Ende"

Auch wenn der erste Befehl fehlschlägt,
wird der zweite ausgeführt.

Merksatz:

    ; führt einfach nacheinander aus.

---

**Befehle nur bei Erfolg ausführen mit &&**

Mit && wird der zweite Befehl nur ausgeführt,
wenn der erste erfolgreich war.

Beispiel:

    mkdir backup && cp datei.txt backup/

Bedeutung:

    Nur wenn mkdir erfolgreich ist,
    wird cp ausgeführt.

Merksatz:

    && bedeutet:
    nur bei Erfolg weiter.

---

**Befehle nur bei Fehler ausführen mit ||**

Mit || wird der zweite Befehl nur ausgeführt,
wenn der erste fehlschlägt.

Beispiel:

    ping -c 1 server || echo "Server nicht erreichbar"

Merksatz:

    || bedeutet:
    nur bei Fehler ausführen.

---

**Exit-Code**

Jeder Befehl liefert einen Exit-Code zurück.

Typisch:

| Exit-Code | Bedeutung |
|---|---|
| 0 | erfolgreich |
| ungleich 0 | Fehler oder besonderer Zustand |

Den letzten Exit-Code anzeigen:

    echo $?

Beispiel:

    ls /etc

    echo $?

Merksatz:

    Exit-Code 0 bedeutet Erfolg.

---

**Warum Exit-Codes wichtig sind**

Exit-Codes sind wichtig für:

    - Skripte
    - Automatisierung
    - && und ||
    - Monitoring
    - Fehlerbehandlung
    - Cronjobs
    - systemd-Units

Beispiel:

    grep "root" /etc/passwd

    echo $?

Wenn grep etwas findet,
ist der Exit-Code 0.
Wenn nichts gefunden wird,
ist der Exit-Code ungleich 0.

Merksatz:

    Skripte entscheiden oft anhand von Exit-Codes.

---

**Variablen**

In der Shell können Variablen verwendet werden.

Beispiel:

    NAME="Felix"

Ausgeben:

    echo "$NAME"

Wichtig:

    Keine Leerzeichen um das Gleichheitszeichen.

Richtig:

    NAME="Felix"

Falsch:

    NAME = "Felix"

Merksatz:

    Variablen speichern Werte.

---

**Umgebungsvariablen**

Umgebungsvariablen beeinflussen Programme und Shell-Verhalten.

Beispiele:

| Variable | Bedeutung |
|---|---|
| HOME | Home-Verzeichnis |
| USER | Benutzername |
| PATH | Suchpfade für Programme |
| SHELL | aktuelle Shell |
| PWD | aktuelles Verzeichnis |

Anzeigen:

    echo "$HOME"

    echo "$PATH"

Alle Umgebungsvariablen anzeigen:

    env

Merksatz:

    Umgebungsvariablen beschreiben die Umgebung eines Prozesses.

---

**PATH**

PATH enthält Verzeichnisse,
in denen die Shell nach Programmen sucht.

Anzeigen:

    echo "$PATH"

Beispielinhalt:

    /usr/local/bin:/usr/bin:/bin

Wenn man einen Befehl eingibt,
sucht die Shell in diesen Verzeichnissen.

Prüfen,
welches Programm ausgeführt wird:

    which ssh

Merksatz:

    PATH bestimmt,
    wo Befehle gesucht werden.

---

**Quotes**

Anführungszeichen beeinflussen,
wie die Shell Text verarbeitet.

| Zeichen | Bedeutung |
|---|---|
| " " | Variablen werden ausgewertet |
| ' ' | Text bleibt fast vollständig unverändert |
| \ | maskiert ein einzelnes Zeichen |

Beispiele:

    NAME="Felix"

    echo "Hallo $NAME"

Ausgabe:

    Hallo Felix

Beispiel:

    echo 'Hallo $NAME'

Ausgabe:

    Hallo $NAME

Merksatz:

    Doppelte Quotes erlauben Variablen.
    Einfache Quotes schützen Text stärker.

---

**Wildcards**

Wildcards sind Platzhalter.

| Wildcard | Bedeutung |
|---|---|
| * | beliebige Zeichen |
| ? | genau ein Zeichen |
| [abc] | eines der Zeichen a, b oder c |

Beispiele:

    ls *.log

    rm *.tmp

    cp backup-?.tar /tmp/

Merksatz:

    * steht für beliebige Zeichen.

---

**Achtung bei Wildcards und rm**

Gefährlich:

    rm *

Noch gefährlicher:

    rm -rf *

Sicherer prüfen:

    echo *

    ls

    pwd

Dann erst löschen.

Merksatz:

    Vor rm mit Wildcards immer prüfen,
    was betroffen ist.

---

**Befehlshistorie**

Die Shell speichert häufig eine Befehlshistorie.

Anzeigen:

    history

Letzten Befehl erneut ausführen:

    !!

Nach Befehlen suchen:

    Strg + R

Wichtig:

    Keine Passwörter oder Geheimnisse direkt in Befehle schreiben,
    weil sie in der Historie landen können.

Merksatz:

    history ist praktisch,
    kann aber Geheimnisse verraten.

---

**Tab-Vervollständigung**

Mit Tab kann die Shell Befehle,
Dateinamen
und Pfade vervollständigen.

Vorteile:

    weniger Tippfehler

    schnelleres Arbeiten

    Pfade prüfen

    Befehle entdecken

Merksatz:

    Tab spart Zeit und reduziert Tippfehler.

---

**Aliases**

Aliases sind Abkürzungen für Befehle.

Beispiel:

    alias ll='ls -la'

Danach kann man eingeben:

    ll

und es wird ausgeführt:

    ls -la

Wichtig:

    Aliases gelten je nach Konfiguration nur in der aktuellen Shell
    oder dauerhaft über Dateien wie ~/.bashrc.

Merksatz:

    Aliases sind Befehlsabkürzungen.

---

**.bashrc und .profile**

Benutzerspezifische Shell-Konfigurationen liegen häufig in:

    ~/.bashrc

    ~/.profile

Dort können stehen:

    Aliases

    Umgebungsvariablen

    Prompt-Konfiguration

    Shell-Funktionen

    PATH-Erweiterungen

Wichtig:

    Fehler in diesen Dateien können Shell-Verhalten beeinflussen.

Merksatz:

    ~/.bashrc beeinflusst die interaktive Bash.

---

**Typische Befehlsketten**

Prozesse nach nginx suchen:

    ps aux | grep nginx

Fehler in Logs zählen:

    grep -i "error" /var/log/syslog | wc -l

Größte Ordner anzeigen:

    du -sh * | sort -h

Benutzer aus /etc/passwd anzeigen:

    cut -d ":" -f 1 /etc/passwd

Doppelte Zeilen zählen:

    sort datei.txt | uniq -c

Merksatz:

    Pipes machen Auswertungen aus einfachen Befehlen.

---

**Typische Fehlerbilder**

| Fehlerbild | Wahrscheinliche Ursache |
|---|---|
| Datei leer nach Befehl | > hat Datei überschrieben |
| Fehler nicht in Datei | stderr wurde nicht umgeleitet |
| Befehl nicht gefunden | PATH oder Paket fehlt |
| Variable leer | falsch gesetzt oder falsch zitiert |
| rm löscht zu viel | Wildcard falsch verwendet |
| grep findet nichts | Groß-/Kleinschreibung oder Muster falsch |
| Pipe liefert nichts | erster Befehl erzeugt keine passende Ausgabe |
| Permission denied | fehlende Rechte |
| Ausgabe fehlt | nach /dev/null umgeleitet |
| Skript reagiert falsch | Exit-Code nicht beachtet |

---

**Befehl nicht gefunden**

Fehlermeldung:

    command not found

Mögliche Ursachen:

    Paket nicht installiert

    Tippfehler

    Befehl liegt nicht im PATH

    Skript nicht ausführbar

    falsche Shell

Prüfen:

    which befehl

    echo "$PATH"

    ls -l datei

Merksatz:

    command not found bedeutet:
    Shell findet den Befehl nicht.

---

**Permission denied bei Skript**

Fehlerbild:

    ./script.sh: Permission denied

Mögliche Ursachen:

    Skript hat kein Ausführrecht

    Dateisystem ist mit noexec gemountet

    falsche Rechte

Prüfen:

    ls -l script.sh

Ausführbar machen:

    chmod +x script.sh

Starten:

    ./script.sh

Merksatz:

    Skript direkt starten braucht x-Recht.

---

**Sichere Arbeitsweise in der Shell**

Vor riskanten Befehlen:

    pwd

    ls -la

    echo *.tmp

    Befehl ohne Löschung testen,
    wenn möglich

Bei Umleitungen:

    > überschreibt

    >> hängt an

Bei Root-Rechten:

    Befehl genau prüfen

    Pfad genau prüfen

    Wildcards vermeiden oder vorher testen

Merksatz:

    In der Shell erst prüfen,
    dann ausführen.

---

**Typische Prüfungsfragen**

| Frage | Kurzantwort |
|---|---|
| Was ist eine Shell? | Befehlsinterpreter |
| Was ist Bash? | verbreitete Linux-Shell |
| Was macht eine Pipe? | Ausgabe an nächsten Befehl weitergeben |
| Was macht >? | Ausgabe in Datei schreiben und überschreiben |
| Was macht >>? | Ausgabe an Datei anhängen |
| Was macht 2>? | Fehlerausgabe umleiten |
| Was ist stdout? | Standardausgabe |
| Was ist stderr? | Standardfehler |
| Was ist stdin? | Standardeingabe |
| Was bedeutet Exit-Code 0? | Erfolg |
| Was macht grep? | Text filtern |
| Was macht wc -l? | Zeilen zählen |
| Was macht sort? | Zeilen sortieren |
| Was macht uniq? | doppelte Nachbarzeilen entfernen |
| Was macht tee? | Ausgabe anzeigen und speichern |

---

**Typische Prüfungsfallen**

| Falle | Richtig denken |
|---|---|
| > und >> verwechseln | > überschreibt, >> hängt an |
| stderr nicht umleiten | Fehler gehen über Kanal 2 |
| Pipe mit Umleitung gleichsetzen | Pipe zu Befehl, Umleitung zu Datei |
| grep ohne -i bei unbekannter Schreibweise | -i ignoriert Groß-/Kleinschreibung |
| uniq ohne sort nutzen | doppelte Zeilen müssen nebeneinander stehen |
| rm mit * unterschätzen | vorher mit echo oder ls prüfen |
| Variablen mit Leerzeichen setzen | NAME="Wert", nicht NAME = "Wert" |
| einfache und doppelte Quotes verwechseln | einfache Quotes werten Variablen nicht aus |
| command not found falsch deuten | Paket, PATH oder Tippfehler prüfen |
| Exit-Codes ignorieren | wichtig für Skripte und Automatisierung |

---

**IHK-sichere Kurzformulierung**

Die Shell ist ein Befehlsinterpreter, der Befehle ausführt und deren Ein- und Ausgaben steuern kann. Linux unterscheidet Standardeingabe, Standardausgabe und Standardfehler mit den Kanälen 0, 1 und 2. Mit Pipes wird die Ausgabe eines Befehls an einen weiteren Befehl weitergegeben. Mit > wird Ausgabe in eine Datei geschrieben und überschrieben, mit >> wird sie angehängt. Fehlerausgaben können mit 2> umgeleitet werden. Werkzeuge wie grep, sort, uniq, wc, cut, awk, sed und tee werden häufig kombiniert, um Text, Logs und Befehlsausgaben auszuwerten. Exit-Codes zeigen an, ob ein Befehl erfolgreich war, und sind besonders wichtig für Skripte und Automatisierung.

---

**Merksätze**

    Shell = Befehlsinterpreter.

    Bash ist eine verbreitete Shell.

    stdin = Eingabe.

    stdout = Ausgabe.

    stderr = Fehlerausgabe.

    0 = stdin.

    1 = stdout.

    2 = stderr.

    > überschreibt.

    >> hängt an.

    2> leitet Fehler um.

    &> leitet Ausgabe und Fehler um.

    /dev/null verwirft Ausgaben.

    Pipe verbindet Befehle.

    grep filtert Text.

    sort sortiert Zeilen.

    uniq entfernt doppelte Nachbarzeilen.

    wc -l zählt Zeilen.

    cut extrahiert Felder.

    awk verarbeitet Spalten.

    sed verändert Textströme.

    tee zeigt und speichert gleichzeitig.

    ; führt nacheinander aus.

    && läuft nur bei Erfolg weiter.

    || läuft nur bei Fehler weiter.

    Exit-Code 0 bedeutet Erfolg.

    PATH bestimmt,
    wo Befehle gesucht werden.

    Doppelte Quotes werten Variablen aus.

    Einfache Quotes schützen Text stärker.

    * steht für beliebige Zeichen.

    Vor rm mit Wildcards immer prüfen.

    Erst testen,
    dann ausführen.

# 11. Bash-Scripting Grundlagen



# 11.1 Bash-Scripting Grundlagen

**Bash-Scripting Grundlagen**

Bash-Skripte sind Textdateien,
in denen mehrere Shell-Befehle gespeichert werden.

Statt Befehle immer wieder einzeln in die Shell einzugeben,
kann man sie in einem Skript zusammenfassen
und wiederholt ausführen.

Für Fachinformatiker Systemintegration ist Bash-Scripting wichtig,
weil viele administrative Aufgaben automatisiert werden können.

Beispiele:

    - Backups starten
    - Logdateien prüfen
    - Dienste überwachen
    - Dateien aufräumen
    - Benutzerinformationen auswerten
    - Netzwerkprüfungen durchführen
    - wiederkehrende Befehle automatisieren

Merksatz:

    Ein Bash-Skript ist eine automatisierte Befehlsfolge.

---

**Lernziele**

Nach dieser Seite solltest du erklären können:

    - was ein Bash-Skript ist
    - was ein Shebang ist
    - wie man ein Skript ausführbar macht
    - wie Variablen genutzt werden
    - wie Parameter übergeben werden
    - wie if-Abfragen funktionieren
    - wie Schleifen grundsätzlich funktionieren
    - was Exit-Codes bedeuten
    - warum Kommentare wichtig sind
    - wie man einfache Admin-Aufgaben automatisiert

---

**Grundidee**

Ein Bash-Skript ist eine normale Textdatei mit Shell-Befehlen.

Beispiel:

    echo "Backup startet"
    date
    df -h

Wenn diese Befehle in einer Datei gespeichert werden,
kann man sie später als Skript ausführen.

Typische Dateiendung:

    .sh

Beispiel:

    backup.sh

Wichtig:

    Die Endung .sh ist hilfreich,
    aber nicht allein entscheidend.
    Entscheidend sind Inhalt,
    Rechte
    und Ausführung.

Merksatz:

    Bash-Skripte bestehen aus Shell-Befehlen.

---

**Warum Skripte nutzen?**

Skripte helfen bei:

    - Wiederholung
    - Automatisierung
    - Standardisierung
    - Dokumentation
    - Fehlervermeidung
    - schneller Ausführung
    - reproduzierbaren Abläufen

Beispiel:

    Statt jeden Tag mehrere Befehle manuell einzugeben,
    kann ein Skript diese Befehle automatisch ausführen.

Merksatz:

    Skripte machen wiederkehrende Aufgaben wiederholbar.

---

**Ein erstes Skript**

Datei erstellen:

    nano hallo.sh

Inhalt:

    #!/bin/bash

    echo "Hallo Linux"
    date
    whoami

Speichern und schließen.

Ausführbar machen:

    chmod +x hallo.sh

Starten:

    ./hallo.sh

Merksatz:

    Skript erstellen,
    ausführbar machen,
    starten.

---

**Shebang**

Die erste Zeile eines Skripts ist häufig der Shebang.

Beispiel:

    #!/bin/bash

Bedeutung:

    Das Skript soll mit /bin/bash ausgeführt werden.

Alternative:

    #!/usr/bin/env bash

Bedeutung:

    bash wird über die Umgebung gesucht.

Wichtig:

    Der Shebang ist besonders wichtig,
    wenn ein Skript direkt gestartet wird.

Merksatz:

    Shebang legt fest,
    welcher Interpreter das Skript ausführt.

---

**Skript ausführen**

Es gibt mehrere Möglichkeiten,
ein Skript auszuführen.

Direkt starten:

    ./script.sh

Dafür braucht das Skript Ausführrecht.

Ausführen mit bash:

    bash script.sh

Dafür braucht das Skript nicht zwingend Ausführrecht,
weil bash die Datei liest.

Unterschied:

| Startart | Bedeutung |
|---|---|
| ./script.sh | Skript direkt ausführen, Shebang und x-Recht wichtig |
| bash script.sh | Skript mit Bash ausführen |
| sh script.sh | Skript mit sh ausführen, kann anders funktionieren |

Merksatz:

    ./script.sh nutzt Shebang und Ausführrecht.
    bash script.sh nutzt Bash direkt.

---

**Ausführrecht setzen**

Ein Skript direkt ausführbar machen:

    chmod +x script.sh

Prüfen:

    ls -l script.sh

Beispiel:

    -rwxr-xr-x script.sh

Das x bedeutet:

    ausführbar

Wenn x fehlt,
kommt oft:

    Permission denied

Merksatz:

    Direkt gestartete Skripte brauchen x-Recht.

---

**Aktuelles Verzeichnis und ./ erklären**

Wenn man ein Skript im aktuellen Verzeichnis starten möchte,
nutzt man:

    ./script.sh

Bedeutung:

    Starte script.sh aus dem aktuellen Verzeichnis.

Warum nicht einfach:

    script.sh

Weil das aktuelle Verzeichnis normalerweise nicht im PATH enthalten ist.

Merksatz:

    ./ bedeutet:
    aus dem aktuellen Verzeichnis.

---

**Kommentare**

Kommentare erklären,
was ein Skript macht.

Kommentarzeilen beginnen mit:

    #

Beispiel:

    # Dieses Skript zeigt Systeminformationen an

    echo "System:"
    hostname

Kommentare werden nicht ausgeführt.

Vorteile:

    verständlicher

    wartbarer

    besser für Übergabe

    besser für Fehlersuche

Merksatz:

    Kommentare erklären den Zweck,
    nicht jeden einzelnen offensichtlichen Befehl.

---

**echo**

echo gibt Text aus.

Beispiele:

    echo "Hallo"

    echo "Backup startet"

    echo "Aktueller Benutzer: $USER"

Typische Nutzung:

    Statusmeldungen

    Debug-Ausgaben

    einfache Benutzerinformationen

Merksatz:

    echo schreibt Text in die Ausgabe.

---

**Variablen**

Variablen speichern Werte.

Beispiel:

    NAME="Felix"

    echo "$NAME"

Wichtig:

    Keine Leerzeichen um das Gleichheitszeichen.

Richtig:

    NAME="Felix"

Falsch:

    NAME = "Felix"

Merksatz:

    Variable setzen ohne Leerzeichen.

---

**Variablen verwenden**

Variablen werden mit $ angesprochen.

Beispiel:

    SERVER="web01"

    echo "Servername: $SERVER"

Sicherer Stil:

    echo "Servername: ${SERVER}"

Warum?

    ${SERVER} grenzt den Variablennamen sauber ab.

Merksatz:

    $VARIABLE liest den Wert einer Variable.

---

**Anführungszeichen bei Variablen**

Variablen sollten meistens in doppelte Anführungszeichen gesetzt werden.

Beispiel:

    DATEI="Meine Datei.txt"

    cat "$DATEI"

Ohne Anführungszeichen würde die Shell den Dateinamen wegen des Leerzeichens falsch aufteilen.

Merksatz:

    Variablen in Skripten meistens quoten:
    "$VARIABLE"

---

**Einfache und doppelte Anführungszeichen**

| Zeichen | Wirkung |
|---|---|
| " " | Variablen werden ausgewertet |
| ' ' | Variablen werden nicht ausgewertet |

Beispiel:

    NAME="Felix"

    echo "Hallo $NAME"

Ausgabe:

    Hallo Felix

Beispiel:

    echo 'Hallo $NAME'

Ausgabe:

    Hallo $NAME

Merksatz:

    Doppelte Quotes erlauben Variablen.
    Einfache Quotes schützen Text.

---

**Befehlsausgabe in Variable speichern**

Die Ausgabe eines Befehls kann in einer Variable gespeichert werden.

Beispiel:

    HEUTE=$(date)

    echo "$HEUTE"

Hostname speichern:

    HOST=$(hostname)

    echo "System: $HOST"

Merksatz:

    $(befehl) speichert Befehlsausgabe.

---

**Parameter an Skripte übergeben**

Skripte können Parameter erhalten.

Beispielaufruf:

    ./backup.sh /home/felix

Im Skript:

    echo "Erster Parameter: $1"

Wichtige Parameter:

| Variable | Bedeutung |
|---|---|
| $0 | Name des Skripts |
| $1 | erster Parameter |
| $2 | zweiter Parameter |
| $3 | dritter Parameter |
| $# | Anzahl der Parameter |
| "$@" | alle Parameter einzeln sauber übergeben |

Merksatz:

    $1 ist der erste übergebene Parameter.

---

**Beispiel mit Parameter**

Skript:

    #!/bin/bash

    echo "Skriptname: $0"
    echo "Erster Parameter: $1"
    echo "Anzahl Parameter: $#"

Start:

    ./test.sh server01

Ausgabe sinngemäß:

    Skriptname: ./test.sh
    Erster Parameter: server01
    Anzahl Parameter: 1

Merksatz:

    Parameter machen Skripte flexibel.

---

**Prüfen,
ob Parameter fehlt**

Beispiel:

    #!/bin/bash

    if [ -z "$1" ]; then
        echo "Fehler: Bitte Dateiname angeben"
        exit 1
    fi

    echo "Datei: $1"

Bedeutung:

    -z prüft,
    ob eine Zeichenkette leer ist.

Merksatz:

    Eingaben prüfen,
    bevor das Skript weiterarbeitet.

---

**Exit-Code**

Ein Skript kann mit einem Exit-Code beendet werden.

Beispiel:

    exit 0

bedeutet:

    erfolgreich

Beispiel:

    exit 1

bedeutet:

    Fehler

Allgemein:

| Exit-Code | Bedeutung |
|---|---|
| 0 | Erfolg |
| ungleich 0 | Fehler oder besonderer Zustand |

Merksatz:

    Exit-Code 0 bedeutet Erfolg.

---

**Letzten Exit-Code anzeigen**

Nach einem Befehl:

    echo $?

Beispiel:

    ls /etc

    echo $?

Wenn der Befehl erfolgreich war,
ist der Exit-Code meist:

    0

Wenn der Befehl fehlschlägt,
ist er ungleich 0.

Merksatz:

    $? enthält den Exit-Code des letzten Befehls.

---

**if-Abfrage**

Mit if kann ein Skript Entscheidungen treffen.

Grundstruktur:

    if [ Bedingung ]; then
        Befehl
    fi

Beispiel:

    if [ -f "/etc/hosts" ]; then
        echo "Datei existiert"
    fi

Merksatz:

    if führt Befehle abhängig von Bedingungen aus.

---

**if,
else
und elif**

Beispiel:

    if [ "$1" = "start" ]; then
        echo "Starte Dienst"
    elif [ "$1" = "stop" ]; then
        echo "Stoppe Dienst"
    else
        echo "Unbekannter Parameter"
    fi

Bedeutung:

| Schlüsselwort | Bedeutung |
|---|---|
| if | wenn |
| elif | sonst wenn |
| else | sonst |
| fi | Ende der if-Abfrage |

Merksatz:

    fi beendet die if-Abfrage.

---

**Wichtige Dateitests**

| Test | Bedeutung |
|---|---|
| -f DATEI | normale Datei existiert |
| -d PFAD | Verzeichnis existiert |
| -e PFAD | Datei oder Verzeichnis existiert |
| -r DATEI | lesbar |
| -w DATEI | beschreibbar |
| -x DATEI | ausführbar |
| -s DATEI | Datei existiert und ist nicht leer |

Beispiele:

    if [ -d "/var/log" ]; then
        echo "Logverzeichnis vorhanden"
    fi

    if [ -x "./script.sh" ]; then
        echo "Skript ist ausführbar"
    fi

Merksatz:

    Dateitests prüfen Pfade und Rechte.

---

**Zeichenketten vergleichen**

| Test | Bedeutung |
|---|---|
| "$A" = "$B" | gleich |
| "$A" != "$B" | ungleich |
| -z "$A" | leer |
| -n "$A" | nicht leer |

Beispiel:

    if [ "$USER" = "root" ]; then
        echo "Du bist root"
    fi

Merksatz:

    Strings immer in Quotes vergleichen.

---

**Zahlen vergleichen**

| Test | Bedeutung |
|---|---|
| -eq | gleich |
| -ne | ungleich |
| -lt | kleiner als |
| -le | kleiner oder gleich |
| -gt | größer als |
| -ge | größer oder gleich |

Beispiel:

    ANZAHL=5

    if [ "$ANZAHL" -gt 3 ]; then
        echo "Mehr als 3"
    fi

Merksatz:

    Zahlen in Bash mit -eq,
    -lt,
    -gt vergleichen.

---

**for-Schleife**

Eine for-Schleife wiederholt Befehle für mehrere Werte.

Beispiel:

    for DATEI in *.log; do
        echo "Logdatei: $DATEI"
    done

Bedeutung:

    Für jede Datei,
    die auf .log endet,
    wird der Befehl ausgeführt.

Merksatz:

    for läuft über eine Liste von Werten.

---

**while-Schleife**

Eine while-Schleife läuft,
solange eine Bedingung wahr ist.

Beispiel:

    ZAHL=1

    while [ "$ZAHL" -le 5 ]; do
        echo "$ZAHL"
        ZAHL=$((ZAHL + 1))
    done

Merksatz:

    while läuft,
    solange die Bedingung stimmt.

---

**case-Abfrage**

case eignet sich gut,
wenn ein Parameter mehrere mögliche Werte haben kann.

Beispiel:

    case "$1" in
        start)
            echo "Starte"
            ;;
        stop)
            echo "Stoppe"
            ;;
        restart)
            echo "Starte neu"
            ;;
        *)
            echo "Unbekannter Parameter"
            exit 1
            ;;
    esac

Merksatz:

    case ist übersichtlich für mehrere Auswahlmöglichkeiten.

---

**Rechnen in Bash**

Einfache Rechnungen:

    ZAHL=5

    ERGEBNIS=$((ZAHL + 3))

    echo "$ERGEBNIS"

Weitere Beispiele:

    A=10
    B=2

    echo $((A + B))
    echo $((A - B))
    echo $((A * B))
    echo $((A / B))

Wichtig:

    Bash rechnet hier ganzzahlig.

Merksatz:

    $(( ... )) nutzt arithmetische Auswertung.

---

**read**

Mit read kann ein Skript Benutzereingaben lesen.

Beispiel:

    echo "Name eingeben:"
    read NAME

    echo "Hallo $NAME"

Mit Eingabeaufforderung:

    read -p "Name: " NAME

Merksatz:

    read liest Eingaben vom Benutzer.

---

**Funktionen**

Funktionen fassen wiederverwendbare Befehle zusammen.

Beispiel:

    check_disk() {
        df -h
    }

    check_disk

Vorteile:

    Skript wird übersichtlicher

    Wiederholungen werden reduziert

    Aufgaben werden gegliedert

Merksatz:

    Funktionen machen Skripte strukturierter.

---

**set -e**

Mit set -e kann ein Skript beendet werden,
wenn ein Befehl fehlschlägt.

Beispiel:

    #!/bin/bash
    set -e

    mkdir /tmp/testordner
    cp datei.txt /tmp/testordner/

Wichtig:

    set -e kann hilfreich sein,
    muss aber bewusst genutzt werden,
    weil nicht jeder ungleiche Exit-Code automatisch ein echter Fehler sein muss.

Merksatz:

    set -e beendet das Skript bei Fehlern schneller.

---

**set -u**

Mit set -u erzeugt die Shell einen Fehler,
wenn eine nicht gesetzte Variable verwendet wird.

Beispiel:

    set -u

Vorteil:

    Tippfehler bei Variablennamen fallen schneller auf.

Merksatz:

    set -u schützt vor unbemerkten leeren Variablen.

---

**set -o pipefail**

Normalerweise zählt bei einer Pipe oft nur der Exit-Code des letzten Befehls.

Mit:

    set -o pipefail

wird ein Fehler innerhalb einer Pipe besser erkannt.

Beispiel:

    grep "Fehler" datei.txt | wc -l

Wenn grep wegen fehlender Datei fehlschlägt,
soll das Skript dies erkennen können.

Merksatz:

    pipefail macht Fehler in Pipes sichtbarer.

---

**Häufiger sicherer Skriptanfang**

Ein häufig genutzter sicherer Einstieg ist:

    #!/bin/bash
    set -euo pipefail

Bedeutung:

| Teil | Bedeutung |
|---|---|
| set -e | bei Fehler abbrechen |
| set -u | nicht gesetzte Variablen als Fehler behandeln |
| set -o pipefail | Fehler in Pipes erkennen |

Wichtig:

    Diese Optionen sind nützlich,
    aber man muss verstehen,
    wie sie wirken.

Merksatz:

    set -euo pipefail macht Skripte strenger.

---

**Temporäre Dateien**

Skripte sollten temporäre Dateien vorsichtig verwenden.

Besser als feste Namen:

    mktemp

Beispiel:

    TEMPFILE=$(mktemp)

    echo "Test" > "$TEMPFILE"

    cat "$TEMPFILE"

    rm "$TEMPFILE"

Warum?

    eindeutiger Dateiname

    weniger Konflikte

    sicherer als feste Namen in /tmp

Merksatz:

    Temporäre Dateien besser mit mktemp erzeugen.

---

**Skript mit Logausgabe**

Beispiel:

    #!/bin/bash

    LOGDATEI="/tmp/mein-script.log"

    echo "Start: $(date)" >> "$LOGDATEI"
    df -h >> "$LOGDATEI"
    echo "Ende: $(date)" >> "$LOGDATEI"

Merksatz:

    Skripte sollten wichtige Aktionen protokollieren.

---

**Beispiel: Speicher prüfen**

Ein einfaches Skript:

    #!/bin/bash

    echo "Speicherprüfung auf $(hostname)"
    df -h

Erweitert mit Logdatei:

    #!/bin/bash

    LOG="/tmp/speichercheck.log"

    echo "Prüfung: $(date)" >> "$LOG"
    df -h >> "$LOG"

Merksatz:

    Kleine Skripte können Admin-Prüfungen automatisieren.

---

**Beispiel: Dienststatus prüfen**

Beispiel:

    #!/bin/bash

    DIENST="ssh"

    if systemctl is-active --quiet "$DIENST"; then
        echo "$DIENST läuft"
    else
        echo "$DIENST läuft nicht"
        exit 1
    fi

Bedeutung:

    Das Skript prüft,
    ob der Dienst aktiv ist.

Merksatz:

    Skripte können Dienstzustände automatisch prüfen.

---

**Beispiel: Datei sichern**

Beispiel:

    #!/bin/bash

    DATEI="/etc/hosts"
    BACKUP="/tmp/hosts.backup"

    if [ -f "$DATEI" ]; then
        cp "$DATEI" "$BACKUP"
        echo "Backup erstellt: $BACKUP"
    else
        echo "Datei nicht gefunden: $DATEI"
        exit 1
    fi

Merksatz:

    Vor Änderungen können Skripte automatisch Sicherungen erstellen.

---

**Cron und Skripte**

Skripte können regelmäßig über cron gestartet werden.

Beispielhafte Aufgaben:

    tägliches Backup

    Logprüfung

    Speicherprüfung

    Aufräumen temporärer Dateien

    Monitoring-Check

Wichtig:

    Cron hat oft eine andere Umgebung als die interaktive Shell.

Deshalb in Skripten möglichst:

    absolute Pfade nutzen

    PATH bewusst setzen

    Logs schreiben

    Fehlerausgaben umleiten

Merksatz:

    Skripte in cron brauchen klare Pfade und Logging.

---

**Typische Fehler in Bash-Skripten**

| Fehler | Ursache |
|---|---|
| command not found | Paket fehlt, PATH falsch oder Tippfehler |
| Permission denied | Skript nicht ausführbar oder Rechteproblem |
| Variable leer | nicht gesetzt oder falsch geschrieben |
| Syntax error | Klammer, Quote oder Schlüsselwort fehlt |
| Datei nicht gefunden | relativer Pfad falsch |
| Skript läuft per Hand, aber nicht in cron | andere Umgebung oder PATH |
| if funktioniert nicht | Leerzeichen bei [ ] falsch |
| Schleife verarbeitet Dateinamen falsch | Variablen nicht gequotet |
| Pipe-Fehler bleibt unbemerkt | pipefail fehlt |
| rm löscht zu viel | Variable leer oder Wildcard falsch |

---

**Wichtig bei [ ]**

Bei if-Tests mit [ ] sind Leerzeichen wichtig.

Richtig:

    if [ "$A" = "$B" ]; then

Falsch:

    if ["$A"="$B"]; then

Warum?

    [ ist ein eigener Befehl
    und braucht getrennte Argumente.

Merksatz:

    Bei [ ] müssen Leerzeichen stehen.

---

**Variablen immer quoten**

Unsicher:

    rm $DATEI

Besser:

    rm "$DATEI"

Warum?

    Leerzeichen,
    Sonderzeichen
    oder leere Variablen können gefährlich werden.

Beispiel:

    DATEI="Meine Datei.txt"

Ohne Quotes würde die Shell daraus mehrere Argumente machen.

Merksatz:

    In Skripten Variablen fast immer in doppelte Quotes setzen.

---

**Relative und absolute Pfade**

Ein Skript kann aus verschiedenen Verzeichnissen gestartet werden.

Deshalb können relative Pfade Probleme machen.

Beispiel:

    cp config.txt /tmp/

funktioniert nur,
wenn config.txt im aktuellen Verzeichnis liegt.

Sicherer:

    absolute Pfade verwenden

oder das Skriptverzeichnis bestimmen.

Merksatz:

    Skripte sollten nicht blind vom aktuellen Verzeichnis abhängen.

---

**Skripte und Root-Rechte**

Manche Skripte brauchen administrative Rechte.

Beispiele:

    Dienste neu starten

    Pakete installieren

    Dateien unter /etc ändern

    Benutzer verwalten

Prüfen,
ob Skript als root läuft:

    if [ "$EUID" -ne 0 ]; then
        echo "Bitte als root oder mit sudo ausführen"
        exit 1
    fi

Merksatz:

    Administrative Skripte sollten Rechte bewusst prüfen.

---

**Skript debuggen**

Bash-Skript mit Debug-Ausgabe starten:

    bash -x script.sh

Oder im Skript:

    set -x

Bedeutung:

    Befehle werden beim Ausführen angezeigt.

Ausschalten:

    set +x

Merksatz:

    bash -x hilft bei der Fehlersuche in Skripten.

---

**ShellCheck**

ShellCheck ist ein Werkzeug,
das Bash-Skripte auf typische Fehler prüft.

Es erkennt zum Beispiel:

    fehlende Quotes

    unsichere Variablennutzung

    mögliche Syntaxprobleme

    ungenutzte Variablen

    problematische Konstruktionen

Befehl,
falls installiert:

    shellcheck script.sh

Merksatz:

    ShellCheck hilft,
    Bash-Fehler früh zu finden.

---

**Sichere Arbeitsweise beim Scripting**

Vor produktiver Nutzung:

    Skript in Testumgebung prüfen

    mit harmlosen Beispieldaten testen

    keine gefährlichen rm-Befehle ohne Prüfung

    Variablen quoten

    Fehlerbehandlung einbauen

    Logs schreiben

    Exit-Codes sinnvoll setzen

    Backup vor Änderungen erstellen

    Pfade bewusst wählen

    Rechte prüfen

Merksatz:

    Skripte automatisieren auch Fehler,
    wenn man sie nicht prüft.

---

**Typische Prüfungsfragen**

| Frage | Kurzantwort |
|---|---|
| Was ist ein Bash-Skript? | Textdatei mit Shell-Befehlen |
| Was ist ein Shebang? | legt Interpreter fest |
| Wie macht man ein Skript ausführbar? | chmod +x script.sh |
| Wie startet man ein Skript im aktuellen Verzeichnis? | ./script.sh |
| Was ist $1? | erster Parameter |
| Was ist $#? | Anzahl der Parameter |
| Was ist "$@"? | alle Parameter sauber einzeln |
| Was bedeutet exit 0? | erfolgreich beenden |
| Was bedeutet exit 1? | mit Fehler beenden |
| Was macht if? | Bedingung prüfen |
| Was macht for? | über Werte iterieren |
| Was macht while? | solange Bedingung wahr ist |
| Was macht case? | mehrere Auswahlfälle behandeln |
| Warum Variablen quoten? | Schutz vor Leerzeichen und Aufteilung |
| Warum Logs in Skripten? | Nachvollziehbarkeit |

---

**Typische Prüfungsfallen**

| Falle | Richtig denken |
|---|---|
| Shebang vergessen | Skript wird eventuell mit falscher Shell ausgeführt |
| chmod +x vergessen | direktes Starten schlägt fehl |
| ./ vor Skript vergessen | aktuelles Verzeichnis ist meist nicht im PATH |
| Leerzeichen bei Variablen setzen | NAME="Wert", nicht NAME = "Wert" |
| Variablen nicht quoten | Probleme bei Leerzeichen oder leeren Werten |
| [ ] ohne Leerzeichen schreiben | Syntaxfehler |
| relative Pfade blind nutzen | Startverzeichnis kann anders sein |
| cron wie interaktive Shell behandeln | cron hat andere Umgebung |
| Exit-Codes ignorieren | Automatisierung erkennt Fehler nicht sauber |
| rm mit leerer Variable | sehr gefährlich |
| Skript nicht testen | Fehler werden automatisiert |

---

**IHK-sichere Kurzformulierung**

Ein Bash-Skript ist eine Textdatei mit Shell-Befehlen, die automatisiert ausgeführt werden können. Die Shebang-Zeile wie #!/bin/bash legt fest, welcher Interpreter verwendet wird. Damit ein Skript direkt gestartet werden kann, benötigt es Ausführrechte, zum Beispiel mit chmod +x script.sh, und wird im aktuellen Verzeichnis mit ./script.sh gestartet. Variablen speichern Werte und sollten in Skripten meist in doppelte Anführungszeichen gesetzt werden. Parameter wie $1, $2 und $# machen Skripte flexibel. Mit if, case, for und while können Bedingungen und Wiederholungen umgesetzt werden. Exit-Codes zeigen Erfolg oder Fehler an und sind wichtig für Automatisierung, Monitoring und cronjobs. Skripte sollten getestet, dokumentiert und mit sinnvoller Fehlerbehandlung geschrieben werden.

---

**Merksätze**

    Bash-Skript = automatisierte Befehlsfolge.

    Shebang legt den Interpreter fest.

    #!/bin/bash startet mit Bash.

    chmod +x macht Skripte ausführbar.

    ./script.sh startet Skript aus aktuellem Verzeichnis.

    bash script.sh startet Skript über Bash.

    Kommentare erklären den Zweck.

    echo gibt Text aus.

    Variablen speichern Werte.

    Keine Leerzeichen beim Setzen von Variablen.

    $1 ist der erste Parameter.

    $# ist die Anzahl der Parameter.

    "$@" steht für alle Parameter sauber einzeln.

    $(befehl) speichert Befehlsausgabe.

    exit 0 bedeutet Erfolg.

    exit 1 bedeutet Fehler.

    $? zeigt den letzten Exit-Code.

    if prüft Bedingungen.

    elif bedeutet sonst wenn.

    else bedeutet sonst.

    fi beendet if.

    for läuft über Werte.

    while läuft solange eine Bedingung wahr ist.

    case ist gut für mehrere Auswahlmöglichkeiten.

    $(( ... )) rechnet ganzzahlig.

    read liest Benutzereingaben.

    Funktionen strukturieren Skripte.

    set -e bricht bei Fehlern ab.

    set -u erkennt nicht gesetzte Variablen.

    pipefail erkennt Fehler in Pipes besser.

    mktemp erzeugt temporäre Dateien sicherer.

    Cron hat oft andere Umgebung als die normale Shell.

    Variablen in Skripten meistens quoten.

    Bei [ ] sind Leerzeichen wichtig.

    Skripte immer testen,
    bevor sie produktiv laufen.

    Skripte automatisieren auch Fehler,
    wenn sie falsch geschrieben sind.

# 12. Sicherheit, Backup und Automatisierung



# 12.1 Sicherheit, Backup und Automatisierung

Linux-Systeme werden häufig als Server,
Container-Hosts,
Datenbanksysteme,
Webserver,
NAS-Systeme
oder Administrationssysteme eingesetzt.

Deshalb sind Sicherheit,
Backups
und Automatisierung besonders wichtig.

Ein Linux-System soll nicht nur funktionieren,
sondern auch:

    - sicher betrieben werden
    - nachvollziehbar administriert werden
    - regelmäßig gesichert werden
    - im Fehlerfall wiederherstellbar sein
    - wiederkehrende Aufgaben automatisch erledigen
    - unnötige Risiken vermeiden

Merksatz:

    Administration bedeutet nicht nur einrichten,
    sondern sicher betreiben,
    sichern
    und überwachen.

---

**Lernziele**

Nach dieser Seite solltest du erklären können:

    - welche Grundprinzipien Linux-Sicherheit hat
    - warum minimale Rechte wichtig sind
    - warum Updates sicherheitsrelevant sind
    - warum Backups und Restore-Tests zusammengehören
    - was RPO und RTO bedeuten
    - welche Backup-Arten es gibt
    - wie Automatisierung mit cron,
      systemd Timern
      und Skripten funktioniert
    - warum Automatisierung dokumentiert und überwacht werden muss
    - welche typischen Sicherheits-
      und Backupfehler auftreten

---

**Grundidee**

Ein sicher betriebenes Linux-System braucht mehrere Schutzebenen.

Dazu gehören:

    - Benutzer und Rechte
    - sichere SSH-Konfiguration
    - regelmäßige Updates
    - Firewall-Regeln
    - Diensthärtung
    - Logauswertung
    - Monitoring
    - Backups
    - Restore-Tests
    - Automatisierung
    - Dokumentation

Wichtig:

    Eine einzelne Maßnahme reicht nicht aus.

Merksatz:

    Sicherheit besteht aus mehreren Schichten.

---

**Schutzziele der IT-Sicherheit**

Die klassischen Schutzziele sind:

| Schutzziel | Bedeutung |
|---|---|
| Vertraulichkeit | Daten dürfen nur von Berechtigten gelesen werden |
| Integrität | Daten dürfen nicht unbemerkt verändert werden |
| Verfügbarkeit | Systeme und Daten müssen bei Bedarf nutzbar sein |

Beispiele:

| Beispiel | Schutzziel |
|---|---|
| SSH-Schlüssel schützen | Vertraulichkeit |
| Prüfsummen nutzen | Integrität |
| Backups und Redundanz | Verfügbarkeit |

Merksatz:

    Vertraulichkeit,
    Integrität
    und Verfügbarkeit sind zentrale Schutzziele.

---

**Prinzip der minimalen Rechte**

Ein Benutzer,
Dienst
oder Prozess sollte nur die Rechte haben,
die er wirklich benötigt.

Dieses Prinzip nennt man:

    Least Privilege

Beispiele:

    Ein Webserver braucht keine Root-Rechte,
    wenn er nur Webseiten ausliefern soll.

    Ein Backup-Benutzer braucht nicht automatisch Schreibrechte auf alle Produktivdaten.

    Ein normaler Benutzer sollte keine systemweiten Konfigurationen ändern dürfen.

Vorteil:

    Fehler oder Angriffe richten weniger Schaden an.

Merksatz:

    So wenig Rechte wie möglich,
    so viele wie nötig.

---

**Root-Rechte bewusst nutzen**

Root kann fast alles auf dem System verändern.

Deshalb:

    - nicht dauerhaft als root arbeiten
    - sudo gezielt verwenden
    - Befehle vor Ausführung prüfen
    - Wildcards mit Vorsicht verwenden
    - keine unbekannten Skripte als root ausführen
    - administrative Aktionen dokumentieren

Beispiel:

    sudo systemctl restart nginx

ist besser nachvollziehbar als dauerhaft als root zu arbeiten.

Merksatz:

    Root-Rechte sind Werkzeug,
    keine Arbeitsumgebung.

---

**Dienstkonten**

Dienste sollten unter eigenen Dienstkonten laufen.

Beispiele:

| Dienstkonto | Typischer Zweck |
|---|---|
| www-data | Webserver |
| nginx | Nginx-Webserver |
| postgres | PostgreSQL |
| mysql | MySQL/MariaDB |
| backup | Backup-Aufgaben |

Vorteil:

    Wenn ein Dienst kompromittiert wird,
    hat der Angreifer nur die Rechte dieses Dienstkontos.

Merksatz:

    Dienste sollten nicht unnötig als root laufen.

---

**SSH absichern**

SSH ist ein häufiger Administrationszugang.

Wichtige Schutzmaßnahmen:

    - sichere Passwörter oder SSH-Schlüssel nutzen
    - direkten Root-Login vermeiden
    - nur benötigte Benutzer zulassen
    - Firewall-Regeln setzen
    - Logs prüfen
    - fehlgeschlagene Logins überwachen
    - private Schlüssel schützen
    - bekannte Hosts prüfen

Wichtige Datei:

    /etc/ssh/sshd_config

Merksatz:

    SSH ist mächtig und muss besonders geschützt werden.

---

**SSH-Schlüssel schützen**

Ein SSH-Schlüsselpaar besteht aus:

    privatem Schlüssel

    öffentlichem Schlüssel

Der öffentliche Schlüssel darf auf Servern liegen.

Der private Schlüssel bleibt geheim.

Wichtig:

    privaten Schlüssel nicht weitergeben

    Passphrase verwenden

    Dateirechte passend setzen

    Schlüssel bei Verlust oder Verdacht entfernen

    authorized_keys regelmäßig prüfen

Merksatz:

    Der private SSH-Schlüssel ist wie ein Passwort
    und muss geschützt werden.

---

**Firewall-Grundlagen**

Eine Firewall begrenzt,
welcher Netzwerkverkehr erlaubt ist.

Eine gute Firewall-Regel beschreibt:

    - Quelle
    - Ziel
    - Protokoll
    - Port
    - Richtung
    - Aktion
    - Zweck

Beispiel:

| Feld | Beispiel |
|---|---|
| Quelle | Adminnetz |
| Ziel | Linux-Server |
| Protokoll | TCP |
| Port | 22 |
| Aktion | erlauben |
| Zweck | SSH-Administration |

Merksatz:

    Port allein ist keine vollständige Firewall-Regel.

---

**Nur benötigte Dienste betreiben**

Jeder laufende Dienst kann eine Angriffsfläche sein.

Deshalb prüfen:

    Welche Dienste laufen?

    Welche Ports sind offen?

    Welche Dienste werden wirklich benötigt?

    Sind Dienste aktuell?

    Sind Dienste sicher konfiguriert?

Prüfen:

    systemctl --type=service

    ss -tulpen

Merksatz:

    Nicht benötigte Dienste deaktivieren oder entfernen.

---

**Updates und Patchmanagement**

Sicherheitsupdates schließen bekannte Schwachstellen.

Patchmanagement bedeutet:

    Updates geplant,
    kontrolliert
    und nachvollziehbar einspielen.

Dazu gehören:

    - verfügbare Updates prüfen
    - Sicherheitsrelevanz bewerten
    - Backup prüfen
    - Wartungsfenster planen
    - Updates einspielen
    - Dienste prüfen
    - Logs prüfen
    - Dokumentation aktualisieren

Merksatz:

    Updates sind Teil der Sicherheit.

---

**Warum Updates nicht blind einspielen?**

Updates sind wichtig,
können aber auch Probleme verursachen.

Mögliche Risiken:

    Dienst startet nicht mehr

    Konfiguration ist nicht kompatibel

    Abhängigkeiten ändern sich

    Kernel-Update braucht Neustart

    Anwendung verhält sich anders

    Drittanbieter-Paket verursacht Konflikt

Deshalb:

    vorher sichern

    Änderungen dokumentieren

    Dienste nachher prüfen

    Rollback-Möglichkeit einplanen

Merksatz:

    Sicherheitsupdates sind wichtig,
    aber produktive Systeme brauchen kontrollierte Änderung.

---

**Dateirechte und Sicherheit**

Falsche Dateirechte sind ein häufiger Sicherheitsfehler.

Beispiele:

| Problem | Risiko |
|---|---|
| 777 auf Verzeichnissen | jeder darf schreiben |
| private Schlüssel zu offen | SSH verweigert Zugriff oder Schlüssel kann gelesen werden |
| Konfigurationsdateien für alle lesbar | Geheimnisse können sichtbar sein |
| Dienstdateien falscher Besitzer | Dienst startet nicht oder Sicherheitsrisiko |
| Backups für alle lesbar | Datenabfluss |

Merksatz:

    Rechteprobleme sind Sicherheits-
    und Betriebsprobleme.

---

**Sensible Dateien**

Sensible Dateien müssen besonders geschützt werden.

Beispiele:

    SSH-Schlüssel

    Datenbank-Passwörter

    API-Tokens

    Zertifikatsschlüssel

    Backup-Dateien

    Konfigurationsdateien mit Zugangsdaten

    Passwort-Hashes

Beispiele für Pfade:

    ~/.ssh/id_rsa

    ~/.ssh/authorized_keys

    /etc/shadow

    /etc/ssh/sshd_config

    /etc/sudoers

Merksatz:

    Geheimnisse gehören nicht in offen lesbare Dateien.

---

**sudo sicher nutzen**

sudo sollte gezielt vergeben werden.

Wichtige Punkte:

    - nicht jeder Benutzer braucht sudo
    - sudo-Regeln dokumentieren
    - Gruppenmitgliedschaften prüfen
    - keine unnötigen NOPASSWD-Regeln
    - administrative Aktionen nachvollziehbar halten

Prüfen:

    id benutzer

    groups benutzer

    sudo -l

Merksatz:

    sudo ist kontrollierte Rechteerweiterung.

---

**Logs und Sicherheitsereignisse**

Sicherheitsrelevante Ereignisse findet man häufig in Authentifizierungs-
und Dienstlogs.

Beispiele:

    fehlgeschlagene Logins

    erfolgreiche SSH-Logins

    sudo-Nutzung

    neue Benutzer

    Dienststarts

    Firewall-Blockierungen

    ungewöhnliche Prozesse

Beispiele:

    journalctl -u ssh

    grep -i "failed" /var/log/auth.log

    grep -i "sudo" /var/log/auth.log

Merksatz:

    Sicherheit ohne Logprüfung ist blind.

---

**Backups**

Ein Backup ist eine Sicherung von Daten,
Konfigurationen
oder Systemzuständen.

Backups schützen vor:

    - versehentlichem Löschen
    - Hardwaredefekt
    - Dateisystemfehler
    - Ransomware
    - fehlgeschlagenem Update
    - Fehlkonfiguration
    - Diebstahl
    - Brand oder Wasserschaden
    - Benutzerfehler

Merksatz:

    Kein Backup bedeutet:
    keine sichere Wiederherstellung.

---

**Backup ist nicht gleich Restore**

Ein Backup ist nur dann wertvoll,
wenn es auch wiederhergestellt werden kann.

Deshalb wichtig:

    Restore testen

    Wiederherstellungszeit messen

    Datenintegrität prüfen

    Dokumentation erstellen

    Zuständigkeiten klären

    Notfallzugriff prüfen

Merksatz:

    Ein ungetestetes Backup ist nur eine Hoffnung.

---

**Restore**

Restore bedeutet:

    Wiederherstellung aus einem Backup.

Beispiele:

    einzelne Datei wiederherstellen

    Datenbank zurückspielen

    VM wiederherstellen

    Serverkonfiguration wiederherstellen

    komplettes System neu aufbauen

Wichtig:

    Restore muss geübt und dokumentiert sein.

Merksatz:

    Backup ist die Sicherung.
    Restore ist die Wiederherstellung.

---

**RPO**

RPO steht für:

    Recovery Point Objective

Es beschreibt,
wie viel Datenverlust maximal akzeptabel ist.

Beispiel:

    RPO 24 Stunden

bedeutet:

    Im schlimmsten Fall dürfen Daten seit dem letzten täglichen Backup verloren gehen.

Beispiel:

    RPO 1 Stunde

bedeutet:

    Maximal eine Stunde Datenverlust ist akzeptabel.

Merksatz:

    RPO beantwortet:
    Wie viele Daten dürfen maximal verloren gehen?

---

**RTO**

RTO steht für:

    Recovery Time Objective

Es beschreibt,
wie lange die Wiederherstellung maximal dauern darf.

Beispiel:

    RTO 4 Stunden

bedeutet:

    Der Dienst soll innerhalb von 4 Stunden wieder laufen.

Merksatz:

    RTO beantwortet:
    Wie schnell muss es wieder funktionieren?

---

**RPO und RTO unterscheiden**

| Begriff | Frage | Beispiel |
|---|---|---|
| RPO | Wie viele Daten dürfen verloren gehen? | maximal 1 Stunde |
| RTO | Wie lange darf die Wiederherstellung dauern? | maximal 4 Stunden |

Merksatz:

    RPO = Datenverlust.
    RTO = Wiederherstellungszeit.

---

**Backup-Arten**

| Backup-Art | Bedeutung |
|---|---|
| Vollbackup | vollständige Sicherung |
| inkrementelles Backup | sichert Änderungen seit letztem Backup |
| differentielles Backup | sichert Änderungen seit letztem Vollbackup |
| Snapshot | Zustand zu einem Zeitpunkt |
| Image-Backup | vollständiges Abbild eines Systems |
| Datei-Backup | Sicherung einzelner Dateien und Ordner |
| Datenbankdump | logische Sicherung einer Datenbank |

Merksatz:

    Backup-Art muss zum Wiederherstellungsziel passen.

---

**Vollbackup**

Ein Vollbackup sichert alle ausgewählten Daten vollständig.

Vorteile:

    einfach zu verstehen

    Wiederherstellung oft einfacher

    vollständiger Stand

Nachteile:

    benötigt viel Speicher

    dauert länger

    erzeugt mehr Last

Merksatz:

    Vollbackup ist einfach,
    aber speicherintensiv.

---

**Inkrementelles Backup**

Ein inkrementelles Backup sichert nur Änderungen seit dem letzten Backup.

Vorteile:

    spart Speicher

    schneller als Vollbackup

Nachteile:

    Wiederherstellung kann mehrere Sicherungen benötigen

    Kette muss vollständig sein

Merksatz:

    Inkrementell spart Speicher,
    macht Restore aber abhängiger von der Backup-Kette.

---

**Differentielles Backup**

Ein differentielles Backup sichert Änderungen seit dem letzten Vollbackup.

Vorteile:

    Restore einfacher als bei langer inkrementeller Kette

    weniger Speicher als tägliches Vollbackup

Nachteile:

    wächst bis zum nächsten Vollbackup

Merksatz:

    Differentiell bezieht sich auf das letzte Vollbackup.

---

**Snapshot**

Ein Snapshot ist ein Zustand zu einem bestimmten Zeitpunkt.

Snapshots sind nützlich vor:

    Updates

    Konfigurationsänderungen

    Tests

    größeren Wartungen

Wichtig:

    Snapshots ersetzen nicht immer ein echtes externes Backup.

Risiko:

    Wenn das gesamte Storage-System ausfällt,
    kann auch der Snapshot verloren sein.

Merksatz:

    Snapshot ist praktisch,
    aber nicht automatisch ein vollständiges Backup-Konzept.

---

**3-2-1-Regel**

Eine bekannte Backup-Regel ist:

    3 Kopien der Daten

    2 unterschiedliche Medientypen oder Speicherorte

    1 Kopie extern oder offline

Ziel:

    Schutz vor Hardwareausfall,
    Bedienfehlern,
    Ransomware
    und Standortschäden.

Merksatz:

    3-2-1 reduziert das Risiko,
    dass alle Kopien gleichzeitig verloren gehen.

---

**Offline-Backup**

Ein Offline-Backup ist nach der Sicherung nicht dauerhaft erreichbar.

Vorteile:

    Schutz vor Ransomware

    Schutz vor versehentlichem Löschen

    Schutz vor kompromittierten Zugangsdaten

Beispiele:

    externe Festplatte getrennt lagern

    offline geschalteter Backup-Speicher

    unveränderbare Sicherung

Merksatz:

    Was dauerhaft verbunden ist,
    kann auch dauerhaft angegriffen oder gelöscht werden.

---

**Backup-Verschlüsselung**

Backups enthalten oft sensible Daten.

Deshalb sollten sie geschützt werden durch:

    - Verschlüsselung
    - Zugriffskontrolle
    - sichere Aufbewahrung
    - getrennte Zugangsdaten
    - Protokollierung
    - regelmäßige Prüfung

Wichtig:

    Schlüssel und Passwörter müssen sicher aufbewahrt werden.
    Ohne Schlüssel ist ein verschlüsseltes Backup nicht wiederherstellbar.

Merksatz:

    Verschlüsseltes Backup schützt Daten,
    aber der Schlüssel muss verfügbar bleiben.

---

**Backup-Integrität**

Backups müssen vollständig und unverändert sein.

Mögliche Prüfungen:

    Prüfsummen

    Test-Restore

    Backup-Logs

    Vergleich von Dateianzahlen

    Stichproben

    automatische Prüfberichte

Merksatz:

    Backup erfolgreich gemeldet heißt noch nicht:
    Restore funktioniert.

---

**Backup von Konfigurationen**

Neben Daten sollten auch Konfigurationen gesichert werden.

Beispiele:

    /etc

    systemd-Units

    Firewall-Regeln

    Webserver-Konfiguration

    Datenbank-Konfiguration

    SSH-Konfiguration

    Cronjobs

    Skripte

    Docker Compose Dateien

    Dokumentation

Warum?

    Ohne Konfiguration dauert Wiederherstellung deutlich länger.

Merksatz:

    Daten ohne Konfiguration reichen oft nicht für schnellen Restore.

---

**Backup von Datenbanken**

Datenbanken sollte man nicht einfach im laufenden Betrieb als Dateien kopieren,
wenn dadurch inkonsistente Daten entstehen können.

Sicherer sind oft:

    Datenbankdump

    datenbankspezifische Backup-Werkzeuge

    konsistente Snapshots

    Replikation plus Backup

Beispiele:

    PostgreSQL:
    pg_dump

    MySQL/MariaDB:
    mysqldump

Merksatz:

    Datenbanken brauchen konsistente Backups.

---

**Automatisierung**

Automatisierung bedeutet,
wiederkehrende Aufgaben automatisch auszuführen.

Beispiele:

    Backups

    Logrotation

    Updates prüfen

    Speicherplatz prüfen

    Dienste überwachen

    Reports erstellen

    Dateien aufräumen

    Zertifikatsprüfung

    Synchronisation

Merksatz:

    Automatisierung spart Zeit,
    muss aber überwacht werden.

---

**cron**

cron ist ein klassischer Zeitplaner unter Linux.

Cronjobs können Befehle oder Skripte regelmäßig ausführen.

Crontab bearbeiten:

    crontab -e

Crontab anzeigen:

    crontab -l

Beispiel:

    0 2 * * * /home/felix/backup.sh

Bedeutung:

    Jeden Tag um 02:00 Uhr backup.sh ausführen.

Merksatz:

    cron startet Aufgaben nach Zeitplan.

---

**Crontab-Zeitfelder**

Ein Cronjob hat fünf Zeitfelder.

    Minute Stunde Tag-des-Monats Monat Wochentag Befehl

Beispiel:

    30 3 * * 1 /home/felix/report.sh

Bedeutung:

    Jeden Montag um 03:30 Uhr.

| Feld | Bedeutung |
|---|---|
| Minute | 0 bis 59 |
| Stunde | 0 bis 23 |
| Tag des Monats | 1 bis 31 |
| Monat | 1 bis 12 |
| Wochentag | 0 bis 7, häufig 0 und 7 = Sonntag |

Merksatz:

    Cron hat fünf Zeitfelder vor dem Befehl.

---

**Typische Cron-Beispiele**

| Cron-Eintrag | Bedeutung |
|---|---|
| 0 2 * * * | täglich um 02:00 Uhr |
| */15 * * * * | alle 15 Minuten |
| 0 * * * * | jede volle Stunde |
| 30 3 * * 1 | montags um 03:30 Uhr |
| 0 1 1 * * | am 1. jedes Monats um 01:00 Uhr |

Merksatz:

    Stern bedeutet:
    jeder mögliche Wert.

---

**cron und Umgebung**

Cron hat oft eine andere Umgebung als die normale Shell.

Typische Probleme:

    PATH ist anders

    Variablen fehlen

    Arbeitsverzeichnis ist anders

    Ausgaben gehen verloren

    Berechtigungen unterscheiden sich

Deshalb in Cron-Skripten:

    absolute Pfade verwenden

    PATH bewusst setzen

    Logs schreiben

    Fehlerausgabe umleiten

    Skripte ausführbar machen

Merksatz:

    Ein Skript,
    das manuell funktioniert,
    funktioniert nicht automatisch auch in cron.

---

**cron mit Logging**

Beispiel:

    0 2 * * * /home/felix/backup.sh >> /var/log/backup.log 2>&1

Bedeutung:

    Standardausgabe und Fehlerausgabe werden in backup.log geschrieben.

Merksatz:

    Automatisierung braucht Logausgaben.

---

**systemd Timer**

systemd Timer sind eine moderne Alternative zu cron.

Sie bestehen meist aus:

    .service

    .timer

Beispielhafte Einsatzbereiche:

    regelmäßige Backups

    Prüfskripte

    Aufräumaufgaben

    Monitoring-Jobs

Vorteile:

    Integration in systemd

    Logs über journalctl

    Abhängigkeiten möglich

    Status über systemctl

Merksatz:

    systemd Timer sind zeitgesteuerte systemd-Units.

---

**cron und systemd Timer vergleichen**

| Merkmal | cron | systemd Timer |
|---|---|---|
| Klassiker | ja | moderner |
| einfache Zeitpläne | gut | gut |
| systemd-Integration | gering | hoch |
| Logs | oft manuell | journalctl |
| Abhängigkeiten | begrenzt | besser |
| Statusprüfung | weniger einheitlich | systemctl |

Merksatz:

    cron ist einfach.
    systemd Timer sind stärker in systemd integriert.

---

**Automatisierung überwachen**

Automatisierte Aufgaben können fehlschlagen.

Mögliche Ursachen:

    Ziel nicht erreichbar

    Speicher voll

    Rechteproblem

    Passwort oder Schlüssel ungültig

    Netzwerkproblem

    Skriptfehler

    Dienst nicht verfügbar

    Pfad geändert

Deshalb wichtig:

    Logs

    Exit-Codes

    Benachrichtigung bei Fehler

    regelmäßige Kontrolle

    Monitoring

Merksatz:

    Eine Automatisierung ohne Kontrolle kann unbemerkt ausfallen.

---

**Exit-Codes in Automatisierung**

Exit-Codes zeigen,
ob ein Befehl erfolgreich war.

| Exit-Code | Bedeutung |
|---|---|
| 0 | Erfolg |
| ungleich 0 | Fehler oder besonderer Zustand |

Wichtig für:

    cron

    systemd Timer

    Monitoring

    Skripte

    CI/CD

Merksatz:

    Automatisierung muss Fehler über Exit-Codes erkennbar machen.

---

**Dokumentation**

Sicherheits-
Backup-
und Automatisierungsmaßnahmen müssen dokumentiert werden.

Dokumentieren:

    - Zweck
    - Pfade
    - Zeitpläne
    - Benutzer
    - Rechte
    - Abhängigkeiten
    - Restore-Schritte
    - Verantwortliche
    - Prüftermine
    - bekannte Risiken
    - Änderungen

Merksatz:

    Was nicht dokumentiert ist,
    ist im Notfall schwer wiederherzustellen.

---

**Typische Sicherheitsfehler**

| Fehler | Risiko |
|---|---|
| direkter Root-Login per SSH | leichteres Angriffsziel |
| schwache Passwörter | unberechtigter Zugriff |
| 777-Rechte | jeder darf alles |
| keine Updates | bekannte Schwachstellen bleiben offen |
| unnötige Dienste | größere Angriffsfläche |
| private Schlüssel ungeschützt | Identitätsdiebstahl |
| Geheimnisse in Skripten | Zugangsdaten werden sichtbar |
| keine Logs | Vorfälle schwer nachvollziehbar |
| keine Firewall | unnötige Dienste erreichbar |
| sudo für alle | Rechteausweitung |

---

**Typische Backupfehler**

| Fehler | Risiko |
|---|---|
| kein Restore-Test | Backup eventuell unbrauchbar |
| Backup liegt nur lokal | Verlust bei Hardwaredefekt |
| Backup dauerhaft beschreibbar | Ransomware kann es verschlüsseln |
| Datenbankdateien inkonsistent kopiert | Restore fehlerhaft |
| Backup nicht verschlüsselt | Datenabfluss |
| Backup-Logs nicht geprüft | Fehler bleiben unbemerkt |
| Konfiguration nicht gesichert | Wiederherstellung dauert länger |
| RPO/RTO nicht definiert | unklare Anforderungen |
| Speicherziel voll | Backups schlagen fehl |
| alte Backups nie gelöscht | Speicher läuft voll |

---

**Typische Automatisierungsfehler**

| Fehler | Risiko |
|---|---|
| keine Logs | Fehler bleiben unsichtbar |
| keine Exit-Code-Prüfung | Fehler werden nicht erkannt |
| relative Pfade in cron | Skript findet Dateien nicht |
| PATH nicht gesetzt | Befehl wird nicht gefunden |
| keine Benachrichtigung | Ausfall bleibt unbemerkt |
| Skript nicht getestet | Fehler wird automatisiert |
| Geheimnisse im Klartext | Sicherheitsrisiko |
| keine Dokumentation | Wartung schwierig |
| keine Rechteprüfung | Skript scheitert oder ist unsicher |
| keine Sperre gegen parallele Läufe | Datenkonflikte |

---

**Sichere Arbeitsweise**

Bei Sicherheit:

    minimale Rechte

    Dienste prüfen

    Updates planen

    SSH absichern

    Firewall setzen

    Logs kontrollieren

Bei Backups:

    Backupziel prüfen

    Backup automatisieren

    Restore testen

    RPO/RTO definieren

    Backup verschlüsseln

    externe Kopie vorhalten

Bei Automatisierung:

    Skripte testen

    Logs schreiben

    Exit-Codes nutzen

    Monitoring einrichten

    Dokumentation pflegen

Merksatz:

    Sicherer Betrieb entsteht durch regelmäßige Kontrolle,
    nicht durch einmalige Einrichtung.

---

**Typische Prüfungsfragen**

| Frage | Kurzantwort |
|---|---|
| Was bedeutet Least Privilege? | nur notwendige Rechte vergeben |
| Warum sollte SSH abgesichert werden? | zentraler Administrationszugang |
| Warum sind Updates wichtig? | schließen bekannte Schwachstellen |
| Was ist ein Backup? | Sicherung von Daten oder Systemzuständen |
| Was ist Restore? | Wiederherstellung aus Backup |
| Was bedeutet RPO? | maximal akzeptabler Datenverlust |
| Was bedeutet RTO? | maximal akzeptable Wiederherstellungszeit |
| Was ist ein Vollbackup? | vollständige Sicherung |
| Was ist ein inkrementelles Backup? | Änderungen seit letztem Backup |
| Was ist ein differentielles Backup? | Änderungen seit letztem Vollbackup |
| Was ist ein Snapshot? | Zustand zu einem Zeitpunkt |
| Was macht cron? | zeitgesteuerte Aufgaben ausführen |
| Was ist ein systemd Timer? | zeitgesteuerte systemd-Unit |
| Warum Restore-Test? | prüft, ob Backup wirklich nutzbar ist |

---

**Typische Prüfungsfallen**

| Falle | Richtig denken |
|---|---|
| Backup mit Restore gleichsetzen | Backup sichern, Restore wiederherstellen |
| Backup nie testen | ungetestetes Backup ist unsicher |
| RPO und RTO verwechseln | RPO Datenverlust, RTO Zeit |
| Snapshot als vollständiges Backup sehen | nicht automatisch extern oder unabhängig |
| cron ohne Logging | Fehler bleiben unsichtbar |
| manuelles Skript läuft, cron nicht | andere Umgebung beachten |
| 777 als schnelle Lösung | Sicherheitsrisiko |
| Root dauerhaft nutzen | unnötig gefährlich |
| Updates ohne Prüfung | produktive Dienste können betroffen sein |
| keine Dokumentation | Notfallwiederherstellung erschwert |
| Geheimnisse in Skripten speichern | Sicherheitsrisiko |

---

**IHK-sichere Kurzformulierung**

Linux-Sicherheit basiert auf mehreren Maßnahmen wie minimalen Rechten, sicheren SSH-Zugängen, regelmäßigen Updates, Firewall-Regeln, Diensthärtung, Logging und Monitoring. Backups schützen vor Datenverlust, sind aber nur zuverlässig, wenn auch die Wiederherstellung getestet wurde. RPO beschreibt, wie viel Datenverlust maximal akzeptabel ist, während RTO beschreibt, wie lange die Wiederherstellung maximal dauern darf. Backup-Arten sind unter anderem Vollbackup, inkrementelles Backup, differentielles Backup, Snapshot, Image-Backup und Datenbankdump. Wiederkehrende Aufgaben können mit cron, systemd Timern und Skripten automatisiert werden. Automatisierung muss protokolliert, überwacht und dokumentiert werden, damit Fehler nicht unbemerkt bleiben.

---

**Merksätze**

    Sicherheit besteht aus mehreren Schichten.

    Vertraulichkeit,
    Integrität
    und Verfügbarkeit sind zentrale Schutzziele.

    Least Privilege bedeutet:
    nur notwendige Rechte.

    Root-Rechte bewusst verwenden.

    Dienste nicht unnötig als root betreiben.

    SSH besonders absichern.

    Privater SSH-Schlüssel bleibt geheim.

    Firewall-Regeln brauchen Quelle,
    Ziel,
    Protokoll,
    Port,
    Aktion
    und Zweck.

    Nicht benötigte Dienste entfernen oder deaktivieren.

    Updates schließen bekannte Schwachstellen.

    Patchmanagement ist ein Prozess.

    Backup schützt vor Datenverlust.

    Restore ist die Wiederherstellung.

    Ein ungetestetes Backup ist nur eine Hoffnung.

    RPO = maximal akzeptabler Datenverlust.

    RTO = maximal akzeptable Wiederherstellungszeit.

    Vollbackup sichert alles.

    Inkrementell sichert Änderungen seit letztem Backup.

    Differentiell sichert Änderungen seit letztem Vollbackup.

    Snapshot ist ein Zeitpunktzustand.

    Snapshot ersetzt nicht automatisch ein externes Backup.

    3-2-1-Regel reduziert Backup-Risiken.

    Backup-Speicher besonders schützen.

    Datenbanken brauchen konsistente Backups.

    cron startet Aufgaben nach Zeitplan.

    systemd Timer sind zeitgesteuerte systemd-Units.

    Cron hat oft andere Umgebung als die normale Shell.

    Automatisierung braucht Logs.

    Exit-Codes zeigen Erfolg oder Fehler.

    Automatisierung ohne Kontrolle kann unbemerkt ausfallen.

    Dokumentation ist Teil des Betriebs.

    Sicherer Betrieb ist regelmäßige Kontrolle,
    nicht einmalige Einrichtung.

# 13. Linux im Serverbetrieb



# 13.1 Linux im Serverbetrieb

Linux wird sehr häufig im Serverbetrieb eingesetzt.

Typische Einsatzbereiche sind:

    - Webserver
    - Datenbankserver
    - Dateiserver
    - DNS-Server
    - DHCP-Server
    - Mailserver
    - Container-Hosts
    - Monitoring-Systeme
    - Backup-Server
    - Proxy-Server
    - VPN-Server
    - NAS-Systeme

Für Fachinformatiker Systemintegration ist Linux im Serverbetrieb besonders wichtig,
weil viele Dienste in Unternehmen,
Rechenzentren,
Cloud-Umgebungen
und Homelabs auf Linux laufen.

Merksatz:

    Linux ist eines der wichtigsten Betriebssysteme im Serverbereich.

---

**Lernziele**

Nach dieser Seite solltest du erklären können:

    - warum Linux häufig als Serverbetriebssystem genutzt wird
    - welche Aufgaben Linux-Server übernehmen können
    - was Serverdienste sind
    - wie Serverdienste verwaltet werden
    - welche Rolle SSH im Serverbetrieb hat
    - warum Headless-Betrieb typisch ist
    - wie Linux mit Webservern,
      Datenbanken,
      Containern
      und Freigaben zusammenhängt
    - welche Grundregeln für sicheren Serverbetrieb gelten
    - wie man typische Serverprobleme eingrenzt

---

**Grundidee**

Ein Server ist ein System,
das Dienste für andere Systeme bereitstellt.

Ein Linux-Server kann zum Beispiel:

    Webseiten ausliefern

    Datenbanken bereitstellen

    Dateien speichern

    Benutzer authentifizieren

    Container ausführen

    Backups speichern

    DNS-Namen auflösen

    Netzwerkzugriffe absichern

    Anwendungen hosten

Wichtig:

    Ein Server ist nicht automatisch ein bestimmter Gerätetyp.
    Server bedeutet vor allem:
    Das System stellt Dienste bereit.

Merksatz:

    Server stellen Dienste für Clients bereit.

---

**Warum Linux im Serverbetrieb häufig genutzt wird**

Linux wird auf Servern häufig eingesetzt,
weil es:

    - stabil läuft
    - gut automatisierbar ist
    - ressourcenschonend betrieben werden kann
    - ohne grafische Oberfläche auskommt
    - viele Netzwerkdienste unterstützt
    - gut per SSH administrierbar ist
    - stark in Cloud- und Containerumgebungen verbreitet ist
    - viele Paketmanager und Repositories bietet
    - gut dokumentierbare Konfigurationen nutzt
    - flexibel anpassbar ist

Merksatz:

    Linux ist stabil,
    flexibel
    und gut automatisierbar.

---

**Server und Client**

Ein Client nutzt einen Dienst.

Ein Server stellt einen Dienst bereit.

Beispiele:

| Client | Serverdienst |
|---|---|
| Browser | Webserver |
| E-Mail-Programm | Mailserver |
| Datenbankanwendung | Datenbankserver |
| PC im Netzwerk | Dateiserver |
| SSH-Client | SSH-Server |
| DNS-Client | DNS-Server |

Merksatz:

    Client fragt an.
    Server antwortet mit einem Dienst.

---

**Serverdienst**

Ein Serverdienst ist ein Programm,
das im Hintergrund läuft
und eine bestimmte Funktion bereitstellt.

Beispiele:

| Dienst | Zweck |
|---|---|
| sshd | Fernadministration |
| nginx | Webserver |
| apache2 | Webserver |
| mariadb | Datenbank |
| postgresql | Datenbank |
| named / bind9 | DNS |
| isc-dhcp-server | DHCP |
| samba | SMB-Dateifreigaben |
| nfs-server | NFS-Dateifreigaben |
| docker | Container |
| cron | zeitgesteuerte Aufgaben |

Merksatz:

    Ein Server besteht oft aus mehreren Diensten.

---

**Headless-Betrieb**

Viele Linux-Server laufen ohne Monitor,
Tastatur
und grafische Oberfläche.

Das nennt man:

    headless

Administration erfolgt meist über:

    SSH

    Weboberflächen

    Automatisierung

    Monitoring

    Konfigurationsdateien

Vorteile:

    weniger Ressourcenverbrauch

    weniger Angriffsfläche

    bessere Automatisierung

    einfacher Remote-Betrieb

Merksatz:

    Server werden häufig ohne grafische Oberfläche betrieben.

---

**SSH im Serverbetrieb**

SSH ist der wichtigste Zugriff für Linux-Serveradministration.

Typischer Port:

    TCP 22

Beispiel:

    ssh benutzer@server

SSH ermöglicht:

    Befehle ausführen

    Konfigurationen bearbeiten

    Logs prüfen

    Dienste verwalten

    Dateien übertragen

    Tunnel aufbauen

Wichtig:

    SSH muss sicher konfiguriert werden.

Merksatz:

    SSH ist der Standardzugang zur Linux-Serveradministration.

---

**Typische Serveradministration über SSH**

Beispiele:

    systemctl status nginx

    journalctl -u nginx

    df -h

    free -h

    ss -tulpen

    ip addr

    ip route

    nano /etc/nginx/nginx.conf

    apt update

    apt upgrade

Merksatz:

    Linux-Server werden oft komplett über die Shell verwaltet.

---

**Dienste verwalten**

Auf vielen Linux-Systemen werden Dienste mit systemd verwaltet.

Wichtige Befehle:

| Befehl | Bedeutung |
|---|---|
| systemctl status dienst | Status prüfen |
| systemctl start dienst | Dienst starten |
| systemctl stop dienst | Dienst stoppen |
| systemctl restart dienst | Dienst neu starten |
| systemctl reload dienst | Konfiguration neu laden |
| systemctl enable dienst | Autostart aktivieren |
| systemctl disable dienst | Autostart deaktivieren |
| journalctl -u dienst | Logs eines Dienstes anzeigen |

Merksatz:

    systemctl verwaltet Dienste.
    journalctl zeigt Dienstlogs.

---

**Autostart von Diensten**

Ein Serverdienst soll oft automatisch beim Systemstart starten.

Autostart aktivieren:

    systemctl enable dienst

Dienst sofort starten:

    systemctl start dienst

Kombiniert:

    systemctl enable --now dienst

Prüfen:

    systemctl is-enabled dienst

    systemctl is-active dienst

Merksatz:

    enabled heißt:
    startet beim Boot.
    active heißt:
    läuft gerade.

---

**Webserver**

Ein Webserver liefert Webseiten,
Webanwendungen
oder API-Antworten aus.

Typische Linux-Webserver:

    nginx

    Apache HTTP Server

Typische Ports:

| Protokoll | Port |
|---|---:|
| HTTP | TCP 80 |
| HTTPS | TCP 443 |

Typische Aufgaben:

    statische Webseiten ausliefern

    Reverse Proxy

    TLS beenden

    Weiterleitungen

    Zugriffskontrolle

    Logging

Merksatz:

    Webserver stellen Inhalte über HTTP oder HTTPS bereit.

---

**Nginx**

Nginx wird häufig genutzt als:

    Webserver

    Reverse Proxy

    TLS-Endpunkt

    Load Balancer

    Proxy vor Anwendungen

Typische Prüfungen:

    systemctl status nginx

    nginx -t

    journalctl -u nginx

    ss -tulpen

    curl -I http://localhost

Merksatz:

    nginx -t prüft die Konfiguration.

---

**Apache**

Apache HTTP Server wird häufig genutzt als:

    klassischer Webserver

    PHP-Webserver

    virtueller Host-Server

    Webserver für viele Anwendungen

Typische Prüfungen:

    systemctl status apache2

    apachectl configtest

    journalctl -u apache2

    ss -tulpen

Merksatz:

    Apache und Nginx sind typische Webserver unter Linux.

---

**Reverse Proxy**

Ein Reverse Proxy nimmt Anfragen von Clients entgegen
und leitet sie an interne Dienste weiter.

Beispiel:

    Client → Reverse Proxy → interne Webanwendung

Typische Aufgaben:

    TLS-Zertifikate verwalten

    mehrere Anwendungen über eine IP erreichbar machen

    Weiterleitung nach Hostname

    Schutz interner Dienste

    Logging

    zentrale Zugriffskontrolle

Merksatz:

    Reverse Proxy steht vor internen Diensten.

---

**Datenbankserver**

Linux wird häufig für Datenbanken genutzt.

Beispiele:

| Datenbank | Typ |
|---|---|
| PostgreSQL | relationale Datenbank |
| MariaDB | relationale Datenbank |
| MySQL | relationale Datenbank |
| Redis | In-Memory-Datenbank / Cache |
| SQLite | dateibasierte Datenbank |

Typische Aufgaben:

    Daten speichern

    Anwendungen versorgen

    Benutzerrechte verwalten

    Backups erstellen

    Performance überwachen

Merksatz:

    Datenbanken sind zentrale Dienste und brauchen besondere Sicherung.

---

**Datenbankserver sicher betreiben**

Wichtige Punkte:

    nicht unnötig öffentlich erreichbar machen

    starke Passwörter verwenden

    Benutzerrechte begrenzen

    regelmäßige Backups erstellen

    Restore testen

    Updates einspielen

    Logs prüfen

    Speicherplatz überwachen

    Dienststatus überwachen

Merksatz:

    Datenbankserver brauchen Sicherheit,
    Backups
    und Monitoring.

---

**Dateiserver**

Linux kann Dateien im Netzwerk bereitstellen.

Typische Protokolle:

| Protokoll | Typischer Einsatz |
|---|---|
| SMB/CIFS | Windows- und gemischte Netzwerke |
| NFS | Linux/Unix-Umgebungen |
| SFTP | Dateiübertragung über SSH |
| rsync | Synchronisation und Backups |

Typische Dienste:

    samba

    nfs-server

    sshd

Merksatz:

    Dateiserver stellen Speicher im Netzwerk bereit.

---

**Samba**

Samba ermöglicht SMB/CIFS-Freigaben unter Linux.

Typische Nutzung:

    Windows-Freigaben

    NAS-Freigaben

    gemischte Netzwerke

    gemeinsame Ordner

Wichtige Themen:

    Benutzerrechte

    Dateirechte

    Freigaberechte

    Authentifizierung

    Netzwerkerreichbarkeit

Merksatz:

    Samba verbindet Linux mit SMB/Windows-Freigaben.

---

**NFS**

NFS steht für:

    Network File System

Typische Nutzung:

    Linux-zu-Linux-Freigaben

    Server-zu-Server-Speicher

    virtuelle Umgebungen

    Backup-Ziele

Wichtig:

    UID/GID,
    Export-Regeln
    und Dateirechte müssen passen.

Merksatz:

    NFS ist typisch für Linux/Unix-Dateifreigaben.

---

**DNS-Server**

Ein DNS-Server löst Namen in IP-Adressen auf.

Beispiel:

    server01.intern

wird zu:

    192.168.10.20

Typische Aufgaben:

    interne Namensauflösung

    Zonen verwalten

    Weiterleitung an externe DNS-Server

    Reverse DNS

    DNS-Caching

Typische Software:

    BIND

    Unbound

    dnsmasq

Merksatz:

    DNS macht Namen zu IP-Adressen.

---

**DHCP-Server**

Ein DHCP-Server vergibt Netzwerkkonfigurationen automatisch.

Typische Informationen:

    IP-Adresse

    Subnetzmaske

    Gateway

    DNS-Server

    Lease-Zeit

Vorteil:

    Clients müssen nicht manuell konfiguriert werden.

Merksatz:

    DHCP verteilt IP-Konfigurationen automatisch.

---

**Container-Host**

Linux ist sehr häufig die Grundlage für Container.

Typische Werkzeuge:

    Docker

    Podman

    containerd

Container nutzen Linux-Funktionen wie:

    Namespaces

    cgroups

    Dateisystem-Layer

    Netzwerk-Bridges

    Volumes

Typische Aufgaben:

    Container starten

    Images aktualisieren

    Volumes sichern

    Logs prüfen

    Ports verwalten

    Netzwerke konfigurieren

Merksatz:

    Container laufen häufig auf Linux-Hosts.

---

**Container und Ports**

Containerdienste sind oft über Portweiterleitungen erreichbar.

Beispielidee:

    Host-Port 8080 → Container-Port 80

Wichtig prüfen:

    welcher Host-Port genutzt wird

    welcher Container-Port genutzt wird

    ob der Dienst im Container läuft

    ob der Container im richtigen Netzwerk ist

    ob Volumes korrekt eingebunden sind

    ob Firewall-Regeln passen

Merksatz:

    Bei Containern immer Host-Port,
    Container-Port,
    Netzwerk
    und Volume unterscheiden.

---

**Container und persistente Daten**

Container selbst sind oft ersetzbar.

Daten sollten deshalb in:

    Volumes

    Bind Mounts

    Datenbanken

    externem Speicher

liegen.

Warum?

    Container können neu erstellt werden

    Images können aktualisiert werden

    Container-Dateisysteme können verloren gehen

    Backups müssen Daten außerhalb des Containers erfassen

Merksatz:

    Container ersetzen,
    Daten erhalten.

---

**Serverrollen**

Ein Linux-Server kann eine oder mehrere Rollen haben.

Beispiele:

| Rolle | Aufgabe |
|---|---|
| Webserver | Webseiten bereitstellen |
| Datenbankserver | Daten speichern |
| Dateiserver | Dateien bereitstellen |
| Backupserver | Sicherungen speichern |
| Monitoringserver | Systeme überwachen |
| Proxyserver | Anfragen weiterleiten |
| Containerhost | Container ausführen |
| VPN-Server | sichere Tunnel bereitstellen |
| DNS-Server | Namen auflösen |
| DHCP-Server | IP-Konfiguration verteilen |

Merksatz:

    Serverrollen beschreiben,
    welche Aufgabe ein Server übernimmt.

---

**Mehrere Dienste auf einem Server**

Ein Server kann mehrere Dienste ausführen.

Beispiel:

    Webserver

    Datenbank

    Backup-Agent

    Monitoring-Agent

    SSH

Vorteile:

    weniger Systeme nötig

    einfache kleine Umgebung

Nachteile:

    höhere Abhängigkeit

    mehr Angriffsfläche

    schwierigeres Troubleshooting

    Ressourcen teilen sich mehrere Dienste

    ein Ausfall betrifft mehrere Funktionen

Merksatz:

    Mehr Dienste auf einem Server bedeuten mehr Abhängigkeiten.

---

**Trennung von Diensten**

In größeren Umgebungen werden Dienste oft getrennt.

Beispiel:

    Webserver auf Server A

    Datenbank auf Server B

    Backup auf Server C

    Monitoring auf Server D

Vorteile:

    bessere Sicherheit

    klarere Zuständigkeiten

    einfachere Skalierung

    bessere Fehlereingrenzung

    weniger gegenseitige Beeinflussung

Nachteile:

    mehr Systeme

    mehr Netzwerkabhängigkeiten

    mehr Administration

Merksatz:

    Diensttrennung verbessert Sicherheit und Skalierbarkeit,
    erhöht aber Verwaltungsaufwand.

---

**Produktivsystem,
Testsystem
und Entwicklungssystem**

Typische Umgebungen:

| Umgebung | Zweck |
|---|---|
| Entwicklung | neue Funktionen entwickeln |
| Test | Änderungen prüfen |
| Produktion | echter Betrieb für Benutzer |
| Staging | produktionsnahe Vorstufe |

Wichtig:

    Änderungen sollten nicht ungetestet direkt in Produktion erfolgen.

Merksatz:

    Produktion ist nicht der Ort für ungetestete Experimente.

---

**Serverhärtung**

Serverhärtung bedeutet,
ein System sicherer zu konfigurieren
und unnötige Risiken zu reduzieren.

Maßnahmen:

    nur benötigte Dienste installieren

    unnötige Ports schließen

    Updates einspielen

    SSH absichern

    Firewall aktivieren

    Benutzerrechte begrenzen

    Logs überwachen

    Backups einrichten

    Standardpasswörter entfernen

    Konfiguration dokumentieren

Merksatz:

    Härtung reduziert Angriffsfläche.

---

**Minimale Installation**

Ein Server sollte nur Software enthalten,
die für seine Aufgabe notwendig ist.

Vorteile:

    weniger Angriffsfläche

    weniger Updates

    weniger Abhängigkeiten

    weniger Fehlerquellen

    bessere Übersicht

Beispiel:

    Ein Datenbankserver braucht normalerweise keine grafische Desktopumgebung.

Merksatz:

    Installiere nur,
    was benötigt wird.

---

**Firewall im Serverbetrieb**

Ein Server sollte nur notwendige Ports erreichbar machen.

Beispiele:

| Dienst | Port |
|---|---:|
| SSH | TCP 22 |
| HTTP | TCP 80 |
| HTTPS | TCP 443 |
| DNS | TCP/UDP 53 |
| DHCP | UDP 67/68 |
| SMB | TCP 445 |
| PostgreSQL | TCP 5432 |
| MySQL/MariaDB | TCP 3306 |

Wichtig:

    Nicht jeder Dienst muss aus jedem Netz erreichbar sein.

Merksatz:

    Ports nur für notwendige Quellen öffnen.

---

**Monitoring im Serverbetrieb**

Server sollten überwacht werden.

Wichtige Messwerte:

    CPU

    RAM

    Swap

    Speicherplatz

    Inodes

    Netzwerk

    Dienststatus

    offene Ports

    Logs

    Zertifikate

    Backups

    Antwortzeiten

Merksatz:

    Monitoring erkennt Probleme,
    bevor sie kritisch werden.

---

**Backup im Serverbetrieb**

Server brauchen regelmäßige Backups.

Zu sichern sind oft:

    Anwendungsdaten

    Datenbanken

    Konfigurationen

    Skripte

    Zertifikate

    Schlüssel

    systemd-Units

    Docker Compose Dateien

    Dokumentation

Wichtig:

    Restore testen

    RPO und RTO definieren

    Backup-Logs prüfen

    externe Kopie vorhalten

Merksatz:

    Backup ohne Restore-Test ist unsicher.

---

**Dokumentation im Serverbetrieb**

Dokumentation sollte enthalten:

    Servername

    IP-Adresse

    Aufgabe

    installierte Dienste

    offene Ports

    Benutzer und Berechtigungen

    wichtige Pfade

    Backup-Plan

    Restore-Anleitung

    Abhängigkeiten

    Monitoring

    Ansprechpartner

    Änderungsverlauf

Merksatz:

    Gute Dokumentation spart im Fehlerfall Zeit.

---

**Typische wichtige Pfade auf Servern**

| Pfad | Bedeutung |
|---|---|
| /etc | Konfigurationen |
| /var/log | Logs |
| /var/lib | Anwendungsdaten |
| /srv | bereitgestellte Dienstdaten |
| /opt | optionale Anwendungen |
| /home | Benutzerverzeichnisse |
| /root | Root-Home |
| /tmp | temporäre Dateien |
| /usr/bin | Programme |
| /etc/systemd/system | eigene systemd-Units |

Merksatz:

    Serverwissen bedeutet auch:
    wichtige Pfade kennen.

---

**Typische Serverprüfung nach Neustart**

Nach einem Neustart prüfen:

    Erreichbarkeit

    SSH-Zugriff

    wichtige Dienste

    offene Ports

    Speicherplatz

    Logs

    Mounts

    Datenbanken

    Webanwendungen

    Backups

Beispielbefehle:

    systemctl status dienst

    ss -tulpen

    df -h

    journalctl -p err -b

    findmnt

Merksatz:

    Nach Neustart nicht nur schauen,
    ob der Server pingt.

---

**Typische Serverprüfung nach Update**

Nach Updates prüfen:

    Paketmanager meldet keine Fehler

    Kernel-Neustart nötig?

    Dienste laufen

    Ports lauschen

    Anwendungen antworten

    Logs enthalten keine neuen Fehler

    Speicherplatz ausreichend

    Monitoring wieder grün

Beispielbefehle:

    systemctl --failed

    journalctl -p err -b

    ss -tulpen

    df -h

Merksatz:

    Update fertig heißt erst fertig,
    wenn Dienste und Anwendungen geprüft sind.

---

**Typische Fehlerbilder im Serverbetrieb**

| Fehlerbild | Mögliche Ursache |
|---|---|
| Server nicht erreichbar | Netzwerk, Firewall, ausgeschaltet, Routing |
| SSH geht nicht | Dienst, Port, Firewall, Benutzer, Schlüssel |
| Webseite nicht erreichbar | Webserver, Port, DNS, TLS, Reverse Proxy |
| Datenbank nicht erreichbar | Dienst, Port, Bind-Adresse, Rechte |
| Dienst startet nicht | Konfiguration, Rechte, Abhängigkeit, Port |
| Speicher voll | Logs, Datenbanken, Backups, Container |
| hohe Last | CPU, RAM, I/O, Prozesse, Angriff |
| Mount fehlt | fstab, Netzwerk, Datenträger |
| Backup fehlt | Cron, Rechte, Ziel voll, Netzwerk |
| Name löst nicht auf | DNS, /etc/hosts, Resolver |

---

**Fehlersuche bei Serverdiensten**

Sinnvolle Reihenfolge:

    1. Fehlerbild genau beschreiben

    2. Dienststatus prüfen

    3. Logs prüfen

    4. Port prüfen

    5. lokale Verbindung testen

    6. externe Verbindung testen

    7. Firewall prüfen

    8. Konfiguration prüfen

    9. Rechte prüfen

    10. Abhängigkeiten prüfen

Beispiel:

    systemctl status nginx

    journalctl -u nginx

    ss -tulpen

    curl -I http://127.0.0.1

Merksatz:

    Dienstprobleme immer von innen nach außen prüfen.

---

**Von innen nach außen prüfen**

Bei einem Webdienst:

    1. Läuft der Prozess?

    2. Lauscht der Port lokal?

    3. Antwortet der Dienst lokal?

    4. Antwortet der Dienst über Server-IP?

    5. Antwortet der Dienst aus dem Netzwerk?

    6. Funktioniert DNS?

    7. Funktioniert HTTPS?

    8. Funktioniert die Anwendung?

Merksatz:

    Erst lokal prüfen,
    dann Netzwerk,
    dann DNS,
    dann Anwendung.

---

**Typische Prüfungsfragen**

| Frage | Kurzantwort |
|---|---|
| Warum wird Linux häufig als Server genutzt? | stabil, flexibel, automatisierbar, ressourcenschonend |
| Was ist ein Serverdienst? | Hintergrunddienst, der eine Funktion bereitstellt |
| Was bedeutet headless? | Betrieb ohne Monitor und grafische Oberfläche |
| Wofür wird SSH genutzt? | sichere Fernadministration |
| Was ist ein Webserver? | Dienst für HTTP/HTTPS |
| Was ist ein Reverse Proxy? | vorgeschalteter Proxy vor internen Diensten |
| Was ist ein Datenbankserver? | Server zur strukturierten Datenspeicherung |
| Was ist ein Dateiserver? | stellt Dateien im Netzwerk bereit |
| Was ist ein Container-Host? | System, das Container ausführt |
| Warum Serverhärtung? | Angriffsfläche reduzieren |
| Warum Monitoring? | Probleme früh erkennen |
| Warum Dokumentation? | Betrieb und Fehlerbehebung nachvollziehbar machen |

---

**Typische Prüfungsfallen**

| Falle | Richtig denken |
|---|---|
| Server als Hardware definieren | Server ist vor allem eine Rolle |
| Dienst läuft = Dienst erreichbar | Port, Firewall, Bind-Adresse prüfen |
| Ping geht = Anwendung geht | Ping prüft nicht HTTP, SSH oder Datenbank |
| Headless mit eingeschränkter Verwaltung verwechseln | Verwaltung erfolgt per SSH und Tools |
| Datenbank öffentlich erreichbar machen | nur notwendige Quellen erlauben |
| Containerdaten im Container speichern | Volumes oder Bind Mounts nutzen |
| Backup nur für Benutzerdaten planen | auch Konfigurationen sichern |
| Update ohne Nachprüfung | Dienste, Logs und Anwendungen prüfen |
| mehrere Dienste ohne Abhängigkeiten betrachten | Dienste beeinflussen sich gegenseitig |
| keine Dokumentation | Fehlerfall wird langsamer und riskanter |

---

**IHK-sichere Kurzformulierung**

Linux wird häufig als Serverbetriebssystem eingesetzt, weil es stabil, ressourcenschonend, gut automatisierbar und per SSH administrierbar ist. Ein Server stellt Dienste für Clients bereit, zum Beispiel Webserver, Datenbankserver, Dateiserver, DNS, DHCP, Container oder Backupdienste. Viele Linux-Server laufen headless, also ohne grafische Oberfläche, und werden über SSH, systemctl, journalctl und Konfigurationsdateien verwaltet. Im sicheren Serverbetrieb sind minimale Installation, regelmäßige Updates, Firewall-Regeln, Diensthärtung, Monitoring, Backups, Restore-Tests und Dokumentation wichtig. Bei Fehlern wird systematisch geprüft: Dienststatus, Logs, offene Ports, lokale Antwort, Netzwerkzugriff, Firewall, Konfiguration, Rechte und Abhängigkeiten.

---

**Merksätze**

    Linux ist im Serverbereich sehr verbreitet.

    Server stellen Dienste bereit.

    Client fragt an,
    Server antwortet.

    Serverdienst = Hintergrunddienst mit Aufgabe.

    Headless bedeutet:
    ohne grafische Oberfläche.

    SSH ist Standard für Fernadministration.

    systemctl verwaltet Dienste.

    journalctl zeigt Dienstlogs.

    enabled heißt Autostart.

    active heißt läuft gerade.

    Webserver nutzen HTTP und HTTPS.

    HTTP nutzt TCP 80.

    HTTPS nutzt TCP 443.

    Reverse Proxy steht vor internen Diensten.

    Datenbanken brauchen besondere Sicherung.

    Dateiserver stellen Speicher im Netzwerk bereit.

    Samba nutzt SMB/CIFS.

    NFS ist typisch für Linux/Unix-Freigaben.

    DNS löst Namen auf.

    DHCP verteilt IP-Konfiguration.

    Container laufen häufig auf Linux-Hosts.

    Containerdaten gehören in Volumes oder Bind Mounts.

    Serverrollen beschreiben Aufgaben.

    Mehr Dienste bedeuten mehr Abhängigkeiten.

    Diensttrennung verbessert Sicherheit und Skalierbarkeit.

    Produktion ist nicht für ungetestete Experimente.

    Härtung reduziert Angriffsfläche.

    Nur benötigte Dienste betreiben.

    Nur notwendige Ports öffnen.

    Monitoring erkennt Probleme früh.

    Backup ohne Restore-Test ist unsicher.

    Dokumentation spart im Fehlerfall Zeit.

    Dienstprobleme von innen nach außen prüfen.

# 14. Prüfungsvorbereitung und Wiederholung



# 14.1 Prüfungsvorbereitung und Wiederholung

Diese Seite fasst die wichtigsten Linux-Themen für die IHK-Prüfung zusammen.

Der Fokus liegt nicht auf auswendig gelernten Einzelbefehlen,
sondern auf Verständnis:

    - Was macht Linux als Betriebssystem?
    - Wie ist das Dateisystem aufgebaut?
    - Wie funktionieren Benutzer und Rechte?
    - Wie prüft man Dienste?
    - Wie grenzt man Fehler ein?
    - Wie liest man Logs?
    - Wie arbeitet man sicher auf Servern?
    - Wie argumentiert man fachlich sauber?

Für Fachinformatiker Systemintegration ist Linux besonders relevant,
weil viele Server,
Container,
Netzwerkdienste,
Monitoring-Systeme,
Firewalls,
NAS-Systeme
und Cloud-Umgebungen auf Linux basieren.

Merksatz:

    In der Prüfung zählt nicht nur der Befehl,
    sondern die richtige fachliche Einordnung.

---

**Lernziele**

Nach dieser Seite solltest du wiederholen können:

    - Linux-Grundbegriffe
    - Dateisystem und wichtige Pfade
    - Dateioperationen
    - Benutzer,
      Gruppen
      und Rechte
    - Prozesse,
      Dienste
      und systemd
    - Paketverwaltung
    - Netzwerkdiagnose
    - Speicher,
      Mounts
      und Dateisysteme
    - Logs,
      Monitoring
      und Fehlersuche
    - Shell,
      Pipes
      und Umleitungen
    - Bash-Scripting
    - Sicherheit,
      Backup
      und Automatisierung
    - Linux im Serverbetrieb

---

**Linux-Grundlagen wiederholen**

| Begriff | Bedeutung |
|---|---|
| Linux | Betriebssystemkern, im Alltag oft komplette Distribution gemeint |
| Kernel | Kern des Betriebssystems |
| Distribution | Linux-Kernel plus Software, Paketmanager und Systemwerkzeuge |
| Shell | Befehlsinterpreter |
| Bash | verbreitete Linux-Shell |
| Terminal | Eingabeumgebung für Shell-Befehle |
| root | administrativer Hauptbenutzer |
| sudo | gezielte Ausführung mit erhöhten Rechten |
| Paketmanager | installiert und aktualisiert Softwarepakete |

Merksatz:

    Linux ist streng genommen der Kernel,
    im Alltag meint man oft die gesamte Distribution.

---

**Kernel,
Distribution
und Shell unterscheiden**

| Begriff | Aufgabe |
|---|---|
| Kernel | verwaltet Hardware, Speicher, Prozesse und Systemzugriffe |
| Distribution | stellt komplettes nutzbares Betriebssystem bereit |
| Shell | nimmt Befehle entgegen und startet Programme |
| Terminal | Fenster oder Umgebung zur Eingabe von Befehlen |

Typische Prüfungsfalle:

    Linux,
    Distribution,
    Shell
    und Terminal werden durcheinandergeworfen.

IHK-sicher:

    Der Kernel ist der Betriebssystemkern.
    Eine Distribution kombiniert den Kernel mit Systemprogrammen,
    Paketverwaltung,
    Diensten
    und optional grafischer Oberfläche.

---

**Wichtige Linux-Verzeichnisse**

| Pfad | Bedeutung |
|---|---|
| / | Root-Verzeichnis des Dateisystems |
| /home | Benutzerverzeichnisse |
| /root | Home-Verzeichnis des Root-Benutzers |
| /etc | Konfigurationsdateien |
| /var | veränderliche Daten |
| /var/log | Logdateien |
| /tmp | temporäre Dateien |
| /usr | Programme und Ressourcen |
| /bin | wichtige Benutzerprogramme |
| /sbin | wichtige Systemprogramme |
| /dev | Gerätedateien |
| /proc | Prozess- und Kernelinformationen |
| /sys | System- und Geräteinformationen |
| /mnt | manuelle Mountpoints |
| /media | Wechselmedien |
| /opt | optionale Zusatzsoftware |
| /srv | Dienstdaten |

Merksatz:

    /etc für Konfiguration.
    /var/log für Logs.
    /home für Benutzer.
    / ist die Wurzel des Dateisystems.

---

**Absolute und relative Pfade**

| Pfadart | Bedeutung | Beispiel |
|---|---|---|
| absolut | beginnt bei / | /etc/hosts |
| relativ | abhängig vom aktuellen Verzeichnis | dokumente/datei.txt |

Wichtige Zeichen:

| Zeichen | Bedeutung |
|---|---|
| / | Root-Verzeichnis oder Pfadtrenner |
| . | aktuelles Verzeichnis |
| .. | übergeordnetes Verzeichnis |
| ~ | eigenes Home-Verzeichnis |

Prüfungsfalle:

    Relativer Pfad hängt immer davon ab,
    wo man sich gerade befindet.

Merksatz:

    Absoluter Pfad beginnt mit /.

---

**Dateien anzeigen und bearbeiten**

| Aufgabe | Befehl |
|---|---|
| Verzeichnisinhalt anzeigen | ls |
| ausführlich anzeigen | ls -l |
| versteckte Dateien anzeigen | ls -a |
| aktuelle Position anzeigen | pwd |
| Verzeichnis wechseln | cd |
| Dateiinhalt anzeigen | cat |
| lange Datei lesen | less |
| Anfang anzeigen | head |
| Ende anzeigen | tail |
| live mitlesen | tail -f |
| Datei erstellen | touch |
| Datei bearbeiten | nano |
| kopieren | cp |
| verschieben oder umbenennen | mv |
| löschen | rm |
| Verzeichnis erstellen | mkdir |
| Datei suchen | find |
| Text suchen | grep |

Merksatz:

    cat für kleine Dateien.
    less für lange Dateien.
    tail -f für Live-Logs.

---

**find und grep unterscheiden**

| Befehl | Sucht |
|---|---|
| find | Dateien und Verzeichnisse |
| grep | Text innerhalb von Dateien oder Ausgaben |

Beispiele:

    find /etc -name "*ssh*"

    grep "PermitRootLogin" /etc/ssh/sshd_config

Prüfungsfalle:

    find sucht Dateinamen oder Dateieigenschaften.
    grep sucht Inhalte.

Merksatz:

    find sucht Dateien.
    grep sucht Text.

---

**Benutzer,
Gruppen
und Rechte**

Linux-Rechte gelten klassisch für:

    Besitzer

    Gruppe

    Andere

Die Rechte sind:

| Recht | Bedeutung bei Dateien | Bedeutung bei Verzeichnissen |
|---|---|---|
| r | lesen | Inhalt auflisten |
| w | schreiben | Einträge erstellen, löschen, umbenennen |
| x | ausführen | Verzeichnis betreten |

Wichtige Befehle:

| Befehl | Zweck |
|---|---|
| whoami | aktuellen Benutzer anzeigen |
| id | UID, GID und Gruppen anzeigen |
| groups | Gruppen anzeigen |
| chmod | Rechte ändern |
| chown | Besitzer ändern |
| chgrp | Gruppe ändern |
| sudo | Befehl mit erhöhten Rechten ausführen |

Merksatz:

    Bei Verzeichnissen bedeutet x:
    betreten.

---

**Numerische Rechte wiederholen**

| Zahl | Rechte |
|---:|---|
| 0 | --- |
| 1 | --x |
| 2 | -w- |
| 3 | -wx |
| 4 | r-- |
| 5 | r-x |
| 6 | rw- |
| 7 | rwx |

Typische Rechte:

| Rechte | Bedeutung |
|---|---|
| 644 | normale Datei |
| 600 | private Datei |
| 755 | Programm oder öffentlich betretbares Verzeichnis |
| 700 | privates Verzeichnis oder privates Skript |
| 777 | jeder darf alles, meist unsicher |

Merksatz:

    r=4,
    w=2,
    x=1.

---

**Root,
sudo
und Sicherheit**

| Begriff | Bedeutung |
|---|---|
| root | administrativer Hauptbenutzer |
| sudo | einzelne Befehle mit erhöhten Rechten ausführen |
| su | Benutzer wechseln |
| /root | Home-Verzeichnis von root |
| / | Root-Verzeichnis des Dateisystems |

Prüfungsfalle:

    root,
    /root
    und /
    sind nicht dasselbe.

IHK-sicher:

    Administrative Rechte sollten gezielt und nachvollziehbar genutzt werden.
    Dauerhaftes Arbeiten als root erhöht das Risiko für Fehlbedienung und Schäden.

Merksatz:

    Root-Rechte bewusst und nur bei Bedarf verwenden.

---

**Prozesse und Dienste**

| Begriff | Bedeutung |
|---|---|
| Prozess | laufendes Programm |
| PID | eindeutige Prozess-ID |
| Dienst | Hintergrundprogramm mit Aufgabe |
| Daemon | Hintergrundprozess |
| systemd | Dienst- und Init-System vieler Distributionen |
| Unit | Verwaltungseinheit von systemd |
| .service | Dienst-Unit |

Wichtige Befehle:

| Befehl | Zweck |
|---|---|
| ps aux | Prozesse anzeigen |
| top | Prozesse live anzeigen |
| htop | komfortabler Prozessmonitor, falls installiert |
| kill | Signal an Prozess senden |
| systemctl status dienst | Dienststatus prüfen |
| journalctl -u dienst | Dienstlogs anzeigen |

Merksatz:

    Prozess = läuft.
    Dienst = Hintergrundaufgabe.

---

**systemctl sicher unterscheiden**

| Befehl | Bedeutung |
|---|---|
| systemctl start dienst | startet jetzt |
| systemctl stop dienst | stoppt jetzt |
| systemctl restart dienst | startet neu |
| systemctl reload dienst | lädt Konfiguration neu, falls unterstützt |
| systemctl enable dienst | aktiviert Autostart |
| systemctl disable dienst | deaktiviert Autostart |
| systemctl status dienst | zeigt Status |
| systemctl is-active dienst | prüft, ob Dienst läuft |
| systemctl is-enabled dienst | prüft Autostart |

Prüfungsfalle:

    start und enable sind nicht dasselbe.

Merksatz:

    active heißt:
    läuft jetzt.
    enabled heißt:
    startet beim Boot.

---

**Paketverwaltung**

| Distribution | Paketmanager |
|---|---|
| Debian / Ubuntu | apt |
| Fedora / Rocky Linux | dnf |
| openSUSE | zypper |
| Arch Linux | pacman |
| Alpine Linux | apk |

Wichtige apt-Befehle:

| Befehl | Bedeutung |
|---|---|
| apt update | Paketlisten aktualisieren |
| apt upgrade | installierte Pakete aktualisieren |
| apt install paket | Paket installieren |
| apt remove paket | Paket entfernen |
| apt purge paket | Paket inklusive Konfiguration entfernen |
| apt search begriff | Paket suchen |
| apt show paket | Paketinformationen anzeigen |
| apt autoremove | nicht mehr benötigte Abhängigkeiten entfernen |

Merksatz:

    apt update holt Listen.
    apt upgrade installiert Updates.

---

**Repository,
Paket
und Abhängigkeit**

| Begriff | Bedeutung |
|---|---|
| Paket | verwaltete Softwareeinheit |
| Repository | Paketquelle |
| Abhängigkeit | zusätzlich benötigtes Paket |
| Paketmanager | Werkzeug zur Paketverwaltung |
| Patchmanagement | geplanter Umgang mit Updates |

Prüfungsfalle:

    Manuelle Installation von Webseiten ist unter Linux-Servern meist nicht der Standardweg.

IHK-sicher:

    Paketmanager installieren Software kontrolliert,
    lösen Abhängigkeiten auf
    und stellen Updates bereit.

Merksatz:

    Repository = Paketquelle.

---

**Netzwerkdiagnose**

| Aufgabe | Befehl |
|---|---|
| IP-Adressen anzeigen | ip addr |
| Schnittstellen anzeigen | ip link |
| Routing anzeigen | ip route |
| Erreichbarkeit prüfen | ping |
| DNS prüfen | dig oder nslookup |
| Ports anzeigen | ss -tulpen |
| HTTP/HTTPS prüfen | curl |
| Hostname anzeigen | hostname |
| DNS-Status prüfen | resolvectl status |
| SSH-Verbindung herstellen | ssh benutzer@server |

Merksatz:

    Erst IP,
    dann Route,
    dann DNS,
    dann Port,
    dann Dienst.

---

**Typische Netzwerkauswertung**

| Ergebnis | Wahrscheinliche Richtung |
|---|---|
| keine IP-Adresse | DHCP oder Interface |
| Gateway nicht erreichbar | lokales Netz, VLAN, Gateway |
| externe IP nicht erreichbar | Routing, NAT oder Firewall |
| IP erreichbar, Name nicht | DNS |
| Dienst läuft, Port nicht erreichbar | Firewall, Bind-Adresse, Port |
| Port lauscht auf 127.0.0.1 | nur lokal erreichbar |
| Connection refused | Dienst oder Port lehnt ab |
| Connection timed out | Firewall, Routing oder Ziel nicht erreichbar |

Merksatz:

    ping prüft ICMP,
    nicht den Dienst.

---

**SSH wiederholen**

| Begriff | Bedeutung |
|---|---|
| SSH | sichere Fernadministration |
| TCP 22 | Standardport für SSH |
| ssh | Client-Befehl |
| sshd | SSH-Serverdienst |
| authorized_keys | erlaubte öffentliche Schlüssel |
| known_hosts | bekannte Server-Host-Keys |
| privater Schlüssel | bleibt geheim |
| öffentlicher Schlüssel | darf auf Server |

Sicherheitsregel:

    Direkten Root-Login vermeiden.
    Besser normaler Benutzer plus sudo.

Merksatz:

    Öffentlicher Schlüssel auf Server.
    Privater Schlüssel bleibt geheim.

---

**Firewall wiederholen**

Eine Firewall-Regel sollte enthalten:

    Quelle

    Ziel

    Protokoll

    Port

    Richtung

    Aktion

    Zweck

Typische Werkzeuge:

| Werkzeug | Einordnung |
|---|---|
| ufw | einfache Firewall-Oberfläche, häufig Ubuntu |
| firewalld | Firewall-Verwaltung mit Zonen |
| nftables | moderner Firewall-Unterbau |
| iptables | klassisches Firewall-Werkzeug |

Merksatz:

    Port allein ist keine vollständige Firewall-Regel.

---

**Speicher und Mounts**

| Begriff | Bedeutung |
|---|---|
| Datenträger | physisches oder virtuelles Speichermedium |
| Partition | Bereich auf einem Datenträger |
| Dateisystem | Organisationsform für Dateien |
| Mountpoint | Einhängepunkt im Verzeichnisbaum |
| fstab | automatische Mounts beim Systemstart |
| UUID | eindeutige Kennung eines Dateisystems |
| Swap | Auslagerungsspeicher |

Wichtige Befehle:

| Befehl | Zweck |
|---|---|
| lsblk | Datenträger und Partitionen anzeigen |
| lsblk -f | Dateisysteme und UUIDs anzeigen |
| df -h | Speicherplatz prüfen |
| df -i | Inodes prüfen |
| du -sh ordner | Ordnergröße anzeigen |
| mount | Mounts anzeigen oder einhängen |
| umount | aushängen |
| findmnt | Mounts strukturiert anzeigen |
| free -h | RAM und Swap anzeigen |

Merksatz:

    df zeigt Dateisysteme.
    du zeigt Ordnergrößen.

---

**fstab wiederholen**

Die Datei:

    /etc/fstab

legt fest,
welche Dateisysteme beim Start automatisch eingebunden werden.

Wichtige Prüfungen nach Änderung:

    cp /etc/fstab /etc/fstab.bak

    mount -a

    findmnt

    df -h

Prüfungsfalle:

    /dev/sdb1 kann sich ändern.
    UUIDs sind für dauerhafte Mounts oft stabiler.

Merksatz:

    fstab nie ungetestet ändern.

---

**Logs und Monitoring**

| Aufgabe | Befehl |
|---|---|
| systemd-Journal anzeigen | journalctl |
| Dienstlogs anzeigen | journalctl -u dienst |
| Logs live anzeigen | journalctl -f |
| Logs seit Boot anzeigen | journalctl -b |
| Kernelmeldungen anzeigen | dmesg |
| Logdatei lesen | less logfile |
| Logdatei live lesen | tail -f logfile |
| Logs filtern | grep |
| Dienststatus prüfen | systemctl status dienst |
| CPU und Prozesse prüfen | top |
| RAM prüfen | free -h |
| Speicher prüfen | df -h |

Merksatz:

    Dienstproblem:
    status prüfen,
    dann Logs lesen.

---

**Typische Logorte**

| Ort | Bedeutung |
|---|---|
| /var/log | klassische Logdateien |
| /var/log/syslog | allgemeine Logs, häufig Debian/Ubuntu |
| /var/log/messages | allgemeine Logs, häufig RHEL/Fedora-Umfeld |
| /var/log/auth.log | Authentifizierung, häufig Debian/Ubuntu |
| /var/log/secure | Authentifizierung, häufig RHEL/Fedora-Umfeld |
| journalctl | systemd-Journal |
| dmesg | Kernelmeldungen |

Merksatz:

    Nicht jede Distribution nutzt dieselben Logdateinamen.

---

**Shell,
Pipes
und Umleitungen**

| Zeichen / Befehl | Bedeutung |
|---|---|
| \| | Pipe, Ausgabe an nächsten Befehl |
| > | Ausgabe in Datei schreiben und überschreiben |
| >> | Ausgabe anhängen |
| < | Datei als Eingabe nutzen |
| 2> | Fehlerausgabe umleiten |
| &> | Ausgabe und Fehler gemeinsam umleiten |
| /dev/null | Ausgabe verwerfen |
| ; | Befehle nacheinander |
| && | nächster Befehl nur bei Erfolg |
| \|\| | nächster Befehl nur bei Fehler |
| $? | Exit-Code des letzten Befehls |

Merksatz:

    > überschreibt.
    >> hängt an.
    2> leitet Fehler um.

---

**stdin,
stdout
und stderr**

| Kanal | Nummer | Bedeutung |
|---|---:|---|
| stdin | 0 | Standardeingabe |
| stdout | 1 | Standardausgabe |
| stderr | 2 | Standardfehler |

Prüfungsfalle:

    Fehlermeldungen gehen nicht automatisch über stdout.
    Deshalb reicht > nicht immer,
    um Fehler umzuleiten.

Merksatz:

    0 Eingabe,
    1 Ausgabe,
    2 Fehler.

---

**Bash-Scripting wiederholen**

| Element | Bedeutung |
|---|---|
| #!/bin/bash | Shebang für Bash |
| chmod +x script.sh | Skript ausführbar machen |
| ./script.sh | Skript aus aktuellem Verzeichnis starten |
| $1 | erster Parameter |
| $# | Anzahl Parameter |
| "$@" | alle Parameter sauber einzeln |
| $? | Exit-Code des letzten Befehls |
| if | Bedingung |
| for | Schleife über Werte |
| while | Schleife solange Bedingung wahr ist |
| case | Auswahl nach Muster |
| read | Benutzereingabe lesen |
| function | wiederverwendbarer Skriptblock |

Merksatz:

    Skripte automatisieren Befehle,
    aber auch Fehler,
    wenn sie schlecht geschrieben sind.

---

**Sichere Bash-Regeln**

Wichtige Regeln:

    Variablen meistens quoten

    "$VARIABLE"

    Parameter prüfen

    Exit-Codes beachten

    gefährliche Befehle vorher testen

    absolute Pfade nutzen,
    besonders bei cron

    Logs schreiben

    Skripte zuerst in Testumgebung prüfen

    Kommentare für Zweck und Ablauf nutzen

Typische strenge Optionen:

    set -euo pipefail

Merksatz:

    In Skripten erst prüfen,
    dann handeln.

---

**Sicherheit wiederholen**

Wichtige Sicherheitsprinzipien:

| Thema | Kerngedanke |
|---|---|
| Least Privilege | nur notwendige Rechte |
| Updates | bekannte Schwachstellen schließen |
| Firewall | unnötige Zugriffe blockieren |
| SSH-Härtung | sicheren Administrationszugang |
| Dienstkonten | Dienste nicht unnötig als root |
| Logging | Ereignisse nachvollziehen |
| Monitoring | Probleme früh erkennen |
| Backups | Wiederherstellung ermöglichen |
| Dokumentation | Betrieb nachvollziehbar machen |

Merksatz:

    Sicherheit ist kein einzelner Befehl,
    sondern ein Betriebskonzept.

---

**Backup wiederholen**

| Begriff | Bedeutung |
|---|---|
| Backup | Sicherung von Daten |
| Restore | Wiederherstellung |
| RPO | maximal akzeptabler Datenverlust |
| RTO | maximal akzeptable Wiederherstellungszeit |
| Vollbackup | vollständige Sicherung |
| inkrementell | Änderungen seit letztem Backup |
| differentiell | Änderungen seit letztem Vollbackup |
| Snapshot | Zustand zu einem Zeitpunkt |
| 3-2-1-Regel | mehrere Kopien, unterschiedliche Orte, externe Kopie |

Merksatz:

    RPO = Datenverlust.
    RTO = Wiederherstellungszeit.

---

**Automatisierung wiederholen**

| Werkzeug | Zweck |
|---|---|
| Bash-Skript | Befehlsfolge automatisieren |
| cron | zeitgesteuerte Aufgaben |
| systemd Timer | zeitgesteuerte systemd-Units |
| logrotate | Logs rotieren |
| Monitoring | Zustand überwachen |
| Alerting | bei Problemen benachrichtigen |

Wichtig:

    Automatisierung braucht Logs,
    Exit-Codes,
    Monitoring
    und Dokumentation.

Merksatz:

    Automatisierung ohne Kontrolle kann unbemerkt ausfallen.

---

**Linux im Serverbetrieb wiederholen**

Typische Serverrollen:

| Rolle | Beispiel |
|---|---|
| Webserver | nginx, Apache |
| Datenbankserver | PostgreSQL, MariaDB |
| Dateiserver | Samba, NFS |
| DNS-Server | BIND, Unbound |
| DHCP-Server | DHCP-Dienst |
| Container-Host | Docker, Podman |
| Backupserver | Backupdienste |
| Monitoringserver | Überwachungssystem |
| Reverse Proxy | nginx, Proxy-Dienst |
| VPN-Server | WireGuard, OpenVPN |

Merksatz:

    Server ist eine Rolle,
    nicht nur ein bestimmtes Gerät.

---

**Standardports wiederholen**

| Dienst | Port |
|---|---:|
| SSH | TCP 22 |
| DNS | TCP/UDP 53 |
| DHCP | UDP 67/68 |
| HTTP | TCP 80 |
| HTTPS | TCP 443 |
| SMB | TCP 445 |
| MySQL/MariaDB | TCP 3306 |
| PostgreSQL | TCP 5432 |
| SMTP | TCP 25 |
| IMAP | TCP 143 |
| IMAPS | TCP 993 |
| POP3 | TCP 110 |
| POP3S | TCP 995 |
| NTP | UDP 123 |

Merksatz:

    Port immer mit Protokoll nennen:
    TCP oder UDP.

---

**Typische IHK-Fehlerfragen**

| Fehlerbild | Erste sinnvolle Prüfungen |
|---|---|
| Dienst startet nicht | systemctl status, journalctl -u, Konfiguration, Rechte, Port |
| Webseite nicht erreichbar | Dienst, Port, curl lokal, Firewall, DNS, Logs |
| SSH geht nicht | Netzwerk, Port 22, sshd, Firewall, Benutzer, Schlüssel |
| Speicher voll | df -h, df -i, du -sh, Logs, Backups |
| DNS geht nicht | IP-Test, dig, resolv.conf, DNS-Server, /etc/hosts |
| Permission denied | whoami, id, ls -l, ls -ld, Gruppen |
| No such file | pwd, ls, Pfad, Groß-/Kleinschreibung, Mount |
| Containerdaten weg | Volumes, Bind Mounts, Container-Dateisystem |
| Backup fehlgeschlagen | Logs, Ziel, Rechte, Speicher, Netzwerk |
| System langsam | top, free -h, df -h, iowait, Logs |

Merksatz:

    Fehlerbild lesen,
    Ebene erkennen,
    gezielt prüfen.

---

**Fehlersuche: Standardreihenfolge**

Bei vielen Linux-Problemen hilft diese Reihenfolge:

    1. Fehler genau lesen

    2. betroffenen Bereich bestimmen

    3. letzte Änderung prüfen

    4. Status prüfen

    5. Logs prüfen

    6. Ressourcen prüfen

    7. Rechte prüfen

    8. Netzwerk prüfen

    9. Konfiguration prüfen

    10. Maßnahme dokumentieren

Merksatz:

    Nicht raten,
    sondern eingrenzen.

---

**Von innen nach außen prüfen**

Bei Dienstproblemen:

    1. Läuft der Prozess?

    2. Läuft der Dienst laut systemctl?

    3. Gibt es Fehler in journalctl?

    4. Lauscht der Port lokal?

    5. Antwortet der Dienst lokal?

    6. Antwortet der Dienst über Server-IP?

    7. Funktioniert Zugriff aus dem Netzwerk?

    8. Stimmen DNS,
       Firewall
       und Anwendung?

Merksatz:

    Erst lokal prüfen,
    dann Netzwerk,
    dann DNS,
    dann Anwendung.

---

**Häufige Prüfungsfallen**

| Falle | Richtig denken |
|---|---|
| ping geht, also Dienst geht | ping prüft nicht TCP/UDP-Dienst |
| Dienst läuft, also erreichbar | Port, Firewall und Bind-Adresse prüfen |
| apt update installiert Updates | apt update aktualisiert Paketlisten |
| enable startet Dienst sofort | enable aktiviert Autostart |
| / und /root verwechseln | / Dateisystemwurzel, /root Root-Home |
| x bei Verzeichnissen vergessen | x bedeutet betreten |
| chmod 777 als Lösung | unsicher und meist falsch |
| Backup ohne Restore-Test | unzuverlässig |
| Snapshot als Backup-Konzept | nicht automatisch ausreichend |
| cron wie normale Shell behandeln | andere Umgebung |
| > und >> verwechseln | > überschreibt, >> hängt an |
| stderr vergessen | Fehlerkanal ist 2 |

---

**Kleine Prüfungsaufgaben mit Kurzantwort**

| Aufgabe | Kurzantwort |
|---|---|
| Aktuelle IP anzeigen | ip addr |
| Standardgateway anzeigen | ip route |
| Dienststatus prüfen | systemctl status dienst |
| Dienstlogs anzeigen | journalctl -u dienst |
| Speicherplatz prüfen | df -h |
| Inodes prüfen | df -i |
| RAM prüfen | free -h |
| Prozesse prüfen | ps aux oder top |
| offene Ports anzeigen | ss -tulpen |
| Text in Datei suchen | grep "text" datei |
| Datei suchen | find /pfad -name "datei" |
| Datei ausführbar machen | chmod +x datei |
| Besitzer ändern | chown benutzer datei |
| Paketlisten aktualisieren | apt update |
| Pakete aktualisieren | apt upgrade |
| SSH verbinden | ssh benutzer@server |

---

**IHK-sichere Kurzformulierungen**

Linux ist ein Mehrbenutzersystem,
das Zugriffe über Benutzer,
Gruppen
und Rechte steuert.

Ein absoluter Pfad beginnt mit /,
ein relativer Pfad bezieht sich auf das aktuelle Verzeichnis.

Dienste werden auf vielen Distributionen mit systemd verwaltet.
systemctl dient zur Verwaltung der Dienste,
journalctl zur Auswertung der Logs.

apt update aktualisiert Paketlisten,
apt upgrade aktualisiert installierte Pakete.

ping prüft ICMP-Erreichbarkeit,
ersetzt aber keinen Test eines TCP-
oder UDP-Dienstes.

df -h zeigt freien und belegten Speicherplatz von Dateisystemen,
du -sh zeigt die Größe eines Verzeichnisses.

RPO beschreibt den maximal akzeptablen Datenverlust,
RTO die maximal akzeptable Wiederherstellungszeit.

Ein Backup ist erst zuverlässig,
wenn ein Restore erfolgreich getestet wurde.

---

**Abschluss-Merksätze**

    Linux verstehen heißt:
    Struktur,
    Rechte,
    Dienste,
    Logs
    und Netzwerk verstehen.

    Nicht jeder Fehler ist ein Linux-Fehler.
    Oft ist es Netzwerk,
    DNS,
    Rechte,
    Speicher,
    Dienst
    oder Konfiguration.

    Befehle sind Werkzeuge.
    Entscheidend ist,
    wann man welchen Befehl warum nutzt.

    In der Prüfung immer fachlich sauber begründen.

    Erst prüfen,
    dann ändern.

    Erst sichern,
    dann konfigurieren.

    Erst lokal testen,
    dann extern testen.

    Erst Logs lesen,
    dann Maßnahmen ableiten.

    Keine pauschalen 777-Rechte.

    Kein blindes sudo.

    Keine ungetesteten fstab-Änderungen.

    Kein Backup ohne Restore-Test.

    Keine Automatisierung ohne Logs.

    Keine Serveränderung ohne Dokumentation.

# 15. Linux-Spickzettel



# 15.1 Prüfungsvorbereitung und Wiederholung

Diese Seite fasst die wichtigsten Linux-Themen für die IHK-Prüfung zusammen.

Der Fokus liegt nicht auf auswendig gelernten Einzelbefehlen,
sondern auf Verständnis:

    - Was macht Linux als Betriebssystem?
    - Wie ist das Dateisystem aufgebaut?
    - Wie funktionieren Benutzer und Rechte?
    - Wie prüft man Dienste?
    - Wie grenzt man Fehler ein?
    - Wie liest man Logs?
    - Wie arbeitet man sicher auf Servern?
    - Wie argumentiert man fachlich sauber?

Für Fachinformatiker Systemintegration ist Linux besonders relevant,
weil viele Server,
Container,
Netzwerkdienste,
Monitoring-Systeme,
Firewalls,
NAS-Systeme
und Cloud-Umgebungen auf Linux basieren.

Merksatz:

    In der Prüfung zählt nicht nur der Befehl,
    sondern die richtige fachliche Einordnung.

---

**Lernziele**

Nach dieser Seite solltest du wiederholen können:

    - Linux-Grundbegriffe
    - Dateisystem und wichtige Pfade
    - Dateioperationen
    - Benutzer,
      Gruppen
      und Rechte
    - Prozesse,
      Dienste
      und systemd
    - Paketverwaltung
    - Netzwerkdiagnose
    - Speicher,
      Mounts
      und Dateisysteme
    - Logs,
      Monitoring
      und Fehlersuche
    - Shell,
      Pipes
      und Umleitungen
    - Bash-Scripting
    - Sicherheit,
      Backup
      und Automatisierung
    - Linux im Serverbetrieb

---

**Linux-Grundlagen wiederholen**

| Begriff | Bedeutung |
|---|---|
| Linux | Betriebssystemkern, im Alltag oft komplette Distribution gemeint |
| Kernel | Kern des Betriebssystems |
| Distribution | Linux-Kernel plus Software, Paketmanager und Systemwerkzeuge |
| Shell | Befehlsinterpreter |
| Bash | verbreitete Linux-Shell |
| Terminal | Eingabeumgebung für Shell-Befehle |
| root | administrativer Hauptbenutzer |
| sudo | gezielte Ausführung mit erhöhten Rechten |
| Paketmanager | installiert und aktualisiert Softwarepakete |

Merksatz:

    Linux ist streng genommen der Kernel,
    im Alltag meint man oft die gesamte Distribution.

---

**Kernel,
Distribution
und Shell unterscheiden**

| Begriff | Aufgabe |
|---|---|
| Kernel | verwaltet Hardware, Speicher, Prozesse und Systemzugriffe |
| Distribution | stellt komplettes nutzbares Betriebssystem bereit |
| Shell | nimmt Befehle entgegen und startet Programme |
| Terminal | Fenster oder Umgebung zur Eingabe von Befehlen |

Typische Prüfungsfalle:

    Linux,
    Distribution,
    Shell
    und Terminal werden durcheinandergeworfen.

IHK-sicher:

    Der Kernel ist der Betriebssystemkern.
    Eine Distribution kombiniert den Kernel mit Systemprogrammen,
    Paketverwaltung,
    Diensten
    und optional grafischer Oberfläche.

---

**Wichtige Linux-Verzeichnisse**

| Pfad | Bedeutung |
|---|---|
| / | Root-Verzeichnis des Dateisystems |
| /home | Benutzerverzeichnisse |
| /root | Home-Verzeichnis des Root-Benutzers |
| /etc | Konfigurationsdateien |
| /var | veränderliche Daten |
| /var/log | Logdateien |
| /tmp | temporäre Dateien |
| /usr | Programme und Ressourcen |
| /bin | wichtige Benutzerprogramme |
| /sbin | wichtige Systemprogramme |
| /dev | Gerätedateien |
| /proc | Prozess- und Kernelinformationen |
| /sys | System- und Geräteinformationen |
| /mnt | manuelle Mountpoints |
| /media | Wechselmedien |
| /opt | optionale Zusatzsoftware |
| /srv | Dienstdaten |

Merksatz:

    /etc für Konfiguration.
    /var/log für Logs.
    /home für Benutzer.
    / ist die Wurzel des Dateisystems.

---

**Absolute und relative Pfade**

| Pfadart | Bedeutung | Beispiel |
|---|---|---|
| absolut | beginnt bei / | /etc/hosts |
| relativ | abhängig vom aktuellen Verzeichnis | dokumente/datei.txt |

Wichtige Zeichen:

| Zeichen | Bedeutung |
|---|---|
| / | Root-Verzeichnis oder Pfadtrenner |
| . | aktuelles Verzeichnis |
| .. | übergeordnetes Verzeichnis |
| ~ | eigenes Home-Verzeichnis |

Prüfungsfalle:

    Relativer Pfad hängt immer davon ab,
    wo man sich gerade befindet.

Merksatz:

    Absoluter Pfad beginnt mit /.

---

**Dateien anzeigen und bearbeiten**

| Aufgabe | Befehl |
|---|---|
| Verzeichnisinhalt anzeigen | ls |
| ausführlich anzeigen | ls -l |
| versteckte Dateien anzeigen | ls -a |
| aktuelle Position anzeigen | pwd |
| Verzeichnis wechseln | cd |
| Dateiinhalt anzeigen | cat |
| lange Datei lesen | less |
| Anfang anzeigen | head |
| Ende anzeigen | tail |
| live mitlesen | tail -f |
| Datei erstellen | touch |
| Datei bearbeiten | nano |
| kopieren | cp |
| verschieben oder umbenennen | mv |
| löschen | rm |
| Verzeichnis erstellen | mkdir |
| Datei suchen | find |
| Text suchen | grep |

Merksatz:

    cat für kleine Dateien.
    less für lange Dateien.
    tail -f für Live-Logs.

---

**find und grep unterscheiden**

| Befehl | Sucht |
|---|---|
| find | Dateien und Verzeichnisse |
| grep | Text innerhalb von Dateien oder Ausgaben |

Beispiele:

    find /etc -name "*ssh*"

    grep "PermitRootLogin" /etc/ssh/sshd_config

Prüfungsfalle:

    find sucht Dateinamen oder Dateieigenschaften.
    grep sucht Inhalte.

Merksatz:

    find sucht Dateien.
    grep sucht Text.

---

**Benutzer,
Gruppen
und Rechte**

Linux-Rechte gelten klassisch für:

    Besitzer

    Gruppe

    Andere

Die Rechte sind:

| Recht | Bedeutung bei Dateien | Bedeutung bei Verzeichnissen |
|---|---|---|
| r | lesen | Inhalt auflisten |
| w | schreiben | Einträge erstellen, löschen, umbenennen |
| x | ausführen | Verzeichnis betreten |

Wichtige Befehle:

| Befehl | Zweck |
|---|---|
| whoami | aktuellen Benutzer anzeigen |
| id | UID, GID und Gruppen anzeigen |
| groups | Gruppen anzeigen |
| chmod | Rechte ändern |
| chown | Besitzer ändern |
| chgrp | Gruppe ändern |
| sudo | Befehl mit erhöhten Rechten ausführen |

Merksatz:

    Bei Verzeichnissen bedeutet x:
    betreten.

---

**Numerische Rechte wiederholen**

| Zahl | Rechte |
|---:|---|
| 0 | --- |
| 1 | --x |
| 2 | -w- |
| 3 | -wx |
| 4 | r-- |
| 5 | r-x |
| 6 | rw- |
| 7 | rwx |

Typische Rechte:

| Rechte | Bedeutung |
|---|---|
| 644 | normale Datei |
| 600 | private Datei |
| 755 | Programm oder öffentlich betretbares Verzeichnis |
| 700 | privates Verzeichnis oder privates Skript |
| 777 | jeder darf alles, meist unsicher |

Merksatz:

    r=4,
    w=2,
    x=1.

---

**Root,
sudo
und Sicherheit**

| Begriff | Bedeutung |
|---|---|
| root | administrativer Hauptbenutzer |
| sudo | einzelne Befehle mit erhöhten Rechten ausführen |
| su | Benutzer wechseln |
| /root | Home-Verzeichnis von root |
| / | Root-Verzeichnis des Dateisystems |

Prüfungsfalle:

    root,
    /root
    und /
    sind nicht dasselbe.

IHK-sicher:

    Administrative Rechte sollten gezielt und nachvollziehbar genutzt werden.
    Dauerhaftes Arbeiten als root erhöht das Risiko für Fehlbedienung und Schäden.

Merksatz:

    Root-Rechte bewusst und nur bei Bedarf verwenden.

---

**Prozesse und Dienste**

| Begriff | Bedeutung |
|---|---|
| Prozess | laufendes Programm |
| PID | eindeutige Prozess-ID |
| Dienst | Hintergrundprogramm mit Aufgabe |
| Daemon | Hintergrundprozess |
| systemd | Dienst- und Init-System vieler Distributionen |
| Unit | Verwaltungseinheit von systemd |
| .service | Dienst-Unit |

Wichtige Befehle:

| Befehl | Zweck |
|---|---|
| ps aux | Prozesse anzeigen |
| top | Prozesse live anzeigen |
| htop | komfortabler Prozessmonitor, falls installiert |
| kill | Signal an Prozess senden |
| systemctl status dienst | Dienststatus prüfen |
| journalctl -u dienst | Dienstlogs anzeigen |

Merksatz:

    Prozess = läuft.
    Dienst = Hintergrundaufgabe.

---

**systemctl sicher unterscheiden**

| Befehl | Bedeutung |
|---|---|
| systemctl start dienst | startet jetzt |
| systemctl stop dienst | stoppt jetzt |
| systemctl restart dienst | startet neu |
| systemctl reload dienst | lädt Konfiguration neu, falls unterstützt |
| systemctl enable dienst | aktiviert Autostart |
| systemctl disable dienst | deaktiviert Autostart |
| systemctl status dienst | zeigt Status |
| systemctl is-active dienst | prüft, ob Dienst läuft |
| systemctl is-enabled dienst | prüft Autostart |

Prüfungsfalle:

    start und enable sind nicht dasselbe.

Merksatz:

    active heißt:
    läuft jetzt.
    enabled heißt:
    startet beim Boot.

---

**Paketverwaltung**

| Distribution | Paketmanager |
|---|---|
| Debian / Ubuntu | apt |
| Fedora / Rocky Linux | dnf |
| openSUSE | zypper |
| Arch Linux | pacman |
| Alpine Linux | apk |

Wichtige apt-Befehle:

| Befehl | Bedeutung |
|---|---|
| apt update | Paketlisten aktualisieren |
| apt upgrade | installierte Pakete aktualisieren |
| apt install paket | Paket installieren |
| apt remove paket | Paket entfernen |
| apt purge paket | Paket inklusive Konfiguration entfernen |
| apt search begriff | Paket suchen |
| apt show paket | Paketinformationen anzeigen |
| apt autoremove | nicht mehr benötigte Abhängigkeiten entfernen |

Merksatz:

    apt update holt Listen.
    apt upgrade installiert Updates.

---

**Repository,
Paket
und Abhängigkeit**

| Begriff | Bedeutung |
|---|---|
| Paket | verwaltete Softwareeinheit |
| Repository | Paketquelle |
| Abhängigkeit | zusätzlich benötigtes Paket |
| Paketmanager | Werkzeug zur Paketverwaltung |
| Patchmanagement | geplanter Umgang mit Updates |

Prüfungsfalle:

    Manuelle Installation von Webseiten ist unter Linux-Servern meist nicht der Standardweg.

IHK-sicher:

    Paketmanager installieren Software kontrolliert,
    lösen Abhängigkeiten auf
    und stellen Updates bereit.

Merksatz:

    Repository = Paketquelle.

---

**Netzwerkdiagnose**

| Aufgabe | Befehl |
|---|---|
| IP-Adressen anzeigen | ip addr |
| Schnittstellen anzeigen | ip link |
| Routing anzeigen | ip route |
| Erreichbarkeit prüfen | ping |
| DNS prüfen | dig oder nslookup |
| Ports anzeigen | ss -tulpen |
| HTTP/HTTPS prüfen | curl |
| Hostname anzeigen | hostname |
| DNS-Status prüfen | resolvectl status |
| SSH-Verbindung herstellen | ssh benutzer@server |

Merksatz:

    Erst IP,
    dann Route,
    dann DNS,
    dann Port,
    dann Dienst.

---

**Typische Netzwerkauswertung**

| Ergebnis | Wahrscheinliche Richtung |
|---|---|
| keine IP-Adresse | DHCP oder Interface |
| Gateway nicht erreichbar | lokales Netz, VLAN, Gateway |
| externe IP nicht erreichbar | Routing, NAT oder Firewall |
| IP erreichbar, Name nicht | DNS |
| Dienst läuft, Port nicht erreichbar | Firewall, Bind-Adresse, Port |
| Port lauscht auf 127.0.0.1 | nur lokal erreichbar |
| Connection refused | Dienst oder Port lehnt ab |
| Connection timed out | Firewall, Routing oder Ziel nicht erreichbar |

Merksatz:

    ping prüft ICMP,
    nicht den Dienst.

---

**SSH wiederholen**

| Begriff | Bedeutung |
|---|---|
| SSH | sichere Fernadministration |
| TCP 22 | Standardport für SSH |
| ssh | Client-Befehl |
| sshd | SSH-Serverdienst |
| authorized_keys | erlaubte öffentliche Schlüssel |
| known_hosts | bekannte Server-Host-Keys |
| privater Schlüssel | bleibt geheim |
| öffentlicher Schlüssel | darf auf Server |

Sicherheitsregel:

    Direkten Root-Login vermeiden.
    Besser normaler Benutzer plus sudo.

Merksatz:

    Öffentlicher Schlüssel auf Server.
    Privater Schlüssel bleibt geheim.

---

**Firewall wiederholen**

Eine Firewall-Regel sollte enthalten:

    Quelle

    Ziel

    Protokoll

    Port

    Richtung

    Aktion

    Zweck

Typische Werkzeuge:

| Werkzeug | Einordnung |
|---|---|
| ufw | einfache Firewall-Oberfläche, häufig Ubuntu |
| firewalld | Firewall-Verwaltung mit Zonen |
| nftables | moderner Firewall-Unterbau |
| iptables | klassisches Firewall-Werkzeug |

Merksatz:

    Port allein ist keine vollständige Firewall-Regel.

---

**Speicher und Mounts**

| Begriff | Bedeutung |
|---|---|
| Datenträger | physisches oder virtuelles Speichermedium |
| Partition | Bereich auf einem Datenträger |
| Dateisystem | Organisationsform für Dateien |
| Mountpoint | Einhängepunkt im Verzeichnisbaum |
| fstab | automatische Mounts beim Systemstart |
| UUID | eindeutige Kennung eines Dateisystems |
| Swap | Auslagerungsspeicher |

Wichtige Befehle:

| Befehl | Zweck |
|---|---|
| lsblk | Datenträger und Partitionen anzeigen |
| lsblk -f | Dateisysteme und UUIDs anzeigen |
| df -h | Speicherplatz prüfen |
| df -i | Inodes prüfen |
| du -sh ordner | Ordnergröße anzeigen |
| mount | Mounts anzeigen oder einhängen |
| umount | aushängen |
| findmnt | Mounts strukturiert anzeigen |
| free -h | RAM und Swap anzeigen |

Merksatz:

    df zeigt Dateisysteme.
    du zeigt Ordnergrößen.

---

**fstab wiederholen**

Die Datei:

    /etc/fstab

legt fest,
welche Dateisysteme beim Start automatisch eingebunden werden.

Wichtige Prüfungen nach Änderung:

    cp /etc/fstab /etc/fstab.bak

    mount -a

    findmnt

    df -h

Prüfungsfalle:

    /dev/sdb1 kann sich ändern.
    UUIDs sind für dauerhafte Mounts oft stabiler.

Merksatz:

    fstab nie ungetestet ändern.

---

**Logs und Monitoring**

| Aufgabe | Befehl |
|---|---|
| systemd-Journal anzeigen | journalctl |
| Dienstlogs anzeigen | journalctl -u dienst |
| Logs live anzeigen | journalctl -f |
| Logs seit Boot anzeigen | journalctl -b |
| Kernelmeldungen anzeigen | dmesg |
| Logdatei lesen | less logfile |
| Logdatei live lesen | tail -f logfile |
| Logs filtern | grep |
| Dienststatus prüfen | systemctl status dienst |
| CPU und Prozesse prüfen | top |
| RAM prüfen | free -h |
| Speicher prüfen | df -h |

Merksatz:

    Dienstproblem:
    status prüfen,
    dann Logs lesen.

---

**Typische Logorte**

| Ort | Bedeutung |
|---|---|
| /var/log | klassische Logdateien |
| /var/log/syslog | allgemeine Logs, häufig Debian/Ubuntu |
| /var/log/messages | allgemeine Logs, häufig RHEL/Fedora-Umfeld |
| /var/log/auth.log | Authentifizierung, häufig Debian/Ubuntu |
| /var/log/secure | Authentifizierung, häufig RHEL/Fedora-Umfeld |
| journalctl | systemd-Journal |
| dmesg | Kernelmeldungen |

Merksatz:

    Nicht jede Distribution nutzt dieselben Logdateinamen.

---

**Shell,
Pipes
und Umleitungen**

| Zeichen / Befehl | Bedeutung |
|---|---|
| \| | Pipe, Ausgabe an nächsten Befehl |
| > | Ausgabe in Datei schreiben und überschreiben |
| >> | Ausgabe anhängen |
| < | Datei als Eingabe nutzen |
| 2> | Fehlerausgabe umleiten |
| &> | Ausgabe und Fehler gemeinsam umleiten |
| /dev/null | Ausgabe verwerfen |
| ; | Befehle nacheinander |
| && | nächster Befehl nur bei Erfolg |
| \|\| | nächster Befehl nur bei Fehler |
| $? | Exit-Code des letzten Befehls |

Merksatz:

    > überschreibt.
    >> hängt an.
    2> leitet Fehler um.

---

**stdin,
stdout
und stderr**

| Kanal | Nummer | Bedeutung |
|---|---:|---|
| stdin | 0 | Standardeingabe |
| stdout | 1 | Standardausgabe |
| stderr | 2 | Standardfehler |

Prüfungsfalle:

    Fehlermeldungen gehen nicht automatisch über stdout.
    Deshalb reicht > nicht immer,
    um Fehler umzuleiten.

Merksatz:

    0 Eingabe,
    1 Ausgabe,
    2 Fehler.

---

**Bash-Scripting wiederholen**

| Element | Bedeutung |
|---|---|
| #!/bin/bash | Shebang für Bash |
| chmod +x script.sh | Skript ausführbar machen |
| ./script.sh | Skript aus aktuellem Verzeichnis starten |
| $1 | erster Parameter |
| $# | Anzahl Parameter |
| "$@" | alle Parameter sauber einzeln |
| $? | Exit-Code des letzten Befehls |
| if | Bedingung |
| for | Schleife über Werte |
| while | Schleife solange Bedingung wahr ist |
| case | Auswahl nach Muster |
| read | Benutzereingabe lesen |
| function | wiederverwendbarer Skriptblock |

Merksatz:

    Skripte automatisieren Befehle,
    aber auch Fehler,
    wenn sie schlecht geschrieben sind.

---

**Sichere Bash-Regeln**

Wichtige Regeln:

    Variablen meistens quoten

    "$VARIABLE"

    Parameter prüfen

    Exit-Codes beachten

    gefährliche Befehle vorher testen

    absolute Pfade nutzen,
    besonders bei cron

    Logs schreiben

    Skripte zuerst in Testumgebung prüfen

    Kommentare für Zweck und Ablauf nutzen

Typische strenge Optionen:

    set -euo pipefail

Merksatz:

    In Skripten erst prüfen,
    dann handeln.

---

**Sicherheit wiederholen**

Wichtige Sicherheitsprinzipien:

| Thema | Kerngedanke |
|---|---|
| Least Privilege | nur notwendige Rechte |
| Updates | bekannte Schwachstellen schließen |
| Firewall | unnötige Zugriffe blockieren |
| SSH-Härtung | sicheren Administrationszugang |
| Dienstkonten | Dienste nicht unnötig als root |
| Logging | Ereignisse nachvollziehen |
| Monitoring | Probleme früh erkennen |
| Backups | Wiederherstellung ermöglichen |
| Dokumentation | Betrieb nachvollziehbar machen |

Merksatz:

    Sicherheit ist kein einzelner Befehl,
    sondern ein Betriebskonzept.

---

**Backup wiederholen**

| Begriff | Bedeutung |
|---|---|
| Backup | Sicherung von Daten |
| Restore | Wiederherstellung |
| RPO | maximal akzeptabler Datenverlust |
| RTO | maximal akzeptable Wiederherstellungszeit |
| Vollbackup | vollständige Sicherung |
| inkrementell | Änderungen seit letztem Backup |
| differentiell | Änderungen seit letztem Vollbackup |
| Snapshot | Zustand zu einem Zeitpunkt |
| 3-2-1-Regel | mehrere Kopien, unterschiedliche Orte, externe Kopie |

Merksatz:

    RPO = Datenverlust.
    RTO = Wiederherstellungszeit.

---

**Automatisierung wiederholen**

| Werkzeug | Zweck |
|---|---|
| Bash-Skript | Befehlsfolge automatisieren |
| cron | zeitgesteuerte Aufgaben |
| systemd Timer | zeitgesteuerte systemd-Units |
| logrotate | Logs rotieren |
| Monitoring | Zustand überwachen |
| Alerting | bei Problemen benachrichtigen |

Wichtig:

    Automatisierung braucht Logs,
    Exit-Codes,
    Monitoring
    und Dokumentation.

Merksatz:

    Automatisierung ohne Kontrolle kann unbemerkt ausfallen.

---

**Linux im Serverbetrieb wiederholen**

Typische Serverrollen:

| Rolle | Beispiel |
|---|---|
| Webserver | nginx, Apache |
| Datenbankserver | PostgreSQL, MariaDB |
| Dateiserver | Samba, NFS |
| DNS-Server | BIND, Unbound |
| DHCP-Server | DHCP-Dienst |
| Container-Host | Docker, Podman |
| Backupserver | Backupdienste |
| Monitoringserver | Überwachungssystem |
| Reverse Proxy | nginx, Proxy-Dienst |
| VPN-Server | WireGuard, OpenVPN |

Merksatz:

    Server ist eine Rolle,
    nicht nur ein bestimmtes Gerät.

---

**Standardports wiederholen**

| Dienst | Port |
|---|---:|
| SSH | TCP 22 |
| DNS | TCP/UDP 53 |
| DHCP | UDP 67/68 |
| HTTP | TCP 80 |
| HTTPS | TCP 443 |
| SMB | TCP 445 |
| MySQL/MariaDB | TCP 3306 |
| PostgreSQL | TCP 5432 |
| SMTP | TCP 25 |
| IMAP | TCP 143 |
| IMAPS | TCP 993 |
| POP3 | TCP 110 |
| POP3S | TCP 995 |
| NTP | UDP 123 |

Merksatz:

    Port immer mit Protokoll nennen:
    TCP oder UDP.

---

**Typische IHK-Fehlerfragen**

| Fehlerbild | Erste sinnvolle Prüfungen |
|---|---|
| Dienst startet nicht | systemctl status, journalctl -u, Konfiguration, Rechte, Port |
| Webseite nicht erreichbar | Dienst, Port, curl lokal, Firewall, DNS, Logs |
| SSH geht nicht | Netzwerk, Port 22, sshd, Firewall, Benutzer, Schlüssel |
| Speicher voll | df -h, df -i, du -sh, Logs, Backups |
| DNS geht nicht | IP-Test, dig, resolv.conf, DNS-Server, /etc/hosts |
| Permission denied | whoami, id, ls -l, ls -ld, Gruppen |
| No such file | pwd, ls, Pfad, Groß-/Kleinschreibung, Mount |
| Containerdaten weg | Volumes, Bind Mounts, Container-Dateisystem |
| Backup fehlgeschlagen | Logs, Ziel, Rechte, Speicher, Netzwerk |
| System langsam | top, free -h, df -h, iowait, Logs |

Merksatz:

    Fehlerbild lesen,
    Ebene erkennen,
    gezielt prüfen.

---

**Fehlersuche: Standardreihenfolge**

Bei vielen Linux-Problemen hilft diese Reihenfolge:

    1. Fehler genau lesen

    2. betroffenen Bereich bestimmen

    3. letzte Änderung prüfen

    4. Status prüfen

    5. Logs prüfen

    6. Ressourcen prüfen

    7. Rechte prüfen

    8. Netzwerk prüfen

    9. Konfiguration prüfen

    10. Maßnahme dokumentieren

Merksatz:

    Nicht raten,
    sondern eingrenzen.

---

**Von innen nach außen prüfen**

Bei Dienstproblemen:

    1. Läuft der Prozess?

    2. Läuft der Dienst laut systemctl?

    3. Gibt es Fehler in journalctl?

    4. Lauscht der Port lokal?

    5. Antwortet der Dienst lokal?

    6. Antwortet der Dienst über Server-IP?

    7. Funktioniert Zugriff aus dem Netzwerk?

    8. Stimmen DNS,
       Firewall
       und Anwendung?

Merksatz:

    Erst lokal prüfen,
    dann Netzwerk,
    dann DNS,
    dann Anwendung.

---

**Häufige Prüfungsfallen**

| Falle | Richtig denken |
|---|---|
| ping geht, also Dienst geht | ping prüft nicht TCP/UDP-Dienst |
| Dienst läuft, also erreichbar | Port, Firewall und Bind-Adresse prüfen |
| apt update installiert Updates | apt update aktualisiert Paketlisten |
| enable startet Dienst sofort | enable aktiviert Autostart |
| / und /root verwechseln | / Dateisystemwurzel, /root Root-Home |
| x bei Verzeichnissen vergessen | x bedeutet betreten |
| chmod 777 als Lösung | unsicher und meist falsch |
| Backup ohne Restore-Test | unzuverlässig |
| Snapshot als Backup-Konzept | nicht automatisch ausreichend |
| cron wie normale Shell behandeln | andere Umgebung |
| > und >> verwechseln | > überschreibt, >> hängt an |
| stderr vergessen | Fehlerkanal ist 2 |

---

**Kleine Prüfungsaufgaben mit Kurzantwort**

| Aufgabe | Kurzantwort |
|---|---|
| Aktuelle IP anzeigen | ip addr |
| Standardgateway anzeigen | ip route |
| Dienststatus prüfen | systemctl status dienst |
| Dienstlogs anzeigen | journalctl -u dienst |
| Speicherplatz prüfen | df -h |
| Inodes prüfen | df -i |
| RAM prüfen | free -h |
| Prozesse prüfen | ps aux oder top |
| offene Ports anzeigen | ss -tulpen |
| Text in Datei suchen | grep "text" datei |
| Datei suchen | find /pfad -name "datei" |
| Datei ausführbar machen | chmod +x datei |
| Besitzer ändern | chown benutzer datei |
| Paketlisten aktualisieren | apt update |
| Pakete aktualisieren | apt upgrade |
| SSH verbinden | ssh benutzer@server |

---

**IHK-sichere Kurzformulierungen**

Linux ist ein Mehrbenutzersystem,
das Zugriffe über Benutzer,
Gruppen
und Rechte steuert.

Ein absoluter Pfad beginnt mit /,
ein relativer Pfad bezieht sich auf das aktuelle Verzeichnis.

Dienste werden auf vielen Distributionen mit systemd verwaltet.
systemctl dient zur Verwaltung der Dienste,
journalctl zur Auswertung der Logs.

apt update aktualisiert Paketlisten,
apt upgrade aktualisiert installierte Pakete.

ping prüft ICMP-Erreichbarkeit,
ersetzt aber keinen Test eines TCP-
oder UDP-Dienstes.

df -h zeigt freien und belegten Speicherplatz von Dateisystemen,
du -sh zeigt die Größe eines Verzeichnisses.

RPO beschreibt den maximal akzeptablen Datenverlust,
RTO die maximal akzeptable Wiederherstellungszeit.

Ein Backup ist erst zuverlässig,
wenn ein Restore erfolgreich getestet wurde.

---

**Abschluss-Merksätze**

    Linux verstehen heißt:
    Struktur,
    Rechte,
    Dienste,
    Logs
    und Netzwerk verstehen.

    Nicht jeder Fehler ist ein Linux-Fehler.
    Oft ist es Netzwerk,
    DNS,
    Rechte,
    Speicher,
    Dienst
    oder Konfiguration.

    Befehle sind Werkzeuge.
    Entscheidend ist,
    wann man welchen Befehl warum nutzt.

    In der Prüfung immer fachlich sauber begründen.

    Erst prüfen,
    dann ändern.

    Erst sichern,
    dann konfigurieren.

    Erst lokal testen,
    dann extern testen.

    Erst Logs lesen,
    dann Maßnahmen ableiten.

    Keine pauschalen 777-Rechte.

    Kein blindes sudo.

    Keine ungetesteten fstab-Änderungen.

    Kein Backup ohne Restore-Test.

    Keine Automatisierung ohne Logs.

    Keine Serveränderung ohne Dokumentation.

# 16. Linux-Trainer

# Linux Tests



# 1.  Benutzer & Zugriffsrechte

Gegeben:

| Objekt        | Rechte      | Eigentümer | Gruppe   |
| ------------- | ----------- | ---------- | -------- |
| /home/        | rwx r-x r-x | root       | root     |
| /home/anton/  | rwx r-x --- | anton      | berliner |
| bz            | rw- r-- r-- | anton      | berliner |
| caesar.jpg    | r-- r-- r-- | caesar     | roemer   |
| /home/berta/  | rwx rwx r-x | berta      | berliner |
| fahrplan      | rw- rw- rw- | berta      | berliner |
| BaS           | rw- --- --- | anton      | berliner |
| /home/caesar/ | rwx r-x r-x | caesar     | roemer   |
| urteile.txt   | rw- r-- --- | caesar     | roemer   |
| kino.pdf      | rw- r-- r-- | berta      | berliner |

---

**1. Darf berta die Datei bz lesen?**

<details>
<summary>Antwort anzeigen</summary>

Ja.
Begründung: others hat Leserechte (`r--`).

</details>

---

**2. Darf caesar die Datei bz lesen?**

<details>
<summary>Antwort anzeigen</summary>

Ja.
Begründung: others hat Leserechte (`r--`).

</details>

---

**3. Wer darf die Datei urteile.txt lesen?**

<details>
<summary>Antwort anzeigen</summary>

Anton und berta.
Begründung: Die Gruppe hat Leserechte (`r--`).

</details>

---

**4. Was ist zu tun, damit alle Benutzer die Datei urteile.txt lesen können?**

<details>
<summary>Antwort anzeigen</summary>

`chmod o+r urteile.txt`

</details>

---

**5. Darf caesar die Datei kino.pdf verändern?**

<details>
<summary>Antwort anzeigen</summary>

Nein.
Begründung: Er hat nur Leserechte.

</details>

---

**6. Darf caesar die Datei kino.pdf löschen?**

<details>
<summary>Antwort anzeigen</summary>

Ja.
Begründung: Das Löschen hängt von den Rechten des Verzeichnisses ab, nicht von der Datei.

</details>

---

**7. Darf anton die Datei BaS löschen?**

<details>
<summary>Antwort anzeigen</summary>

Ja.
Begründung: Entscheidend sind die Rechte des Verzeichnisses.

</details>

---

**8. Wer darf die Datei fahrplan ändern?**

<details>
<summary>Antwort anzeigen</summary>

Anton, berta und caesar.
Begründung: Die Datei hat `rw- rw- rw-`.

</details>

---

**9. Nur berta soll die Datei fahrplan ändern dürfen. Was ist zu tun?**

<details>
<summary>Antwort anzeigen</summary>

`chmod 600 fahrplan`

</details>

---

**10. Wie versperrt caesar den Mitgliedern der Gruppe berliner den Zugriff auf sein Heimatverzeichnis?**

<details>
<summary>Antwort anzeigen</summary>

`chmod 700 /home/caesar`

</details>

---

**11. Die berliner sollen im Heimatverzeichnis von berta keine Ordner und Dateien anlegen dürfen und alle anderen sollen keinen Zugriff haben. Was ist zu tun?**

<details>
<summary>Antwort anzeigen</summary>

`chmod 750 /home/berta`

</details>

---

**12. Welche Rechte müssen gesetzt werden, damit caesar sein Bild caesar.jpg in antons Heimatverzeichnis ablegen kann?**

<details>
<summary>Antwort anzeigen</summary>

`/home/anton/  rwx r-x rwx`

Begründung: Zum Ablegen einer Datei in ein Verzeichnis braucht man `w + x`.
Caesar ist weder Eigentümer noch in der Gruppe `berliner`, daher müssen diese Rechte bei `others` gesetzt sein.

</details>

---

**13. Welche Rechte müssen gesetzt werden, damit berta die Datei kino.pdf in caesars Heimatverzeichnis ablegen kann?**

<details>
<summary>Antwort anzeigen</summary>

`/home/caesar/  rwx r-x rwx`

Begründung: Berta ist weder Eigentümerin noch in der Gruppe `roemer`.
Darum braucht `others` Schreib- und Betretungsrechte (`w + x`).

</details>

---

**14. Wer darf die Zugriffsrechte von Dateien und Ordnern verändern?**

<details>
<summary>Antwort anzeigen</summary>

Der Eigentümer und root.

</details>

# 1 b. Zusatzaufgaben zu Linux-Benutzern, sudo, Besitzrechten und Sonderrechten.

**1. Der Benutzer `hund` soll Superuser-/Root-Rechte erhalten. Was ist zu tun?**

<details>
<summary>Antwort anzeigen</summary>

Der Benutzer muss zur Gruppe der Administratoren (sudo-Gruppe) hinzugefügt werden:

`sudo usermod -aG sudo hund`

Danach muss sich der Benutzer neu anmelden, damit die Gruppenrechte aktiv werden.

</details>

---

**2. Der Benutzer `hund` kann mit `sudo <befehl>` arbeiten und muss dabei sein Passwort eingeben. Gibt es eine Möglichkeit, ohne Passwortabfrage zu arbeiten?**

<details>
<summary>Antwort anzeigen</summary>

Ja, dies ist über die Konfigurationsdatei `/etc/sudoers` möglich.

Ein entsprechender Eintrag lautet:

`hund ALL=(ALL:ALL) NOPASSWD: ALL`

Die Datei sollte aus Sicherheitsgründen nicht direkt bearbeitet werden, sondern mit:

`sudo visudo`

</details>

---

**3. Der `tagesplan` soll in den Besitz des Benutzers `hund` übergehen und in seinen Heimatordner verschoben werden. Was ist zu tun?**

<details>
<summary>Antwort anzeigen</summary>

Zuerst wird der Besitzer der Datei geändert:

`sudo chown hund:hund tagesplan`

Danach wird die Datei in das Heimatverzeichnis verschoben:

`mv tagesplan /home/hund/`

Je nach Speicherort der Datei muss der Pfad angepasst werden.

</details>

---

**4. Beim Anlegen von Benutzern sind manchmal schon Dateien oder Ordner vorhanden, zum Beispiel unter `ubuntu` die Datei `examples.desktop`. Woher kommen diese?**

<details>
<summary>Antwort anzeigen</summary>

Diese Dateien stammen aus dem Vorlagenverzeichnis für neue Benutzer:

`/etc/skel`

Beim Anlegen eines neuen Benutzers wird dieses Verzeichnis in das Home-Verzeichnis kopiert.

</details>

---

**5. Was ist der Nutzen solcher bereits vorhandenen Dateien und Ordner im Home-Verzeichnis?**

<details>
<summary>Antwort anzeigen</summary>

Diese Dateien stellen eine Grundausstattung für neue Benutzer bereit.

Dazu gehören beispielsweise:
- Beispiel-Dateien
- voreingestellte Konfigurationen
- vorbereitete Ordnerstrukturen

Dadurch kann der Benutzer sofort mit einer sinnvollen Umgebung arbeiten.

</details>

---

**6. Welche Aufgabe hat das Set-UID-Recht (SUID-Bit)?**

<details>
<summary>Antwort anzeigen</summary>

Ein Programm wird mit den Rechten des Dateibesitzers ausgeführt und nicht mit den Rechten des Benutzers, der es startet.

Dadurch können Programme kurzfristig mit erweiterten Rechten ausgeführt werden.

</details>

---

**7. Welche Aufgabe hat das Set-GID-Recht (SGID-Bit)?**

<details>
<summary>Antwort anzeigen</summary>

Bei Dateien wird ein Programm mit den Rechten der Gruppe ausgeführt.

Bei Verzeichnissen sorgt das SGID-Bit dafür, dass neu angelegte Dateien und Ordner automatisch die Gruppe des Verzeichnisses übernehmen.

</details>

---

**8. Welche Aufgabe hat das Sticky-Bit?**

<details>
<summary>Antwort anzeigen</summary>

In einem Verzeichnis mit gesetztem Sticky-Bit dürfen Dateien nur vom jeweiligen Eigentümer, vom Verzeichnisbesitzer oder von root gelöscht oder umbenannt werden.

Ein typisches Beispiel ist das Verzeichnis:

`/tmp`

</details>

---

**9. Wie werden diese Sonderrechte gesetzt und dargestellt?**

<details>
<summary>Antwort anzeigen</summary>

Die Sonderrechte werden mit dem Befehl `chmod` gesetzt:

SUID setzen:  
`chmod u+s datei`

SGID setzen:  
`chmod g+s datei`

Sticky-Bit setzen:  
`chmod +t verzeichnis`

Die Darstellung erfolgt mit `ls -l`:

- SUID: `s` oder `S` im Benutzer-Bereich  
- SGID: `s` oder `S` im Gruppen-Bereich  
- Sticky-Bit: `t` oder `T` im Other-Bereich  

Kleinbuchstaben bedeuten, dass zusätzlich das Ausführungsrecht gesetzt ist.  
Großbuchstaben bedeuten, dass das Ausführungsrecht fehlt.

</details>

---

**10. Welchen Vorteil hat das Sticky-Bit gegenüber dem normalen Schreibrecht auf einen Ordner?**

<details>
<summary>Antwort anzeigen</summary>

Ohne Sticky-Bit kann jeder Benutzer mit Schreibrechten in einem Verzeichnis auch Dateien anderer Benutzer löschen.

Mit gesetztem Sticky-Bit wird dies verhindert, sodass Benutzer nur ihre eigenen Dateien löschen können.

Dadurch wird die Sicherheit in gemeinsam genutzten Verzeichnissen erhöht.

</details>

# 2. Gemischt – Benutzer, Zugriffsrechte und Sonderrechte.

Gegeben: Linux – Benutzer, Zugriffsrechte und Sonderrechte.

---

**1. Darf berta die Datei bz lesen?**

<details>
<summary>Antwort anzeigen</summary>

Ja.  
Begründung: Für „others“ sind Leserechte (`r--`) gesetzt.

</details>

---

**2. Darf caesar die Datei bz lesen?**

<details>
<summary>Antwort anzeigen</summary>

Ja.  
Begründung: Auch „others“ besitzen Leserechte (`r--`).

</details>

---

**3. Wer darf die Datei urteile.txt lesen?**

<details>
<summary>Antwort anzeigen</summary>

Anton und berta.  
Begründung: Die Gruppe besitzt Leserechte (`r--`).

</details>

---

**4. Was ist zu tun, damit alle Benutzer die Datei urteile.txt lesen können?**

<details>
<summary>Antwort anzeigen</summary>

Die Leserechte für „others“ müssen gesetzt werden:

`chmod o+r urteile.txt`

</details>

---

**5. Darf caesar die Datei kino.pdf verändern?**

<details>
<summary>Antwort anzeigen</summary>

Nein.  
Begründung: Er besitzt nur Leserechte.

</details>

---

**6. Darf caesar die Datei kino.pdf löschen?**

<details>
<summary>Antwort anzeigen</summary>

Ja.  
Begründung: Das Löschen hängt von den Rechten des Verzeichnisses ab, nicht von der Datei.

</details>

---

**7. Wer darf die Datei fahrplan ändern?**

<details>
<summary>Antwort anzeigen</summary>

Anton, berta und caesar.  
Begründung: Die Datei besitzt die Rechte `rw- rw- rw-`.

</details>

---

**8. Nur berta soll die Datei fahrplan ändern dürfen. Was ist zu tun?**

<details>
<summary>Antwort anzeigen</summary>

Die Rechte müssen eingeschränkt werden:

`chmod 600 fahrplan`

</details>

---

**9. Wie versperrt caesar den Mitgliedern der Gruppe berliner den Zugriff auf sein Heimatverzeichnis?**

<details>
<summary>Antwort anzeigen</summary>

Die Rechte des Verzeichnisses müssen angepasst werden:

`chmod 700 /home/caesar`

</details>

---

**10. Welche Rechte müssen gesetzt werden, damit caesar eine Datei in antons Heimatverzeichnis ablegen kann?**

<details>
<summary>Antwort anzeigen</summary>

Das Verzeichnis muss Schreib- und Betretungsrechte für andere besitzen:

`/home/anton/  rwx r-x rwx`

Begründung: Zum Ablegen einer Datei werden `w` und `x` benötigt.

</details>

---

**11. Der Benutzer `hund` soll Superuser-/Root-Rechte erhalten. Was ist zu tun?**

<details>
<summary>Antwort anzeigen</summary>

Der Benutzer muss zur sudo-Gruppe hinzugefügt werden:

`sudo usermod -aG sudo hund`

</details>

---

**12. Der Benutzer `hund` kann mit `sudo <befehl>` arbeiten und muss dabei sein Passwort eingeben. Gibt es eine Möglichkeit, ohne Passwortabfrage zu arbeiten?**

<details>
<summary>Antwort anzeigen</summary>

Ja, über die Datei `/etc/sudoers`:

`hund ALL=(ALL:ALL) NOPASSWD: ALL`

Bearbeitung mit:

`sudo visudo`

</details>

---

**13. Der `tagesplan` soll in den Besitz des Benutzers `hund` übergehen und in seinen Heimatordner verschoben werden. Was ist zu tun?**

<details>
<summary>Antwort anzeigen</summary>

Besitzer ändern:

`sudo chown hund:hund tagesplan`

Danach verschieben:

`mv tagesplan /home/hund/`

</details>

---

**14. Woher stammen Standard-Dateien beim Anlegen eines neuen Benutzers?**

<details>
<summary>Antwort anzeigen</summary>

Sie stammen aus dem Verzeichnis:

`/etc/skel`

Dieses wird in das Home-Verzeichnis kopiert.

</details>

---

**15. Welche Aufgabe hat das Set-UID-Recht (SUID-Bit)?**

<details>
<summary>Antwort anzeigen</summary>

Programme werden mit den Rechten des Dateibesitzers ausgeführt.

</details>

---

**16. Welche Aufgabe hat das Set-GID-Recht (SGID-Bit)?**

<details>
<summary>Antwort anzeigen</summary>

Programme laufen mit Gruppenrechten,  
und in Verzeichnissen wird die Gruppe vererbt.

</details>

---

**17. Welche Aufgabe hat das Sticky-Bit?**

<details>
<summary>Antwort anzeigen</summary>

Nur Eigentümer dürfen Dateien löschen oder umbenennen.

</details>

---

**18. Wie werden Sonderrechte gesetzt?**

<details>
<summary>Antwort anzeigen</summary>

SUID: `chmod u+s`  
SGID: `chmod g+s`  
Sticky: `chmod +t`

</details>

---

**19. Welchen Vorteil hat das Sticky-Bit?**

<details>
<summary>Antwort anzeigen</summary>

Es verhindert das Löschen fremder Dateien in gemeinsam genutzten Verzeichnissen.

</details>

---

## Selbstbewertung

0–6 richtig → ❌ wiederholen  
7–12 richtig → ⚠️ unsicher  
13–17 richtig → ✅ gut vorbereitet  
18–19 richtig → 🔥 prüfungsbereit

# Linux Zusatz



# A1_ssh

**ssh -  Secure Shell zur sicheren remote-Administration**

Eine der bekanntesten Anwendungen für asymmetrische Schlüsselverfahren ist die Secure Shell, z.B. openssh.

Abb1. Zur Erinnerung: Bei symmetrischen Verfahren (oben) dient ein Key sowohl zum Ver- als auch zum Entschlüsseln. Die asymmetrische Varianten (unten) benutzen dafür zwei verschiedene Schlüssel, einen privaten und einen öffentlichen.

Jeder Host benötigt ein eigenes Schlüsselpaar aus privatem und öffentlichem Schlüssel, das meist schon bei der Installation der Software   generiert   wird.   Bei   dem   einleitenden   Handshake authentifiziert sich der Zielhost (ssh-Server) mit seinem privaten Schlüssel.

Der   Client   generiert   anschließend   einen   Sitzungsschlüssel, verschlüsselt ihn mit dem öffentlichen Key des Servers und sendet ihn an den Server. Damit öffnet er einen sicheren Tunnel (siehe Abb.2), über den anschließend die Datenkommunikation abläuft. Die Benutzer-Authentifizierung erfolgt danach über einen Passwortdialog oder ebenfalls mittels asymmetrischer Kryptographie.   Beide   Versionen   laufen   über   die   gesicherte Verbindung des ssh-Tunnels und sind somit für Außenstehende nicht entzifferbar.   Nach   der   Authentifizierung   stellt   der   Server   dem Client eine Shell zur Verfügung. Das ssh-Protokoll hat noch viele weitere nützliche Funktionen, z.b. scp zum sicheren Datentransport (siehe ganz unten).

Abb.2 Die Secure Shell verwendet asymmetrische Kryptographie, um den Server gegen den Client und den Benutzer gegen den Server zu authentifizieren. Beide Partner brauchen dazu ein eigenes Schlüsselpaar.

**ssh -  Secure Shell zur sicheren remote-Administration**

**Anmelden mit Benutzernamen und Passwort auf srvYZ**

userXY@pcXY:~$ ssh [userYZ@]srvYZ

- Beachte ! Benutzerangabe [userYZ@] nur bei abweichendem
- Benutzer auf dem Server.
- Bei der erstmaligen Anmeldung wird ein 'fingerprint' des öffentlichen Schlüssels des Remote-PC/Servers errechnet und bei Bestätigung* (Authentizität) wird der Public-Key des Servers in die .ssh/known\_hosts geschrieben.

**Anmelden mittels Public-Key-Verfahren**

**1. Schlüssel erzeugen:**

- Syntax: ssh-keygen [-f KEY\_FILE] [-C COMMENT] [-t TYP (rsa|dsa)] [-b KEY\_LENGTH (1024|2048)]

userXY@pcXY:~$ ssh-keygen

- Standard ist ein RSA-Schlüsselpaar mit 2048 bit Schlüssellänge
- Eine Passphrase (Passwortsatz) dient der Sicherheit, oft im Intranet aus Komfortgründen weggelassen (für automatisierte
- Jobs)
- Das Schlüsselpaar liegt in ~/.ssh.
- Der private Schlüssel in der Datei id\_rsa/id\_dsa (default) Der public-key in der Datei id\_rsa.pub/id\_dsa.pub (default)

**2. öffentlichen Schlüssel auf remote-Server ablegen**

userXY@pcXY:~$ ssh-copy-id -i ~/.ssh/id\_rsa.pub  [userYZ]@srvYZ

- Kopieren des public-keys automatisch auf den remote-Server in die Datei 'authorized\_keys' mit dem Befehl 'ssh-copy-id'

zwei kompliziertere Alternativen dazu:

userXY@pcXY :~$ scp .ssh/id\_rsa.pub [userYZ@]srvYZ:.ssh/authorized\_keys

- Kopieren des ersten public-keys auf den remote-Server und umbenennen in die Datei authorized\_keys

userYZ@srvYZ:~/.ssh$ cat .../usbstick/id\_rsa.pub &gt;&gt; authorized\_keys

- public-key über einen sicheren Weg (usbstick) direkt auf dem Server an die Datei authorized\_keys angehängen (neben anderen public-Keys)

**3. Anmelden nun ohne Passwort möglich**

userXY@pcXY:~$ ssh [userYZ@]srvYZ

Tip:  bei Fehlermeldung 'Agent admitted failure to sign using the key' neuen privatkey mit dem Befehl 'ssh-add' hinzufügen!

**ssh -  Secure Shell zur sicheren remote-Administration**

**weitere Beispiel für die Secure Shell:**

Kopieren eines Verzeichnisses: z.B. ~/linux nach srvYZ:

userXY@pcXY:~$ scp -rv ~/linux [userYZ@]srvYZ:

Synchronisieren von Daten mit rsync über eine ssh-Verbindung:

userXY@pcXY:~$ rsync -av ~/linux/ [userYZ@]srvYZ:~/linux/

Absetzen eines remote-Kommandos:

userXY@pcXY:~$ ssh user@pcXY 'ls -l'

Port-Forwarding:

Port-Weiterleitung eines lokalen Ports an einen entfernten

Zielport durch eine verschlüsselte ssh-Verbindung (Tunnel)

ssh user@ssh-srv -L 1025:localhost:80

oder (Verbindung dauerhaft):

ssh -f -N -L 1025:localhost:80 user@ssh-srv

**ftp via ssh → sftp:**

userXY@pcXY:~$ sftp user@pcXY

Connected to pcXY

sftp&gt;

**für Konsolenpuristen!**

userXY@pcXY:~$ cat .ssh/id\_rsa.pub | ssh [userYZ@]srvYZ 'cat &gt;&gt; .ssh/authorized\_keys'

Der Inhalt des public-keys ' id\_rsa.pub ' wird in einen Puffer|Pipe gesteckt

und nach dem Anmelden auf dem Server ' ssh userYZ@srvYZ ' an das Schlüsselbund angehängt, mit dem übergebenen Befehl ' 'cat &gt;&gt; .ssh/authorized\_keys''

* Fingerprint des ECDSA-pubkey auf dem Server anzeigen und zur Bestätigung vergleichen:

```
userYZ@srvYZ:~$ ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
```

**Unterlagen:**

- [wget ftp://ftp.itm.bfw/pub/unterricht/linux/netzwerk/09\_sicherheit/03\_openssh/](http://doc.itm.bfw/linux/netzwerk/09_sicherheit/03_openssh/)

**Internet:**

- [http://wiki.ubuntuusers.de/SSH](http://wiki.ubuntuusers.de/SSH)
- [http://www.youtube.com/watch?v=Hxsl-jj2Bq0](http://www.youtube.com/watch?v=Hxsl-jj2Bq0)
- [http://www.lug-ottobrunn.de/wiki/Remote\_Desktop\_mit\_X2GO](http://www.lug-ottobrunn.de/wiki/Remote_Desktop_mit_X2GO)

---

**Quellen**

- Dokument: A1_ssh
- ID: 138