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 fNach 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 / -nogroupKombinationen
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 -1ODER-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
-print (Standard)
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 -hAlte Logfiles löschen
# Erst anzeigen
find /var/log -name "*.log" -mtime +30
# Dann löschen
find /var/log -name "*.log" -mtime +30 -deletePHP-Dateien mit bestimmtem Inhalt
find /var/www -name "*.php" -exec grep -l "eval(" {} \;Defekte Symlinks finden
find /usr -xtype lKü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/nullSpeicherplatz nach Verzeichnis
find / -maxdepth 1 -type d -exec du -sh {} \; 2>/dev/null | sort -hlocate - Die schnelle Alternative
Funktionsweise
locate durchsucht eine Datenbank, nicht das Dateisystem direkt.
# Installation
apt install mlocate # Debian/Ubuntu
dnf install mlocate # Fedora/RHELDatenbank aktualisieren
# Manuell aktualisieren
sudo updatedb
# Automatisch via Cron (meist schon eingerichtet)
cat /etc/cron.daily/mlocateEinfache 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 PATHwhereis - 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.