مقدمة
من المشاكل التي يواجهها المستخدمون عند تعلمهم العمل مع لينكس لأول مرة هي كيفية العثور على الملفات التي يبحثون عنها. سيوضح لك هذا الدليل كيفية استخدام الأمر يجد يغطي هذا الأمر الاسم الصحيح. يساعدك في البحث عن الملفات على نظامك باستخدام مرشحات ومعايير متنوعة. كما يصف الأمر بإيجاز. تحديد موقع والتي يمكن استخدامها للبحث عن الملفات بطريقة مختلفة.
المتطلبات الأساسية
- لمتابعة هذا الدليل، ستحتاج إلى جهاز كمبيوتر يعمل بنظام تشغيل قائم على لينكس. يمكن أن يكون هذا خادمًا افتراضيًا خاصًا تتصل به عبر SSH أو جهازك المحلي. يُرجى العلم أنه تم التحقق من هذا الدليل باستخدام خادم لينكس يعمل بنظام أوبونتو 20.04، ولكن الأمثلة المُقدمة تعمل على أي إصدار من توزيعات لينكس.
البحث حسب الاسم
أسهل طريقة للبحث عن الملفات هي البحث عن أسمائها. للعثور على ملف بالاسم، استخدم الأمر يجد، يجب عليك استخدام الأمر التالي:
find -name "query"سيكون هذا حساسًا لحالة الأحرف، مما يعني أن البحث عن الاستعلام سيكون مماثلاً للبحث عن استفسار الأمر مختلف. للعثور على ملف بالاسم مع تجاهل حالة الاستعلام، استخدم الخيار -iname:
find -iname "query"إذا كنت تريد العثور على جميع الملفات التي لا تلتزم بنمط معين، فيمكنك تضييق نطاق البحث باستخدام -لا يعكس:
find -not -name "query_to_avoid"وبدلاً من ذلك، يمكنك عكس البحث باستخدام علامة التعجب (!)، مثل هذا:
find \! -name "query_to_avoid"لاحظ أنه إذا كنت تستخدم !، فيجب عليك الإفلات من الحرف باستخدام الشرطة المائلة العكسية (\) قبل أن تتمكن من استخدامه. يجد يمكن تفسيره، ولا تحاول القشرة تفسيره.
البحث حسب النوع
مع المعلمة -يكتب يمكنك تحديد أنواع الملفات التي ترغب في البحث عنها. إليك كيفية ذلك:
find -type type_descriptor queryفيما يلي بعض الوصافات التي يمكنك استخدامها لتحديد نوع الملف:
- f: ملف عادي
- د: الدليل
- ل: رابط رمزي
- ج: أجهزة الأحرف
- ب: يحظر الأجهزة
على سبيل المثال، إذا كنت تريد العثور على جميع أجهزة الأحرف الموجودة على نظامك، يمكنك إصدار هذا الأمر:
find /dev -type cيبحث هذا الأمر على وجه التحديد فقط عن الأجهزة الموجودة في المجلد /dev، وهو الدليل الذي يتم فيه عادةً تثبيت ملفات الأجهزة على أنظمة Linux:
Output
/dev/vcsa5
/dev/vcsu5
/dev/vcs5
/dev/vcsa4
/dev/vcsu4
/dev/vcs4
/dev/vcsa3
/dev/vcsu3
/dev/vcs3
/dev/vcsa2
/dev/vcsu2
/dev/vcs2
. . .يمكنك عرض جميع الملفات التي .conf ابحث عن الملفات التي تنتهي بـ . سيجد هذا المثال الملفات المطابقة في المجلد /usr البحث عن:
find /usr -type f -name "*.conf"Output
/usr/src/linux-headers-5.4.0-88-generic/include/config/auto.conf
/usr/src/linux-headers-5.4.0-88-generic/include/config/tristate.conf
/usr/src/linux-headers-5.4.0-90-generic/include/config/auto.conf
/usr/src/linux-headers-5.4.0-90-generic/include/config/tristate.conf
/usr/share/adduser/adduser.conf
/usr/share/ufw/ufw.conf
/usr/share/popularity-contest/default.conf
/usr/share/byobu/keybindings/tmux-screen-keys.conf
/usr/share/libc-bin/nsswitch.conf
/usr/share/rsyslog/50-default.conf
. . .تصفية حسب الوقت والحجم
يجد إنه يوفر لك طرقًا مختلفة لتصفية النتائج حسب الحجم والوقت.
مقاس
استخدام المعلمة -مقاس يمكنك تصفية الملفات حسب حجمها. للقيام بذلك، عليك إضافة لاحقة خاصة إلى نهاية قيمة حجم رقمية للإشارة إلى ما إذا كنت تحسب الحجم بالبايت، أو الميجابايت، أو الجيجابايت، أو أي مقياس آخر. إليك بعض لاحقات الحجم الشائعة الاستخدام:
- ج: بايتات
- ك: كيلوبايت
- م: ميغا بايت
- g: جيجابايت
- ب: كتل بحجم 512 بايت
لتوضيح ذلك، سيعمل الأمر التالي على العثور على أي ملف في دليل /usr يبلغ طوله 50 بايتًا بالضبط:
find /usr -size 50cللعثور على الملفات التي يقل حجمها عن 50 بايت، يمكنك استخدام هذا النحو:
find /usr -size -50cللعثور على الملفات الموجودة في المجلد /usr التي يزيد حجمها عن 700 ميجابايت، يمكنك استخدام هذا الأمر:
find /usr -size +700Mوقت
بالنسبة لكل ملف على النظام، يقوم Linux بتخزين الطوابع الزمنية لوقت الوصول، ووقت التعديل، ووقت التعديل.
- وقت الوصول: آخر مرة تم فيها قراءة الملف أو كتابته.
- وقت التعديل: آخر مرة تم فيها تعديل محتويات الملف.
- وقت التعديل: آخر مرة تم فيها تغيير بيانات تعريف العقدة الخاصة بالملف.
استخدام الخيارات الوقت- ،م تايم- و -وقتيمكنك الاعتماد على هذه المعلمات في بحثك. لكل خيار من هذه الخيارات، يجب عليك إدخال قيمة تشير إلى عدد الأيام التي تريد البحث فيها في الماضي. وكما هو الحال في خيارات الحجم الموضحة سابقًا، يمكنك إضافة علامتي زائد أو ناقص قبل هذه الخيارات لتحديد "أكبر من" أو "أصغر من".
على سبيل المثال، للعثور على الملفات الموجودة في المجلد /usr والتي تم تعديلها في اليوم الماضي، قم بتشغيل الأمر التالي:
find /usr -mtime 1إذا كنت تريد الملفات التي قمت بالوصول إليها منذ أقل من يوم، فيمكنك تشغيل هذا الأمر:
find /usr -atime -1للعثور على الملفات التي تم تغيير بياناتها الوصفية آخر مرة منذ أكثر من 3 أيام، يمكنك تشغيل الأمر التالي:
find /usr -ctime +3تحتوي هذه الخيارات أيضًا على معلمات مصاحبة يمكنك استخدامها لتحديد الدقائق بدلاً من الأيام:
find /usr -mmin -1سيؤدي هذا إلى إظهار الملفات التي تم تعديلها في المرة الأخيرة.
يجد يمكنه أيضًا المقارنة بملف مرجعي وإرجاع العناصر الأحدث:
find / -newer reference_fileتعيد هذه الصيغة أي ملف على النظام تم إنشاؤه أو تغييره مؤخرًا بالنسبة إلى ملف المرجع.
البحث حسب المالك والأذونات
يمكنك أيضًا البحث عن الملفات حسب المستخدم أو المجموعة المالكة لها باستخدام المعلمتين -user و-group. للعثور على أي ملف في مجلد /var يملكه مستخدم syslog، شغّل هذا الأمر:
find /var -user syslogوبالمثل، يمكنك إدراج الملفات الموجودة في الدليل /etc التي تنتمي إلى مجموعة الظل عن طريق كتابة:
find /etc -group shadowيمكنك أيضًا البحث عن الملفات ذات الأذونات المحددة.
إذا كنت تريد مطابقة مجموعة دقيقة من الأذونات، فيمكنك استخدام هذا البناء النحوي، الذي يحدد الأذونات باستخدام التدوين الثماني:
find / -perm 644يطابق هذا الملفات تمامًا مع الأذونات المحددة.
إذا كنت تريد تحديد شيء ما بهذه الأذونات على الأقل، فيمكنك وضع علامة ناقص قبل رمز الأذونات:
find / -perm -644يُطابق هذا أي ملف لديه أذونات إضافية. الملف ذو الأذونات 744 في هذا المثال يُطابق.
التصفية حسب العمق
في هذا القسم، ستُنشئ بنية مجلد نموذجية ستستخدمها بعد ذلك لفحص ملفات التصفية بناءً على عمقها في البنية. إذا كنت تتبع الأمثلة في هذا البرنامج التعليمي، فمن الحكمة إنشاء هذه الملفات والمجلدات في المجلد /tmp/. المجلد /tmp/ هو مجلد مؤقت، مما يعني أنه سيتم حذف أي ملفات ومجلدات فيه عند تشغيل الخادم في المرة التالية. سيكون هذا مفيدًا لأغراض هذا الدليل، حيث يمكنك إنشاء أي عدد تريده من المجلدات والملفات والروابط دون القلق بشأن تعطل نظامك لاحقًا. بعد تشغيل الأوامر في هذا القسم، سيحتوي مجلد /tmp/ على ثلاثة مستويات من المجلدات، مع عشرة مجلدات في المستوى الأول. سيحتوي كل مجلد (بما في ذلك المجلد المؤقت) على عشرة ملفات وعشرة مجلدات فرعية.
قم بإنشاء بنية دليل نموذجية في المجلد /tmp/ باستخدام الأمر التالي:
mkdir -p /tmp/test/level1dir{1..10}/level2dir{1..10}/level3dir{1..10}بعد ذلك، قم بملء هذه الدلائل ببعض ملفات العينة باستخدام أمر اللمس:
touch /tmp/test/{file{1..10},level1dir{1..10}/{file{1..10},level2dir{1..10}/{file{1..10},level3dir{1..10}/file{1..10}}}}بعد وضع هذه الملفات والدلائل في مكانها، انتقل إلى الدليل test/ الذي قمت بإنشائه للتو:
cd /tmp/testللحصول على فهم أساسي لكيفية استرداد الملفات من هذا الهيكل، ابدأ بالبحث عن الاسم العادي الذي يتطابق مع أي ملف يسمى file1:
find -name file1Output
./level1dir7/level2dir8/level3dir9/file1
./level1dir7/level2dir8/level3dir3/file1
./level1dir7/level2dir8/level3dir4/file1
./level1dir7/level2dir8/level3dir1/file1
./level1dir7/level2dir8/level3dir8/file1
./level1dir7/level2dir8/level3dir7/file1
./level1dir7/level2dir8/level3dir2/file1
./level1dir7/level2dir8/level3dir6/file1
./level1dir7/level2dir8/level3dir5/file1
./level1dir7/level2dir8/file1
. . .سيؤدي هذا إلى نتائج كثيرة. إذا قمتَ بتوجيه المخرجات إلى عدّاد، فستجد أن هناك 1111 نتيجة.
find -name file1 | wc -lOutput
1111ربما يكون هذا العدد كبيرًا جدًا بحيث لا يفيدك في معظم الحالات. للحد منه، يمكنك تحديد أقصى عمق للبحث في قائمة البحث الرئيسية:
find -maxdepth num -name queryللعثور على الملف 1 فقط في المجلدات ذات المستوى 1 والمستويات الأعلى، يمكنك تحديد عمق أقصى يبلغ 2 (1 للمجلد ذي المستوى الأعلى و1 للمجلدات ذات المستوى 1):
find -maxdepth 2 -name file1Output
./level1dir7/file1
./level1dir1/file1
./level1dir3/file1
./level1dir8/file1
./level1dir6/file1
./file1
./level1dir2/file1
./level1dir9/file1
./level1dir4/file1
./level1dir5/file1
./level1dir10/file1هذه قائمة قابلة للإدارة للغاية.
يمكنك أيضًا تحديد دليل أدنى إذا كنت تعلم أن جميع الملفات من نقطة معينة موجودة أسفل الدليل الحالي:
find -mindepth num -name queryيمكنك استخدام هذا للعثور فقط على الملفات الموجودة في نهاية فروع الدليل:
find -mindepth 4 -name file1Output
./level1dir7/level2dir8/level3dir9/file1
./level1dir7/level2dir8/level3dir3/file1
./level1dir7/level2dir8/level3dir4/file1
./level1dir7/level2dir8/level3dir1/file1
./level1dir7/level2dir8/level3dir8/file1
./level1dir7/level2dir8/level3dir7/file1
./level1dir7/level2dir8/level3dir2/file1
. . .مرة أخرى، يقوم بإرجاع عدد كبير من النتائج (1000) بسبب بنية الفرع والملف.
يمكنك الجمع بين معلمات الحد الأدنى والحد الأقصى للعمق للتركيز على نطاق ضيق:
find -mindepth 2 -maxdepth 3 -name file1Output
./level1dir7/level2dir8/file1
./level1dir7/level2dir5/file1
./level1dir7/level2dir7/file1
./level1dir7/level2dir2/file1
./level1dir7/level2dir10/file1
./level1dir7/level2dir6/file1
./level1dir7/level2dir3/file1
./level1dir7/level2dir4/file1
./level1dir7/file1
. . .سيؤدي الجمع بين هذه الخيارات بهذه الطريقة إلى تقليل النتائج بشكل كبير، مع إرجاع 110 أسطر فقط بدلاً من 1000 سطر سابقًا.
تنفيذ الأوامر للعثور على النتائج
يمكنك استخدام المعلمة -تنفيذي قم بتشغيل أمر مساعد مخصص على أي شيء يتطابق باستخدام الأمر التالي:
find find_parameters -exec command_and_options {} \;يتم استخدام {} كعلامة مكانية للملفات المطابقة. \; يسمح لنا بمعرفة مكان انتهاء الأمر.
على سبيل المثال، بافتراض أنك لا تزال في الدليل /test/ الذي قمت بإنشائه في الخطوة السابقة في المجلد /tmp/، يمكنك العثور على الملفات من القسم السابق التي كانت تحتوي على أذونات 644 وتغييرها لتحتوي على أذونات 664:
find . -type f -perm 644 -exec chmod 664 {} \;يمكنك أيضًا تغيير أذونات الدليل بطريقة مماثلة:
find . -type d -perm 755 -exec chmod 700 {} \;يبحث هذا المثال عن أي دليل بأذونات مضبوطة على 755 ثم يقوم بتغيير الأذونات إلى 700.
البحث عن الملفات باستخدام Locate
بديل لاستخدام يجد طلب تحديد موقع غالبًا ما يكون هذا الأمر أسرع ويمكنه البحث في نظام الملفات بأكمله بسهولة.
يمكنك تثبيت الأمر في Debian أو Ubuntu باستخدام apt عن طريق تحديث قائمة الحزم الخاصة بك ثم تثبيت حزمة molocate:
sudo apt update sudo apt install mlocate
في Rocky Linux وCentOS وتوزيعات RedHat الأخرى المشتقة، يمكنك استخدام الأمر dnf لتثبيت mlocate:
sudo dnf install mlocateالسبب في أن الأمر locate أسرع من find هو اعتماده على قاعدة بيانات تسرد جميع الملفات على نظام الملفات. عادةً ما تُحدَّث هذه القاعدة يوميًا باستخدام برنامج cron، ولكن يمكنك تحديثها يدويًا باستخدام الأمر updatedb. الآن، شغِّل هذا الأمر بصلاحيات sudo:
sudo updatedbتذكر، إذا كنت ترغب في العثور على ملفات جديدة، يجب أن تكون قاعدة بيانات الموقع مُحدَّثة دائمًا. إذا أضفت ملفات جديدة قبل تشغيل البرنامج النصي cron أو قبل تشغيل أمر updatedb، فلن تظهر في نتائج الاستعلام.
يتيح لك الموقع تصفية النتائج بطرق متنوعة. أبسط طريقة للعثور على الملفات هي استخدام الصيغة التالية:
locate queryسيطابق هذا أي ملف أو مجلد يحتوي على الاستعلام النصي في أي مكان بمساره. لعرض الملفات التي تحتوي أسماؤها على الاستعلام نفسه فقط، بدلاً من أي ملفات تحتوي عليه في المجلدات المؤدية إليه، يمكنك إضافة العلامة -b للبحث فقط عن الملفات التي يتطابق اسمها الأساسي مع الاستعلام:
locate -b queryلجعل الأمر locate يقوم فقط بإرجاع النتائج التي لا تزال موجودة على نظام الملفات (أي الملفات التي لم يتم حذفها بين آخر استدعاء updatedb واستدعاء locate الحالي)، استخدم -e:
locate -e queryيمكنك استرداد الإحصائيات حول المعلومات التي يتم إدراج الموقع فيها باستخدام الخيار -S:
locate -SOutput
Database /var/lib/mlocate/mlocate.db:
21015 directories
136787 files
7727763 bytes in file names
3264413 bytes used to store databaseيمكن أن يكون هذا مفيدًا للحصول على فهم رفيع المستوى لعدد الملفات والدلائل الموجودة على نظامك.
نتيجة
يُعدّ كلٌّ من الأمرين "العثور" و"تحديد الموقع" أداتين مفيدتين للعثور على الملفات على نظامك. كلاهما أوامر فعّالة يُمكن تحسينها بدمجها مع أدوات أخرى عبر قنوات التوزيع، ولكن القرار يعود إليك في اختيار الأداة الأنسب لحالتك. من هنا، نشجعك على مواصلة تجربة الأمرين. يمكنك قراءة صفحات الدليل الخاصة بكلٍّ منهما للتعرف على خيارات أخرى غير مذكورة في هذا الدليل، كما يُمكنك تحليل نتائج البحث ومعالجتها عن طريق إدخالها في أوامر أخرى مثل wc وsort وgrep.









