الاستخدام السليم لأوامر Find و Grep في Linux

معظم مستخدمي أنظمة Unix المبتدئين ، ولا سيما Linux ، ليسوا على دراية بمشغلي سطر الأوامر الأساسي المستخدم في نظام التشغيل هذا. دعونا نلقي نظرة فاحصة على الوظائف واستخدام عوامل التشغيل find و grep.

استخدام أوامر Find و Grep في Linux.

البحث عن

الأمر Linux find هو أداة مساعدة لسطر الأوامر لاجتياز التسلسل الهرمي للملف. يمكن استخدامه للبحث عن الملفات والدلائل وتنفيذ العمليات اللاحقة معهم. وهو يدعم البحث حسب الملف والمجلد والاسم وتاريخ الإنشاء وتاريخ التغيير والمالك والأذونات. باستخدام -exec ، يمكن تنفيذ أوامر UNIX الأخرى للملفات أو المجلدات التي تم العثور عليها. بناء الجملة:

$ find [من أين تبدأ البحث] [يحدد التعبير ما يجب البحث عنه] [-options] [ما يجب العثور عليه]

خيارات:

  • -exec - الملف المطلوب الذي يفي بالمعايير المذكورة أعلاه وإرجاع 0 كحالة خروج لتنفيذ الأمر بنجاح ؛
  • -ok - يعمل مثل -exec ، باستثناء أن تتم مطالبة المستخدم أولاً ؛
  • -inum N - البحث باستخدام الرقم "N" ؛
  • -الروابط N - البحث بالارتباطات "N" ؛
  • -الاسم التجريبي - البحث عن الملفات المحددة في "التجريبي" ؛
  • - ملف جديد - ابحث عن الملفات التي تم تعديلها / إنشائها بعد "ملف" ؛
  • -perm octal - البحث إذا كان الدقة ثمانيًا ؛
  • -print - إظهار المسار إلى المستندات الموجودة باستخدام المعايير الأخرى ؛
  • - فارغة - البحث عن مستندات وأدلة فارغة ؛
  • -size + N / -N - كتل البحث "N" ؛ يمكن استخدام "N" و "c" لقياس الحجم بالأحرف ؛ "+ N" يعني حجم أكبر من الكتل "N" ، و "-N" تعني حجمًا أصغر من الكتل "N" ؛
  • -user name - ابحث عن المستندات التي تنتمي إلى اسم المستخدم أو المعرف "name" ؛
  • \ (expr \) - صحيح إذا كانت "expr" صحيحة ؛ تستخدم لتجميع المعايير بالاقتران مع OR أو AND.

GREP

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

بناء جملة الأوامر

قبل أن نبدأ في استخدام الأمر ، لنبدأ بمراجعة بناء الجملة الأساسي. تحتوي تعبيرات الأداة المساعدة على الشكل التالي:

[خيارات] نمط [ملف ...]

العناصر الموجودة بين قوسين مربعين اختيارية.

  • خيارات - صفر أو أكثر من الخيارات. يوفر الفريق عددًا من الخيارات التي تتحكم في سلوكه.
  • نمط - نمط البحث.
  • ملف - صفر أو أكثر من أسماء ملفات الإدخال.

كيفية إدخال أمر للبحث في الملفات

الغرض الرئيسي من الأمر هو البحث عن نص في الملف. على سبيل المثال ، للعرض من الملف / etc / passwd الذي يحتوي على خط bash ، يمكنك استخدام الأمر التالي:

$ grep bash / etc / passwd

يجب أن يبدو الإخراج بشيء من هذا القبيل:

الجذر 0: 0: الجذر: / الجذر: / بن / باش

domain1000: 1000: domain: / home / domain: / bin / bash

إذا كانت السلسلة تحتوي على مسافات ، فأنت بحاجة إلى تضمينها بين علامات اقتباس مفردة أو مزدوجة:

$ "مدير عرض جنوم" / etc / passwd

عكس المباراة (على سبيل المثال)

