Linux Administration

Linux-Befehl find: Dateien und Verzeichnisse gezielt suchen

Mit find lassen sich unter Linux Dateien und Verzeichnisse weit präziser suchen als nur nach ihrem Namen. Der Befehl filtert nach Größe, Alter, Besitzer, Gruppe oder Berechtigungen und kann gefundene Dateien direkt weiterverarbeiten. Dieser Beitrag zeigt die wichtigsten Optionen, praktische Administrator-Beispiele und hilfreiche Security-Checks.

14 min Lesezeit
Grafik: Linux find - Dateien und Verzeichnisse finden

Wer unter Linux eine bestimmte Datei sucht, landet früher oder später beim Befehl find. Doch find ist weit mehr als eine einfache Dateisuche. Das Werkzeug kann Dateien und Verzeichnisse nach Namen, Größe, Alter, Besitzer, Gruppe, Berechtigungen und zahlreichen weiteren Eigenschaften filtern. Darüber hinaus lassen sich auf gefundene Objekte unmittelbar Aktionen ausführen.

Damit gehört find zu den leistungsfähigsten Werkzeugen der klassischen Linux-Kommandozeile.

Ob eine mehrere Gigabyte große Datei gesucht, ein Verzeichnis nach alten Backups durchsucht, Dateien eines bestimmten Benutzers gefunden oder problematische Berechtigungen kontrolliert werden sollen – find ist für viele dieser Aufgaben das passende Werkzeug.

In diesem Beitrag schauen wir uns den Linux-Befehl von den Grundlagen bis zu fortgeschrittenen Praxis- und Security-Beispielen an.

Was ist find?

find durchsucht einen oder mehrere Verzeichnisbäume und prüft die gefundenen Objekte anhand vorgegebener Kriterien.

Die grundlegende Syntax sieht vereinfacht folgendermaßen aus:

find STARTPFAD KRITERIEN AKTIONEN

Ein einfaches Beispiel:

find /home -name "dokument.txt"

Damit wird unterhalb von /home nach Objekten mit dem Namen dokument.txt gesucht.

Der große Vorteil besteht darin, dass sich die Kriterien nahezu beliebig kombinieren lassen.

So kann beispielsweise nach:

  • Namen
  • Dateitypen
  • Dateigrößen
  • Änderungszeiten
  • Besitzern
  • Gruppen
  • Berechtigungen
  • leeren Dateien
  • symbolischen Links

gesucht werden.

Ist find bereits installiert?

Auf praktisch allen üblichen Linux-Distributionen gehört find zur Grundausstattung.

Unter GNU/Linux ist der Befehl üblicherweise Bestandteil der GNU Findutils.

Ob find verfügbar ist, lässt sich prüfen mit:

command -v find

Die installierte Version kann beispielsweise angezeigt werden mit:

find --version

Die ausführliche Dokumentation befindet sich in der Manpage:

man find

Im aktuellen Verzeichnis suchen

Als Startpunkt kann ein Punkt verwendet werden:

find .

Der Punkt steht für das aktuelle Verzeichnis.

find listet dabei den Verzeichnisbaum ab der aktuellen Position auf.

In der Praxis werden fast immer zusätzliche Bedingungen verwendet.

Nach einem Dateinamen suchen

Ein typischer Anwendungsfall ist die Suche nach einer bestimmten Datei:

find /home -name "rechnung.pdf"

Dabei wird die Groß- und Kleinschreibung berücksichtigt.

rechnung.pdf und Rechnung.pdf sind für diese Suche unterschiedliche Namen.

Groß- und Kleinschreibung ignorieren

Soll die Schreibweise keine Rolle spielen, kann -iname verwendet werden:

find /home -iname "rechnung.pdf"

Damit können beispielsweise auch Varianten wie:

Rechnung.pdf
RECHNUNG.PDF
rechnung.pdf

gefunden werden.

Wildcards verwenden

Besonders leistungsfähig wird die Namenssuche mit Wildcards.

Alle PDF-Dateien finden:

find /home -type f -name "*.pdf"

Alle Logdateien:

find /var/log -type f -name "*.log"

