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

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


Foto mit freundlicher Genehmigung von Qole Pejorian

Abgesehen von der grundlegenden Operation, nach Dateien in einer Verzeichnisstruktur zu suchen, können Sie mit dem Befehl find auch mehrere praktische Operationen ausführen, die Ihre Reise auf der Befehlszeile vereinfachen.

Lassen Sie uns in diesem Artikel 15 praktische Beispiele für den Linux-Suchbefehl betrachten, die sowohl für Neulinge als auch für Experten sehr nützlich sein werden.


Erstellen Sie zuerst die folgenden leeren Beispieldateien in Ihrem Home-Verzeichnis, um einige der unten erwähnten find-Befehlsbeispiele auszuprobieren.

# vim create_sample_files.sh
touch MybashProgram.sh
touch mycprogram.c
touch MyCProgram.c
touch Program.c

mkdir backup
cd backup

touch MybashProgram.sh
touch mycprogram.c
touch MyCProgram.c
touch Program.c

# chmod +x create_sample_files.sh

# ./create_sample_files.sh

# ls -R
.:
backup                  MybashProgram.sh  MyCProgram.c
create_sample_files.sh  mycprogram.c      Program.c

./backup:
MybashProgram.sh  mycprogram.c  MyCProgram.c  Program.c

1. Dateien anhand des Namens suchen

Dies ist eine grundlegende Verwendung des Find-Befehls. Dieses Beispiel findet alle Dateien mit dem Namen – MyCProgram.c im aktuellen Verzeichnis und allen seinen Unterverzeichnissen.

# find -name "MyCProgram.c"
./backup/MyCProgram.c
./MyCProgram.c

2. Finden Sie Dateien unter Verwendung des Namens und ignorieren Sie die Groß-/Kleinschreibung

Dies ist eine grundlegende Verwendung des Find-Befehls. Dieses Beispiel findet alle Dateien mit dem Namen – MyCProgram.c (Groß-/Kleinschreibung ignorieren) im aktuellen Verzeichnis und allen seinen Unterverzeichnissen.

# find -iname "MyCProgram.c"
./mycprogram.c
./backup/mycprogram.c
./backup/MyCProgram.c
./MyCProgram.c

3. Beschränken Sie die Suche auf eine bestimmte Verzeichnisebene mit mindepth und maxdepth

Suchen Sie die passwd-Datei unter allen Unterverzeichnissen, beginnend mit dem Stammverzeichnis.

# find / -name passwd
./usr/share/doc/nss_ldap-253/pam.d/passwd
./usr/bin/passwd
./etc/pam.d/passwd
./etc/passwd


Suchen Sie die passwd-Datei unter root und eine Ebene tiefer. (d. h. Root – Ebene 1 und ein Unterverzeichnis – Ebene 2)

# find -maxdepth 2 -name passwd
./etc/passwd


Suchen Sie die passwd-Datei unter root und zwei Ebenen tiefer. (d. h. root — Ebene 1 und zwei Unterverzeichnisse — Ebene 2 und 3)

# find / -maxdepth 3 -name passwd
./usr/bin/passwd
./etc/pam.d/passwd
./etc/passwd


Suchen Sie die Passwortdatei zwischen Unterverzeichnisebene 2 und 4.

# find -mindepth 3 -maxdepth 5 -name passwd
./usr/bin/passwd
./etc/pam.d/passwd

4. Ausführen von Befehlen für die vom Find-Befehl gefundenen Dateien.

Im folgenden Beispiel berechnet der find-Befehl die md5-Summe aller Dateien mit dem Namen MyCProgram.c (Groß-/Kleinschreibung ignorieren). {} wird durch den aktuellen Dateinamen ersetzt.

# find -iname "MyCProgram.c" -exec md5sum {} \;
d41d8cd98f00b204e9800998ecf8427e  ./mycprogram.c
d41d8cd98f00b204e9800998ecf8427e  ./backup/mycprogram.c
d41d8cd98f00b204e9800998ecf8427e  ./backup/MyCProgram.c
d41d8cd98f00b204e9800998ecf8427e  ./MyCProgram.c

5. Invertieren des Spiels.

Zeigt die Dateien oder Verzeichnisse an, deren Name nicht MyCProgram.c ist. Da die maximale Tiefe 1 ist, wird dies nur im aktuellen Verzeichnis angezeigt.

# find -maxdepth 1 -not -iname "MyCProgram.c"
.
./MybashProgram.sh
./create_sample_files.sh
./backup
./Program.c

6. Suchen von Dateien anhand ihrer Inode-Nummer.

Jede Datei hat eine eindeutige Inode-Nummer, mit der wir diese Datei identifizieren können. Erstellen Sie zwei Dateien mit ähnlichem Namen. d.h. eine Datei mit einem Leerzeichen am Ende.

# touch "test-file-name"

# touch "test-file-name "
[Note: There is a space at the end]

# ls -1 test*
test-file-name
test-file-name


