جستجو در لینوکس با دستور find و locate به همراه پارامترهای کاربردی

محتوای مطلب

شاید برای شما هم پیش آمده باشد که بخواهید در سیستم عامل لینوکسی خود جستجو کنید و به دنبال یک فایل خاص در سیستم خود باشید. سیستم عامل لینوکس از دستورات قدرتمندی همانند locate و find در لینوکس برای جستجو در لینوکس استفاده میکند و شما میتوانید خیلی سریع فایل یا دایرکتوری مد نظر خودتون در کمترین زمان ممکن پیدا کنید. بصورت کلی یک سری فرآیند وجود دارد که شما به عنوان ادمین سیستم باید آنها را بصورت روزمره انجام دهید و تقریبا هر کاری که بخواهید بر روی سیستم عامل خود انجام دهید حتما باید با این فرآیند ها آشنا باشید همانند ویرایش فایل متنی با ویرایشگر nano یا جستجو در فایل به وسیله دستور grep. به فرآیند های ذکر شده باید جسجتو در لینوکس نیز اضافه کرد به این دلیل که در مواقع مختلف شاید نیاز باشد که یک فایل خاص را جستجو و ویرایش کنید.

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

فرمت کلی دستور locate در لینوکس بصورت زیر میباشد که option بصورت اختیاری میباشد و pattern در صورتیکه پارامتر regex– ذکر نشده باشد بصورت *pattern* در نظر گرفته خواهد شد.

locate [option] pattern

فرمت کلی دستور find  نیز بصورت زیر میباشد.  این دستور دارای option های زیادی میباشد و بعضی از این option ها مربوط به نحوه جستجو در دنبال کردن سیمبلیک لینک ها میباشد و بعضی از آنها در مورد نحوه عیب یابی جستجو میباشد که در ادامه به بعضی از آنها میپردازیم.

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path] [expression]

دستور find در لینوکس

دستور find یک دستور استاندارد لینوکس میباشد که در تمامی توزیع های لینوکس تقریبا بصورت پیش فرض وجود دارد. پارامتر های H,L,P پارامترهای هستند که در دستور find بر نحوه دنبال کردن سیمبلیک لینک ها در لینوکس تاثیر گذار میباشند. بصورت پیش فرض دستور find سیمبلیک لینک ها را دنبال نمیکند و پارامتر P نیز همین عملکرد را دارد. پارامتر L برعکس سیمبلیک لینک ها را دنبال میکند. پارامتر D- مربوط به اضافه کردن یک سری متادیتاها در مورد دیباگ کردن جستجو میباشد و همچنین Olevel- نیز در مورد بهینه کردن رفتار دستور find میباشد. این پارامترهایی که تا الان در مورد آنها صحبت شده است در موارد خاصی کاربرد دارد و بصورت کلی مسیر جستجو یا path و عبارت مورد جستجو به همراه پارامتر های آن یعنی expression بیشتر مورد استفاده میباشد که ما در این مقاله موارد پر کاربرد آنها را ارائه خواهیم داد.

جستجو در لینوکس بر اساس نام فایل

شما میتوانید با استفاده از دستور زیر بر اساس نام فایل مد نظرتان را جستجو کنید. به این نکته دقت نمایید که این جستجو بصورت case sensitive میباشد و در صورتیکه بخواهید بصورت ignore case در نظر گرفته شود یعنی بزرگ و کوچک بودن حروف در نظر گرفته نشود باید از پارامتر iname- استفاده نمایید.

حستجو در لینوکس بر اساس نام فایل بصورت case-sensitive

find path-to-search -name filename

جستجو در لینوکس بر اساس نام فایل بصورت ignore-case

find path-to-search -iname filename

جستجو در لینوکس بر اساس نام دایرکتوری

در صورتیکه به دنبال دایرکتوری در لینوکس هستید میتوانید از پارامتر type- همانند زیر استفاده کنید. گفتنی است که همانند بالا میتوانید هم بصورت case sensitive و هم بصورت case ignore جستجو کنید.

find path-to-search -type d -name filename

همچنین در صورتیکه بخواهید نوع جستجو را بر اساس فایل قرار دهید میتوانید بجای d از f استفاده کنید همانند زیر:

find path-to-search -type f -name filename

جستجو در لینوکس بر اساس سطح دسترسی

هر فایل یا دایرکتوری در لینوکس دارای یک سطح دسترسی میباشد و شما میتوانید با استفاده از پارامتر perm- بر اساس سطح دسترسی جستجو نمایید.برای مثال دستور زیر فایل هایی که با دسترسی 777 دارند را برای شما جستجو میکند.

find path-to-search -type f -perm 0777

همچنین اگر بخواهید نقیض جستجو قبلی را انجام دهید نیز بصورت زیر امکان پذیر است یعنی فایل هایی که دسترسی 777 ندارند را پیدا کنید.

find path-to-search -type f ! -perm 0777

جستجو در لینوکس برای پیدا کردن فایل های read-only و اجرایی(Executable)

یک فایل ممکن است دارای دسترسی های مختلفی باشد اما ممکن است شما به دنبال یک فایل با ویژگی خاص مانند فقط خواندنی یا read-only باشید. به وسیله دستور زیر میتوانید فایل های فقط خواندنی را پیدا کنید.