Alle Dateien, deren Name mit backup beginnt:

find /srv -type f -name "backup*"

Die Anführungszeichen sind wichtig. Ohne sie könnte bereits die Shell das Muster expandieren, bevor find es verarbeitet.

Nur nach Dateien suchen

Mit:

-type f

wird die Suche auf reguläre Dateien beschränkt.

Beispielsweise:

find /home -type f -name "*.txt"

Damit werden nur reguläre Dateien mit der Endung .txt berücksichtigt.

Nur Verzeichnisse suchen

Für Verzeichnisse wird verwendet:

-type d

Beispielsweise:

find /var -type d -name "cache"

Damit werden Verzeichnisse namens cache gesucht.

Symbolische Links finden

Symbolische Links besitzen den Typ l:

find /usr/local -type l

Das kann bei der Systemanalyse oder Migration hilfreich sein.

Leere Dateien finden

Mit -empty lassen sich leere Dateien und Verzeichnisse finden.

Nur leere Dateien:

find /srv -type f -empty

Nur leere Verzeichnisse:

find /srv -type d -empty

Das ist beispielsweise beim Aufräumen von Import-, Export- oder Arbeitsverzeichnissen praktisch.

Dateien nach Größe suchen

find kann Dateien anhand ihrer Größe auswählen.

Beispielsweise alle Dateien größer als 100 Megabyte:

find /var -type f -size +100M

Alle Dateien größer als ein Gigabyte:

find / -type f -size +1G

Da beim Durchsuchen des gesamten Systems viele Zugriffsfehler auftreten können, wird häufig Folgendes verwendet:

sudo find / -type f -size +1G

Wer Fehlermeldungen ausblenden möchte, sieht häufig:

find / -type f -size +1G 2>/dev/null

Dabei werden Meldungen auf dem Fehlerkanal nach /dev/null umgeleitet.

Das macht die Ausgabe übersichtlicher, kann aber auch relevante Fehler verbergen. Bei administrativen Analysen sollte man deshalb bewusst entscheiden, ob Fehlermeldungen wirklich unterdrückt werden sollen.

Dateien innerhalb eines Größenbereichs finden

Kriterien können kombiniert werden.

Beispielsweise Dateien größer als 100 MB und kleiner als 1 GB:

find /srv -type f -size +100M -size -1G

Beide Bedingungen müssen erfüllt sein.

Große Dateien auf einem Server aufspüren

Ein praktischer Diagnosebefehl lautet:

sudo find /var -type f -size +500M

Damit lassen sich große Dateien unterhalb von /var finden.

Interessante Kandidaten sind häufig:

  • Logdateien
  • Datenbankdateien
  • Cache-Dateien
  • Dumps
  • Backups
  • temporäre Dateien

find zeigt allerdings zunächst nur die passenden Dateien an. Für eine übersichtlichere Größenanzeige kann anschließend beispielsweise du verwendet werden.

Nach Änderungszeit suchen

Eine der wichtigsten Funktionen von find ist die Suche anhand von Zeitstempeln.

Mit -mtime wird die Änderungszeit des Dateiinhalts betrachtet.

Beispielsweise:

find /srv/backup -type f -mtime +30

Damit werden Dateien gesucht, deren Änderungszeit entsprechend der find-Zeitberechnung mehr als 30 Tage zurückliegt.

Bei Tagesangaben arbeitet GNU find mit 24-Stunden-Blöcken. Dadurch können Grenzfälle zunächst überraschend wirken.

In den letzten 24 Stunden geänderte Dateien

Dafür kann verwendet werden:

find /var/www -type f -mtime -1

Das ist beispielsweise hilfreich, wenn nachvollzogen werden soll, welche Dateien einer Webanwendung kürzlich verändert wurden.

Minutengenaue Suche

Für kürzere Zeiträume eignet sich -mmin.

Dateien finden, die innerhalb der letzten 60 Minuten geändert wurden:

find /var/www -type f -mmin -60

Das ist bei Troubleshooting und Incident Response häufig praktischer als -mtime.

mtime, ctime und atime