Aus der ls-Ausgabe können Sie nicht erkennen, welche Datei das Leerzeichen am Ende hat. Mit der Option -i können Sie die Inode-Nummer der Datei anzeigen, die für diese beiden Dateien unterschiedlich sein wird.

# ls -i1 test*
16187429 test-file-name
16187430 test-file-name


Sie können die Inode-Nummer in einem Suchbefehl wie unten gezeigt angeben. In diesem Beispiel benennt der Befehl find eine Datei unter Verwendung der Inode-Nummer um.

# find -inum 16187430 -exec mv {} new-test-file-name \;

# ls -i1 *test*
16187430 new-test-file-name
16187429 test-file-name


Sie können diese Technik verwenden, wenn Sie einige Operationen mit Dateien durchführen möchten, die schlecht benannt sind, wie im folgenden Beispiel gezeigt. Beispielsweise enthält die Datei mit dem Namen — file?.txt ein Sonderzeichen. Wenn Sie versuchen, „rm file?.txt“ auszuführen, werden alle folgenden drei Dateien entfernt. Befolgen Sie also die nachstehenden Schritte, um nur die Datei „file?.txt“ zu löschen.

# ls
file1.txt  file2.txt  file?.txt


Finden Sie die Inode-Nummern jeder Datei.

# ls -i1
804178 file1.txt
804179 file2.txt
804180 file?.txt


Verwenden Sie die Inode-Nummer, um die Datei zu entfernen, die Sonderzeichen enthielt, wie unten gezeigt.

# find -inum 804180 -exec rm {} \;

# ls
file1.txt  file2.txt
[Note: The file with name "file?.txt" is now removed]

7. Datei anhand der Dateiberechtigungen finden

Folgende Operationen sind möglich.

  • Dateien finden, die genau der Berechtigung entsprechen
  • Überprüfen, ob die gegebene Berechtigung passt, unabhängig von anderen Berechtigungsbits
  • Suche mit oktaler / symbolischer Darstellung


Nehmen wir für dieses Beispiel an, dass das Verzeichnis die folgenden Dateien enthält. Bitte beachten Sie, dass die Dateiberechtigungen für diese Dateien unterschiedlich sind.

# ls -l
total 0
-rwxrwxrwx 1 root root 0 2009-02-19 20:31 all_for_all
-rw-r--r-- 1 root root 0 2009-02-19 20:30 everybody_read
---------- 1 root root 0 2009-02-19 20:31 no_for_all
-rw------- 1 root root 0 2009-02-19 20:29 ordinary_file
-rw-r----- 1 root root 0 2009-02-19 20:27 others_can_also_read
----r----- 1 root root 0 2009-02-19 20:27 others_can_only_read


Dateien finden, die Leseberechtigung für die Gruppierung haben. Verwenden Sie den folgenden Befehl, um alle Dateien in Ihrem Home-Verzeichnis zu finden, die von der Welt gelesen werden können, unabhängig von anderen Berechtigungen für diese Datei.

# find . -perm -g=r -type f -exec ls -l {} \;
-rw-r--r-- 1 root root 0 2009-02-19 20:30 ./everybody_read
-rwxrwxrwx 1 root root 0 2009-02-19 20:31 ./all_for_all
----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read
-rw-r----- 1 root root 0 2009-02-19 20:27 ./others_can_also_read


Dateien finden, die nur Leseberechtigung für die Gruppe haben.

# find . -perm g=r -type f -exec ls -l {} \;
----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read


Dateien finden, die nur Leseberechtigung haben, um gruppiert zu werden [Suche nach Oktal]

# find . -perm 040 -type f -exec ls -l {} \;
----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read

8. Finden Sie alle leeren Dateien (Null-Byte-Datei) in Ihrem Home-Verzeichnis und seinem Unterverzeichnis

Die meisten Dateien der folgenden Befehlsausgabe sind Sperrdateien und Platzhalter, die von anderen Anwendungen erstellt wurden.

# find ~ -empty


Alle leeren Dateien nur in Ihrem Home-Verzeichnis auflisten.

# find . -maxdepth 1 -empty


Nur die nicht versteckten leeren Dateien nur im aktuellen Verzeichnis auflisten.

# find . -maxdepth 1 -empty -not -name ".*"

9. Finden der 5 größten Dateien

Der folgende Befehl zeigt die 5 größten Dateien 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

10. Finden der Top 5 kleinen Dateien

Die Technik ist die gleiche wie bei der Suche nach größeren Dateien, aber der einzige Unterschied in der Sortierung ist die aufsteigende Reihenfolge.

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


Im obigen Befehl werden Sie höchstwahrscheinlich nur die NULL-Byte-Dateien (leere Dateien) sehen. Sie können also den folgenden Befehl verwenden, um die kleineren Dateien außer den NULL-Byte-Dateien aufzulisten.

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

11. Suchen Sie Dateien anhand des Dateityps mit der Option -type

