Příkaz grep v Linuxu Prohledává text podle vzorů a vrací odpovídající řádky. Podporuje základní, rozšířené a s Perlem kompatibilní regulární výrazy, pracuje rekurzivně napříč adresáři a integruje se s pipes pro výkonné filtrování. Používejte jej k rychlému prohledávání protokolů, zdrojového kódu a konfiguračních souborů. Syntaxe: grep [options] PATTERN [FILE...].
Pokud trávíte čas na linuxových serverech, naučení se příkazu grep v Linuxu vám ušetří hodiny každý týden. Tato příručka vysvětluje praktické použití příkazu grep na reálných příkladech, zahrnuje regulární výrazy, rekurzi, filtry souborů, tipy pro zvýšení výkonu a běžné chyby, a je napsána z pohledu každodenního používání systémů a hostingových operací.
Co je Grep a proč je důležitý?
Grep je zkratka pro „Global Regular Expression Print“ (globální regulární výrazový tisk). Prohledává vstup (soubory nebo standardní vstup) a vypisuje řádky, které odpovídají zadanému vzoru. Je rychlý, uživatelsky přívětivý a nezbytný pro vývojáře, správce systémů a analytiky, kteří potřebují procházet protokoly, kód a konfigurace v terminálech Linux nebo macOS.

