Einführung
Eines der Probleme, mit denen Linux-Einsteiger konfrontiert werden, ist das Auffinden der gesuchten Dateien. Diese Anleitung zeigt Ihnen die Verwendung des Befehls. finden Es enthält den korrekten Namen. Es hilft Ihnen, mithilfe verschiedener Filter und Parameter nach Dateien auf Ihrem System zu suchen. Außerdem beschreibt es kurz den Befehl. lokalisieren die dazu genutzt werden können, Dateien auf eine andere Art und Weise zu suchen.
Voraussetzungen
- Um dieser Anleitung zu folgen, benötigen Sie Zugriff auf einen Computer mit einem Linux-basierten Betriebssystem. Dies kann ein virtueller privater Server (VPS) sein, mit dem Sie sich per SSH verbinden, oder Ihr lokaler Rechner. Dieses Tutorial wurde zwar mit einem Linux-Server unter Ubuntu 20.04 getestet, die Beispiele sollten aber auf jedem Computer mit jeder beliebigen Linux-Distribution funktionieren.
Suche nach Namen
Die naheliegendste Methode, Dateien zu suchen, ist die Suche nach ihrem Namen. Um eine Datei anhand ihres Namens zu finden, verwenden Sie den Befehl findenSie sollten folgenden Befehl verwenden:
find -name "query"Hierbei wird zwischen Groß- und Kleinschreibung unterschieden, d. h. die Suche nach dem Suchbegriff entspricht der Suche nach Abfrage Das ist anders. Um eine Datei anhand ihres Namens zu finden, dabei aber die Groß-/Kleinschreibung zu ignorieren, verwenden Sie die Option -iname:
find -iname "query"Wenn Sie alle Dateien finden möchten, die keinem bestimmten Muster entsprechen, können Sie die Suche eingrenzen mit -nicht Umkehren:
find -not -name "query_to_avoid"Alternativ können Sie die Suche mit einem Ausrufezeichen (!) umkehren, so wie hier:
find \! -name "query_to_avoid"Beachten Sie, dass Sie das Ausrufezeichen (!) vor der Verwendung mit einem Backslash (\) maskieren müssen. finden Die Shell versucht nicht, die Information zu interpretieren, wenn sie sie interpretieren kann.
Nach Typ suchen
Mit Parameter -Typ Sie können die Dateitypen angeben, die Sie finden möchten. So funktioniert es:
find -type type_descriptor queryHier sind einige Beschreibungsmerkmale, anhand derer Sie den Dateityp bestimmen können:
- f: Normale Datei
- d: Verzeichnis
- l: symbolischer Link
- c: Zeichengeräte
- b: Blockiert Geräte
Wenn Sie beispielsweise alle Zeichengeräte auf Ihrem System finden möchten, können Sie folgenden Befehl ausführen:
find /dev -type cDieser Befehl sucht gezielt nur nach Geräten im Ordner /dev, dem Verzeichnis, in dem Gerätedateien typischerweise auf Linux-Systemen installiert werden:
Output
/dev/vcsa5
/dev/vcsu5
/dev/vcs5
/dev/vcsa4
/dev/vcsu4
/dev/vcs4
/dev/vcsa3
/dev/vcsu3
/dev/vcs3
/dev/vcsa2
/dev/vcsu2
/dev/vcs2
. . .Sie können alle Dateien anzeigen, die .conf Suche nach Dateien, die auf . enden. Dieses Beispiel findet passende Dateien im Ordner /usr Suchanfragen:
find /usr -type f -name "*.conf"Output
/usr/src/linux-headers-5.4.0-88-generic/include/config/auto.conf
/usr/src/linux-headers-5.4.0-88-generic/include/config/tristate.conf
/usr/src/linux-headers-5.4.0-90-generic/include/config/auto.conf
/usr/src/linux-headers-5.4.0-90-generic/include/config/tristate.conf
/usr/share/adduser/adduser.conf
/usr/share/ufw/ufw.conf
/usr/share/popularity-contest/default.conf
/usr/share/byobu/keybindings/tmux-screen-keys.conf
/usr/share/libc-bin/nsswitch.conf
/usr/share/rsyslog/50-default.conf
. . .Nach Zeit und Größe filtern
finden Es bietet Ihnen verschiedene Möglichkeiten, die Ergebnisse nach Größe und Zeit zu filtern.
Größe
Verwendung des Parameters -Größe Sie können Dateien nach ihrer Größe filtern. Dazu müssen Sie dem numerischen Größenwert ein spezielles Suffix anhängen, um anzugeben, ob die Größe in Byte, Megabyte, Gigabyte oder einer anderen Maßeinheit angegeben wird. Hier sind einige gängige Größensuffixe:
- c: Bytes
- k: Kilobyte
- m: Megabyte
- g: Gigabyte
- b: 512-Byte-Blöcke
Zur Veranschaulichung: Der folgende Befehl findet alle Dateien im Verzeichnis /usr, die genau 50 Byte lang sind:
find /usr -size 50cUm Dateien zu finden, die kleiner als 50 Byte sind, können Sie diese Syntax verwenden:
find /usr -size -50cUm Dateien im Ordner /usr zu finden, die größer als 700 MB sind, können Sie folgenden Befehl verwenden:
find /usr -size +700MZeit
Für jede Datei im System speichert Linux Zeitstempel für Zugriffszeit, Änderungszeit und Änderungsdauer.
- Zugriffszeit: Der Zeitpunkt, zu dem eine Datei zuletzt gelesen oder geschrieben wurde.
- Änderungszeitpunkt: Der Zeitpunkt, zu dem der Inhalt der Datei zuletzt geändert wurde.
- Änderungszeitpunkt: Der Zeitpunkt, zu dem die Inode-Metadaten der Datei zuletzt geändert wurden.
Die Optionen nutzen Zeit- ,mtime- Und -ctimeSie können Ihre Suchvorgänge anhand dieser Parameter gestalten. Für jede dieser Optionen müssen Sie einen Wert angeben, der angibt, wie viele Tage in der Vergangenheit Sie suchen möchten. Ähnlich wie bei den zuvor beschriebenen Größenoptionen können Sie diesen Optionen Plus- oder Minuszeichen voranstellen, um «größer als» oder «kleiner als» anzugeben.
Um beispielsweise Dateien im Ordner /usr zu finden, die im Laufe des letzten Tages geändert wurden, führen Sie folgenden Befehl aus:
find /usr -mtime 1Wenn Sie auf Dateien zugreifen möchten, die Sie vor weniger als einem Tag aufgerufen haben, können Sie diesen Befehl ausführen:
find /usr -atime -1Um Dateien zu finden, deren Metadaten zuletzt vor mehr als 3 Tagen geändert wurden, können Sie folgenden Befehl ausführen:
find /usr -ctime +3Diese Optionen verfügen außerdem über zugehörige Parameter, mit denen Sie Minuten anstelle von Tagen angeben können:
find /usr -mmin -1Hier werden die Dateien angezeigt, die zuletzt geändert wurden.
finden Es kann auch einen Vergleich mit einer Referenzdatei durchführen und neuere Elemente zurückgeben:
find / -newer reference_fileDiese Syntax gibt alle Dateien im System zurück, die vor kurzem relativ zur Referenzdatei erstellt oder geändert wurden.
Suche nach Eigentümer und Berechtigungen
Sie können auch nach Dateien suchen, die dem Benutzer oder der Gruppe gehören, die die Datei besitzt. Verwenden Sie dazu die Parameter `-user` und `-group`. Um eine beliebige Datei im Verzeichnis `/var` zu finden, die dem Benutzer `syslog` gehört, führen Sie folgenden Befehl aus:
find /var -user syslogEbenso können Sie die Dateien im Verzeichnis /etc, die zur Gruppe shadow gehören, auflisten, indem Sie Folgendes eingeben:
find /etc -group shadowSie können auch nach Dateien mit bestimmten Berechtigungen suchen.
Wenn Sie eine exakte Berechtigungsliste abgleichen möchten, können Sie diese Syntax verwenden, die Berechtigungen in Oktalschreibweise angibt:
find / -perm 644Dadurch werden Dateien mit exakt den angegebenen Berechtigungen abgeglichen.
Wenn Sie etwas mit mindestens diesen Berechtigungen angeben möchten, können Sie dem Berechtigungssymbol ein Minuszeichen voranstellen:
find / -perm -644Dies trifft auf alle Dateien mit zusätzlichen Berechtigungen zu. In diesem Beispiel entspricht eine Datei mit den Berechtigungen 744 dieser Zuordnung.
Filtern nach Tiefe
In diesem Abschnitt erstellen Sie eine Beispielverzeichnisstruktur, anhand derer Sie anschließend das Filtern von Dateien basierend auf ihrer Verschachtelungstiefe untersuchen. Wenn Sie den Beispielen in diesem Tutorial folgen, empfiehlt es sich, diese Dateien und Verzeichnisse im Ordner `/tmp/` anzulegen. `/tmp/` ist ein temporäres Verzeichnis. Das bedeutet, dass alle darin enthaltenen Dateien und Verzeichnisse beim nächsten Serverstart gelöscht werden. Dies ist für diese Anleitung von Vorteil, da Sie beliebig viele Verzeichnisse, Dateien und Verknüpfungen erstellen können, ohne befürchten zu müssen, dass diese später Ihr System beeinträchtigen. Nach Ausführung der Befehle in diesem Abschnitt enthält Ihr `/tmp/`-Verzeichnis drei Verzeichnisebenen, wobei die erste Ebene zehn Verzeichnisse enthält. Jedes Verzeichnis (einschließlich des temporären Verzeichnisses) enthält zehn Dateien und zehn Unterverzeichnisse.
Erstellen Sie mit folgendem Befehl eine Beispielverzeichnisstruktur im Ordner /tmp/:
mkdir -p /tmp/test/level1dir{1..10}/level2dir{1..10}/level3dir{1..10}Anschließend füllen Sie diese Verzeichnisse mit einigen Beispieldateien mithilfe des Befehls „touch“:
touch /tmp/test/{file{1..10},level1dir{1..10}/{file{1..10},level2dir{1..10}/{file{1..10},level3dir{1..10}/file{1..10}}}}Nachdem diese Dateien und Verzeichnisse vorhanden sind, wechseln Sie nun in das soeben erstellte Verzeichnis „test/“:
cd /tmp/testUm ein grundlegendes Verständnis dafür zu erlangen, wie man Dateien aus dieser Struktur abruft, beginnen Sie mit der Suche nach dem regulären Namen, der mit einer beliebigen Datei namens file1 übereinstimmt:
find -name file1Output
./level1dir7/level2dir8/level3dir9/file1
./level1dir7/level2dir8/level3dir3/file1
./level1dir7/level2dir8/level3dir4/file1
./level1dir7/level2dir8/level3dir1/file1
./level1dir7/level2dir8/level3dir8/file1
./level1dir7/level2dir8/level3dir7/file1
./level1dir7/level2dir8/level3dir2/file1
./level1dir7/level2dir8/level3dir6/file1
./level1dir7/level2dir8/level3dir5/file1
./level1dir7/level2dir8/file1
. . .Dies wird eine große Anzahl von Ergebnissen liefern. Wenn Sie die Ausgabe in einen Zähler einspeisen, werden Sie sehen, dass es insgesamt 1111 Ergebnisse gibt:
find -name file1 | wc -lOutput
1111Dies sind wahrscheinlich zu viele Ergebnisse, um in den meisten Situationen hilfreich zu sein. Um die Anzahl zu begrenzen, können Sie in der obersten Suchliste eine maximale Suchtiefe festlegen:
find -maxdepth num -name queryUm die Datei file1 nur in Verzeichnissen der Ebene 1 und höher zu finden, können Sie eine maximale Tiefe von 2 angeben (1 für das oberste Verzeichnis und 1 für die Verzeichnisse der Ebene 1):
find -maxdepth 2 -name file1Output
./level1dir7/file1
./level1dir1/file1
./level1dir3/file1
./level1dir8/file1
./level1dir6/file1
./file1
./level1dir2/file1
./level1dir9/file1
./level1dir4/file1
./level1dir5/file1
./level1dir10/file1Das ist eine sehr überschaubare Liste.
Sie können auch ein Mindestverzeichnis angeben, wenn Sie wissen, dass sich alle Dateien ab einem bestimmten Zeitpunkt unterhalb des aktuellen Verzeichnisses befinden:
find -mindepth num -name queryDamit können Sie nur die Dateien am Ende von Verzeichniszweigen finden:
find -mindepth 4 -name file1Output
./level1dir7/level2dir8/level3dir9/file1
./level1dir7/level2dir8/level3dir3/file1
./level1dir7/level2dir8/level3dir4/file1
./level1dir7/level2dir8/level3dir1/file1
./level1dir7/level2dir8/level3dir8/file1
./level1dir7/level2dir8/level3dir7/file1
./level1dir7/level2dir8/level3dir2/file1
. . .Auch hier werden aufgrund der Branch-and-File-Struktur 1000 Ergebnisse zurückgegeben.
Sie können die Parameter für minimale und maximale Tiefe kombinieren, um sich auf einen engen Bereich zu konzentrieren:
find -mindepth 2 -maxdepth 3 -name file1Output
./level1dir7/level2dir8/file1
./level1dir7/level2dir5/file1
./level1dir7/level2dir7/file1
./level1dir7/level2dir2/file1
./level1dir7/level2dir10/file1
./level1dir7/level2dir6/file1
./level1dir7/level2dir3/file1
./level1dir7/level2dir4/file1
./level1dir7/file1
. . .Durch die Kombination dieser Optionen wird die Anzahl der Ergebnisse deutlich reduziert; es werden nur noch 110 Zeilen anstelle der vorherigen 1000 Zeilen zurückgegeben.
Befehle ausführen, um Ergebnisse zu finden
Sie können den Parameter verwenden -exec Führen Sie einen benutzerdefinierten Hilfsbefehl für alle übereinstimmenden Elemente mit folgendem Befehl aus:
find find_parameters -exec command_and_options {} \;{} dient als Platzhalter für übereinstimmende Dateien. \; zeigt an, wo der Befehl endet.
Angenommen, Sie befinden sich noch im Verzeichnis /test/, das Sie im vorherigen Schritt im Ordner /tmp/ erstellt haben, können Sie die Dateien aus dem vorherigen Abschnitt, die die Berechtigungen 644 hatten, finden und sie so ändern, dass sie die Berechtigungen 664 haben:
find . -type f -perm 644 -exec chmod 664 {} \;Sie können auch die Verzeichnisberechtigungen auf ähnliche Weise ändern:
find . -type d -perm 755 -exec chmod 700 {} \;Dieses Beispiel findet alle Verzeichnisse, deren Berechtigungen auf 755 gesetzt sind, und ändert dann die Berechtigungen auf 700.
Dateien mit der Funktion "Locate" finden
Alternative zur Verwendung finden Befehl lokalisieren Dieser Befehl ist oft schneller und kann das gesamte Dateisystem problemlos durchsuchen.
Sie können den Befehl in Debian oder Ubuntu mit apt installieren, indem Sie Ihre Paketliste aktualisieren und anschließend das Paket molocate installieren:
sudo apt update sudo apt install mlocate
Unter Rocky Linux, CentOS und anderen von RedHat abgeleiteten Distributionen können Sie mlocate mit dem Befehl dnf installieren:
sudo dnf install mlocateDer Grund, warum `locate` schneller als `find` ist, liegt darin, dass es auf einer Datenbank basiert, die alle Dateien im Dateisystem auflistet. Diese Datenbank wird üblicherweise einmal täglich per Cron-Skript aktualisiert, kann aber auch manuell mit dem Befehl `updatedb` aktualisiert werden. Führen Sie nun folgenden Befehl mit sudo-Rechten aus:
sudo updatedbDenken Sie daran: Um neue Dateien zu finden, muss die Standortdatenbank stets aktuell sein. Wenn Sie neue Dateien hinzufügen, bevor das Cron-Skript oder der Befehl `updatedb` ausgeführt wird, werden diese nicht in den Suchergebnissen angezeigt.
Der Standort ermöglicht es Ihnen, Ergebnisse auf verschiedene Weise zu filtern. Die einfachste Methode zum Auffinden von Dateien ist die Verwendung dieser Syntax:
locate queryDies findet alle Dateien und Verzeichnisse, deren Dateipfad die Zeichenkette «query» enthält. Um nur Dateien zurückzugeben, deren Namen die Zeichenkette „query“ selbst enthalten, anstatt aller Dateien, die die Zeichenkette „query“ in den übergeordneten Verzeichnissen enthalten, können Sie den Parameter „-b“ hinzufügen, um nur Dateien zu durchsuchen, deren „Basisname“ mit der Zeichenkette „query“ übereinstimmt.
locate -b queryUm sicherzustellen, dass `locate` nur Ergebnisse zurückgibt, die noch im Dateisystem vorhanden sind (d. h. Dateien, die zwischen dem letzten Aufruf von `updatedb` und dem aktuellen Aufruf von `locate` nicht gelöscht wurden), verwenden Sie `-e:`
locate -e querySie können Statistiken zu den Informationen abrufen, in denen der Standort aufgeführt ist, indem Sie die Option -S verwenden:
locate -SOutput
Database /var/lib/mlocate/mlocate.db:
21015 directories
136787 files
7727763 bytes in file names
3264413 bytes used to store databaseDies kann hilfreich sein, um sich einen guten Überblick über die Anzahl der Dateien und Verzeichnisse auf Ihrem System zu verschaffen.
Ergebnis
Sowohl `find` als auch `locate` sind nützliche Werkzeuge zum Auffinden von Dateien auf Ihrem System. Beide sind leistungsstarke Befehle, die sich durch die Kombination mit anderen Werkzeugen in Pipelines erweitern lassen. Sie entscheiden, welches Werkzeug für Ihre Bedürfnisse am besten geeignet ist. Wir empfehlen Ihnen, weiter mit `find` und `locate` zu experimentieren. In den jeweiligen Manpages finden Sie weitere Optionen, die in diesem Leitfaden nicht behandelt werden. Sie können die Suchergebnisse analysieren und bearbeiten, indem Sie sie an andere Befehle wie `wc`, `sort` und `grep` übergeben.









