GNU/Linux >> LINUX-Kenntnisse >  >> Linux

25 einfache Beispiele für den Linux-Suchbefehl

Linux-Suchbefehl

Der Linux find-Befehl ist ein sehr nützlicher und praktischer Befehl, um von der Befehlszeile aus nach Dateien zu suchen. Es kann verwendet werden, um Dateien basierend auf verschiedenen Suchkriterien wie Berechtigungen, Benutzerbesitz, Datum/Uhrzeit der Änderung, Größe usw. zu finden. In diesem Beitrag werden wir lernen, den Befehl find zusammen mit verschiedenen Optionen, die er unterstützt, zu verwenden.

Der Find-Befehl ist standardmäßig in den meisten Linux-Distributionen verfügbar, sodass Sie kein Paket installieren müssen. Der Find-Befehl ist ein wesentlicher Befehl, den Sie lernen müssen, wenn Sie mit der Befehlszeile unter Linux superproduktiv werden wollen.

Die grundlegende Syntax des Find-Befehls sieht folgendermaßen aus

$ find location comparison-criteria search-term

1. Alle Dateien im aktuellen Verzeichnis und in Unterverzeichnissen auflisten

Dieser Befehl listet alle Dateien im aktuellen Verzeichnis sowie die Unterverzeichnisse im aktuellen Verzeichnis auf.

$ find
.
./abc.txt
./subdir
./subdir/how.php
./cool.php

Der Befehl ist derselbe wie der folgende

$ find .
$ find . -print

2. Suchen Sie nach einem bestimmten Verzeichnis oder Pfad

Der folgende Befehl sucht nach Dateien im Testverzeichnis im aktuellen Verzeichnis. Listet standardmäßig alle Dateien auf.

$ find ./test
./test
./test/abc.txt
./test/subdir
./test/subdir/how.php
./test/cool.php

Der folgende Befehl sucht nach Dateien anhand ihres Namens.

$ find ./test -name "abc.txt"
./test/abc.txt

Wir können auch Platzhalter verwenden

$ find ./test -name "*.php"
./test/subdir/how.php
./test/cool.php

Beachten Sie, dass alle Unterverzeichnisse rekursiv durchsucht werden. Dies ist also ein sehr leistungsfähiger Weg, um alle Dateien einer bestimmten Erweiterung zu finden.

Der Versuch, das „/“-Verzeichnis zu durchsuchen, das das Stammverzeichnis ist, würde das gesamte Dateisystem durchsuchen, einschließlich gemounteter Geräte und Netzwerkspeichergeräte. Also sei vorsichtig. Natürlich können Sie jederzeit Strg + C drücken, um den Befehl zu stoppen.

When specifying the directory ("./test" in this example), its fine to omit the trailing slash. However, if the directory is actually a symlink to some other location then you MUST specify the trailing slash for it to work properly (find ./test/ ...)

Fall ignorieren

Bei der Suche nach Dateinamen ist es oft sinnvoll, die Groß-/Kleinschreibung zu ignorieren. Um die Groß-/Kleinschreibung zu ignorieren, verwenden Sie einfach die Option "iname" anstelle der Option "name".

$ find ./test -iname "*.Php"
./test/subdir/how.php
./test/cool.php
Its always better to wrap the search term (name parameter) in double or single quotes. Not doing so will seem to work sometimes and give strange results at other times.

3. Tiefe des Verzeichnisdurchlaufs begrenzen

Der Find-Befehl durchläuft standardmäßig rekursiv den gesamten Verzeichnisbaum, was Zeit und Ressourcen in Anspruch nimmt. Die Tiefe des Verzeichnisdurchlaufs kann jedoch angegeben werden. Zum Beispiel wollen wir in den Unterverzeichnissen nicht mehr als 2 oder 3 Ebenen nach unten gehen. Dies geschieht mit der Option maxdepth.

$ find ./test -maxdepth 2 -name "*.php"
./test/subdir/how.php
./test/cool.php
$ find ./test -maxdepth 1 -name *.php
./test/cool.php

Das zweite Beispiel verwendet eine maximale Tiefe von 1, was bedeutet, dass es nicht tiefer als 1 Ebene tief gehen wird, auch nur im aktuellen Verzeichnis.

