Eintrag

Linux Shell für Einsteiger: Dein Weg zur Kommandozeile

Linux Shell für Einsteiger: Dein Weg zur Kommandozeile

Die Shell ist das Herzstück von Linux. Was auf den ersten Blick einschüchternd wirkt, wird schnell zum mächtigsten Werkzeug in deinem Arsenal. Dieser Guide bringt dich von Null auf produktiv.

Shell Terminal Die Shell: Dein direkter Draht zum System

Was ist die Shell?

Die Shell ist ein Programm, das zwischen dir und dem Betriebssystem vermittelt. Du gibst Befehle ein, die Shell führt sie aus und zeigt dir das Ergebnis.

%%{init: {'theme': 'dark'}}%%
flowchart LR
    A[Du] -->|Befehl| B[Shell]
    B -->|Ausführung| C[Linux Kernel]
    C -->|Ergebnis| B
    B -->|Ausgabe| A

    style B fill:#7c3aed,stroke:#a78bfa,color:#fff

Shell vs. Terminal

Begriff Bedeutung
Terminal Das Fenster/Programm, in dem du tippst (z.B. GNOME Terminal, Konsole)
Shell Der Interpreter, der deine Befehle verarbeitet (z.B. Bash, Zsh)
Prompt Die Eingabeaufforderung, die auf deine Befehle wartet

Beliebte Shells

Shell Beschreibung
Bash Standard auf den meisten Linux-Systemen
Zsh Moderner, mit besserer Autovervollständigung
Fish Benutzerfreundlich, mit Syntax-Highlighting

Dieses Tutorial verwendet Bash-Syntax, die auch in Zsh funktioniert.


Der Prompt verstehen

Wenn du ein Terminal öffnest, siehst du den Prompt:

1
darthvaper@homelab:~$

Prompt Anatomie Die Bestandteile des Prompts

