Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Die wichtigsten Befehle

1 Navigation

BefehlBeschreibung
pwdZeigt aktuelles Verzeichnis
lsListet Dateien/Ordner
cdWechselt Verzeichnis
historyZeigt den Befehlsverlauf an

1.1 ls-Befehl

ls -l    # Detaillierte Liste mit Berechtigungen, Datum, Größe, ...
ls -a    # Zeigt auch versteckte Dateien und Ordner an
ls -la   # Kombination: Detaillierte Liste inkl. versteckter Elemente
ls -lh   # Liste mit Größenangaben in passender Einheit (KB, MB, GB)
ls -lah  # Kombination
ls -lt   # Sortierung nach Änderungsdatum
ls -lS   # Sortierung nach Dateigröße
ls -l <pfad>  # Anzeigen von Dateien/Ordner des gegebenen Pfads

1.2 cd-Befehl

cd Documents    # Wechselt in den Unterordner Documents
cd ~/Downloads  # Wechselt in den Ordner Downloads im Homeverzeichnis
cd /      # Wechselt in Hauptverzeichnis
cd ~      # Wechselt in das Homeverzeichnis
cd ..     # Wechselt ins Eltern-Verzeichnis
cd ../..  # Geht zwei Ebenen nach oben
cd -      # Springt zum letzten Verzeichnis zurück

note

Unterschied zwischen ~ und $HOME

Die Tilde (~) ist eine Shell-Abkürzung für das Home-Verzeichnis, während $HOME eine Umgebungsvariable ist, die von Programmen und Skripten verwendet wird. Beide zeigen auf das Home-Verzeichnis des aktuell angemeldeten Benutzers, sind jedoch unterschiedlich implementiert.

Siehe auch: ~ vs. $HOME

1.3 history-Befehl

history               # Zeigt die letzten ausgeführten Befehle an
history | grep "cal"  # Zeigt die letzten Befehle an, passen zum Suchbegriff
!123                  # Führt Befehl 123 erneut aus
!!                    # Führt den letzten Befehl erneut aus

2 Dateien und Ordner

BefehlBeschreibungBeispiel
touchErstellt leere Datei(ein)touch test1.txt test2.txt
mkdirErstellt Verzeichnis(se)mkdir Projekte Archiv
cpKopiert Datei/Ordnercp quelle.txt ziel.txt
mvVerschiebt oder benennt ummv alt.txt neu.txt
rmLöscht Datei(en) und Ordnerrm test1.txt test2.txt
rm -rLöscht Verzeichnis rekursivrm -r Ordner

achtung

Der Befehl rm löscht unwiderruflich – ohne Papierkorb!

Soll das Löschen bestätigt werden, muss der interaktive Modus verwendet werden:

>rm -i test.txt
>```

</div>


<div class="mdbook-callouts mdbook-callouts-tip">
<p class="mdbook-callouts-title">
  <span class="mdbook-callouts-icon"></span>
  tip
</p>


Bevor mehrere Dateien gelöscht werden, sollen die Auswirkungen des zugehörigen Befehls geprüft werden. Beispiel:

```zsh
ls *.py
rm *.py

2.1 mkdir-Befehl

mkdir NeuerOrdner          # Erstellt einen Ordner
mkdir Ordner1 Ordner2      # Erstellt mehrere Ordner
mkdir -p Fotos/2025/10/29  # Erstellt Ordner + Unterordner

Brace Expansion für effiziente Stapelerstellung:

Geschweifte Klammern ermöglichen die schnelle Erstellung mehrerer ähnlicher Elemente:

mkdir Tag_{01..03}           # Erstellt: Tag_01, Tag_02, Tag_03
mkdir {Januar,Februar,März}  # Erstellt drei Monatsordner
touch datei_{a,b,c}.txt      # Erstellt: datei_a.txt, datei_b.txt, datei_c.txt
echo {01..05}                # Zeigt: 01 02 03 04 05
cp dokument.txt{,.backup}    # Kopiert nach dokument.txt.backup

Kombinationen sind ebenfalls möglich:

mkdir -p Projekt/{src,tests,docs}/{python,rust}
# Erstellt: Projekt/src/python, Projekt/src/rust,
#           Projekt/tests/python, Projekt/tests/rust,
#           Projekt/docs/python, Projekt/docs/rust

2.2 cp- und mv-Befehl

cp quelle.txt ziel.txt     # Kopiert eine Datei
cp -i quelle.txt ziel.txt  # Fragt nach bevor überschrieben wird
cp -r Ordner1 Ordner2      # Kopiert einen kompletten Ordner (rekursiv)
cp *.txt Text              # Kopiert alle Dateien mit der Endung .txt

Gleiche Syntax beim mv-Befehl.

3 Arbeiten mit Texten und Dateien

