ΠΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ `grep` Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π² ΡΠ°ΠΉΠ»Π°Ρ
ΠΠΎΠΌΠ°Π½Π΄Π° grep β ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ Global Regular Expression Print β ΡΡΠΎ ΡΡΠΈΠ»ΠΈΡΠ° Unix/Linux, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΡΡΡΠΎΡΠ½ΠΎ ΡΠΊΠ°Π½ΠΈΡΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΊΠ°ΠΆΠ΄ΡΡ ΡΡΡΠΎΠΊΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ ΡΠ°Π±Π»ΠΎΠ½Ρ. ΠΠ½Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ Π΄Π΅-ΡΠ°ΠΊΡΠΎ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ΅ΠΊΡΡΠ° Π² Π»ΡΠ±ΠΎΠΉ POSIX-ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²ΡΠ΅, ΡΠ°ΠΊ ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠ΅ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡ Π²ΡΡ β ΠΎΡ ΠΏΡΠΎΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π΄ΠΎ ΡΠ»ΠΎΠΆΠ½ΡΡ
ΠΌΠ½ΠΎΠ³ΠΎΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΡ
ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ².
ΠΡΠ»ΠΈ Π½ΡΠΆΠ΅Π½ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΊΡΠ°ΡΠΊΠΈΠΉ ΠΎΡΠ²Π΅Ρ: ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ grep "pattern" filename Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° Π² ΡΠ°ΠΉΠ»Π΅, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ -r Π΄Π»Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎ Π΄Π΅ΡΠ΅Π²Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ², -i Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° Π±Π΅Π· ΡΡΡΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ° ΠΈ -n Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½ΠΎΠΌΠ΅ΡΠΎΠ² ΡΡΡΠΎΠΊ ΡΡΠ΄ΠΎΠΌ Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌΠΈ. Π Π°Π·Π΄Π΅Π»Ρ Π½ΠΈΠΆΠ΅ ΠΎΡ
Π²Π°ΡΡΠ²Π°ΡΡ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠ΅ ΡΠ΅Ρ
Π½ΠΈΠΊΠΈ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠΌΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ² ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΡΠΎΠΏΡΡΠΊΠ°ΡΡ.
ΠΠ°ΠΊ grep ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈΠ·Π½ΡΡΡΠΈ
grep ΡΠΈΡΠ°Π΅Ρ Π²Ρ
ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΡΡΡΠΎΡΠ½ΠΎ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ Π°Π²ΡΠΎΠΌΠ°Ρ, ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ GNU (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠ°Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² Linux) ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌ Boyer-Moore-Horspool Π΄Π»Ρ Π»ΠΈΡΠ΅ΡΠ°Π»ΡΠ½ΡΡ
ΡΡΡΠΎΠΊ ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Thompson NFA Π΄Π»Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΡ
Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. ΠΠΌΠ΅Π½Π½ΠΎ ΡΡΠ° Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ° Π΄Π΅Π»Π°Π΅Ρ grep ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΡΡΡΡΠΌ Π½Π° Π±ΠΎΠ»ΡΡΠΈΡ
ΡΠ°ΠΉΠ»Π°Ρ
β ΠΎΠ½ ΠΈΠ·Π±Π΅Π³Π°Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ PCRE, ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ perl ΠΈΠ»ΠΈ python.
Π ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π΅ GNU coreutils ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΡΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»Π°:
| ΠΠΎΠΌΠ°Π½Π΄Π° | ΠΠ²ΠΈΠΆΠΎΠΊ | ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ |
|---|---|---|
grep | BRE / ERE (Ρ -E) | Π£Π½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΡΡΡΠΎΡΠ½ΠΎΠ΅ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ |
egrep | ERE (ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠ΅ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ) | Π‘ΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ grep -E |
fgrep | Π’ΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ | Π‘Π°ΠΌΡΠΉ Π±ΡΡΡΡΡΠΉ; Π±Π΅Π· ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ |
zgrep | BRE / ERE Π΄Π»Ρ ΡΠΆΠ°ΡΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² | ΠΡΡ
ΠΈΠ²Ρ .gz, .bz2 |
pgrep | Π‘ΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΡΠ½ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² | ΠΠΎΠΈΡΠΊ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², Π° Π½Π΅ Π² ΡΠ°ΠΉΠ»Π°Ρ |
egrep ΠΈ fgrep ΡΠ²Π»ΡΡΡΡΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌΠΈ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠ°ΠΌΠΈ Π² ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΡΠΈΡΡΠ΅ΠΌΠ°Ρ
; Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΠΈ Π² ΡΠΊΡΠΈΠΏΡΠ°Ρ
ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ grep -E ΠΈ grep -F ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ.
ΠΠ°Π·ΠΎΠ²ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ
grep [options] pattern [file ...]- pattern β ΡΡΡΠΎΠΊΠ° ΠΈΠ»ΠΈ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π·Π°ΠΊΠ»ΡΡΡΠ½Π½ΠΎΠ΅ Π² ΠΊΠ°Π²ΡΡΠΊΠΈ
- file β ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΡΠ΅ΠΉ ΠΊ ΡΠ°ΠΉΠ»Π°ΠΌ; Π΅ΡΠ»ΠΈ Π½Π΅ ΡΠΊΠ°Π·Π°Π½, ΡΠΈΡΠ°Π΅ΡΡΡ ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°
- options β ΡΠ»Π°Π³ΠΈ, ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΠΈΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΡΠΎΡΠΌΠ°Ρ Π²ΡΠ²ΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ
ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π°Ρ
ΠΎΠ΄ΡΡΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΡΡ ΡΡΡΠΎΠΊΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΡΠ»ΠΎΠ²ΠΎ "error", Π² syslog:
grep "error" /var/log/syslogΠΡΠ΅Π³Π΄Π° Π·Π°ΠΊΠ»ΡΡΠ°ΠΉΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½ Π² ΠΊΠ°Π²ΡΡΠΊΠΈ. Π¨Π°Π±Π»ΠΎΠ½Ρ Π±Π΅Π· ΠΊΠ°Π²ΡΡΠ΅ΠΊ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ ΠΌΠ΅ΡΠ°ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ (*, ?, [, $), Π±ΡΠ΄ΡΡ ΡΠ°ΡΠΊΡΡΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΎΠΉ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ grep ΠΈΡ
ΡΠ²ΠΈΠ΄ΠΈΡ, ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ½ΡΠΌ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ
ΠΠΎΠΈΡΠΊ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ°ΠΉΠ»Π°Ρ ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°Ρ
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΡΠ²Π½ΠΎ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΎΡΠ½ΡΠ΅ Π·Π½Π°ΠΊΠΈ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ:
grep "error" access.log error.log debug.log
grep "error" *.logΠΠ»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΡ Π΄Π΅ΡΠ΅Π²Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ -r (ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΡΡΠ»ΠΊΠ°ΠΌ Ρ -R):
grep -r "error" /var/log/ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: ΠΠ° ΡΠ°Π±ΠΎΡΠΈΡ
ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ
Ρ Π³Π»ΡΠ±ΠΎΠΊΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ ΠΈΠ΅ΡΠ°ΡΡ
ΠΈΡΠΌΠΈ ΠΆΡΡΠ½Π°Π»ΠΎΠ² Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΉ -r ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ Π½Π° I/O. ΠΠ³ΡΠ°Π½ΠΈΡΡΡΠ΅ ΠΎΠ±Π»Π°ΡΡΡ ΠΏΠΎΠΈΡΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ --include, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±ΠΈΠ½Π°ΡΠ½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ Π½Π΅ΡΠ΅Π»Π΅Π²Π°Π½ΡΠ½ΡΠΌΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ:
grep -r --include="*.log" "error" /var/log/ΠΠΎΠΈΡΠΊ Π±Π΅Π· ΡΡΡΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ° (-i)
grep -i "error" application.logΠΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ error, Error, ERROR, eRrOr ΠΈ Π»ΡΠ±ΡΠΌ Π΄ΡΡΠ³ΠΈΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ°ΠΌ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ. ΠΠ½ΡΡΡΠ΅Π½Π½Π΅ GNU grep Ρ ΡΠ»Π°Π³ΠΎΠΌ -i ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΠΈ ΡΠ°Π±Π»ΠΎΠ½, ΠΈ Π²Ρ
ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² Π½ΠΈΠΆΠ½ΠΈΠΉ ΡΠ΅Π³ΠΈΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ΠΌ, ΡΡΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠ΅ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ
ΠΎΠ΄Ρ Π½Π° ΠΎΡΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠΈΡ
ΡΠ°ΠΉΠ»Π°Ρ
.
ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅ΡΠΎΠ² ΡΡΡΠΎΠΊ (-n)
grep -n "error" application.logΠΡΠΈΠΌΠ΅Ρ Π²ΡΠ²ΠΎΠ΄Π°:
25:error occurred during processing
103:error: connection refusedΠΠΎΠΌΠ΅ΡΠ° ΡΡΡΠΎΠΊ Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΡ, ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ Π² ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅: vim +25 application.log ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ» Π½Π° ΡΡΡΠΎΠΊΠ΅ 25.
ΠΠΎΠ΄ΡΡΡΡ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ (-c)
grep -c "error" application.logΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΡ ΡΡΡΠΎΠΊ, Π° Π½Π΅ ΡΠ°ΠΌΠΈ ΡΡΡΠΎΠΊΠΈ. ΠΡΠΈ ΠΏΠΎΠΈΡΠΊΠ΅ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ°ΠΉΠ»Π°Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°ΠΉΠ» ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΡΡΡΡΠΈΠΊ:
grep -c "error" *.logaccess.log:0
debug.log:14
error.log:3ΠΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ (-v)
grep -v "error" application.logΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠ°ΠΆΠ΄ΡΡ ΡΡΡΠΎΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ°Π±Π»ΠΎΠ½Ρ. ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅: ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² ΠΈΠ· ΡΠ°ΠΉΠ»Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ΠΉ Π΅Π³ΠΎ ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ:
grep -v "^#" /etc/nginx/nginx.conf | grep -v "^$"ΠΡΠΎ ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΊΠ°ΠΊ ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² (Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ
ΡΡ Ρ #), ΡΠ°ΠΊ ΠΈ ΠΏΡΡΡΡΠ΅ ΡΡΡΠΎΠΊΠΈ, ΠΎΡΡΠ°Π²Π»ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π°ΠΊΡΠΈΠ²Π½ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ.
Π‘ΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π»ΡΡ
ΡΠ»ΠΎΠ² (-w)
grep -w "error" application.logΠΠ΅Π· -w ΠΏΠΎΠΈΡΠΊ error ΡΠ°ΠΊΠΆΠ΅ Π½Π°ΠΉΠ΄ΡΡ errors, error_code ΠΈ myerror. Π€Π»Π°Π³ -w ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ ΠΊ Π³ΡΠ°Π½ΠΈΡΠ°ΠΌ ΡΠ»ΠΎΠ², ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠΌ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ»ΠΎΠ²Π΅ΡΠ½ΡΠΌΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ ([a-zA-Z0-9_]) ΠΈ Π½Π΅ΡΠ»ΠΎΠ²Π΅ΡΠ½ΡΠΌΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ.
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΡΡ
ΡΡΡΠΎΠΊ (-m)
grep -m 5 "error" application.loggrep ΠΏΡΠ΅ΠΊΡΠ°ΡΠ°Π΅Ρ ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΠΏΠΎΡΠ»Π΅ Π½Π°Ρ
ΠΎΠΆΠ΄Π΅Π½ΠΈΡ 5 ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΡ
ΡΡΡΠΎΠΊ. ΠΠ° ΡΠ°ΠΉΠ»Π΅ ΠΆΡΡΠ½Π°Π»Π° ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ 10 ΠΠ, ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ Π»ΠΈΡΡ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½Π°, -m 1 ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Ρ ΡΠ΅ΠΊΡΠ½Π΄ Π΄ΠΎ ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ grep Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ.
Π‘ΡΡΠΎΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° (-A, -B, -C)
ΠΠ΄Π½Π° ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ. ΠΡΠΈ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΎΠΊΡΡΠΆΠ°ΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ ΡΠ°ΡΡΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΏΠ΅ΡΠ²ΠΎΠΏΡΠΈΡΠΈΠ½Ρ:
grep -A 3 "error" application.log # 3 lines After the match
grep -B 3 "error" application.log # 3 lines Before the match
grep -C 3 "error" application.log # 3 lines of Context (before and after)ΠΡΠΎ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅ΠΌ, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ error: connection refused ΠΈ ΠΏΠΎΠ»Π½ΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ ΡΡΠ΅ΠΊΠ° ΠΈΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ Π·Π°ΠΏΡΠΎΡ, Π²ΡΠ·Π²Π°Π²ΡΠΈΠΉ ΠΎΡΠΈΠ±ΠΊΡ.
Π¦Π²Π΅ΡΠΎΠ²ΠΎΠ΅ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ (--color)
grep --color=auto "error" application.logΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²ΠΎΠ² ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ alias grep='grep --color=auto' Π² /etc/profile.d/ ΠΈΠ»ΠΈ ~/.bashrc. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ --color=always ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ Π² less -R Π΄Π»Ρ ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΡ ANSI-ΠΊΠΎΠ΄ΠΎΠ²:
grep --color=always "error" application.log | less -RΠΡΠ²ΠΎΠ΄ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ (-o)
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ grep Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π²ΡΡ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΡΡ ΡΡΡΠΎΠΊΡ. Π€Π»Π°Π³ -o Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡ ΡΠ°ΡΡΡ ΡΡΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ°Π±Π»ΠΎΠ½Ρ:
grep -o "192.[0-9]*.[0-9]*.[0-9]*" access.logΠΡΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ IPv4-Π°Π΄ΡΠ΅Ρ ΠΈΠ· ΠΆΡΡΠ½Π°Π»Π° Π΄ΠΎΡΡΡΠΏΠ° β ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ Π½Π° ΡΡΡΠΎΠΊΡ Π²ΡΠ²ΠΎΠ΄Π° β ΡΡΠΎ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ Π² sort | uniq -c | sort -rn Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π°ΠΊΡΠΈΠ²Π½ΡΡ
ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ².
ΠΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ²ΠΎΠ΄Π° ΠΈΠΌΡΠ½ ΡΠ°ΠΉΠ»ΠΎΠ² (-h) ΠΈ Π΅Π³ΠΎ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ (-H)
ΠΡΠΈ ΠΏΠΎΠΈΡΠΊΠ΅ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΠ°ΠΉΠ»Π°Ρ
grep Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ΠΌ. -h ΠΏΠΎΠ΄Π°Π²Π»ΡΠ΅Ρ ΡΡΠΎ; -H ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π²ΡΠ²ΠΎΠ΄ Π΄Π°ΠΆΠ΅ ΠΏΡΠΈ ΠΏΠΎΠΈΡΠΊΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ -H Π² ΡΠΊΡΠΈΠΏΡΠ°Ρ
Π΄Π»Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° Π²ΡΠ²ΠΎΠ΄Π° Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ².
ΠΡΠ²ΠΎΠ΄ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΡΠ½ ΡΠ°ΠΉΠ»ΠΎΠ² (-l ΠΈ -L)
grep -l "error" *.log # files that contain the pattern
grep -L "error" *.log # files that do NOT contain the patternΠΠΎΠ»Π΅Π·Π½ΠΎ Π² ΡΠΊΡΠΈΠΏΡΠ°Ρ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ.
Π Π΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² grep
ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ (BRE)
grep ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ BRE. ΠΠ»ΡΡΠ΅Π²ΡΠ΅ ΠΌΠ΅ΡΠ°ΡΠΈΠΌΠ²ΠΎΠ»Ρ:
| ΠΠ΅ΡΠ°ΡΠΈΠΌΠ²ΠΎΠ» | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
|---|---|---|
^ | ΠΠ°ΡΠ°Π»ΠΎ ΡΡΡΠΎΠΊΠΈ | grep "^error" β ΡΡΡΠΎΠΊΠΈ, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠ΅ΡΡ Ρ "error" |
$ | ΠΠΎΠ½Π΅Ρ ΡΡΡΠΎΠΊΠΈ | grep "error$" β ΡΡΡΠΎΠΊΠΈ, Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΠΈΠ΅ΡΡ Π½Π° "error" |
. | ΠΡΠ±ΠΎΠΉ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» | grep "err.r" β ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ "error", "errar" ΠΈ Ρ.Π΄. |
* | ΠΠΎΠ»Ρ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ | grep "err*" β "er", "err", "errr" ΠΈ Ρ.Π΄. |
[abc] | ΠΠ»Π°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² | grep "[aeiou]" β Π»ΡΠ±Π°Ρ Π³Π»Π°ΡΠ½Π°Ρ |
[^abc] | ΠΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ | grep "[^0-9]" β Π»ΡΠ±ΠΎΠΉ Π½Π΅ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ» |
| ΠΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠ°ΡΠΈΠΌΠ²ΠΎΠ»Π° | grep "." β Π±ΡΠΊΠ²Π°Π»ΡΠ½Π°Ρ ΡΠΎΡΠΊΠ° |
Π BRE ΡΠΈΠΌΠ²ΠΎΠ»Ρ +, ?, {, }, (, ) ΠΈ | Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΠΊΠΎΡΠΎΠΉ ΡΠ΅ΡΡΠΎΠΉ, ΡΡΠΎΠ±Ρ ΡΡΠ°ΠΊΡΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΌΠ΅ΡΠ°ΡΠΈΠΌΠ²ΠΎΠ»Ρ. ΠΡΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΠΉ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΠΏΡΡΠ°Π½ΠΈΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ BRE ΠΈ ERE.
Π Π°ΡΡΠΈΡΠ΅Π½Π½ΡΠ΅ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ (ERE) Ρ -E
grep -E "error|failure|critical" application.logERE Π΄Π΅Π»Π°Π΅Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΠΈΡΠ΅ β +, ?, |, () ΠΈ {} ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±Π΅Π· ΠΎΠ±ΡΠ°ΡΠ½ΡΡ
ΠΊΠΎΡΡΡ
ΡΠ΅ΡΡ:
grep -E "err(or|ata)?" application.log # matches "err", "error", "errata"
grep -E "[0-9]{1,3}.[0-9]{1,3}" access.log # partial IP pattern
grep -E "^(ERROR|WARN|FATAL)" app.log # lines starting with severity levelsPerl-ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠ΅ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ (PCRE) Ρ -P
GNU grep ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ PCRE ΡΠ΅ΡΠ΅Π· ΡΠ»Π°Π³ -P, ΠΎΡΠΊΡΡΠ²Π°Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠΏΠ΅ΡΠ΅ΠΆΠ°ΡΡΠΈΠΌ ΠΈ ΡΠ΅ΡΡΠΎΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°ΠΌ, Π° ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΠΆΠ°Π΄Π½ΡΠΌ ΠΊΠ²Π°Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌ:
grep -P "(?<=user=)w+" auth.log # extract username after "user="
grep -P "d{4}-d{2}-d{2}" app.log # ISO date formatΠΠ°ΠΆΠ½ΠΎ: -P ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ GNU ΠΈ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π² BSD grep (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² macOS). Π‘ΠΊΡΠΈΠΏΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ -P, Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΡΠΌΠΈ Π±Π΅Π· ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ GNU grep (brew install grep Π² macOS).
ΠΠΎΠΈΡΠΊ Π² ΡΠΆΠ°ΡΡΡ
ΡΠ°ΠΉΠ»Π°Ρ
Ρ ΠΏΠΎΠΌΠΎΡΡΡ zgrep
Π ΠΎΡΠ°ΡΠΈΡ ΠΆΡΡΠ½Π°Π»ΠΎΠ² ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΆΠΈΠΌΠ°Π΅Ρ ΡΡΠ°ΡΡΠ΅ ΠΆΡΡΠ½Π°Π»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ gzip. zgrep ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΠΎΠΈΡΠΊ Π² Π½ΠΈΡ
Π±Π΅Π· ΡΡΡΠ½ΠΎΠΉ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ:
zgrep "error" /var/log/syslog.2.gzΠΠ»Ρ ΡΠ°ΠΉΠ»ΠΎΠ² .bz2 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ bzgrep. ΠΠ»Ρ ΡΠ°ΠΉΠ»ΠΎΠ² .xz ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ xzgrep. ΠΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΠΎΠΈΡΠΊ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π² ΡΠΆΠ°ΡΡΡ
ΠΈ Π½Π΅ΡΠΆΠ°ΡΡΡ
ΠΆΡΡΠ½Π°Π»Π°Ρ
ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
zgrep -r "error" /var/log/ΠΡΠΎΠ±ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ: zgrep Π²Π½ΡΡΡΠ΅Π½Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅Ρ zcat Π΄Π»Ρ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ Π² grep. ΠΠ½ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π²ΡΠ΅ ΡΠ»Π°Π³ΠΈ grep. ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½Ρ -P ΠΈΠ»ΠΈ -o Π΄Π»Ρ ΡΠΆΠ°ΡΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ², ΡΠ½Π°ΡΠ°Π»Π° ΡΠ°ΡΠΏΠ°ΠΊΡΠΉΡΠ΅ ΠΈΡ
Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ zcat file.gz | grep -P "pattern".
ΠΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ grep Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ
ΠΠ°ΡΡΠΎΡΡΠ°Ρ ΠΌΠΎΡΡ grep ΠΏΡΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΡΠΈΠ»ΠΈΡΠ°ΠΌΠΈ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ.
Π€ΠΈΠ»ΡΡΡΠ°ΡΠΈΡ Π²ΡΠ²ΠΎΠ΄Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²
ps aux | grep "[n]ginx"Π’ΡΡΠΊ ΡΠΎ ΡΠΊΠΎΠ±ΠΊΠ°ΠΌΠΈ [n]ginx ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° grep Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°Ρ
, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ°Π±Π»ΠΎΠ½ [n]ginx Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ [n]ginx Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ².
ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π°Π³ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΆΡΡΠ½Π°Π»ΠΎΠ²
grep "error" application.log | sort | uniq -c | sort -rn | head -20ΠΡΠΎΡ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ: Π½Π°Ρ ΠΎΠ΄ΠΈΡ Π²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ Ρ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ, ΡΠΎΡΡΠΈΡΡΠ΅Ρ ΠΈΡ , ΠΏΠΎΠ΄ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ, ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠΎΡΡΠΈΡΡΠ΅Ρ ΠΏΠΎ ΡΠ±ΡΠ²Π°Π½ΠΈΡ ΡΠ°ΡΡΠΎΡΡ ΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ 20 Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΡΠΎ ΠΏΠ΅ΡΠ²ΠΈΡΠ½Π°Ρ ΡΠ΅Ρ Π½ΠΈΠΊΠ° ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΈΠ½ΡΠΈΠ΄Π΅Π½ΡΠΎΠ² ΠΏΡΠΈ Π»ΡΠ±ΠΎΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΠΈΠ½ΡΠΈΠ΄Π΅Π½ΡΠ΅.
ΠΠΎΠΈΡΠΊ ΡΠ°ΠΉΠ»ΠΎΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ ΡΠ°Π±Π»ΠΎΠ½, Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠΌΠΈ Π½Π°Π΄ Π½ΠΈΠΌΠΈ
grep -rl "deprecated_function" /var/www/html/ | xargs sed -i 's/deprecated_function/new_function/g'grep -rl Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠ°ΠΉΠ»ΠΎΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ
ΡΠ°Π±Π»ΠΎΠ½; xargs ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈΡ
Π² sed Π΄Π»Ρ Π·Π°ΠΌΠ΅Π½Ρ Π½Π° ΠΌΠ΅ΡΡΠ΅. ΠΡΠ΅Π³Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΡΠΉΡΠ΅ Π±Π΅Π· -i ΡΠ½Π°ΡΠ°Π»Π° ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ -i.bak Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅Π·Π΅ΡΠ²Π½ΡΡ
ΠΊΠΎΠΏΠΈΠΉ.
ΠΠΎΠΈΡΠΊ ΡΠ΅ΡΠ΅Π· SSH
ssh user@server "grep -r 'error' /var/log/app/" | lessΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΡΡ grep Π½Π° ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΡΠΌΠΈΠ½Π°Π» β ΡΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΡΠ°ΠΉΠ»Ρ ΠΆΡΡΠ½Π°Π»ΠΎΠ² ΡΠ»ΠΈΡΠΊΠΎΠΌ Π²Π΅Π»ΠΈΠΊΠΈ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ.
ΠΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Ρ awk Π΄Π»Ρ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·Π±ΠΎΡΠ°
grep "POST /api" access.log | awk '{print $1, $7, $9}'grep ΡΠΈΠ»ΡΡΡΡΠ΅Ρ Π½ΡΠΆΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ; awk ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΠΏΠΎΠ»Ρ (IP, URL, ΠΊΠΎΠ΄ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ). ΠΡΠ° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎΠΌ Π·Π°Π΄Π°Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΠΆΡΡΠ½Π°Π»ΠΎΠ² Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ Π°Π³ΡΠ΅Π³Π°ΡΠΈΠΈ ΠΆΡΡΠ½Π°Π»ΠΎΠ².
Π‘ΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ
ΠΠ° Π±ΠΎΠ»ΡΡΠΈΡ ΡΠ°ΠΉΠ»Π°Ρ ΠΈΠ»ΠΈ ΠΏΡΠΈ Π²ΡΡΠΎΠΊΠΎΡΠ°ΡΡΠΎΡΠ½ΠΎΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅:
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
-FΠ΄Π»Ρ Π»ΠΈΡΠ΅ΡΠ°Π»ΡΠ½ΡΡ ΡΡΡΠΎΠΊ.grep -F "exact string"ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΠ±Ρ ΠΎΠ΄ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π·Π°ΠΌΠ΅ΡΠ½ΠΎ Π±ΡΡΡΡΠ΅Π΅. - ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
LC_ALL=C. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°LC_ALL=C grep "pattern" fileΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡΠΎΠ²ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π² 2β5 ΡΠ°Π· Π±ΡΡΡΡΠ΅Π΅ Π½Π° UTF-8 ΡΠ°ΠΉΠ»Π°Ρ , ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡΠΎΠ²ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². - ΠΠ·Π±Π΅Π³Π°ΠΉΡΠ΅
-rΠ½Π° ΡΠ΅ΡΠ΅Π²ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ . Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ grep ΡΠ΅ΡΠ΅Π· NFS ΠΈΠ»ΠΈ CIFS ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΡΡΠΈΡΡ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ I/O. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅findΡ-execΠΈ ΡΠ²Π½ΡΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΡΠΈ. - ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
--mmapΠ² Linux.grep --mmapΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΠΏΠ°ΠΌΡΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ²read(), ΡΡΠΎ ΡΠ½ΠΈΠΆΠ°Π΅Ρ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ Π½Π° Π±ΠΎΠ»ΡΡΠΈΡ ΡΠ°ΠΉΠ»Π°Ρ (Π΄ΠΎΡΡΡΠΏΠ½ΠΎ Π½Π΅ Π½Π° Π²ΡΠ΅Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ ). - Π Π°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ²Π°ΠΉΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
xargs -P. ΠΠ»Ρ ΠΏΠΎΠΈΡΠΊΠ° Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΡΠ°ΠΉΠ»Π°Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅ Π½Π°Π³ΡΡΠ·ΠΊΡ:
find /var/log -name "*.log" | xargs -P 4 grep -l "error"ΠΡΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ 4 ΠΏΡΠΎΡΠ΅ΡΡΠ° grep ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ, Π·Π°Π΄Π΅ΠΉΡΡΠ²ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΄Π΅Ρ CPU.
grep Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΏΠΎΠΈΡΠΊΠ°
| ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ | Π‘ΠΊΠΎΡΠΎΡΡΡ Π½Π° Π±ΠΎΠ»ΡΡΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡ | ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ | Π£ΡΠΈΡΡΠ²Π°Π΅Ρ `.gitignore` | ΠΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ |
|---|---|---|---|---|
grep | Π£ΠΌΠ΅ΡΠ΅Π½Π½Π°Ρ | BRE/ERE/PCRE | ΠΠ΅Ρ | Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΠΆΡΡΠ½Π°Π»Ρ, ΡΠΊΡΠΈΠΏΡΠΈΠ½Π³ |
ripgrep (rg) | ΠΡΠ΅Π½Ρ Π±ΡΡΡΡΠ°Ρ | PCRE2 | ΠΠ° | ΠΠΎΠΈΡΠΊ ΠΏΠΎ ΠΊΠΎΠ΄Ρ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡ |
ag (Silver Searcher) | ΠΡΡΡΡΠ°Ρ | PCRE | ΠΠ° | ΠΠΎΠΈΡΠΊ ΠΏΠΎ ΠΊΠΎΠ΄Ρ, Π±ΠΎΠ»Π΅Π΅ ΡΡΠ°ΡΠ°Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° rg |
ack | Π£ΠΌΠ΅ΡΠ΅Π½Π½Π°Ρ | PCRE | Π§Π°ΡΡΠΈΡΠ½ΠΎ | ΠΠΎΠ΄ΠΎΠ²ΡΠ΅ Π±Π°Π·Ρ, ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π½Π° Perl |
fgrep / grep -F | Π‘Π°ΠΌΠ°Ρ Π±ΡΡΡΡΠ°Ρ | ΠΠ΅Ρ (ΡΠΎΠ»ΡΠΊΠΎ Π»ΠΈΡΠ΅ΡΠ°Π»Ρ) | ΠΠ΅Ρ | Π‘ΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»ΠΎΠ² ΠΏΠΎ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΡΡΡΠΎΠΊΠ°ΠΌ |
ΠΠ»Ρ Π·Π°Π΄Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ β ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ /var/log, /etc ΠΈΠ»ΠΈ Π²ΡΠ²ΠΎΠ΄Π° Π°ΠΊΡΠΈΠ²Π½ΡΡ
ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² β grep ΠΎΡΡΠ°ΡΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΏΠΎΠ²ΡΠ΅ΠΌΠ΅ΡΡΠ½ΠΎ Π±Π΅Π· ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ. ΠΠ»Ρ ΠΏΠΎΠΈΡΠΊΠ° Π² ΠΊΠΎΠ΄ΠΎΠ²ΡΡ
Π±Π°Π·Π°Ρ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ripgrep Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΡΡΡΠ΅Π΅ ΠΈ ΡΠ΄ΠΎΠ±Π½Π΅Π΅.
ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ
ΠΡΠ΄ΠΈΡ Π½Π΅ΡΠ΄Π°ΡΠ½ΡΡ ΠΏΠΎΠΏΡΡΠΎΠΊ Π²Ρ ΠΎΠ΄Π° ΠΏΠΎ SSH
grep -i "failed password" /var/log/auth.log | grep -oP "from K[d.]+" | sort | uniq -c | sort -rn | head -10ΠΡΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ IP ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎΠΉ ΠΏΠΎΠΏΡΡΠΊΠΈ Π²Ρ ΠΎΠ΄Π° ΠΏΠΎ SSH ΠΈ ΡΠ°Π½ΠΆΠΈΡΡΠ΅Ρ ΠΈΡ ΠΏΠΎ ΡΠ°ΡΡΠΎΡΠ΅ β ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π³ Π² Π²ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² Π±ΡΡΡΡΠΎΡΡΠ° ΠΏΠ΅ΡΠ΅Π΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠ°Π²ΠΈΠ» Π±ΡΠ°Π½Π΄ΠΌΠ°ΡΡΡΠ°.
ΠΠΎΠΈΡΠΊ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠΎΠΌ ΡΠ»ΡΠΆΠ±Ρ
grep -rn "listens*443" /etc/nginx/ΠΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π°Π΅Ρ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Nginx ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ HTTPS-ΡΠ»ΡΡΠ°ΡΠ΅Π»ΠΈ. Π‘ΠΎΠ²ΠΌΠ΅ΡΡΠΈΡΠ΅ Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΎΠΉ SSL-ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠ², ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΏΡΡΠΈ ΠΊ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°ΠΌ, ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ Π² ΡΡΠΈΡ ΡΠ°ΠΉΠ»Π°Ρ , Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ.
ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΡΠ°ΠΉΠ»Π° ΠΆΡΡΠ½Π°Π»Π° Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ
tail -f /var/log/app/production.log | grep --line-buffered "ERROR"--line-buffered Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ grep ΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡ Π²ΡΠ²ΠΎΠ΄ ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, Π° Π½Π΅ Π±ΡΡΠ΅ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ, ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ ΠΈΠ· tail -f. ΠΠ΅Π· ΡΡΠΎΠ³ΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π΅ Π²ΠΈΠ΄Π΅ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π²ΡΠ²ΠΎΠ΄Π° Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΠΌΠΈΠ½ΡΡ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΡΡ.
ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ°Π·Π²ΡΡΠ½ΡΡΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
grep -c "server_name" /etc/nginx/sites-enabled/* | grep -v ":0"ΠΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΏΠΈΡΠΎΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΡΠ° Nginx, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π³ΠΎ Ρ
ΠΎΡΡ Π±Ρ ΠΎΠ΄Π½Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ server_name β Π±ΡΡΡΡΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΏΠΎΡΠ»Π΅ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Ρ
ΠΎΡΡΠ° Π² ΡΡΠ΅Π΄Π΅ VPS-Ρ
ΠΎΡΡΠΈΠ½Π³Π°.
ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠΎΠ² ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΠΏΠΎΡΡΡ ΠΈΠ· ΡΠ°ΠΉΠ»Π°
grep -Eo "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}" contacts.txtΠ€Π»Π°Π³ -o Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ ERE ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠ° ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΠΏΠΎΡΡΡ, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ Π½Π° ΡΡΡΠΎΠΊΡ, Π³ΠΎΡΠΎΠ²ΡΠ΅ ΠΊ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅.
ΠΠΎΠΈΡΠΊ Π² ΠΆΡΡΠ½Π°Π»Π°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ
ΠΠ° Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»ΠΎΠ² ΠΈΠ· ΡΠ°Π·Π½ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ²:
grep -rh --include="*.log" "transaction_id=abc123" /var/log/app1/ /var/log/app2/ /var/log/app3/-h ΠΏΠΎΠ΄Π°Π²Π»ΡΠ΅Ρ ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ², ΡΡΠΎΠ±Ρ Π²ΡΠ²ΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ Π² ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΌΠ΅ΡΠΊΠ°ΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅.
Π Π°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΈΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ
ΠΠ°Π±ΡΡΡΠ΅ ΠΊΠ°Π²ΡΡΠΊΠΈ Π²ΠΎΠΊΡΡΠ³ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Ρ ΠΏΡΠΎΠ±Π΅Π»Π°ΠΌΠΈ:
# Wrong β shell splits "connection refused" into two arguments
grep connection refused /var/log/syslog
# Correct
grep "connection refused" /var/log/syslogΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° BRE ΡΠ°ΠΌ, Π³Π΄Π΅ Π½ΡΠΆΠ΅Π½ ERE:
# Wrong in BRE β + is literal
grep "error+" app.log
# Correct β use -E or escape in BRE
grep -E "error+" app.log
grep "error+" app.logΠ Π΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠΈΡΠΊ, Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°ΡΡΠΈΠΉ Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ:
# Produces "Binary file matches" noise
grep -r "config" /usr/
# Correct β skip binary files
grep -r --binary-files=without-match "config" /usr/
# or equivalently
grep -rI "config" /usr/ΠΡΡΠ°Π½ΠΈΡΠ° Ρ ΡΠΊΠΎΡΡΠΌΠΈ β ^ Π²Π½ΡΡΡΠΈ ΠΊΠ»Π°ΡΡΠ° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²:
[^abc] ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Β«Π½Π΅ a, b ΠΈΠ»ΠΈ cΒ». ^ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Β«Π½Π°ΡΠ°Π»ΠΎ ΡΡΡΠΎΠΊΠΈΒ» ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎΠΈΡ Π² ΡΠ°ΠΌΠΎΠΌ Π½Π°ΡΠ°Π»Π΅ ΡΠ°Π±Π»ΠΎΠ½Π°, Π²Π½Π΅ ΡΠΊΠΎΠ±ΠΎΠΊ.
ΠΠ»ΡΡΠ΅Π²ΡΠ΅ Π²ΡΠ²ΠΎΠ΄Ρ ΠΈ ΠΌΠ°ΡΡΠΈΡΠ° ΠΏΡΠΈΠ½ΡΡΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΎΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΏΡΠΈ ΡΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ grep:
- ΠΠΈΡΠ΅ΡΠ°Π»ΡΠ½Π°Ρ ΡΡΡΠΎΠΊΠ°, ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π΅ Π½ΡΠΆΠ½Ρ? ΠΠΎΠ±Π°Π²ΡΡΠ΅
-FΠ΄Π»Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ. - ΠΠ΅ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΡΠ΅Π³ΠΈΡΡΡ Π² ΡΠ΅Π»Π΅Π²ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅? ΠΠΎΠ±Π°Π²ΡΡΠ΅
-i. - ΠΡΠΆΠ½ΠΎ Π·Π½Π°ΡΡ, Π³Π΄Π΅ Π² ΡΠ°ΠΉΠ»Π΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅? ΠΠΎΠ±Π°Π²ΡΡΠ΅
-n. - ΠΠΎΠΈΡΠΊ ΠΏΠΎ Π΄Π΅ΡΠ΅Π²Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ²? ΠΠΎΠ±Π°Π²ΡΡΠ΅
-r --include="*.ext"Π΄Π»Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠΎΠΈΡΠΊΠ°. - ΠΠΎΠ»ΡΡΠΎΠΉ ΡΠ°ΠΉΠ», Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅? ΠΠΎΠ±Π°Π²ΡΡΠ΅
-m 1ΠΈgrepΠ·Π°Π²Π΅ΡΡΠΈΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ. - ΠΡΠΆΠ΅Π½ ΠΎΠΊΡΡΠΆΠ°ΡΡΠΈΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π΄Π»Ρ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ? ΠΠΎΠ±Π°Π²ΡΡΠ΅
-C 3. - Π¨Π°Π±Π»ΠΎΠ½ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ΅ΡΠ°ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ? ΠΠ°ΠΊΠ»ΡΡΠΈΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½ Π² ΠΎΠ΄ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΠΊΠ°Π²ΡΡΠΊΠΈ:
grep '$variable'. - ΠΠΎΠΈΡΠΊ Π² ΡΠΆΠ°ΡΡΡ
ΠΆΡΡΠ½Π°Π»Π°Ρ
? ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
zgrepΠΈΠ»ΠΈzcat file.gz | grep. - ΠΡΠΆΠ½Ρ ΡΠ΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΊΠ²Π°Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ
+/?? ΠΠΎΠ±Π°Π²ΡΡΠ΅-EΠ΄Π»Ρ ERE. - ΠΡΠΆΠ½Ρ ΠΎΠΏΠ΅ΡΠ΅ΠΆΠ°ΡΡΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈΠ»ΠΈ Π½Π΅ΠΆΠ°Π΄Π½ΠΎΠ΅ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅? ΠΠΎΠ±Π°Π²ΡΡΠ΅
-PΠ΄Π»Ρ PCRE (ΡΠΎΠ»ΡΠΊΠΎ GNU grep). - ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠ΅Π³ΠΎ ΡΠ΅ΠΊΡΡΠ°, Π° Π½Π΅ ΡΠ΅Π»ΡΡ
ΡΡΡΠΎΠΊ? ΠΠΎΠ±Π°Π²ΡΡΠ΅
-o. - ΠΠΎΠΈΡΠΊ Π² ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅, Π° Π½Π΅ Π² ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ
ΡΠ°ΠΉΠ»Π°Ρ
? Π Π°ΡΡΠΌΠΎΡΡΠΈΡΠ΅
ripgrepΠ²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ.
ΠΡΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠΎΠΉ β Π±ΡΠ΄Ρ ΡΠΎ VPS Ρ cPanel ΠΈΠ»ΠΈ ΡΠΈΡΡΠ°Ρ ΡΡΠ΅Π΄Π° Linux β grep ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π²Ρ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΠ΅ΡΡ ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. Π£ΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΉ ΡΠ»Π°Π³ΠΎΠ² ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Ρ awk, sed, sort ΠΈ xargs ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΆΡΡΠ½Π°Π»ΠΎΠ² Π² ΠΏΠΎΠ»Π΅Π·Π½ΡΡ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠ΅ΡΠΊΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΡΠΈΡΠ°Π½Π½ΡΠ΅ ΡΠ΅ΠΊΡΠ½Π΄Ρ.
ΠΠ»Ρ ΡΡΠ΅Π΄, Π³Π΄Π΅ ΠΏΠΎΡΡΠΎΠ²ΡΠΉ Ρ
ΠΎΡΡΠΈΠ½Π³ ΠΈΠ»ΠΈ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΆΡΡΠ½Π°Π»Ρ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΎΠ±ΡΡΠΌΠΎΠΌ Π΄Π°Π½Π½ΡΡ
, Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠ°Π³ΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠ΅ grep Ρ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠΎΠΌ Π°Π³ΡΠ΅Π³Π°ΡΠΈΠΈ ΠΆΡΡΠ½Π°Π»ΠΎΠ² (ΡΡΠ΅ΠΊ ELK, Loki ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ) β ΠΎΠ΄Π½Π°ΠΊΠΎ grep ΠΎΡΡΠ°ΡΡΡΡ Π·Π°ΠΏΠ°ΡΠ½ΡΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π²Π΅Π·Π΄Π΅, Π²ΡΠ΅Π³Π΄Π° ΠΈ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ
-Π»ΠΈΠ±ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ.
Π§Π°ΡΡΠΎ Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ
Π ΡΡΠΌ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ grep, egrep ΠΈ fgrep?
grep ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. egrep ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ΅Π½ grep -E ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠ΅ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π³Π΄Π΅ +, ?, | ΠΈ () ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±Π΅Π· ΠΎΠ±ΡΠ°ΡΠ½ΡΡ
ΠΊΠΎΡΡΡ
ΡΠ΅ΡΡ. fgrep ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ΅Π½ grep -F ΠΈ ΡΡΠ°ΠΊΡΡΠ΅Ρ ΡΠ°Π±Π»ΠΎΠ½ ΠΊΠ°ΠΊ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π»ΠΈΡΠ΅ΡΠ°Π»ΡΠ½ΡΡ ΡΡΡΠΎΠΊΡ Π±Π΅Π· ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΡ
Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π΅Π³ΠΎ ΡΠ°ΠΌΡΠΌ Π±ΡΡΡΡΡΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠΌ. ΠΠ±Π° egrep ΠΈ fgrep ΡΠ²Π»ΡΡΡΡΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌΠΈ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠ°ΠΌΠΈ; ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ grep -E ΠΈ grep -F Π² ΡΠΊΡΠΈΠΏΡΠ°Ρ
.
ΠΠΎΡΠ΅ΠΌΡ grep -r ΠΈΠ½ΠΎΠ³Π΄Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Β«Binary file matchesΒ»?
grep ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΏΡΡΡΠΌ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ Π½ΡΠ»Π΅Π²ΡΡ
Π±Π°ΠΉΡΠΎΠ². ΠΠΎΠ³Π΄Π° ΠΎΠ½ Π½Π°Ρ
ΠΎΠ΄ΠΈΡ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠΈΡΠ°Π΅Ρ Π±ΠΈΠ½Π°ΡΠ½ΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅. ΠΠΎΠ΄Π°Π²ΠΈΡΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ grep -rI (Π·Π°Π³Π»Π°Π²Π½Π°Ρ I) ΠΈΠ»ΠΈ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΠΊΠ»ΡΡΠΈΡΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ grep -ra (ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΊΠ°ΠΊ ΡΠ΅ΠΊΡΡ). ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ -I Π² ΡΠ°Π±ΠΎΡΠ΅ΠΉ ΡΡΠ΅Π΄Π΅, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΈΡΠΊΠ°ΠΆΡΠ½Π½ΠΎΠ³ΠΎ Π²ΡΠ²ΠΎΠ΄Π° ΠΏΡΠΈ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠΌ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΈ Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΈΠ»ΠΈ ΡΠΆΠ°ΡΡΠΌΠΈ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ.
ΠΠ°ΠΊ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΠΎΠΈΡΠΊ ΡΠ°Π±Π»ΠΎΠ½Π°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π³ΠΎ ΠΏΡΡΠΌΡΡ ΠΊΠΎΡΡΡ ΡΠ΅ΡΡΡ?
ΠΡΡΠΌΡΠ΅ ΠΊΠΎΡΡΠ΅ ΡΠ΅ΡΡΡ Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΠ°Π±Π»ΠΎΠ½Π°Ρ
grep (Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ sed ΠΈΠ»ΠΈ awk). ΠΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎ: grep "var/log" /etc/logrotate.conf. ΠΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ.
ΠΠ°ΠΊΠΎΠ² ΡΠ°ΠΌΡΠΉ Π±ΡΡΡΡΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π»ΠΈ ΡΡΡΠΎΠΊΠ° Π³Π΄Π΅-Π»ΠΈΠ±ΠΎ Π² Π±ΠΎΠ»ΡΡΠΎΠΌ ΡΠ°ΠΉΠ»Π΅?
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ grep -qF "string" file && echo "found". Π€Π»Π°Π³ -q ΠΏΠΎΠ΄Π°Π²Π»ΡΠ΅Ρ Π²Π΅ΡΡ Π²ΡΠ²ΠΎΠ΄ ΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΡΠΎ ΡΡΠ°ΡΡΡΠΎΠΌ 0 ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΈ, 1 β Π΅ΡΠ»ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ Π½Π΅Ρ. Π€Π»Π°Π³ -F ΠΎΡΠΊΠ»ΡΡΠ°Π΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΡ
Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. Π ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΠΎΡΡΠΈ grep ΡΠΈΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠ»Π°, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ, ΠΈ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ β ΡΡΠΎ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π°ΠΆΠ½ΠΎ Π΄Π»Ρ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ Π² Π³ΠΈΠ³Π°Π±Π°ΠΉΡΡ.
ΠΠΎΠΆΠ΅Ρ Π»ΠΈ grep Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΠΎΠΈΡΠΊ Π² ΡΠ°ΠΉΠ»Π°Ρ
Π½Π° ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ Π±Π΅Π· ΠΈΡ
Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ?
ΠΠ°. ΠΠ΅ΡΠ΅Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ΅ΡΠ΅Π· SSH: ssh user@host "grep -r 'pattern' /var/log/". ΠΠΎΠΈΡΠΊ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π° ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠΌ Ρ
ΠΎΡΡΠ΅, ΠΈ ΠΏΠΎ ΡΠ΅ΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ. ΠΠ»Ρ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΡ
ΠΏΠΎΠΈΡΠΊΠΎΠ² ΡΠ°ΡΡΠΌΠΎΡΡΠΈΡΠ΅ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ sshfs ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ Π·Π°ΠΏΡΡΠΊ grep, ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΆΡΡΠ½Π°Π»ΠΎΠ², Π΅ΡΠ»ΠΈ ΠΎΠ±ΡΡΠΌ Π΄Π°Π½Π½ΡΡ
ΠΎΠΏΡΠ°Π²Π΄ΡΠ²Π°Π΅Ρ ΡΠ°ΠΊΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ.
Π½Π° Π²ΡΠ΅Ρ
Ρ
ΠΎΡΡΠΈΠ½Π³ΠΎΠ²ΡΡ
ΡΡΠ»ΡΠ³Π°Ρ