30 przykładów Grepa dla administratorów systemu

30 Grep Examples System Admins



Możesz znaleźć grep obecnego głęboko w zwierzęcym mózgu systemów operacyjnych uniksowych i uniksopodobnych. Jest to podstawowy program używany do dopasowywania wzorców i został napisany w latach 70. wraz z resztą narzędzia UNIX, które znamy i kochamy (lub nienawidzimy).

Podczas gdy nauka o językach formalnych i wyrażeniach regularnych jest ekscytującym tematem. Nauka grep ma o wiele więcej do zaoferowania niż wyrażenia regularne. Aby zacząć i zobaczyć piękno i elegancję grep, musisz najpierw zobaczyć kilka przykładów z prawdziwego świata.







Przykłady, które są przydatne i ułatwiają życie. Oto 30 takich powszechnych przypadków użycia i opcji grep.



1. ps aux | grep

Ps aux wypisuje wszystkie procesy i związane z nimi pidy. Ale często ta lista jest zbyt długa, aby człowiek mógł ją sprawdzić. Pisząc dane wyjściowe do polecenia grep, możesz wyświetlić listę procesów uruchomionych z myślą o bardzo konkretnej aplikacji. Na przykład może to być sshd, nginx lub httpd.



# ps do | grep sshd
źródło400 0.0 0,2 69944 5624? SS17:47 0: 00/usr/sbin/sshd-D
źródło1076 0,2 0,3 95204 6816? SS18:29 0:00 sshd: root@pkt/0
źródło1093 0.0 0.0 12784 932pkt/0S+18:29 0: 00chwytsshd

2. Grepping swoje adresy IP

W większości systemów operacyjnych można wyświetlić listę wszystkich interfejsów sieciowych i adresu IP przypisanego do tego interfejsu za pomocą polecenia ifconfig lub ip addr. Oba te polecenia wygenerują wiele dodatkowych informacji. Ale jeśli chcesz wydrukować tylko adres IP (powiedzmy dla skryptów powłoki), możesz użyć poniższego polecenia:





$adres IP | chwytineta| awk '{ drukuj $2; }'
$adres IP | chwyt -wineta| awk '{ drukuj $2; }' #Dla linii zawierających tylko inet, a nie inet6 (IPv6)

Polecenie ip addr pobiera wszystkie szczegóły (w tym adresy IP), jest następnie przesyłane do drugiego polecenia grep inet, które wypisuje tylko wiersze zawierające w nich inet. Jest to następnie przesyłane do awk print polecenie, które wypisuje drugie słowo w każdym wierszu (w uproszczeniu).

PS: Możesz to również zrobić bez grep, jeśli dobrze znasz awk.



3. Patrząc na nieudane próby SSH

Jeśli masz serwer z dostępem do Internetu, z publicznym adresem IP, będzie on stale bombardowany próbami SSH, a jeśli zezwolisz użytkownikom na dostęp SSH oparty na hasłach (zasada, której nie polecam), możesz zobaczyć wszystkie takie nieudane próby za pomocą następujące polecenie grep:

# cat /var/log/auth.log | grep nie powiodła się
Przykładowe wyjście
Grudzień5 16:20:03 debian sshd[509]:Nieudane hasłodlaroot z portu 192.168.0.10052374ssh2
Grudzień5 16:20:07 debian sshd[509]:Nieudane hasłodlaroot z portu 192.168.0.10052374ssh2
Grudzień5 16:20:jedenaścieDebiana sshd[509]:Nieudane hasłodlaroot z portu 192.168.0.10052374ssh2

4. Rurociągi Grepa do Uniq

Czasami grep wypisze dużo informacji. W powyższym przykładzie pojedynczy adres IP mógł próbować wejść do twojego systemu. W większości przypadków istnieje tylko kilka takich obraźliwych adresów IP, które należy jednoznacznie zidentyfikować i umieścić na czarnej liście.

#Kot /gdzie/Dziennik/autor.log| chwyt 'Ponieść porażkę' | uniq -F 3

Polecenie uniq ma wypisywać tylko unikalne linie. Uniq -f 3 pomija pierwsze trzy pola (aby przeoczyć znaczniki czasu, które nigdy się nie powtarzają), a następnie zaczyna szukać unikalnych linii.