Teil Bedeutung
darthvaper Dein Benutzername
@ Trennzeichen
homelab Hostname des Computers
: Trennzeichen
~ Aktuelles Verzeichnis (~ = Home-Verzeichnis)
$ Normaler Benutzer (# = Root)

Erste Schritte: Navigation

Wo bin ich? - pwd

1
2
pwd
# /home/darthvaper

pwd = Print Working Directory

Was ist hier? - ls

1
2
3
4
ls              # Dateien auflisten
ls -l           # Detaillierte Liste
ls -la          # Inklusive versteckter Dateien
ls -lh          # Mit lesbaren Dateigrößen

Beispielausgabe von ls -la:

1
2
3
4
5
drwxr-xr-x  5 darthvaper darthvaper 4096 Jan  5 10:00 .
drwxr-xr-x  3 root       root       4096 Jan  1 12:00 ..
-rw-r--r--  1 darthvaper darthvaper  220 Jan  1 12:00 .bashrc
drwxr-xr-x  2 darthvaper darthvaper 4096 Jan  5 09:00 Dokumente
-rw-r--r--  1 darthvaper darthvaper 1024 Jan  5 10:00 notizen.txt

Verzeichnis wechseln - cd

1
2
3
4
5
6
cd /etc              # Absoluter Pfad
cd Dokumente         # Relativer Pfad
cd ..                # Ein Verzeichnis nach oben
cd ~                 # Ins Home-Verzeichnis
cd -                 # Zum vorherigen Verzeichnis
cd                   # Auch ins Home-Verzeichnis

Verzeichnisstruktur verstehen

%%{init: {'theme': 'dark'}}%%
flowchart TD
    A["/"] --> B["/home"]
    A --> C["/etc"]
    A --> D["/var"]
    A --> E["/usr"]
    B --> F["/home/darthvaper"]
    F --> G["~/Dokumente"]
    F --> H["~/Downloads"]

    style A fill:#f7768e,stroke:#f7768e
    style F fill:#7c3aed,stroke:#a78bfa
Verzeichnis Inhalt
/ Wurzelverzeichnis (Root)
/home Benutzerverzeichnisse
/etc Konfigurationsdateien
/var Variable Daten (Logs, Datenbanken)
/usr Programme und Bibliotheken
/tmp Temporäre Dateien
/root Home-Verzeichnis des Root-Users

Dateien und Verzeichnisse verwalten

Erstellen

1
2
3
4
5
6
7
8
9
# Verzeichnis erstellen
mkdir projekte
mkdir -p projekte/web/css    # Mit Unterverzeichnissen

# Leere Datei erstellen
touch notizen.txt

# Datei mit Inhalt erstellen
echo "Hallo Welt" > hallo.txt

Kopieren - cp

1
2
3
cp datei.txt kopie.txt              # Datei kopieren
cp datei.txt /tmp/                  # In anderes Verzeichnis
cp -r ordner/ backup/               # Verzeichnis rekursiv kopieren

Verschieben/Umbenennen - mv

1
2
3
mv alt.txt neu.txt                  # Umbenennen
mv datei.txt /tmp/                  # Verschieben
mv datei.txt /tmp/neuer_name.txt    # Verschieben und umbenennen

Löschen - rm

1
2
3
4
rm datei.txt                        # Datei löschen
rm -r ordner/                       # Verzeichnis rekursiv löschen
rm -rf ordner/                      # Ohne Nachfrage (VORSICHT!)
rmdir leerer_ordner/                # Nur leere Verzeichnisse

Warnung: rm -rf löscht unwiderruflich! Es gibt keinen Papierkorb.


Dateien anzeigen und bearbeiten

Inhalt anzeigen

1
2
3
4
5
6
cat datei.txt                # Gesamte Datei ausgeben
less datei.txt               # Seitenweise anzeigen (q zum Beenden)
head datei.txt               # Erste 10 Zeilen
head -n 20 datei.txt         # Erste 20 Zeilen
tail datei.txt               # Letzte 10 Zeilen
tail -f /var/log/syslog      # Live-Ausgabe (Follow)

Texteditoren

Editor Schwierigkeit Beschreibung
nano Einfach Ideal für Anfänger
vim Schwer Mächtig, steile Lernkurve
nvim Schwer Moderner Vim

Nano verwenden:

1
nano datei.txt
  • Ctrl + O → Speichern
  • Ctrl + X → Beenden
  • Ctrl + K → Zeile ausschneiden
  • Ctrl + U → Einfügen
  • Ctrl + W → Suchen

Berechtigungen verstehen

Die Berechtigungsanzeige

1
2
ls -l datei.txt
# -rw-r--r-- 1 darthvaper users 1024 Jan 5 10:00 datei.txt

Berechtigungen erklärt Aufbau der Berechtigungsanzeige

1
2
3
4
5
6
-rw-r--r--
│├──┤├──┤├──┤
│  │   │   └── Andere (Others): r-- (nur lesen)
│  │   └────── Gruppe (Group): r-- (nur lesen)
│  └────────── Besitzer (User): rw- (lesen, schreiben)
└───────────── Dateityp: - (Datei), d (Verzeichnis), l (Link)

Berechtigungen im Detail

Symbol Bedeutung Für Dateien Für Verzeichnisse
r Read Lesen Inhalt auflisten
w Write Schreiben Erstellen/Löschen
x Execute Ausführen Betreten
- Keine - -

Numerische Notation

Berechtigung Binär Dezimal
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7

Beispiele:

Numerisch Symbolisch Bedeutung
755 rwxr-xr-x Besitzer: alles, Rest: lesen+ausführen
644 rw-r--r-- Besitzer: lesen+schreiben, Rest: nur lesen
700 rwx------ Nur Besitzer hat Zugriff
777 rwxrwxrwx Alle dürfen alles (unsicher!)

Berechtigungen ändern - chmod

1
2
3
4
5
6
7
8
9
10
# Symbolisch
chmod u+x script.sh          # Ausführbar für Besitzer
chmod g+w datei.txt          # Schreibbar für Gruppe
chmod o-r datei.txt          # Lesen entziehen für Andere
chmod a+r datei.txt          # Lesen für alle

# Numerisch
chmod 755 script.sh          # rwxr-xr-x
chmod 644 datei.txt          # rw-r--r--
chmod 600 geheim.txt         # rw-------

Besitzer ändern - chown

1
2
3
chown benutzer datei.txt           # Besitzer ändern
chown benutzer:gruppe datei.txt    # Besitzer und Gruppe
chown -R benutzer ordner/          # Rekursiv

Benutzer und Sudo

Benutzerkonzept

%%{init: {'theme': 'dark'}}%%
flowchart TD
    A[Root - UID 0] --> B[Volle Kontrolle]
    C[Normale Benutzer] --> D[Eingeschränkte Rechte]
    C --> E[Eigenes Home-Verzeichnis]
    C --> F[Können sudo nutzen]

    style A fill:#f7768e,stroke:#f7768e
    style C fill:#7c3aed,stroke:#a78bfa
Benutzertyp UID Beschreibung
root 0 Superuser, kann alles
System 1-999 Dienste (www-data, mysql, etc.)
Normal 1000+ Echte Benutzer

Wer bin ich?

1
2
3
whoami              # Aktueller Benutzername
id                  # UID, GID und Gruppen
groups              # Gruppenmitgliedschaften

Sudo - Administratorrechte

sudo = Super User Do

1
2
3
sudo apt update              # Befehl als Root ausführen
sudo -i                      # Root-Shell öffnen
sudo -u www-data command     # Als anderer Benutzer

Wichtige sudo-Regeln:

  1. Nur nutzen, wenn nötig
  2. Niemals sudo rm -rf / ausführen!
  3. Befehle verstehen, bevor man sie mit sudo ausführt

Das Passwort wird für 15 Minuten gecacht. Danach erneute Eingabe nötig.

Sudoers-Datei

1
2
# Sudoers bearbeiten (sicher)
sudo visudo

Typischer Eintrag:

1
darthvaper ALL=(ALL:ALL) NOPASSWD: ALL
Teil Bedeutung
darthvaper Benutzername
ALL= Von allen Hosts
(ALL:ALL) Als alle Benutzer/Gruppen
NOPASSWD: Ohne Passwortabfrage
ALL Alle Befehle

Pipes und Umleitungen

Ausgabeumleitung

1
2
3
4
5
6
7
8
9
10
11
12
13
# In Datei schreiben (überschreiben)
echo "Hallo" > datei.txt

# An Datei anhängen
echo "Welt" >> datei.txt

# Fehlerausgabe umleiten
command 2> fehler.txt

# Beides umleiten
command > ausgabe.txt 2>&1
# Oder moderner:
command &> alles.txt

Umleitungen Übersicht der Umleitungen

Eingabeumleitung

1
2
3
4
5
6
7
8
# Aus Datei lesen
sort < unsortiert.txt

# Here-Document
cat << EOF
Zeile 1
Zeile 2
EOF

Pipes - Befehle verketten

Die Pipe | leitet die Ausgabe eines Befehls als Eingabe an den nächsten:

1
2
3
4
5
6
7
8
9
10
11
# Prozesse filtern
ps aux | grep firefox

# Zeilen zählen
cat datei.txt | wc -l

# Sortieren und Duplikate entfernen
cat namen.txt | sort | uniq

# Erste 5 größte Dateien
ls -lS | head -n 5
%%{init: {'theme': 'dark'}}%%
flowchart LR
    A[Befehl 1] -->|stdout| B["|"]
    B -->|stdin| C[Befehl 2]
    C -->|stdout| D["|"]
    D -->|stdin| E[Befehl 3]

    style B fill:#7c3aed,stroke:#a78bfa,color:#fff
    style D fill:#7c3aed,stroke:#a78bfa,color:#fff

Praktische Beispiele

1
2
3
4
5
6
7
8
9
10
11
# Log-Datei durchsuchen und Zeilen zählen
cat /var/log/syslog | grep "error" | wc -l

# Festplattennutzung sortiert anzeigen
du -sh /* 2>/dev/null | sort -h

# Laufende Prozesse nach RAM sortiert
ps aux --sort=-%mem | head -10

# IP-Adressen aus Log extrahieren
grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' access.log | sort | uniq -c | sort -rn

Wichtige Tastenkombinationen

Tastenkombination Funktion
Ctrl + A Zum Zeilenanfang
Ctrl + E Zum Zeilenende
Ctrl + U Zeile vor Cursor löschen
Ctrl + K Zeile nach Cursor löschen
Ctrl + W Wort vor Cursor löschen
Ctrl + Y Gelöschtes einfügen
Alt + B Wort zurück
Alt + F Wort vorwärts

Prozesssteuerung

Tastenkombination Funktion
Ctrl + C Befehl abbrechen
Ctrl + Z Befehl pausieren (in Hintergrund)
Ctrl + D EOF senden / Shell beenden
Ctrl + L Bildschirm leeren (wie clear)

History

Tastenkombination Funktion
/ Durch History navigieren
Ctrl + R History durchsuchen
!! Letzten Befehl wiederholen
!$ Letztes Argument des vorherigen Befehls
!abc Letzten Befehl mit “abc” ausführen
1
2
3
4
5
6
7
# History anzeigen
history

# Befehl aus History ausführen
!42              # Befehl Nr. 42
!!               # Letzter Befehl
sudo !!          # Letzten Befehl mit sudo

Copy & Paste im Terminal

Linux Terminal (X11)

Aktion Tastenkombination
Kopieren Ctrl + Shift + C
Einfügen Ctrl + Shift + V
Mit Maus Markieren = Kopieren, Mittelklick = Einfügen

SSH/PuTTY (Windows)

Aktion Methode
Kopieren Text markieren (automatisch kopiert)
Einfügen Rechtsklick

tmux

Aktion Tastenkombination
Copy-Mode Prefix, [
Markieren Space (Start), Enter (Ende)
Einfügen Prefix, ]

Suchen und Finden

Dateien finden - find

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Nach Namen suchen
find /home -name "*.txt"

# Nach Typ
find /var -type f              # Dateien
find /var -type d              # Verzeichnisse

# Nach Größe
find /home -size +100M         # Größer als 100MB

# Nach Änderungszeit
find /tmp -mtime -1            # Geändert in letzten 24h

# Mit Aktion
find /tmp -name "*.tmp" -delete

In Dateien suchen - grep

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Einfache Suche
grep "error" /var/log/syslog

# Rekursiv in Verzeichnis
grep -r "TODO" /home/projekt/

# Groß-/Kleinschreibung ignorieren
grep -i "fehler" logdatei.txt

# Mit Zeilennummern
grep -n "pattern" datei.txt

# Nur Dateinamen
grep -l "pattern" *.txt

# Invertiert (Zeilen OHNE Pattern)
grep -v "debug" log.txt

Kombiniert

1
2
3
4
5
# Finden und durchsuchen
find /var/log -name "*.log" -exec grep -l "error" {} \;

# Mit xargs (effizienter)
find /var/log -name "*.log" | xargs grep -l "error"

Prozesse verwalten

Prozesse anzeigen

1
2
3
4
5
6
ps                   # Eigene Prozesse
ps aux               # Alle Prozesse
ps aux | grep nginx  # Filtern

top                  # Interaktive Prozessansicht
htop                 # Bessere Version (falls installiert)

Prozesse beenden

1
2
3
4
kill PID             # Freundlich beenden (SIGTERM)
kill -9 PID          # Erzwungen beenden (SIGKILL)
killall firefox      # Nach Namen beenden
pkill -f "python"    # Nach Muster beenden

Hintergrundprozesse

1
2
3
4
5
6
7
8
9
10
# Im Hintergrund starten
command &

# Pausieren und in Hintergrund
# Ctrl+Z, dann:
bg                   # Im Hintergrund fortsetzen
fg                   # In Vordergrund holen

# Jobs anzeigen
jobs

Verbindungen zu anderen Systemen

SSH - Secure Shell

1
2
3
4
5
6
7
8
9
# Verbinden
ssh [email protected]
ssh [email protected]

# Mit Port
ssh -p 2222 [email protected]

# Mit Key
ssh -i ~/.ssh/mein_key [email protected]

SSH-Keys einrichten

1
2
3
4
5
6
7
8
# Key-Paar generieren
ssh-keygen -t ed25519 -C "[email protected]"

# Public Key auf Server kopieren
ssh-copy-id [email protected]

# Danach: Login ohne Passwort!
ssh [email protected]

Dateien übertragen - scp

1
2
3
4
5
6
7
8
# Lokal → Remote
scp datei.txt benutzer@server:/pfad/

# Remote → Lokal
scp benutzer@server:/pfad/datei.txt ./

# Verzeichnis kopieren
scp -r ordner/ benutzer@server:/pfad/

Dateien synchronisieren - rsync

1
2
3
4
5
6
7
8
# Lokal → Remote (nur Änderungen)
rsync -avz ordner/ benutzer@server:/pfad/

# Mit Fortschritt
rsync -avz --progress quelle/ ziel/

# Löschen was im Ziel nicht mehr existiert
rsync -avz --delete quelle/ ziel/

Nützliche Befehle

Systeminformationen

1
2
3
4
5
6
uname -a             # Kernel-Info
hostname             # Hostname
uptime               # Laufzeit
free -h              # Arbeitsspeicher
df -h                # Festplattennutzung
lscpu                # CPU-Info

Netzwerk

1
2
3
4
5
ip addr              # IP-Adressen
ip route             # Routing-Tabelle
ping google.de       # Erreichbarkeit testen
curl ifconfig.me     # Externe IP
ss -tulpn            # Offene Ports

Paketverwaltung (Debian/Ubuntu)

1
2
3
4
5
sudo apt update              # Paketlisten aktualisieren
sudo apt upgrade             # Pakete aktualisieren
sudo apt install paket       # Paket installieren
sudo apt remove paket        # Paket entfernen
apt search stichwort         # Pakete suchen

Archivierung

1
2
3
4
5
6
7
8
9
10
11
# tar.gz erstellen
tar -czvf archiv.tar.gz ordner/

# tar.gz entpacken
tar -xzvf archiv.tar.gz

# zip erstellen
zip -r archiv.zip ordner/

# zip entpacken
unzip archiv.zip

Befehlsverkettung

Operatoren

Operator Bedeutung Beispiel
; Nacheinander (immer) cmd1 ; cmd2
&& Nur wenn erfolgreich cmd1 && cmd2
\|\| Nur wenn fehlgeschlagen cmd1 \|\| cmd2
1
2
3
4
5
6
7
8
9
10
11
# Immer beide ausführen
echo "Start" ; echo "Ende"

# Nur bei Erfolg
apt update && apt upgrade

# Bei Fehler Alternative
ping -c1 server || echo "Nicht erreichbar"

# Kombiniert
mkdir projekt && cd projekt || echo "Fehler"

Aliase und Anpassungen

Aliase erstellen

1
2
3
4
5
6
7
# Temporär (nur aktuelle Sitzung)
alias ll='ls -la'
alias update='sudo apt update && sudo apt upgrade'

# Permanent (in ~/.bashrc oder ~/.zshrc)
echo "alias ll='ls -la'" >> ~/.bashrc
source ~/.bashrc

Nützliche Aliase

1
2
3
4
5
6
7
8
9
10
11
12
13
# Navigation
alias ..='cd ..'
alias ...='cd ../..'

# Sicherheit
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Produktivität
alias c='clear'
alias h='history'
alias ports='ss -tulpn'

Hilfe finden

Man-Pages

1
2
man ls               # Handbuch für ls
man -k keyword       # Nach Befehl suchen

Navigation in man:

  • Space → Seite weiter
  • B → Seite zurück
  • / → Suchen
  • Q → Beenden

Weitere Hilfe

1
2
3
4
5
command --help       # Kurzhilfe
info command         # Ausführliche Doku
whatis command       # Einzeiler-Beschreibung
type command         # Was ist der Befehl?
which command        # Wo liegt der Befehl?

Cheat Sheet

Befehl Funktion
pwd Aktuelles Verzeichnis
ls -la Dateien auflisten
cd pfad Verzeichnis wechseln
cd .. Eine Ebene hoch
cd ~ Home-Verzeichnis

Dateien

Befehl Funktion
touch datei Datei erstellen
mkdir ordner Verzeichnis erstellen
cp quelle ziel Kopieren
mv quelle ziel Verschieben
rm datei Löschen

Anzeigen

Befehl Funktion
cat datei Inhalt ausgeben
less datei Seitenweise
head -n 10 Erste 10 Zeilen
tail -f Live-Ausgabe
grep muster Suchen

Berechtigungen

Befehl Funktion
chmod 755 datei Rechte setzen
chown user:group Besitzer ändern
sudo befehl Als Root

Prozesse

Befehl Funktion
ps aux Prozesse anzeigen
top / htop Interaktiv
kill PID Beenden
Ctrl+C Abbrechen

Fazit

Die Shell mag anfangs fremd wirken, aber mit etwas Übung wird sie zum unverzichtbaren Werkzeug:

Vorteil Beschreibung
Geschwindigkeit Schneller als jede GUI
Automatisierung Befehle lassen sich scripten
Remote-Zugriff Funktioniert über SSH
Ressourcenschonend Keine grafische Oberfläche nötig
Mächtigkeit Kombination von Befehlen

Mein Tipp: Übe täglich! Nutze die Shell für alltägliche Aufgaben, auch wenn es anfangs länger dauert. Nach ein paar Wochen wirst du die Maus kaum noch vermissen.


Weiterführende Ressourcen

Dieser Eintrag ist vom Autor unter CC BY 4.0 lizensiert.