ΠΠ°ΠΊ Π½Π°ΠΉΡΠΈ ΡΠ°ΠΉΠ» ΠΏΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ Π² Linux: ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅ grep, find ΠΈ awk
ΠΠΎΠΈΡΠΊ ΡΠ°ΠΉΠ»Π° ΠΏΠΎ Π΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ Π² Linux ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
ΡΠ°ΠΉΠ»Π° β Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΡΠ½ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ
β Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ°ΠΊΠΈΡ
ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠ°ΠΊ grep, find ΠΈ awk Π΄Π»Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ
ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ², ΡΡΡΠΎΠΊ ΠΈΠ»ΠΈ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΡ
Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΠ°ΠΉΠ»Π°Ρ
ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ. ΠΡΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π·Π½Π°Π΅ΡΠ΅, ΡΡΠΎ ΡΠ°ΠΉΠ» *ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ*, Π½ΠΎ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅, Π³Π΄Π΅ ΠΎΠ½ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ.
ΠΠ»Ρ Π²ΡΠ΅Ρ
, ΠΊΡΠΎ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ΅Π΄ΠΎΠΉ VPS Π₯ΠΎΡΡΠΈΠ½Π³Π°, ΠΏΠΎΠΈΡΠΊ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΏΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΡ: ΠΏΠΎΠΈΡΠΊ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΡ
Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ² Π² /etc, Π°ΡΠ΄ΠΈΡ Π»ΠΎΠ³-ΡΠ°ΠΉΠ»ΠΎΠ² Π½Π° ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈΠ»ΠΈ ΠΏΠΎΠΈΡΠΊ ΠΆΡΡΡΠΊΠΎ Π·Π°Π΄Π°Π½Π½ΡΡ
ΡΡΡΡΠ½ΡΡ
Π΄Π°Π½Π½ΡΡ
Π² Π΄Π΅ΡΠ΅Π²ΡΡΡ
ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠΎΠΌΠ°Π½Π΄Ρ, ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠ΅ Π² ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅, ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π²ΠΎ Π²ΡΠ΅Ρ
ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π°Ρ
Linux β Debian, Ubuntu, CentOS, AlmaLinux ΠΈ Arch β Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΠΏΠ°ΠΊΠ΅ΡΠΎΠ².
ΠΠΎΡΠ΅ΠΌΡ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ Π²Π°ΠΆΠ΅Π½ Π² ΡΡΠ΅Π΄Π΅ Linux
ΠΠΎΠΈΡΠΊ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° (ls, locate) Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌ ΡΠ°ΠΉΠ»Π°. Π ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΡΡ
ΡΠΈΡΡΠ΅ΠΌΠ°Ρ
ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π°ΠΆΠ½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΏΠΎΡΡΠΈ Π²ΡΠ΅Π³Π΄Π° ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ:
- ΠΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ°ΠΉΠ» ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ
max_connectionsΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅? - ΠΠ°ΠΊΠΎΠΉ PHP-ΡΠ°ΠΉΠ» ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²ΡΠ·ΠΎΠ² ΡΡΡΠ°ΡΠ΅Π²ΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΉ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ?
- ΠΠ°ΠΊΠΎΠΉ Π»ΠΎΠ³-ΡΠ°ΠΉΠ» Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π» ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΉ IP-Π°Π΄ΡΠ΅Ρ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ?
- ΠΠ°ΠΊΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Π½ΠΈΡ cron ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° ΡΠ΄Π°Π»ΡΠ½Π½ΡΠΉ ΠΏΡΡΡ ΠΊ ΡΠΊΡΠΈΠΏΡΡ?
Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠ΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΡ ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΏΠΎΠΈΡΠΊΠ° Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π½Π° ΡΡΠΈ Π²ΠΎΠΏΡΠΎΡΡ Π² ΠΌΠ°ΡΡΡΠ°Π±Π΅. ΠΠΎΠΌΠ°Π½Π΄Π½Π°Ρ ΡΡΡΠΎΠΊΠ° Linux ΠΌΠΎΠΆΠ΅Ρ β ΠΈ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ Π·Π° ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Ρ ΡΡΠ΅Π΄ΠΈ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² ΡΠ°ΠΉΠ»ΠΎΠ² ΠΏΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ.
ΠΠΎΠΌΠ°Π½Π΄Π° grep: ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ
grep (Global Regular Expression Print) β ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ² Π² Linux. ΠΠ½ ΡΠΈΡΠ°Π΅Ρ ΡΠ°ΠΉΠ»Ρ ΠΏΠΎΡΡΡΠΎΡΠ½ΠΎ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π»ΡΠ±ΡΡ ΡΡΡΠΎΠΊΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ ΡΠ°Π±Π»ΠΎΠ½Ρ.
ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ
grep [OPTIONS] PATTERN [FILE_OR_DIRECTORY]
Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ
ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΠΎΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ β ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ Π²ΡΠ΅ΠΌΡ Π΄Π΅ΡΠ΅Π²Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΉ:
grep -rnw '/path/to/directory/' -e 'search_text'ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π°Π³Π°:
| Π€Π»Π°Π³ | ΠΠΎΠ»Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ | ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ |
|---|---|---|
-r | --recursive | ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π² ΠΏΠΎΠ΄Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ |
-n | --line-number | ΠΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π½ΠΎΠΌΠ΅Ρ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠΈ ΠΊ Π²ΡΠ²ΠΎΠ΄Ρ |
-w | --word-regexp | Π‘ΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅Π»ΡΠ΅ ΡΠ»ΠΎΠ²Π° β test Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ testing |
-e | --regexp | Π―Π²Π½ΠΎ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅Ρ ΡΠ°Π±Π»ΠΎΠ½ ΠΏΠΎΠΈΡΠΊΠ°; ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΠ°Π±Π»ΠΎΠ½ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ Π΄Π΅ΡΠΈΡΠ° |
-i | --ignore-case | ΠΠΎΠΈΡΠΊ Π±Π΅Π· ΡΡΡΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ° (Error ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ error, ERROR) |
-l | --files-with-matches | ΠΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ², Π° Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ |
-c | --count | ΠΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΡ ΡΡΡΠΎΠΊ Π½Π° ΡΠ°ΠΉΠ» |
-v | --invert-match | ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΠ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΡΠ°Π±Π»ΠΎΠ½Ρ |
-A N | --after-context=N | ΠΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ N ΡΡΡΠΎΠΊ ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° |
-B N | --before-context=N | ΠΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ N ΡΡΡΠΎΠΊ ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° |
--include | N/A | ΠΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΏΠΎΠΈΡΠΊ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ ΡΠ°Π±Π»ΠΎΠ½Ρ glob |
--exclude | N/A | ΠΡΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ°ΠΉΠ»Ρ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½Ρ glob |
ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ grep
ΠΠΎΠΈΡΠΊ ΡΡΡΠΎΠΊΠΈ "test1" Π²Π½ΡΡΡΠΈ /usr/games ΠΈ Π²ΡΠ΅Ρ
ΠΏΠΎΠ΄Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΉ:
grep -r "test1" /usr/gamesΠΠ°ΠΉΡΠΈ Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π² /etc, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ ΡΠ»ΠΎΠ²ΠΎ "network" (ΡΠ΅Π»ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ, Π±Π΅Π· ΡΡΡΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ°), Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½ΠΎΠΌΠ΅ΡΠΎΠ² ΡΡΡΠΎΠΊ:
grep -rniw "network" /etcΠΡΠ²Π΅ΡΡΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ² (Π±Π΅Π· ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΡ
ΡΡΡΠΎΠΊ) PHP-ΡΠ°ΠΉΠ»ΠΎΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ
eval(:
grep -rl "eval(" /var/www/html --include="*.php"ΠΠΎΠΈΡΠΊ ΡΠ°Π±Π»ΠΎΠ½Π° Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ 3 ΡΡΡΠΎΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π΄ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ:
grep -rn -A 3 -B 3 "FATAL" /var/log/ΠΠΎΠ΄ΡΡΠΈΡΠ°ΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· "PermitRootLogin" Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠ°ΠΉΠ»Π°Ρ SSH:
grep -rc "PermitRootLogin" /etc/ssh/ΠΠ°ΠΉΡΠΈ ΡΡΡΠΎΠΊΠΈ, ΠΠ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ "localhost" Π² ΡΠ°ΠΉΠ»Π΅ hosts:
grep -v "localhost" /etc/hostsgrep Ρ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠΌΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ
grep ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΠΈ Π΄Π²ΠΈΠΆΠΊΠ° ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΡ
Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ:
- BRE (Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ) β ΡΠ΅ΠΆΠΈΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
- ERE (ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠ΅ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ) β Π°ΠΊΡΠΈΠ²ΠΈΡΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
-EΠΈΠ»ΠΈegrep - PCRE (Perl-ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠ΅ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ) β Π°ΠΊΡΠΈΠ²ΠΈΡΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
-P
# Match lines containing an IPv4 address pattern (ERE)
grep -rE '([0-9]{1,3}.){3}[0-9]{1,3}' /var/log/nginx/access.log
# Match lines with email addresses (PCRE)
grep -rP '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}' /var/www/html/ΠΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π³ΡΠ°Π½ΠΈΡΠ½ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ ΠΈ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½ΡΠ΅ ΠΊΠ°ΠΌΠ½ΠΈ grep
ΠΠΈΠ½Π°ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ: ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ grep Π²ΡΠ²Π΅Π΄Π΅Ρ Binary file X matches Π΄Π»Ρ Π±ΠΈΠ½Π°ΡΠ½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΠΏΡΠΎΠΏΡΡΡΠΈΡ ΠΈΡ
ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ -a (--text), ΡΡΠΎΠ±Ρ Π·Π°ΡΡΠ°Π²ΠΈΡΡ grep ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΊΠ°ΠΊ ΡΠ΅ΠΊΡΡ β ΡΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡΠΈ ΠΏΠΎΠΈΡΠΊΠ΅ Π² ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ
ΠΈΠ»ΠΈ Π΄Π°ΠΌΠΏΠ°Ρ
Π±Π°Π· Π΄Π°Π½Π½ΡΡ
. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Ρ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎΡΡΡΡ Π½Π° Π±ΠΎΠ»ΡΡΠΈΡ
Π±ΠΈΠ½Π°ΡΠ½ΡΡ
ΡΠ°ΠΉΠ»Π°Ρ
.
Π‘ΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ: -r Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΡΡΠ»ΠΊΠ°ΠΌ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ -R (Π·Π°Π³Π»Π°Π²Π½Π°Ρ R) Π΄Π»Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΡΡΠ»ΠΊΠ°ΠΌ. ΠΠΌΠ΅ΠΉΡΠ΅ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠ΅ ΡΠΈΠΊΠ»Ρ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΡΡΠ»ΠΎΠΊ.
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π½Π° Π±ΠΎΠ»ΡΡΠΈΡ
Π΄Π΅ΡΠ΅Π²ΡΡΡ
: grep ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΉ. ΠΠ»Ρ ΠΌΠ°ΡΡΠΈΠ²Π½ΡΡ
ΠΊΠΎΠ΄ΠΎΠ²ΡΡ
Π±Π°Π· (ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ ΡΠ°ΠΉΠ»ΠΎΠ²) ΡΠ°ΡΡΠΌΠΎΡΡΠΈΡΠ΅ ripgrep (rg) ΠΈΠ»ΠΈ ag (The Silver Searcher), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½Ρ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠΈΡΡΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½Ρ .gitignore.
ΠΡΠ»Π΅Π²ΡΠ΅ Π±Π°ΠΉΡΡ Π² ΠΈΠΌΠ΅Π½Π°Ρ
ΡΠ°ΠΉΠ»ΠΎΠ²: ΠΠ΅ΡΠ΅Π΄Π°Π²Π°ΠΉΡΠ΅ Π²ΡΠ²ΠΎΠ΄ find ΡΠ΅ΡΠ΅Π· -print0 ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ grep --null ΠΈΠ»ΠΈ xargs -0 Π΄Π»Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠΌΡΠ½ ΡΠ°ΠΉΠ»ΠΎΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ
ΠΏΡΠΎΠ±Π΅Π»Ρ ΠΈΠ»ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ.
ΠΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΎΠΉ: grep ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Π±Π°ΠΉΡΠ°ΠΌΠΈ, Π° Π½Π΅ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ. ΠΡΠ»ΠΈ ΡΠ°ΠΉΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ UTF-16 ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ, ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π΅Π½Π°Π΄ΡΠΆΠ½ΡΠΌΠΈ. Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ LANG=C ΠΈΠ»ΠΈ LC_ALL=C ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π΄Π»Ρ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ Π±Π°ΠΉΡΠΎΠ²:
LC_ALL=C grep -r "pattern" /path/ΠΠΎΠΌΠ°Π½Π΄Π° find: ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ
Π ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ grep Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΠΎΠΈΡΠΊ *Π²Π½ΡΡΡΠΈ* ΡΠ°ΠΉΠ»ΠΎΠ², find Π½Π°Ρ
ΠΎΠ΄ΠΈΡ ΡΠ°ΠΉΠ»Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΡ
ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ
β ΠΈΠΌΠ΅Π½ΠΈ, ΡΠΈΠΏΠ°, ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΠΏΡΠ°Π² Π΄ΠΎΡΡΡΠΏΠ°, Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ β ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΡΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°. ΠΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ find Ρ grep Π΄Π°ΡΡ ΡΠΎΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌΠΈ.
ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ
find /starting/path [CRITERIA] [ACTION]ΠΠΎΠΈΡΠΊ ΠΏΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ find + grep
find /path/to/directory/ -type f -exec grep -l 'search_text' {} ;ΠΠ½Π°ΡΠΎΠΌΠΈΡ ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
| ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ |
|---|---|
/path/to/directory/ | ΠΠΎΡΠ½Π΅Π²Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° |
-type f | ΠΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ (ΠΈΡΠΊΠ»ΡΡΠ°Π΅Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ, ΡΠΎΠΊΠ΅ΡΡ, ΡΡΡΡΠΎΠΉΡΡΠ²Π°) |
-exec ... {} ; | ΠΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°; {} Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΠ°ΠΉΠ»Π° |
grep -l | ΠΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΏΡΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ, Π° Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΡΡ ΡΡΡΠΎΠΊΡ |
ΠΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΊΡΠΈΡΠ΅ΡΠΈΠ΅Π² find Π΄Π»Ρ ΡΠΎΡΠ½ΠΎΡΡΠΈ
Π Π΅Π°Π»ΡΠ½Π°Ρ ΠΌΠΎΡΡ find Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΠΊΡΠΈΡΠ΅ΡΠΈΠ΅Π² ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ grep, ΡΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠΊΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°ΡΡ:
ΠΠΎΠΈΡΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ°ΠΉΠ»Π°Ρ
.conf, ΠΈΠ·ΠΌΠ΅Π½ΡΠ½Π½ΡΡ
Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ 7 Π΄Π½Π΅ΠΉ:
find /etc -type f -name "*.conf" -mtime -7 -exec grep -l "timeout" {} ;ΠΠΎΠΈΡΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ°ΠΉΠ»Π°Ρ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ 1MB:
find /var/log -type f -size +1M -exec grep -c "ERROR" {} ;ΠΠΎΠΈΡΠΊ Π² ΡΠ°ΠΉΠ»Π°Ρ , ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ:
find /home -type f -user john -exec grep -l "password" {} ;ΠΠΎΠΈΡΠΊ Π² ΡΠ°ΠΉΠ»Π°Ρ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΌΠΈ ΠΏΡΠ°Π²Π°ΠΌΠΈ Π΄ΠΎΡΡΡΠΏΠ° (Π΄ΠΎΡΡΡΠΏΠ½ΡΡ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ Π²ΡΠ΅ΠΌ):
find /var/www -type f -perm -o+w -exec grep -l "eval(" {} ;ΠΡΠΊΠ»ΡΡΠΈΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΈΠ· ΠΏΠΎΠΈΡΠΊΠ°:
find /var/www -type f -not -path "*/node_modules/*" -exec grep -l "API_KEY" {} ;ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ find Ρ xargs Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ -exec ... ; ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. Π Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡ
Ρ ΡΡΡΡΡΠ°ΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΡΠΎ Π·Π°ΠΌΠ΅ΡΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ xargs ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΡΠ½ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΠΎΠ΄ΠΈΠ½ Π²ΡΠ·ΠΎΠ² grep:
find /path/ -type f -name "*.log" -print0 | xargs -0 grep -l "connection refused"Π€Π»Π°Π³ΠΈ -print0 ΠΈ -0 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π½ΡΠ»Π΅Π²ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Π΅ΠΉ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π½ΠΎΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Ρ ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΏΡΠΎΠ±Π΅Π»Π°ΠΌΠΈ.
ΠΠΎΠΌΠ°Π½Π΄Π° awk: ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎΠΈΡΠΊ ΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ
awk β ΡΡΠΎ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ ΡΠ·ΡΠΊ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ΅ΠΊΡΡΠ°, Π° Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΏΠΎΠΈΡΠΊΠ°. ΠΠ½ ΠΏΡΠ΅Π²ΠΎΡΡ
ΠΎΠ΄ΠΈΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΊΠ°ΡΡ ΡΠ°Π±Π»ΠΎΠ½Ρ Π² ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
ΡΠ°ΠΉΠ»Π°Ρ
β Π΄Π°Π½Π½ΡΡ
CSV, Π»ΠΎΠ³-ΡΠ°ΠΉΠ»Π°Ρ
Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΡΡΠΎΠ»Π±ΡΠ°ΠΌΠΈ, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ
ΡΠ°ΠΉΠ»Π°Ρ
β ΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΈΠ»ΠΈ Π²ΡΡΠΈΡΠ»ΡΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΡ
ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ.
ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ
awk '/pattern/ { action }' fileΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ awk Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²
ΠΡΠ²Π΅ΡΡΠΈ Π²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ Π² ΡΠ°ΠΉΠ»Π΅, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ ΡΠ»ΠΎΠ²ΠΎ "error":
awk '/error/' /var/log/syslogΠΠΎΠΈΡΠΊ ΡΠ°Π±Π»ΠΎΠ½Π° ΠΈ Π²ΡΠ²ΠΎΠ΄ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΠΏΠΎΠ»Π΅ΠΉ (ΡΡΠΎΠ»Π±Π΅Ρ 1 ΠΈ ΡΡΠΎΠ»Π±Π΅Ρ 5):
awk '/FAILED/ { print $1, $5 }' /var/log/auth.logΠΠΎΠΈΡΠΊ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΡΠ°ΠΉΠ»Π°ΠΌ Ρ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΡ ΡΡΡΠΎΠΊ:
awk '/search_term/ { print FILENAME": "$0 }' /etc/nginx/*.confΠΠΎΠΈΡΠΊ Π±Π΅Π· ΡΡΡΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ° Π² awk:
awk 'tolower($0) ~ /timeout/' /etc/mysql/my.cnfΠΠΎΠ΄ΡΡΡΡ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ ΡΠ°Π±Π»ΠΎΠ½Π° Π½Π° ΡΠ°ΠΉΠ»:
awk '/ERROR/ { count++ } END { print FILENAME, count }' /var/log/app.logΠΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ awk Π²ΠΌΠ΅ΡΡΠΎ grep
awk ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΡΡΡΠΈΠΌ Π²ΡΠ±ΠΎΡΠΎΠΌ, ΠΊΠΎΠ³Π΄Π°:
- ΠΡΠΆΠ½ΠΎ ΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ»Π±ΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Β«Π½Π°ΠΉΡΠΈ ΡΡΡΠΎΠΊΠΈ, Π³Π΄Π΅ ΠΏΠΎΠ»Π΅ 3 Π±ΠΎΠ»ΡΡΠ΅ 500Β»)
- ΠΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ
- ΠΡΠΆΠ½ΠΎ Π°Π³ΡΠ΅Π³ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ (ΠΏΠΎΠ΄ΡΡΡΡΡ, ΡΡΠΌΠΌΡ) ΠΏΠΎ ΡΠ°ΠΉΠ»Ρ
- Π€Π°ΠΉΠ» ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΠΉ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
grep ΠΎΡΡΠ°ΡΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΡΠΌ Π΄Π»Ρ Π·Π°Π΄Π°Ρ ΡΠΈΡΡΠΎΠ³ΠΎ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ², ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π·Π½Π°ΡΡ, *ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ* Π»ΠΈ ΠΈ *Π³Π΄Π΅* Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ ΡΠ°Π±Π»ΠΎΠ½.
Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ²: grep vs find vs awk
| ΠΡΠΈΡΠ΅ΡΠΈΠΉ | grep | find + grep | awk |
|---|---|---|---|
| ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ | Π‘ΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π² ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌ | ΠΠΎΠΈΡΠΊ ΠΏΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ Ρ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠ΅ΠΉ ΠΏΠΎ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠΌ | ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ |
| Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠΈΡΠΊ | ΠΠ° (-r / -R) | ΠΠ° (Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ) | ΠΠ΅Ρ (ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΈΠΊΠ»Π° Π² ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅) |
| Π€ΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΠΏΠΎ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠΌ | ΠΠ΅Ρ | ΠΠ° (ΠΈΠΌΡ, ΡΠ°Π·ΠΌΠ΅Ρ, Π΄Π°ΡΠ°, Π²Π»Π°Π΄Π΅Π»Π΅Ρ) | ΠΠ΅Ρ |
| ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ | BRE, ERE, PCRE | Π§Π΅ΡΠ΅Π· grep | ERE |
| Π€ΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ²ΠΎΠ΄Π° | ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ΅ | ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ΅ | ΠΠΎΠ»Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ΅ΠΌΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ |
| ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π½Π° Π±ΠΎΠ»ΡΡΠΈΡ Π΄Π΅ΡΠ΅Π²ΡΡΡ | ΠΡΡΡΡΠ°Ρ | ΠΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ (ΠΏΡΠΎΡΠ΅ΡΡ Π½Π° ΡΠ°ΠΉΠ») | Π£ΠΌΠ΅ΡΠ΅Π½Π½Π°Ρ |
| ΠΠΎΡΠΎΠ³ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ | ΠΠΈΠ·ΠΊΠΈΠΉ | Π‘ΡΠ΅Π΄Π½ΠΈΠΉ | ΠΡΡΠΎΠΊΠΈΠΉ |
| ΠΡΡΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ | ΠΡΡΡΡΡΠΉ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ ΠΊΠ»ΡΡΠ΅Π²ΡΠΌ ΡΠ»ΠΎΠ²Π°ΠΌ | ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π°ΡΠ΄ΠΈΡΡ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌΠΈ | Π Π°Π·Π±ΠΎΡ Π»ΠΎΠ³ΠΎΠ², ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ |
ΠΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠ΅ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ Π΄Π»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΡΡ ΡΡΠ΅Π΄
ΠΠΎΠΈΡΠΊ Π² ΡΠΆΠ°ΡΡΡ Π»ΠΎΠ³-ΡΠ°ΠΉΠ»Π°Ρ
ΠΠ° ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ
, Π³Π΄Π΅ Π»ΠΎΠ³ΠΈ ΡΠΎΡΠΈΡΡΡΡΡΡ ΠΈ ΡΠΆΠΈΠΌΠ°ΡΡΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ zgrep Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° Π² ΡΠ°ΠΉΠ»Π°Ρ
.gz Π±Π΅Π· ΠΈΡ
ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ:
zgrep "segfault" /var/log/syslog.*.gzΠΠΎΠΈΡΠΊ Π²Π½ΡΡΡΠΈ tar-Π°ΡΡ ΠΈΠ²ΠΎΠ² Π±Π΅Π· ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ
tar -xOf archive.tar.gz | grep "search_pattern"ΠΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ grep Ρ sort ΠΈ uniq Π΄Π»Ρ ΡΠ°ΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°
ΠΠ°ΠΉΡΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ Π² Π»ΠΎΠ³-ΡΠ°ΠΉΠ»Π΅:
grep "ERROR" /var/log/app.log | sort | uniq -c | sort -rn | head -20ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΡΠΎΠΊΡΡ Π½Π° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅
grep -r --include="*.py" --include="*.js" --include="*.php" "TODO" /var/www/ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ grep
ΠΠ΅ΡΠ΅Π΄Π°ΠΉΡΠ΅ Π²ΡΠ²ΠΎΠ΄ tail -f Π² grep Π΄Π»Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΠΆΠΈΠ²ΠΎΠ³ΠΎ Π²ΡΠ²ΠΎΠ΄Π° Π»ΠΎΠ³ΠΎΠ² Π½Π° ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ
ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ²:
tail -f /var/log/nginx/error.log | grep --line-buffered "upstream"Π€Π»Π°Π³ --line-buffered Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ grep ΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡ Π²ΡΠ²ΠΎΠ΄ ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π΄Π°Π½Π½ΡΡ
ΠΈΠ· Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°.
ΠΠ°ΡΠΈΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ Π°ΡΠ΄ΠΈΡΠ° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
ΠΠΎΠΈΡΠΊ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΏΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ΅Ρ Π½ΠΈΠΊΠΎΠΉ Π² ΡΡΠΈΠ»Π΅Π½ΠΈΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Linux. ΠΠ° ΠΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΈΠ»ΠΈ VPS ΡΡΠΈ ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π°ΠΆΠ½Ρ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ:
Π‘ΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΆΡΡΡΠΊΠΎ Π·Π°Π΄Π°Π½Π½ΡΡ ΠΏΠ°ΡΠΎΠ»Π΅ΠΉ Π² ΡΠ°ΠΉΠ»Π°Ρ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ:
grep -rniE "(password|passwd|pwd)s*=s*['"][^'"]{3,}" /var/www/ --include="*.php"ΠΠ°ΠΉΡΠΈ ΡΠ°ΠΉΠ»Ρ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΡ ΠΊΠ»ΡΡΠ΅ΠΉ, Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ΅ΠΌ:
find / -name "*.pem" -o -name "*.key" | xargs grep -l "PRIVATE KEY"ΠΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ PHP-Π²Π΅Π±ΡΠ΅Π»Π»ΠΎΠ² ΠΏΡΡΡΠΌ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ:
grep -rPl "evals*(s*(base64_decode|gzinflate|str_rot13)" /var/www/ΠΡΠ΄ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² SSH authorized_keys Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ:
find /home -name "authorized_keys" -exec grep -H "." {} ;ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ VPS Ρ cPanel ΡΡΠΈ Π°ΡΠ΄ΠΈΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π²Π°ΠΆΠ½Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠ΅Π΄Ρ cPanel ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°ΠΊΠΊΠ°ΡΠ½ΡΠΎΠ², ΠΈ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠ΅ΡΠ°ΡΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΡΡΠΎΠ½ΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅.
ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΠΊΡΡΠΏΠ½ΠΎΠΌΠ°ΡΡΡΠ°Π±Π½ΡΡ ΠΏΠΎΠΈΡΠΊΠΎΠ²
ΠΠ³ΡΠ°Π½ΠΈΡΡΡΠ΅ Π³Π»ΡΠ±ΠΈΠ½Ρ ΠΏΠΎΠΈΡΠΊΠ°, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π½Π΅Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΠΎΠ±Ρ ΠΎΠ΄Π° Π³Π»ΡΠ±ΠΎΠΊΠΈΡ Π΄Π΅ΡΠ΅Π²ΡΠ΅Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΉ:
find /var/www -maxdepth 3 -type f -name "*.php" -exec grep -l "eval(" {} ;ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ripgrep Π΄Π»Ρ Π·Π°Π΄Π°Ρ, ΠΊΡΠΈΡΠΈΡΠ½ΡΡ
ΠΏΠΎ ΡΠΊΠΎΡΠΎΡΡΠΈ. Π₯ΠΎΡΡ Π·Π΄Π΅ΡΡ ΡΡΠΎ Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ, rg ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² 3β10 ΡΠ°Π· Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ grep Π½Π° Π±ΠΎΠ»ΡΡΠΈΡ
ΠΊΠΎΠ΄ΠΎΠ²ΡΡ
Π±Π°Π·Π°Ρ
Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΡ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠΌΠ½ΠΎΠΉ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ ΡΠ°ΠΉΠ»ΠΎΠ². ΠΠ½ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡ
Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²ΠΎΠ²:
apt install ripgrep # Debian/Ubuntu
yum install ripgrep # CentOS/RHELΠΡΠΎΡΠΈΠ»ΠΈΡΡΠΉΡΠ΅ ΠΏΠΎΠΈΡΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ time Π΄Π»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΎΠ²:
time grep -r "pattern" /large/directory/ΠΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ ΠΏΠΎΠΈΡΠΊΠ° Π² /proc ΠΈ /sys β ΡΡΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΎΠ³ΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ Π·Π°Π²ΠΈΡΠ°Π½ΠΈΡ ΠΈΠ»ΠΈ Π²ΡΠ΄Π°Π²Π°ΡΡ Π±Π΅ΡΡΠΌΡΡΠ»Π΅Π½Π½ΡΠΉ Π²ΡΠ²ΠΎΠ΄:
grep -r --exclude-dir={proc,sys,dev} "pattern" /ΠΡΠ±ΠΎΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°: ΠΌΠ°ΡΡΠΈΡΠ° ΡΠ΅ΡΠ΅Π½ΠΈΠΉ
| Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ | Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° | |
|---|---|---|
| ΠΡΡΡΡΡΠΉ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠΌΡ ΡΠ»ΠΎΠ²Ρ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ | grep -rn "keyword" /path/ | |
| ΠΠΎΠΈΡΠΊ ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° Π±Π΅Π· ΡΡΡΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ° | grep -rniw "keyword" /path/ | |
| ΠΠΎΠΈΡΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΡΠΈΠΏΠ°Ρ ΡΠ°ΠΉΠ»ΠΎΠ² | grep -r --include="*.conf" "keyword" /path/ | |
| ΠΠΎΠΈΡΠΊ Π² Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΠ½Π½ΡΡ ΡΠ°ΠΉΠ»Π°Ρ | find /path -mtime -1 -exec grep -l "keyword" {} ; | |
| ΠΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠΈΡΠΊ Π² Π±ΠΎΠ»ΡΡΠΈΡ Π΄Π΅ΡΠ΅Π²ΡΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² | `find /path -print0 | xargs -0 grep -l "keyword"` |
| ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ· Π»ΠΎΠ³ΠΎΠ² | awk '/pattern/ { print $1, $NF }' logfile | |
| ΠΠΎΠΈΡΠΊ Π² ΡΠΆΠ°ΡΡΡ Π»ΠΎΠ³Π°Ρ | zgrep "keyword" /var/log/*.gz | |
| ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ Π»ΠΎΠ³ΠΎΠ² Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ | `tail -f /var/log/file.log | grep βline-buffered "pattern"` |
| ΠΡΠ΄ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΡΠΎΠΊ | grep -rPl "eval(base64_decode" /var/www/ |
ΠΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΠ²ΠΎΠ΄Ρ
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
grep -rniwΠ² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° β ΠΎΠ½ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠ΅Π³ΠΈΡΡΡ, ΡΠ΅Π»ΡΠ΅ ΡΠ»ΠΎΠ²Π° ΠΈ Π½ΠΎΠΌΠ΅ΡΠ° ΡΡΡΠΎΠΊ Π·Π° ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΡ ΠΎΠ΄. - ΠΡΠ΅Π³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
-print0ΡfindΠΈ-0ΡxargsΠ΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠΌΡΠ½ ΡΠ°ΠΉΠ»ΠΎΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ ΠΏΡΠΎΠ±Π΅Π»Ρ ΠΈΠ»ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ. - ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
-exec grep ... {} +(Π·Π½Π°ΠΊ ΠΏΠ»ΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΡΠΊΠΈ Ρ Π·Π°ΠΏΡΡΠΎΠΉ) Π΄Π»Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΠΎΠ΄ΠΈΠ½ Π²ΡΠ·ΠΎΠ²grepΠΈ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΡ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΡ ΡΠ°ΡΡ ΠΎΠ΄ΠΎΠ² Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΡ. grep -R(Π·Π°Π³Π»Π°Π²Π½Π°Ρ R) ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΡΡΠ»ΠΊΠ°ΠΌ;grep -rβ Π½Π΅Ρ. ΠΠ½Π°ΠΉΡΠ΅, ΠΊΠ°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π² Π²Π°ΡΠ΅ΠΉ ΡΡΠ΅Π΄Π΅.- Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΠΉΡΠ΅
LC_ALL=CΠΏΠ΅ΡΠ΅Π΄grepΠ² ΡΠΊΡΠΈΠΏΡΠ°Ρ , ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈΠ·-Π·Π° Π»ΠΎΠΊΠ°Π»ΠΈ ΠΈ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΡΡΠ΅ΠΉ Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΎΠΉ. - ΠΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΠΉΡΠ΅ ΠΏΠΎΠΈΡΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
--includeΠΈ--exclude-dirΠ΄Π»Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π΅ΡΠ΅Π»Π΅Π²Π°Π½ΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄ΠΎ Π½Π°ΡΠ°Π»Π° ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ². - ΠΠ»Ρ ΠΌΠ½ΠΎΠ³ΠΎΠ°ΠΊΠΊΠ°ΡΠ½ΡΠ½ΡΡ Ρ ΠΎΡΡΠΈΠ½Π³ΠΎΠ²ΡΡ ΡΡΠ΅Π΄, ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ ΡΠ΅ΡΠ΅Π· ΠΠ°Π½Π΅Π»ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ VPS, ΠΏΠ»Π°Π½ΠΈΡΡΠΉΡΠ΅ Π°ΡΠ΄ΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π·Π°Π΄Π°Π½ΠΈΡ cron Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ.
- Π ΡΡΠ΅Π΄Π°Ρ ΠΠ±ΡΠ΅Π³ΠΎ Π²Π΅Π±-Ρ ΠΎΡΡΠΈΠ½Π³Π° ΠΏΡΠ°Π²Π° Π½Π° ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Ρ Ρ ΠΎΡΡΠΈΠ½Π³-ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠΌ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ Π΄Π΅ΡΠ΅Π²Π° ΡΠ°ΠΉΠ»ΠΎΠ² Π²Π°ΡΠ΅Π³ΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π°ΠΊΠΊΠ°ΡΠ½ΡΠ°.
Π§Π°ΡΡΠΎ Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ
ΠΠ°ΠΊΠΎΠ² ΡΠ°ΠΌΡΠΉ Π±ΡΡΡΡΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠΈΡΠΊΠ° ΡΠ΅ΠΊΡΡΠ° Π²ΠΎ Π²ΡΠ΅Ρ ΡΠ°ΠΉΠ»Π°Ρ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ Linux?
ΠΠ»Ρ ΡΠΊΠΎΡΠΎΡΡΠΈ Π½Π° Π±ΠΎΠ»ΡΡΠΈΡ
Π΄Π΅ΡΠ΅Π²ΡΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ grep -r --include="*.ext" "pattern" /path/ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎ ΡΠΈΠΏΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ripgrep (rg "pattern" /path/), ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ ΠΈ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² 3β10 ΡΠ°Π· Π±ΡΡΡΡΠ΅Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ grep Π½Π° Π±ΠΎΠ»ΡΡΠΈΡ
ΠΊΠΎΠ΄ΠΎΠ²ΡΡ
Π±Π°Π·Π°Ρ
.
ΠΠ°ΠΊ ΠΈΡΠΊΠ°ΡΡ ΡΡΡΠΎΠΊΡ Π² ΡΠ°ΠΉΠ»Π°Ρ , ΠΈΡΠΊΠ»ΡΡΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ?
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΎΠΏΡΠΈΡ --exclude-dir ΠΊΠΎΠΌΠ°Π½Π΄Ρ grep: grep -r --exclude-dir={.git,node_modules,vendor} "pattern" /path/. ΠΠ»Ρ ΠΏΠΎΠΈΡΠΊΠΎΠ² Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ find ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ -not -path "*/dirname/*" ΠΏΠ΅ΡΠ΅Π΄ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌ -exec.
Π ΡΡΠΌ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ grep -r ΠΈ grep -R?
grep -r Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠΈΡΠΊ, Π½ΠΎ Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΡΡΠ»ΠΊΠ°ΠΌ. grep -R Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΎΡ ΠΆΠ΅ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠΈΡΠΊ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΡΡΠ»ΠΊΠ°ΠΌ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ -R ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΡΠ²Π΅ΡΠ΅Π½Ρ, ΡΡΠΎ Π² ΡΠ΅Π»Π΅Π²ΠΎΠΌ Π΄Π΅ΡΠ΅Π²Π΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΉ Π½Π΅Ρ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΡΡΠ»ΠΎΠΊ.
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈΡΠΊΠ°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π²Π½ΡΡΡΠΈ ΡΠΆΠ°ΡΡΡ
Π»ΠΎΠ³-ΡΠ°ΠΉΠ»ΠΎΠ² .gz Π±Π΅Π· ΠΈΡ
ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ?
ΠΠ°. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ zgrep "pattern" /var/log/file.log.gz Π΄Π»Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ zgrep "pattern" /var/log/*.gz Π΄Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΠΆΠ°ΡΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ². Π€ΠΎΡΠΌΠ°Ρ Π²ΡΠ²ΠΎΠ΄Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠ΅Π½ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΌΡ grep.
ΠΠ°ΠΊ ΠΈΡΠΊΠ°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΡΡΡΠΎΡΠ½ΡΠΉ ΡΠ°Π±Π»ΠΎΠ½ Π² ΡΠ°ΠΉΠ»Π°Ρ Linux?
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ grep Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΡΠΎΡΠ½ΠΎ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΠΈΠ²Π½ΠΎ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠ°Π±Π»ΠΎΠ½Ρ, ΠΎΡ
Π²Π°ΡΡΠ²Π°ΡΡΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ grep -P Ρ Perl-ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΌΠΈ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠΌΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ n Π΄Π»Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π½ΠΎΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ pcregrep -M "line1nline2" file Π΅ΡΠ»ΠΈ Π΄ΠΎΡΡΡΠΏΠ΅Π½ pcregrep. ΠΠ»Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΡΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ awk Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ RS (ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ Π·Π°ΠΏΠΈΡΠ΅ΠΉ) ΡΠ°ΡΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠ°Π΅ΠΌΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ.
Π½Π° Π²ΡΠ΅Ρ
Ρ
ΠΎΡΡΠΈΠ½Π³ΠΎΠ²ΡΡ
ΡΡΠ»ΡΠ³Π°Ρ