أهلاً يا شباب! اليوم راح ندخل في عمق البحث عن الملفات والمحتوى في أنظمة 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 محترف. تدرب عليها وراح تشوف كيف بتسهل عليك الشغل كثير!