Bei den Zeitangaben sollte zwischen verschiedenen Zeitstempeln unterschieden werden.

mtime

mtime steht für die Änderung des Dateiinhalts.

Beispiel:

find /srv -type f -mtime -7

ctime

ctime bezeichnet unter Linux die Änderung des Inodes beziehungsweise der Dateimetadaten. Sie kann sich beispielsweise ändern, wenn Berechtigungen oder Besitzverhältnisse verändert werden.

find /srv -type f -ctime -7

ctime ist nicht die klassische Erstellungszeit einer Datei.

atime

atime bezeichnet die letzte Zugriffszeit:

find /srv -type f -atime -7

Dabei ist zu beachten, dass moderne Dateisysteme und Mount-Optionen wie relatime oder noatime beeinflussen können, wann Zugriffszeiten aktualisiert werden.

Dateien neuer als eine Referenzdatei finden

Sehr praktisch ist -newer.

Beispielsweise:

find /var/www -type f -newer referenz.txt

Damit werden Dateien gefunden, deren Änderungszeit neuer als die der Referenzdatei ist.

Das kann bei Deployments, Backups oder Fehleranalysen hilfreich sein.

Nach Besitzer suchen

Alle Dateien eines bestimmten Benutzers lassen sich mit -user finden:

find /home -user max

Nur reguläre Dateien:

find /home -type f -user max

Das ist beispielsweise bei Benutzerwechseln, Migrationen oder der Bereinigung alter Accounts hilfreich.

Nach Gruppe suchen

Analog funktioniert -group:

find /srv -group www-data

Oder nur Dateien:

find /srv -type f -group www-data

Nach UID oder GID suchen

Auch numerische IDs können verwendet werden.

Nach UID:

find /srv -uid 1001

Nach GID:

find /srv -gid 1001

Das kann nach Migrationen besonders nützlich sein, wenn Dateien einer UID gehören, für die auf dem neuen System möglicherweise kein passender Benutzername existiert.

Dateien ohne gültigen Besitzer finden

Nach Migrationen oder dem Löschen von Benutzerkonten können Dateien zurückbleiben, deren UID keinem bekannten Benutzer mehr zugeordnet ist.

Solche Dateien lassen sich finden mit:

find / -nouser

Analog können Dateien ohne bekannte Gruppe gesucht werden:

find / -nogroup

Auf Servern kann dies ein interessanter Administrations- und Security-Check sein.

Nach Berechtigungen suchen

Mit -perm kann find Dateien anhand ihrer Unix-Berechtigungen auswählen.

Beispielsweise:

find /srv -type f -perm 0644

Damit werden Dateien gesucht, deren Berechtigungsbits genau dem angegebenen Modus entsprechen.

Besonders interessant wird -perm bei Sicherheitsprüfungen.

Weltweit beschreibbare Dateien finden

Auf gemeinsam verwendeten oder sicherheitskritischen Systemen können für alle Benutzer beschreibbare Dateien problematisch sein.

Beispielsweise:

find /srv -type f -perm -0002

Damit werden reguläre Dateien gesucht, bei denen das Schreibrecht für „others“ gesetzt ist.

Für Verzeichnisse:

find /srv -type d -perm -0002

Ob eine solche Berechtigung tatsächlich problematisch ist, hängt vom Verwendungszweck ab. Bei gemeinsam genutzten Verzeichnissen können besondere Berechtigungskonzepte einschließlich Sticky Bit vorgesehen sein.

SUID-Dateien finden

Das SUID-Bit ist aus Security-Sicht besonders interessant.

Systemweit kann beispielsweise gesucht werden mit:

sudo find / -type f -perm -4000

Damit werden Dateien gefunden, bei denen das SUID-Bit gesetzt ist.

SUID ist nicht grundsätzlich verdächtig. Einige Systemprogramme benötigen diesen Mechanismus für bestimmte Funktionen.

Unerwartete SUID-Dateien sollten jedoch untersucht werden.

SGID-Dateien finden

Analog lässt sich nach dem SGID-Bit suchen:

sudo find / -type f -perm -2000

