Das Finden von Dateien ist eine der häufigsten Aufgaben bei der Server-Administration. Linux bietet mit find und locate zwei mächtige Werkzeuge.

find - Der Alleskönner

Grundsyntax

find [Startverzeichnis] [Optionen] [Aktion]

Nach Name suchen

# Exakter Name
find /var/www -name "index.html"

# Mit Wildcard
find /var/www -name "*.php"
find /home -name "*.log"

# Groß-/Kleinschreibung ignorieren
find /var/www -iname "readme*"

Nach Typ suchen

# Nur Dateien
find /home -type f -name "*.txt"

# Nur Verzeichnisse
find /var -type d -name "log*"

# Nur Symlinks
find /etc -type l

| Typ | Bedeutung | |-----|-----------| | f | Reguläre Datei | | d | Verzeichnis | | l | Symbolischer Link | | b | Block Device | | c | Character Device | | s | Socket |

Nach Größe suchen

# Größer als 100 MB
find /var -size +100M

# Kleiner als 1 KB
find /tmp -size -1k

# Exakt 1 GB
find / -size 1G

# Leere Dateien
find /var/log -empty

| Einheit | Bedeutung | |---------|-----------| | c | Bytes | | k | Kilobytes | | M | Megabytes | | G | Gigabytes |

Nach Zeit suchen

# Modifiziert in letzten 24 Stunden
find /var/log -mtime -1

# Modifiziert vor mehr als 7 Tagen
find /tmp -mtime +7

# Zugegriffen in letzten 30 Minuten
find /var/log -amin -30

# Verändert in letzten 2 Tagen
find /etc -ctime -2

| Option | Bedeutung | |--------|-----------| | -mtime | Modification time (Inhalt) | | -atime | Access time (Zugriff) | | -ctime | Change time (Metadaten) | | -mmin | Wie -mtime, aber in Minuten | | -amin | Wie -atime, aber in Minuten | | -cmin | Wie -ctime, aber in Minuten |

Nach Berechtigungen suchen

# Exakte Berechtigung 777
find /var/www -perm 777

# Mindestens 644
find /var/www -perm -644

# Dateien mit SUID-Bit
find / -perm -4000

# World-writable Dateien
find / -perm -o+w -type f

Nach Besitzer suchen

# Nach Benutzer
find /home -user www-data
find /var -user root

# Nach Gruppe
find /var/www -group www-data

# Dateien ohne Besitzer
find / -nouser

# Dateien ohne Gruppe
find / -nogroup

Kombinationen

UND-Verknüpfung (Standard)

# Dateien UND größer als 10 MB
find /var/log -type f -size +10M

# PHP-Dateien UND modifiziert in letzten 24h
find /var/www -name "*.php" -mtime -1

ODER-Verknüpfung

# PHP oder HTML Dateien
find /var/www \( -name "*.php" -o -name "*.html" \)

# Bilder
find /var/www \( -name "*.jpg" -o -name "*.png" -o -name "*.gif" \)

NICHT

# Alles außer .git Verzeichnisse
find /project -type d -not -name ".git"

# Dateien, aber nicht *.log
find /var -type f -not -name "*.log"

Aktionen

find /var/www -name "*.php" -print

-exec (Befehl ausführen)

# Berechtigungen ändern
find /var/www -type f -exec chmod 644 {} \;

# Besitzer ändern
find /var/www -type d -exec chown www-data:www-data {} \;

# Dateien löschen (Vorsicht!)
find /tmp -type f -mtime +30 -exec rm {} \;

# Effizienter mit +
find /tmp -type f -mtime +30 -exec rm {} +

Der Unterschied:

  • \; = Ein Befehl pro Datei
  • + = Alle Dateien an einen Befehl

-delete (Löschen)

# Direkt löschen (schneller als -exec rm)
find /tmp -type f -name "*.tmp" -delete

# Erst testen ohne -delete!
find /tmp -type f -name "*.tmp"

-print0 und xargs

