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

grep-Grundlagen

Dieser Artikel stellt einige Tools vor, insbesondere grep , ein Linux®-Befehlszeilentool, mit dem Sie Verzeichnisse oder Dateien durchsuchen können, die mit angegebenen regulären Ausdrücken übereinstimmen.

Was ist grep ?

Offizielle Antwort:

grep durchsucht die benannten Eingabedateien (oder die Standardeingabe, wenn Sie keine Datei angeben oder einen einzelnen Bindestrich verwenden (- ) als Dateiname) für Zeilen, die eine Übereinstimmung mit dem angegebenen Muster enthalten. Standardmäßig grep druckt die passenden Zeilen.

Nettere Antwort:

Durchsuchen Sie eine Datei, ein Verzeichnis oder eine Ausgabe nach etwas Bestimmtem, ähnlich wie mit Strg + f unter Windows®. Verwenden Sie diese Funktion, um genau das zu erreichen, was Sie brauchen.

Grundlagen

Oft ist der einfachste Weg, um zu zeigen, wie ein Befehl funktioniert, anhand von Beispielen.

Sie können alle Benutzer in /etc/passwd sehen Datei mit dem folgenden Befehl:

# cat /etc/passwd
rack❌1001:1001::/home/rack:/bin/bash
apache❌48:48:Apache:/usr/share/httpd:/sbin/nologin
mysql❌27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
sher❌1002:1002::/home/sher:/bin/bash

Verwenden von grep , können Sie diese Liste eingrenzen, um einen einzelnen Benutzer zu finden.

Suchen Sie einen bestimmten Benutzer :

Listen Sie die Benutzer auf, aber filtern Sie die Ausgabe, die nur die Zeile mit sher anzeigt darin.

# cat /etc/passwd | grep 'sher'
sher❌1002:1002::/home/sher:/bin/bash

Oder finden Sie denselben Benutzer mit einem einzigen Befehl:

# grep 'sher' /etc/passw
rack❌1001:1001::/home/rack:/bin/bash
sher❌1002:1002::/home/sher:/bin/bash

Suchen Sie im folgenden Beispiel alle Benutzer mit Bash-Zugriff:

# grep 'bash' /etc/passwd
rack❌1001:1001::/home/rack:/bin/bash
sher❌1002:1002::/home/sher:/bin/bash

Flaggen

Wie die meisten Linux-Befehle ist grep verwendet Flags, normalerweise einen oder mehrere Buchstaben, denen ein oder mehrere Bindestriche vorangestellt sind, um zusätzliche Funktionen hinzuzufügen.

-v :Alles anzeigen, was das angegebene Suchmuster nicht enthält:

# grep -v 'nologin' /etc/passwd
rack❌1001:1001::/home/rack:/bin/bash
sher❌1002:1002::/home/sher:/bin/bash

-i :Übereinstimmungen anzeigen, Groß-/Kleinschreibung ignorieren, was nützlich ist, wenn Sie nicht genau wissen, was Sie brauchen:

# grep -i 'SHER' /etc/passwd
sher❌1002:1002::/home/sher:/bin/bash

Nach mehreren Mustern suchen

grep verwendet das Pipe-Symbol (| ) bedeutet oder So können Sie nach mehr als einer Sache gleichzeitig suchen. Verwenden Sie eine der folgenden Methoden, um nach mehreren Dingen gleichzeitig zu suchen:

\ :Escapezeichen für das nächste Zeichen, eine Pipe (| ), sodass es als oder arbeiten kann :

# grep 'sher\|rack' /etc/passwd
rack❌1001:1001::/home/rack:/bin/bash
sher❌1002:1002::/home/sher:/bin/bash

-E :Interpretiert Sonderzeichen wie | als oder :

# grep -E 'sher|rack' /etc/passwd
rack❌1001:1001::/home/rack:/bin/bash
sher❌1002:1002::/home/sher:/bin/bash

Der egrep Befehl macht dasselbe:

# egrep 'sher|rack' /etc/passwd
rack❌1001:1001::/home/rack:/bin/bash
sher❌1002:1002::/home/sher:/bin/bash

Flags kombinieren

Sie können verschiedene Flags in Kombination verwenden, um eine Suche zu verfeinern.

Das folgende Beispiel zeigt alle Benutzer, die nicht sher sind oder Rack ,unabhängig vom Fall des Musters des Dateiinhalts:

# egrep -vi 'SHER|RACK' /etc/passwd

Praxisbeispiele

Die folgenden Abschnitte behandeln andere Verwendungen für grep und andere nützliche Befehle vorstellen.

Kommentare ignorieren

