Zum Inhalt springen

Erster Kontakt

Alles Weitere in diesem Kurs passiert im Terminal. Auf dieser Seite tippst du deinen ersten Befehl, verstehst jeden seiner Bestandteile und verpackst ihn in ein Shell-Skript. Die Befehle selbst lernst du ab Modul 3 systematisch; hier geht es um das Gefühl dafür, wie die Kommandozeile tickt.

Ctrl+Alt+T öffnet ein Terminalfenster. Alternativ die Super-Taste (Windows-Taste) drücken, «terminal» tippen, Enter.

Das Programm, das im Terminal auf deine Eingaben wartet, ist die Shell, auf Ubuntu die Bash. Das Terminal ist nur das Fenster, die Shell interpretiert, was du tippst.

Die Shell meldet sich mit dem Prompt:

anna@ubuntu-vm:~$
Teil Bedeutung
anna Dein Benutzername
ubuntu-vm Der Hostname der VM
~ Das aktuelle Verzeichnis. Die Tilde steht für dein Home-Verzeichnis /home/anna.
$ Normaler Benutzer. Ein # an dieser Stelle hiesse: Du bist root, der Administrator.

Ein Befehl wird mit Enter abgeschickt. Danach erscheint die Ausgabe und dann wieder ein Prompt. Kommt kein Prompt mehr, läuft noch etwas; Ctrl+C bricht ab.

Tippe (nicht kopieren) diesen Befehl und drücke Enter:

Terminal-Fenster
cat /etc/passwd > ~/myUsers.txt

Nichts passiert? Doch, nur sichtbar ist nichts. Schau nach:

Terminal-Fenster
ls -l ~/myUsers.txt
head -n 3 ~/myUsers.txt

ls -l zeigt, dass die Datei existiert und wie gross sie ist. head -n 3 zeigt die ersten drei Zeilen.

Was ist passiert? Die Zeile besteht aus vier Teilen:

Teil Rolle Erklärung
cat Befehl Ein Programm, das eine Datei liest und ihren Inhalt ausgibt. Der Name kommt von «concatenate».
Leerschlag Trennzeichen Die Shell zerlegt die Zeile an Leerschlägen in Wörter. Das erste Wort ist der Befehl, der Rest sind Argumente.
/etc/passwd Argument Die Datei, die cat lesen soll. Ein absoluter Pfad, beginnt beim Wurzelverzeichnis /.
> ~/myUsers.txt Umleitung Ohne das > landet die Ausgabe im Terminal. Mit > schreibt die Shell sie stattdessen in die genannte Datei. Existiert die Datei, wird sie überschrieben.

Die Datei /etc/passwd enthält pro Zeile einen Benutzer des Systems. Trotz ihres Namens stehen keine Passwörter darin, die liegen seit Jahrzehnten in /etc/shadow, die nur root lesen darf. Die Felder (Name, Nummer, Home-Verzeichnis, Shell) nimmst du in Modul 6 auseinander.

Hands-on: Was erwartest du, wenn du den Befehl ohne Umleitung ausführst? Und wenn du den ersten Befehl ein zweites Mal ausführst, wird die Datei dann doppelt so lang? Probiere beides aus und prüfe mit wc -l ~/myUsers.txt, das die Zeilen zählt.

Ein Shell-Skript ist eine Textdatei mit Befehlen, die die Shell der Reihe nach ausführt. Das erste Skript enthält genau den Befehl von oben. Skripte, die du selbst schreibst, gehören nach ~/bin.

  1. Verzeichnis anlegen und hineinwechseln:
    Terminal-Fenster
    mkdir -p ~/bin
    cd ~/bin
  2. Datei im Editor nano öffnen. Er ist auf Ubuntu Desktop und Server vorinstalliert:
    Terminal-Fenster
    nano listuser.sh
  3. Den folgenden Text abtippen. Ersetze Datum und Namen durch deine Angaben.
    listuser.sh
    #!/bin/bash
    #
    # listuser.sh
    # Gibt alle Benutzer des Systems aus
    #
    # 2026-11-05 / Vorname Nachname
    #
    # Das (einzige) Kommando in unserem ersten Shell-Skript
    cat /etc/passwd
  4. Speichern mit Ctrl+O, Enter, dann nano verlassen mit Ctrl+X.
  5. Das Skript ausführbar machen und starten:
    Terminal-Fenster
    chmod +x listuser.sh
    ./listuser.sh

Die Ausgabe sollte derjenigen von cat /etc/passwd entsprechen.

  • #!/bin/bash ist der Shebang. Er muss in der ersten Zeile stehen und sagt dem System, welches Programm die Datei ausführen soll. Mit #!/usr/bin/python3 wäre es ein Python-Skript.
  • Die Zeilen mit # sind Kommentare, die Shell ignoriert sie. Der Kopf mit Name, Zweck, Datum und Autor ist das Minimum, das jedes Skript in diesem Kurs trägt. Die vollständige Vorlage steht in der Skript-Konvention.
  • cat /etc/passwd ist der eigentliche Befehl. Ein Skript mit einem einzigen Befehl ist natürlich unsinnig, aber ab Modul 8 werden daraus Programme mit Menüs, Funktionen und Fehlerbehandlung.

Eine neue Datei ist in Linux nicht ausführbar. chmod +x setzt das Ausführungsrecht. Vergleiche vorher und nachher:

Terminal-Fenster
ls -l listuser.sh

Vor chmod steht am Anfang -rw-rw-r--, danach -rwxrwxr-x. Jedes x bedeutet «darf ausgeführt werden». Das ganze Rechtesystem kommt in Modul 4. Ohne das Recht antwortet die Shell mit Permission denied. Übrigens funktioniert bash listuser.sh auch ohne x, weil dann nicht die Datei, sondern bash ausgeführt wird, das die Datei nur liest.

Wenn du nur listuser.sh tippst, antwortet die Shell mit command not found, obwohl die Datei direkt vor deiner Nase liegt. Die Shell sucht Befehle nämlich nicht im aktuellen Verzeichnis, sondern in den Verzeichnissen der Variable PATH:

Terminal-Fenster
echo "$PATH"

Das aktuelle Verzeichnis ist aus Sicherheitsgründen nicht dabei: Sonst könnte jemand in einem gemeinsam genutzten Ordner ein Programm namens ls ablegen, das du versehentlich startest. ./listuser.sh heisst «die Datei listuser.sh hier im aktuellen Verzeichnis» (. steht für das aktuelle Verzeichnis) und umgeht die Suche.

Lösung anzeigen
listuser.sh
#!/bin/bash
#
# listuser.sh
# Gibt alle Benutzer des Systems aus
#
# 2026-11-05 / Vorname Nachname
#
# Titel, Benutzerliste, Anzahl
echo "Benutzer auf diesem System:"
cat /etc/passwd
echo
echo "Anzahl: $(wc -l < /etc/passwd)"
Terminal-Fenster
mkdir -p ~/labs/01-einstieg
cp ~/bin/listuser.sh ~/labs/01-einstieg/
~/labs/01-einstieg/listuser.sh

$(...) führt den Befehl in der Klammer aus und setzt seine Ausgabe an dieser Stelle ein. Mehr dazu in Modul 7.

Selbstcheck · 5 Fragen

1. Was bedeutet das Zeichen > in `cat /etc/passwd > liste.txt`?
2. Was zeigt `$` am Ende des Prompts?
3. Wozu dient die Zeile #!/bin/bash?
4. Warum braucht es ./ vor dem Skriptnamen?
5. Welche Aussagen zu /etc/passwd stimmen? (mehrere Antworten möglich)