Für Security-Audits können beide Prüfungen wichtige Hinweise liefern.

SUID und SGID gemeinsam suchen

Beide Bedingungen lassen sich mit einer ODER-Verknüpfung kombinieren:

sudo find / -type f \( -perm -4000 -o -perm -2000 \)

Die Klammern werden mit Backslashes geschützt, damit sie von der Shell nicht interpretiert werden.

Bedingungen bei find kombinieren

Mehrere direkt hintereinander angegebene Bedingungen werden standardmäßig mit einem logischen UND verknüpft.

Beispielsweise:

find /var/log -type f -name "*.log" -size +100M

Die Datei muss also:

  • eine reguläre Datei sein,
  • auf .log enden,
  • größer als 100 MB sein.

ODER-Verknüpfungen

Mit -o kann eine ODER-Bedingung aufgebaut werden.

Beispielsweise:

find /srv \( -name "*.jpg" -o -name "*.png" \)

Damit werden Objekte mit .jpg oder .png gefunden.

Bei komplexeren Ausdrücken sind Klammern besonders wichtig, da Operatorprioritäten sonst zu unerwarteten Ergebnissen führen können.

Bedingungen negieren

Mit ! kann eine Bedingung negiert werden.

Beispielsweise:

find /srv -type f ! -name "*.log"

Damit werden reguläre Dateien gesucht, deren Name nicht auf .log endet.

Alternativ existiert bei GNU find auch -not.

Suchtiefe mit maxdepth begrenzen

Standardmäßig durchsucht find den gesamten Verzeichnisbaum unterhalb des Startpunkts.

Mit -maxdepth lässt sich die maximale Tiefe festlegen:

find /var -maxdepth 2 -type f

Das ist hilfreich, wenn nur die ersten Ebenen eines großen Verzeichnisbaums relevant sind.

Mindesttiefe festlegen

Mit -mindepth kann der Startpunkt von bestimmten Aktionen ausgeschlossen werden.

Beispielsweise:

find /srv/temp -mindepth 1 -type f

Dies kann insbesondere bei Löschoperationen wichtig sein.

Verzeichnisse von der Suche ausschließen

Mit -prune können bestimmte Verzeichnisbäume übersprungen werden.

Ein klassisches Muster lautet beispielsweise:

find /srv -path "/srv/backup" -prune -o -type f -print

Damit wird /srv/backup nicht durchsucht, während andere reguläre Dateien unterhalb von /srv ausgegeben werden.

-prune gehört zu den Funktionen, bei denen die logische Auswertung von find wichtig ist. Komplexere Konstruktionen sollten deshalb zunächst mit ungefährlichen Ausgaben getestet werden.

Ergebnisse explizit ausgeben

In vielen Fällen gibt find passende Ergebnisse automatisch aus. Dennoch kann -print explizit verwendet werden:

find /srv -type f -name "*.conf" -print

Für die sichere Weiterverarbeitung problematischer Dateinamen gibt es außerdem:

-print0

Dabei werden die Ergebnisse mit Nullzeichen statt Zeilenumbrüchen getrennt.

Das ist wichtig bei Dateinamen mit Leerzeichen, Zeilenumbrüchen oder anderen Sonderzeichen.

find mit xargs kombinieren

Eine typische Kombination lautet:

find /srv -type f -name "*.log" -print0 | xargs -0 ls -l

Durch -print0 und xargs -0 werden auch ungewöhnliche Dateinamen robust verarbeitet.

Für viele Aufgaben ist allerdings -exec direkt innerhalb von find eine ebenso gute oder bessere Lösung.

Befehle mit -exec ausführen

find kann für jedes gefundene Objekt einen anderen Befehl ausführen.

Beispielsweise:

find /srv -type f -name "*.log" -exec ls -lh {} \;

{} steht dabei für den jeweiligen gefundenen Pfad.

\; beendet die -exec-Anweisung.

Mehrere Dateien gemeinsam übergeben

Effizienter kann folgende Variante sein:

find /srv -type f -name "*.log" -exec ls -lh {} +

Das + bewirkt, dass möglichst mehrere gefundene Pfade gemeinsam an den aufgerufenen Befehl übergeben werden.

