بسم الله الرحمن الرحيم، الحمد لله الذي علم بالقلم، علم الإنسان مالم يعلم والصلاة والسلام على خير معلم الناس الخير محمد أما بعد:

مقدمة:

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

الطريقة النحوية لكتابة الأمر find:

find [options] [paths] [expression]

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

  • -name: يستخدم للبحث عن الاسم وهو حساس لحالة الأحرف كما يقال Case sensitivity أي عندما تبحث عن كلمة Main.py هي ليست مطابقة لـ main.py.
  • -iname: يستخدم للبحث عن الاسم أيضاًَ وهو مشابه لما سبق مع تجاهل حالة الأحرف، فعندما تبحث عن كلمة MAin.PY سيطابق اسم الملف main.py و … إلخ.
  • ملاحظة: بإمكاننا استخدام * في أي مكان من موقع الكلمة.

استخدام المعاملات المنطقية:

  • -not: تعبر عن المعامل المنطقي NOT بإمكاننا استخدام -not أو ! عندما تريد العثور على كل الملفّات الّتي لا تُوافق نمطًا Pattern مُحدّدًا، في حال استخدام ! يجب تخليصها Escape حتى لا يحاول سطر الأمر تفسيرها قبل بدء عمل find.
  • -or: تعبر عن المعامل المنطقي OR بإمكاننا استخدام -or أو -o.
  • -and: تعبر عن المعامل المنطقي AND بإمكاننا استخدام -and أو -a.
  • ملاحظة: في حال لم تضع OR أو AND فسيكون الخيار بشكل تلقائي AND.

البحث بواسطة اسم الملف في المجلد الحالي:

find . -name main.py

البحث بواسطة اسم الملف مع تجاهل حالة الأحرف:

find /home -iname Main.py

البحث فقط عن المجلدات:

find / -type d -name Books

البحث فقط عن الملفات:

find . -type f -name main.py

البحث عن كل الملفات ذات اللاحقة py:

find . -type f -name "*.py"

البحث عن كل الملفات التي تبدأ بـ mian مع استثناء اللاحقة php:

find . -type f -name "main*" -not -name "*.php"

البحث بناءً على عدد المجلدات الفرعية:

  • -mindepth: تحدد القيمة الصغرى لعدد مستويات المجلدات التي سيبدأ منها البحث، وسيتم تجاهل المجلد الحالي.
  • -maxdepth: تحدد القيمة الكبرى لعدد مستويات المجلدات التي سينتهي فيها البحث.

البحث بعمق كحد أدنى 4 مجلدات:

find /home/user -mindepth 4

البحث بعمق كحد أقصى 5 مجلدات:

find /home/user -maxdepth 5

البحث عن المجلدات والملفات الفارغة وحذفها:

  • -type: تستخدم لتحديد النوع، لو أردنا عرض النتائج للملفات فقط نستخدم f، ونستخدم d لعرض المجلدات فقط، ونستخدم s لعرض ملفات socket.
  • -empty: لعرض الملفات أو المجلدات الفارغة.
  • -print: لبطاعة النتائج فقط.
  • -delete: تستخدم للحذف.

البحث عن المجلدات الفارغة:

find ~/Work -type d -empty -print 

حذف المجلدات الفارغة:

find ~/Work -type d -empty -delete 

البحث عن الملفات الفارغة:

find ~/Work -type f -empty -print

حذف الملفات الفارغة:

find ~/Work -type f -empty -delete

البحث عن الملفات المخفية:

find / -type f -name ".*"

البحث بناءً على الأذونات:

-perm: وهي اختصار لكلمة permission.

البحث عن الملفات ذات الأذونات 777:

find . -type f -perm 0777 -print

البحث عن الملفات بدون الأذونات 777:

find . -type f ! -perm 0777 -print

البحث عن الملفات للقراءة فقط:

find / -type f -perm /u=r

البحث عن الملفات التنفيذية:

find / -type f -perm /a=x

