30 أمثلة على Grep لمشرفي النظام

30 Grep Examples System Admins



يمكنك أن تجد grep موجودًا في أعماق دماغ الحيوان لأنظمة التشغيل التي تشبه يونكس ويونكس. إنه برنامج أساسي يستخدم لمطابقة الأنماط وقد تمت كتابته في السبعينيات مع بقية أداة UNIX التي نعرفها ونحبها (أو نكرهها).

أثناء تعلم اللغات الرسمية والتعبيرات العادية يعد موضوعًا مثيرًا. تعلم grep له أكثر بكثير من regexes. لتبدأ بها وترى جمال وأناقة grep ، عليك أن ترى بعض الأمثلة من العالم الحقيقي أولاً.







أمثلة مفيدة وتجعل حياتك أسهل قليلاً. فيما يلي 30 حالة وخيارات شائعة لاستخدام grep.



1. ps aux | grep

يسرد ps aux جميع العمليات والأدوات المرتبطة بها. لكن غالبًا ما تكون هذه القائمة طويلة جدًا بحيث يتعذر على الإنسان فحصها. من خلال تمرير الإخراج إلى أمر grep ، يمكنك سرد العمليات التي تعمل مع تطبيق محدد للغاية في الاعتبار. على سبيل المثال يمكن أن يكون sshd أو nginx أو httpd.



# ps إلى | grep sshd
جذر400 0.0 0.2 69944 5624؟ SS17:47 0: 00/usr/سبين/sshd
جذر1076 0.2 0.3 95204 6816؟ SS18:29 0: 00 sshd: الجذر@نقاط/0
جذر1093 0.0 0.0 12784 932نقاط/0S +18:29 0: 00سيطرةsshd

2. انتزاع عناوين IP الخاصة بك

في معظم أنظمة التشغيل ، يمكنك سرد جميع واجهات الشبكة وعنوان IP الذي تم تعيينه لتلك الواجهة باستخدام إما الأمر ifconfig أو عنوان IP. كلا هذين الأمرين سينتج الكثير من المعلومات الإضافية. ولكن إذا كنت ترغب في طباعة عنوان IP فقط (على سبيل المثال لبرامج shell النصية) ، فيمكنك استخدام الأمر أدناه:





$عنوان IP | سيطرةإنت| awk '{print $ 2؛ } '
$عنوان IP | سيطرة -فيإنت| awk '{print $ 2؛ } ' # للخطوط التي تحتوي فقط على inet وليس inet6 (IPv6)

يحصل الأمر ip addr على جميع التفاصيل (بما في ذلك عناوين IP) ، ثم يتم توجيهه إلى الأمر الثاني grep inet الذي يخرج فقط الأسطر التي تحتوي على inet. يتم نقل هذا بعد ذلك إلى awk print البيان الذي يطبع الكلمة الثانية في كل سطر (لوضعها ببساطة).

ملاحظة: يمكنك أيضًا القيام بذلك بدون grep إذا كنت تعرف awk جيدًا.



3. النظر في محاولات SSH الفاشلة

إذا كان لديك خادم يواجه الإنترنت ، وبه عنوان IP عام ، فسيتم قصفه باستمرار بمحاولات SSH وإذا سمحت للمستخدمين بالحصول على وصول SSH المستند إلى كلمة المرور (وهي سياسة لا أوصي بها) ، يمكنك رؤية كل هذه المحاولات الفاشلة باستخدام اتباع أمر grep:

# cat /var/log/auth.log | grep فشل
اخماد عينة
ديسمبر5 16:عشرين: 03 ديبيان sshd[509]: فشل كلمة المرورلجذر من منفذ 192.168.0.10052374ssh2
ديسمبر5 16:عشرين: 07 ديبيان sshd[509]: فشل كلمة المرورلجذر من منفذ 192.168.0.10052374ssh2
ديسمبر5 16:عشرين:أحد عشرديبيان sshd[509]: فشل كلمة المرورلجذر من منفذ 192.168.0.10052374ssh2

4. الأنابيب جريب إلى Uniq

في بعض الأحيان ، ينتج grep الكثير من المعلومات. في المثال أعلاه ، ربما حاول عنوان IP واحد الدخول إلى نظامك. في معظم الحالات ، لا يوجد سوى عدد قليل من عناوين IP المسيئة التي تحتاج إلى تحديدها وإدراجها في القائمة السوداء بشكل فريد.

#قط /أين/سجل/المصادقة| سيطرة 'يفشل' | فريد -F 3