# Sichere Verarbeitung (auch bei Leerzeichen in Namen)
find /var/www -name "*.php" -print0 | xargs -0 grep "password"

-printf (Formatierte Ausgabe)

# Pfad und Größe
find /var/log -type f -printf "%p %s\n"

# Pfad und Modifikationszeit
find /var/log -type f -printf "%p %T+\n"

Praktische Beispiele

Große Dateien finden

find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -h

Alte Logfiles löschen

# Erst anzeigen
find /var/log -name "*.log" -mtime +30

# Dann löschen
find /var/log -name "*.log" -mtime +30 -delete

PHP-Dateien mit bestimmtem Inhalt

find /var/www -name "*.php" -exec grep -l "eval(" {} \;
find /usr -xtype l

Kürzlich geänderte Konfigurationsdateien

find /etc -type f -mtime -7 -name "*.conf"

Dateien mit falschen Berechtigungen

# World-writable Dateien (Sicherheitsrisiko)
find / -type f -perm -0002 -ls 2>/dev/null

# SUID-Dateien
find / -perm -4000 -type f -ls 2>/dev/null

Speicherplatz nach Verzeichnis

find / -maxdepth 1 -type d -exec du -sh {} \; 2>/dev/null | sort -h

locate - Die schnelle Alternative

Funktionsweise

locate durchsucht eine Datenbank, nicht das Dateisystem direkt.

# Installation
apt install mlocate   # Debian/Ubuntu
dnf install mlocate   # Fedora/RHEL

Datenbank aktualisieren

# Manuell aktualisieren
sudo updatedb

# Automatisch via Cron (meist schon eingerichtet)
cat /etc/cron.daily/mlocate

Einfache Suche

# Nach Name
locate nginx.conf

# Groß-/Kleinschreibung ignorieren
locate -i README

# Nur existierende Dateien
locate -e nginx.conf

# Anzahl der Ergebnisse begrenzen
locate -l 10 "*.php"

Mit Regex

locate -r "\.php$"
locate -r "/etc/.*\.conf$"

find vs. locate

| Eigenschaft | find | locate | |-------------|------|--------| | Geschwindigkeit | Langsam (sucht live) | Sehr schnell (Datenbank) | | Aktualität | Immer aktuell | Datenbank kann veraltet sein | | Optionen | Sehr viele | Begrenzt | | Aktionen | Ja (-exec, -delete) | Nein | | Komplexe Suche | Ja | Begrenzt |

Wann was verwenden?

find:

  • Komplexe Suchen (Größe, Zeit, Rechte)
  • Aktionen auf gefundene Dateien
  • Garantiert aktuelle Ergebnisse
  • Suche in spezifischem Verzeichnis

locate:

  • Schnelle Suche nach Dateinamen
  • Konfigurationsdateien finden
  • Wenn Geschwindigkeit wichtiger als Aktualität

which, whereis, type

which - Ausführbare Programme finden

which nginx
# /usr/sbin/nginx

which -a python
# Zeigt alle im PATH

whereis - Binaries, Source und Manpages

whereis nginx
# nginx: /usr/sbin/nginx /etc/nginx /usr/share/nginx ...

type - Shell-Builtin oder Alias?

type cd
# cd is a shell builtin

type ls
# ls is aliased to `ls --color=auto'

Zusammenfassung

| Aufgabe | Befehl | |---------|--------| | Datei nach Name | find /path -name "file" | | Schnelle Suche | locate filename | | Große Dateien | find / -size +100M | | Alte Dateien | find /tmp -mtime +30 | | Mit Aktion | find /path -exec cmd {} \; | | Programm finden | which program |

Fazit

find ist das Schweizer Taschenmesser für Dateisuchen unter Linux – mächtig, aber langsamer. locate ist perfekt für schnelle Suchen nach Dateinamen, wenn Aktualität nicht kritisch ist. Für Administratoren sind beide unverzichtbar. Lernen Sie die wichtigsten find-Optionen auswendig – sie sparen enorm Zeit bei der täglichen Arbeit.