Developer Tools

Linux Command Line-Grundlagen, die jeder Entwickler kennen sollte

Eine praktische Referenz für Linux-Befehle, die täglich in der Entwicklung eingesetzt werden – Dateisystemnavigation, Berechtigungen, Prozessverwaltung, Textverarbeitung und Netzwerk.

9 Min. Lesezeit

Terminal mit grünem Text auf dunklem Bildschirm

Die Linux-Kommandozeile ist die universelle Schnittstelle für Server, Container, CI-Pipelines und Entwicklungsumgebungen. Ob man um 2 Uhr morgens per SSH auf einem Produktionsserver arbeitet oder einen Docker-Container debuggt – Sicherheit im Umgang mit diesen Befehlen ist der Unterschied zwischen Verwirrung und Souveränität.

# Verzeichnisse navigieren
pwd                      # aktuelles Verzeichnis anzeigen
cd /var/log              # absoluter Pfad
cd ..                    # eine Ebene nach oben
cd -                     # zum vorherigen Verzeichnis zurück
cd ~                     # Home-Verzeichnis

# Dateien auflisten
ls                       # einfache Auflistung
ls -la                   # Langformat + versteckte Dateien
ls -lh                   # menschenlesbare Dateigrößen
ls -lt                   # nach Änderungszeit sortieren (neueste zuerst)

# Erstellen, kopieren, verschieben, löschen
mkdir -p path/to/dir     # Verzeichnis + übergeordnete erstellen
cp -r source/ dest/      # rekursiv kopieren
mv oldname newname       # umbenennen oder verschieben
rm -rf directory/        # Verzeichnis und Inhalt löschen (unwiderruflich!)
touch file.txt           # leere Datei erstellen / Zeitstempel aktualisieren

# Dateien anzeigen und navigieren
cat file.txt             # gesamte Datei ausgeben
less file.txt            # seitenweiser Viewer (q zum Beenden, / zum Suchen)
head -n 20 file.txt      # erste 20 Zeilen
tail -n 20 file.txt      # letzte 20 Zeilen
tail -f /var/log/app.log # Log in Echtzeit verfolgen

Dateiberechtigungen

Linux-Berechtigungen werden als drei Sätze von Lese-/Schreib-/Ausführungs-Bits für Eigentümer, Gruppe und andere ausgedrückt:

-rwxr-xr--  1 alice devs  4096 Apr 8 10:00 script.sh

Den Berechtigungsstring lesen: -rwxr-xr--

  • - — Dateityp (d = Verzeichnis, l = Symlink)
  • rwx — Eigentümer: lesen, schreiben, ausführen
  • r-x — Gruppe: lesen, ausführen (kein Schreiben)
  • r-- — andere: nur lesen

chmod — Berechtigungen ändern

# Symbolische Schreibweise
chmod u+x script.sh      # Ausführen für Eigentümer hinzufügen
chmod g-w file.txt       # Schreiben für Gruppe entfernen
chmod o=r file.txt       # andere auf nur lesen setzen
chmod a+r file.txt       # Lesen für alle hinzufügen (a = all)

# Numerische (Oktal-)Schreibweise
chmod 755 script.sh      # rwxr-xr-x (üblich für ausführbare Dateien)
chmod 644 file.txt       # rw-r--r-- (üblich für Dateien)
chmod 600 ~/.ssh/id_rsa  # rw------- (erforderlich für SSH-Schlüssel)
chmod 700 ~/.ssh/        # rwx------ (erforderlich für .ssh-Verzeichnis)

Nutze unseren Chmod Calculator, um Berechtigungsstrings visuell zu erstellen und zu verstehen, was jeder Oktalwert bedeutet.

Suchen und Textverarbeitung

# Dateien suchen
find /var/log -name "*.log"               # nach Name suchen
find . -name "*.ts" -newer package.json   # Dateien neuer als package.json
find . -type f -size +10M                 # Dateien über 10 MB
find . -name "node_modules" -prune        # Verzeichnisse ausschließen

# Dateiinhalte durchsuchen
grep "error" app.log                      # in Datei suchen
grep -r "TODO" ./src                      # rekursive Suche
grep -i "error" app.log                   # Groß-/Kleinschreibung ignorieren
grep -n "error" app.log                   # Zeilennummern anzeigen
grep -v "DEBUG" app.log                   # Zeilen OHNE Übereinstimmung
grep -E "error|warning" app.log           # Regex: error ODER warning

# Stream-Textverarbeitung
cat access.log | grep "404" | wc -l       # 404-Fehler zählen
cat data.csv | cut -d',' -f1,3            # Spalten 1 und 3 extrahieren
cat file.txt | sort | uniq                # sortieren und deduplizieren
cat file.txt | sort | uniq -c | sort -rn  # Vorkommen zählen, nach Häufigkeit sortieren

awk — feldbasierte Verarbeitung

# Bestimmte Felder ausgeben (standardmäßig tabulator-getrennt)
awk '{print $1, $3}' file.txt

# CSV verarbeiten (kommagetrennt)
awk -F',' '{print $2}' data.csv

# Eine Spalte summieren
awk -F',' '{sum += $3} END {print sum}' data.csv

# Zeilen ausgeben, die einem Muster entsprechen
awk '/ERROR/ {print $0}' app.log

sed — Stream-Editor

# Text ersetzen
sed 's/foo/bar/' file.txt          # erstes Vorkommen pro Zeile ersetzen
sed 's/foo/bar/g' file.txt         # alle Vorkommen ersetzen (global)
sed -i 's/foo/bar/g' file.txt      # direkt in der Datei bearbeiten (ändert die Datei)