Finde nur die Socket-Dateien.

# find . -type s


Alle Verzeichnisse finden

# find . -type d


Nur die normalen Dateien finden

# find . -type f


Alle versteckten Dateien finden

# find . -type f -name ".*"


Alle versteckten Verzeichnisse finden

# find -type d -name ".*"

12. Finden Sie Dateien, indem Sie sie mit der Änderungszeit anderer Dateien vergleichen.

Dateien anzeigen, die nach der angegebenen Datei geändert wurden. Der folgende find-Befehl zeigt alle Dateien an, die nach der gewöhnlichen_Datei erstellt/geändert werden.

# ls -lrt
total 0
-rw-r----- 1 root root 0 2009-02-19 20:27 others_can_also_read
----r----- 1 root root 0 2009-02-19 20:27 others_can_only_read
-rw------- 1 root root 0 2009-02-19 20:29 ordinary_file
-rw-r--r-- 1 root root 0 2009-02-19 20:30 everybody_read
-rwxrwxrwx 1 root root 0 2009-02-19 20:31 all_for_all
---------- 1 root root 0 2009-02-19 20:31 no_for_all

# find -newer ordinary_file
.
./everybody_read
./all_for_all
./no_for_all

13. Dateien nach Größe suchen

Mit der Option -size können Sie Dateien nach Größe finden.

Dateien finden, die größer als die angegebene Größe sind

# find ~ -size +100M


Dateien finden, die kleiner als die angegebene Größe sind

# find ~ -size -100M


Dateien finden, die genau der angegebenen Größe entsprechen

# find ~ -size 100M


Hinweis:– bedeutet weniger als die angegebene Größe, + bedeutet mehr als die angegebene Größe, und kein Symbol bedeutet exakt angegebene Größe.

14. Alias ​​für häufige Suchvorgänge erstellen

Wenn Sie etwas ziemlich nützlich finden, können Sie es als Alias ​​verwenden. Und führen Sie es aus, wann immer Sie wollen.


Entfernen Sie regelmäßig die Dateien mit dem Namen a.out.

# alias rmao="find . -iname a.out -exec rm {} \;"
# rmao


Entfernen Sie die vom C-Programm generierten Kerndateien.

# alias rmc="find . -iname core -exec rm {} \;"
# rmc

15. Entfernen Sie große Archivdateien mit dem Befehl find

Der folgende Befehl entfernt *.zip-Dateien, die über 100 MB groß sind.

# find / -type f -name *.zip -size +100M -exec rm -i {} \;"

Entfernen Sie alle *.tar-Dateien, die größer als 100 MB sind, mit dem Alias ​​rm100m (Remove 100M). Verwenden Sie ähnliche Konzepte und erstellen Sie Aliasnamen wie rm1g, rm2g, rm5g, um Dateien mit einer Größe von mehr als 1 GB, 2 GB bzw. 5 GB zu entfernen.

# alias rm100m="find / -type f -name *.tar -size +100M -exec rm -i {} \;"
# alias rm1g="find / -type f -name *.tar -size +1G -exec rm -i {} \;"
# alias rm2g="find / -type f -name *.tar -size +2G -exec rm -i {} \;"
# alias rm5g="find / -type f -name *.tar -size +5G -exec rm -i {} \;"

# rm100m
# rm1g
# rm2g
# rm5g

Befehlsbeispiele finden, zweiter Teil

Wenn Ihnen dieser Mommy-Artikel über den Find-Befehl gefallen hat, vergessen Sie nicht, sich den Daddy-Artikel des Find-Befehls anzusehen – Daddy, ich habe ihn gefunden!, 15 fantastische Linux-Find-Befehlsbeispiele (Teil 2)

Tolle Linux-Artikel

Es folgen einige tolle 15 Beispiele Artikel, die Sie möglicherweise hilfreich finden.

  • 15 Beispiele zur Beherrschung der Linux-Befehlszeilengeschichte
  • Unix LS-Befehl:15 praktische Beispiele
  • Bekomme den Grep in den Griff! – 15 praktische Grep-Befehlsbeispiele
  • Linux Crontab:15 fantastische Cron-Job-Beispiele

Linux
  1. cp-Befehl unter Linux:7 praktische Beispiele

  2. Linux-Shutdown-Befehl:5 praktische Beispiele

  3. 5 praktische Beispiele des dd-Befehls unter Linux

  4. 10 praktische Beispiele für Linux-nm-Befehle

  5. Finden Sie Befehlsbeispiele in Linux

Die 50 praktischen Beispiele des SED-Befehls in Linux

15 Praktische Beispiele für den Rsync-Befehl unter Linux

5 praktische Beispiele für Tail-Befehle unter Linux

Echo-Befehl unter Linux:7 praktische Beispiele

Praktischer Ping-Befehl in Linux-Beispielen

Papa, ich habe es gefunden!, 15 fantastische Beispiele für Linux-Suchbefehle (Teil 2)