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
findzudem 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 zufindauf 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 |