BefehlFunktionBeispiel
catZeigt den Inhalt von Dateien (ohne Editor)cat datei1.txt datei2.txt
lessScrollbare Ansichtless datei.txt
head / tailZeigt Anfang/Endehead -n 20 datei.txt
wcZählt Zeilen, Wörter, Zeichenwc -l datei.txt
diffVergleicht Dateiendiff a.txt b.txt
findSucht Dateienfind . -name "*.txt"
nanoDatei im Texteditor im Terminal öffnennano datei.txt
grepSucht nach Textmustern in Dateiengrep "Fehler" log.txt
openÖffnet Datei/Ordner im Finderopen .
open -a <App>Öffnet Datei/Ordner in bestimmter Appopen -a ForkLift .

Alternative zu less datei.txt: cat datei.txt | more

3.1 Navigation bei Anzeige über less-Befehl

  • Leertaste: Nächste Seite
  • b: Vorherige Seite
  • /: Vorwärts suchen
  • ?: Rückwärts suchen
  • q: Beenden

3.2 head- und tail-Befehl

head datei.txt        # Zeigt die ersten 20 Zeilen
head -n 20 datei.txt  # Zeigt die ersten 20 Zeilen
tail datei.txt        # Zeigt die letzten 10 Zeilen
tail -n 20 datei.txt  # Zeigt die letzten 20 Zeilen

3.3 Dateiinhalt in Echtzeit anzeigen

Änderungen in Echtzeit können mit folgendem Befehl verfolgt werden:

tail -f info.log

Dies funktioniert jedoch nicht immer. Viele Editoren speichern Änderungen nicht direkt in der bestehenden Datei, sondern erstellen eine temporäre Datei, schreiben den neuen Inhalt hinein, löschen die alte Datei und benennen die neue Datei auf den alten Namen um. Dabei ändert sich die inode (Datei-Identität im Dateisystem). Abhilfe schafft -F (follow name). Es wird erkannt, wenn die Datei ersetzt wurde und folgt automatisch der neuen Datei.

tail -F info.log

Hierbei wird jedoch immer der neue Dateiinhalt unter den alten geschrieben. Dies wird schnell unübersichtlich. Eine bessere Lösung ist mit dem Befehl watch möglich. Diese muss ggf. noch installiert werden:

brew install watch

Anschließend kann der Dateiinhalt wie folgt überwacht werden:

watch -n 1 "clear && cat info.log"
  • -n 1: alle 1 Sekunden aktualisieren
  • clear: Ausgabe löschen
  • cat test.txt: Dateiinhalt anzeigen

Nutzt man dies öfters, empfiehlt sich die Erstellung eines Alias:

alias watchfile='watch -n 1 "clear && cat $1"'

Verwendung mit:

watchfile info.log

3.4 find-Befehl

find . -name "*.txt"          # Findet alle .txt-Dateien
find . -name "rechnung.pdf"   # Findet die Datei rechnung.pdf
find . -type f -size +5M      # Findet Dateien größer als 5 MB
find . -name "*.*" -mtime -7  # Dateien, die in den letzten 7 Tagen verändert wurden
find . -empty                 # Findet leere Dateien und Ordner

3.5 grep-Befehl

grep "Januar" notiz.txt     # Sucht in einer Datei
grep -r "Januar" notiz.txt  # Sucht rekursiv in einem Ordner
grep -n "Januar" notiz.txt  # Zeigt alle Zeilen inkl. Nr. mit dem Suchwort
grep -c "Januar" notiz.txt  # Zählt die Anzahl der Vorkommen des Suchworts
grep -i "Januar" notiz.txt  # Berücksichtigt Groß- und Kleinschreibung

3.6 Prozesse, Systeme und Netzwerk

3.7 Prozesse

BefehlBeschreibungBeispiel
topLive-Systemüberwachungtop
htopLive-Systemüberwachung (interaktiv, in Farbe)htop
psZeigt aktive Prozesseps aux
killBeendet Prozesskill 1234
killallBeendet alle Prozesse eines Namenskillall Safari

3.8 top-Befehl

Kurzbefehle:

  • o: Nach anderer Spalte sortieren (o drücken und Spaltenname eingeben)
  • q: Beenden

Alternative: htop

htop liefert eine interaktive Anzeige in Farbe.

Installation:

brew install htop

3.9 ps-Befehl

ps                    # Zeigt die eigenen Prozesse
ps aux                # Zeigt alle Prozesse mit Details
ps aux | grep Safari  # Zeigt bestimmte Prozesse

3.10 System und Hardware

BefehlBeschreibung
df -hSpeicherplatz aller Laufwerke anzeigen
du -sh *Größe von Ordnern anzeigen
unameAnzeige von Systeminformationen
uptimeZeigt Laufzeit und Systemlast
whoamiAktueller Benutzer
dateAktuelles Datum/Zeit
calZeigt einen Kalender an
say "Hallo"macOS sagt Text laut (praktisch für Testzwecke)

