30 примера за греп за системни администратори

30 Grep Examples System Admins



Можете да намерите grep, присъстващ дълбоко в мозъка на животните на Unix и Unix-подобни операционни системи. Това е основна програма, използвана за съвпадение на шаблони и е написана през 70 -те години заедно с останалата част от инструмента UNIX, който познаваме и обичаме (или мразим).

Докато изучаването на официални езици и регулярни изрази е вълнуваща тема. Изучаването на grep има много повече от регексерите. За да започнете с него и да видите красотата и елегантността на grep, първо трябва да видите някои примери от реалния свят.







Примери, които са удобни и правят живота ви малко по -лесен. Ето 30 такива обичайни случаи и опции за използване на grep.



1. ps aux | греп

Ps aux изброява всички процеси и свързаните с тях пидове. Но често този списък е твърде дълъг, за да може човек да го провери. Прехвърляйки изхода към команда grep, можете да изброите процесите, работещи с много специфично приложение. Например може да бъде sshd или nginx или httpd.



# ps до | grep sshd
корен400 0,0 0,2 69944 5624? Сс17:47 0: 00/usr/sbin/sshd
корен1076 0,2 0,3 95204 6816? Сс18:29 0: 00 sshd: корен@точки/0
корен1093 0,0 0,0 12784 932точки/0S+18:29 0: 00захващанеsshd

2. Грепиране на вашите IP адреси

В повечето операционни системи можете да изброите всичките си мрежови интерфейси и IP адреса, който е присвоен на този интерфейс, като използвате командата ifconfig или ip addr. И двете команди ще изведат много допълнителна информация. Но ако искате да отпечатате само IP адреса (да речем за скриптове на обвивката), тогава можете да използвате командата по -долу:





$ip addr | захващанеinet| awk '{отпечатайте $ 2; } '
$ip addr | захващане inet| awk '{отпечатайте $ 2; } ' #За линии само с inet, а не inet6 (IPv6)

Командата ip addr получава всички подробности (включително IP адресите), след това се подава по втората команда grep inet, която извежда само редовете с inet в тях. След това това се изпраща в awk print изявлението, което отпечатва втората дума във всеки ред (просто казано).

P.S: Можете също да направите това без грешка, ако знаете, че awk добре знаете.



3. Разглеждане на неуспешни опити за SSH

Ако имате сървър с интернет, с публичен IP адрес, той непрекъснато ще бъде бомбардиран с опити за SSH и ако позволите на потребителите да имат SSH достъп на базата на парола (политика, която не бих препоръчал), можете да видите всички такива неуспешни опити, използвайки следната команда grep:

# cat /var/log/auth.log | grep Неуспешно
Проба изнесена
Дек5 16:двайсет: 03 debian sshd[509]: Неуспешна паролазаroot от порт 192.168.0.10052374ssh2
Дек5 16:двайсет: 07 debian sshd[509]: Неуспешна паролазаroot от порт 192.168.0.10052374ssh2
Дек5 16:двайсет:единадесетdebian sshd[509]: Неуспешна паролазаroot от порт 192.168.0.10052374ssh2

4. Тръбопровод Grep към Uniq

Понякога grep ще извежда много информация. В горния пример един IP може да се опитва да влезе във вашата система. В повечето случаи има само няколко такива нарушаващи IP адреси, които трябва да идентифицирате по уникален начин и да включите в черния списък.

#котка /където/дневник/auth.log| захващане „Неуспех“ | uniq -f 3

Командата uniq трябва да отпечатва само уникалните редове. Uniq -f 3 пропуска първите три полета (за да пренебрегне времевите марки, които никога не се повтарят) и след това започва да търси уникални редове.

5. Грепиране за съобщения за грешки

Използването на Grep за регистрационни файлове за достъп и грешки не се ограничава само до SSH. Уеб сървъри (като Nginx) грешки в регистрационния файл и регистрационни файлове за достъп доста педантично. Ако настроите скриптове за наблюдение, които ви изпращат сигнали, когато grep 404 връща нова стойност. Това може да бъде доста полезно.

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

192.168.0.100 - -[06/Дек/2018 г.: 02:двайсет:29+0530] 'GET /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, като Gecko) Chrome/70.0.3538.110 Safari/537.36 '


192.168.0.101 - -[06/Дек/2018 г.: 02:Четири пет:16+0530] 'GET /favicon.ico HTTP /1.1' 404 143
'http://192.168.0.102/' 'Mozilla/5.0 (iPad; CPU OS 12_1 като Mac OS X)
AppleWebKit/605.1.15 (KHTML, като Gecko) Версия/12.0 Mobile/15E148 Safari/604.1 '