من المفترض أن يقوم الأمر uniq بطباعة الأسطر الفريدة فقط. يتخطى uniq -f 3 الحقول الثلاثة الأولى (للتغاضي عن الطوابع الزمنية التي لا تتكرر أبدًا) ثم يبدأ في البحث عن سطور فريدة.

5. التحريض على رسائل الخطأ

لا يقتصر استخدام Grep للوصول وسجلات الأخطاء على SSH فقط. خوادم الويب (مثل Nginx) في سجل الأخطاء والوصول إلى السجلات بدقة شديدة. إذا قمت بإعداد البرامج النصية للمراقبة التي ترسل لك تنبيهات عندما يقوم grep 404 بإرجاع قيمة جديدة. يمكن أن يكون مفيدا جدا.

# grep -w '404' /var/www/nginx/access.log

192.168.0.100 - -[06/ديسمبر/2018: 02:عشرين:29+0530] 'الحصول على /favicon.ico HTTP / 1.1' 404 200
'http://192.168.0.102/' Mozilla / 5.0 (Windows NT 10.0 ؛ Win64 ؛ x64)
AppleWebKit / 537.36 (KHTML ، مثل Gecko) Chrome / 70.0.3538.110 Safari / 537.36 '


192.168.0.101 - -[06/ديسمبر/2018: 02:أربعة خمسة:16+0530] 'الحصول على /favicon.ico HTTP / 1.1' 404 143
'http://192.168.0.102/' Mozilla / 5.0 (iPad ، CPU OS 12_1 مثل Mac OS X)
AppleWebKit / 605.1.15 (KHTML ، مثل Gecko) الإصدار / 12.0 Mobile / 15E148 Safari / 604.1 '

قد لا يكون regex 404 ولكن بعض عوامل تصفية regex الأخرى لعملاء الجوال فقط أو أجهزة Apple فقط التي تعرض صفحة ويب. يتيح لك ذلك الحصول على نظرة أعمق حول كيفية أداء تطبيقك.

6. قائمة الحزمة

بالنسبة للأنظمة القائمة على دبيان ، يسرد dpkg -l جميع الحزم المثبتة على نظامك. يمكنك توجيه ذلك إلى أمر grep للبحث عن حزم تنتمي إلى تطبيق معين. على سبيل المثال:

#dpkg -ال | سيطرة 'انا قد جئت'

7. grep -v fileNames

لسرد كل الخطوط التي لا تفعل تحتوي على نمط معين ، استخدم العلم -v. إنه في الأساس عكس أمر grep العادي.

8. grep -l

يسرد جميع الملفات التي تحتوي على تكرار واحد على الأقل للنمط المقدم. يكون هذا مفيدًا عندما تبحث عن نمط داخل دليل به ملفات متعددة. يقوم بطباعة اسم الملف فقط ، وليس السطر المحدد بالنمط.

9. خيار كلمة واحدة -w

$سيطرة -في <نمط>أسماء الملفات

يخبر العلم -w grep أن يبحث عن النمط المحدد ككلمة كاملة وليس مجرد سلسلة فرعية من السطر. على سبيل المثال ، في وقت سابق كنا نلتقط عنوان IP والنمط إنت طباعة الأسطر مع كليهما إنت و إنت 6 يسرد كل من عناوين IPv4 و IPv6. ولكن إذا استخدمنا علامة -w فقط مع الأسطر إنت حيث أن كلمة مسبوقة ومتبوعة بمسافات بيضاء تعتبر مطابقة صحيحة.

10. التعبير العادي الممتد

ستجد غالبًا أن التعبيرات النمطية الأصلية لـ Grep محدودة بعض الشيء. ستجد في معظم البرامج النصية والإرشادات استخدام علامة-E وهذا سيسمح لك بإدخال النمط فيما يسمى الوضع الموسع.

إليك أوامر grep و grep -E للبحث عن الكلمات Superman و Spiderman.

$سيطرة ' (سوبر | عنكبوت ) رجل'نص
$سيطرة (سوبر | سبايدر) رجلنص

كما ترى ، فإن النسخة الموسعة أسهل في القراءة.

11. جريب للحاويات الخاصة بك

إذا كان لديك مجموعة كبيرة من الحاويات قيد التشغيل على مضيفك ، فيمكنك تجميعها حسب اسم الصورة والحالة والمنافذ التي يعرضونها والعديد من السمات الأخرى. على سبيل المثال،

$عامل ميناءملاحظة | سيطرة [اسم الصورة]

12. جريب للقرون الخاصة بك

بينما نحن في موضوع الحاويات. غالبًا ما تميل Kubernetes إلى إطلاق حواجز متعددة في إطار نشر معين. بينما لكل جراب اسم فريد ، في مساحة اسم معينة ، فإنها تبدأ باسم النشر ، عادةً. يمكننا grep ذلك وإدراج جميع الكبسولات المرتبطة بعملية نشر معينة.

