linux-cli-shell cli file-management find locate search

Find & Locate: File Searching (Artikel 257)

Beherrschung der Dateisuche unter Linux. Erfahren Sie den Unterschied zwischen Echtzeitsuche via find und Datenbank-Indizierung via locate sowie die Automatisierung von Dateimanagement.

# Find & Locate Mastery: Dateien finden, nicht suchen

TL;DR / Management Summary Wer in einem System mit Millionen von Dateien den Überblick behalten will, braucht zwei Werkzeuge: locate für die blitzschnelle Suche in einer Datenbank (Indizierung) und find für die mächtige Echtzeit-Suche nach komplexen Kriterien (Größe, Alter, Berechtigungen). Ein Senior Admin nutzt find zudem als Pipeline-Starter, um z.B. alle Logfiles älter als 30 Tage automatisch zu löschen oder zu komprimieren.


# 1. Einführung & Architektur

Index vs. Echtzeit.

  • locate: Liest aus einer Datenbank (/var/lib/mlocate/). Extrem schnell, aber sieht keine Dateien, die erst vor 5 Minuten erstellt wurden.
  • find: Durchsucht das echte Dateisystem. Langsamer bei großen Platten, aber hochpräzise und aktuell.

# Die Such-Strategie (Mermaid)

graph TD
    A[Search Goal] --> B{Is it a known system file?}
    B -->|Yes| C[locate: Search DB]
    B -->|No / Recent| D[find: Real-time scan]
    D --> E[Filter: Name / Regex]
    D --> F[Filter: Time -mtime]
    D --> G[Filter: Size -size]
    D --> H[Action: -exec / -delete]

# 2. locate: Die Schnellsuche

Für den Alltag.

Stellen Sie sicher, dass der Index aktuell ist:

sudo updatedb

# Suche

# Finde alle nginx.conf Dateien im System
locate nginx.conf

# 3. find: Das Kraftpaket

Suchen mit Logik.

# Nach Name und Typ

# Suche Verzeichnisse mit 'backup' im Namen
find / -type d -name "*backup*"

# Nach Alter (Maintenance)

Ideal für das Aufräumen von Logs.

# Finde Dateien, die älter als 30 Tage sind
find /var/log -mtime +30

# Nach Größe

# Finde alle Dateien größer als 100MB
find /data -size +100M

# 4. Day-2 Operations: Aktionen automatisieren

Suchen und Handeln.

Nutzen Sie -exec, um einen Befehl auf jedes Ergebnis anzuwenden.

# Beispiel: Alte Logs komprimieren

find /var/log -name "*.log" -mtime +7 -exec gzip {} \;
  • {}: Platzhalter für die gefundene Datei.
  • \;: Beendet das Exec-Kommando.

# 5. Troubleshooting & “War Stories”

Wenn find das System stresst.

# Story 1: “Der I/O-Killer”

Symptom: Der Server wird plötzlich extrem langsam, die Disk-Latency schießt hoch. Ursache: Ein Cronjob führt find / -name ... auf einem riesigen NFS-Share oder einer langsamen HDD aus. Lösung: Nutzen Sie -maxdepth, um die Suche einzuschränken, oder nutzen Sie -mount / -xdev, um zu verhindern, dass find andere Dateisysteme (NFS, USB) durchsucht.

# Story 2: “Das Dateinamen-Chaos (Leerzeichen)”

Symptom: find ... -exec rm {} \; schlägt bei Dateien mit Leerzeichen fehl. Ursache: Die Shell zerlegt den Dateinamen falsch. Lösung: Nutzen Sie -print0 zusammen mit xargs -0 (siehe Artikel 258) für maximale Sicherheit bei Sonderzeichen.


# 6. Fazit & Empfehlung

  • locate: Nutzen Sie es für die Suche nach Programmen oder statischen Konfigurationen.
  • find: Nutzen Sie es für alle Wartungsaufgaben (Cleanup, Permissions-Fixing).
  • Wahl: Nutzen Sie fd (fd-find) als moderne, deutlich schnellere Alternative zu find auf Ihrem Admin-Laptop.

# Anhang: Cheatsheet

Aufgabe Befehl
Name suchen (ignore case) find . -iname "*test*"
Nur Dateien find . -type f
Nur Verzeichnisse find . -type d
Leere Dateien finden find . -empty
Berechtigungen prüfen find . -perm 777
User zuordnen find . -user root
Dateien löschen find . -name "*.tmp" -delete
Suche begrenzen find . -maxdepth 2
DB aktualisieren sudo updatedb