Ich arbeite an meiner virtuellen Maschine auf Bash. Ich werde aufgefordert, alle IP-Adressen zu finden, die für einen Versuch verwendet wurden, ohne Autorisierung auf die Maschine zuzugreifen. Dazu wird die Datei auth.log verwendet. Ich scheine keine Antwort auf mein Problem zu finden. Hier ist ein Beispiel:
Alle zurückgegebenen Zeilen müssen in meine freigegebene Datei /mnt/analyse/traitement/cueillette.txt geschrieben werden. Bitte helfen Sie! Danke
Antwort1
Sie müssen grep nicht in grep weiterleiten (das ist fast immer ein Zeichen dafür, dass Sie einen ineffizienten, fehlgeleiteten Ansatz wählen. sed
allein reicht für diese Aufgabe aus. oder awk
. oder perl
), und das sudo su root cat
ist einfach Unsinn.
Versuche dies:
$ sudo sed -n -E -e '/sshd.*authentication failure/{s/^.*rhost=([0-9.]+).*/\1/p}' \
/media/sf_partageAuth/auth.log > /mnt/analyse/traitement/cueillette.txt
Für jede Zeile, die mit „Authentifizierungsfehler“ übereinstimmt (Hinweis:nicht"authentifikation"), dieses sed
Skript entfernt alles vom Zeilenanfang bis (einschließlich) rhost=
und alles nach der IP-Adresse und druckt dann die Zeile.
Es nutzt sed
die -E
Option für erweiterte reguläre Ausdrücke, sodass ()
und +
ohne Escapezeichen funktionieren.
Beachten Sie, dass der sed
Befehl zwar als Root mit ausgeführt wird sudo
, die Ausgabeumleitung jedoch nicht – diese wird in Ihrer ursprünglichen Nicht-Root-Shell durchgeführt. Wenn Sie Root-Berechtigungen benötigen, um auch in die Ausgabedatei zu schreiben, führen Sie ihn tee
mit aus sudo
, z. B.:
$ sudo sed -n -E -e '/sshd.*authentication failure/{s/^.*rhost=([0-9.]+).*/\1/p}' \
/media/sf_partageAuth/auth.log |
sudo tee /mnt/analyse/traitement/cueillette.txt > /dev/null