Was passiert, wenn du einen Befehl eingibst?
Ein neuer Linux-Server zeigt zunächst nur eine Eingabezeile. Wo liegen deine Dateien, und welches Programm nimmt die Eingabe entgegen? Wer Terminal, Shell und Kernel auseinanderhält, kann sich auch ohne grafischen Dateimanager orientieren. Dieser Rundgang führt durch ein eigenes Übungsverzeichnis; Systemdateien werden dabei nicht geändert.
Linux bezeichnet im engen Sinn den Kernel: den Betriebssystemkern, der unter anderem CPU-Zeit, Speicher, Geräte und Prozesszugriffe verwaltet. Eine Distribution kombiniert ihn mit Werkzeugen, Bibliotheken, Paketverwaltung und einer gepflegten Softwareauswahl. Debian und das darauf aufbauende Ubuntu verwenden APT. Fedora verwendet andere Paketwerkzeuge; Arch Linux verfolgt wiederum ein anderes Veröffentlichungsmodell. Ein Terminalbefehl ist deshalb nicht automatisch auf jeder Distribution verfügbar.
Das Terminal stellt die Ein- und Ausgabe bereit, etwa als Fenster auf dem Desktop oder als entfernte Sitzung. Darin läuft gewöhnlich eine Shell, ein Befehlsinterpreter wie Bash. Sie verarbeitet die Befehlszeile, führt eingebaute Befehle wie cd aus und startet Programme wie ls. Programme fordern Leistungen des Kernels über Systemaufrufe an. Die Shell ist weder der Kernel noch das ganze Betriebssystem.
Die Beispiele richten sich an Bash mit GNU-Werkzeugen unter Debian 13 beziehungsweise Ubuntu Server 24.04 LTS. Sie benötigen für den Rundgang keine Administratorrechte. Linux unterscheidet Groß- und Kleinschreibung: Notizen.txt und notizen.txt können verschiedene Dateien sein. Zeichen wie $ im Prompt gehören nicht zum Befehl; in den folgenden Blöcken stehen nur die Eingaben.
Ein gemeinsamer Baum statt Laufwerksbuchstaben.
Alle Pfade beginnen bei der Wurzel /. Weitere Dateisysteme können an Verzeichnissen eingehängt werden, etwa eine zweite SSD unter /mnt/daten. Ein Verzeichnis ist deshalb nicht automatisch eine eigene Partition. Ein absoluter Pfad wie /home/lernuser/notizen.txt beginnt an der Wurzel. Ein relativer Pfad wie texte/notizen.txt beginnt im aktuellen Arbeitsverzeichnis. . bezeichnet dieses Verzeichnis, .. dessen übergeordnetes Verzeichnis; ~ wird von der Shell zum eigenen Home-Verzeichnis erweitert.
/proc ist ein virtuelles Dateisystem: Seine Informationen werden vom Kernel bereitgestellt und belegen nicht wie gewöhnliche Dokumente Speicher auf der SSD./usr ist kein persönliches Benutzerverzeichnis. Darunter liegen etwa Programme in /usr/bin und gemeinsam verwendete Daten in /usr/share. Aktuelle Debian-/Ubuntu-Systeme führen ältere Verzeichnisse wie /bin über symbolische Links mit /usr zusammen. /var/log enthält viele Protokolle; nicht jeder Dienst schreibt jedoch eine Textdatei dorthin. Auf /tmp kannst du keine dauerhafte Aufbewahrung bauen. /dev enthält spezielle Geräteknoten, keine gewöhnlichen Kopien der angeschlossenen Geräte. Dort und unter /proc wird in dieser Übung nichts geschrieben.
Ein sicherer Rundgang im eigenen Verzeichnis.
Ausgangslage: Du bist mit einem normalen Konto angemeldet und möchtest Notizen sortieren. Führe die Blöcke nacheinander in derselben Bash-Sitzung aus. Der erste Schritt erzeugt mit mktemp -d ein neues, eindeutig benanntes Verzeichnis im Home-Verzeichnis. Existierende Notizen bleiben dadurch unberührt. Bei einer Fehlermeldung hältst du an, statt die nächsten Zeilen blind auszuführen.
cd ~ || exit 1
pwd
uebung=$(mktemp -d "$HOME/bitsicht-linux.XXXXXX") || exit 1
cd "$uebung" || exit 1
mkdir texte archiv
printf 'Linux lernen\nNetzwerk verstehen\n' > texte/notizen.txt
printf 'Nur eine lokale Übung\n' > .lernhinweis
ls -la
pwd zeigt das Arbeitsverzeichnis. mktemp gibt den neuen Pfad aus; $(…) setzt diese Ausgabe in die Variable uebung. Die Anführungszeichen halten den Pfad auch bei Leerzeichen zusammen. mkdir legt zwei Unterverzeichnisse an. printf schreibt Text; \n erzeugt Zeilenumbrüche. > leitet die Ausgabe in eine Datei um. Hier sind es neue Dateien im frisch erzeugten Verzeichnis. Bei existierenden Dateien würde die Umleitung ihren Inhalt ersetzen.
ls -la verbindet -l für die ausführliche Ansicht mit -a für alle Einträge einschließlich Punktdateien. .lernhinweis ist wegen seines führenden Punktes normalerweise ausgeblendet, aber weder verschlüsselt noch besonders geschützt. Die erste Spalte enthält Dateityp und Rechte; danach folgen unter anderem Besitzer, Gruppe, Größe und Name. Datum und Rechte hängen von deinem System ab.
Simulierte Beispielausgabe, gekürzt:
drwx------ … lernuser lernuser … .
drwxr-xr-x … lernuser lernuser … archiv
-rw-r--r-- … lernuser lernuser … .lernhinweis
drwxr-xr-x … lernuser lernuser … texte
cat texte/notizen.txt
cp -i texte/notizen.txt archiv/kopie.txt
mv -i archiv/kopie.txt archiv/notizen-alt.txt
cd texte
pwd
ls -la
cd ..
less texte/notizen.txt
cat gibt den gesamten Dateiinhalt aus. cp kopiert, mv verschiebt beziehungsweise benennt um. Das zusätzliche -i fragt vor dem Überschreiben eines vorhandenen Ziels nach. Die Originalnotiz bleibt beim Kopieren erhalten. cd texte wechselt relativ in den Unterordner, cd .. wieder zurück. Der in uebung gespeicherte absolute Pfad funktioniert dagegen unabhängig vom aktuellen Ordner: cd "$uebung".
less zeigt Text seitenweise: Leertaste blättert vor, /Linux sucht nach Linux, q beendet die Ansicht. Das ist für lange Dateien angenehmer als cat. Falls less fehlt, genügt für die kleine Übung cat. Ein erfolgreicher Kopier- oder Wechselbefehl bleibt meist still; keine Ausgabe ist nicht dasselbe wie ein Fehler.
grep -n 'Linux' texte/notizen.txt
find . -type f -name '*.txt'
man ls
grep sucht passende Textzeilen, -n ergänzt die Zeilennummer. Hier lautet die Beispielausgabe 1:Linux lernen. Ohne Treffer liefert grep den Status 1; das ist kein Lesefehler. find durchsucht ab . den Baum. -type f beschränkt auf reguläre Dateien, -name '*.txt' auf passende Dateinamen. Die einfachen Anführungszeichen verhindern, dass bereits die Shell den Stern auflöst. Erwartet werden ./texte/notizen.txt und ./archiv/notizen-alt.txt; ihre Reihenfolge ist nicht zugesichert. man ls öffnet das lokale Handbuch, mit q gehst du zurück. man 5 passwd bezeichnet zum Beispiel ausdrücklich die Handbuchsektion für Dateiformate.
Drei Datenströme machen Werkzeuge kombinierbar.
Ein Prozess besitzt gewöhnlich Standardeingabe (stdin, Dateideskriptor 0), Standardausgabe (stdout, 1) und Standardfehlerausgabe (stderr, 2). Das Terminal kann alle drei bedienen, aber die Shell kann sie getrennt mit Dateien und anderen Programmen verbinden. Eine Pipe | verbindet stdout des linken mit stdin des rechten Befehls. Fehlermeldungen gelangen dadurch nicht automatisch in die Pipe.
cat texte/notizen.txt | grep -n 'Linux'
grep -n 'Linux' < texte/notizen.txt > treffer.txt
printf 'Dateirechte üben\n' >> texte/notizen.txt
cat fehlt.txt 2> fehler.txt
cat fehler.txt
Die ersten beiden Zeilen liefern denselben Treffer; die zweite speichert ihn in der neuen Datei treffer.txt. < liefert stdin aus einer Datei. >> hängt Text an, während > ersetzt. Der absichtlich fehlgeschlagene vierte Befehl schreibt die Diagnose in fehler.txt. Die konkrete Sprache variiert; eine simulierte Ausgabe lautet cat: fehlt.txt: No such file or directory. Der Befehl bleibt trotz umgeleiteter Meldung fehlgeschlagen. Sein Exitstatus, über $? unmittelbar danach lesbar, ist ein anderer Kanal als die Textausgabe.
kommando > gesamt.log 2>&1 würde beide Ausgaben in dieselbe Datei führen: Erst wird stdout umgeleitet, dann stderr an dessen Ziel gebunden. Die Reihenfolge ist relevant. Für diese Übung brauchst du das nicht auszuführen. Verwende Pipes zum Verarbeiten von Daten; eine heruntergeladene Installationsdatei ungeprüft direkt an eine Shell weiterzugeben wäre eine andere, weitreichende Handlung.
APT verwaltet Software samt Abhängigkeiten.
APT bezieht Paketinformationen und Software aus konfigurierten Quellen. apt search less sucht in den bekannten Paketdaten, apt show less zeigt Paketinformationen. Ein Repository ist hier eine Softwarequelle; seine Vertrauenswürdigkeit und Signaturprüfung sind Teil der Systempflege. Fremde Quellen ergänzt man nicht beiläufig für einen einzelnen Befehl.
Die folgenden administrativen Beispiele gelten für Debian/Ubuntu und gehören ausschließlich in eine eigene Test-VM. Sie sind kein Teil des lokalen Dateirundgangs. Paketinstallationen ändern das ganze System und benötigen deshalb in der Regel administrative Rechte über sudo.
sudo apt update
apt list --upgradable
sudo apt install less
apt-get --simulate upgrade
update lädt aktuelle Paketverzeichnisse, installiert aber keine neuen Programmversionen. --upgradable zeigt verfügbare Aktualisierungen. install less installiert das benannte Paket samt benötigten Abhängigkeiten oder aktualisiert es, falls es schon vorhanden ist. --simulate berechnet einen Plan ohne Installation. Die Simulation zeigt beispielsweise „0 upgraded“ oder eine Liste vorgeschlagener Paketaktionen; das sind systemabhängige Ergebnisse.
sudo apt upgrade würde installierte Pakete aktualisieren und darf bei Bedarf neue Abhängigkeiten hinzufügen, entfernt aber keine installierten Pakete. apt full-upgrade kann auch Pakete entfernen; der Plan muss vorher geprüft werden. Das ist zudem kein automatischer Wechsel auf eine neue Distributionsversion. apt-get upgrade verhält sich ohne Zusatzoptionen konservativer bei neuen Abhängigkeiten. apt ist für interaktive Bedienung gedacht, apt-get für verlässlichere Skriptschnittstellen. Die Ausgaben und manche Vorgaben sind daher nicht austauschbar. Ein pauschales -y würde die Rückfrage überspringen und ist hier bewusst nicht vorgesehen.
Ein laufendes Programm ist ein Prozess.
Jeder Prozess hat eine Prozess-ID (PID), einen Benutzerkontext und Ressourcenverbrauch. Ein Dienst kann mehrere Prozesse besitzen; ein laufender Prozess beweist noch nicht, dass der Dienst seine Aufgabe erfüllt. Mit ps erhältst du eine Momentaufnahme, mit top eine laufend aktualisierte Ansicht.
ps -e -o pid,comm,%cpu,%mem
top
-e wählt alle Prozesse, -o legt die Ausgabespalten fest: PID, kurzer Befehlsname, CPU- und Speicheranteil. Unter Linux/procps beziehen sich CPU-Werte von ps auf die bisherige Laufzeit und sind kein identischer Messwert zur aktuellen top-Abtastung. Eine simulierte Zeile wäre 1420 bash 0.0 0.1. top zeigt außerdem Systemlast und Speicherinformationen; mit q verlässt du es. Freier RAM allein ist kein Auslastungsurteil, weil Linux Speicher auch als Cache nutzt. Die Serveradministration vertieft Messwerte und Fehlersuche.
Orientierung prüfen, bevor du Rechte erhöhst.
„Datei nicht gefunden“ beginnt mit pwd, Schreibweise und relativem Pfad. „Permission denied“ beginnt mit Besitzer und Rechten; ein blindes sudo kann neue Dateien mit falschem Eigentümer erzeugen. Leerzeichen gehören in Anführungszeichen. Ein Punkt am Dateinamen ist keine Zugriffssperre. Die nächste Station erklärt Benutzer, Rechte und SSH.
Aufgabe 1: Du stehst im Übungsordner unter texte. Mit welchem relativen Befehl liest du die archivierte Kopie, und warum funktioniert archiv/notizen-alt.txt hier nicht?
Lösung: Den Ausgangspunkt des Pfads bestimmen
cat ../archiv/notizen-alt.txt geht zunächst eine Ebene nach oben und anschließend in archiv. Ohne .. würde die Shell nach einem Unterordner archiv innerhalb von texte suchen. Alternativ funktioniert der absolute Weg cat "$uebung/archiv/notizen-alt.txt", solange die Variable in dieser Sitzung gesetzt ist.
Aufgabe 2: Lege im Übungsordner auswertung an und speichere nur die Zeilen mit dem Wort Linux aus der Notiz als neue Datei linux.txt. Verändert das die Originalnotiz?
Lösung: Eingabe lesen, Ergebnis getrennt schreiben
cd "$uebung"
mkdir auswertung
grep 'Linux' texte/notizen.txt > auswertung/linux.txt
cat auswertung/linux.txtDie Originalnotiz wird nur gelesen. Die neue Datei enthält Linux lernen. > würde jedoch eine bereits vorhandene linux.txt ersetzen. Bei Wiederholung zuerst nachsehen; das Übungsverzeichnis bleibt zur eigenen Kontrolle erhalten. Ein grep … notizen.txt > notizen.txt wäre falsch: Die Shell kürzt die Zieldatei bereits vor dem Lesen.
Quellen und fachlicher Stand.
Fachlich geprüft am . Zielumgebung: Debian 13 / Ubuntu Server 24.04 LTS, Bash, GNU Coreutils und procps; keine distributionsübergreifende Installationsanleitung. Die Beispiele und Diagramme sind eigene didaktische Darstellungen.
- Debian Reference: GNU/Linux-Grundlagen und hier(7): Dateisystemhierarchie.
- Bash-Handbuch: Umleitungen, Variablen und Shellbefehle.
- ls(1), cp(1), mv(1), mktemp(1), find(1) und grep(1): Werkzeugsemantik.
- APT 3.0.3: apt(8) und apt-get(8): Aktualisierungen und Simulation.
- ps(1): Prozesse und Messwerte.