09-25-2010, 07:15 PM
امروزه یافتن یکی از مهم ترین هدف های هر فرد است. هم چون بقیه محیط ها، در محیط سیستم عامل نیز این نیاز وجود دارد. در این مقاله به روش های مختلف جستجو و یافتن فایل ها در سیستم عامل گنو/لینوکس از طریق خط فرمان می پردازم.
روش های مختلفی برای یافتن فایل در لینوکس وجود دارد. شما می توانید با توجه به نیاز های خود، سریع ترین روش را مورد استفاده قرار دهید.
۱- دستور locate
دستور locate یکی از سریع ترین راه های یافتن فایل های مختلف در لینوکس است. ساده ترین نوع استفاده از آن را در زیر مشاهده می کنید:
یا
یکی از ضعف های این دستور، عدم جستجو در فایل سیستم های مانت شده ویندوز است. به عبارت دیگر این دستور به صورت پیش فرض پارتیشن ویندوزی من را برای یافتن فایل جستجو نمی کند.
در صورت زیاد بودن نتایج جستجو، از پارامتر n دستور locate برای ایجاد محدودیت استفاده نمایید:
و نیز می توانید نتایج را با دستورات less یا more ترکیب کنید:
نکته: در هنگام استفاده از locate برای نخستین بار ممکن است با پیغام خطای مروبوط به عدم وجود پایگاه داده مواجه شوید. برای رفع این مشکل از دستور زیر برای بروز کردن پایگاه داده استفاده نمایید:
۲- دستور find
find یکی از انعطاف پذیرترین و قوی ترین دستورات برای جستجوی فایل هاست. در زیر ساده ترین ساختار استفاده از دستور find آمده است:
دستور بالا تمامی فایل های index.php موجود در پارتیشن ریشه (/) و زیر شاخه های آن را نمایش می دهد.
درصورتی که به خطای اجازه دسترسی در جستجو برخورد کردید، با اضافه کردن ۲>/dev/null آن را نادیده بگیرید. همچنین می توانید با اضافه کردن ۲>errors.txt آن خطا ها را در فایل errors.txt ذخیره نمایید:
دستور دوم، عملکردی مشابه با دستور اول دارد، با این تفاوت در این دستور اندازه حروف (بزرگی و کوچکی) آنها در نظر گرفته نمی شود. یعنی فایل هایی مانند InDex.php یا iNDEX نیز در نتایج دیده می شوند.
$ find /home/saeid/Music -name '*.mp3' -size -5000k
$ find / -size +10000k
دستور اول تمامی فایل های mp3 موجود در دایکتوری /home/saeid/Music که کمتر از ۵۰۰۰ کیلوبایت حجم دارند را نمایش می دهد.
دستور دوم تمامی فایل هایی را که بیش از ۱۰۰۰۰ کیلوبایت حجم دارند را نمایش می دهد.
دستور دوم عملکردی مشابه با دستور اول دارد، با این تفاوت که فایل های مورد دسترسی در ۲ ساعت اخیر را نمایش می دهد.
دستور سوم و چهار عملکردی مشابه با دستور اول و دوم دارند، با این تفاوت که فایل هایی را که در محتوای آنها تغییراتی صورت گرفته است را نمایش می دهند.
عملکرد های شرطی and و or و not دستور find را بسیار انعطاف پذیر می کنند. به عنوان مثال دستور دوم تمامی فایل هایی را که بیش از ۱۰۰۰۰ کیلو بایت حجم داشته و نام آن ها با عبارت Metallica شروع نشده باشد را نمایش می دهد.
گزینه exec یکی از مهمترین ویژگی های دستور find است. با استفاده از این گزینه شما می توانید دستوری را بر روی نتایج جستجو اعمال کنید. نمونه ساده استفاده از این دستور را در زیر مشاهده می کنید:
۳- دستور whereis
این دستور برای جستجو فایل های اجرایی، منبع و راهنمای یک دستور مورد استفاده قرار می گیرد:
دستور which برای بدست آوردن آدرس کامل دستور اجرایی مورد استفاده قرار می گیرد. به عنوان مثال خروجی دستور زیر عبارت /usr/bin/nano است.
منبع
روش های مختلفی برای یافتن فایل در لینوکس وجود دارد. شما می توانید با توجه به نیاز های خود، سریع ترین روش را مورد استفاده قرار دهید.
۱- دستور locate
دستور locate یکی از سریع ترین راه های یافتن فایل های مختلف در لینوکس است. ساده ترین نوع استفاده از آن را در زیر مشاهده می کنید:
$ locate filename
یا
$ locate "*.html"
یکی از ضعف های این دستور، عدم جستجو در فایل سیستم های مانت شده ویندوز است. به عبارت دیگر این دستور به صورت پیش فرض پارتیشن ویندوزی من را برای یافتن فایل جستجو نمی کند.
در صورت زیاد بودن نتایج جستجو، از پارامتر n دستور locate برای ایجاد محدودیت استفاده نمایید:
$ locate "*.php" -n 10
و نیز می توانید نتایج را با دستورات less یا more ترکیب کنید:
$ locate "*.php" | more
نکته: در هنگام استفاده از locate برای نخستین بار ممکن است با پیغام خطای مروبوط به عدم وجود پایگاه داده مواجه شوید. برای رفع این مشکل از دستور زیر برای بروز کردن پایگاه داده استفاده نمایید:
$ sudo updatedb
۲- دستور find
find یکی از انعطاف پذیرترین و قوی ترین دستورات برای جستجوی فایل هاست. در زیر ساده ترین ساختار استفاده از دستور find آمده است:
$ find / -name 'index.php'
دستور بالا تمامی فایل های index.php موجود در پارتیشن ریشه (/) و زیر شاخه های آن را نمایش می دهد.
درصورتی که به خطای اجازه دسترسی در جستجو برخورد کردید، با اضافه کردن ۲>/dev/null آن را نادیده بگیرید. همچنین می توانید با اضافه کردن ۲>errors.txt آن خطا ها را در فایل errors.txt ذخیره نمایید:
$ find / -name 'index.php' 2>/dev/null
$ find / -name 'index.php' 2>errors.txt
در ادامه برخی از کاربرد های دستور find را بررسی می کنیم.$ find / -name 'index.php' 2>errors.txt
$ find /home/saeid -name 'index*'
$ find /home/saeid -iname 'index*'
دستور اول در بالا تمامی فایل هایی را که با عبارت index شروع شده و در دایرکتوری /home/saeid هستند را نمایش می دهد.$ find /home/saeid -iname 'index*'
دستور دوم، عملکردی مشابه با دستور اول دارد، با این تفاوت در این دستور اندازه حروف (بزرگی و کوچکی) آنها در نظر گرفته نمی شود. یعنی فایل هایی مانند InDex.php یا iNDEX نیز در نتایج دیده می شوند.
$ find -name s*
دستور بالا تمامی فایل ها و دایکتوری هایی را که با حرف s شروع شده و در دایکتوری جاری می باشند را نمایش می دهد.$ find /home/saeid/Music -name '*.mp3' -size -5000k
$ find / -size +10000k
دستور اول تمامی فایل های mp3 موجود در دایکتوری /home/saeid/Music که کمتر از ۵۰۰۰ کیلوبایت حجم دارند را نمایش می دهد.
دستور دوم تمامی فایل هایی را که بیش از ۱۰۰۰۰ کیلوبایت حجم دارند را نمایش می دهد.
$ find /home/saeid -amin -10 -name '*.php'
$ find /home/saeid -atime -2 -name '*.php'
$ find /home/saeid -mmin -10 -name '*.php'
$ find /home/saeid -mtime -2 -name '*.php'
دستور اول تمامی فایل های php موجود در پوشه خانگی کاربر saeid و زیر شاخه های آن را که در ۱۰ دقیقه اخیر مورد دسترسی قرار گرفته اند را نمایش می دهد.$ find /home/saeid -atime -2 -name '*.php'
$ find /home/saeid -mmin -10 -name '*.php'
$ find /home/saeid -mtime -2 -name '*.php'
دستور دوم عملکردی مشابه با دستور اول دارد، با این تفاوت که فایل های مورد دسترسی در ۲ ساعت اخیر را نمایش می دهد.
دستور سوم و چهار عملکردی مشابه با دستور اول و دوم دارند، با این تفاوت که فایل هایی را که در محتوای آنها تغییراتی صورت گرفته است را نمایش می دهند.
$ find / -mount -name 'win*'
دستور بالا تمامی فایل هایی را که با عبارت win شروع شده و در دایرکتوری / بوده و توسط فایل سیستمی مانت (mount) نشده باشند را نمایش می دهد. این دستور زمانی کاربردی تر است که پارتیشن های ویندوزی شما به صورت پیش فرض مانت می شوند و عبارت مورد جستجو (مانند عبارت win) نتایج بسیاری در این پارتیشن ها داشته باشد.
$ find /home/saeid/Music -name 'Metallica*' -and -size +10000k
$ find /home/saeid/Music -size +10000k ! -name "Metallica*"
$ find /home/saeid/Music -name 'Metallica*' -or -size +10000k
$ find /home/saeid/Music -size +10000k ! -name "Metallica*"
$ find /home/saeid/Music -name 'Metallica*' -or -size +10000k
عملکرد های شرطی and و or و not دستور find را بسیار انعطاف پذیر می کنند. به عنوان مثال دستور دوم تمامی فایل هایی را که بیش از ۱۰۰۰۰ کیلو بایت حجم داشته و نام آن ها با عبارت Metallica شروع نشده باشد را نمایش می دهد.
گزینه exec یکی از مهمترین ویژگی های دستور find است. با استفاده از این گزینه شما می توانید دستوری را بر روی نتایج جستجو اعمال کنید. نمونه ساده استفاده از این دستور را در زیر مشاهده می کنید:
$ find / - name 'Metallica*' -exec ls -lh {} \;
دستور بالا یک لیست (ls -lh) با جزییات از نتایج جستجو را نمایش می دهد.۳- دستور whereis
این دستور برای جستجو فایل های اجرایی، منبع و راهنمای یک دستور مورد استفاده قرار می گیرد:
$ wheris nano
۴- دستور whichدستور which برای بدست آوردن آدرس کامل دستور اجرایی مورد استفاده قرار می گیرد. به عنوان مثال خروجی دستور زیر عبارت /usr/bin/nano است.
$ which nano
موفق باشیدمنبع