find path-to-search -perm /u=r

همچنین اگر دنبال فایل هایی هستید که قابلیت اجرا شدن در سیستم عامل لینوکس را دارا میباشند میتوانید از دستور زیر استفاده کنید.

find path-to-search -perm /a=x

جستجو کردن در لینوکس و سپس اجرا یک دستور خاص

عمدتا نیاز است که یک دسته از فایل ها یا دایرکتوری ها پیدا شوند و سپس یک دستور خاص بر روی آنها اجرا شود. میتوان برای این موضوعات اسکریپت در لینوکس نیز طراحی کرد اما دستور find دارای یک پارامتر ویژه است بنام exec- که شما میتوانید بوسیله این پارامتر یک دستور را بر روی نتایج جستجو شده اجرا کنید. برای مثال میخواهید یک سری فایل را پیدا کنید و سپس آن فایل ها را حذف نمایید. کافیست به وسیله دستور find آن فایل ها را چستچو کنید سپس با استفاده از پارامتر exec- دستور حذف را اجرا نمایید و تمامی موارد جستجو شده را حذف نمایید. فرمت کلی دستور بصورت زیر میباشد.

find path-to-search expression -exec command {}

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

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

دستور locate در لینوکس

دستور find بصورت آنلاین در فایل سیستم جستجو میکند و این کار ممکن است منابع زیادی از سرور شما مصرف کند به همین علت دستور دیگری بنام locate در لینوکس وجود دارد که با استفاده یک دیتابیس آفلاین که ساختار فایل سیستم را ذخیره میکند اقدام به پیدا کردن فایل های شما میکند. در ادامه به نحوه آپدیت کردن دیتابیس و جزییات آن اشاره خواهیم کرد.

جستجو در لینوکس به وسیله دستور locate

فرمت کلی دستور در ابتدای مقاله به آن اشاره شد اما اگر شما برای مثال به دنبال فایلی بنام appache.conf میگردید میتوانید از دستور زیر استفاده کنید. باید در نظر داشته باشید که بصورت پیش فرض دستور locate به دنبال هر فایل یا دایرکتوری خواهد گشت که عبارت appache.conf درون آن وجود دارد. به عبارت دیگر با زدن دستور زیر عبارت *appache.conf* جستجو خواهد شد.

locate appache.conf

پارامتر i- در دستور locate

دستور locate همانند دستور find بصورت پیش فرض بصورت case sensitive جستجو میکند و اگر میخواهید بصورت case igonre جستجو نماید باید همانند زیر از پارامتر i- استفاده نمایید.

locate -i appache.conf

پارامتر n- در دستور locate

با استفاده از پارامتر n- در دستور locate میتوانید محدودیت برای تعداد نهایی جستجو اعمال نمایید. برای مثال اگر بخواهید فقط 8 مورد به شما نمایش داده شود از دستور زیر استفاده نمایید.

locate -n 8 appache.conf

پارامتر e- در دستور locate

زمانیکه شما با دستور locate در لینوکس جستجو میکنید ممکن است در زمان جستجو فایل مد نظرتان دیگر بر روی فایل سیستم موجود نباشد. با استفاده از پارامتر e- همانند تصویر زیر میتوانید بر نحوه کار دستور locate تاثیر بگذارید به گونه ای که فقط نتایجی را به شما نمایش دهد که در حال حاضر بر روی فایل سیستم موجود هستند.

locate -e appache.conf

پارامتر regex– در دستور locate

دستور locate بصورت پیش فرض اگر شما عبارتی را برای جستجو وارد کنید بصورت *pattern* در نظر خواهد گرفت در صورتیکه بخواهید یک عبارت با قاعده دیگر را استفاده کنید میتوانید بصورت زیر با استفاده از regex– این کار را انجام دهید.

locate --regex regular-expression

دیتابیس دستور locate و دستور updatedb

همانطور که ذکر گردید دستور locate در لینوکس به وسیله یک دیتابیس آفلاین کار جستجو را انجام میدهد. این دیتابیس بصورت روزانه به وسیله cron job آپدیت میشود و تنظیمات مربوط به این کار در فایلی در آدر etc/updatedb.conf/ وجود دارد. همچنین در صورتیکه بخواهید بصورت دستی دیتابیس موجود را آپدیت نمایید میتوانید از دستور updatedb در لینوکس استفاده نمایید.

سوالات متداول

برای جستجو در لینوکس از چه دستوری استفاده کنم؟

برای جستجو در لینوکس بصورت پیش فرض دو دستور locate و find وجود دارد.

تفاوت دستور find و locate در لینوکس چیست؟

دستور find بصورت آنلاین در فایل سیستم جستجو میکند اما دستور locate در لینوکس بصورت آفلاین به وسیله یک دیتابیس جداگانه جستجو میکند.

چگونه بر روی نتایج جستجو در لینوکس به وسیله find یک دستور خاص را اجرا کنم؟

با استفاده از پارامتر exec- میتوانید بر روی نتایج جستجو خود هر دستوری اعم از پاک یا کپی کردن اجرا نمایید.

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

دو × 1 =