Unter Linux kommentieren Sie Zeilen aus, indem Sie das Pfund-Symbol (# ) am Zeilenanfang. Auf diese Weise können Sie Ihre eigenen Notizen hinzufügen, und Skripte oder Programme ignorieren die Kommentare und führen diese Zeilen nicht aus.

Um Dateien anzuzeigen, die diese Kommentare ignorieren, verwenden Sie den folgenden Befehl:

# grep -v ^'#' /file

Sie können sogar ein grep ausführen auf einem anderen grep Befehl.

Listen Sie beispielsweise eine Datei auf, ignorieren Sie kommentierte Zeilen, und suchen Sie dann nach etwas Bestimmtem:

# grep -v ^'#' /file | grep 'hello'

Suchverlauf

Die meisten Linux-Systeme führen ein Protokoll der ausgeführten Befehle, auf das Sie mit dem Befehl history zugreifen können . Wenn Sie history kombinieren mit grep , können Sie sehr effektiv untersuchen, was bisher auf Ihrem System ausgeführt wurde.

Überprüfen Sie das passwd Befehle laufen und andere Befehle, die das passwd enthalten Muster:

# history | grep 'passwd'

Befehle suchen, die an einem bestimmten Tag ausgeführt werden:

# history | grep '2021-05-10'

Überprüfen Sie, welche Befehle zu einem bestimmten Zeitpunkt ausgeführt wurden:

# history | grep '2021-05-10 11:00:'

Ports und Root-Login prüfen

Listen Sie den Webverkehr auf, der auf den Ports 80 läuft und 443 :

# netstat -plnt | egrep '80|443'

Sie können ^ verwenden in einem grep Befehl, um nur die Zeilen anzuzeigen, die mit Ihrem Suchmuster beginnen.

Führen Sie beispielsweise den folgenden Befehl aus, um zu prüfen, ob das System root-Anmeldungen zulässt:

# grep ^'Permit' /etc/ssh/sshd_config

Suchprotokolle mit Head und Tail

Verwenden Sie top um die ersten zehn Zeilen des Protokolls der Anmeldeversuche anzuzeigen:

# head /var/log/secure

Verwenden Sie tail um die Zeilen am Ende des Protokolls der Anmeldeversuche anzuzeigen:

# tail /var/log/secure

Verwenden Sie den last Befehl, um die ersten zehn Zeilen der letzten Anmeldungen anzuzeigen:

# last | head -10

Verwenden Sie das tail -f um eine Datei in Echtzeit wachsen zu sehen. Sie können beispielsweise die letzten Anmeldeversuche sehen und laufende Versuche beobachten. Wenn jemand versucht, sich anzumelden, können Sie dies mit dem folgenden Befehl sehen:

# tail -f /var/log/secure
Ctrl + C to exit

Andere Tools

Sie können mit Ihren neu erworbenen Fähigkeiten experimentieren, indem Sie die Tools in diesem Abschnitt verwenden.

vim oder nano

vi , vim , und nano sind die gebräuchlichsten Texteditoren in Linux. Sie können sie verwenden, um eine Datei zu bearbeiten, ähnlich wie Notepad in Windows.

Öffnen und erstellen Sie eine neue Datei, test :

# vim /test
Aktionen Tastenfolge Erklärung
So beginnen Sie mit der Eingabe neuer Inhalte: i Bereiten Sie das Einfügen von Text vor
Beenden ohne Speichern: Esc :q! Einfügemodus verlassen und beenden
Zum Beenden und Speichern: Esc :wq! Einfügemodus verlassen, schreiben und beenden

Echo

echo ist ein einfacher Befehl, der Linux anweist, das zu wiederholen, was Sie gerade eingegeben haben. Dies ist effektiv zum Testen von grep Befehle, ohne zuerst eine neue Datei zu erstellen.

Sagen Sie zum Beispiel Hallo Anzeige:

# echo 'hello'
hello

Zeigen Sie Hallo an und suchen Sie nach den mittleren Buchstaben:

# echo 'hello' | grep 'ell'
hello

Sie können sogar echo verwenden um mehrere Zeilen anzuzeigen, indem Sie -e verwenden und \n um neue Zeilen hinzuzufügen.

Zeigen Sie Hallo an und ho in separaten Zeilen:

# echo -e 'hi\nho'
hi
ho

Zeigen Sie Hallo an und ho in separaten Zeilen und suchen Sie nach hi :

# echo -e 'hi\nho' | grep 'hi'
hi

gesendet

Wie grep , sed hat viele Verwendungsmöglichkeiten, aber Sie verwenden diesen Befehl hauptsächlich, um nach bestimmten Inhalten zu suchen und diese zu ersetzen. Hier sind einige grundlegende Beispiele dafür, wie Sie bestimmte Zeilen hervorheben können:

Verwenden Sie zuerst vim um eine Datei zu erstellen:

# vim /test

Wenn der Editor geöffnet wird, geben Sie die folgenden Zeilen ein:

1 Hi
2 How
3 Are
4 You

Neue Datei anzeigen:

# cat test
1 Hi
2 How
3 Are
4 You

Verwenden Sie sed um alles außer der ersten Zeile zurückzugeben:

# sed 1d test
2 How
3 Are
4 You

Gibt nur die erste Zeile zurück:

# sed 1q test

oder

# sed '1!d' test
1 Hi

Nur die zweite bis vierte Zeile zurückgeben:

# sed '2,4!d' test
2 How
3 Are
4 You

Schlussfolgerung

Es gibt viele andere Tools, die Sie verwenden können, wie zum Beispiel awk , cut , sort , xargs ,usw. Jetzt wissen Sie, wie Sie eine Datei mit echo erstellen , können Sie damit effektiver experimentieren.


Linux
  1. /usr/bin vs. /usr/local/bin Unter Linux?

  2. Bash =~ Regex und Https://regex101.com/?

  3. Gibt es einen Grund, einen Shebang zu haben, der auf /bin/sh statt auf /bin/bash zeigt?

  4. Linux – Zusammenführen von /usr/bin und /usr/sbin in /bin (gnu/linux)?

  5. Installieren Sie Binärdateien in /bin, /sbin, /usr/bin und /usr/sbin, Interaktionen mit --prefix und DESTDIR

Was ist der Unterschied zwischen #!/usr/bin/env bash und #!/usr/bin/bash?

Führen Sie den Bash-Befehl auf der Jenkins-Pipeline aus

cmake --version zeigt auf /usr/bin/cmake, während cmake auf /usr/local/bin zeigt

Wann sollte ich /dev/shm/ verwenden und wann sollte ich /tmp/?

Wann muss ich #!/bin/bash und wann #!/bin/sh verwenden?

Chroot schlägt fehl - Befehl `/bin/bash' kann nicht ausgeführt werden:Keine solche Datei oder Verzeichnis