Dies ist sehr nützlich, wenn wir eine eingeschränkte Suche nur im aktuellen Verzeichnis oder maximal 1 Ebene tiefen Unterverzeichnissen und nicht im gesamten Verzeichnisbaum durchführen möchten, was mehr Zeit in Anspruch nehmen würde.

Genau wie maxdepth gibt es eine Option namens mindepth, die das tut, was der Name vermuten lässt, das heißt, sie geht mindestens N-Level tief, bevor sie nach den Dateien sucht.

4. Übereinstimmung umkehren

Es ist auch möglich, nach Dateien zu suchen, die nicht mit einem bestimmten Namen oder Muster übereinstimmen. Dies ist hilfreich, wenn wir wissen, welche Dateien von der Suche ausgeschlossen werden sollen.

$ find ./test -not -name "*.php"
./test
./test/abc.txt
./test/subdir

Im obigen Beispiel haben wir also alle Dateien gefunden, die nicht die Erweiterung php haben, entweder nicht-php-Dateien. Der find-Befehl unterstützt auch das Ausrufezeichen anstelle von not.

find ./test ! -name "*.php"

5. Kombinieren Sie mehrere Suchkriterien

Es ist möglich, mehrere Kriterien bei der Angabe des Namens und der Invertierung zu verwenden. Zum Beispiel

$ find ./test -name 'abc*' ! -name '*.php'
./test/abc.txt
./test/abc

Der obige find-Befehl sucht nach Dateien, die mit abc in ihrem Namen beginnen und keine php-Erweiterung haben. Dies ist ein Beispiel dafür, wie leistungsstarke Suchausdrücke mit dem Befehl find erstellt werden können.

ODER-Operator

Wenn mehrere Namenskriterien verwendet werden, würde der Suchbefehl sie mit dem UND-Operator kombinieren, was bedeutet, dass nur die Dateien abgeglichen werden, die alle Kriterien erfüllen. Wenn wir jedoch einen OR-basierten Abgleich durchführen müssen, hat der Find-Befehl den Schalter "o".

$ find -name '*.php' -o -name '*.txt'
./abc.txt
./subdir/how.php
./abc.php
./cool.php

Der obige Befehl sucht nach Dateien, die entweder mit der Erweiterung php oder der Erweiterung txt enden.

6. Nur Dateien oder nur Verzeichnisse durchsuchen

Manchmal möchten wir nur Dateien oder nur Verzeichnisse mit einem bestimmten Namen finden. Find kann das auch ganz einfach.

$ find ./test -name abc*
./test/abc.txt
./test/abc
Only files
$ find ./test -type f -name "abc*"
./test/abc.txt
Only directories
$ find ./test -type d -name "abc*"
./test/abc

Sehr nützlich und praktisch!

7. Mehrere Verzeichnisse gemeinsam durchsuchen

Nehmen wir also an, Sie möchten in 2 separaten Verzeichnissen suchen. Auch hier ist der Befehl sehr einfach

$ find ./test ./dir2 -type f -name "abc*"
./test/abc.txt
./dir2/abcdefg.txt

Überprüfen Sie, ob Dateien aus 2 separaten Verzeichnissen aufgelistet wurden.

8. Finde versteckte Dateien

Versteckte Dateien unter Linux beginnen mit einem Punkt. Es ist also einfach, dies im Namenskriterium zu erwähnen und alle versteckten Dateien aufzulisten.

$ find ~ -type f -name ".*"

9. Dateien mit bestimmten Berechtigungen finden

Der Befehl find kann verwendet werden, um Dateien mit einer bestimmten Berechtigung zu finden, indem die Option "perm" verwendet wird. Der folgende Befehl sucht nach Dateien mit der Berechtigung 0664

$ find . -type f -perm 0664
./abc.txt
./subdir/how.php
./abc.php
./cool.php

Dies kann nützlich sein, um Dateien mit falschen Berechtigungen zu finden, die zu Sicherheitsproblemen führen können. Die Umkehrung kann auch auf die Berechtigungsprüfung angewendet werden.