Das reduziert die Anzahl der gestarteten Prozesse und kann bei großen Ergebnismengen deutlich effizienter sein.

Besitzverhältnisse gezielt korrigieren

find lässt sich beispielsweise mit chown kombinieren.

Angenommen, alle .log-Dateien innerhalb eines Anwendungsverzeichnisses sollen einem bestimmten Benutzer und einer Gruppe gehören:

find /srv/anwendung -type f -name "*.log" -exec chown appuser:appgroup {} +

Bei solchen Operationen sollte die Suchbedingung zunächst ohne -exec getestet werden:

find /srv/anwendung -type f -name "*.log"

Erst wenn die Treffer korrekt sind, sollte die Änderung erfolgen.

Dateien löschen

find unterstützt die Aktion -delete.

Beispielsweise:

find /srv/temp -type f -name "*.tmp" -delete

Dieser Befehl löscht passende Dateien unmittelbar.

Hier ist höchste Vorsicht angebracht.

Vorher sollte immer zunächst geprüft werden, welche Dateien betroffen wären:

find /srv/temp -type f -name "*.tmp" -print

Erst nach erfolgreicher Kontrolle sollte -delete verwendet werden.

Alte Dateien löschen

Ein typisches Beispiel aus der Praxis:

find /srv/backup -type f -mtime +30 -delete

Damit könnten ältere Dateien automatisch entfernt werden.

Bevor ein solcher Befehl in Cronjobs oder Skripten eingesetzt wird, sollte exakt geprüft werden:

  • Ist der Startpfad korrekt?
  • Sind nur die gewünschten Dateien enthalten?
  • Ist die Altersbedingung richtig verstanden?
  • Gibt es Unterverzeichnisse, die ausgeschlossen werden müssen?
  • Existiert eine Backup- oder Wiederherstellungsstrategie?

Automatisches Löschen sollte niemals ungeprüft eingerichtet werden.

Vor dem Löschen nachfragen

Für interaktive Aktionen kann -ok anstelle von -exec verwendet werden.

Beispielsweise:

find /srv/temp -type f -name "*.tmp" -ok rm {} \;

Dabei wird vor der Ausführung nach einer Bestätigung gefragt.

Für manuelle Aufräumarbeiten kann das eine zusätzliche Sicherheit bieten.

Alte Logdateien finden

Ein typischer Administrationsfall:

find /var/log -type f -name "*.log" -mtime +30

Damit werden entsprechende ältere Logdateien gefunden.

Das bedeutet jedoch nicht automatisch, dass diese Dateien gelöscht werden sollten. Bei Systemlogs sind Mechanismen wie logrotate meist die bessere Lösung für die reguläre Verwaltung.

find eignet sich hervorragend für Analyse und Sonderfälle, sollte aber etablierte Log-Rotation nicht unnötig ersetzen.

Kürzlich veränderte Webdateien suchen

Bei der Untersuchung einer Webanwendung kann beispielsweise interessant sein, welche Dateien innerhalb der letzten 30 Minuten geändert wurden:

find /var/www -type f -mmin -30

Das kann bei:

  • Deployments
  • Fehlersuche
  • unerwarteten Änderungen
  • Incident Response

wertvolle Hinweise liefern.

Eine kürzlich veränderte Datei ist allerdings noch kein Beweis für einen Angriff. Ergebnisse müssen immer im Kontext bewertet werden.

Konfigurationsdateien finden

Alle Dateien mit der Endung .conf unterhalb von /etc:

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

Oder ohne Beachtung der Groß-/Kleinschreibung:

find /etc -type f -iname "*.conf"

Backup-Dateien aufspüren

Typische Dateiendungen von Sicherungs- oder temporären Kopien können beispielsweise gesucht werden mit:

find /var/www \( -name "*.bak" -o -name "*.old" -o -name "*~" \)

Gerade in Webverzeichnissen können versehentlich zurückgelassene Sicherungskopien ein Sicherheitsproblem darstellen, wenn sie über den Webserver erreichbar sind und sensible Inhalte enthalten.

Core-Dumps suchen

Je nach Konfiguration können Core-Dumps erheblichen Speicherplatz belegen oder sensible Prozessinhalte enthalten.

Eine einfache Suche könnte beispielsweise lauten:

find /var -type f -name "core*"

Da Namenskonventionen und Speicherorte variieren, ist dies lediglich ein erster Ansatz.

Nach Dateien mit bestimmten Endungen suchen

Mehrere Dateitypen lassen sich elegant kombinieren:

find /srv \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) -type f

Das ist beispielsweise für Medienarchive oder Webserver-Verzeichnisse hilfreich.

Reguläre Ausdrücke verwenden

GNU find unterstützt mit -regex auch reguläre Ausdrücke.

Beispielsweise:

find /srv -regex '.*\.\(jpg\|png\)$'

Dabei sollte beachtet werden, dass sich der reguläre Ausdruck auf den gesamten Pfad bezieht und die verwendete Regex-Syntax von der gewählten find-Implementierung beziehungsweise -regextype abhängen kann.

Für einfache Dateinamensmuster sind -name und -iname häufig leichter verständlich.

Unterschied zwischen find und locate

Neben find existieren Werkzeuge wie locate.

Der wesentliche Unterschied:

find durchsucht den aktuellen Verzeichnisbaum anhand der tatsächlich vorhandenen Dateisystemobjekte.

locate arbeitet typischerweise mit einer zuvor aufgebauten Datenbank.

Dadurch kann locate bei reinen Namenssuchen sehr schnell sein, während find wesentlich flexiblere und aktuellere Prüfungen ermöglicht.

Unterschied zwischen find und grep

Auch find und grep erfüllen unterschiedliche Aufgaben.

find sucht primär nach Dateisystemobjekten.

grep durchsucht dagegen Inhalte.

Beide Werkzeuge können kombiniert werden.

Beispielsweise:

find /etc -type f -name "*.conf" -exec grep -H "Listen" {} +

Damit werden zunächst passende Konfigurationsdateien gefunden und anschließend deren Inhalte durchsucht.

Security-Check: SUID-Dateien

Ein wichtiger Prüfpunkt:

sudo find / -type f -perm -4000

Die Ergebnisse sollten nicht einfach gelöscht oder verändert werden. Stattdessen ist zu prüfen, ob die jeweiligen Dateien erwartet und erforderlich sind.

Security-Check: Dateien ohne Besitzer

sudo find / -nouser

Solche Dateien können beispielsweise nach Migrationen oder dem Entfernen von Benutzerkonten entstehen.

Security-Check: Dateien ohne Gruppe

sudo find / -nogroup

Auch hier sollte geklärt werden, warum die entsprechende GID nicht mehr zugeordnet werden kann.

Security-Check: World-Writable-Dateien

sudo find / -type f -perm -0002

Auf einem großen System kann diese Suche sehr viele legitime Ergebnisse liefern. Sinnvoller ist häufig, zunächst besonders relevante Verzeichnisbereiche zu untersuchen.

find und sudo

Viele Systembereiche sind für normale Benutzer nicht vollständig lesbar.

Eine Suche wie:

find / -type f -name "*.conf"

kann deshalb zahlreiche Meldungen wie:

Permission denied

erzeugen.

Für administrative Prüfungen kann erforderlich sein:

sudo find / ...

Root-Rechte sollten jedoch bewusst eingesetzt werden. Besonders gefährlich wird die Kombination von sudo find mit Aktionen wie:

-delete

oder:

-exec

Ein Fehler in der Suchbedingung kann dann erhebliche Auswirkungen haben.

Typische Fehler: Wildcards nicht quoten

Problematisch kann sein:

find . -name *.log

Besser:

find . -name "*.log"

Durch die Anführungszeichen wird verhindert, dass die Shell das Muster vorzeitig expandiert.

Typische Fehler: Löschen ohne vorherige Kontrolle

Statt direkt:

find /srv -type f -mtime +30 -delete

sollte zunächst verwendet werden:

find /srv -type f -mtime +30 -print

Erst wenn die Ausgabe zweifelsfrei korrekt ist, sollte über das Löschen nachgedacht werden.

Typische Fehler: ctime als Erstellungszeit verstehen

Ein häufiger Irrtum ist, ctime als „creation time“ zu interpretieren.

Unter klassischen Unix-Semantiken beschreibt ctime jedoch die Änderung von Inode-Metadaten.

Wer nach tatsächlichen Erstellungs- beziehungsweise Birth-Zeitstempeln sucht, muss prüfen, ob Dateisystem, Kernel und verwendete Werkzeuge diese Informationen unterstützen.

Typische Fehler: Leerzeichen in Dateinamen

Konstruktionen wie:

find . -type f | xargs rm

sind problematisch, weil Dateinamen Leerzeichen und andere Sonderzeichen enthalten können.

Robuster ist beispielsweise:

find . -type f -print0 | xargs -0 rm

oder direkt:

find . -type f -exec rm -- {} +

Bei Löschoperationen gilt natürlich auch hier: erst kontrollieren, dann ausführen.

Praktische find-Befehle im Überblick

Nach einem Namen suchen:

find /home -name "datei.txt"

Groß-/Kleinschreibung ignorieren:

find /home -iname "datei.txt"

Alle PDF-Dateien suchen:

find /home -type f -name "*.pdf"

Nur Verzeichnisse suchen:

find /srv -type d

Dateien größer als 1 GB finden:

find / -type f -size +1G

In den letzten 60 Minuten geänderte Dateien:

find /var/www -type f -mmin -60

Dateien eines Benutzers:

find /srv -user max

Dateien einer Gruppe:

find /srv -group www-data

Leere Dateien:

find /srv -type f -empty

Leere Verzeichnisse:

find /srv -type d -empty

SUID-Dateien:

sudo find / -type f -perm -4000

Dateien ohne bekannten Besitzer:

sudo find / -nouser

World-Writable-Dateien:

sudo find / -type f -perm -0002

Suchtiefe begrenzen:

find /srv -maxdepth 2 -type f

Verzeichnis ausschließen:

find /srv -path "/srv/backup" -prune -o -type f -print

Befehl auf Ergebnisse anwenden:

find /srv -type f -name "*.log" -exec ls -lh {} +

Hilfe zu find

Eine kurze Hilfe liefert:

find --help

Ausführlicher ist:

man find

Wer find regelmäßig administrativ verwendet, sollte sich insbesondere mit der logischen Verknüpfung von Ausdrücken, -exec, -delete, -prune, -print0 und den verschiedenen Varianten von -perm beschäftigen.

Fazit

find gehört zu den mächtigsten Standardwerkzeugen auf einem Linux-System. Was zunächst wie ein einfacher Befehl zur Dateisuche aussieht, entwickelt sich mit den richtigen Optionen zu einem vielseitigen Werkzeug für Administration, Troubleshooting, Automatisierung und Security-Analysen.

Für den Einstieg reichen bereits wenige Befehle.

Nach Dateinamen suchen:

find /pfad -type f -name "*.log"

Große Dateien finden:

find /pfad -type f -size +1G

Kürzlich veränderte Dateien aufspüren:

find /pfad -type f -mmin -60

Und aus Security-Sicht beispielsweise SUID-Dateien ermitteln:

sudo find / -type f -perm -4000

Seine eigentliche Stärke entfaltet find jedoch durch die Kombination mehrerer Kriterien und Aktionen. Namen, Größen, Zeitstempel, Besitzer, Gruppen und Berechtigungen können miteinander verknüpft und die Treffer anschließend gezielt weiterverarbeitet werden.

Gerade diese Leistungsfähigkeit verlangt bei schreibenden Aktionen Vorsicht. Wer -delete, -exec, chown, chmod oder ähnliche Befehle mit find kombiniert, sollte die Suchbedingung grundsätzlich zunächst nur mit -print überprüfen.

Wer dieses Prinzip beherzigt und die wichtigsten Suchkriterien beherrscht, erhält mit find eines der vielseitigsten Werkzeuge, die die Linux-Kommandozeile zu bieten hat.