5. Szukanie komunikatów o błędach

Używanie Grepa do dostępu i dzienników błędów nie ogranicza się tylko do SSH. Serwery WWW (takie jak Nginx) dość skrupulatnie rejestrują błędy i logi dostępu. Jeśli skonfigurujesz skrypty monitorujące, które wysyłają alerty, gdy grep 404 zwraca nową wartość. To może być całkiem przydatne.

# grep -w '404' /var/www/nginx/access.log

192.168.0.100 - -[06/Grudzień/2018: 02:20:29+0530] „POBIERZ /favicon.ico HTTP/1.1” 404 200
„http://192.168.0.102/” 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, jak Gecko) Chrome/70.0.3538.110 Safari/537.36'


192.168.0.101 - -[06/Grudzień/2018: 02:Cztery pięć:16+0530] „POBIERZ /favicon.ico HTTP/1.1” 404 143
„http://192.168.0.102/” 'Mozilla/5.0 (iPad; CPU OS 12_1 jak Mac OS X)
AppleWebKit/605.1.15 (KHTML, jak Gecko) Wersja/12.0 Mobile/15E148 Safari/604.1'

Wyrażenie regularne może nie być 404, ale innym filtrem wyrażeń regularnych tylko dla klientów mobilnych lub tylko urządzeń Apple wyświetlających stronę internetową. Pozwala to uzyskać głębszy wgląd w działanie Twojej aplikacji.

6. Lista pakietów

Dla systemów opartych na Debianie, dpkg -l wyświetla listę wszystkich pakietów zainstalowanych w twoim systemie. Możesz potokować to do polecenia grep, aby wyszukać pakiety należące do określonej aplikacji. Na przykład:

#dpkg -ten | chwyt 'Przyszedłem'

7. grep -v nazwy plików

Aby wymienić wszystkie linie, które nie zawierać dany wzorzec, użyj flagi -v. Jest to w zasadzie przeciwieństwo zwykłego polecenia grep.

8. grep-l

Zawiera listę wszystkich plików, które zawierają co najmniej jedno wystąpienie podanego wzorca. Jest to przydatne, gdy szukasz wzorca w katalogu z wieloma plikami. Drukuje tylko nazwę pliku, a nie konkretną linię ze wzorem.

9. Opcja pojedynczego słowa -w

$chwyt -w <WZÓR>nazwy plików

Flaga -w mówi grepowi, aby szukał danego wzorca jako całego słowa, a nie tylko fragmentu wiersza. Na przykład wcześniej szukaliśmy adresu IP i wzorca ineta wydrukowałem linie z obydwoma ineta oraz inet6 wymieniając adresy IPv4 i IPv6. Ale jeśli użyliśmy flagi -w tylko linie z ineta jako słowo poprzedzone i poprzedzone białymi znakami jest prawidłowym dopasowaniem.

10. Rozszerzone wyrażenie regularne

Często zauważysz, że wyrażenia regularne natywne dla Grepa są nieco ograniczające. W większości skryptów i instrukcji znajdziesz użycie flagi -E, co pozwoli ci wprowadzić wzorzec w tak zwanym trybie rozszerzonym.

Oto polecenia grep i grep -E służące do wyszukiwania słów Superman i Spiderman.

$chwyt '(Super|Pająk)człowiek'tekst
$chwyt -ORAZ „(Super|Pająk)człowiek”tekst

Jak widać, wersja rozszerzona jest znacznie łatwiejsza do odczytania.

11. Grep za swoje pojemniki

Jeśli masz duży klaster kontenerów uruchomionych na swoim hoście, możesz je pogrepować według nazwy obrazu, statusu, portów, które udostępniają i wielu innych atrybutów. Na przykład,

$dokerps | chwyt [imageName]

12. Grep dla swoich strąków

Skoro jesteśmy przy temacie kontenerów. Kubernetes często uruchamiają wiele podów w ramach danego wdrożenia. Chociaż każdy pod ma unikatową nazwę, w danej przestrzeni nazw, zwykle zaczynają się od nazwy wdrożenia. Możemy to grep i wyświetlić listę wszystkich podów skojarzonych z danym wdrożeniem.

