
Der find
command ist eines der leistungsstärksten Tools im Arsenal der Linux-Systemadministratoren. Es sucht nach Dateien und Verzeichnissen in einer Verzeichnishierarchie basierend auf einem vom Benutzer angegebenen Ausdruck und kann eine vom Benutzer angegebene Aktion für jede übereinstimmende Datei ausführen.
Sie können den find
verwenden Befehl, um nach Dateien und Verzeichnissen basierend auf ihren Berechtigungen, Typ, Datum, Eigentümerschaft, Größe und mehr zu suchen. Es kann auch mit anderen Tools wie grep
kombiniert werden oder sed
.
find
Befehlssyntax #
Die allgemeine Syntax für find
Befehl lautet wie folgt:
find [options] [path...] [expression]
- Die
options
Das Attribut steuert die Behandlung der symbolischen Links, die Debugging-Optionen und die Optimierungsmethode. - Der
path...
-Attribut definiert das Startverzeichnis oder die Startverzeichnisse, in denen find die Dateien durchsuchen wird. - Der
expression
-Attribut besteht aus Optionen, Suchmustern und Aktionen, die durch Operatoren getrennt sind.
Um nach Dateien in einem Verzeichnis zu suchen, ruft der Benutzer den find
auf Der Befehl muss Leseberechtigungen für dieses Verzeichnis haben.
Schauen wir uns das folgende Beispiel an:
find -L /var/www -name "*.js"
- Die Option
-L
(Optionen) teilt demfind
mit Befehl, symbolischen Links zu folgen. - Der
/var/www
(Pfad…) gibt das Verzeichnis an, das durchsucht wird. - Der (Ausdruck)
-name "*.js
sagtfind
um Dateien zu suchen, die mit.js
enden (JavaScript-Dateien).
Dateien nach Namen suchen #
Das Suchen von Dateien anhand des Namens ist wahrscheinlich die häufigste Verwendung von find
Befehl. Um eine Datei anhand ihres Namens zu finden, verwenden Sie den -name
Option gefolgt vom Namen der gesuchten Datei.
Zum Beispiel, um nach einer Datei mit dem Namen document.pdf
zu suchen im /home/linuxize
Verzeichnis verwenden Sie den folgenden Befehl:
find /home/linuxize -type f -name document.pdf
Um eine Suche ohne Berücksichtigung der Groß-/Kleinschreibung durchzuführen, ändern Sie den -name
Option mit -iname
:
find /home/linuxize -type f -iname document.pdf
Der obige Befehl stimmt mit „Document.pdf“, „DOCUMENT.pdf“ usw. überein.
Dateien nach Erweiterung # suchen
Das Suchen nach Dateien anhand der Erweiterung ist dasselbe wie das Suchen nach Dateien anhand des Namens. Zum Beispiel, um alle Dateien zu finden, die mit .log.gz
enden innerhalb von /var/log/nginx
Verzeichnis würden Sie Folgendes eingeben:
find /var/log/nginx -type f -name '*.log.gz'
Es ist wichtig zu erwähnen, dass Sie das Muster entweder in Anführungszeichen setzen oder das Sternchen *
maskieren müssen Symbol mit Backslash \
damit es nicht von der Shell interpretiert wird, wenn Sie das Platzhalterzeichen verwenden.
Um alle Dateien zu finden, die nicht mit dem Regex *.log.gz
übereinstimmen Sie können den -not
verwenden Möglichkeit. Zum Beispiel, um alle Dateien zu finden, die nicht auf *.log.gz
enden Sie würden verwenden:
find /var/log/nginx -type f -not -name '*.log.gz'
Dateien nach Typ # suchen
Manchmal müssen Sie möglicherweise nach bestimmten Dateitypen wie regulären Dateien, Verzeichnissen oder symbolischen Links suchen. Unter Linux ist alles eine Datei.
Um nach Dateien basierend auf ihrem Typ zu suchen, verwenden Sie den -type
Option und einen der folgenden Deskriptoren, um den Dateityp anzugeben:
f
:eine normale Dateid
:Verzeichnisl
:Symbolischer Linkc
:Zeichengeräteb
:Geräte blockierenp
:Named Pipe (FIFO)s
:Steckdose
Um beispielsweise alle Verzeichnisse im aktuellen Arbeitsverzeichnis zu finden, würden Sie Folgendes verwenden:
find . -type d
Das übliche Beispiel wäre die rekursive Änderung der Website-Dateiberechtigungen auf 644
und Verzeichnisberechtigungen auf 755
mit dem chmod
Befehl:
find /var/www/my_website -type d -exec chmod 0755 {} \;
find /var/www/my_website -type f -exec chmod 0644 {} \;
Dateien nach Größe suchen #
Um Dateien basierend auf der Dateigröße zu finden, übergeben Sie die -size
Parameter zusammen mit den Größenkriterien. Sie können die folgenden Suffixe verwenden, um die Dateigröße anzugeben:
b
:512-Byte-Blöcke (Standard)c
:Bytesw
:Zwei-Byte-Wörterk
:KilobyteM
:MegabyteG
:Gigabyte
Der folgende Befehl findet alle Dateien von genau 1024
Bytes innerhalb von /tmp
Verzeichnis:
find /tmp -type f -size 1024c
Der find
Mit dem Befehl können Sie auch nach Dateien suchen, die größer oder kleiner als eine bestimmte Größe sind.
Im folgenden Beispiel suchen wir nach allen Dateien kleiner als 1MB
innerhalb des aktuellen Arbeitsverzeichnisses. Beachten Sie das Minus -
Symbol vor dem Größenwert:
find . -type f -size -1M
Wenn Sie nach Dateien mit einer Größe von mehr als 1MB
suchen möchten , dann müssen Sie das Pluszeichen +
verwenden Symbol:
find . -type f -size +1M
Sie können sogar nach Dateien innerhalb eines Größenbereichs suchen. Der folgende Befehl findet alle Dateien zwischen 1
und 2MB
:
find . -type f -size +1M -size 21M
Dateien nach Änderungsdatum # suchen
Der find
Der Befehl kann auch nach Dateien basierend auf ihrer letzten Änderung, ihrem letzten Zugriff oder ihrer letzten Änderungszeit suchen.
Verwenden Sie wie bei der Suche nach Größe die Plus- und Minuszeichen für „größer als“ oder „kleiner als“.
Nehmen wir an, Sie haben vor ein paar Tagen eine der Dovecot-Konfigurationsdateien geändert, aber Sie haben vergessen, welche. Sie können alle Dateien unter /etc/dovecot/conf.d
einfach filtern Verzeichnis, das mit .conf
endet und wurde in den letzten fünf Tagen geändert:
find /etc/dovecot/conf.d -name "*.conf" -mtime 5
Hier ist ein weiteres Beispiel für das Filtern von Dateien basierend auf dem Änderungsdatum mit dem -daystart
Möglichkeit. Der folgende Befehl listet alle Dateien in /home
auf Verzeichnis, das geändert wurde 30
oder vor mehr Tagen:
find /home -mtime +30 -daystart
Dateien nach Berechtigungen suchen #
Die -perm
Mit dieser Option können Sie anhand der Dateiberechtigungen nach Dateien suchen.
Zum Beispiel, um alle Dateien mit den Berechtigungen von genau 775
zu finden innerhalb von /var/www/html
Verzeichnis würden Sie verwenden:
find /var/www/html -perm 644
Sie können dem numerischen Modus das Minus -
voranstellen oder Schrägstrich /
.
Beim Schrägstrich /
als Präfix verwendet wird, müssen mindestens für eine Kategorie (Benutzer, Gruppe oder andere) mindestens die entsprechenden Bits gesetzt sein, damit eine Datei übereinstimmt.
Betrachten Sie den folgenden Beispielbefehl:
find . -perm /444
Der obige Befehl gleicht alle Dateien mit Leseberechtigungen ab, die entweder für Benutzer, Gruppen oder andere festgelegt wurden.
Wenn minus -
als Präfix verwendet wird, müssen mindestens die angegebenen Bits gesetzt sein, damit die Datei übereinstimmt. Der folgende Befehl sucht nach Dateien, die Lese- und Schreibrechte für den Eigentümer und die Gruppe haben und von anderen Benutzern gelesen werden können:
find . -perm -664
Dateien nach Eigentümer # suchen
Um Dateien zu finden, die einem bestimmten Benutzer oder einer bestimmten Gruppe gehören, verwenden Sie den -user
und -group
Optionen.
Zum Beispiel, um nach allen Dateien und Verzeichnissen zu suchen, die dem Benutzer linuxize
gehören , würden Sie Folgendes ausführen:
find / -user linuxize
Hier ist ein reales Beispiel. Angenommen, Sie möchten alle Dateien finden, die dem Benutzer www-data
gehören und ändern Sie den Besitz der übereinstimmenden Dateien von www-data
zu nginx
:
find / -user www-data -type f -exec chown nginx {} \;
Dateien suchen und löschen #
Um alle übereinstimmenden Dateien zu löschen, hängen Sie den -delete
an Option am Ende des Übereinstimmungsausdrucks.
Stellen Sie sicher, dass Sie diese Option nur verwenden, wenn Sie sicher sind, dass das Ergebnis mit den Dateien übereinstimmt, die Sie löschen möchten. Es ist immer eine gute Idee, die übereinstimmenden Dateien auszudrucken, bevor Sie -delete
verwenden Option.
Zum Beispiel, um alle Dateien zu löschen, die mit .temp
enden aus /var/log/
, würden Sie verwenden:
find /var/log/ -name `*.temp` -delete
Verwenden Sie das -delete
Option mit äußerster Vorsicht. Der find
Befehl als Ausdruck ausgewertet wird und wenn Sie den -delete
hinzufügen Option zuerst, löscht der Befehl alles unterhalb der von Ihnen angegebenen Startpunkte.
Wenn es um Verzeichnisse geht, find
kann nur leere Verzeichnisse löschen, genauso wie rmdir
.
Schlussfolgerung #
Wir haben Ihnen gezeigt, wie Sie find
verwenden Befehl mit verschiedenen Optionen und Kriterien.
Dieser Artikel soll Ihnen ein grundlegendes Verständnis dafür vermitteln, wie Sie Dateien auf Ihren Linux-Systemen finden. Sie können auch find
besuchen Manpage und lesen Sie mehr über alle anderen leistungsstarken Optionen von find
Befehl.
Wenn Sie Fragen oder Anmerkungen haben, hinterlassen Sie bitte unten einen Kommentar.