جستجوی فایل در لینوکس
سلام ![]()
امروزه یافتن یکی از مهم ترین هدف های هر فرد است. هم چون بقیه محیط ها، در محیط سیستم عامل نیز این نیاز وجود دارد. در این مقاله به روش های مختلف جستجو و یافتن فایل ها در سیستم عامل گنو/لینوکس از طریق خط فرمان می پردازم.
روش های مختلفی برای یافتن فایل در لینوکس وجود دارد. شما می توانید با توجه به نیاز های خود، سریع ترین روش را مورد استفاده قرار دهید.
۱- دستور 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 موجود در پارتیشن ریشه (/) و زیر شاخه های آن را نمایش می دهد.
درصورتی که به خطای اجازه دسترسی در جستجو برخورد کردید، با اضافه کردن 2>/dev/null آن را نادیده بگیرید. همچنین می توانید با اضافه کردن 2>errors.txt آن خطا ها را در فایل errors.txt ذخیره نمایید:
$ find / -name 'index.php' 2>/dev/null
$ find / -name 'index.php' 2>errors.txtدر ادامه برخی از کاربرد های دستور find را بررسی می کنیم.
$ find /home/saeid -name 'index*'
$ find /home/saeid -iname 'index*'دستور اول در بالا تمامی فایل هایی را که با عبارت index شروع شده و در دایرکتوری /home/saeid هستند را نمایش می دهد.
دستور دوم، عملکردی مشابه با دستور اول دارد، با این تفاوت در این دستور اندازه حروف (بزرگی و کوچکی) آنها در نظر گرفته نمی شود. یعنی فایل هایی مانند 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 / -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عملکرد های شرطی 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موفق باشید
مطلب مرتبطی یافت نشد.
سعید زبردست
من برنامه نویس Java و PHP هستم. در کنار برنامه نویسی اطلاعات خوبی در زمینه پایگاه های داده بخصوص MySQL دارم. برای اطلاع بیشتر به صفحه درباره سعید زبردست مراجعه کنید.
[...] هفته سعید زبردست سه چهار تا دستور مفید برای جستجوی فایلها رو معرفی می…. قوی شدن توی خط فرمان، چیزیه که لینوکس کارها رو از بقیه [...]
[...] http://zebardast.ir/%D8%AC%D8%B3%D8%AA%D8%AC%D9%88%DB%8C-%D9%81%D8%A7%DB%8C%D9%84-%D8%AF%D8%B1-%D9%… a few seconds ago from choqoK [...]
[...] جستجو فایل [...]







مهندس خواستم بگم با فیدت تو گودر مشکل دارم … نمی دونم چرا ولی اونهایی که تگ کد می کنی این جوری نشون داده شدن :
۳d307240b69095962b71da5b70a23a4e031
اومدم دیدم تو فید فید برنرت مشکلی نیست … حالا در کل اومدم بگم شاید لازمت شد …
این مشکل از پلاگین wp-syntax وردپرس بود که بعد از غیر فعال کردنش، حل شد.
ممنون بابت اطلاع رسانی
خیلی خوب بود سعید جان
یه چیز دیگه تو دستور find مسیرجاری هست، مثلا من تو مسیری که هستم رو اگه بخوام بگردم دیگه احتیاجی به تایپ اون نیست کافی هست بنویسم:
موفق باشید.
find . -type (f or d) -name file-or-directoryname
نکته جالب دیگه توانایی انتخاب دایکتوری و یا فایل هست
خیلی خوب بود مرسی
عالی بود. ممنون
کاربردی
سلام
خسته نباشید
یک سوال خیلی سخت خواستم بپرسم که خیلی نیاز به جوابش دارم :
۱ – چه دستوری وجود داره در لینوکس که شبیه به همین find باشه ولی کارش این باشه که بتونه متون داخل فایل ها رو هم بررسی کنه ؟
۲ – حالا چه دستوری وجود داره که بصورت خودکار بتونه این متون رو با متون دلخواه جایگذین کنه همزمان در چندین فایل ؟ ( که دیگه نیاز نباشه خودمون یکی یکی و دستی انجام بدیم )
خیلی ممنون میشم یا جواب رو ایمیل کنی یا همینجا بنویسی
سلام
شما می تونید از دستور sed استفاده کنید
چند راهنما:
http://lowfatlinux.com/linux-sed.html
http://www.linuxjournal.com/article/7231
http://linux.about.com/od/commands/l/blcmdl1_sed.htm
موفق باشید
دستور locate که دوستمون اشاره بهش کرد سریع تر از find عمل میکنه ولی منم همون روش find را پیشنهاد میکنم
کار دستور locate اینگونه است که نام یا قسمتی از نام فایل مورد نظر را می گیرد و به پایگاه داده ای که نام فایل های موجود در سیستم در آن ذخیره شده مراجعه میکند و ان فایل را پیدا و محل آن را برمی گرداند. اما قبل از استفاده از این دستور باید پایگاه داده ما به روز شده تا آخرین تغییرات را در خود داشته باشد. بروز رسانی پایگاه داده تنها توسط کاربر سطح بالا یعنی root باید انجام گیرد . دستور su برای اینست که کاربر معمولی تبدیل به کاربر سطح بالا شود که البته باید رمز کاربر سطح بالا را بزند. در صورتی که رمز را صحیح وارد کند شکل ظاهری دستور تغییر می کند
دستور updated برای به روزرسانی پایگاه داده توسط کاربر سطح بالا استفاده می شود. پس از زدن این دستور مدت زمانی برای ثبت آخرین تغییرات در پایگاه داده باید طی شود.
به جای مراحل فوق دستور زیر نیز کاراست:
sudo updated
این دستور نشان میدهد که اگر هنوز کاربر معمولی هستی و رمز کاربر سطح بالا را می دانی میتوانی با وارد کردن رمز اقدام عمل update پایگاه داده کنی.
پس از مدت زمانی که برای اعمال تغییرات صرف شد میتوانید اقدام به پیدا کردن فایل مورد نظر خود توسط دستور locate کنید