grep

30 Grep példa

30 Grep példa
A grep jelenhet mélyen a Unix és a Unix-szerű operációs rendszerek állati agyában. Ez egy alapvető program, amelyet a minták illesztésére használnak, és a 70-es években írták a többi UNIX eszközzel együtt, amit ismerünk és szeretünk (vagy utálunk).

Miközben a hivatalos nyelvek és a reguláris kifejezések elsajátítása izgalmas téma. A grep megtanulása sokkal többet tartalmaz, mint a regexek. A kezdéshez és a grep szépségének és eleganciájának megismeréséhez először néhány valós példát kell megnéznie.

Példák, amelyek hasznosak és kissé megkönnyítik az életedet. Itt van 30 ilyen grep közönséges használati eset és lehetőség.

1. ps aux | grep

A ps aux felsorolja az összes folyamatot és a hozzájuk tartozó pid-eket. De ez a lista gyakran túl hosszú ahhoz, hogy az ember ellenőrizze. A kimenetet egy grep parancsba átküldve felsorolhat egy nagyon specifikus alkalmazást szem előtt tartó folyamatokat. Például a lehet sshd vagy nginx vagy httpd.

# ps aux | grep sshd
gyökér 400 0.0 0.2 69944 5624 ?       Ss 17:47 0:00 / usr / sbin / sshd -D
gyökér 1076 0.2 0.3 95204 6816 ?       Ss 18:29 0:00 sshd: root @ pts / 0
gyökér 1093 0.0 0.0 12784 932 pont / 0 S + 18:29 0:00 grep sshd

2. Az IP-címek megragadása

A legtöbb operációs rendszerben az ifconfig vagy az ip addr paranccsal felsorolhatja az összes hálózati interfészt és az adott interfészhez rendelt IP-címet. Mindkét parancs rengeteg további információt fog kiadni. De ha csak az IP-címet szeretné kinyomtatni (mondjuk a shell parancsfájlok esetében), akkor használhatja az alábbi parancsot:

$ ip addr | grep inet | awk 'print $ 2; '
$ ip addr | grep -w inet | awk 'print $ 2; '# Csak inet nélküli vonalakhoz, nem inet6 (IPv6)

Az ip addr parancs megkapja az összes részletet (beleértve az IP-címeket is), majd a második grep inethez továbbítja, amely csak az inet sorokat adja ki. Ezt követően az awk fájlba nyomtatja ki azt az utasítást, amely minden sorban kiírja a második szót (leegyszerűsítve).

P.S: Ezt megteheti a grep nélkül is, ha tudja, hogy awk jól tudja.

3. A sikertelen SSH-kísérletek vizsgálata

Ha van egy Internet felé néző szervere, nyilvános IP-vel, akkor folyamatosan bombázzák SSH-kísérletekkel, és ha engedélyezi a felhasználók számára a jelszó alapú SSH-hozzáférést (egy olyan házirend, amelyet nem ajánlanék), akkor az összes ilyen sikertelen kísérletet a a következő grep parancs:

# macska / var / log / auth.napló | grep “Fail”
Minta ki
December 5. 16:20:03 debian sshd [509]: Nem sikerült a root jelszava 192-től.168.0.100 port 52374 ssh2
December 5. 16:20:07 debian sshd [509]: Nem sikerült a root jelszava 192-től.168.0.100 port 52374 ssh2
December 5. 16:20:11 debian sshd [509]: A root jelszava sikertelen volt 192-től.168.0.100 port 52374 ssh2

4. A Grep vezetése az Uniq-hoz

Néha a grep sok információt fog kiadni. A fenti példában előfordulhat, hogy egyetlen IP próbálkozott a rendszer belépésével. A legtöbb esetben csak néhány olyan jogsértő IP van, amelyet egyedileg kell azonosítania és feketelistára tennie.

# macska / var / log / auth.napló | grep "Fail" | uniq -f 3

Az uniq parancsnak csak az egyedi sorokat kell kinyomtatnia. Az uniq -f 3 kihagyja az első három mezőt (figyelmen kívül hagyja az soha nem ismétlődő időbélyegeket), majd egyedi sorokat kezd keresni.