$ find . -type f ! -perm 0777
./abc.txt
./subdir/how.php
./abc.php
./cool.php

10. Finde Dateien mit gesetzten sgid/suid-Bits

Die Option "perm" des Find-Befehls akzeptiert die gleiche Moduszeichenfolge wie chmod. Der folgende Befehl findet alle Dateien mit Berechtigung 644 und gesetztem sgid-Bit.

# find / -perm 2644

Verwenden Sie in ähnlicher Weise 1664 für Sticky Bit. Die Option perm unterstützt auch die Verwendung einer alternativen Syntax anstelle von Oktalzahlen.

$ find / -maxdepth 2 -perm /u=s 2>/dev/null
/bin/mount
/bin/su
/bin/ping6
/bin/fusermount
/bin/ping
/bin/umount
/sbin/mount.ecryptfs_private

Beachten Sie, dass "2>/dev/null" die Einträge entfernt, die den Fehler "Permission Denied" aufweisen

11. Schreibgeschützte Dateien finden

Alle schreibgeschützten Dateien finden.

$ find /etc -maxdepth 1 -perm /u=r
/etc
/etc/thunderbird
/etc/brltty
/etc/dkms
/etc/phpmyadmin
... output truncated ...

12. Ausführbare Dateien finden

Der folgende Befehl findet ausführbare Dateien

$ find /bin -maxdepth 2 -perm /a=x
/bin
/bin/preseed_command
/bin/mount
/bin/zfgrep
/bin/tempfile
... output truncated ...

13. Finden Sie Dateien, die einem bestimmten Benutzer gehören

So finden Sie alle oder einzelne Dateien mit dem Namen tecmint.txt im /root-Verzeichnis des Besitzers root.

$ find . -user bob
.
./abc.txt
./abc
./subdir
./subdir/how.php
./abc.php

Wir könnten auch den Namen der Datei oder irgendwelche namensbezogenen Kriterien zusammen mit Benutzerkriterien spezifizieren

$ find . -user bob -name '*.php'

Es ist sehr einfach zu sehen, wie wir Kriterien über Kriterien aufbauen können, um unsere Suche nach passenden Dateien einzugrenzen.

14. Dateien suchen, die zur Gruppe gehören

Alle Dateien finden, die zu einer bestimmten Gruppe gehören.

# find /var/www -group developer

Wussten Sie, dass Sie Ihr Home-Verzeichnis mit dem Symbol ~ durchsuchen können?

$ find ~ -name "hidden.php"

Einfach!!

Dateien und Verzeichnisse nach Datum und Uhrzeit der Änderung durchsuchen

Ein weiteres großartiges Suchkriterium, das der Find-Befehl unterstützt, sind Änderungen und Zugriffsdaten/-zeiten. Dies ist sehr praktisch, wenn wir herausfinden möchten, welche Dateien zu einem bestimmten Zeitpunkt oder Datumsbereich geändert wurden. Nehmen wir ein paar Beispiele

15. Finden Sie Dateien, die vor N Tagen geändert wurden

Um alle Dateien zu finden, die vor 50 Tagen geändert wurden.

# find / -mtime 50

16. Dateien finden, auf die in den letzten N Tagen zugegriffen wurde

Finden Sie alle Dateien, auf die in den letzten 50 Tagen zugegriffen wurde.

# find / -atime 50

17. Finden Sie Dateien, die in einem Zeitraum von Tagen geändert wurden

Finden Sie alle Dateien, die vor 50 bis 100 Tagen geändert wurden.

# find / -mtime +50 –mtime -100

18. Dateien finden, die in den letzten N Minuten geändert wurden.

Finden Sie Dateien, die innerhalb der letzten 1 Stunde geändert wurden.

$ find /home/bob -cmin -60

19. In der letzten Stunde geänderte Dateien

Um alle Dateien zu finden, die in der letzten 1 Stunde geändert wurden.

# find / -mmin -60

20. Zugegriffene Dateien in der letzten 1 Stunde finden

Um alle Dateien zu finden, auf die in der letzten 1 Stunde zugegriffen wurde.

# find / -amin -60

21. Dateien der angegebenen Größe finden

