So finden Sie alle Dateien mit einem bestimmten Text mit der Linux-Shell
Objektiv
Der folgende Artikel enthält einige nützliche Tipps, wie Sie alle Dateien in einem bestimmten Verzeichnis oder gesamten Dateisystem finden können, die ein bestimmtes Wort oder eine bestimmte Zeichenfolge enthalten.
Schwierigkeit
LEICHT
Konventionen
- # – erfordert, dass bestimmte Linux-Befehle mit Root-Rechten ausgeführt werden, entweder direkt als Root-Benutzer oder mit dem Befehl
sudo - $ – erfordert, dass bestimmte Linux-Befehle als normaler, nicht privilegierter Benutzer ausgeführt werden
Beispiele
Alle Dateien mit einer bestimmten Zeichenfolge nicht-rekursiv suchen
Das erste Befehlsbeispiel sucht in allen Dateien im Verzeichnis /etc/ nach einer Zeichenfolgenstreckung, während alle Unterverzeichnisse ausgeschlossen werden:
grep -s stretch /etc/*
/etc/os-release:PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
/etc/os-release:VERSION="9 (stretch)"
Die Option -s grep unterdrückt Fehlermeldungen über nicht vorhandene oder unlesbare Dateien. Die Ausgabe zeigt sowohl Dateinamen an als auch die tatsächliche Zeile mit der angeforderten Zeichenfolge.
Rekursiv nach allen Dateien mit einer bestimmten Zeichenfolge suchen
Der obige Befehl hat alle Unterverzeichnisse ausgelassen. Rekursiv zu suchen bedeutet, auch alle Unterverzeichnisse zu durchlaufen. Der folgende Linux-Befehl sucht in allen Dateien im Verzeichnis /etc/ einschließlich aller Unterverzeichnisse nach einem String-Stretch:
grep -R stretch /etc/*
/etc/apt/sources.list:# deb cdrom:[Debian GNU/Linux testing _Stretch_ - Official Snapshot amd64 NETINST Binary-1 20170109-05:56]/ stretch main
/etc/apt/sources.list:#deb cdrom:[Debian GNU/Linux testing _Stretch_ - Official Snapshot amd64 NETINST Binary-1 20170109-05:56]/ stretch main
/etc/apt/sources.list:deb http://ftp.au.debian.org/debian/ stretch main
/etc/apt/sources.list:deb-src http://ftp.au.debian.org/debian/ stretch main
/etc/apt/sources.list:deb http://security.debian.org/debian-security stretch/updates main
/etc/apt/sources.list:deb-src http://security.debian.org/debian-security stretch/updates main
/etc/dictionaries-common/words:backstretch
/etc/dictionaries-common/words:backstretch's
/etc/dictionaries-common/words:backstretches
/etc/dictionaries-common/words:homestretch
/etc/dictionaries-common/words:homestretch's
/etc/dictionaries-common/words:homestretches
/etc/dictionaries-common/words:outstretch
/etc/dictionaries-common/words:outstretched
/etc/dictionaries-common/words:outstretches
/etc/dictionaries-common/words:outstretching
/etc/dictionaries-common/words:stretch
/etc/dictionaries-common/words:stretch's
/etc/dictionaries-common/words:stretched
/etc/dictionaries-common/words:stretcher
/etc/dictionaries-common/words:stretcher's
/etc/dictionaries-common/words:stretchers
/etc/dictionaries-common/words:stretches
/etc/dictionaries-common/words:stretchier
/etc/dictionaries-common/words:stretchiest
/etc/dictionaries-common/words:stretching
/etc/dictionaries-common/words:stretchy
/etc/grub.d/00_header:background_image -m stretch `make_system_path_relative_to_its_root "$GRUB_BACKGROUND"`
/etc/os-release:PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
/etc/os-release:VERSION="9 (stretch)"
Suche nach allen Dateien, die ein bestimmtes Wort enthalten
Das obige Beispiel für einen grep-Befehl listet alle Dateien auf, die die Zeichenkette stretch enthalten. Das heißt, die Linien mit Dehnungen, gedehnt usw. werden ebenfalls angezeigt. Verwenden Sie die Option -w von grep, um nur ein bestimmtes Wort anzuzeigen:
grep -Rw stretch /etc/*
/etc/apt/sources.list:# deb cdrom:[Debian GNU/Linux testing _Stretch_ - Official Snapshot amd64 NETINST Binary-1 20170109-05:56]/ stretch main
/etc/apt/sources.list:#deb cdrom:[Debian GNU/Linux testing _Stretch_ - Official Snapshot amd64 NETINST Binary-1 20170109-05:56]/ stretch main
/etc/apt/sources.list:deb http://ftp.au.debian.org/debian/ stretch main
/etc/apt/sources.list:deb-src http://ftp.au.debian.org/debian/ stretch main
/etc/apt/sources.list:deb http://security.debian.org/debian-security stretch/updates main
/etc/apt/sources.list:deb-src http://security.debian.org/debian-security stretch/updates main
/etc/dictionaries-common/words:stretch
/etc/dictionaries-common/words:stretch's
/etc/grub.d/00_header:background_image -m stretch `make_system_path_relative_to_its_root "$GRUB_BACKGROUND"`
/etc/os-release:PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
/etc/os-release:VERSION="9 (stretch)"
Listet nur Dateinamen auf, die einen bestimmten Text enthalten
Die obigen Befehle können eine unnötige Ausgabe erzeugen. Das nächste Beispiel zeigt nur rekursiv alle Dateinamen an, die die Zeichenkette stretch im Verzeichnis /etc/ enthalten:
grep -Rl stretch /etc/*
/etc/apt/sources.list
/etc/dictionaries-common/words
/etc/grub.d/00_header
/etc/os-release
Durchführen einer Suche ohne Berücksichtigung der Groß-/Kleinschreibung
Bei allen Suchen wird standardmäßig zwischen Groß- und Kleinschreibung unterschieden, was bedeutet, dass bei jeder Suche nach einer Zeichenfolgendehnung nur Dateien angezeigt werden, die die exakte Übereinstimmung von Groß- und Kleinbuchstaben enthalten. Durch die Verwendung der grep-Option -i listet der Befehl auch alle Zeilen auf, die Stretch, STRETCH, StReTcH usw. enthalten, so dass eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung durchgeführt werden kann.
grep -Ril stretch /etc/*
/etc/apt/sources.list
/etc/dictionaries-common/default.hash
/etc/dictionaries-common/words
/etc/grub.d/00_header
/etc/os-release
Ein- oder Ausschließen bestimmter Dateinamen aus der Suche
Mit dem Befehl grep ist es auch möglich, nur bestimmte Dateien in die Suche einzubeziehen. Zum Beispiel möchten wir nur nach einem bestimmten Text/String in Konfigurationsdateien mit der Erweiterung .conf suchen. Das nächste Beispiel findet alle Dateien mit der Erweiterung .conf im Verzeichnis /etc, das die Zeichenkette bash enthält:
grep -Ril bash /etc/*.conf
OR
grep -Ril --include=\*.conf bash /etc/*
/etc/adduser.conf
Auf ähnliche Weise können wir mit der Option --exclude alle spezifischen Dateinamen ausschließen:
grep -Ril --exclude=\*.conf bash /etc/*
/etc/alternatives/view
/etc/alternatives/vim
/etc/alternatives/vi
/etc/alternatives/vimdiff
/etc/alternatives/rvim
/etc/alternatives/ex
/etc/alternatives/rview
/etc/bash.bashrc
/etc/bash_completion.d/grub
/etc/cron.daily/apt-compat
/etc/cron.daily/exim4-base
/etc/dictionaries-common/default.hash
/etc/dictionaries-common/words
/etc/inputrc
/etc/passwd
/etc/passwd-
/etc/profile
/etc/shells
/etc/skel/.profile
/etc/skel/.bashrc
/etc/skel/.bash_logout
Bestimmte Verzeichnisse von der Suche ausschließen
Ähnlich wie bei Dateien kann grep auch bestimmte Verzeichnisse von der Suche ausschließen. Verwenden Sie die Option --exclude-dir, um das Verzeichnis von der Suche auszuschließen. Das folgende Suchbeispiel findet alle Dateien, die die Zeichenkette stretch im Verzeichnis /etc enthalten, und schließt /etc/grub.d von der Suche aus:
grep --exclude-dir=/etc/grub.d -Rwl stretch /etc/*
/etc/apt/sources.list
/etc/dictionaries-common/words
/etc/os-release
Zeigen Sie eine Zeilennummer an, die die gesuchte Zeichenfolge enthält
Durch die Verwendung der Option -n liefert grep auch eine Information über eine Zeilennummer, in der die spezifische Zeichenkette gefunden wurde:
grep -Rni bash /etc/*.conf
/etc/adduser.conf:6:DSHELL=/bin/bash
Sucht nach allen Dateien, die keine bestimmte Zeichenfolge enthalten
Im letzten Beispiel wird die Option -v verwendet, um alle Dateien aufzulisten, die KEIN bestimmtes Schlüsselwort enthalten. Die folgende Suche listet beispielsweise alle Dateien im Verzeichnis /etc/ auf, die keine Zeichenkette stretch enthalten:
grep -Rlv stretch /etc/*