Регулярното изражение може да не е 404, а някакво друго регулярно изразено филтриране само за клиенти на мобилни устройства или само за устройства на Apple, които разглеждат уеб страница. Това ви позволява да имате по -задълбочена представа за ефективността на приложението ви.

6. Обява на пакета

За системи, базирани на Debian, dpkg -l изброява всички пакети, инсталирани на вашата система. Можете да го изпратите в команда grep, за да търсите пакети, принадлежащи на конкретно приложение. Например:

#dpkg -на | захващане 'Дойдох'

7. grep -v имена на файлове

За да изброите всички редове, които недей съдържат даден модел, използвайте флага -v. Това е основно обратното на обикновената команда grep.

8. grep -л

Той изброява всички файлове, които съдържат поне едно появяване на предоставения шаблон. Това е полезно, когато търсите модел в директория с множество файлове. Той отпечатва само името на файла, но не и конкретния ред с шаблона.

9. Опция за една дума -w

$захващане <МОДЕЛ>имена на файлове

Флагът -w казва на grep да търси дадения модел като цяла дума, а не само като подниза на ред. Например, по -рано грепирахме за IP адрес и модел inet отпечата редовете и с двете inet и inet6 изброяване както на IPv4, така и на IPv6 адреси. Но ако използвахме -w флаг само редовете с inet като дума, предшествана и последвана от бели интервали, е валидно съвпадение.

10. Разширен регулярен израз

Често ще откриете, че родните на Grep регулярни изрази са малко ограничаващи. В повечето скриптове и инструкции ще намерите използването на -E флаг и това ще ви позволи да въведете модел в така наречения разширен режим.

Ето командите grep и grep -E за търсене на думи Супермен и Спайдърмен.

$захващане ' (Супер | Паяк ) човек'текст
$захващане '(Супер | Паяк) човек'текст

Както можете да видите, разширената версия е много по -лесна за четене.

11. Греп за вашите контейнери

Ако имате голям куп контейнери, работещи на вашия хост, можете да ги грепнете по име на изображение, състояние, портове, които излагат, и много други атрибути. Например,

$докерпс | захващане [imageName]

12. Греп за вашите шушулки

Докато сме на темата за контейнерите. Kubernetes често са склонни да стартират множество шушулки при дадено внедряване. Въпреки че всяка шушулка има уникално име, в дадено пространство от имена те обикновено започват с името на разполагане. Можем да грепнем това и да изброим всички шушулки, свързани с дадено внедряване.

$kubectl вземете шушулки| захващане <deploymentName>

13. Хватка за големи данни

Често така нареченият анализ на големи данни включва просто търсене, сортиране и преброяване на модели в даден набор от данни. UNIX помощните програми на ниско ниво като grep, uniq, wc са особено добри в това. Тази публикация в блога показва хубав пример за задача, изпълнена за секунди с помощта на grep и други помощни програми на Unix, докато Hadoop отне почти половин час.

Например този набор от данни е с размер над 1,7 GB. Той съдържа информация за множество шахматни мачове, включително направените ходове, кой спечели и т.н. Ние се интересуваме само от резултатите, затова изпълняваме следната команда:

$захващане 'Резултат'милионна база-2.22.pgn| вид | uniq -° С
221 [Резултат'*']
653728 [Резултат'0-1']
852305 [Резултат'1-0']
690934 [Резултат„1 / 2-1 / 2“]

Това отне около 15 секунди на 4-годишен 2-ядрен/4-поточен процесор. Така че следващия път, когато решавате проблем с големи данни. Помислете дали вместо това можете да използвате grep.

14. grep –color = auto

Тази опция позволява на grep да подчертае шаблона вътре в реда, където е намерен.

15. grep -i

Съпоставянето на шаблони на греп по същество е чувствително към регистъра. Но ако не ви пука за това, използването на флага -i ще направи grep нечувствителни.

16. grep -n

Флагът -n ще показва номерата на редовете, така че не е нужно да се притеснявате, че ще намерите същия ред по -късно.

17. git grep

Git, самата система за контрол на версиите, има вградена команда grep, която работи почти като обикновения ви grep. Но може да се използва за търсене на модели във всяко ангажирано дърво, използвайки родния git CLI, вместо досадни тръби. Например, ако сте в главния клон на вашето репо, можете да пресечете репо, като използвате:

(майстор)$git grep <модел>

18. grep -o