$kubectl الحصول على القرون| سيطرة <اسم النشر>

13. قبضة للبيانات الضخمة

غالبًا ما يتضمن ما يسمى بتحليل البيانات الضخمة بحثًا بسيطًا وفرزًا وعدًا للأنماط في مجموعة بيانات معينة. أدوات UNIX منخفضة المستوى مثل grep و uniq و wc جيدة بشكل خاص في هذا. يُظهر منشور المدونة هذا مثالًا رائعًا لمهمة تم إنجازها في ثوانٍ معدودة باستخدام grep وأدوات مساعدة Unix الأخرى بينما استغرق Hadoop ما يقرب من نصف ساعة.

على سبيل المثال ، يزيد حجم مجموعة البيانات هذه عن 1.7 جيجابايت. يحتوي على معلومات حول العديد من مباريات الشطرنج ، بما في ذلك الحركات التي تم إجراؤها ، ومن فاز ، وما إلى ذلك. نحن مهتمون بالنتائج فقط ، لذلك نقوم بتشغيل الأمر التالي:

$سيطرة 'نتيجة'مليون قاعدة-2.22.pgn| نوع | فريد
221 [نتيجة'*']
653728 [نتيجة'0-1']
852305 [نتيجة'1-0']
690934 [نتيجة'1 / 2-1 / 2']

استغرق هذا حوالي 15 ثانية على 4 سنوات 2-core / 4-thread معالج. لذلك في المرة القادمة التي تحل فيها مشكلة البيانات الضخمة. فكر فيما إذا كان يمكنك استخدام grep بدلاً من ذلك.

14. grep – color = auto

يتيح هذا الخيار لـ grep تمييز النمط الموجود داخل السطر الذي تم العثور عليه فيه.

15. grep -i

تطابق نمط Grep حساس لحالة الأحرف. ولكن إذا كنت لا تهتم بذلك ، فإن استخدام العلامة -i سيجعل grep غير حساس لحالة الأحرف.

16. grep -n

ستعرض العلامة -n أرقام الأسطر ، لذا لا داعي للقلق من العثور على نفس السطر لاحقًا.

17. git grep

يحتوي Git ، وهو نظام التحكم في الإصدار ، على أمر grep مضمن يعمل إلى حد كبير مثل grep العادي. ولكن يمكن استخدامه للبحث عن أنماط على أي شجرة ملتزمة باستخدام git CLI الأصلي ، بدلاً من الأنابيب المملة. على سبيل المثال ، إذا كنت في الفرع الرئيسي من الريبو الخاص بك ، يمكنك grep عبر الريبو باستخدام:

(رئيسي - سيد)$بوابة grep <نمط>

18. grep -o

تعتبر العلامة -o مفيدة حقًا عندما تحاول تصحيح أخطاء regex. سيطبع فقط الجزء المطابق من السطر ، بدلاً من السطر بأكمله. لذلك ، في حالة حصولك على عدد كبير جدًا من السطور غير المرغوب فيها للنمط المقدم ، ولا يمكنك فهم سبب حدوث ذلك. يمكنك استخدام العلامة -o لطباعة السلسلة الفرعية المخالفة والسبب حول regex الخاص بك إلى الوراء من هناك.

19. grep -x

ستطبع العلامة -x سطرًا ، إذا وفقط إذا كان السطر بأكمله يتطابق مع التعبير العادي الموفر. هذا مشابه إلى حد ما للعلامة -w التي تطبع سطرًا إذا تطابقت كلمة كاملة فقط مع regex المزود.

20. grep -T

عند التعامل مع السجلات والمخرجات من البرامج النصية للقذيفة ، فمن المرجح أن تصادف علامات تبويب صلبة للتمييز بين أعمدة الإخراج المختلفة. ستعمل العلامة -T على محاذاة علامات التبويب هذه بدقة بحيث يتم ترتيب الأعمدة بدقة ، مما يجعل الإخراج قابلاً للقراءة.

21. grep -q

يؤدي هذا إلى منع الإخراج وتشغيل الأمر grep بهدوء. مفيد جدًا عند استبدال النص ، أو تشغيل grep في نص برمجي خفي.

22. grep -P

يمكن للأشخاص الذين اعتادوا استخدام صيغة التعبير العادي استخدام العلامة -P لاستخدام ذلك بالضبط. لست مضطرًا لتعلم التعبير النمطي الأساسي ، والذي يستخدمه grep افتراضيًا.