5. Grepping a hibaüzenetekért

A Grep használata a hozzáféréshez és a hibanaplókhoz nem korlátozódik csak az SSH-ra. A webkiszolgálók (például az Nginx) naplózási hibákat és hozzáférési naplókat elég alaposan. Ha felügyeleti parancsfájlokat állít be, amelyek riasztásokat küldenek, amikor a grep „404” új értéket ad vissza. Ez nagyon hasznos lehet.

# grep -w "404" / var / www / nginx / access.napló
192.168.0.100 - - [06 / Dec / 2018: 02: 20: 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, mint Gecko) Chrome / 70.0.3538.110 Safari / 537.36 "
192.168.0.101 - - [06 / Dec / 2018: 02: 45: 16 +0530] "GET / favicon.ico HTTP / 1.1 "404 143
"http: // 192.168.0.102 / "" Mozilla / 5.0 (iPad; CPU OS 12_1, mint a Mac OS X)
AppleWebKit / 605.1.15 (KHTML, mint Gecko) / 12.0 Mobil / 15E148 Safari / 604.1 "

Előfordulhat, hogy a regex nem „404”, de néhány más regexszűrés csak a mobil kliensek vagy csak egy weboldalt megtekintő Apple eszközök esetében. Ez mélyebb betekintést enged az alkalmazásának teljesítményébe.

6. Csomaglista

Debian alapú rendszerek esetén a dpkg -l felsorolja a rendszerre telepített összes csomagot. Ezt egy grep parancs segítségével csempézheti egy adott alkalmazáshoz tartozó csomagok keresésére. Például:

# dpkg -l | grep "vim"

7. grep -v fileNames

Az összes sor felsorolásához, amelyek ne tartalmazzon egy adott mintát, használja a -v jelzőt. Alapvetően ellentéte a rendes grep parancsnak.

8. grep -l

Felsorolja az összes fájlt, amely a mellékelt minta legalább egy előfordulását tartalmazza. Ez akkor hasznos, ha több fájlt tartalmazó könyvtárban keres mintát. Csak a fájl nevét nyomtatja ki, a mintához tartozó sort nem.

9. Egyszavas opció -w

$ grep -w fileNames

A -w zászló megmondja a grep-nek, hogy keresse meg az adott mintát egész szóként, és ne csak egy vonal részstruktúráját. Például korábban megkaptuk az IP-címet és a mintát inet kinyomtatta a sorokat mindkettővel inet és inet6 felsorolja mind az IPv4, mind az IPv6 címeket. De ha a -w jelölőnégyzetet csak a -val jelöltük, inet mivel a szóköz előtt és után szóköz érvényes szó.

10. Kiterjesztett reguláris kifejezés

Gyakran tapasztalhatja, hogy a Grep-ben honos reguláris kifejezések kissé korlátozóak. A legtöbb szkriptben és utasításban megtalálja az -E jelző használatát, és ez lehetővé teszi a minta megadását az úgynevezett kiterjesztett módban.

Itt vannak a grep és a grep -E parancsok a Superman és a Spiderman szavak keresésére.

$ grep "\ (Szuper | Pók \) ember" szöveg
$ grep -E "(Szuper | Pók) ember" szöveg

Mint látható, a kibővített verzió sokkal könnyebben olvasható.

11. Grep a tartályokért

Ha a gazdagépen fut egy nagy méretű tárolófürt, megragadhatja őket képnév, állapot, portok és sok más attribútum alapján. Például,

$ dokkoló ps | grep [imageName]

12. Grep a hüvelyekért

Amíg a konténerek témáján vagyunk. A Kubernetes gyakran hajlamos több pod indítását egy adott telepítés alatt. Míg mindegyik pod egyedi névvel rendelkezik, egy adott névtérben általában a telepítés nevével kezdődnek. Foghatjuk ezt, és felsorolhatjuk az összes telepítést.

$ kubectl kap hüvelyeket | grep

13. Grep a nagy adatokért