لعرض الخطوط التي لا تتطابق مع النقش ، أدخل المعلمة –v (أو - عكس-مباراة). على سبيل المثال ، لعرض ملف لا يحتوي على nologin من ملف / etc / passwd ، يمكنك إدخال الأمر التالي:

$ -v nologin / etc / passwd

الإخراج:

الجذر 0: 0: الجذر: / الجذر: / بن / باش

colord 124: 124 :: / var / lib / colord: / bin / false

git 994: 994: git daemon user: /: / usr / bin / git-shell

linuxize 1000: 1000: linuxize: / home / linuxize: / bin / bash

كيفية استخدام الأمر للبحث في الإخراج

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

$ ps -ef | شبكة الاتصالات العالمية بيانات

الإخراج:

شبكة الاتصالات العالمية البيانات 18247 12675 4 16:00؟ 00:00:00 php-fpm: pool www

root 18272 17714 0 16:00 نقطة / 0 00:00:00 —color = تلقائي - استبعاد-dir = .bzr —Exclude-dir = CVS —exclude-dir = .git —exclude-dir = .hg —Exclude-dir = .svn www-data

شبكة الاتصالات العالمية البيانات 31147 12770 0 Oct22؟ 00:05:51 إنجن إكس: عملية العامل

شبكة الاتصالات العالمية البيانات 31148 12770 0 Oct22؟ 00:00:00 nginx: عملية إدارة ذاكرة التخزين المؤقت

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

$ ps -ef | شبكة الاتصالات العالمية البيانات | grep -v grep

الإخراج:

شبكة الاتصالات العالمية البيانات 18247 12675 4 16:00؟ 00:00:00 php-fpm: pool www

root 18272 17714 0 16:00 نقطة / 0 00:00:00 —color = تلقائي - استبعاد-dir = .bzr —Exclude-dir = CVS —exclude-dir = .git —exclude-dir = .hg —Exclude-dir = .svn www-data

شبكة الاتصالات العالمية البيانات 31147 12770 0 Oct22؟ 00:05:51 إنجن إكس: عملية العامل

شبكة الاتصالات العالمية البيانات 31148 12770 0 Oct22؟ 00:00:00 nginx: عملية إدارة ذاكرة التخزين المؤقت

البحث العودية

للبحث بشكل متكرر عن نمط ما ، أدخل الخيار –r (أو - المتكرر). سيتيح لك ذلك البحث في جميع الملفات في الدليل المحدد ، وتخطي الروابط الرمزية التي تحدث بشكل متكرر. لتصفح جميع الروابط الرمزية ، استخدم الخيار –r (أو -dereference-recursive). في المثال التالي ، نبحث عن domain.com في جميع الملفات داخل الدليل / etc:

$ -r domain.com / الخ

سيقوم الأمر بطباعة الحقول المقابلة مع بادئة مسار الملف الكامل.

/etc/hosts:127.0.0.1 node2.domain.com /etc/nginx/sites-available/domain.com: server_name domain.com www.domain.com؛

إذا كنت تستخدم الخيار –R بدلاً من –r ، فسيتبع الأمر جميع الروابط الرمزية:

$ -R domain.com / الخ

لاحظ حقل الإخراج الأخير. لا تتم طباعة هذا في المثال أعلاه ، لأن الملفات الموجودة في دليل Nginx الممكّن للمواقع هي روابط رمزية لملفات التكوين داخل الدليل المتاح للمواقع.

الإخراج:

/etc/hosts:127.0.0.1 node2.domain.com

/etc/nginx/sites-available/domain.com: server_name domain.com www.domain.com؛

/etc/nginx/sites-enabled/domain.com: server_name domain.com www.domain.com؛

إظهار اسم الملف فقط

لمنع المخرجات الافتراضية وطباعة أسماء الملفات التي تحتوي على النموذج المطابق فقط ، يمكنك إدخال الخيار –l (أو - الملفات مع التطابقات). على سبيل المثال ، للبحث عن جميع الملفات التي تنتهي بـ .conf في دليل العمل الحالي ، وطباعة أسماء الملفات التي تحتوي على نوع domain.com فقط ، اكتب:

$ –L domain.com * .conf