$kubectl zdobądź pody| chwyt <nazwa wdrożenia>

13. Uchwyt na duże dane

Często tak zwana analiza Big Data polega na prostym wyszukiwaniu, sortowaniu i liczeniu wzorców w danym zbiorze danych. Niskopoziomowe narzędzia UNIX, takie jak grep, uniq, wc, są w tym szczególnie dobre. Ten wpis na blogu pokazuje ładny przykład zadania wykonanego w zaledwie kilka sekund przy użyciu grep i innych narzędzi uniksowych, podczas gdy Hadoop zajęło prawie pół godziny.

Na przykład ten zestaw danych ma rozmiar ponad 1,7 GB. Zawiera informacje o wielu meczach szachowych, łącznie z wykonanymi ruchami, kto wygrał itp. Interesują nas same wyniki, więc uruchamiamy następującą komendę:

$chwyt 'Wynik'milionbaza-2,22.pgn| sortować | uniq -C
221 [Wynik'*']
653728 [Wynik„0-1”]
852305 [Wynik„1-0”]
690934 [Wynik„1 / 2-1 / 2”]

Zajęło to około 15 sekund na 4-letnim procesorze 2-rdzeniowym/4-wątkowym. Więc następnym razem, gdy rozwiążesz problem z dużymi danymi. Pomyśl, czy możesz zamiast tego użyć grep.

14. grep –kolor=auto

Ta opcja pozwala grepowi podświetlić wzór wewnątrz linii, w której został znaleziony.

15. grep-i

Dopasowywanie wzorców Grep jest z natury rozróżniane wielkości liter. Ale jeśli ci to nie zależy, użycie flagi -i sprawi, że grep nie będzie uwzględniać wielkości liter.

16. grep -n

Flaga -n pokaże numery linii, więc nie musisz się martwić o późniejsze znalezienie tej samej linii.

17. git grep

Git, system kontroli wersji, ma wbudowane polecenie grep, które działa podobnie jak zwykły grep. Ale można go użyć do wyszukiwania wzorców w dowolnym zatwierdzonym drzewie za pomocą natywnego interfejsu wiersza polecenia git, zamiast żmudnych potoków. Na przykład, jeśli jesteś w głównej gałęzi swojego repozytorium, możesz przeszukać repozytorium, używając:

(gospodarz)$git grep <wzór>

18. grep-o

Flaga -o jest bardzo pomocna, gdy próbujesz debugować wyrażenie regularne. Wydrukuje tylko pasującą część linii, a nie całą linię. Tak więc na wypadek, gdy otrzymujesz zbyt wiele niechcianych linii dla dostarczonego wzoru i nie możesz zrozumieć, dlaczego tak się dzieje. Możesz użyć flagi -o, aby wydrukować obraźliwy podłańcuch i uzasadnienie swojego wyrażenia regularnego wstecz od tego miejsca.

19. grep -x

Flaga -x wypisze linię, wtedy i tylko wtedy, gdy cała linia pasuje do podanego wyrażenia regularnego. Jest to trochę podobne do flagi -w, która wyświetla linię, jeśli i tylko całe słowo pasuje do podanego wyrażenia regularnego.

20. grep -T

Kiedy masz do czynienia z dziennikami i danymi wyjściowymi ze skryptów powłoki, jest więcej niż prawdopodobne, że napotkasz twarde tabulatory, aby rozróżnić różne kolumny danych wyjściowych. Flaga -T starannie wyrówna te zakładki, tak aby kolumny były ładnie ułożone, dzięki czemu dane wyjściowe będą czytelne dla człowieka.

21. grep -q

Powoduje to pominięcie danych wyjściowych i ciche uruchamianie polecenia grep. Bardzo przydatne podczas zastępowania tekstu lub uruchamiania grep w skrypcie demona.

22. grep -P

Ludzie, którzy są przyzwyczajeni do składni wyrażeń regularnych perla, mogą użyć flagi -P, aby użyć dokładnie tego. Nie musisz uczyć się podstawowych wyrażeń regularnych, których domyślnie używa grep.

