أوامر Linux ومهارات Shell
grep: البحث في Linux مثل المحترفين
ينجو grep من كل تحديث لسلسلة الأدوات لأن الوظيفة لا تتغير أبدًا: ابحث عن الأسطر المهمة داخل النص والتي تنمو بشكل أسرع من أن يقوم أي شخص بتنظيفها. قوتها الحقيقية هي مفردات العلم التي تحول البحث إلى إجابة: السياق المحيط، وقوائم أسماء الملفات، والمطابقات المقلوبة، ورموز الخروج التي يمكن أن يتفرع عنها برنامج شل النصي. عندما يسيء الخادم التصرف، يبدأ التحقيق بـ grep، وفي أغلب الأحيان، أكثر مما يعترف به أي شخص، ينتهي الأمر عند هذا الحد أيضًا.
النقاط الرئيسية
- البحث بشكل متكرر لغرض: grep -rni 'fail2ban' /var/log --include='*.log' يتخطى الثنائيات والأرشيفات المضغوطة من تلقاء نفسها؛ يعلمنا grep -r over /var/log هذا الدرس بطريقة بطيئة.
- السياق يجعل المطابقات قابلة للقراءة: -A 3 يُظهر الأسطر التالية، -B 3 قبلها، -C 5 كلاهما؛ -l يسرد أسماء الملفات فقط، و-c يحسب التطابقات لكل ملف، و-L يعكس القائمة إلى ما هو مفقود.
- تعد رموز الخروج جزءًا من العقد: 0 يعني متطابق، 1 يعني عدم وجود تطابق، 2 يعني خطأ؛ البرنامج النصي الذي يقوم بتشغيل grep -q ويتجاهل هذا التمييز يعامل النجاح والصمت بشكل مماثل.
- قوائم الملفات المتسلسلة خالية من الأمان: grep -rlZ 'ssl_protocols' /etc/nginx --include='*.conf' | xargs -0 -r ls -l; قم بإسقاط الاقتران Z و-0 واسم الملف الأول بمسافة يقطع خط الأنابيب.
- استخدم -E كمستوى التعبير العادي الافتراضي للتبديل القابل للقراءة، والوصول إلى -P (النظرات، فئات \d) فقط عندما تقبل أن امتداد GNU لن يحمله BSD grep.
- -F يتعامل مع النمط كنص حرفي: أسرع، ومحصن ضد أحرف regex الأولية التي تتسلل من المتغيرات التي تم لصقها مباشرة من التذكرة.
- --exclude-dir=.git و --exclude-dir=node_modules يحافظان على عمليات البحث المتكررة خارج الدلائل الموجودة فقط لإبطائها؛ تهجئة الأسماء بشكل واضح في البرامج النصية نظرًا لأن توسيع الأقواس يعد من وسائل الراحة bash، وليس ميزة grep.
- أبقِ العادات منفصلة: --color=auto لتوفير الراحة التفاعلية، ولا يوجد لون في البرامج النصية (تسلسلات الهروب من السجلات الفاسدة)، و-n (أرقام الأسطر) حتى يتمكن الشخص التالي من العثور على النقطة التي قمت بلصقها.
ملاحظة ميدانية
لقد قمت ذات مرة بتشغيل grep -r عبر مزرعة سجلات العميل بأكملها في الساعة 2 صباحًا وحصلت على أربعين دقيقة من الصمت بسبب مشاكلي؛ أدت إضافة --include='*.log' و-l إلى إنهاء التذكرة على الفور. يتم الآن إدخال عادات كود التضمين والخروج قبل ظهور النمط.
أسئلة شائعة
لماذا يقوم grep أحيانًا بطباعة "مطابقات الملفات الثنائية" بدلاً من السطر الخاص بي؟
بايت NUL بالقرب من المطابقة يجعل GNU grep يتعامل مع الملف على أنه ثنائي؛ أضف -a لفرض وضع النص أو -I لتخطي الثنائيات بالكامل، وهو الإعداد الافتراضي الصحيح في أدلة السجل المختلطة.
هل يجب علي استخدام ripgrep بدلاً من ذلك؟
ripgrep أسرع ويتخطى الملفات الثنائية والمخفية افتراضيًا، ولكن grep موجود في كل صندوق ستدخل إليه عبر SSH، بما في ذلك صور الإنقاذ. تعلم grep أولاً؛ الوصول إلى rg حيث يتم تثبيته.
كيف يمكنني البحث في السجلات المدوّرة والمضغوطة؟
يبحث zgrep في ملفات .gz بشفافية ويغطي zstdgrep دوران الضواغط الأحدث الذي تم التبديل إليه؛ عادة ما تعيش إبرة الأمس داخل واحدة منها، لذا تعتبر الأدوات بمثابة نظافة أساسية.
كيف يمكنني مطابقة كلمة ولكن ليس كلمة أطول تحتوي عليها؟
استخدم -w لمطابقة الكلمات بأكملها و-x لمطابقات الأسطر الكاملة؛ عندما تحتاج الأنماط إلى أجزاء من الكلمات، فإن فئات الأحرف مثل [Ss]erver توفر تحكمًا دقيقًا دون تسطيح حالة الأحرف في كل مكان آخر.
كيف تساعدك Kinetikatech في أوامر linux ومهارات shell
لا ينبغي أن تضطر إلى أن تصبح خبيرًا في أوامر linux ومهارات shell: الأوامر وعادات البرمجة النصية التي تحدد ما إذا كان المسؤول يشغل الخادم أم يحاربه: البحث عن النصوص والعمليات وتحويلها ونقلها والإشراف عليها باستخدام الأدوات الموجودة في كل تثبيت أساسي. ولهذا توجد أمن خوادم لينكس و إدارة الخوادم بالضبط: الإعداد والتحصين والمراقبة ومهندس مناوب ليلًا ونهارًا.