# Zeilen löschen
sed '/^#/d' file.txt               # Kommentarzeilen löschen
sed '5,10d' file.txt               # Zeilen 5–10 löschen

# Bestimmte Zeilen ausgeben
sed -n '10,20p' file.txt           # Zeilen 10–20 ausgeben

Prozessverwaltung

# Laufende Prozesse anzeigen
ps aux                             # alle Prozesse mit Details
ps aux | grep nginx                # nginx-Prozesse finden
top                                # interaktiver Prozess-Viewer
htop                               # verbesserter interaktiver Viewer (falls installiert)

# Prozesssteuerung
kill PID                           # SIGTERM senden (geordnetes Beenden)
kill -9 PID                        # SIGKILL senden (erzwungenes Beenden)
pkill nginx                        # nach Name beenden
killall node                       # alle übereinstimmenden Prozesse beenden

# Hintergrundjobs
command &                          # im Hintergrund ausführen
jobs                               # Hintergrundjobs auflisten
fg %1                              # Job 1 in den Vordergrund bringen
nohup command &                    # immun gegen Hangup ausführen (überlebt Abmeldung)

# Systemressourcen
free -h                            # Speichernutzung
df -h                              # Festplattenspeichernutzung
du -sh /var/log/                   # Verzeichnisgröße
lsof -i :3000                      # was verwendet Port 3000

Netzwerkbefehle

# Konnektivität
ping google.com                    # Verbindung testen
curl -I https://example.com        # nur HTTP-Header
curl -o file.zip https://example.com/file.zip  # Datei herunterladen
wget https://example.com/file.zip  # alternativer Downloader

# Verbindungen prüfen
ss -tulpn                          # lauschende Ports und Prozesse
netstat -tulpn                     # Alternative (ältere Systeme)
lsof -i :80                        # was läuft auf Port 80

# DNS
dig example.com                    # DNS-Abfrage
dig example.com MX                 # MX-Einträge
host example.com                   # einfache DNS-Abfrage
nslookup example.com               # interaktive DNS-Abfrage

SSH und Remote-Zugriff

# Mit einem Server verbinden
ssh user@server.com
ssh -p 2222 user@server.com        # nicht standardmäßiger Port
ssh -i ~/.ssh/id_rsa user@server.com  # bestimmter Schlüssel

# Dateien kopieren
scp file.txt user@server.com:~/    # ins Remote-Home-Verzeichnis kopieren
scp user@server.com:~/file.txt .   # vom Remote kopieren
scp -r ./dist user@server.com:~/app/  # rekursiv kopieren

# SSH-Tunneling (Port-Weiterleitung)
ssh -L 5432:localhost:5432 user@server.com  # Remote-DB auf lokalen Port tunneln

Generiere SSH-Schlüsselpaare für sichere Authentifizierung mit unserem SSH Key Generator.

Umgebung und Shell

# Umgebungsvariablen
export API_KEY=abc123              # für aktuelle Sitzung und Kindprozesse setzen
echo $API_KEY                      # Variable ausgeben
env                                # alle Umgebungsvariablen auflisten
printenv PATH                      # bestimmte Variable ausgeben
unset API_KEY                      # Variable entfernen

# Shell-Verlauf
history                            # vorherige Befehle auflisten
!!                                 # letzten Befehl wiederholen
!grep                              # letzten grep-Befehl wiederholen
Ctrl+R                             # Verlauf rückwärts durchsuchen (tippen zum Suchen)

# Nützliche Shortcuts
Ctrl+C                             # aktuellen Prozess unterbrechen
Ctrl+Z                             # in den Hintergrund suspendieren
Ctrl+L                             # Bildschirm leeren (wie clear)
Ctrl+A                             # zum Zeilenanfang springen
Ctrl+E                             # zum Zeilenende springen
Ctrl+U                             # Zeile vor dem Cursor löschen

Pipes und Umleitung

# Pipes — Befehle verketten
ls -la | grep ".log" | wc -l

# Ausgabe umleiten
command > file.txt                 # Datei mit stdout überschreiben
command >> file.txt                # stdout an Datei anhängen
command 2> errors.txt              # stderr umleiten
command > all.txt 2>&1             # stdout + stderr in dieselbe Datei umleiten
command &> all.txt                 # Kurzform für das Obige

# /dev/null — Ausgabe verwerfen
command > /dev/null 2>&1           # alle Ausgaben verwerfen (lautlos ausführen)

Nützliche Einzeiler für Entwickler

# In allen Dateien eines Verzeichnisses suchen und ersetzen
find . -name "*.tsx" | xargs sed -i 's/OldComponent/NewComponent/g'

# Öffentliche IP abrufen
curl -s ifconfig.me

# Datei auf Änderungen überwachen
watch -n 2 "ls -la uploads/"

# Verzeichnis komprimieren
tar -czf archive.tar.gz ./directory/

# Eine tar.gz entpacken
tar -xzf archive.tar.gz

# Die 10 größten Dateien im aktuellen Verzeichnis anzeigen
du -sh * | sort -rh | head -10

# Codezeilen nach Dateityp zählen
find . -name "*.ts" | xargs wc -l | sort -rn | head -20

Die Kommandozeile belohnt Investitionen. Jeder Befehl, den man lernt, wird zum Baustein für noch mächtigere Kombinationen. Fange mit Navigation und grep an, füge dann Pipes hinzu, dann awk – und du wirst jede Textverarbeitungsaufgabe bewältigen, die auf dich zukommt.