پرش به محتویات

۶.۷ جستجوی فایل سیستم و محل درست فایل‌ها

جستجوگر تحت محیط خط فرمان - find

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

برای شروع از بدیهی‌ترین نوع جستجو آغاز می کنیم؛ جستجو بر اساس نام. باز یادآور این نکته می‌شویم که فرمان find دارای پارامترهای جستجوی متنوعی مانند جستجو بر اساس نام، سایز، نوع، کاربر مالک، گروه مالک و ... است که با تعدادی از آنها آشنایی مختصری پیدا خواهیم کرد.

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

$ find / -name "test"

‫در فرمان فوق، درخواست ما جستجوی فایلی با نام "test" است. این جستجو در مسیری که مشخص شده انجام می‌پذیرد، که در این فرمان این مسیر با " / " ‬مشخص گردیده و همانطور که در آموزش‌های پیشین اشاره شد، این مسیر برابر با پوشه ریشه در سیستم عامل است و مسیر تمامی فایل‌ها و پوشه‌های دیگر در سیستم شما زیر شاخه‌ای از این مسیر خواهند بود.

‫در فرمان فوق دقت به چند نکته حائز اهمیت است؛ ابتدا به این نکته توجه کنید که در فرمان فوق، با توجه به نامی که برای جستجو انتخاب گردیده، تنها فایل‌ها و یا پوشه‌هایی بعنوان نتیجه جستجو به شما نشان داده می شوند که نام آنها دقیقا برابر " test " باشد؛ این بدین معناست که بعنوان مثال اگر در مسیر جستجو، فایلی با نام " test1 " موجود باشد، این فایل بعنوان نتیجه جستجو در نظر گرفته نشده و به شما نشان داده نخواهد شد. لذا آشنایی با نحوه انتخاب نام مورد نظر برای جستجو اهمیت بالایی پیدا خواهد کرد.‬

چنانچه در عبارت مورد نظر برای جستجو از کاراکتر ستاره استفاده کنید، این کاراکتر به معنای « هر چیزی » خواهد بود. بعنوان مثال اگر عبارت مورد نظر را " ‫test* " قرار دهید، نتایج جستجو شامل فایل‌ها و پوشه هایست که با « هر عبارتی » آغاز شده و حتما به " test " ختم شده‌اند. اگر علامت ستاره را بعد از عبارت مورد نظر قرار دهید، بصورت " *test " ، نتایج جستجو شامل فایل‌ها و پوشه هاییست که با عبارت " test " آغاز شده‌اند و می‌توانند با « هر چیزی » خاتمه یابند. توجه داشته باشید که استفاده از چندین علامت ستاره در موقعیت‌های متفاوت در عبارت مورد نظر برای جستجو بلا مانع بوده و ایرادی در فرمان جستجو ایجاد نخواهد کرد.‬

یکی دیگر از امکانات خوب فرمان جستجوی خط فرمان، استفاده از فرمان‌های منطقی روی مشخصه (های) جستجو است. بعنوان مثال، علامت " ! " پارامتر جستجوی پس از خود را نقیض ( و یا وارونه ) می نماید. با ذکر مثالی به مفهوم این علامت پی خواهیم برد.

  • ‫دستور زیر تمام فایل‌ها و پوشه‌هایی را نشان می‌دهد که دارای هر نامی باشند و حتما به " txt. " ختم شده باشند :‬
$ find / -name "*.txt"
  • ‫دستور زیر تمام فایل‌ها و پوشه‌هایی را نشان می دهد که به " txt. " ختم نشده باشند :‬
$ find / \! -name "*.txt"

البته همانطور که در دستور فوق مشاهده می‌کنید، برای استفاده از این قابلیت، با توجه به آموزش‌های پیشین در مورد کاراکترهای خاص در محیط خط فرمان (یا ترمینال)، به جای " ! " باید از " ! "‬ استفاده نمود.

بصورت پیشفرض، در صورتی که شما از چند پارامتر در فرمان جستجو استفاده کنید، این کار به عنوان عملیات منطقی " AND " در نظر گرفته شده، و نتایج جستجو شامل فایل‌ها و پوشه‌هاییست که تمامی پارامتر‌های جستجو برای آنان صدق نماید. به مثال زیر توجه کنید :

  • دستور زیر تمام فایل‌ها و پوشه‌هایی را نشان می‌دهد که نام آنها با " 11 " شروع شده و نام آنها با " txt. " خاتمه یابد :
‪$ find / -name "11*" -name "*.txt"

