Linux Tools 2025

10. Juni 2025

Dieser Blogeintrag ist aufgrund des YouTube-Videos von NetworkChuck entstanden. Da ich einige der Befehle noch nicht kannte, hier eine kurze Zusammenfassung der Befehle, die ich am spannendsten fand.

ripgrep

ripgrep (rg) ist ein extrem schnelles Kommandozeilen-Tool zum Durchsuchen von Text in Dateien und Verzeichnissen. Es ist deutlich schneller als grep und hat viele nützliche Features.

Grundlegende Syntax

rg "suchbegriff" [pfad]

Praktische Beispiele

Einfache Suche:

# Sucht "function" in allen Dateien im aktuellen Verzeichnis
rg "function"

Suche in bestimmtem Verzeichnis:

# Sucht "TODO" nur im src/ Verzeichnis
rg "TODO" src/

Case-insensitive Suche:

# Findet "Error", "ERROR", "error" etc.
rg -i "error"

Nur bestimmte Dateitypen:

# Sucht nur in Python-Dateien
rg -t py "import"

# Sucht nur in JavaScript-Dateien
rg -t js "console.log"

Reguläre Ausdrücke:

# Sucht Telefonnummern im Format 123-456-7890
rg "\d{3}-\d{3}-\d{4}"

# Sucht Zeilen, die mit "class" beginnen
rg "^class \w+"

Mit Zeilennummern:

# Zeigt Zeilennummern an
rg -n "function"

Bestimmte Dateien ausschließen:

# Sucht "error", aber ignoriert .log Dateien
rg "error" --glob "!*.log"

Kontext anzeigen:

# Zeigt 3 Zeilen nach und 2 Zeilen vor jedem Treffer
rg -A 3 -B 2 "error"

Rekursiv mit Tiefenbegrenzung:

# Sucht nur bis zu 2 Verzeichnisebenen tief
rg --max-depth 2 "function"

ripgrep ignoriert automatisch .gitignore-Dateien und binäre Dateien, was es sehr praktisch für die Entwicklung macht.

mtr

mtr (My Traceroute) ist ein Netzwerk-Diagnosetool für Linux, das die Funktionen von ping und traceroute kombiniert. Es zeigt dir in Echtzeit den Pfad, den Datenpakete zu einem Zielhost nehmen, und misst dabei kontinuierlich die Latenz und Paketverluste für jeden Hop.

Funktionsweise

mtr sendet kontinuierlich ICMP-Pakete (oder UDP) mit ansteigenden TTL-Werten und zeigt für jeden Router/Hop auf dem Weg:

  • Hostname/IP-Adresse
  • Paketverluste in Prozent
  • Anzahl gesendeter Pakete
  • Letzte, beste, durchschnittliche und schlechteste Ping-Zeit
  • Standardabweichung

Beispiele

Grundlegende Verwendung:

mtr google.com

Mit fester Anzahl von Paketen (nicht-interaktiv):

mtr -c 10 8.8.8.8

Report-Modus für Scripts:

mtr --report --report-cycles 5 heise.de

Nur IPv4 verwenden:

mtr -4 cloudflare.com

UDP statt ICMP verwenden:

mtr --udp stackoverflow.com

Ohne Hostname-Auflösung (nur IPs):

mtr -n reddit.com

Mit größeren Paketen testen:

mtr -s 1000 github.com

fd

fd ist ein moderner, schneller und benutzerfreundlicher Ersatz für das klassische find-Kommando unter Linux. Es wurde in Rust geschrieben und bietet eine intuitivere Syntax sowie bessere Performance.

Grundlegende Funktionsweise

fd durchsucht rekursiv Verzeichnisse nach Dateien und Ordnern basierend auf Patterns. Standardmäßig verwendet es Regular Expressions und ignoriert automatisch .git-Verzeichnisse und Dateien aus .gitignore.

Praktische Beispiele

Einfache Dateisuche:

# Alle Dateien mit "config" im Namen finden
fd config

# Alle .txt Dateien finden
fd '\.txt$'

# Oder einfacher mit der -e Option
fd -e txt

Suche in bestimmten Verzeichnissen:

# Nur in /home/user/documents suchen
fd pattern /home/user/documents

# In mehreren Verzeichnissen gleichzeitig
fd pattern /home /opt

Verschiedene Suchtypen:

# Nur Dateien (keine Verzeichnisse)
fd -t f pattern

# Nur Verzeichnisse
fd -t d pattern