سيظهر الإخراج بشيء من هذا القبيل:

tmux.conf

haproxy.conf

عادةً ما يتم استخدام الخيار -l مع خيار العودية -R:

$ -Rl domain.com / tmp

حالة عدم الحساسية

بشكل افتراضي ، يكون الأمر حساسًا لحالة الأحرف ، مما يعني أنه يتم التعامل مع الأحرف الكبيرة والصغيرة على أنها مختلفة. لتجاهل الحالة عند البحث ، أدخل الخيار –i (أو -حالة الأحرف). على سبيل المثال ، إذا كنت تبحث عن Zebra دون أي خيار ، فلن يعرض الأمر التالي أي مخرجات ، أي هناك مطابقة.

$ Zebra / usr / share / words

ولكن إذا أجريت بحثًا غير متحسس لحالة الأحرف ، فاستخدم الخيار –i ، فسوف يتطابق مع الأحرف الكبيرة والصغيرة:

$ grep -i Zebra / usr / share / words

سوف تتوافق إشارة "Zebra" مع "Zebra" أو "ZEbrA" أو أي مجموعة أخرى من الأحرف الكبيرة والأحرف الصغيرة.

الإخراج:

حمار الوحش

للحمار وحشي

الحمار الوحشي

تطابق تام

عند البحث ، ستطبع gnu أيضًا gnu ، حيث يتم إدراج كلمات أكبر ، مثل cygnus أو ماغنوم.

gnu / usr / share / words

الإخراج:

الدجاجة

النو ثيتل افريقي

فترة خلو العرش

lgnu9d

يجنوم

زجاجة كبيرة للخمر

ماغنوسون

الطحالب

wingnut

لإرجاع فقط التعبيرات التي يكون الحقل المحدد فيها عبارة عن كلمة كاملة (غير مرفقة بالكلمات) ، يمكنك استخدام الخيار –w (أو -word-regexp).

هام. تتضمن أحرف الكلمة أحرفًا أبجدية رقمية (az و AZ و 0-9) وشرطات سفلية (_). يتم التعامل مع جميع الشخصيات الأخرى كأحرف غير لفظية.

إذا قمت بتشغيل نفس الأمر كما هو مذكور أعلاه ، بما في ذلك الخيار –w ، فسوف يعرض الأمر فقط تلك التي تتضمن gnu ككلمة منفصلة.

$ grep -w gnu / usr / share / words

الإخراج: جنو

عرض الأرقام

لإظهار عدد الخطوط التي تحتوي على نقش ، استخدم المعلمة –n (أو -line-number). سيؤدي استخدام هذا الخيار إلى طباعة التطابقات مع الإخراج القياسي مع بادئة الرقم الذي تم العثور عليه. على سبيل المثال ، للعرض من ملف / etc / services الذي يحتوي على بادئة bash بالرقم المناظر ، يمكنك استخدام الأمر التالي:

$ grep -n 10000 / etc / services

الإخراج أدناه يوضح أن التطابقات هي في 10423 و 10424.

الإخراج:

10423: ndmp 10،000 / tcp

10424: ndmp 10000 / udp

عد

لطباعة عدد الخطوط المتطابقة مع الإخراج القياسي ، استخدم المعلمة –c (أو –count). في المثال أدناه ، نحسب عدد الحسابات التي لديها shell / usr / bin / zsh.

$ grep -c '/ usr / bin / zsh' / etc / passwd

الإخراج: 4

عدة خطوط (أنماط)

يمكن لعامل التشغيل OR أن يجمع بين نمطين أو أكثر من أنماط البحث |. بشكل افتراضي ، يفسر الأمر النمط كتعبير منتظم رئيسي ، حيث يفقد أصحاب الحروف الأولية معانيهم الخاصة ، ويجب استخدام إصداراتهم بشرطة مائلة للخلف. في المثال أدناه ، نبحث عن كل تكرارات الكلمات المميتة والخطأ والحرجة في ملف سجل أخطاء Nginx:

$ grep 'فادح \ | خطأ \ | حرج' /var/log/nginx/error.log

