به قسمت ۶۹ام از مجموعه آموزش های مدیریت سرور لینوکس می رسیم، که با یکی از دستورات بسیار مهم از لینوکس در خدمت شما هستم. در دنیای صفر و یک یافتن آن چیزی که به دنبالش هستیم خیلی اهمیت دارد. دلیل آن هم کاملاً واضح است. ما با انبوهی از اطلاعات و داده مواجه هستیم که باید قادر باشیم از بین آنها پرونده یا پوشۀ مورد نظرمان را پیدا کنیم. در لینوکس ما دستوری با عنوان Find داریم که با کاربریِ بسیار ساده به کمک ما آمده و در وظایفِ مدیریتیِ سرور لینوکس بسیار کمک یار ما خواهد بود.
به عبارت ساده اگر در لینوکس به دنبال یک پرونده یا پوشه بودید، بهترین راه استفاده از دستور Find است. دستور زیر را ببینید:
find /home/web/ -name "*.err"
دستور بالا که با عبارت find شروع شده است، برای ما هر چه پرونده با پسوند err است را درون مسیر home/web/ پیدا می کند. به فضاهای خالی بین همۀ اجزاء از دستور دقت داشته باشید و همچنین آن چیزی که قصد یافتنش را دارید باید بین دو علامت “” روبروی مشخصۀ name باشند.
این دستور شامل ساختار زیر می باشد:
find options starting/path expression
options همان مشخصه های دستور است که می تواند کار جستجو را برای ما سفارشی تر سازد. starting/path مسیری از سیستم فایل است که ما می خواهیم جستجو از آن جا شروع شود و به صورت بازگشتی پوشه های تحت آن هم پویش گردد. expression شرط و شرایطی است که باید جستجو طبق آن انجام گیرد.
دستور زیر را نگاه کنید:
find -O3 -L /var/www/ -name "*.html"
از دو تا مشخصه با عناوین O3 و L استفاده کردیم. هر مشخصه مثل هر دستور لینوکسِ دیگر با علامت – شناخته می شود. مشخصۀ O3 باعث می شود که جستجو در سطح بهینۀ حداکثری انجام گیرد. و مشخصۀ L هم پیوندهای نمادین یا همان Symlink ها هم دنبال می کند، که در حالت عادی این اتفاق نمی افتد.
مثال هایی دیگر از دستور find
پروندۀ testfile.txt را در مسیر جاری (همان مسیری که در حال حاضر در آن هستیم) جستجو می کند:
find . -name testfile.txt
هر آنچه که پروندۀ عکس با پسوند jpg هست در مسیر home و زیر پوشه های آن جستجو می کند:
find /home -name '*.jpg'
هر آنچه پروندۀ (فایل) خالی است، در مسیر جاری جستجو می کند:
find . -type f -empty
هر چه پروندۀ db در مسیر home/ هست، صرف نظر از نوع متن آن، که در ۷ روز گذشته توسط کاربر exampleuser ویرایش شده است را جستجو می کند:
find /home -user exampleuser -mtime 7 -iname ".db"
در مثال های بالا می بینید که چطور می توانیم از مشخصه های بیشتری برای سفارسی سازی دستور find برای یافتن دقیق تر آن چیزی که به دنبالش هستیم، استفاده کنیم.
اجرای دستوری خاص روی موارد جستجو شده
اما حالا یک قدم پا را فراتر گذاشته و از مشخصه ای استفاده می کنیم که پس از یافتن پرونده های مورد نظر، اعمالی را هم روی آنها انجام می دهد. مثلاً فرض کنید می خواهیم پرونده هایی را پیدا کنیم و جواز دسترسی یا همان Permission آنها را تغییر دهیم.
find . -name "rc.conf" -exec chmod o+r '{}' \;
دستور بالا هر آنچه پروندۀ rc.conf در مسیر فعلی وجد دارد را یافته و دستور chmod o+r را روی آنها اجرا می کند، که جواز دسترسیِ پرونده های یافت شده را تغییر می دهد. این کار را با استفاده از مشخۀ exec که در ادامۀ دستور find آمده است انجام می دهیم. بدین روش بدون اینکه خواسته باشید از چند دستور مختلف برای انجام یک کار استفاده کنیم، تمامیِ موارد را درون یک دستور خلاصه کنیم و کار خودمان را بیش از پیش راحت کنیم.
یافتن و حذف کردن پرونده ها در لینوکس
اگر خواسته باشید با یک حرکت در کنار جستجو، موارد یافت شده را حذف کنید، باید به مانند نمونۀ زیر از مشخصه delete بهره ببرید:
find . -name "*.bak" -delete
در دستور بالا ما قصد داریم هر چه پرونده با پسوند bak در مسیر فعلی و زیر پوشه هایش هست یافت شده و حذف گردند.
توجه: از این دستور و دستوری که با مشخصۀ exec همراه است، با نهایت دقت استفاده کنید. چرا که برای انجام عمل مورد نظر شما پس از یافتن پرونده ها یا پوشه ها، اعلانی را به شما نشان نمی دهد و فوراً عمل مذبور را انجام می دهد.
دستور find هم به مانند هر دستور دیگر از دستورات لینوکس می تواند مشخصه ها و ضمائم دیگری هم داشته باشد که شاید کاربرد آنها در موارد خاص تعریف گردند. اما ما در این درس خواستید کاربرد عمومی دستور find را برای جستجو در لینوکس بیاموزیم که این کار را هم کردیم. فراموش نکنید تا زمانی که خودتان درون محیط سرور مجازیِ خود دست به کار نشوید و دستورات را یکی یکی امتحان نکنید، هیچ چیزی دستگیرتان نخواهد شد. پس پیشنهاد بنده تمرین، تمرین و تمرین می باشد!
۰ دیدگاه