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

Tutorial für Linux-Suchbefehle (mit Beispielen)

Wenn es darum geht, Dateien oder Verzeichnisse auf Ihrem System zu finden, ist der Find-Befehl unter Linux beispiellos. Es ist einfach zu bedienen, hat aber viele verschiedene Optionen, mit denen Sie Ihre Suche nach Dateien verfeinern können.

Lesen Sie weiter, um Beispiele zu sehen, wie Sie diesen Befehl verwenden können, um alles auf Ihrem System zu finden. Jede Datei ist nur ein paar Tastenanschläge entfernt, sobald Sie wissen, wie man den Find-Befehl unter Linux verwendet.

Verzeichnis suchen

Mit der Option -type d können Sie den find-Befehl anweisen, gezielt nach Verzeichnissen zu suchen. Dadurch sucht der find-Befehl nur nach übereinstimmenden Verzeichnisnamen und nicht nach Dateinamen.

$ find /path/to/search -type d -name "name-of-dir"

Finde versteckte Dateien

Da versteckte Dateien und Verzeichnisse in Linux mit einem Punkt beginnen, können wir dieses Suchmuster in unserem Suchstring angeben, um versteckte Dateien und Verzeichnisse rekursiv aufzulisten.

$ find /path/to/search -name ".*"

Suchen Sie Dateien mit einer bestimmten Größe oder größer als X

Die Option -size bei find ermöglicht es uns, nach Dateien einer bestimmten Größe zu suchen. Es kann verwendet werden, um Dateien mit einer genauen Größe, Dateien, die größer oder kleiner als eine bestimmte Größe sind, oder Dateien, die in einen bestimmten Größenbereich passen, zu finden. Hier sind einige Beispiele:

Suchen Sie nach Dateien, die größer als 10 MB sind:

$ find /path/to/search -size +10M

Suchen Sie nach Dateien, die kleiner als 10 MB sind:

$ find /path/to/search -size -10M

Suchen Sie nach Dateien, die genau 10 MB groß sind:

$ find /path/to/search -size 10M

Suchen Sie nach Dateien, die zwischen 100 MB und 1 GB groß sind:

$ find /path/to/search -size +100M -size -1G

In einer Liste von Dateien suchen

Wenn Sie eine Liste von Dateien (z. B. in einer .txt-Datei) haben, nach denen Sie suchen müssen, können Sie mit einer Kombination aus den Befehlen find und grep nach Ihrer Dateiliste suchen. Damit dieser Befehl funktioniert, stellen Sie einfach sicher, dass jedes Muster, nach dem Sie suchen möchten, durch eine neue Zeile getrennt ist.

$ find /path/to/search | grep -f filelist.txt

Die Option -f auf grep bedeutet „Datei“ und ermöglicht es uns, eine Datei mit Zeichenfolgen anzugeben, mit denen abgeglichen werden soll. Dies führt dazu, dass der Befehl find alle Datei- oder Verzeichnisnamen zurückgibt, die mit denen in der Liste übereinstimmen.

Nicht in einer Liste finden

Unter Verwendung derselben Liste von Dateien, die wir im vorherigen Beispiel erwähnt haben, können Sie auch den Befehl find verwenden, um nach Dateien zu suchen, die nicht sind Passen Sie die Muster in die Textdatei ein. Auch hier verwenden wir eine Kombination aus den Befehlen find und grep; wir brauchen nur eine zusätzliche Option, die mit grep angegeben wird:

$ find /path/to/search | grep -vf filelist.txt

Die Option -v auf grep bedeutet „umgekehrte Übereinstimmung“ und gibt eine Liste von Dateien zurück, die keinem der in unserer Dateiliste angegebenen Muster entsprechen.

Stellen Sie die maximale Tiefe ein

Der Befehl find sucht standardmäßig rekursiv. Das bedeutet, dass es das angegebene Verzeichnis nach dem von Ihnen angegebenen Muster durchsuchen wird, sowie alle Unterverzeichnisse innerhalb des Verzeichnisses, das Sie ihm zu durchsuchen angegeben haben.

Wenn Sie zum Beispiel find sagen, dass es das Root-Verzeichnis von Linux (/) durchsuchen soll, wird es die gesamte Festplatte durchsuchen, egal wie viele Unterverzeichnisse von Unterverzeichnissen existieren. Sie können dieses Verhalten mit der Option -maxdepth umgehen.

Geben Sie nach -maxdepth eine Zahl an, um find anzuweisen, in wie vielen Unterverzeichnissen rekursiv gesucht werden soll.

Nur im aktuellen Verzeichnis nach Dateien suchen und nicht rekursiv suchen:

$ find . -maxdepth 0 -name "myfile.txt"

Suche nach Dateien nur im aktuellen Verzeichnis und ein Unterverzeichnis tiefer:

$ find . -maxdepth 1 -name "myfile.txt"

Leere Dateien finden (Länge Null)

Um mit find nach leeren Dateien zu suchen, können Sie das Flag -empty verwenden. Nach allen leeren Dateien suchen:

$ find /path/to/search -type f -empty

Nach allen leeren Verzeichnissen suchen:

$ find /path/to/search -type d -empty

Es ist auch sehr praktisch, diesen Befehl mit der Option -delete zu koppeln, wenn Sie automatisch die leeren Dateien oder Verzeichnisse löschen möchten, die von find.

zurückgegeben werden

Alle leeren Dateien in einem Verzeichnis (und Unterverzeichnissen) löschen:

$ find /path/to/search -type f -empty -delete

Finde das größte Verzeichnis oder die größte Datei

Wenn Sie schnell feststellen möchten, welche Dateien oder Verzeichnisse auf Ihrem System den meisten Platz einnehmen, können Sie find verwenden, um rekursiv zu suchen und eine sortierte Liste von Dateien und/oder Verzeichnissen nach ihrer Größe auszugeben.

So zeigen Sie die größte Datei in einem Verzeichnis an:

$ find /path/to/search -type f -printf "%s\t%p\n" | sort -n | tail -1

Beachten Sie, dass der Befehl find in zwei andere praktische Linux-Dienstprogramme einsortiert wurde:sort und tail. Der Sort-Befehl ordnet die Liste der Dateien nach ihrer Größe, und der tail-Befehl gibt nur die letzte Datei in der Liste aus, die auch die größte ist.

Sie können den tail-Befehl anpassen, wenn Sie beispielsweise die Top 5 der größten Dateien ausgeben möchten:

$ find /path/to/search -type f -printf "%s\t%p\n" | sort -n | tail -5

Alternativ können Sie den Head-Befehl verwenden, um die kleinste(n) Datei(en) zu ermitteln:

$ find /path/to/search -type f -printf "%s\t%p\n" | sort -n | head -5

Wenn Sie anstelle von Dateien nach Verzeichnissen suchen möchten, geben Sie einfach „d“ in der Typoption an. So zeigen Sie das größte Verzeichnis an:

$ find /path/to/search -type d -printf "%s\t%p\n" | sort -n | tail -1

Setuid-Set-Dateien finden

Setuid ist eine Abkürzung für „Set User ID on Execution“, was eine Dateiberechtigung ist, die es einem normalen Benutzer erlaubt, ein Programm mit eskalierten Rechten (z. B. root) auszuführen.

Dies kann aus offensichtlichen Gründen ein Sicherheitsproblem darstellen, aber diese Dateien können einfach mit dem Befehl find und einigen Optionen isoliert werden.

Der Befehl find hat zwei Optionen, die uns bei der Suche nach Dateien mit bestimmten Berechtigungen helfen:-user und -perm. Um Dateien zu finden, die von einem normalen Benutzer mit Root-Rechten ausgeführt werden können, können Sie diesen Befehl verwenden:

$ find /path/to/search -user root -perm /4000

Im obigen Screenshot haben wir die Option -exec eingefügt, um etwas mehr Ausgabe über die Dateien zu zeigen, die gefunden werden, mit. Der gesamte Befehl sieht folgendermaßen aus:

$ find /path/to/search -user root -perm /4000 -exec ls -l {} \;

Sie können in diesem Befehl auch jeden anderen Benutzer, nach dem Sie als Eigentümer suchen möchten, durch „root“ ersetzen. Oder Sie könnten nach allen Dateien mit SUID-Berechtigungen suchen und überhaupt keinen Benutzer angeben:

$ find /path/to/search -perm /4000

SGID-Set-Dateien finden

Das Suchen von Dateien mit gesetzter SGID ist fast dasselbe wie das Suchen von Dateien mit SUID, außer dass die Berechtigungen für 4000 auf 2000 geändert werden müssen:

$ find /path/to/search -perm /2000

Sie können auch nach Dateien suchen, für die sowohl SUID als auch SGID festgelegt sind, indem Sie 6000 in der Perms-Option angeben:

$ find /path/to/search -perm /6000

Listen Sie Dateien ohne Erlaubnis verweigert auf

Wenn Sie mit dem Befehl find nach Dateien suchen, müssen Sie Leseberechtigungen für die Verzeichnisse und Unterverzeichnisse haben, die Sie durchsuchen. Wenn Sie dies nicht tun, gibt find eine Fehlermeldung aus, durchsucht aber weiterhin die Verzeichnisse, für die Sie eine Berechtigung haben.

Obwohl dies in vielen verschiedenen Verzeichnissen passieren kann, wird es definitiv passieren, wenn Sie Ihr Stammverzeichnis durchsuchen.

Das bedeutet, wenn Sie versuchen, Ihre gesamte Festplatte nach einer Datei zu durchsuchen, wird der find-Befehl eine Menge Fehlermeldungen erzeugen.

Um diese Fehler zu vermeiden, können Sie die stderr-Ausgabe von find auf stdout umleiten und diese an grep weiterleiten.

$ find / -name "myfile.txt" 2>%1 | grep -v "Permission denied"

Dieser Befehl verwendet die Option -v (invers) von grep, um alle Ausgaben mit Ausnahme der Zeilen mit der Aufschrift „Permission denied.“