3.11 du-Befehl

du -sh * | sort -h   # Größe von Ordnern und Dateien aufsteigend sortiert
du -sh * | sort -hr  # Absteigend sortiert
du -sh * | sort -hr | head -5  # Beschränkung auf die 5 größten Elemente

3.12 uname-Befehl

uname     # Zeigt den Kernelnamen an (i. d. R. "Darwin")
uname -a  # Alle verfügbaren Systeminformationen
uname -s  # Gleiche ausgabe wie bei uname
uname -r  # Kernel-Version
uname -v  # Kernel-Buildversion
uname -m  # Machine hardware name
uname -n  # Rechnername (Hostname)
uname -p  # Prozessortyp (machmal leer)
uname -o  # Betriebssystem

3.13 date-Befehl

date              # Zeigt Datum+Zeit; z. B.: Thu Oct 30 21:53:42 CET 2025
date "+%Y-%m-%d"  # Zeigt Datum, z. B.: 2025-10-30
date "+%H:%M:%S"  # Zeigt Uhrzeit, z. B.: 21:53:42

3.14 cal-Befehl

cal          # Aktueller Monat
cal 2026     # Bestimmtes Jahr
cal 01 2026  # Bestimmter Monat

Beispielausgabe:

    January 2026
Su Mo Tu We Th Fr Sa
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

3.15 Netzwerk

BefehlBeschreibungBeispiel
pingTestet Verbindungping google.com
ifconfigZeigt Netzwerkschnittstellenifconfig
curlHTTP-Anfragen sendencurl https://example.com
scpKopiert Dateien über SSHscp file.txt user@host:/path
sshVerbindung zu Serverssh user@ip

Lokale IP-Adresse(n) anzeigen:

ifconfig | grep "inet "

3.16 curl-Befehl

curl ist ein vielseitiges Tool zum Abrufen oder Senden von Daten über HTTP, HTTPS, FTP und viele andere Protokolle. Es eignet sich sowohl zum einfachen Testen von Webseiten als auch für API-Aufrufe.

Beispiele:

# Webseite abrufen und im Terminal anzeigen
curl https://example.com

# Datei herunterladen
curl -O https://example.com/datei.zip

# API-Aufruf mit Header
curl -H "Authorization: Bearer TOKEN" https://api.example.com/data

Häufig verwendete Optionen:

  • -I: nur Header anzeigen
  • -L: Redirects folgen
  • -d: POST-Daten senden

4 Job-Control (fg, bg, jobs, &)

Job-Control ermöglicht die Verwaltung von Prozessen, die im Hintergrund oder Vordergrund laufen. Dies ist besonders nützlich bei langläufigen Aufgaben oder wenn man mehrere Programme parallel ausführen möchte.

4.1 Grundlegende Konzepte

  • Vordergrundprozess (Foreground): Prozess, der gerade aktiv ist und das Terminal blockiert

  • Hintergrundprozess (Background): Prozess, der im Hintergrund läuft, während das Terminal weiter nutzbar bleibt

  • Job: Eine vom Terminal gestartete Aufgabe (kann mehrere Prozesse enthalten)

4.2 Befehle

BefehlBeschreibung
jobsZeigt alle Jobs der aktuellen Shell
fgHolt einen Job in den Vordergrund
bgSetzt einen angehaltenen Job im Hintergrund fort
&Startet einen Befehl direkt im Hintergrund
STRG + ZHält den aktuellen Vordergrundprozess an

4.3 Beispiele

Prozess im Hintergrund starten:

python script.py &

Das & am Ende startet den Befehl sofort im Hintergrund. Das Terminal bleibt nutzbar.

Laufenden Prozess anhalten und in Hintergrund verschieben:

python script.py
# STRG + Z drücken (Prozess wird angehalten)
bg

Alle Jobs anzeigen:

jobs

Beispielausgabe:

[1]  + running    python script.py
[2]  - suspended  vim dokument.txt

Bestimmten Job in den Vordergrund holen:

fg %1    # Job 1 in den Vordergrund
fg %2    # Job 2 in den Vordergrund
fg       # Letzten Job in den Vordergrund

Hintergrundprozess beenden:

kill %1  # Beendet Job 1

4.4 Praktische Anwendungsfälle

Mehrere Editoren gleichzeitig:

vim config.txt &
vim script.py &
jobs

Langläufige Aufgabe im Hintergrund:

find / -name "*.log" > logs.txt 2>&1 &

Zwischen mehreren Aufgaben wechseln:

python server.py
# STRG + Z
bg
vim main.py
# STRG + Z
jobs
fg %1  # Zurück zum Server