Locate Command

1) ما هو أمر locate ولماذا نستخدمه؟

أمر locate يبحث عن الملفات/المجلدات بسرعة كبيرة لأنه لا يمشي على القرص لحظة البحث مثل find، بل يعتمد على قاعدة بيانات جاهزة (database) تحتوي مسارات الملفات.

متى يكون ممتاز؟

  • عندما تريد “تبحث بسرعة” عن اسم ملف في النظام
  • عندما تكون مساحة البحث كبيرة جدًا (مثل /)

متى لا يكون مناسب؟

  • إذا كنت تحتاج نتائج “لحظية” مباشرة بعد إنشاء ملف جديد (لأن قاعدة البيانات قد لا تكون محدثة)
  • إذا تريد شروط متقدمة جدًا (صلاحيات/حجم/تاريخ بدقة) → find أقوى
2) تثبيت locate (على Ubuntu / Linux Mint)

في كثير الأنظمة يأتي مع حزمة mlocate أو بديلها (مثل plocate في بعض التوزيعات). في Ubuntu غالبًا:

sudo apt update
sudo apt install -y mlocate
Bash

تحقق:

locate --version
Bash
3) أهم شيء لازم تعرفه: تحديث قاعدة البيانات

locate يعتمد على قاعدة بيانات، لذلك قد لا يرى الملفات الجديدة إلا بعد تحديثها.

تحديث يدوي
sudo updatedb
Bash

بدون sudo قد لا يملك صلاحية فهرسة كل النظام.

4) الصيغة العامة (Syntax)
locate [OPTIONS] PATTERN
Bash
  • PATTERN قد يكون اسم ملف مثل passwd
  • أو جزء من المسار مثل ssh_config
  • أو pattern يحتوي نجمة *
5) أمثلة عملية بسيطة
أ) ابحث عن ملف باسم محدد
locate example.txt
Bash
ب) ابحث عن أي شيء يحتوي كلمة “ssh”
locate ssh
Bash

سيُرجع كل المسارات التي تحتوي “ssh” داخلها.

6) أمثلة عملية مع ملفات تنشئها أنت

أنشئ ملف ومجلد:

cd ~/project
mkdir -p sample_dir
touch sample_file.txt
Bash

الآن غالبًا لن يظهر فورًا في locate إذا قاعدة البيانات قديمة. حدّثها:

sudo updatedb
Bash

ثم ابحث:

locate sample_file.txt
locate sample_dir
Bash
7) استخدام Wildcards مع locate
أ) كل شيء يبدأ بـ sample
locate "sample*"
Bash
ب) كل شيء ينتهي بـ .txt
locate "*.txt"
Bash

الأفضل تضع pattern بين اقتباس " " حتى لا يفسره الـ shell قبل locate.

8) أهم الخيارات المفيدة
أ) بحث بدون حساسية أحرف: -i
locate -i "Sample*"
Bash
ب) تحديد عدد النتائج: -n
locate -n 20 "*.conf"
Bash
ج) عرض عدد النتائج فقط: -c
locate -c "python"
Bash
د) البحث عن “اسم ملف” فقط وليس مسار كامل (basename): -b

مثلًا إذا تريد فقط الملفات اسمها hosts (حتى لو كانت في مسارات مختلفة):

locate -b "\hosts"
Bash

\hosts هنا معناها: الاسم ينتهي بـ hosts (بعض الأنظمة تحتاج الهروب بهذا الشكل).

9) فرق سريع بين locate و find (مهم للمبتدئ)
  • locate: سريع جدًا ✅ لكنه يعتمد على قاعدة بيانات وقد يكون غير محدث
  • find: أبطأ ❗ لكنه يبحث “فعليًا” الآن ويدعم شروط كثيرة (حجم/وقت/صلاحيات/exec…)

مثال:

  • تريد ملف “اسمه” بسرعة → locate
  • تريد ملفات .log أكبر من 100MB داخل /var/log الآن → find
10) أخطاء ومشاكل شائعة
أ) “locate” لا يجد ملف أنشأته للتو

الحل:

sudo updatedb
Bash
ب) النتائج كثيرة جدًا

استخدم:

locate -n 50 "pattern"
Bash

أو فلترة بمتابعة مثل grep:

locate "ssh" | grep "/etc/"
Bash
11) تدريب سريع (Practice)

نفّذ التالي:

cd ~/project
mkdir -p locate_practice
touch locate_practice/hello.txt locate_practice/HELLO.TXT

# تحديث قاعدة البيانات
sudo updatedb

# 1) بحث عادي
locate hello.txt

# 2) بحث بدون حساسية أحرف
locate -i "hello.txt"

# 3) عدد النتائج
locate -c "hello"

# 4) أول 10 نتائج فقط
locate -n 10 "*.txt"
Bash
هل الشرح الأصلي كافي؟

نعم كبداية ممتاز، وأهم إضافتين للمبتدئ كانت:

  • التأكيد على sudo updatedb لأن بدونها قد تظن أن locate “لا يعمل”
  • خيارات عملية جدًا مثل -n و -c لتقليل النتائج وفهم حجمها بسرعة