23. grep -D [AKCJA]

W Uniksie prawie wszystko można traktować jako plik. W konsekwencji dowolne urządzenie, gniazdo lub strumień danych FIFO można przekazać do grep. Możesz użyć flagi -D, po której następuje AKCJA (domyślną akcją jest READ). Kilka innych opcji to SKIP, aby dyskretnie pominąć określone urządzenia i RECURSE, aby rekursywnie przechodzić przez katalogi i dowiązania symboliczne.

24. Powtórzenie

Jeśli szukasz danego wzoru, który jest powtórzeniem znanego prostszego wzoru, użyj nawiasów klamrowych, aby wskazać liczbę powtórzeń

$chwyt -ORAZ [0-9]{10}

Wypisuje wiersze zawierające ciągi o długości 10 lub więcej cyfr.

25. Skróty powtórzeń

Niektóre znaki specjalne są zarezerwowane dla określonego rodzaju powtórzeń wzorców. Możesz ich użyć zamiast nawiasów klamrowych, jeśli pasują do Twoich potrzeb.

? : Wzorzec poprzedzający znak zapytania powinien odpowiadać zero lub jeden raz.

*: Wzór poprzedzający gwiazdkę powinien pasować zero lub więcej razy.

+ : Wzorzec poprzedzający plus powinien pasować raz lub więcej razy.

25. Przesunięcia bajtów

Jeśli chcesz zobaczyć przesunięcie bajtowe linii, w których znajduje się pasujące wyrażenie, możesz użyć flagi -b, aby wyświetlić również przesunięcia. Aby wydrukować przesunięcie tylko pasującej części linii, możesz użyć flagi -b z flagą -o.

$chwyt -b -lub <WZÓR> [Nazwa pliku]

Przesunięcie oznacza po prostu, po ilu bajtach od początku pliku zaczyna się pasujący łańcuch.

26. egrep, fgrep i rgerp

Często będziesz widział wywołanie egrep, aby użyć rozszerzonej składni wyrażeń regularnych, którą omówiliśmy wcześniej. Jest to jednak przestarzała składnia i zaleca się unikanie jej używania. Zamiast tego użyj grep -E. Podobnie, użyj grep -F, zamiast fgrep i grep -r zamiast rgrep.

27. grep-z

Czasami dane wejściowe do grep nie są wierszami kończącymi się znakiem nowego wiersza. Na przykład, jeśli przetwarzasz listę nazw plików, mogą one pochodzić z różnych źródeł. Flaga -z mówi grepowi, aby traktował znak NULL jako koniec linii. Pozwala to traktować strumień przychodzący jak zwykły plik tekstowy.

28. grep -a [nazwa pliku]

Flaga -a mówi grepowi, aby traktował dostarczony plik tak, jakby był zwykłym tekstem. Plik może być plikiem binarnym, ale grep będzie traktował jego zawartość tak, jakby była tekstem.

29. grep -U [nazwa pliku]

Flaga -U mówi grepowi, aby traktował dostarczone pliki tak, jakby były plikami binarnymi, a nie tekstowymi. Domyślnie grep odgaduje typ pliku na podstawie pierwszych kilku bajtów. Użycie tej flagi unieważnia działanie zgadywania.

Grep -m NUM

W przypadku dużych plików szukanie wyrażenia może trwać wiecznie. Jeśli jednak chcesz sprawdzić tylko pierwsze liczby dopasowań, możesz użyć flagi -m, aby to osiągnąć. Jest szybszy, a wyniki często są również łatwe do opanowania.

Wniosek

Wiele codziennej pracy administratora systemu polega na przesiewaniu dużych fragmentów tekstu. Mogą to być logi bezpieczeństwa, logi z twojego serwera WWW lub poczty, aktywności użytkowników, a nawet duży tekst stron podręcznika. Grep zapewnia dodatkową elastyczność podczas radzenia sobie z tymi przypadkami użycia.

Mamy nadzieję, że powyższe kilka przykładów i przypadków użycia pomogło ci w lepszym zrozumieniu tej żywej skamieniałości oprogramowania.