البحث المتقدم في النظام باستخدام (find, locate, grep)


أهلاً يا شباب! اليوم راح ندخل في عمق البحث عن الملفات والمحتوى في أنظمة Linux. أدواتنا الأساسية هي find، locate، و grep. كل وحدة لها استخدامها الخاص وتكمل الثانية.

1. الأمر find: المفتش الدقيق

الأمر find هو أداة قوية جداً للبحث عن الملفات والدلائل بناءً على معايير مختلفة. يبحث في الوقت الفعلي.

البحث بالاسم أو النمط:

للبحث عن ملف اسمه my_file.txt في الدليل الحالي وما تحته:

find . -name "my_file.txt"

للبحث عن جميع ملفات .log:

find /var/log -name "*.log"

إذا كنت تبغى تتجاهل حالة الأحرف (capital/small letters)، استخدم -iname:

find /etc -iname "hosts"

البحث حسب النوع:

ممكن تحدد نوع العنصر اللي تبحث عنه:

  • f-: ملف عادي
  • d-: دليل (مجلد)
  • l-: رابط رمزي (symlink)

مثلاً، للبحث عن كل الدلائل في /home:

find /home -type d

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

find . -type f

البحث حسب الحجم:

تقدر تبحث عن الملفات اللي حجمها أكبر أو أصغر من حجم معين:

  • c-: بايت (bytes)
  • k-: كيلوبايت (kilobytes)
  • M-: ميغابايت (megabytes)
  • G-: جيغابايت (gigabytes)

للبحث عن ملفات أكبر من 100 ميغابايت في /var:

find /var -type f -size +100M

للبحث عن ملفات أصغر من 1 كيلوبايت:

find . -type f -size -1k

البحث حسب الوقت:

ممكن تبحث بناءً على وقت التعديل، الوصول، أو التغيير:

  • -mtime n: الملفات التي تم تعديلها قبل n يوم.
  • -mmin n: الملفات التي تم تعديلها قبل n دقيقة.
  • -atime n: الملفات التي تم الوصول إليها قبل n يوم.
  • -amin n: الملفات التي تم الوصول إليها قبل n دقيقة.
  • +n: أكثر من n.
  • -n: أقل من n.

مثلاً، ملفات تم تعديلها خلال الـ 7 أيام الماضية:

find . -type f -mtime -7

ملفات لم يتم الوصول إليها لأكثر من 30 يوم:

find /home -type f -atime +30

تنفيذ الأوامر على النتائج:

هذي ميزة قوية جداً! تقدر تنفذ أمر على كل ملف يعثر عليه find.

لحدف كل ملفات .tmp اللي لقيتها:

find . -name "*.tmp" -delete

أو باستخدام -exec (تذكر \; في النهاية):

find . -name "*.bak" -exec rm {} \;

هنا {} يمثل اسم الملف اللي لقاه find.

ملاحظة: كن حذراً جداً عند استخدام -delete أو -exec مع أوامر مثل rm، تأكد دائماً من البحث أولاً بدونها لتتأكد من النتائج الصحيحة.

2. الأمر locate: البحث السريع كالسهم

الأمر locate أسرع بكثير من find لأنه ما يبحث في النظام مباشرة، بل يبحث في قاعدة بيانات يتم تحديثها بشكل دوري. هذا يعني إنه ممكن ما يلقى الملفات الجديدة جداً.

تحديث قاعدة البيانات:

عشان تتأكد إن قاعدة البيانات حديثة، شغل الأمر التالي (تحتاج صلاحيات الجذر):

sudo updatedb

الاستخدام الأساسي:

للبحث عن أي ملف أو دليل يحتوي على كلمة config:

locate config

للبحث عن ملفات .conf فقط:

locate "*.conf"

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

ملاحظة: locate يبحث عن أي جزء من الاسم، يعني لو بحثت عن test ممكن يلقى my_test_file.txt و test_dir/.

3. الأمر grep: المفتش داخل المحتوى

إذا كنت تبغى تبحث داخل محتوى الملفات نفسها، grep هو صديقك. هو يبحث عن أنماط نصية (strings or regular expressions) داخل الملفات.

البحث الأساسي:

للبحث عن كلمة error في ملف syslog:

grep "error" /var/log/syslog

البحث المتكرر (Recursive):

للبحث عن كلمة password في كل الملفات داخل دليل /etc وما تحته:

grep -r "password" /etc

تجاهل حالة الأحرف:

استخدم -i عشان تتجاهل حالة الأحرف (case-insensitive):

grep -i "warning" /var/log/messages

عرض أرقام الأسطر:

إذا تبغى تشوف رقم السطر اللي لقيت فيه الكلمة، استخدم -n:

grep -n "fail" /var/log/auth.log

عكس النتائج (Invert Match):

لإظهار الأسطر التي لا تحتوي على النمط، استخدم -v:

grep -v "#" /etc/apache2/apache2.conf

هذا بيوريك الأسطر اللي مو تعليقات في ملف إعدادات Apache.

العد (Count):

لعد عدد مرات ظهور النمط في الملف، استخدم -c:

grep -c "GET" /var/log/apache2/access.log

التعابير النمطية (Regular Expressions):

grep يدعم التعابير النمطية بشكل كامل، وهذي قوة رهيبة للبحث عن أنماط معقدة. مثلاً، للبحث عن أرقام IP (بشكل مبسط):

grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" /var/log/apache2/access.log

الخيار -E يفعّل التعابير النمطية الموسعة (Extended Regular Expressions).

ملاحظة: ممكن تجمع بين find و grep! مثلاً، عشان تلقى كل ملفات .conf اللي تحتوي على كلمة port:

find /etc -name "*.conf" -exec grep -l "port" {} \;

الخيار -l في grep يعرض فقط أسماء الملفات التي تحتوي على النمط، بدون عرض الأسطر المطابقة.

خاتمة

بكدا نكون غطينا أساسيات وأكثر شوي في استخدام find، locate، و grep. هذي الأوامر هي العمود الفقري لأي مهندس أنظمة Linux محترف. تدرب عليها وراح تشوف كيف بتسهل عليك الشغل كثير!