برای انجام عملیات منطقی " OR " بر روی پارامترهای جستجو، از پارامتر دیگری با نام " or- " استفاده می‌کنیم. این پارامتر عملیات " OR " را بر روی پارامتر قبلی و بعدی خود اعمال می‌کند. بدینصورت برای اینکه فایل و یا پوشه‌ای بعنوان نتیجه جستجو در خروجی محیط خط فرمان نمایش داده شود، باید یکی از پارامتر‌های جستجو برای آن فایل یا پوشه صدق کند. با ذکر مثال زیر این عملیات را توضیح می‌دهیم :

  • دستور زیر تمام فایل‌ها و پوشه‌هایی را نشان می‌دهد که نام آنها با " 11 " شروع شده یا نام آنها با " txt. " خاتمه یابد :
‪$ find / -name "11*" -or -name "*.txt"

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

  • جستجو در مسیر ریشه و تمامی زیر پوشه های آن (جستجو در کل سیستم) :
$ find / -name "test"
  • جستجو در مسیر مشخص شده و تمامی زیر پوشه های آن :
$ find /adres/nemune/ -name "test"
  • جستجو در مسیر فعلی در محیط خط فرمان و تمامی زیر پوشه‌های آن (جستجو در پوشه‌ای که در آن قرار دارید) :
$ find . -name "test"
  • جستجو در مسیر پوشه خانه و تمامی زیر پوشه‌های آن (جستجو در پوشه کاربر) :
$ find ~/ -name "test"

‫در فرمان find روش‌های دیگری برای جستجو بر اساس نام وجود دارد که یکی از آنها با عبارت " iname- " و دیگری با عبارت " path- " مشخص می شوند.‬ ‫پارامتر " iname- " همانند " name- " عمل می کند، با این تفاوت که در عملیات جستجوی، نسبت به بزرگی و کوچکی عبارت مورد نظر حساس نیست. بدینصورت اگر فایلی با نام " Test.txt " در مسیر فعلی محیط خط فرمان وجود داشته باشد :‬

  • فایل فوق بعنوان نتیجه جستجو در فرمان زیر نشان داده نخواهد شد :
$ find . -name "test*"
  • فایل فوق بعنوان نتیجه جستجو در فرمان زیر نشان داده می خواهد :
$ find . -iname "test*"

‫پارامتر " path- " نیز برای جستجوی فایل بر اساس نام بکار می‌رود، با این تفاوت در این روش ما الگویی برای جستجو تعریف می‌کنیم. بعنوان مثال اگر بخواهیم فایل‌هایی بیابیم که همگی با عدد شروع شده باشند، و یا همگی از چهار حرف تشکیل شده باشند، از این پارامتر استفاده می‌کنیم. آموزش این روش جستجو خود نیازمند آموزش روش تعریف الگوی نام در خط فرمان می‌باشد. لذا از آموزش این روش صرف نظر می‌کنیم. برای یادگیری این روش می‌توانید از صفحات راهنمای فرمان find در لینوکس استفاده نمایید.‬

در ادامه، با ‫استفاده از مثال‌های زیر با تعدادی از پر کاربردترین‌های پارامترهای جستجو، آشنایی مختصری پیدا خواهیم کرد.‬

  • جستجو بر اساس گروه مالک فایل : همانطور که پیشتر متوجه شده اید، هر فایل یا پوشه دارای یک « مالک » و یک « گروه مالک » است و در جستجو بر این اساس، ما اقدام به جستجوی فایل‌ها و پوشه‌هایی می‌کنیم که مالک یا گروه مالک آن، مالک یا گروه مالک مد نظر ماست.

  • بعنوان مثال، فرمان زیر در مسیر " / " و کلیه زیر مسیرهای آن، لیست فایل‌ها و پوشه‌هایی که متعلق به کاربر " lpi " است را نمایش خواهد داد :

$ find / -user lpi
  • همچنین فرمان زیر در مسیر " / " و کلیه زیر مسیرهای آن، لیست فایل‌ها و پوشه‌هایی که متعلق به گروه کاربران " lpi " است را نمایش خواهد داد :
  $ find . -group lpi
  • جستجو بر اساس سایز فایل : در این روش، پارامتر جستجوی شما سایز فایل‌ها خواهد بود و فرمان " find " به هر فایلی که در طول روند جستجو برخورد می‌کند، سایز آن را با پارامتر ورودی شما مقایسه کرده و در صورتی که سایز فایل در پارامتر جستجو صدق کند، آنرا بعنوان نتیجه جستجو نمایش خواهد داد. دستورات زیر استفاده این پارامتر را بصورت مثال نمایش خواهد داد.

  • فرمان زیر در مسیر " / " و کلیه زیر مسیر‌های آن، لیست فایل‌هایی که سایز آنها بیشتر از " 1024MB " است را نمایش خواهد داد :

$ find / -size +1024M
  • فرمان زیر در مسیر " / " و کلیه زیر مسیرهای آن، لیست فایل‌هایی که سایز آنها کمتر از " 2048MB " است را نمایش خواهد داد :
$ find / -size -2048M

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