Gyakran előfordul, hogy az úgynevezett „Big Data” elemzés egyszerű mintakeresést, válogatást és számlálást foglal magában egy adott adatkészletben. Az alacsony szintű UNIX segédprogramok, mint például a grep, az uniq, a wc, ebben különösen jók. Ez blog bejegyzés egy szép példát mutat be a grep és más Unix segédprogramok segítségével csupán másodpercek alatt elvégzett feladatokra, míg Hadoop majdnem fél órát vett igénybe.

Például ezt adatkészlet meghaladja az 1-et.7 GB méretű. Információt tartalmaz a sakkmérkőzések sokaságáról, beleértve az elvégzett mozdulatokat, ki nyert, stb. Csak az eredmények érdekelnek, ezért futtatjuk a következő parancsot:

$ grep "Eredmény" millionbase-2.22.pgn | rendezés | uniq -c
221 [Eredmény "*"]
653728 ["0-1" eredmény]
852305 ["1-0" eredmény]
690934 ["1 / 2-1 / 2" eredmény]

Ez körülbelül 15 másodpercet vett igénybe egy 4 éves 2 magos / 4 szálas processzoron. Tehát legközelebb „big data” problémát old meg. Gondoljon arra, hogy használhatja-e a grep-et.

14. grep -color = auto

Ez az opció lehetővé teszi, hogy a grep kiemelje a mintát azon a vonalon belül, ahol megtalálta.

15. grep -i

A Grep mintaillesztés megkülönbözteti a kis- és nagybetűket. De ha ez nem érdekel, akkor az -i zászló használatával a grep nagybetűs lesz.

16. grep -n

Az -n zászló megmutatja a sorszámokat, így nem kell aggódnia, hogy később megtalálja ugyanazt a sort.

17. git grep

A Git, a verziókezelő rendszer magában foglal egy beépített grep parancsot, amely nagyjából úgy működik, mint a szokásos grep. De fel lehet használni bármilyen elkötelezett fa mintázatának keresésére a natív git CLI használatával, unalmas csövek helyett. Például, ha a repo törzságában tartózkodik, akkor a következővel haladhat:

(mester) $ git grep

18. grep -o

Az -o zászló valóban hasznos, ha egy regexet próbál hibakeresni. A teljes vonal helyett csak a vonal megfelelő részét fogja kinyomtatni. Tehát abban az esetben, ha túl sok nem kívánt vonalat kap egy mellékelt mintához, és nem tudja megérteni, miért történik ez. Az -o jelzővel onnan visszafelé nyomtathatja a sértő részszöveget és a regex okait.

19. grep -x

Az -x zászló kinyomtat egy sort, csak akkor, ha az egész sor megegyezik a megadott regexszel. Ez némileg hasonlít a -w jelzőhöz, amely akkor és csak egy egész sort nyomtatott egy sorra, amely megfelel a mellékelt regexnek.

20. grep -T

Ha shell-szkriptek naplóival és kimeneteivel foglalkozik, több mint valószínű, hogy kemény lapokkal találkozik a kimenet különböző oszlopainak megkülönböztetésére. A -T jelző szépen igazítja ezeket a füleket, így az oszlopok szépen vannak elrendezve, így a kimenet ember olvashatóvá válik.

21. grep -q

Ez elnyomja a kimenetet, és csendesen futtatja a grep parancsot. Nagyon hasznos a szöveg cseréjekor, vagy a grep futtatásakor egy démon szkriptben.

22. grep -P

Azok, akik megszokták a reguláris kifejezés szintaxisát, pontosan a használatához használhatják a -P jelzőt. Nem kell megtanulnia az alapszintű reguláris kifejezést, amelyet a grep alapértelmezés szerint használ.

23. grep -D [AKCIÓ]

A Unixban szinte mindent fájlként lehet kezelni. Következésképpen bármilyen eszköz, egy foglalat vagy egy FIFO adatfolyam bevihető a grep-be. Használhatja a -D jelzőt, amelyet egy ACTION követ (az alapértelmezett művelet READ). Néhány további lehetőség: az egyes eszközök csendes kihagyásának kihagyása, a könyvtárak és szimpla linkek rekurzív áttekintése pedig a RECURSE.

24. Ismétlés

Ha adott mintát keres, amely egy ismert, egyszerűbb minta ismétlése, akkor göndör zárójelekkel jelezze az ismétlés számát

$ grep -E “[0-9] 10”

