Updatedb Command

1) ما هو updatedb ولماذا نستخدمه؟

أمر updatedb وظيفته: تحديث قاعدة بيانات locate.

  • locate يبحث بسرعة لأنه يعتمد على قاعدة بيانات جاهزة لمسارات الملفات.
  • هذه القاعدة لا تتحدث تلقائيًا كل لحظة، لذلك نستخدم:
updatedb
Bash

لكي يقوم بمسح الملفات/المجلدات ويحدّث قاعدة البيانات.

✅ النتيجة: بعد updatedb يصبح locate يرى الملفات الجديدة/التغييرات بشكل أدق.

2) متى أحتاج تشغيل updatedb؟
  • عندما تنشئ ملفًا جديدًا وتكتب: locate myfile.txt ولا يظهر.
  • عندما تنقل ملفات كثيرة أو تحذف ملفات وتريد locate يعكس الوضع الجديد.
  • في بيئات تدريب/حاويات (Docker) قد تكون قاعدة locate غير محدثة.
3) الصيغة العامة (Syntax)

عادةً يستخدم بدون خيارات:

sudo updatedb
Bash

غالبًا تحتاج sudo ليقدر يفهرس مسارات النظام (مثل /etc و /var…).

4) مثال عملي خطوة بخطوة (أهم جزء)
1) أنشئ ملف جديد
cd ~/project
touch my_new_file.txt
Bash
2) جرّب locate (قد لا يظهر)
locate my_new_file.txt
Bash
3) حدّث قاعدة البيانات
sudo updatedb
Bash
4) جرّب locate مرة ثانية
locate my_new_file.txt
Bash

الآن غالبًا سيظهر المسار الكامل مثل:

/home/youruser/project/my_new_file.txt
Bash
5) ماذا يحدث أثناء تنفيذ updatedb؟
  • يقوم بمسح (scan) أجزاء النظام (حسب إعداداته)
  • ثم يكتب النتائج في ملف قاعدة بيانات (مثلًا غالبًا في: /var/lib/mlocate/mlocate.db على mlocate)

قد ترى رسائل “Scanning …” حسب النظام، أو قد يعمل بصمت.

6) أهم الخيارات/الإعدادات التي يجب أن تعرفها (للفهم)
أ) أين يتم تحديد “ماذا يفهرس” وماذا يستبعد؟

في أنظمة كثيرة (mlocate) الإعدادات تكون في:

/etc/updatedb.conf
Bash

لرؤيتها:

cat /etc/updatedb.conf
Bash

ستجد أشياء مثل:

  • PRUNEPATHS: مسارات يتم تجاهلها (مثل /proc, /sys, /tmp…)
  • PRUNEFS: أنواع أنظمة ملفات يتم تجاهلها
  • PRUNENAMES: أسماء ملفات/مجلدات يتم تجاهلها

هذه تُستخدم لتسريع الفهرسة وتجنب مسارات “وهمية” مثل /proc.

7) تشغيل updatedb بدون “إغراق الشاشة”

إذا ظهرت رسائل كثيرة وكنت تريد تشغيله بصمت:

sudo updatedb >/dev/null 2>&1
Bash
8) أفضل ممارسات (مهم للمبتدئ)
  • لا تشغّل updatedb كثيرًا بدون سبب، لأنّه قد يكون ثقيل على أجهزة ضعيفة/سيرفرات.
  • إذا كنت تريد بحث “فوري” عن ملف جديد بدون تحديث قاعدة البيانات:
    استخدم find بدل locate.

مثال:

find ~/project -name "my_new_file.txt"
Bash
9) تدريب سريع (Practice)

نفّذ هذا التدريب:

cd ~/project
mkdir -p updatedb_practice
touch updatedb_practice/a.txt updatedb_practice/b.txt

# 1) ابحث قبل التحديث (قد لا يظهر)
locate updatedb_practice/a.txt

# 2) حدّث القاعدة
sudo updatedb

# 3) ابحث بعد التحديث
locate updatedb_practice/a.txt
locate -n 5 "updatedb_practice"
Bash
10) أخطاء شائعة وحلول
أ) locate لا يجد شيء بعد updatedb
  • تأكد أن mlocate مثبت:
locate --version
Bash
  • تأكد أنك استخدمت sudo:
sudo updatedb
Bash
  • تأكد أن مسارك ليس ضمن المسارات المستثناة في:
cat /etc/updatedb.conf
Bash
ب) Permission denied أو مشاكل صلاحيات

استخدم sudo updatedb غالبًا يحلها.

هل الشرح الأصلي كافي؟

نعم ممتاز كمحتوى، لكن الإضافات الضرورية للمبتدئ كانت:

  • ربط عملي واضح: “أنشئ ملف → locate لا يراه → updatedb → locate يراه”
  • مكان الإعدادات /etc/updatedb.conf ولماذا يتم استبعاد /proc و /sys
  • متى تستخدم find بدل locate لو تريد نتائج فورية