anzuzeigen

Geänderte Dateien innerhalb der letzten X Tage finden

Verwenden Sie die Option -mtime im Befehl find, um nach Dateien oder Verzeichnissen zu suchen, die in den letzten X Tagen geändert wurden. Es kann auch verwendet werden, um nach Dateien zu suchen, die älter als X Tage sind, oder nach Dateien, die vor genau X Tagen geändert wurden.

Hier sind einige Beispiele für die Verwendung der Option -mtime im Befehl find:

Nach allen Dateien suchen, die in den letzten 30 Tagen geändert wurden:

$ find /path/to/search -type f -mtime -30

Nach allen Dateien suchen, die vor mehr als 30 Tagen geändert wurden:

$ find /path/to/search -type f -mtime +30

Suchen Sie nach allen Dateien, die vor genau 30 Tagen geändert wurden:

$ find /path/to/search -type f -mtime 30

Wenn Sie möchten, dass der find-Befehl weitere Informationen über die gefundenen Dateien ausgibt, wie z. B. das Änderungsdatum, können Sie die Option -exec verwenden und einen ls-Befehl einfügen:

$ find /path/to/search -type f -mtime -30 -exec ls -l {} \;

Nach Zeit sortieren

Um die Ergebnisse von find nach der Änderungszeit der Dateien zu sortieren, können Sie die Option -printf verwenden, um die Zeiten sortierbar aufzulisten und diese Ausgabe an das Sortierdienstprogramm weiterzuleiten.

$ find /path/to/search -printf "%T+\t%p\n" | sort

Dieser Befehl sortiert die älteren Dateien nach neueren. Wenn Sie möchten, dass die neueren Dateien zuerst angezeigt werden, übergeben Sie einfach die Option -r (umgekehrt) zum Sortieren.

$ find /path/to/search -printf "%T+\t%p\n" | sort -r

Unterschied zwischen lokalisieren und finden

Der Befehl locate unter Linux ist eine weitere gute Möglichkeit, nach Dateien auf Ihrem System zu suchen. Es ist nicht vollgepackt mit einer Fülle von Suchoptionen wie der Find-Befehl, also ist es etwas weniger flexibel, aber es ist immer noch praktisch.

$ locate myfile.txt

Der Befehl locate funktioniert, indem er eine Datenbank durchsucht, die alle Namen der Dateien auf dem System enthält. Der Befehl updatedb aktualisiert diese Datenbank.

Da der Befehl locate keine Live-Suche aller Dateien auf dem System durchführen muss, ist er viel effizienter als der Befehl find. Aber neben den fehlenden Optionen gibt es noch einen weiteren Nachteil:Die Dateidatenbank wird nur einmal am Tag aktualisiert.

Sie können diese Dateidatenbank manuell aktualisieren, indem Sie den Befehl updatedb ausführen:

$ updatedb

Der Find-Befehl ist besonders nützlich, wenn Sie die gesamte Festplatte nach einer Datei durchsuchen müssen, da der Find-Befehl natürlich viel länger dauert, da er jedes einzelne Verzeichnis in Echtzeit durchlaufen muss.

Wenn Sie ein bestimmtes Verzeichnis durchsuchen, das bekanntermaßen nicht viele Unterverzeichnisse enthält, ist es besser, beim Find-Befehl zu bleiben.

CPU-Last des Suchbefehls

Beim Durchsuchen von vielen Verzeichnissen kann der Find-Befehl ressourcenintensiv sein. Es sollte von Natur aus wichtigeren Systemprozessen Priorität einräumen, aber wenn Sie sicherstellen müssen, dass der Befehl find weniger Ressourcen auf einem Produktionsserver beansprucht, können Sie den Befehl ionice oder nice verwenden.

Überwachen Sie die CPU-Auslastung des Find-Befehls:

$ top

Reduzieren Sie die Eingabe-/Ausgabepriorität des Suchbefehls:

$ ionice -c3 -n7 find /path/to/search -name "myfile.txt"

Reduzieren Sie die CPU-Priorität des Find-Befehls:

$ nice -n 19 find /path/to/search -name "myfile.txt"

Oder kombinieren Sie beide Dienstprogramme, um wirklich niedrige E/A und niedrige CPU-Priorität sicherzustellen:

$ nice -n 19 ionice -c2 -n7 find /path/to/search -name "myfile.txt"

Ich hoffe, Sie finden das Tutorial nützlich. Komm immer wieder.


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

  2. JQ-Befehl in Linux mit Beispielen

  3. Verwenden des Linux-Suchbefehls – Verwendung mit Beispielen

  4. So finden Sie Dateien mit dem fd-Befehl in Linux

  5. Linux-rsync-Befehl mit praktischen Beispielen

15 Linux-PS-Befehl mit Beispielen

Linux-Suchbefehl mit praktischen Beispielen

Linux-IP-Befehl mit Beispielen

So finden Sie Dateien mit dem fd-Befehl in Linux

lsof-Befehl unter Linux mit Beispielen

Linux-Comm-Befehl mit Beispielen