ديف أوبس

استخدام rg في لينكس

يُعتبر أمر rg (اختصار لـ ripgrep) واحدًا من أكثر الأدوات فاعلية وحداثة في عالم البحث النصي داخل أنظمة التشغيل لينكس ويونكس. يُنظر إليه على نطاق واسع كبديل متفوق لأمر grep الشهير، إذ يجمع بين السرعة الفائقة، والمرونة الكبيرة، والدقة العالية. يعتمده المطورون ومسؤولو الأنظمة على حد سواء في مشاريعهم اليومية، خصوصًا في التعامل مع مستودعات ضخمة من الشيفرة المصدرية أو الملفات النصية. هذا المقال يقدم شرحًا شاملًا وعميقًا لأمر rg، مع إبراز نقاط قوته، كيفية استخدامه، المقارنة مع grep، واستراتيجيات متقدمة للاستفادة القصوى منه.


ما هو ripgrep (rg)؟

ripgrep هو أداة سطر أوامر مفتوحة المصدر تم تطويرها بلغة Rust، وتتميز بأنها تقوم بالبحث في الملفات النصية باستخدام تعبيرات نمطية (Regular Expressions) مع أداء أسرع بكثير من grep أو ack أو ag في معظم السيناريوهات.

تم تصميم rg ليكون سهل الاستخدام، ذكيًا في اكتشاف أنواع الملفات، ويتجاهل الملفات والمجلدات التي لا يجب البحث فيها (مثل تلك الموجودة في .gitignore).


الفرق بين grep و rg

الخاصية grep ripgrep (rg)
السرعة أبطأ في البحث عبر مجلدات ضخمة أسرع بكثير
الاستثناءات يتطلب إعدادات يدوية يتجاهل ملفات .gitignore تلقائيًا
دعم UTF-8 محدود في الإصدارات القديمة دعم كامل
التعبيرات النمطية نعم نعم
دعم الألوان متاح متاح بشكل افتراضي
التثبيت مثبت مسبقًا عادة يحتاج إلى تثبيت يدوي

كيفية تثبيت ripgrep في لينكس

على توزيعات Debian/Ubuntu:

bash
sudo apt update sudo apt install ripgrep

على توزيعات Arch Linux:

bash
sudo pacman -S ripgrep

على Fedora:

bash
sudo dnf install ripgrep

عبر Snap:

bash
sudo snap install ripgrep

بعد التثبيت، يتم استخدام الأمر rg مباشرة في سطر الأوامر.


استخدامات أساسية لأمر rg

البحث عن كلمة داخل الملفات

bash
rg "كلمة"

يعرض هذا الأمر كل الأسطر التي تحتوي على الكلمة في الملفات داخل المجلد الحالي وما تحته.

البحث في نوع ملفات محدد

bash
rg "mysql_connect" --type php

يبحث هذا المثال عن عبارة “mysql_connect” داخل ملفات PHP فقط.

البحث باستخدام نمط (Regex)

bash
rg "user\_\d+"

يُظهر هذا المثال كل الأسطر التي تحتوي على أسماء مستخدمين مثل user_1, user_23 وهكذا.

تجاهل ملفات معينة

bash
rg "api_key" --glob "!config/*.env"

هذا المثال يبحث عن كلمة “api_key” مع استثناء الملفات التي تنتهي بـ .env داخل مجلد config.


ميزات متقدمة في rg

تحديد عدد الأسطر قبل وبعد النتيجة

bash
rg "خطأ" -C 3

يُظهر ثلاث أسطر قبل وبعد كل نتيجة.

البحث في ملفات مخفية

bash
rg "سر" --hidden

افتراضيًا، لا يبحث rg في الملفات المخفية، ويجب استخدام --hidden لتضمينها.

البحث ضمن الملفات الثنائية (binary)

bash
rg --text "PDF"

بعض الملفات الثنائية يتم تجاهلها تلقائيًا. باستخدام --text يمكن تضمينها.

عرض عدد النتائج فقط

bash
rg -c "class"

يعرض عدد المرات التي ظهرت فيها الكلمة في كل ملف على حدة.


استخدام ملفات الإعدادات

يدعم rg استخدام ملف إعدادات لتحديد الخيارات الافتراضية عند كل استخدام. يمكن إنشاء ملف في المسار التالي:

bash
~/.ripgreprc

مثال على محتوى الملف:

diff
--hidden --ignore-case --glob=!.git --colors=line:style:bold

التكامل مع أدوات أخرى

التكامل مع Vim و Neovim

يمكن استخدام ripgrep مع Vim عبر المكون الإضافي fzf.vim:

vim
:Rg كلمة_البحث

التكامل مع VS Code

يدعم محرر Visual Studio Code استخدام ripgrep تلقائيًا في واجهة البحث الخاصة به، مما يوفر أداء عاليًا في المشاريع الكبيرة.


مقارنة الأداء مع أدوات أخرى

قامت اختبارات الأداء التالية بمقارنة rg مع grep و ag و ack:

الأداة الوقت المستغرق للبحث في مشروع يحتوي على 50,000 ملف
grep 12 ثانية
ack 7 ثوانٍ
ag 5 ثوانٍ
rg 1.2 ثانية

هذا يثبت تفوق ripgrep في الأداء، خاصةً في المشاريع الكبيرة والمعقدة.


أمثلة عملية في البيئات البرمجية

البحث عن استدعاءات دالة في مشروع جافاسكريبت:

bash
rg "fetch\("

البحث عن أخطاء أو استثناءات في ملفات اللوج:

bash
rg "Exception|Error" /var/log/

استخراج الإيميلات من ملف نصي:

bash
rg -o "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-z]{2,}"

فوائد أمنية واحترافية

  • البحث الآمن: rg يتجنب بشكل افتراضي البحث في الملفات الثنائية الحساسة.

  • إخفاء النتائج الخاصة: باستخدام --glob يمكن إخفاء ملفات كلمات المرور أو التكوين.

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


حالات استخدام مثالية

السيناريو استخدام rg المناسب
البحث عن كلمة في مشروع كبير rg "كلمة"
استثناء ملفات معينة rg "token" --glob "!.env"
استخدام في CI/CD إدماج rg في سكربتات لفحص الشيفرة تلقائيًا
تصفية مخرجات بحث `rg “TODO”

الخلاصة

يمثل ripgrep نقلة نوعية في أدوات البحث النصي على نظام لينكس، حيث يجمع بين سهولة الاستخدام وقوة الأداء. ومع الدعم الواسع للتخصيص والتكامل مع بيئات التطوير، فإنه يُعد أداة لا غنى عنها في ترسانة أي مطور أو مدير نظام. استخدامه يعزز من الإنتاجية ويقلل الوقت المستغرق في البحث عن المعلومات داخل الملفات، كما يساعد في تحسين أمان الشيفرة وتنظيم العمليات التطويرية.


المراجع:

  1. المستودع الرسمي لأداة ripgrep على GitHub

  2. دليل ripgrep الرسمي

  3. مقارنة أداء ripgrep مقابل grep و ag – من موقع The Silver Searcher

  4. وثائق Arch Linux الرسمية حول ripgrep