البحث بناءً على المالكين والمجموعات:

  • -user: للبحث عن الملفات التي تعود لمستخدم ما.
  • -group: للبحث عن الملفات التي تعود لمجموعة ما.
  • -uid: للبحث عن الملفات التي تعود لمستخدم ما بواسطة القيمة الرقمية للمالك.
  • -gid: للبحث عن الملفات التي تعود لمجموعة ما بواسطة القيمة الرقمية للمجموعة.

البحث بناءً على المالك ahmed:

find /home -user ahmed

البحث بناءً على المجموعة muslim:

find /home -group muslim

البحث بناءً على التاريخ والوقت:

يخزن لينكس بيانات عن تواريخ الوصول Access time، وتواريخ التعديل Modification، وتواريخ التّبديل Change:

  • تاريخ الوصول: آخر مرّة قُرئ من الملفّ أو كُتب فيه.

  • تاريخ التّعديل: آخر مرّة عُدِّل فيها على محتوى الملفّ.

  • تاريخ التّبديل: آخر مرّة غُيّرت فيها البيانات الوصفيّة Meta-data المُتعلّقة بوضع الملفّ ضمن نظام الملفّات.

  • -mtime: للبحث عن الملفّات الّتي عُدِّل على محتواها باليوم.

  • -mmin: للبحث عن الملفّات الّتي عُدِّل على محتواها بالدقيقة.

  • -atime: للبحث عن الملفّات المقروءة إليها باليوم.

  • -amin: للبحث عن الملفّات المقروءة بالدقيقة.

  • -ctime: للبحث عن الملفّات التي غيرت بياناتها الوصفيّة الخاصة باليوم.

  • -cmin: للبحث عن الملفّات التي غيرت بياناتها الوصفيّة الخاصة بالدقيقة.

  • ملاحظة: عند استخدام اشارة + تعني أكثر من، وعند استخدام - تعني أقل من، وعند عدم وضع أي أشارة فقط الرقم تعني المطابقة.

البحث عن الملفات المعدلة آخر 50 يوماً:

find / -mtime -50

البحث عن الملفات المعدلة أكثر من 50 يوماً:

find / -mtime +50

البحث عن الملفات المعدلة من 20 إلى 50 يوماً:

find / -mtime +20 -mtime -50

البحث عن الملفات التي تم الوصول إليها آخر 50 يوماً:

find / -atime -50

البحث عن الملفات التي الوصول إليها أكثر من 50 يوماً:

find / -atime +50

البحث عن الملفات التي تغييرت بيانات التعريف الخاصة بها آخر 50 دقيقة:

find / -cmin -50

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

  • c: الحجم بالبايت.
  • k: الحجم بالكيلوبايت (1024 بت).
  • M: الحجم بالميغابايت (1048576 بت).
  • G: الحجم بالجيغابايت (1073741824 بت).
  • ملاحظة: عند استخدام اشارة + تعني أكبر من، وعند استخدام - تعني أصغر من، وعند عدم وضع أي أشارة فقط الرقم تعني المطابقة.

البحث عن الملفات المطابقة للحجم 10MB:

find / -size 10M

البحث عن الملفات أكبر من 2MB وأصغر من 10MB:

find / -size +2M -size-10M

تنفيذ الأوامر على نتائج البحث:

يُتيح الأمر find إمكانيّة تنفيذ أوامر على نتائج البحث مباشرةً عن طريق مُعطَى exec-.

ملاحظة: نستخدم علامة {} هي ماسك مكان Placeholder، تحلّ محلَّ الملفّات المُطابقة لخيارات البحث. تُشير علامة ;\ إلى نهاية الأمر.

البحث عن الملفات الفارغة والتأكد من مساحة كل ملف:

find . -type f -empty -exec du {} \;

البحث عن ملفات PDF بناء على نوع الملف:

find . -type f -exec file -i {} \; | grep -i "application/pdf"

البحث عن الملفات ذات التنسيق data:

find . -type f -exec file {} \; | grep '\data$'

تنويه: تستطيع استخدام -ok بدل من -exec والفرق الوحيد بينهما أنها تعرض رسالة موافقة على تنفيذ الأمر على كل ملف، وهي مفيدة جداً في حال استخدمت أمر الحذف حتى لا تمسح أي ملف بطريقة الخطأ.

المراجع: