كيفية استخدام أمرَي find و locate للبحث عن الملفات على نظام Linux
يُعتبر نظام Linux من أكثر أنظمة التشغيل انتشارًا واستخدامًا في مجال الخوادم، والبرمجة، وإدارة الشبكات، وغيرها من المجالات التقنية. ومن بين الأدوات الأساسية التي يحتاجها المستخدمون والمهندسون لإدارة الملفات والبحث عنها هي أوامر البحث. في هذا المقال سنتناول بالتفصيل أمرَي find و locate، وهما من أشهر الأدوات المتاحة على Linux للبحث عن الملفات والمجلدات، مع شرح كامل لكيفية استخدام كل منهما، والفرق بينهما، وأمثلة تطبيقية توضح الاستخدامات المتقدمة.
مقدمة عن البحث عن الملفات في Linux
البحث عن الملفات والمجلدات هو أحد المهام الأساسية التي تُنجز بشكل يومي في بيئة نظام Linux. قد يحتاج المستخدم إلى إيجاد ملف معين عبر نظام ملفات معقد يمتد عبر مئات الآلاف من الملفات، أو البحث حسب تاريخ التعديل، أو الحجم، أو نوع الملف، أو حتى بناءً على محتوى داخل الملف.
نظام Linux يوفر عدة أدوات للبحث، من بينها أمرَي find و locate، اللذان يقدمان إمكانيات مميزة تساعد المستخدمين على تحديد مواقع الملفات بسرعة وفعالية. وعلى الرغم من أن كلا الأمرين يخدمان هدفًا مشتركًا، إلا أن طريقة عمل كل منهما مختلفة تمامًا، وهذا ما يجعل من الضروري فهم خصائص كل منهما.
أمر find: بحث ديناميكي ومرن
ما هو أمر find؟
أمر find هو أداة بحث ديناميكية تقوم بفحص نظام الملفات مباشرة في الوقت الفعلي (real-time)، حيث يبحث في الملفات والمجلدات من نقطة انطلاق يحددها المستخدم في شجرة النظام. يمكنه البحث وفق شروط متعددة مثل اسم الملف، النوع، الحجم، الوقت، الأذونات، والمالك، وغيرها.
يتميز أمر find بأنه لا يعتمد على قاعدة بيانات أو فهرس مسبق، بل يقوم بفحص نظام الملفات بشكل مباشر، ما يجعله مفيدًا للبحث عن الملفات التي تم إنشاؤها أو تعديلها مؤخرًا والتي قد لا تكون موجودة في قاعدة بيانات محدثة.
البنية الأساسية لأمر find
الشكل العام لأمر find هو كالتالي:
bashfind [نقطة_الانطلاق] [خيارات البحث] [إجراءات]
-
نقطة الانطلاق (Path): المسار الذي يبدأ منه البحث، مثل
/home/userأو/للبحث في كامل النظام. -
خيارات البحث: شروط أو معايير تحدد نوع الملفات المراد البحث عنها.
-
الإجراءات: الأوامر التي تُنفذ على الملفات التي يطابقها البحث، مثل عرضها أو حذفها.
أمثلة شائعة على استخدام find
البحث عن ملف حسب الاسم
bashfind /home/user -name "document.txt"
يبحث هذا الأمر عن ملف اسمه document.txt داخل مجلد المستخدم /home/user وكل المجلدات الفرعية.
البحث عن ملفات حسب الامتداد
bashfind /var/log -name "*.log"
يبحث عن كل الملفات التي تنتهي بالامتداد .log في مجلد /var/log.
البحث عن ملفات حسب النوع
bashfind /tmp -type d
يعرض كل المجلدات (directories) داخل /tmp. حيث أن -type d تعني البحث عن مجلدات.
البحث عن ملفات أكبر من حجم معين
bashfind /home -size +100M
يبحث في /home عن الملفات التي حجمها أكبر من 100 ميجابايت.
البحث عن ملفات معدلة خلال فترة معينة
bashfind /etc -mtime -7
يبحث عن الملفات التي تم تعديلها خلال آخر 7 أيام.
استخدام find مع الإجراءات
حذف ملفات
bashfind /tmp -name "*.tmp" -type f -delete
يحذف كل الملفات التي تنتهي بـ .tmp داخل مجلد /tmp.
تنفيذ أوامر على الملفات
يمكن تنفيذ أوامر مثل chmod أو chown على الملفات التي يعثر عليها find باستخدام الخيار -exec:
bashfind /var/www -type f -name "*.php" -exec chmod 644 {} \;
يقوم هذا الأمر بتغيير صلاحيات كل ملفات PHP داخل /var/www إلى 644.
خيارات متقدمة مع find
-
-user: البحث عن الملفات التي يملكها مستخدم معين.
bashfind /home -user username
-
-group: البحث عن الملفات التابعة لمجموعة معينة.
-
-perm: البحث عن الملفات التي لها أذونات محددة.
bashfind / -perm 644
-
-empty: العثور على الملفات أو المجلدات الفارغة.
-
-iname: البحث عن اسم ملف غير حساس لحالة الحروف.
bashfind /home -iname "Document.TXT"
أمر locate: بحث سريع باستخدام قاعدة بيانات
ما هو أمر locate؟
على عكس find، يعتمد أمر locate على قاعدة بيانات مسبقة تحتوي على مسارات الملفات على النظام. هذه القاعدة يتم تحديثها عادةً تلقائيًا من خلال خدمة تدعى updatedb، والتي تقوم بفهرسة ملفات النظام على فترات منتظمة.
الميزة الأساسية لـ locate هي السرعة الكبيرة في البحث مقارنة بـ find، لأنه لا يقوم بفحص نظام الملفات بشكل مباشر، بل يبحث في قاعدة بيانات جاهزة، ما يجعله مناسبًا للبحث السريع عن الملفات التي تم فهرستها.
كيفية تحديث قاعدة بيانات locate
قاعدة بيانات locate لا تُحدث تلقائيًا عند كل عملية حفظ أو تعديل ملف. لذلك، قد تحتاج إلى تحديثها يدويًا باستخدام الأمر:
bashsudo updatedb
هذا الأمر يقوم بإنشاء أو تحديث قاعدة بيانات الملفات المستخدمة بواسطة locate.
البنية الأساسية لأمر locate
bashlocate [خيارات] كلمة_البحث
-
كلمة البحث: اسم أو جزء من اسم الملف المراد البحث عنه.
-
خيارات: محددات إضافية للتحكم في النتائج، مثل عرض عدد معين من النتائج أو البحث في قاعدة بيانات مخصصة.
أمثلة على استخدام locate
البحث عن ملف حسب الاسم
bashlocate document.txt
يعرض كل الملفات التي تحتوي في مسارها أو اسمها على document.txt.
البحث باستخدام تعبير عادي (regex)
bashlocate --regex ".*\.conf$"
يعرض كل الملفات التي تنتهي بالامتداد .conf.
عرض عدد محدد من النتائج
bashlocate -n 20 sshd_config
يعرض أول 20 نتيجة فقط لملفات تحتوي على sshd_config.
مزايا وعيوب locate مقارنة بـ find
| الخاصية | find | locate |
|---|---|---|
| السرعة | بطيء (يفحص النظام مباشرة) | سريع (يبحث في قاعدة بيانات) |
| دقة النتائج | دقيقة (يبحث عن الملفات الحقيقية) | قديمة (تعتمد على آخر تحديث) |
| شروط البحث | معقدة ومرنة جداً | محدودة (بحث نصي بسيط) |
| قابلية البحث | بحث دقيق حسب التاريخ، الحجم، … | بحث سريع حسب الاسم فقط |
| تحديث قاعدة البيانات | لا يحتاج لتحديث | يحتاج لتحديث دوري بواسطة updatedb |
مقارنة تفصيلية بين find و locate
الجدول التالي يوضح الفرق بين الأوامر:
| المعامل | find | locate |
|---|---|---|
| آلية البحث | البحث في الوقت الحقيقي (real-time) | البحث في قاعدة بيانات مسبقة |
| سرعة التنفيذ | بطيء نسبيًا | سريع جدًا |
| تحديث البيانات | ليس مطلوبًا | يتطلب تحديث دوري (updatedb) |
| شروط البحث | دعم معايير متعددة ومتقدمة | بحث نصي مبسط |
| التخصيص في النتائج | عالي جدًا | محدود |
| إمكانية تنفيذ أوامر | يدعم تنفيذ أوامر مع الملفات | لا يدعم تنفيذ أوامر بعد البحث |
| استهلاك الموارد | مرتفع نسبيًا | منخفض جدًا |
| دقة النتائج | دقيقة ومباشرة | قد تكون غير دقيقة (إن لم يتم التحديث) |
كيفية اختيار الأداة المناسبة
-
إذا كان البحث عن ملف جديد تم إنشاؤه مؤخرًا أو لم يتم تحديث قاعدة بيانات locate بعد، يُفضل استخدام find.
-
عند الحاجة إلى البحث السريع عن ملفات معروفة وموجودة في قاعدة البيانات، يكون locate هو الخيار الأنسب.
-
في حالة الحاجة لتحديد ملفات بناءً على معايير متعددة (مثل الوقت، الحجم، النوع، الأذونات)، لا بد من استخدام find لأنه يقدم مرونة أكبر.
-
لاستخدام locate بكفاءة، يفضل تحديث قاعدة البيانات بشكل دوري باستخدام
updatedbلضمان نتائج حديثة ودقيقة.
نصائح عملية متقدمة لاستخدام find و locate
تحسين أداء find
-
تقييد نقطة الانطلاق إلى مجلد معين يقلل وقت البحث:
bashfind /var/log -name "*.log"
-
استخدام الخيارات المدمجة للبحث يقلل من عدد الملفات الممسوحة:
bashfind /home -type f -name "*.txt" -size +1M
استخدام locate مع تحديث مخصص
-
يمكن تخصيص تحديث قاعدة بيانات locate ليشمل أو يستثني مسارات معينة لتقليل حجم القاعدة وتحسين الأداء.
-
استخدام خيار
--databaseلتحديد قاعدة بيانات خاصة:
bashlocate --database /path/to/custom.db filename
استعراض بعض الحالات العملية
1. البحث عن ملفات السجلات القديمة
باستخدام find يمكن البحث عن ملفات السجلات التي لم يتم تعديلها خلال فترة طويلة:
bashfind /var/log -name "*.log" -mtime +30
يعني البحث عن ملفات .log لم يتم تعديلها لأكثر من 30 يومًا.
2. تنظيف ملفات مؤقتة
باستخدام find مع الحذف التلقائي:
bashfind /tmp -type f -name "*.tmp" -delete
يحذف الملفات المؤقتة التي تنتهي بـ .tmp في مجلد /tmp.
3. البحث السريع عن ملف تكوين
باستخدام locate:
bashlocate sshd_config
يعرض المسارات التي تحتوي على ملف التكوين sshd_config.
الخلاصة
يعد كل من أمرَي find و locate من الأدوات القوية في بيئة Linux للبحث عن الملفات، لكنهما يختلفان جوهريًا في آلية العمل والسرعة والمرونة.
-
find يتميز بالمرونة والدقة العالية حيث يبحث في الوقت الفعلي ويدعم معايير بحث معقدة وتنفيذ إجراءات على الملفات.
-
locate يوفر سرعة فائقة بفضل استخدام قاعدة بيانات محدثة بشكل دوري لكنه يعتمد على تحديثها ليعطي نتائج دقيقة.
من المهم إتقان استخدام كلا الأداتين واختيار الأنسب حسب نوع المهمة، فالبحث في نظام Linux هو من أساسيات إدارة النظام، والمهارة في استخدام هذه الأدوات توفر الوقت والجهد وتحسن من تجربة المستخدم بشكل كبير.