Ez olyan sorokat nyomtat, amelyek legalább 10 számjegyből álló húrokat tartalmaznak.

25. Ismétlődő rövidítések

Néhány speciális karakter egy meghatározott típusú ismétléshez van fenntartva. Használhatja ezeket göndör zárójelek helyett, ha megfelelnek az Ön igényeinek.

? : A kérdőjel előtti mintának nullának vagy egyszerre kell egyeznie.

*: A csillagot megelőző mintának nulla vagy többször meg kell egyeznie.

+ : A plusz előtti mintának egy vagy többször meg kell egyeznie.

25. Bájt eltolások

Ha meg szeretné tudni, hogy melyik bájt eltolódás található azokon a sorokon, ahol az egyező kifejezés található, használhatja a -b jelzőt az eltolások kinyomtatására is. A vonal csak a megfelelő részének eltolásának kinyomtatásához használhatja a -b jelzőt az -o jelzővel.

$ grep -b -o [fájl név]

Az eltolás egyszerűen azt jelenti, hogy a fájl elejétől hány bájt után kezdődik a megfelelő karakterlánc.

26. egrep, fgrep és rgerp

Gyakran látni fogja az egrep meghívását, hogy a korábban tárgyalt kiterjesztett reguláris kifejezés szintaxist használja. Ez azonban elavult szintaxis, ezért ajánlatos kerülni ennek használatát. Használja helyette a grep -E parancsot. Ehhez hasonlóan használja a grep -F-et az fgrep helyett, a grep -r-et pedig az rgrep helyett.

27. grep -z

Néha a grep bemenete nem új sor karakterrel végződő sorok. Például, ha egy fájlnevek listáját dolgozza fel, akkor azok különböző forrásokból származhatnak. A -z zászló megmondja a grep-nek, hogy a NULL karaktert vonalvégként kezelje. Ez lehetővé teszi, hogy a bejövő adatfolyamot normál szöveges fájlként kezelje.

28. grep -a [fájl név]

Az -a zászló arra utasítja a grep-et, hogy a mellékelt fájlt úgy kezelje, mintha az normál szöveg lenne. A fájl lehet bináris, de a grep úgy kezeli a benne lévő tartalmat, mintha szöveg lenne.

29. grep -U [fájl név]

Az -U zászló megmondja a grep-nek, hogy kezelje a mellékelt fájlokat, mintha bináris fájlok lennének, és nem szöveg. Alapértelmezés szerint a grep kitalálja a fájltípust az első néhány bájt megtekintésével. Ezzel a zászlóval felülbírálhatók a találgatások.

30. grep -m NUM

Nagy fájlok esetén a kifejezés megkaparintása örökké tarthat. Ha azonban csak az első NUM találatszámot akarja ellenőrizni, akkor ennek eléréséhez használhatja az -m jelzőt. Gyorsabb, és a kimenet gyakran kezelhető is.

Következtetés

A rendszergazda sok mindennapi feladata a nagy mennyiségű szöveg szitálása. Ezek lehetnek biztonsági naplók, naplók a web- vagy levelezőszerverről, felhasználói tevékenységek vagy akár a man oldalak nagy szövege. A Grep extra kis rugalmasságot biztosít Önnek ezeknek a felhasználási eseteknek a kezelésében.

Remélhetőleg a fenti néhány példa és felhasználási eset segített abban, hogy jobban megértse a szoftver ezen élő kövületét.

A legjobb játékok kézi követéssel
Az Oculus Quest nemrégiben bemutatta a vezérlés nélküli kézi követés nagyszerű ötletét. Az egyre növekvő számú játékkal és tevékenységgel, amelyek tám...
Az OSD-fedvény megjelenítése teljes képernyős Linux-alkalmazásokban és játékokban
Teljes képernyős játékok lejátszása vagy alkalmazások figyelemelterelés nélküli, teljes képernyős módban történő használata elvághatja a panelen vagy ...
Az 5 legjobb játékrögzítő kártya
Mindannyian láttuk és szerettük a YouTube-on a streaming játékokat. A PewDiePie, a Jakesepticye és a Markiplier csak néhány a legnépszerűbb játékosok ...