A legtöbb Unix-rendszer kezdő felhasználója, különösen a Linux, nem ismeri az operációs rendszerben használt alapvető parancssori operátorokat. Nézzük meg közelebbről a keresési és a grep-kezelők funkcióit és használatát.
A Find and Grep parancsok használata Linux alatt.
FIND
A Linux keresés parancs egy parancssori segédprogram a fájl hierarchiájának áthaladásához. Fájlok és könyvtárak keresésére és a velük való további műveletek végrehajtására használható. Támogatja a keresést fájl, mappa, név, létrehozási dátum, módosítási dátum, tulajdonos és jogosultságok alapján. A -exec használatával más UNIX parancsok is végrehajthatók a talált fájlokhoz vagy mappákhoz. szintaxis:
$ megtalálja [hol indítsa el a keresést] [kifejezés határozza meg, hogy mit kell találni] [-options] [mit talál]
beállítások:
- -exec - a szükséges kritériumoknak megfelelő fájl, amely 0-t ad vissza kilépési állapotként a sikeres parancs végrehajtásához;
- -ok - ugyanaz, mint a -exec, kivéve, hogy a felhasználó először kéri;
- -inum N - keresés az "N" számmal;
- - linkek N - keresés "N" linkekkel;
- -name demo - a „demóban” meghatározott fájlok keresése;
- -újabb fájl - olyan fájlok keresése, amelyeket a „fájl” után módosítottak / hoztak létre;
- -perm octal - keresés, ha a felbontás oktális;
- -nyomtatás - mutassa meg a más kritériumok alapján talált dokumentumok elérési útját;
- -empty - üres dokumentumok és könyvtárak keresése;
- -size + N / -N - keresési blokkok "N"; Az "N" és a "c" karakterek mérésére használható; A „+ N” az „N” blokkok nagyobb méretét jelenti, a „-N” pedig az „N” blokkok kisebb méretét jelenti;
- -user neve - a felhasználó nevéhez vagy „name” azonosítóhoz tartozó dokumentumok keresése;
- (expr) - Igaz, ha az "expr" igaz; A kritériumok csoportosításához OR vagy AND kapcsolattal együtt.
GREP
A grep parancs a fájlok keresésére szolgál. A funkció a „rendszeres kifejezések globális nyomtatása”, és a Linux egyik legerősebb és leggyakrabban használt parancsja. A parancs egy vagy több bemeneti fájlt keres, amelyek megfelelnek a megadott mintának, és a megfelelő sorokat a szabványos kimenetre írja. Ha nincs megadva fájl, a parancs a szabványos bemenetből olvas, amely általában egy másik parancs kimenete. Ebben a cikkben megmutatjuk, hogyan kell beírni egy parancsot, gyakorlati példákkal és a leggyakoribb GNU grep opciók részletes magyarázatával.
Parancsszintaxis
Mielőtt elkezdenénk használni a parancsot, kezdjük az alapszintű szintaxis áttekintésével. A segédprogram kifejezések a következő formában vannak:
[OPCIÓK] PATTERN [FILE ...]
A szögletes zárójelben lévő elemek opcionálisak.
- OPCIÓK - nulla vagy több választás. A csapat számos lehetőséget kínál a viselkedésének szabályozására.
- PATTERN - Keresési minta.
- FILE - nulla vagy több bemeneti fájl neve.
Hogyan adhat meg parancsot a fájlok kereséséhez
A parancs fő célja, hogy a szöveget keresje a fájlban. Ha például a bash sort tartalmazó / etc / passwd fájlból szeretné megjeleníteni, az alábbi parancsot használhatja:
$ grep bash / etc / passwd
A kimenetnek hasonlónak kell lennie:
0: 0: gyökér: / root: / bin / bash
domain1000: 1000: domain: / home / domain: / bin / bash
Ha a karakterlánc szóközöket tartalmaz, akkor azt egyszeres vagy kettős idézetekben kell csatolni:
$ "Gnome Display Manager" / etc / passwd
Egyezés megfordítása (ex)
Ha nem felel meg a mintanak, adja meg a –v (vagy –invert-match) paramétert. Ha például az / etc / passwd fájlból nologint nem tartalmazó fájlt szeretne megjeleníteni, megadhatja a következő parancsot:
$ -v nologin / etc / passwd
output:
0: 0: gyökér: / root: / bin / bash
colord 124: 124 :: / var / lib / colord: / bin / false
git 994: 994: git démon felhasználó: /: / usr / bin / git-shell
linuxize 1000: 1000: linuxize: / home / linuxize: / bin / bash
Hogyan használjuk a parancsot a kimenetben történő kereséshez
Ehelyett, ha megadja a bemeneti fájlokat, átirányíthatja egy másik parancs kimenetét, és csak a megadott mintához illő sorokat jelenítheti meg. Ha például megtudhatja, hogy mely folyamatok futnak a rendszerben www-adatfelhasználóként, használhatja a következő parancsot:
$ ps -ef | www-data
output:
www-adatok 18247 12675 4 16:00? 00:00:00 php-fpm: medence www
gyökér 18272 17714 0 16:00 pont / 0 00:00:00 - szín = automatikus - kizárás-dir = .bzr —exclude-dir = CVS —exclude-dir = .git —exclude-dir = .hg —exclude-dir = .svn www-adatok
www-adatok 31147 12770 0 Oct22? 00:05:51 nginx: munkavállalói folyamat
www-adatok 31148 12770 0 Oct22? 00:00:00 nginx: gyorsítótárkezelő folyamat
Több csatornát is kombinálhat egy csapatba. Mint látható a fenti kimeneten, van egy sor, amely tartalmazza a folyamatot. Ha nem szeretné, hogy ez a sor megjelenjen, küldje el a kimenetet egy másik példányra, ahogy az alább látható.
$ ps -ef | www-adatok | grep -v grep
output:
www-adatok 18247 12675 4 16:00? 00:00:00 php-fpm: medence www
gyökér 18272 17714 0 16:00 pont / 0 00:00:00 - szín = automatikus - kizárás-dir = .bzr —exclude-dir = CVS —exclude-dir = .git —exclude-dir = .hg —exclude-dir = .svn www-adatok
www-adatok 31147 12770 0 Oct22? 00:05:51 nginx: munkavállalói folyamat
www-adatok 31148 12770 0 Oct22? 00:00:00 nginx: gyorsítótárkezelő folyamat
Rekurzív keresés
A minta rekurzív kereséséhez írja be a –r (vagy –recursive) opciót. Ez lehetővé teszi, hogy a megadott könyvtárban lévő összes fájlban kereshessen, kihagyva a rekurzívan megjelenő szimbolikus hivatkozásokat. Az összes szimbolikus hivatkozás megtekintéséhez használja a –r (vagy –dereference-rekurzív) opciót. A következő példában domain.com-t keresünk az / etc könyvtárban lévő összes fájlban:
$ -r domain.com / etc
A parancs kinyomtatja a megfelelő mezőket a teljes fájlútvonal előtaggal.
/etc/hosts:127.0.0.1 node2.domain.com /etc/nginx/sites-available/domain.com: kiszolgáló_neve domain.com www.domain.com;
Ha a –r opció helyett –r opciót használ, a parancs minden szimbolikus linket követi:
$ -R domain.com / etc
Figyelje meg az utolsó kimeneti mezőt. Ezt a példát nem nyomtatjuk ki a fenti példában, mert a webhely-alapú Nginx könyvtárban található fájlok szimbolikus hivatkozások a konfigurációs fájlokhoz a webhely-elérhető könyvtárban.
output:
/etc/hosts:127.0.0.1 node2.domain.com
/etc/nginx/sites-available/domain.com: kiszolgáló_neve domain.com www.domain.com;
/etc/nginx/sites-enabled/domain.com: kiszolgáló_neve domain.com www.domain.com;
Csak fájlnév megjelenítése
Az alapértelmezett kimenet elfojtásához és csak a megfelelő mintát tartalmazó fájlok nevének kinyomtatásához adja meg a –l (vagy -files-with-match) opciót. Ha például az aktuális munkakönyvtárban minden, a .conf fájlban végződő fájlt keres, és csak a domain.com-t tartalmazó fájlneveket nyomtat, írja be:
$ –L domain.com * .conf
A kimenet így néz ki:
tmux.conf
haproxy.conf
Az -l opciót általában a rekurzív -R opcióval együtt használják:
$ -Rl domain.com / tmp
Esetérzékenység
Alapértelmezés szerint a parancs kis- és nagybetűk, ami azt jelenti, hogy a kis- és nagybetűket különbözőként kezelik. Ha figyelmen kívül hagyja az esetet a keresés során, írja be a –i (vagy –ignore-case) opciót. Ha például Zebra-t keres opció nélkül, az alábbi parancs nem jelenít meg kimenetet, azaz vannak egyezés.
$ Zebra / usr / share / szavak
Ha azonban egy eset-érzéketlen keresést végez, használja a –i opciót, amely egyaránt megfelel a kis- és nagybetűknek:
$ grep -i Zebra / usr / share / words
A „Zebra” felirat a „Zebra”, a „ZEbrA” vagy a kis- és nagybetűk bármely más kombinációjának felel meg.
output:
zebra
zebra
zebrák
Pontos egyezés
A keresés során a gnu is kinyomtatja a gnu-t, amelyben nagyobb szavak vannak beillesztve, mint például a cygnus vagy a magnum.
$ gnu / usr / share / szavak
output:
cygnus
gnú
interregnum
lgnu9d
lignum
nagy családi palack
Magnuson
tőzegmoha
szárnyasdió
Ha csak azokat a kifejezéseket szeretné visszaadni, amelyekben a megadott mező egy egész szó (nem szavakkal van ellátva), akkor a –w opciót használhatja (vagy —word-regexp).
FONTOS. A szó karakterei alfanumerikus karakterek (az, AZ és 0-9) és aláhúzásjelek (_). Minden más karaktert nem verbális karakterként kezelünk.Ha ugyanazt a parancsot futtatja, mint a fenti, beleértve a –w opciót, a parancs csak azokat, amelyek külön gnu-t tartalmaznak, visszaadja.
$ grep -w gnu / usr / share / szavak
Kimenet: gnu
Számok megjelenítése
A mintát tartalmazó sorok számának megjelenítéséhez használja a –n (vagy –line-szám) paramétert. Ezzel az opcióval a szabványos kimenethez illeszkedik a szám, amelyben megtalálta a számot. Például a bash előtagot tartalmazó / etc / services fájlból a megfelelő szám megjelenítéséhez használja a következő parancsot:
$ grep -n 10000 / etc / services
Az alábbi kimenet azt mutatja, hogy a mérkőzések 10423 és 10424 között vannak.
output:
10423: ndmp 10, 000 / tcp
10424: ndmp 10000 / udp
számolás
A megfelelő sorok számának kinyomtatásához használja a –c (vagy –count) paramétert. Az alábbi példában számoljuk meg a shell / usr / bin / zsh számmal rendelkező számlák számát.
$ grep -c '/ usr / bin / zsh' / etc / passwd
Kimenet: 4
Több sor (minta)
A VAGY operátor két vagy több keresési mintát kombinálhat. Alapértelmezés szerint a parancs a szokásos fő kifejezésként értelmezi a mintát, amelyben a metakarakterek elveszítik saját jelentését, és verziókkal rendelkező verziókat kell használni. Az alábbi példában a Natalx hiba naplófájljában a halálos, hibás és kritikus szavak összes előfordulását keressük:
$ grep "végzetes" hiba | kritikus '/var/log/nginx/error.log
Ha a kiterjesztett szabályos kifejezés –E (vagy —extended-regexp) opciót használja, akkor az állítást nem szabad megszüntetni, az alábbiak szerint:
$ grep -E 'végzetes | hiba | kritikus' /var/log/nginx/error.log
Rendszeres kifejezés
A GNU Grep két szabályos kifejezésfunkcióval rendelkezik - Basic és Extended. Alapértelmezés szerint a függvény a szokásos alapértelmezett kifejezést értelmezi, a kiterjesztett rendszeres kifejezésekre való áttéréshez az –E opciót kell használnia. Ha a fő módban rendszeres kifejezéseket használ, minden más karakter, kivéve a metaképeket, valójában rendszeres kifejezések, amelyek megfelelnek egymásnak. Az alábbiakban felsoroljuk a leggyakrabban használt metaképeket:
- Használja a ^ karaktert (a caret karaktert) a sor elején lévő kifejezéshez. A következő példában a ^ kangaroo csak akkor fog megfelelni, ha az a legelején kezdődik: $ grep "^ kangaroo" file.txt
- Használja a $ (dollár) szimbólumot a kifejezés végén lévő kifejezéshez. A következő példában a kangaroo $ csak akkor fog megfelelni, ha a végén találkozunk: grep "kangaroo $" file.txt
- Használja a szimbólumot. (pont) egyetlen karakterhez. Például, ha mindent meg akarunk egy két karakterből álló kan-val kezdeni, és roo-val végződik, akkor a következő mintát használhatja: $ grep "kan..roo" file.txt
- Használja a [] (zárójelben), hogy a zárójelben lévő egyetlen karaktert egyezik meg. Például megtalálhatja azokat, amelyek elfogadják vagy "kiemelik", az alábbi mintát használhatják: $ grep "acce [np] t" file.txt
A következő karakter különleges jelentésének elkerülése érdekében használja a (backslash) karaktert.
Bővített rendszeres kifejezések
A minta kiterjesztett szabályos kifejezésként történő értelmezéséhez használja a –E (vagy –extended-regexp) paramétert. A kiterjesztett rendszeres kifejezések magukban foglalják az összes alapvető karaktert, valamint további metaképeket a bonyolultabb és hatékonyabb keresési minták létrehozásához. Az alábbiakban néhány példa látható:
- Az e-mail címek összesítése és kivonása ebből a fájlból: $ grep -E -o "b [A-Za-z0-9 ._% + -] [A-Za-z0-9 .-] + [A-Za-z] {2.6} b "file.txt
- Az összes érvényes IP-cím megjelenítése és kivonása ebből a fájlból: $ grep -E -o '(25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0 (25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?) (25 [0- 5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?) (25 [0-5] | 2 [0-4] [0- 9] | [01]? [0-9] [0-9]?) 'File.txt
A -o opció csak a mérkőzések nyomtatására szolgál.
Nyomtatás előtt számolás
Egy bizonyos számú sor nyomtatásához az egyezés előtt használja a –B (vagy —before-context) paramétert. Például a kezdeti kontextus 5 sorának megjelenítéséhez az illesztés előtt használhatja a következő parancsot: $ grep -A 5 root / etc / passwd
Keresés a keresés után
Egy bizonyos számú sor nyomtatásához a mérkőzés után használja a –A (vagy –a after-context) paramétert. Például az utolsó sor 5 sorának megjelenítéséhez a megfelelő karakterláncok után a következő parancsot használhatja: $ grep -B 5 root / etc / passwd
Mindez szükséges a parancsinformációk teljes kihasználásához. Ha már használja a Linuxot, és tanácsot adhat a kezdőknek, ossza meg észrevételeit a cikk alapján.