أمر grep في لينكس يبحث في النصوص عن أنماط ويعيد الأسطر المطابقة. يدعم التعبيرات النمطية الأساسية والموسعة والمتوافقة مع لغة بيرل، ويعمل بشكل متكرر عبر الدلائل، ويتكامل مع الأنابيب لتصفية قوية. استخدمه لفحص السجلات، وشفرة المصدر، وملفات التكوين بسرعة. الصيغة: grep [options] PATTERN [FILE...].
إذا كنت تقضي وقتًا في العمل على خوادم لينكس، فإن تعلم أمر grep في لينكس سيوفر عليك ساعات من العمل أسبوعيًا. يشرح هذا الدليل الاستخدام العملي لأمر grep بأمثلة واقعية، ويغطي التعبيرات النمطية، والتكرار، وفلاتر الملفات، ونصائح لتحسين الأداء، والأخطاء الشائعة، وذلك من منظور أنظمة التشغيل وعمليات الاستضافة اليومية.
ما هو برنامج Grep ولماذا هو مهم؟
يرمز Grep إلى "Global Regular Expression Print" (طباعة التعبير النمطي العالمي). يقوم بمسح المدخلات (ملفات أو مدخلات قياسية) وطباعة الأسطر التي تطابق نمطًا معينًا. إنه سريع وسهل الاستخدام مع البرامج النصية، وهو ضروري للمطورين ومديري الأنظمة والمحللين الذين يحتاجون إلى فرز السجلات والتعليمات البرمجية والإعدادات. لينكس أو ماك أو إس محطات.