Na produkčních hostitelích jsem pomocí příkazu grep našel selhávající koncové body v gigabajtech webových protokolů, odhalil škodlivé vzory přístupu a lokalizoval napevno zakódované tajné kódy v kódových bázích. Se správnými příznaky se z něj stane přesný a rychlý mikroskop pro vaše data.
Základní syntaxe a nutnost Znát možnosti
Základní syntaxe
grep [OPTIONS] PATTERN [FILE...]
# Example:
grep "error" /var/log/nginx/access.logBěžné možnosti Tahák
- -já: Vyhledávání bez rozlišování velkých a malých písmen
- -r nebo -R: Rekurzivní vyhledávání v adresáři
- na: Zobrazit čísla řádků
- -H: Vždy zobrazit název souboru
- -proti: Invertovat shodu (zobrazit řádky, které se NESHODUJÍ)
- -w: Pouze celá slova
- -x: Pouze celé řádky
- -C: Počet shodných řádků
- - buď: Vytiskněte pouze odpovídající část
- –barva=auto: Zvýraznit shody (užitečné pro čitelnost)
# Case-insensitive search for the word "error" and show line numbers
grep -inw --color=auto "error" app.log
# Show lines that do NOT contain "200"
grep -v "200" access.log
# Count how many lines contain "timeout"
grep -c "timeout" server.log
# Search multiple files with file names
grep -H "TODO" *.pyRegulární výrazy v Grepu (základní, rozšířený, PCRE)
Grep podporuje různé regex enginy. Ve výchozím nastavení používá základní regulární výrazy (BRE). Použití -E pro rozšířené regulární výrazy (ERE) a -P pro Perl kompatibilní regulární výrazy (PCRE), kde jsou k dispozici. Starý egrep a fgrep aliasy jsou zastaralé, preferujte grep -E a grep -F.
Základní vs. rozšířené příklady
# Lines starting with "GET" (anchor ^)
grep "^GET" access.log
# Lines ending with ".php" (anchor $)
grep ".php$" urls.txt
# Using alternation: match foo or bar (with -E for extended)
grep -E "foo|bar" file.txt
# Match an IP-like pattern (simple, not strict)
grep -E "[0-9]{1,3}(.[0-9]{1,3}){3}" access.log
# Print only the match (useful for extraction)
grep -Eo "[a-f0-9]{32}" checksums.txtTipy pro PCRE (pokud jsou podporovány)
Některé distribuce kompilují grep bez -P (PCRE). Pokud je to podporováno, můžete použít vyhledávání a pokročilé třídy. Kdy -P není k dispozici, použijte grep -E nebo nástroje jako ripgrep (rg).
# Extract emails (PCRE lookaheads/lookbehinds may vary)
grep -Po "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,}" maildump.txtRekurzivní vyhledávání a filtrování souborů
Použijte rekurzi k prohledávání adresářů. Kombinujte s --include, --exclude, a --exclude-dir zúžit rozsah a zvýšit rychlost. -I Volba považuje binární soubory za neshodné.
# Recursively search only .log files for 500 errors
grep -R --include="*.log" " 500 " /var/log
# Ignore vendor and .git directories while searching PHP code for "TODO"
grep -R --exclude-dir=vendor --exclude-dir=.git --include="*.php" "TODO" .
# Treat binary files as non-matching (skip noisy "Binary file" messages)
grep -R -I "api_key" .
# Show file names with matches only
grep -Rl "deprecated_function" src/Pro komprimované protokoly použijte zgrep (nebo gzcat + grep) k vyhledávání bez ruční dekomprese.
# Search inside gzip-compressed logs
zgrep -n "timeout" /var/log/nginx/access.log*.gz
# Or:
gzcat access.log.1.gz | grep -n "timeout"Praktické případy použití pro hosting, DevOps a vývojáře
Analýza protokolů na Linuxových serverech
# Find 5xx responses (space-padded for accuracy) in NGINX logs
grep -Rnw --include="access.log*" " 5[0-9][0-9] " /var/log/nginx
# Top offending IPs hitting 404 (simple aggregation)
grep " 404 " access.log | awk '{print $1}' | sort | uniq -c | sort -nr | headBezpečnost a reakce na incidenty
# Detect repeated SSH failures
grep -R "Failed password" /var/log/auth.log*
# Spot potential SQL injection attempts in web logs
grep -R -iE "union(s)+select|information_schema|/etc/passwd|sleep([0-9]+)" /var/log/nginxPracovní postupy pro vývojáře
# Find deprecated PHP functions across the project
grep -Rnw --include="*.php" -E "(mysql_|create_function|each()" .
# Ensure configuration keys exist across environments
grep -Rnw --include="*.env" "^APP_ENV=" /var/wwwSpráva aplikací na hostingových platformách? Zapnuto YouStable servery, SSH Přístup a komplexní uchovávání protokolů usnadňují řešení problémů pomocí grep, zejména při zkoumání špičkových hodnot, pomalých požadavků nebo provozu botů v protokolech přístupu/chyb.
Kombinace Grepu s dalšími příkazy Linuxu
Grep se stává mocným nástrojem v pipelinech. Použijte ho k filtrování výstupu ze systémových utilit, kontejnerů a balíčků. manageRs.
# Processes containing "nginx"
ps aux | grep -i nginx
# Kernel messages mentioning I/O errors
dmesg | grep -i "i/o"
# Journal entries for a unit
journalctl -u php-fpm | grep -i "warning"
# Network sockets filtered by port
ss -tulpn | grep ":443"
# Docker logs containing an error pattern
docker logs myapp 2>&1 | grep -i "connection reset"Pro velké seznamy souborů bezpečně kombinujte find s grep pomocí záznamů zakončených nullovým znakem.
# Search only .js files, safely handling spaces/newlines
find . -type f -name "*.js" -print0 | xargs -0 grep -nH "fetch("
# Exclude directories during find, then grep
find . -type f -not -path "./node_modules/*" -name "*.ts" -print0 | xargs -0 grep -nH "TODO"Tipy pro zvýšení výkonu a úskalí skriptování
Zrychlete Grep pro velká data
- Pro pevné řetězce použijte -F (bez parsování regulárních výrazů, často mnohem rychlejší).
- Omezte práci pomocí –include/–exclude a –exclude-dir.
- Pro snížení počtu shod preferujte ukotvené vzory (^, $) nebo -w.
- Použijte -m N k zastavení po N shodách, když potřebujete pouze vzorek.
- Nastavením LC_ALL=C urychlíte porovnávání ASCII dat po bajtech.
- Pro extrémně velké stromy zvažte ripgrep (rg); je optimalizovaný a respektuje .gitignore.
# Fast fixed-string search with locale optimization
LC_ALL=C grep -RFn --include="*.log" "Connection timed out" /var/logBinární soubory, hodnoty Null a ukončovací kódy
- Binární soubory: Použijte -I pro přeskočení nebo –binary-files=text pro vynucení zpracování textu.
- Režim zakončený nulou: grep -z považuje NUL za oddělovač řádků pro specializovaná data.
- Výstupní kódy: 0, pokud je nalezena shoda, 1, pokud žádná shoda není, 2 při chybě. Ve skriptech použijte -q (ticho).
# Quietly test if a string exists; run action on success
if grep -q "MAINTENANCE_MODE=on" .env; then
echo "Maintenance mode enabled"
fiVyhněte se těmto běžným chybám v Grepu
- Používání speciálních znaků bez escapování. Příklad: pro tečku použijte „.“
- Spoléhání se na -P, když váš grep není kompilován s PCRE. Ověřte si to u
grep -Pa ošetřovat chyby. - Nechat shellu rozpínat se nečekaně. Vzory citací:
grep -E "foo|bar" file. - Rekurze do obrovských nebo irelevantních adresářů. Vždy spárujte -R s
--exclude-dir. - Neshoda hranic slov. Pro celé slovo použijte
-wspíše než ad-hoc prostory.
Alternativy a související nástroje
- ripgrep (rg): Velmi rychlé rekurzivní vyhledávání, respektuje .gitignore. Skvělé pro kódové základny.
- ack / the_silver_searcher (ag): Vyhledávače zaměřené na vývojáře s rozumnými výchozími nastaveními.
- awk: Skenování vzorů s akcemi; výkonné, když potřebujete zpracování s ohledem na sloupce.
- žízeň: Úprava streamu; ideální pro vložené nahrazování po nalezení shod.
Pro každodenní práci na serveru je grep základem. Pro rozsáhlá monorepozitáře nebo CI pipeline často poskytuje ripgrep lepší výkon a zároveň zachovává známé vzory.
Scénáře a recepty z reálného světa
# 1) Audit config for dangerous settings
grep -Rnw -E "PermitRootLogins+yes" /etc/ssh/sshd_config*
# 2) Extract unique request paths returning 500
grep " 500 " access.log | awk '{print $7}' | sort | uniq -c | sort -nr | head
# 3) Find secrets accidentally committed (simple patterns)
grep -RInE "(AWS_SECRET|PRIVATE KEY|BEGIN RSA)" .
# 4) Inspect slow PHP-FPM logs for timeouts
grep -Ri "pool www" /var/log/php* | grep -i "slowlog"
# 5) Get context lines around matches (A=after, B=before, C=both)
grep -RinC 2 "OutOfMemoryError" /var/log/FAQs
Co znamená zkratka grep?
Grep je zkratka pro „Global Regular Expression Print“ (globální regulární výrazový tisk). Vyhledává ve vstupu řádky odpovídající zadanému vzoru a vypisuje je. Název sahá až k příkazu editoru ed, který prováděl podobný úkol.
Jak mohu rekurzivně použít grep v Linuxu?
Použijte -R (nebo -r) pro vyhledávání v podadresářích. Pro rychlost zkombinujte s filtry souborů: grep -R --include="*.log" "error" /var/logVyloučit cesty pomocí --exclude-dir.
Jaký je rozdíl mezi grep, egrep a fgrep?
grep ve výchozím nastavení používá základní regulární výraz. egrep (zastaralé) rovná se grep -E pro rozšířený regulární výraz (alternace, +, ? bez zpětných lomítek). fgrep (zastaralé) rovná se grep -F pro porovnávání pevných řetězců, což je rychlejší, když nejsou potřeba žádné regulární výrazy.
Jak nastavím grep tak, aby nerozlišoval velká a malá písmena a zobrazoval čísla řádků?
Použijte -i pro nerozlišující velká a malá písmena a -n pro čísla řádků: grep -in "timeout" server.log, přidat --color=auto pro zvýraznění.
Může grep používat regex ve stylu Perlu (lookahead, lookbehinds)?
Ano, s -P na sestaveních kompilovaných pomocí PCRE. Pokud se zobrazí chyba „nepodporováno“, PCRE není k dispozici. Použijte -E pro rozšířené regulární výrazy nebo přepněte na ripgrep pro vyhledávání bohaté na PCRE.
Jak vyloučím vzor adresáře nebo souboru v grepu?
Použijte --exclude a --exclude-dir. Příklad: grep -R --exclude-dir=node_modules --include="*.ts" "fetch(" .Tyto filtry snižují šum a zrychlují vyhledávání.
Jaké výstupní kódy vrací grep a proč jsou důležité?
Grep ukončí s hodnotou 0, pokud je nalezena shoda, s hodnotou 1, pokud není nalezena žádná shoda, a s hodnotou 2 v případě chyby. Ve skriptech, grep -q se běžně používá ke kontrole přítomnosti bez tisku výstupu.
Závěr
Jedno Příkaz grep v Linuxu je přesný nástroj pro vyhledávání protokoly, kód a konfigurace ve vysoké rychlosti. Zvládnutí jeho příznaků, režimů regulárních výrazů a vzorů kanálů dramaticky urychlí řešení problémů a vývoj. Na YouStable servery, SSH a strukturované protokolování vám umožňuje okamžitě využít tyto techniky pro rychlejší a jasnější diagnostiku.