23. grep -D [ACTION]

في Unix ، يمكن التعامل مع كل شيء تقريبًا كملف. وبالتالي ، يمكن تغذية أي جهاز ، أو مقبس ، أو تيار بيانات يرد أولاً يصرف أولاً (FIFO) إلى grep. يمكنك استخدام علامة D متبوعة بإجراء (الإجراء الافتراضي هو READ). هناك عدد قليل من الخيارات الأخرى هي SKIP لتخطي أجهزة معينة بصمت و RECURSE للانتقال بشكل متكرر من خلال الدلائل والروابط الرمزية.

24. التكرار

إذا كنت تبحث عن نمط معين وهو تكرار لنمط أبسط معروف ، فاستخدم الأقواس المتعرجة للإشارة إلى عدد التكرار

$سيطرة [0-9]{10}

هذا يطبع سطورًا تحتوي على سلاسل يبلغ طولها 10 أرقام أو أكثر.

25. تكرار الاختصارات

يتم حجز بعض الأحرف الخاصة لنوع معين من تكرار النمط. يمكنك استخدامها بدلاً من تقويم الأسنان المجعد ، إذا كانت تناسب حاجتك.

؟ : يجب أن يتطابق النمط الذي يسبق علامة الاستفهام مع الصفر أو يتطابق مع مرة واحدة.

*: يجب أن يتطابق النمط الذي يسبق النجمة مع صفر أو أكثر من المرات.

+: يجب أن يتطابق النمط الذي يسبق علامة الجمع مرة واحدة أو أكثر.

25. بايت تعويضات

إذا كنت تريد أن تعرف رؤية إزاحة البايت للأسطر التي يوجد بها التعبير المطابق ، فيمكنك استخدام العلامة -b لطباعة الإزاحات أيضًا. لطباعة إزاحة الجزء المطابق فقط من السطر ، يمكنك استخدام العلامة -b مع العلم -o.

$سيطرة -أو <نمط> [اسم الملف]

تعني الإزاحة ببساطة ، بعد عدد البايت من بداية الملف الذي تبدأ به سلسلة المطابقة.

26. egrep و fgrep و rgerp

سترى غالبًا استدعاء egrep ، لاستخدام صيغة التعبير العادي الموسعة التي ناقشناها سابقًا. ومع ذلك ، يعد هذا بناء جملة مهملاً ويوصى بتجنب استخدامه. استخدم grep -E بدلاً من ذلك. وبالمثل ، استخدم grep -F ، بدلاً من fgrep و grep -r بدلاً من rgrep.

27. grep -z

في بعض الأحيان ، لا يكون الإدخال إلى grep سطورًا تنتهي بحرف سطر جديد. على سبيل المثال ، إذا كنت تعالج قائمة بأسماء الملفات ، فقد تأتي من مصادر مختلفة. تخبر العلامة -z grep معاملة الحرف NULL كنهاية سطر. يسمح لك هذا بمعاملة الدفق الوارد مثل أي ملف نصي عادي.

28. grep -a [اسم الملف]

تخبر العلامة -a grep أن يتعامل مع الملف المقدم كما لو كان نصًا عاديًا. يمكن أن يكون الملف ثنائيًا ، لكن grep سيتعامل مع المحتويات الموجودة بداخله ، كما لو كانت نصًا.

29. grep -U [اسم الملف]

تخبر العلامة -U grep أن يتعامل مع الملفات المقدمة كما لو كانت ملفات ثنائية وليست نصية. بشكل افتراضي ، يخمن grep نوع الملف من خلال النظر إلى البايتات القليلة الأولى. استخدام هذه العلامة يلغي عمل التخمين.

Grep -m NUM

مع الملفات الكبيرة ، يمكن أن يستغرق التقاط تعبير ما إلى الأبد. ومع ذلك ، إذا كنت تريد التحقق من أول NUM فقط من المطابقات ، فيمكنك استخدام العلامة -m لإنجاز ذلك. إنه أسرع وغالبًا ما يكون الإخراج قابلاً للإدارة أيضًا.

استنتاج

تتضمن الكثير من المهام اليومية لمدير النظام غربلة مساحات كبيرة من النص. قد تكون هذه سجلات أمان أو سجلات من الويب أو خادم البريد أو نشاط المستخدم أو حتى نصًا كبيرًا من صفحات الدليل. يمنحك Grep قدرًا إضافيًا من المرونة عند التعامل مع حالات الاستخدام هذه.

نأمل أن تكون الأمثلة وحالات الاستخدام القليلة المذكورة أعلاه قد ساعدتك في فهم أفضل لهذه الحفرية الحية للبرنامج.