على خوادم الإنتاج، استخدمتُ أداة grep للعثور على نقاط النهاية المعطوبة في سجلات الويب الضخمة، وكشف أنماط الوصول الخبيثة، وتحديد مواقع البيانات السرية المضمنة في قواعد البيانات البرمجية. وباستخدام الخيارات المناسبة، تتحول إلى أداة دقيقة وسريعة لتحليل بياناتك.
بناء الجملة الأساسي والضروري خيارات متاحة
بناء الجملة الأساسي
grep [OPTIONS] PATTERN [FILE...]
# Example:
grep "error" /var/log/nginx/access.logورقة غش الخيارات الشائعة
- -أنا: بحث غير حساس لحالة الأحرف
- -r أو -R: البحث المتكرر في الدليل
- -ن: عرض أرقام الأسطر
- -ح: إظهار اسم الملف دائمًا
- -الخامس: عكس التطابق (إظهار الأسطر التي لا تتطابق)
- -w: تطابق الكلمات الكاملة فقط
- -س: قم بمطابقة الأسطر بأكملها فقط
- -ج: عدد الأسطر المتطابقة
- -O: اطبع الجزء المتطابق فقط
- –color=auto: قم بتمييز المباريات (مفيد لسهولة القراءة)
# 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" *.pyالتعبيرات النمطية في Grep (الأساسية، والموسعة، وPCRE)
يدعم برنامج Grep محركات تعبيرات منتظمة مختلفة. ويستخدم افتراضيًا التعبيرات المنتظمة الأساسية (BRE). استخدم -E للتعبيرات النمطية الموسعة (ERE)، و -P بالنسبة للتعبيرات النمطية المتوافقة مع لغة بيرل (PCRE) حيثما كانت متاحة. القديم egrep و fgrep تم إيقاف استخدام الأسماء المستعارة، يُفضل استخدام الأسماء المستعارة. grep -E و grep -F.
أمثلة أساسية مقابل أمثلة موسعة
# 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.txtنصائح حول اختبار PCRE (عند توفر الدعم)
تقوم بعض التوزيعات بتجميع grep بدون -P (PCRE). إذا كان ذلك مدعومًا، يمكنك استخدام خاصية البحث المسبق والفئات المتقدمة. عندما -P غير متوفر، استخدم grep -E أو أدوات مثل ripgrep (rg).
# Extract emails (PCRE lookaheads/lookbehinds may vary)
grep -Po "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}" maildump.txtالبحث المتكرر وتصفية الملفات
استخدم التكرار للبحث في الدلائل. ادمجه مع --include, --excludeو --exclude-dir لتضييق نطاق البحث وتحسين السرعة. -I يتعامل الخيار مع الملفات الثنائية على أنها غير متطابقة.
# 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/بالنسبة للسجلات المضغوطة، استخدم zgrep (أو gzcat + grep) للبحث بدون فك الضغط اليدوي.
# Search inside gzip-compressed logs
zgrep -n "timeout" /var/log/nginx/access.log*.gz
# Or:
gzcat access.log.1.gz | grep -n "timeout"حالات استخدام عملية للاستضافة، وعمليات التطوير والتشغيل، والمطورين
تحليل السجلات على خوادم لينكس
# 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 | headالأمن والاستجابة للحوادث
# 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/nginxسير عمل المطورين
# 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/wwwإدارة التطبيقات على منصات الاستضافة؟ YouStable خوادم، SSH إن إمكانية الوصول والاحتفاظ الشامل بالسجلات تجعل عملية استكشاف الأخطاء وإصلاحها باستخدام grep أمرًا بسيطًا، خاصة عند التحقيق في الارتفاعات المفاجئة أو الطلبات البطيئة أو حركة مرور الروبوتات عبر سجلات الوصول/الأخطاء.
دمج أمر Grep مع أوامر لينكس الأخرى
تُصبح أداة grep فعّالة في خطوط المعالجة. استخدمها لتصفية مخرجات أدوات النظام والحاويات والحزم. manageروبية.
# 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"بالنسبة لقوائم الملفات الكبيرة، اجمع بين البحث والتعبير باستخدام السجلات المنتهية بـ null بشكل آمن.
# 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"نصائح لتحسين الأداء ومزالق البرمجة
تسريع عملية البحث في البيانات الضخمة
- استخدم الخيار -F للسلاسل الثابتة (بدون تحليل التعبيرات النمطية، وغالبًا ما يكون أسرع بكثير).
- قم بتقييد العمل باستخدام –include/–exclude و –exclude-dir.
- يفضل استخدام الأنماط المثبتة (^، $) أو -w لتقليل عدد النتائج.
- استخدم الخيار -m N للتوقف بعد N من التطابقات عندما تحتاج فقط إلى عينة.
- قم بتعيين LC_ALL=C لتسريع المقارنات على مستوى البايت على بيانات ASCII.
- ضع في اعتبارك استخدام ripgrep (rg) للأشجار الكبيرة للغاية؛ فهو مُحسَّن ويحترم ملف .gitignore.
# Fast fixed-string search with locale optimization
LC_ALL=C grep -RFn --include="*.log" "Connection timed out" /var/logالملفات الثنائية، والقيم الفارغة، ورموز الخروج
- الملفات الثنائية: استخدم -I للتخطي، أو –binary-files=text لفرض معالجة النص.
- الوضع المنتهي بـ null: يتعامل الأمر grep -z مع NUL كفاصل أسطر للبيانات المتخصصة.
- رموز الخروج: 0 في حال العثور على تطابق، 1 في حال عدم وجود تطابق، 2 في حال حدوث خطأ. استخدم الخيار -q (الوضع الصامت) في البرامج النصية.
# Quietly test if a string exists; run action on success
if grep -q "MAINTENANCE_MODE=on" .env; then
echo "Maintenance mode enabled"
fiتجنب هذه الأخطاء الشائعة في استخدام لغة Grep
- استخدام الأحرف الخاصة غير المُهرّبة. مثال: استخدم "\." للدلالة على النقطة.
- الاعتماد على الخيار -P عندما لا يكون برنامج grep الخاص بك مُجمَّعًا باستخدام PCRE. تحقق من ذلك باستخدام
grep -Pومعالجة الأخطاء. - السماح للصدفة بتوسيع أنماط الأحرف بشكل غير متوقع. أنماط الاقتباس:
grep -E "foo|bar" file. - التكرار في مجلدات ضخمة أو غير ذات صلة. استخدم دائمًا الخيار -R مع
--exclude-dir. - عدم تطابق حدود الكلمات. بالنسبة للكلمة الكاملة، استخدم
-wبدلاً من المساحات المؤقتة.
البدائل والأدوات ذات الصلة
- ripgrep (rg): بحث تكراري سريع للغاية، ويحترم ملف .gitignore. ممتاز لقواعد البيانات البرمجية.
- ack / the_silver_searcher (ag): محركات بحث موجهة للمطورين مع إعدادات افتراضية معقولة.
- awk: مسح الأنماط باستخدام الإجراءات؛ قوي عندما تحتاج إلى معالجة تراعي الأعمدة.
- العطش: تحرير البث؛ مثالي للاستبدال المباشر بعد تحديد التطابقات.
للاستخدام اليومي عمل الخادميُعدّ grep أساسيًا. بالنسبة للمستودعات الضخمة أو خطوط أنابيب التكامل المستمر، غالبًا ما يوفر ripgrep أداءً أفضل مع الحفاظ على الأنماط المألوفة.
سيناريوهات ووصفات من واقع الحياة
# 1) Audit config for dangerous settings
grep -Rnw -E "PermitRootLogin\s+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/الاسئلة المتكررة
ماذا يرمز إليه اختصار grep؟
يرمز Grep إلى "Global Regular Expression Print" (طباعة التعبير النمطي العالمي). يبحث هذا الأمر في المدخلات عن أسطر تطابق نمطًا معينًا ويطبعها. يعود أصل التسمية إلى أمر في محرر النصوص ed كان يؤدي مهمة مماثلة.
كيف أستخدم الأمر grep بشكل متكرر في نظام لينكس؟
استعمل -R (أو -r) للبحث في المجلدات الفرعية. استخدمه مع مرشحات الملفات لزيادة السرعة: grep -R --include="*.log" "error" /var/logاستبعاد المسارات باستخدام --exclude-dir.
ما الفرق بين grep و egrep و fgrep؟
grep يستخدم التعبيرات النمطية الأساسية بشكل افتراضي. egrep (مهجور) يساوي grep -E للتعبيرات النمطية الموسعة (التناوب، +، ؟ بدون شرطات مائلة عكسية). fgrep (مهجور) يساوي grep -F لمطابقة السلاسل الثابتة، وهو أسرع عندما لا تكون هناك حاجة إلى ميزات التعبير النمطي.
كيف أجعل الأمر grep غير حساس لحالة الأحرف وأعرض أرقام الأسطر؟
استعمل -i لـ (غير حساس لحالة الأحرف و) -n بالنسبة لأرقام الأسطر: grep -in "timeout" server.log. إضافة --color=auto لتسليط الضوء.
هل يمكن استخدام التعبيرات النمطية على غرار لغة بيرل (البحث المسبق، البحث اللاحق) في grep؟
نعم مع -P في الإصدارات المُجمَّعة باستخدام PCRE. إذا ظهر لك خطأ "غير مدعوم"، فهذا يعني أن PCRE غير متوفر. استخدم -E للحصول على تعبيرات منتظمة موسعة أو التبديل إلى ripgrep لإجراء عمليات بحث غنية بـ PCRE.
كيف يمكنني استبعاد نمط دليل أو ملف في grep؟
استعمل --exclude و --exclude-dir. مثال: grep -R --exclude-dir=node_modules --include="*.ts" "fetch(" .تعمل هذه المرشحات على تقليل التشويش وتسريع عمليات البحث.
ما هي رموز الخروج التي يُرجعها الأمر grep، ولماذا هي مهمة؟
يُنهي الأمر grep عمله برمز 0 عند العثور على تطابق، و1 عند عدم العثور على تطابق، و2 عند حدوث خطأ. في البرامج النصية، grep -q يُستخدم عادةً للتحقق من الوجود دون طباعة أي مخرجات.
خاتمة
استخدم يُعد أمر grep في نظام لينكس أداة دقيقة للبحث إدارة السجلات والتعليمات البرمجية والإعدادات بسرعة. إتقان علاماتها وأنماط التعبيرات النمطية وأنماط خطوط الأنابيب سيُسرّع بشكل كبير من عملية استكشاف الأخطاء وإصلاحها والتطوير. YouStable خوادم، SSH وتتيح لك عملية التسجيل المنظم تطبيق هذه التقنيات على الفور للحصول على تشخيصات أسرع وأكثر وضوحًا.