Nach Dateien und Inhalten suchen mit find und grep
In Linux kann man auf zwei verschiedenen Arten nach Dateien und Inhalten suchen. Wir beschäftigen uns in diesem Artikel mit find und grep.
Entweder lassen sich Dateien nur anhand ihrer Meta-Daten suchen oder anhand des Inhalts. Beides hat seine Vor- und Nachteile, die nachfolgend beleuchtet werden.
find
Mit find kann man Dateien anhand ihrer Meta-Daten suchen. Es lässt sich zum Beispiel nach dem Dateinamen, Größe, Änderungsdatum, Ersteller etc. suchen. Ein Beispiel soll das verdeutlichen:
# Findet alle Konfigurationsdateien im Verzeichnis /etc, unabhängig von Groß-/Kleinschreibung
find /etc -maxdepth 2 -iname "*.conf"
# Sucht im Home-Verzeichnis nach regulären Dateien, die größer als 100 Megabyte sind
find ~ -type f -size +100M
# Listet Logdateien auf, die in den letzten 24 Stunden geändert wurden
find /var/log -type f -name "*.log" -mtime -1
Der find Befehlt eignet sich also ideal, wenn man nach konkreten Eigenschaften von Dateien, wie Namen, Änderungsdatum oder Größe suchen möchte. Wenn man allerdings nach einem bestimmten Inhalt suchen möchte, ist der Befehl nicht geeignet.
grep
Der Befehl grep ist im Gegensatz zu find grundsätzlich anders. Hier wird nach dem Inhalt einer Datei gesucht und nicht anhand der Eigenschaften. Er eignet sich wunderbar, um zum Beispiel nach bestimmten Fehlernachrichten etc. zu suchen. Hier ein Beispiel:
# Durchsucht alle Dateien im aktuellen Verzeichnis nach einem Begriff, ignoriert Groß-/Kleinschreibung
grep -in "error" *.log
# Sucht rekursiv in /etc nach einer IP-Adresse und listet nur Dateinamen auf
grep -rl "192.168.1.1" /etc/
# Schließt Binärdateien aus und filtert nach Zeilen, die mit 'Port' beginnen
grep -In "^Port" /etc/ssh/sshd_config
Die Suche nach konkreten (Teil-)Inhalten ist hiermit sichtlich einfach. Aufpassen sollte man bei großen Verzeichnissen mit vielen Dateien und solchen mit viel Inhalt. Dann kann grep sehr langsam und inperformant werden.
Kombination aus find und grep
Die Vorteile beider Befehle zu vereinbaren, kann man find und grep geschickt kombinieren. Zuerst lassen sich Dateien mithilfe von find filtern und dann sucht grep nur noch in diesen gefilterten Dateien.
Nachfolgend ein Beispiel, um auf einem Webserver nach PHP-Dateien zu suchen, die den Schlüsselbegriff "DB_PASSWORD" enthalten:
# Sucht nach im Ornder /var/www nach PHP-Dateien mit dem Inhalt DB_PASSWORD
find /var/www -type f -name "*.php" | xargs grep -H "DB_PASSWORD"# Alternativ mit -exec
find /var/www -type f -name "*.php" -exec grep -H "DB_PASSWORD" {} +
10.11.2026