ΠΠ°ΠΊ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° `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 GB, ΠΊΡΠ΄Π΅ΡΠΎ ΡΡΡΠ±Π²Π° ΡΠ°ΠΌΠΎ Π΄Π° ΠΏΠΎΡΠ²ΡΡΠ΄ΠΈΡΠ΅ Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°Π±Π»ΠΎΠ½, -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ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° I/O Ρ ΠΏΠ°ΠΌΠ΅Ρ-ζ ε° Π²ΠΌΠ΅ΡΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ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 ΡΠ°Π±Π»ΠΎΠ½ ΠΈΠ·Π²Π»ΠΈΡΠ° ΡΠ°ΠΌΠΎ ΡΡΠ²ΠΏΠ°Π΄Π°ΡΠΈΡΠ΅ ΠΈΠΌΠ΅ΠΉΠ» Π°Π΄ΡΠ΅ΡΠΈ, ΠΏΠΎ Π΅Π΄ΠΈΠ½ Π½Π° ΡΠ΅Π΄, Π³ΠΎΡΠΎΠ²ΠΈ Π·Π° ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΡΠ½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°.
Π’ΡΡΡΠ΅Π½Π΅ Π² ΠΆΡΡΠ½Π°Π»ΠΈ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΡΠ²ΡΡΠΈ
ΠΠ° Dedicated ΡΡΡΠ²ΡΡ, ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠΈ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° ΡΡΠΏΠΎΡΡΠ°Π²ΡΡΠ΅ ΠΆΡΡΠ½Π°Π»ΠΈ ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ:
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 Π»ΠΎΠΊΠ°Π»Π½ΠΎ, ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½Π΅, Π°ΠΊΠΎ ΠΎΠ±Π΅ΠΌΡΡ ΠΎΠΏΡΠ°Π²Π΄Π°Π²Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°ΡΠ°.
ΠΎΡ Π²ΡΠΈΡΠΊΠΈ Ρ
ΠΎΡΡΠΈΠ½Π³ ΡΡΠ»ΡΠ³ΠΈ