معرفی دستور Find و چند مثال کاربردی

Avatar
نویسنده: شکوهی
یکشنبه 4 تیر 1396
مطالعه: ۷ دقیقه ۰ نظر ۱۴۲۰ بازدید

جستجوی یک فایل یا پوشه در سیستم عامل ویندوز به لطف نوار Search از پیش تعریف شده در بخش بالایی Windows Explorer بسیار ساده است. لیکن این فرآیند برای کاربران سیستم عامل لینوکس ( Linux ) در نسخه های سروری ، با در نظر گرفتن عدم بهره مندی از محیط گرافیکی ، قدری پیچیده است . در مقاله از آموزش لینوکس به معرفی یکی از معروفترین و کارامد ترین ابزار های جستجو در سیستم عامل های لینوکس خواهیم پرداخت. ابزار مورد بحث که Find نام دارد ، بصورت پیشفرض در همه توزیع های لینوکسی نصب بوده و با کمک طیف گسترده ای از گزینه ها ( Option ) های خود به شما کمک می کند فیلتر های متعددی در جستجوی خود قرار دهید تا دقیقترین نتیجه مطلوب را بیابید.

دستور Find ( بخوانید فایند ) از طریق محیط شل لینوکس  ( Shell ) اجرا شده و به شما کمک می کند فایل ها بر اساس دسته بندی های زیر جستجو نمایید.

البته در نهایت با قرار دادن فرمان های دیگر در ادامه دستور Find می توان پروسه های بسیاری از جمله اعمال تغییرات بر نتایج جستجو ، مانند حذف ، تغییر سطوح دسترسی ، ویرایش محتوا ، جابجایی و بسیاری موارد دیگر را اجرا کرد. البته این مقاله تنها به معرفی رایج ترین موارد استفاده Find خواهد پرداخت. با ما همراه باشید.

جستجوی فایل ها و پوشه ها بر اساس نام:

برای این منظور مطابق الگوی زیر به استفاده از آپشن name می پردازیم:

Find / -name parspack

دستور فوق دو بخش اصلی دارد. پس از کلمه find به ذکر مسیر مورد نظر برای جستجو می پردازیم. در این مثال / معادل با دایرکتوری اصلی لینوکس است که در نتیجه آن کل محیط سرور جستجو خواهد شد. این بخش می تواند با نشانی دقیق مسیر مورد نظر جایگزین شود. همچنین اگر پیش از اجرای دستور به مسیر مورد نظر برویم ، می توان با قرار دادن نقطه ، پروسه را در دایرکتوری جاری انجام داد. بخش دوم پس از گزینه name می آید که شامل نام فایل و یا پوشه مورد نظر است.

اگر نام فایل شامل فاصله ( Space ) و یا کاراکتر اجرایی و معنی دار برای shell لینوکس است ، می توانید آن را در Double quotes قرار دهید.

با توجه به اینکه لینوکس بین حروف کوچک و بزرگ تفاوت قائل می شود ، پوشه ای با نام Ali و ali متفاوت از یکدیگر هستند. حال اگر بخواهیم هر دو این پوشه ها را در نتایج جستجو داشته باشیم ، بجای آپشن name بایستی از iname استفاده کنیم تا جستجوی ما in case sensitive ( غیر حساس به بزرگی و کوچکی حروف ) شود.

جستجوی فایل ها و پوش ها بر اساس نوع:

اگر بخواهیم نتایج جستجو بر اساس فقط فایل ها و یا فقط پوشه ها باشد ، بایستی از گزینه type استفاده شود.

find / -type d -name parspack
find / -type f -name parspack

مثال اول با استفاده از d به جستجوی پوشه ها ( Directory ) و مثال دوم به جستجوی فایل ها ( File ) می پردازد.

جستجوی فایل ها بر اساس پسوند:

در صورتی که بخواهید مثلا فایل های jpg موجود در یک مسیر خاص را جستجو نمایید ، بایستی از الگویی مشابه مثال زیر استفاده کنید:

find / -type f -name “*.jpg”

جستجو بر اساس سطوح دسترسی ( Permision ):

بمنظور جستجو بر اساس پرمیژن ها از آپشن prem استفاده می کنیم.

find / -type f -perm 0777 -name parspack.php

در این مثال به دنبال یک فایل با نام parspack.php و با دسترسی 777 هستیم.
همچنین بمنظور پیدا کردن فایل هایی با پرمیژن اجرایی از الگوی زیر استفاده می کنیم:

find / -perm /a=x

مثال فوق تمامی فایل های با سطح دسترسی قابل اجرا بر روی سرور لینوکس را می یابد.

اگر بخواهیم فایل هایی با دسترسی 777 را یافته و سپس سطح دسترسی آنها را به 644 تغییر دهیم از ترکیب خروجی دستور find با دیگر دستور ها استفاده می کنیم.

find / -type f -perm 0777 -print -exec chmod 644 {} \;

استفاده از exec در ادامه دیگر دستورات لینوکسی به احتیاط و توجه زیاد نیاز دارد.

دستور find به تنهایی فقط فایل ها را پیدا می کند ولی exec قابلیت اجرای دستورات دیگر را دارد و مثلا کاهش سطح دسترسی برخی فایل ها می تواند منجر به وقوع مشکل در کارکرد نرم افزاری خاص و یا کرنل ( Kernel ) گردد. لذا این شکل استفاده از دستور ها به کاربران مبتدی توصیه نمی شود. بهتر است جهت احتیاط بیشتر ابتدا خروجی دستور find را دقیق بررسی فرمایید و پس از اطمینان ، اقدام به اعمال تغییرات مورد نظر با استفاده از exec کنید .
همچنین در صورت نیاز به حذف نتایج جستجوی find ، الگوی استفاده شده در مثال زیر کاربر دارد:

find . -type f -name “*.txt” -exec rm -f {} \;

این مثال تمامی فایل های با پسوند txt را در کل سرور یافته و سپس حذف می کند.

جستجو بر اساس نام کاربری:

اگر قصد یافتن فایل ها را بر اساس نام مالک داشته باشیم ، بایستی از گزینه name استفاده کنیم.

find / -name parspack

در این مثال عملیات جستجو در مسیر / و بر اساس فایل هایی با مالکیت parspack صورت می پذیرد.
آپشن group نیز به منظور جستجو بر اساس نام گروه کاربری استفاده می شود:

find /home -group developer

جستجوی فایل ها بر اساس تاریخ و ساعت:

تغییرات در فایل های لینوکسی به شکل انجام می پذیرد.

  • Modified که با m مشخص می شود و به معنی تغییر در محتوای فایل است.
  • Accessed که با a مشخص می شود که به معنی دسترسی ( خواندن ) فایل است.
  • Changed که با c مشخص می شود و معادل با تغییر در متا دیتای ( Metadata ) فایل است. ولی محتوا دست نخورده باقی مانده است.

در آپشن مورد استفاده برای این بخش اگر از time استفاده شود ، عدد مقابل آن به معنی روز است و اگر از min استفاده شد عدد مقابل آن معرف تعداد دقیقه است.

find / -mtime 10

دستور فوق به معنی یافتن فایلی در مسیر / است که در 10 روز گذشته m ( Modified ) شده است.

find / -mtime +10 –mtime -20

این مثال به معنی یافتن فایلی است که بین 10 تا 20 روز گذشته modify شده است. بعبارتی بیشتر از 10 روز و کمتر از 20 روز گذشته تغییری در محتوای آن ایجاد شده است.

find / -cmin -30

در مثال فوق به دنبال یافتن فایل هایی هستیم که ظرف 30 دقیقه اخیر متادیتای آنها ( مثلا سطح دسترسی ) تغییر یافته است.

جستجوی فایل ها بر اساس سایز:

آپشن size بمنظور اجرای عملیات جستجو بر اساس سایز کاربرد دارد.

find / -size 20M

مثال فوق برای یافتن تمامی فایل های 20 مگابایتی بر روی سرور استفاده می شود.

find / -size +10M -size -20M

در صورتی که بخواهیم فایل های بزرگتر از 10 مگابایت و کوچکتر از 20 مگابایت ( سایز بین 10 تا  20 مگابایت ) را جستجو کنیم ، از الگوی ذکر شده در مثال قبل استفاده می کنیم.
دستور زیر فایل های با پسوند jpg را در کل سرور جستجو کرده و فایل هایی که سایز بزرگتر از 20 مگابایت داشته باشند را حذف می کند.

find / -type f -name *.jpg -size +20M -exec rm {} \;

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


ارسال دیدگاه در وبلاگ پارس‌پک را مطالعه کرده و آن‌ها را می‌پذیرم.

با خدمات ابری پارس پک آشنا شوید

اولین ارائه‌دهنده خدمات رایانش ابری در ایران هستیم