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
.logenden, - 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.