# Auch versteckte Dateien einbeziehen
fd -H pattern

# Case-insensitive Suche
fd -i PATTERN

Erweiterte Beispiele:

# Alle Python-Dateien, die größer als 1MB sind
fd -e py -S +1M

# Dateien, die in den letzten 7 Tagen geändert wurden
fd -t f --changed-within 7d

# Ausführen von Kommandos auf gefundene Dateien
fd -e jpg -x convert {} {.}_resized.jpg

# Mehrere Dateierweiterungen
fd -e cpp -e hpp -e c -e h

Nützliche Optionen:

# Absolute Pfade anzeigen
fd -a pattern

# Maximale Suchtiefe begrenzen
fd -d 3 pattern

# Exclude-Pattern verwenden
fd -E node_modules pattern

# Null-terminierte Ausgabe (gut für xargs)
fd -0 pattern

Die Syntax ist deutlich einfacher als bei find, und fd ist oft 2-10x schneller, besonders bei großen Verzeichnisbäumen.

lsof

Der lsof Befehl steht für „list open files“ und zeigt dir alle geöffneten Dateien und die Prozesse an, die sie verwenden. In Linux ist praktisch alles eine Datei – reguläre Dateien, Verzeichnisse, Netzwerk-Sockets, Pipes, etc.

Hier sind einige praktische Beispiele:

Grundlegende Verwendung:

lsof

Zeigt alle offenen Dateien aller Prozesse an (sehr lange Liste!)

Nach Prozess filtern:

# Zeigt alle offenen Dateien des Prozesses mit PID 1234
lsof -p 1234

# Zeigt alle offenen Dateien von Prozessen, deren Name mit "firefox" beginnt
lsof -c firefox

Nach Datei oder Verzeichnis:

# Zeigt welche Prozesse auf diese spezifische Datei zugreifen
lsof /var/log/syslog
# Zeigt alle offenen Dateien im Verzeichnis /home/user (rekursiv)
lsof +D /home/user

Netzwerk-Verbindungen:

# Zeigt alle Netzwerk-Verbindungen
lsof -i

# Zeigt welche Prozesse auf Port 80 lauschen oder verbunden sind
lsof -i :80
# Zeigt TCP-Verbindungen auf Port 22 (SSH)
lsof -i TCP:22

Nach Benutzer:

# Zeigt alle offenen Dateien des Benutzers "username"
lsof -u username

Der lsof Befehl ist extrem hilfreich beim Debugging, um herauszufinden welche Prozesse bestimmte Dateien blockieren oder welche Ports verwendet werden.

jq

jq ist ein leistungsstarkes Command-Line-Tool für Linux, um JSON-Daten zu verarbeiten, zu filtern und zu transformieren. Es ist wie eine Schweizer Armee-Messer für JSON-Manipulation.

Hier sind einige praktische Beispiele:

Grundlegende Verwendung:

# JSON schön formatieren
echo '{"name":"Max","age":30}' | jq '.'

# Bestimmte Felder extrahieren
echo '{"name":"Max","age":30,"city":"Berlin"}' | jq '.name'
# Output: "Max"

Mit Arrays arbeiten:

# Alle Namen aus einem Array extrahieren
echo '[{"name":"Max","age":30},{"name":"Anna","age":25}]' | jq '.[].name'

# Erstes Element eines Arrays
echo '[{"name":"Max"},{"name":"Anna"}]' | jq '.[0]'

# Array-Länge
echo '[1,2,3,4,5]' | jq 'length'

Filtern:

# Objekte nach Bedingung filtern
echo '[{"name":"Max","age":30},{"name":"Anna","age":25}]' | jq '.[] | select(.age > 27)'

# Nur bestimmte Keys behalten
echo '{"name":"Max","age":30,"password":"secret"}' | jq '{name, age}'

Praktische Anwendungen:

# API-Response verarbeiten
curl -s https://api.github.com/users/octocat | jq '.name, .public_repos'

# Nested JSON navigieren
echo '{"user":{"profile":{"name":"Max"}}}' | jq '.user.profile.name'

# JSON zu CSV-ähnlichem Format
echo '[{"name":"Max","age":30},{"name":"Anna","age":25}]' | jq -r '.[] | "\(.name),\(.age)"'

jq ist besonders nützlich beim Debugging von APIs, beim Verarbeiten von Konfigurationsdateien oder beim Extrahieren spezifischer Daten aus komplexen JSON-Strukturen.