إذا كنت تستخدم خيار التعبير العادي الموسَّع –E (أو - مدد- regexp) ، فيجب عدم تجاوز العبارة ، كما هو موضح أدناه:

$ grep -E "فادح | خطأ | حرج" /var/log/nginx/error.log

تعبير منتظم

يحتوي GNU Grep على مجموعتين من وظائف التعبير العادي - Basic و Extended. تبعًا للإعدادات الافتراضية ، تفسر الدالة النمط كتعبير عادي أساسي ، للتبديل إلى تعبيرات عادية ممتدة ، تحتاج إلى استخدام الخيار –E. عند استخدام التعبيرات العادية في الوضع الرئيسي ، فإن جميع الأحرف الأخرى ، باستثناء الحروف الأولية ، هي في الواقع تعبيرات عادية تتوافق مع بعضها البعض. يوجد أدناه قائمة من الحروف الأولية الأكثر استخدامًا:

  • استخدم الحرف ^ (حرف الإقحام) لمطابقة التعبير في بداية السطر. في المثال التالي ، لن يتطابق ^ kangaroo إلا إذا حدث في البداية: $ grep "^ kangaroo" file.txt
  • استخدم الرمز $ (دولار) لمطابقة التعبير في النهاية. في المثال التالي ، لن يتطابق kangaroo $ إلا إذا تمت مصادفته في النهاية: grep "kangaroo $" file.txt
  • استخدم الرمز. (نقطة) لتتناسب مع أي شخصية واحدة. على سبيل المثال ، لمطابقة كل شيء يبدأ بـ kan المكون من حرفين وينتهي بـ roo ، يمكنك استخدام النموذج التالي: $ grep "kan..roo" file.txt
  • استخدم [] (الأقواس) لمطابقة أي حرف مفرد محاط بأقواس. على سبيل المثال ، ابحث عن تلك التي تحتوي على قبول أو "لهجة" ، يمكنك استخدام النموذج التالي: $ grep "acce [np] t" file.txt

لتجنب المعنى الخاص للحرف التالي ، استخدم الحرف \ (الخط المائل العكسي).

التعبيرات العادية الموسعة

لتفسير نقش كتعبير منتظم ممتد ، استخدم المعلمة –E (أو –نقطة-regexp). تتضمن التعبيرات العادية الموسعة جميع الحروف الأولية الأساسية ، وكذلك الحروف الأولية الإضافية لإنشاء أنماط بحث أكثر تعقيدًا وقوة. فيما يلي بعض الأمثلة:

  • مطابقة واستخراج جميع عناوين البريد الإلكتروني من هذا الملف: $ grep -E -o "\ b [A-Za-z0-9 ._٪ + -] [A-Za-z0-9 .-] + \. [A-Za-z] {2.6} \ b "file.txt
  • قم بتعيين واستخراج جميع عناوين IP الصالحة من هذا الملف: $ grep -E -o '(25 [0-5] | 2 [0-4] [0-9] | [01]؟ [0-9] [0 -9]؟) \. (25 [0-5] | 2 [0-4] [0-9] | [01]؟ [0-9] [0-9]؟) \. (25 [0- 5] | 2 [0-4] [0-9] | [01]؟ [0-9] [0-9]؟) \. (25 [0-5] | 2 [0-4] [0- 9] | [01]؟ [0-9] [0-9]؟) 'File.txt

يتم استخدام الخيار -o لطباعة التطابقات فقط.

طباعة قبل العد

لطباعة عدد معين من الأسطر قبل المطابقة ، استخدم المعلمة –B (أو - قبل السياق). على سبيل المثال ، لعرض 5 أسطر من السياق الأولي قبل المطابقة ، يمكنك استخدام الأمر التالي: $ grep -A 5 root / etc / passwd

طباعة بعد البحث

لطباعة عدد محدد من الأسطر بعد التطابق ، استخدم المعلمة –A (أو -بعد السياق). على سبيل المثال ، لعرض 5 أسطر من السياق النهائي بعد مطابقة السلاسل ، يمكنك استخدام الأمر التالي: $ grep -B 5 root / etc / passwd

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