Dateien und Verzeichnisse nach Größe durchsuchen. Um alle 50-MB-Dateien zu finden, verwenden Sie.

# find / -size 50M

22. Finden Sie Dateien in einem Größenbereich

Um alle Dateien zu finden, die größer als 50 MB und kleiner als 100 MB sind.

$ find / -size +50M -size -100M

23. Größte und kleinste Dateien finden

Der Befehl find kann in Kombination mit den Befehlen ls und sort verwendet werden, um die größten Dateien aufzulisten.
Der folgende Befehl zeigt die fünftgrößte Datei im aktuellen Verzeichnis und seinem Unterverzeichnis an. Abhängig von der Gesamtzahl der Dateien, die der Befehl verarbeiten muss, kann die Ausführung eine Weile dauern.

$ find . -type f -exec ls -s {} \; | sort -n -r | head -5

Ähnlich wie bei der Sortierung in aufsteigender Reihenfolge werden die kleinsten Dateien zuerst angezeigt

$ find . -type f -exec ls -s {} \; | sort -n | head -5

24. Leere Dateien und Verzeichnisse finden

Der folgende Befehl verwendet die "empty"-Option des find-Befehls, der alle leeren Dateien findet.

# find /tmp -type f -empty

Um alle leeren Verzeichnisse zu archivieren, verwenden Sie den Typ "d".

$ find ~/ -type d -empty

Wirklich sehr einfach und leicht

Einige fortgeschrittene Operationen

Der Find-Befehl findet nicht nur Dateien anhand bestimmter Kriterien, er kann auch mit jedem Linux-Befehl auf diese Dateien einwirken. Beispielsweise möchten wir möglicherweise einige Dateien löschen.

Hier sind einige kurze Beispiele

25. Listen Sie die gefundenen Dateien auf

Nehmen wir an, wir haben Dateien mit dem Befehl find gefunden und möchten sie nun so auflisten, wie es der Befehl ls getan hätte. Das ist ganz einfach.

$ find . -exec ls -ld {} \;
drwxrwxr-x 4 enlightened enlightened 4096 Aug 11 19:01 .
-rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:25 ./abc.txt
drwxrwxr-x 2 enlightened enlightened 4096 Aug 11 16:48 ./abc
drwxrwxr-x 2 enlightened enlightened 4096 Aug 11 16:26 ./subdir
-rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:26 ./subdir/how.php
-rw-rw-r-- 1 enlightened enlightened 29 Aug 11 19:13 ./abc.php
-rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:25 ./cool.php

26. Alle passenden Dateien oder Verzeichnisse löschen

Der folgende Befehl entfernt alle Textdateien im tmp-Verzeichnis.

$ find /tmp -type f -name "*.txt" -exec rm -f {} \;

Die gleiche Operation kann mit Verzeichnissen ausgeführt werden, geben Sie einfach d anstelle von Typ f ein.

Nehmen wir ein weiteres Beispiel, bei dem wir Dateien löschen möchten, die größer als 100 MB sind

$ find /home/bob/dir -type f -name *.log -size +10M -exec rm -f {} \;

Zusammenfassung

Das war also ein kurzes Tutorial zum Linux-Suchbefehl . Der Find-Befehl ist einer der wichtigsten Befehle auf dem Linux-Terminal, der das Suchen von Dateien sehr einfach ermöglicht. Es ist ein Muss für alle Systemadministratoren. Also lerne es. Haben Sie Fragen? Hinterlasse unten einen Kommentar.


Linux
  1. 25 Nützliche praktische Beispiele für find-Befehle unter Linux

  2. 7 Beispiele für Linux-df-Befehle

  3. rm-Befehlsbeispiele unter Linux

  4. sa-Befehlsbeispiele in Linux

  5. w Befehlsbeispiele unter Linux

Linux-Suchbefehl mit praktischen Beispielen

50 einfache und nützliche Beispiele für den Find-Befehl in Linux

15 super nützliche Beispiele für den Find-Befehl in Linux

Tutorial für Linux-Suchbefehle (mit Beispielen)

Mama, ich habe es gefunden! — 15 praktische Beispiele für Linux-Suchbefehle

id-Befehlsbeispiele in Linux