Find - richtig Suchen und Finden

Aus Siduction Wiki DE
Wechseln zu: Navigation, Suche

Einleitung

find ist sehr mächtiges Kommando auf der Linux Kommandozeile mit dem man Dateien und Verzeichnisse suchen und finden kann. Leider ist die Syntax und deren Anwendung in der Praxis manchmal nicht ganz einsichtlich. Dieser Artikel soll eine Hilfestellung zur effektiven Nutzung geben.


Dieser Artikel befindet sich Arbeit, d.h. weiter Beispiele folgen im Laufe der Zeit.


Übersicht der wichtigsten Optionen

  • -name: Sucht nach dem angebenen Suchmuster
  • -iname: Sucht nach dem angebenen Suchmuster ohne Berücksichtigung von Groß- und Kleinschreibung
  • -type: Sucht nach einen bestimmten Dateityp
  • -exec: führt ein Kommando mit jeden gefundenen Suchtreffer aus
  • -user: findet Dateien die einen User gehören
  • -group: findet Dateien die einer Gruppe gehören
  • -ls: listet die Suchtreffer ähnlich der Ausgabe von dem Kommando ls auf
  • -prune: verhindert das Hinabsteigen in das angegebene Verzeichnis


Einfache Suche nach Dateien

Hier ein paar Beispiele zur Suche mit find.

Sucht eine Datei mit dem Namen "passwd" (casesensitiv) ab dem Wurzelverzeichnis "/".

# find / -name "passwd"
/var/lib/rkhunter/tmp/passwd
/etc/passwd
/etc/pam.d/passwd
/etc/cron.daily/passwd
/usr/bin/passwd
/usr/share/bash-completion/completions/passwd
/usr/share/doc/passwd
/usr/share/lintian/overrides/passwd
[...]

Sucht eine Datei die mit "pass" beginnt ohne Rücksicht auf Groß- und Kleinschreibung (-iname).

# find /usr/share/perl5 -iname "pass*" 
/usr/share/perl5/Debconf/FrontEnd/Passthrough.pm
/usr/share/perl5/Debconf/Element/Noninteractive/Password.pm
/usr/share/perl5/Debconf/Element/Web/Password.pm
/usr/share/perl5/Curses/UI/PasswordEntry.pm
[...]


Suche auf Dateitypen beschränken

Um eine Suche einzuschränken, d.h. auch die Suchzeit zu verkürzen können verschiedene Optionen genutzt werden. Hier einige Beispiele dazu.

Sucht nur Verzeichnisse (-type d) unterhalb /etc/network.

# find /etc/network -type d
/etc/network
/etc/network/if-post-down.d
/etc/network/if-down.d
/etc/network/if-up.d
/etc/network/if-pre-up.d


Sucht Dateien die ein symbolischer Link (-type l) sind unterhalb des Verzeichnisses /lib/terminfo. Treffer werden im langen Listing ausgegeben (-ls).

# find /lib/terminfo/ -type l -ls
 2637    0 lrwxrwxrwx   1 root     root            5 Apr  9 14:19 /lib/terminfo/x/xterm-debian -> xterm
 2650    0 lrwxrwxrwx   1 root     root            5 Apr  9 14:19 /lib/terminfo/E/Eterm-color -> Eterm
 2623    0 lrwxrwxrwx   1 root     root           10 Apr  9 14:19 /lib/terminfo/r/rxvt-m -> rxvt-basic


Suche auf bestimmte Dateisysteme beschränken

Oftmals will man bei der Suche eingebundene NFS nicht einbeziehen, weil diese Suche oft längere Zeit in Anspruch nimmt. Im nachfolgenden Beispiel werden NFS-Dateisysteme (-fstype nfs) aus der Suche ausgeschlossen (-prune), das ein Absteigen in den NFS-Dateisysteme verhindert. Die Option -o stellt eine ODER-Verknüpfung dar und nach Dateien mit dem Namen .cache sucht.

# find / -fstype nfs -prune -o -name .cache
/home/user1/.cache
/home/user2/.cache
/home/user3/.cache
/etc/lvm/cache/.cache
[...]


Suche in bestimmten Verzeichnissen ausschließen

Um Verzeichnisse bei der Suche auszuschließen nutzt man die Option -path mit der Option -prune. Mehrere auszuschließende Verzeichnisse setzt man in Klammern und verknüpft sie mit einem ODER. Die Klammern sind durch Backslash "\" für die Shell zu entwerten.


Im Beispiel werden alle Dateien mit der Endung *.txt, außer in den Verzeichnissen /mnt, /home und /usr gefunden.

# find / \( -path /mnt -o -path /home -o -path /usr \) -prune -o -name "*.txt"


Modifizierungszeiten von Dateien herausfinden

Sucht man Dateien die innerhalb einer bestimmten Zeit modifiziert worden sind, kann man dies mit der Option mmin bewerkstelligen. Im Beispiel sucht man Dateien unterhalb von /etc, die vor weniger als 120 Minuten modifiziert (-mmin) worden sind. Die Ausgabe erfolgt im langen Listing (-ls).

# find /etc -mmin -120 -ls
 8197   12 drwxr-xr-x 141 root     root        12288 Apr 18 09:02 /etc
 6408    8 -rw-r--r--   1 root     root         7296 Apr 18 09:01 /etc/rsnapshot.conf


Weiterführende Informationen

Das find-Kommando

Tipps und Beispiele für "find"

man-Page zu find

HOWTO zum Kommando "find"