مقدمة عن أمر Find

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

نصيحة: يمكنك دمج عدة شروط معًا للحصول على نتائج أكثر دقة. استخدم العوامل المنطقية مثل -a (AND) و -o (OR) للربط بين الشروط.

بناء أمر Find

الصيغة الأساسية لأمر Find هي:

Terminal
find <مسار> <شروط> <إجراءات>
  • المسار: المساحة التي تريد البحث فيها (مثل: /, /home, .)
  • الشروط: المعايير التي تحدد ما تبحث عنه
  • الإجراءات: ما يجب فعله بالنتائج (افتراضيًا: عرضها)

شروط الوقت

البحث بناءً على وقت الوصول أو التعديل:

Terminal
# وقت الوصول (Access Time)
-atime 0           # تم الوصول إليه بين الآن وقبل 24 ساعة
-atime +0          # تم الوصول إليه منذ أكثر من 24 ساعة
-atime 1           # تم الوصول إليه بين 24 و 48 ساعة مضت
-atime +1          # تم الوصول إليه منذ أكثر من 48 ساعة
-atime -1          # تم الوصول إليه منذ أقل من 24 ساعة (مثل 0)

# وقت تغيير الحالة (Change Time)
-ctime -6h30m      # تغيرت حالة الملف خلال آخر 6 ساعات و 30 دقيقة

# وقت التعديل (Modification Time)
-mtime +1w         # تم التعديل منذ أكثر من أسبوع

شروط البحث الأساسية

أهم الشروط المستخدمة في البحث:

الأمر الوصف
-name "*.c" البحث عن الملفات التي تطابق النمط (حساس لحالة الأحرف)
-iname "*.txt" البحث عن الملفات التي تطابق النمط (غير حساس لحالة الأحرف)
-user jonathan البحث عن الملفات المملوكة لمستخدم معين
-nouser البحث عن الملفات التي لا يملكها أي مستخدم
-type f البحث عن الملفات العادية
-type d البحث عن المجلدات
-type l البحث عن الروابط الرمزية
-regex PATTERN البحث باستخدام التعبيرات النمطية

شروط الحجم

البحث بناءً على حجم الملف:

Terminal
# البحث بحجم الملف
-size 8            # بالضبط 8 كتلة (كل كتلة 512 بايت)
-size -128c        # أصغر من 128 بايت
-size 1440k        # بالضبط 1440 كيلوبايت
-size +10M         # أكبر من 10 ميجابايت
-size +2G          # أكبر من 2 جيجابايت
ملاحظة: وحدات القياس المستخدمة في أمر find:
  • c → بايت
  • k → كيلوبايت (1024 بايت)
  • M → ميجابايت (1048576 بايت)
  • G → جيجابايت (1073741824 بايت)

شروط المقارنة

مقارنة الملفات بناءً على وقت التعديل:

Terminal
# المقارنة مع ملف مرجعي
-newer file.txt           # تم تعديله بعد file.txt
-newerm file.txt          # تم تعديله بعد file.txt (مرادف لـ -newer)
-newerB file.txt          # تم إنشاؤه بعد file.txt
-newerC file.txt          # تغيرت صلاحياته بعد file.txt

# المقارنة مع وقت محدد
-newermt "1 hour ago"     # تم تعديله خلال الساعة الماضية
-newermt "2023-01-01"     # تم تعديله بعد تاريخ محدد

إجراءات Find

بعد العثور على الملفات، يمكنك تنفيذ إجراءات عليها:

الإجراء الوصف
-print عرض أسماء الملفات (الإفتراضي)
-ls عرض النتائج بتنسيق مفصل类似 ls -l
-delete حذف الملفات التي تطابق الشروط
-exec command {} ; تنفيذ أمر على كل ملف
-ok command {} ; مثل -exec ولكن يطلب تأكيد لكل ملف
مثال على استخدام -exec
Terminal
# حذف جميع الملفات المؤقتة القديمة
find /tmp -name "*.tmp" -mtime +30 -exec rm -f {} \;

# تغيير مالك مجموعة من الملفات
find /var/www -user olduser -exec chown newuser:newgroup {} \;

# البحث عن ملفات PHP تحتوي على كلمة معينة
find . -name "*.php" -exec grep -l "password" {} \;

أمثلة عملية

مثال: البحث عن ملف بمواصفات محددة

ابحث عن ملف حيث:

  • مملوك للمستخدم bandit7
  • مملوك للمجموعة bandit6
  • حجمه 33 بايت
Terminal
find / -user bandit7 -group bandit6 -size 33c
مثال: البحث عن ملفات كبيرة الحجم

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

Terminal
find /home -size +100M -ls
مثال: البحث عن ملفات معدلة حديثاً

ابحث عن الملفات التي تم تعديلها خلال آخر 24 ساعة:

Terminal
find /var/log -mtime -1 -name "*.log"
مثال: البحث عن ملفات بتنفيذ أوامر متعددة

ابحث عن ملفات الصور وانسخها إلى مجلد backup:

Terminal
find ~ -name "*.jpg" -o -name "*.png" -exec cp {} /backup/ \;

نصائح متقدمة

تحسين الأداء: عند البحث في مساحات كبيرة، استخدم -xdev للحد من البحث داخل نظام ملفات واحد فقط، مما يسرع عملية البحث.
كن حذراً مع الصلاحيات: عند البحث في مسارات نظامية، قد تحتاج إلى استخدام sudo للوصول إلى بعض الملفات والمجلدات.
البحث باستخدام التعبيرات النمطية: يمكنك استخدام -regex بدلاً من -name للبحث بأنماط أكثر تعقيداً باستخدام التعبيرات النمطية.