Флагът -o е наистина полезен, когато се опитвате да отстраните грешки в regex. Той ще отпечата само съвпадащата част от реда, вместо целия ред. Така че, в случай, че получавате твърде много нежелана линия за предоставен модел и не можете да разберете защо това се случва. Можете да използвате флага -o, за да отпечатате нарушаващия подниза и да разсъждавате за вашето регулярно изражение назад.

19. grep -x

Флагът -x ще отпечата ред, ако и само ако, целият ред съответства на предоставеното от вас регулярно изражение. Това е донякъде подобно на флага -w, който отпечатва ред, ако и само от цяла дума съвпада с предоставения регекс.

20. grep -T

Когато се занимавате с регистрационни файлове и изходи от скриптове на черупка, е много по -вероятно да срещнете твърди раздели, за да правите разлика между различните изходни колони. Флагът -T ще подреди добре тези раздели, така че колоните да са добре подредени, което прави изхода читав.

21. grep -q

Това потиска изхода и тихо изпълнява командата grep. Много полезно при подмяна на текст или при стартиране на grep в скрипт на демон.

22. grep -P

Хората, които са свикнали да изписват синтаксиса на регулярни изрази, могат да използват флага -P, за да използват точно това. Не е нужно да научавате основен регулярен израз, който grep използва по подразбиране.

23. grep -D [ДЕЙСТВИЕ]

В Unix почти всичко може да се третира като файл. Следователно, всяко устройство, гнездо или FIFO поток от данни може да се подава към grep. Можете да използвате флага -D, последван от ACTION (действието по подразбиране е READ). Няколко други опции са SKIP за безшумно пропускане на конкретни устройства и RECURSE за рекурсивно преминаване през директории и символни връзки.

24. Повторение

Ако търсите даден модел, който е повторение на известен по -прост модел, използвайте къдрави скоби, за да посочите броя на повторенията

$захващане [0-9]{10}

Това отпечатва редове, съдържащи низове с дължина 10 или повече цифри.

25. Стенограми за повторение

Някои специални знаци са запазени за определен вид повторение на шаблони. Можете да използвате тези вместо къдрави скоби, ако отговарят на вашите нужди.

? : Моделът, предхождащ въпросителен знак, трябва да съвпада с нула или един път.

*: Моделът, предхождащ звездата, трябва да съвпада с нула или повече пъти.

+: Моделът, предхождащ плюс, трябва да съвпада един или повече пъти.

25. Отместване на байтове

Ако искате да знаете изместването на байта на редовете, където е намерен съвпадащият израз, можете да използвате флага -b, за да отпечатате и отместванията. За да отпечатате отместването само на съвпадащата част от ред, можете да използвате флага -b с флаг -o.

$захващане -b -или <МОДЕЛ> [име на файл]

Отместване просто означава, след колко байта от началото на файла започва съответстващият низ.

26. egrep, fgrep и rgerp

Често ще виждате извикването на egrep, за да използвате разширения синтаксис на регулярни изрази, който обсъждахме по -рано. Това обаче е отхвърлен синтаксис и се препоръчва да избягвате използването му. Вместо това използвайте grep -E. По същия начин използвайте grep -F, вместо fgrep и grep -r вместо rgrep.

27. grep -z

Понякога въвеждането на grep не е редове, завършващи с символ на нов ред. Например, ако обработвате списък с имена на файлове, те могат да идват от различни източници. Флагът -z казва на grep да третира символа NULL като завършващ ред. Това ви позволява да третирате входящия поток като всеки обикновен текстов файл.

28. grep -a [име на файл]

Флагът -a казва на grep да третира предоставения файл като че ли е обикновен текст. Файлът може да е двоичен, но grep ще третира съдържанието вътре, сякаш е текст.

29. grep -U [име на файл]

Флагът -U казва на grep да третира предоставените файлове все едно са двоични файлове, а не текст. По подразбиране grep познава типа на файла, като погледне първите няколко байта. Използването на този флаг отменя тези предположения.

Grep -m NUM

При големи файлове грепирането за израз може да отнеме завинаги. Ако обаче искате да проверите само първите NUM номера на съвпадения, можете да използвате флага -m, за да постигнете това. Той е по -бърз и изходът често е управляем.

Заключение

Голяма част от ежедневната работа на системния администратор включва пресяване на големи части от текст. Това може да са дневници за сигурност, регистрационни файлове от вашия уеб или пощенски сървър, потребителска активност или дори голям текст от страници за управление. Grep ви дава допълнителна гъвкавост при справяне с тези случаи на употреба.

Надяваме се, че горните няколко примера и случаи на използване са ви помогнали да разберете по -добре този жив изкопаем софтуер.