آموزش سرور | بلاگ وب‌داده

آموزش دستور Find در لینوکس؛ جستجوی حرفه‌ای فایل‌ها

جستجوی فایل در سرور را از حدس‌زدن به یک مهارت دقیق تبدیل کنید: نام، نوع، حجم، زمان و مجوز فایل‌ها را در چند ثانیه پیدا کنید.
دستور find لینوکس قدرتمندترین ابزار خط فرمان برای پیدا کردن فایل و پوشه روی سرور است؛ برخلاف جستجوی گرافیکی، این دستور درخت فایل‌سیستم را زنده پیمایش می‌کند و به شما اجازه می‌دهد بر اساس نام، نوع، حجم، زمان تغییر، مالک و مجوز فیلتر کنید و حتی روی نتایج، دستور اجرا کنید. در این راهنما از سینتکس پایه تا مثال‌های واقعی مدیریت سرور و نکات عیب‌یابی را گام‌به‌گام می‌بینید.
  • کار اصلی: پیمایش زنده و دقیق فایل‌سیستم برای یافتن فایل‌ها با ده‌ها شرط مختلف.
  • پرکاربردترین فیلترها: ‎-name/-iname‎ برای نام، ‎-type‎ برای نوع، ‎-size‎ برای حجم و ‎-mtime‎ برای زمان.
  • اجرا روی نتایج: با ‎-exec‎ یا ‎xargs‎ می‌توانید فایل‌های یافته‌شده را فشرده، جابه‌جا یا حذف کنید.
  • هشدار کلیدی: گزینه ‎-delete‎ برگشت‌ناپذیر است؛ همیشه اول بدون آن جستجو کنید.
  • find یا locate؟ find همیشه به‌روز اما کندتر است؛ locate سریع اما وابسته به پایگاه‌داده‌ای است که شاید قدیمی باشد.

پاسخ سریع

ساختار کلی این است: find [مسیر] [شرط‌ها] [اکشن]. اگر مسیری ندهید، از پوشه فعلی شروع می‌شود. مثلاً find . -name "*.log" یعنی «در پوشه جاری و زیرشاخه‌ها، هر فایلی که نامش به log. ختم می‌شود را پیدا کن». همین الگوی ساده، پایه تمام مثال‌های پیشرفته است.
حتماً این مقاله را باز کرده‌اید چون می‌خواهید بدون سردرگمی، فایل گم‌شده، لاگ‌های حجیم یا فایل‌های قدیمی را روی سرور پیدا و مدیریت کنید. در ادامه ابتدا مفهوم و سینتکس را روشن می‌کنیم، بعد با مثال‌های عملی پیش می‌رویم، سپس بخش مفصلی به عیب‌یابی و خطاهای رایج اختصاص می‌دهیم و در پایان به پرسش‌های متداول کاربران میزبانی پاسخ می‌دهیم.

دستور find لینوکس چیست و چگونه کار می‌کند؟

find یک برنامه استاندارد در همه توزیع‌های لینوکس (بخشی از بسته GNU findutils) است که فایل‌سیستم را به‌صورت زنده می‌گردد. به‌جای آنکه به یک فهرست از پیش‌آماده تکیه کند، در لحظه اجرا هر پوشه را باز می‌کند، فایل‌ها را با شرط‌های شما می‌سنجد و نتایج منطبق را برمی‌گرداند. به همین دلیل نتیجه‌اش همیشه دقیق و به‌روز است.
یک تشبیه ساده کمک می‌کند: find مثل کارمند بایگانی‌ای است که برای پیدا کردن یک پرونده، قفسه‌به‌قفسه را شخصاً وارسی می‌کند؛ کمی زمان می‌برد، اما هیچ‌وقت پرونده‌ای را که همین امروز اضافه شده از قلم نمی‌اندازد. این رفتار آن را برای مدیریت سرور — جایی که فایل‌ها مدام تغییر می‌کنند — ایده‌آل می‌کند.
ساختار فرمان از سه بخش تشکیل شده است: مسیر شروع، یک یا چند شرط (expression) و در صورت نیاز یک اکشن. در ساده‌ترین حالت کافی است مسیر و یک شرط نام بدهید:
# سینتکس کلی: find [مسیر] [شرط‌ها] [اکشن]
find /var/www -name "*.php"        # جستجوی فایل php (حساس به حروف بزرگ/کوچک)
find . -iname "readme*"            # ناحساس به حروف بزرگ/کوچک
find /home -type d -name "cache"   # فقط دایرکتوری‌هایی به نام cache

نکته

اگر هیچ اکشنی ننویسید، find به‌طور پیش‌فرض مسیر فایل‌های یافته‌شده را چاپ می‌کند (‎-print‎). علامت * در الگوها همان wildcard پوسته است؛ برای جلوگیری از تفسیر زودهنگام آن توسط شل، الگو را داخل گیومه بگذارید.
ChatGPT Image Aug 15 2026 12 58 55 PM 1 دستور find لینوکس؛ آموزش جستجوی فایل با مثال 2026

جستجوی فایل با شرط‌های مختلف؛ مثال‌های کاربردی

اینجا قدرت واقعی find آشکار می‌شود. می‌توانید ده‌ها شرط را ترکیب کنید تا دقیقاً همان چیزی را که می‌خواهید پیدا کنید. مهم‌ترین فیلترها را یکی‌یکی می‌بینیم.

۱) جستجو بر اساس نام و نوع فایل

شرط ‎-name‎ نام را به‌صورت حساس به حروف بزرگ و کوچک می‌سنجد و ‎-iname‎ ناحساس است؛ پس -iname "readme*" هم readme و هم README را می‌یابد. با ‎-type‎ هم می‌توانید نتیجه را به فایل عادی (f)، دایرکتوری (d) یا لینک نمادین (l) محدود کنید.

۲) جستجو بر اساس حجم و زمان

برای پیدا کردن فایل‌های حجیم که فضای دیسک را پر کرده‌اند از ‎-size‎ استفاده کنید: ‎+100M‎ یعنی بزرگ‌تر از ۱۰۰ مگابایت و ‎-1G‎ یعنی کوچک‌تر از ۱ گیگابایت. برای زمان، ‎-mtime -7‎ فایل‌های هفت روز اخیر و ‎-mtime +30‎ فایل‌های قدیمی‌تر از سی روز را برمی‌گرداند (برای دقت دقیقه‌ای ‎-mmin‎ هست).
# فایل‌های بزرگ‌تر از ۱۰۰ مگابایت (یافتن مصرف‌کننده‌های فضا)
find /var -type f -size +100M

# فایل‌های تغییریافته در ۷ روز اخیر
find /var/log -type f -mtime -7

# فایل‌های قدیمی‌تر از ۳۰ روز
find /backup -type f -mtime +30

نکته کاربردی

ترکیب find با مشاهده فضای دیسک، سریع‌ترین راه برای یافتن علت پرشدن هارد سرور است. اگر می‌خواهید مصرف فضا را عمیق‌تر بررسی کنید، راهنمای ما درباره مشاهده فضای دیسک در لینوکس را ببینید.

۳) ترکیب شرط‌ها و جستجوی پیشرفته

شرط‌ها به‌طور پیش‌فرض با «و» (AND) ترکیب می‌شوند، اما می‌توانید با ‎-o‎ رابطه «یا» بسازید و با علامت ‎!‎ شرط را نفی کنید. گزینه‌های ‎-maxdepth‎ و ‎-mindepth‎ هم عمق جستجو را محدود می‌کنند و باید پیش از سایر شرط‌ها بیایند.
ChatGPT Image Aug 15 2026 01 04 46 PM 1 دستور find لینوکس؛ آموزش جستجوی فایل با مثال 2026

جدول مرجع مهم‌ترین گزینه‌های find

این جدول یک مرجع سریع برای پرکاربردترین گزینه‌هاست؛ آن را ذخیره کنید تا هنگام کار با سرور دم‌دست باشد:
گزینهکار آنمثال
-name / -inameجستجو بر اساس نام (حساس / ناحساس به حروف)-iname “*.jpg”
-typeمحدودکردن به نوع (f فایل، d پوشه، l لینک)-type d
-sizeفیلتر بر اساس حجم (k، M، G)-size +100M
-mtime / -mminزمان تغییر بر حسب روز / دقیقه-mtime -7
-user / -groupمالک یا گروه فایل-user www-data
-permمجوز دسترسی فایل-perm 0777
-maxdepthمحدودکردن عمق جستجو-maxdepth 2
-exec / -deleteاجرای دستور روی نتایج / حذف آن‌ها-exec rm {} +

جمع‌بندی جدول

بیشتر کارهای روزمره با همین هشت گزینه انجام می‌شود. کلید کار، ترکیب آن‌هاست: هر چه شرط‌ها دقیق‌تر باشند، نتیجه تمیزتر و امن‌تر است — به‌خصوص وقتی می‌خواهید روی نتایج، دستوری اجرا کنید.

اجرا روی نتایج، حذف امن و عیب‌یابی خطاهای رایج

تا اینجا فقط فایل‌ها را پیدا کردیم؛ اما find می‌تواند روی نتایج، دستور هم اجرا کند. اینجا جایی است که بیشترین اشتباه‌ها رخ می‌دهد، پس با دقت پیش می‌رویم.

اجرا با ‎-exec‎ در برابر ‎xargs‎

با ‎-exec‎ می‌توانید روی هر نتیجه دستور اجرا کنید. تفاوت دو پایان‌بند مهم است: علامت ‎\;‎ دستور را یک‌بار به‌ازای هر فایل اجرا می‌کند، اما علامت ‎+‎ همه نتایج را یک‌جا به دستور می‌دهد و معمولاً بسیار سریع‌تر است. ابزار xargs نیز همین کار را با مدیریت بهتر طول آرگومان و امکان اجرای موازی انجام می‌دهد.
# علامت \; یعنی یک اجرا به‌ازای هر فایل
find . -name "*.tmp" -exec rm {} \;

# علامت + همه نتایج را یک‌جا به دستور می‌دهد (سریع‌تر)
find . -name "*.log" -exec gzip {} +

# ترکیب امن با xargs برای نام‌های دارای فاصله (و ۴ پردازش موازی)
find . -name "*.jpg" -print0 | xargs -0 -P4 jpegoptim

حذف فایل‌ها با ‎-delete‎ (با احتیاط)

گزینه ‎-delete‎ فایل‌های یافته‌شده را حذف می‌کند، اما یک تله خطرناک دارد: find عبارت را از چپ به راست ارزیابی می‌کند. اگر ‎-delete‎ را پیش از فیلترها بگذارید، ممکن است پیش از اعمال شرط، فایل‌ها حذف شوند. قانون طلایی این است که اول بدون ‎-delete‎ جستجو کنید و خروجی را ببینید، سپس آن را در انتهای فرمان اضافه کنید.
# گام ۱: اول فقط جستجو کن و خروجی را وارسی کن
find /tmp -type f -name "*.cache" -mtime +14

# گام ۲: وقتی مطمئن شدی، ‑delete را در «انتهای» عبارت اضافه کن
find /tmp -type f -name "*.cache" -mtime +14 -delete

هشدار مهم

دستور ‎-delete‎ برگشت‌ناپذیر است و سطل بازیافت ندارد. هرگز آن را روی مسیرهای حساس مثل ریشه سیستم یا بدون بکاپ اجرا نکنید. اگر تازه‌کار هستید، به‌جای ‎-delete‎ از ‎-exec rm -i {} \;‎ استفاده کنید تا پیش از حذف هر فایل از شما تأیید بگیرد.

جستجو بر اساس مجوز و مالک

در ممیزی امنیتی سرور، یافتن فایل‌های با مجوز بیش‌ازحد باز (مثل 777) یا فایل‌های متعلق به کاربری مشخص بسیار رایج است. این مثال‌ها نشان می‌دهد چطور شرط‌ها را برای این کار ترکیب کنید:
# فایل‌های با مجوز پرخطر 777
find /var/www -type f -perm 0777

# ترکیب شرط‌ها با -o (یا): فایل‌های php یا html
find . -type f \( -name "*.php" -o -name "*.html" \)

# فایل‌های متعلق به یک کاربر خاص
find /home -user www-data -type f

عیب‌یابی خطاهای رایج find

سه خطای پرتکرار وجود دارد. اول، پیام «Permission denied» که یعنی برای خواندن برخی پوشه‌ها دسترسی ندارید؛ با افزودن ‎2>/dev/null‎ این خطاها را پنهان کنید یا فرمان را با sudo اجرا کنید. دوم، خطای «paths must precede expression» که معمولاً به‌خاطر نگذاشتن الگوی نام داخل گیومه رخ می‌دهد. سوم، نتیجه‌نگرفتن که اغلب به‌دلیل حساسیت ‎-name‎ به حروف بزرگ و کوچک است؛ در این حالت از ‎-iname‎ استفاده کنید.

نکته خودکارسازی

بسیاری از کارهای پاک‌سازی با find را می‌توان زمان‌بندی کرد؛ مثلاً حذف خودکار لاگ‌های قدیمی‌تر از ۳۰ روز هر شب. برای این کار می‌توانید فرمان find را در یک کرون‌جاب روی سرور قرار دهید.

find در برابر locate و مدیریت فایل روی سرور وب‌داده

شاید بپرسید پس locate چه می‌شود؟ locate (و جانشین مدرن آن plocate که پیش‌فرض اوبونتو 22.04 و دبیان 12 است) به‌جای پیمایش زنده، در یک پایگاه‌داده از پیش‌ساخته جستجو می‌کند؛ برق‌آسا اما ممکن است فایل‌های تازه را نشناسد. جدول زیر تفاوت را روشن می‌کند:
معیارfindlocate
روش کارپیمایش زنده فایل‌سیستمجستجو در پایگاه‌داده از پیش‌ساخته
به‌روز بودنهمیشه لحظه‌ای و دقیقوابسته به آخرین updatedb (معمولاً روزانه)
سرعتکندتر روی درخت‌های بزرگبسیار سریع
فیلترهابسیار غنی (حجم، زمان، مجوز، اجرا)عمدتاً بر اساس نام
در عمل، find انتخاب درست برای جستجوی دقیق، شرط‌های پیچیده و اجرای دستور روی نتایج است؛ locate برای یک یافتن سریع نام فایل کافی است. تسلط بر find یعنی کنترل کامل بر فایل‌سیستم سرور — مهارتی که هر مدیری روی سرور اختصاصی یا مجازی به آن نیاز دارد.
ما در وب‌داده زیرساخت سرورهای مجازی و اختصاصی را روی سخت‌افزار HPE نسل ۱۰ و ۱۱ در دیتاسنترهای ایران، آلمان و هلند ارائه می‌کنیم و دسترسی کامل ریشه (root) در اختیار شماست تا بتوانید آزادانه از ابزارهایی مثل find برای مدیریت فایل‌ها استفاده کنید. پشتیبانی فنی ۲۴ ساعته هم در کنار شماست:
  • ✅ دسترسی کامل root و آزادی نصب هر ابزار خط فرمان لینوکس.
  • ✅ زیرساخت HPE Gen10/Gen11 با دیسک‌های پرسرعت برای پیمایش سریع فایل‌سیستم.
  • ✅ امکان تهیه اسنپ‌شات پیش از عملیات حذفی، برای امنیت کار با ‎-delete‎.
  • ✅ پشتیبانی فنی ۲۴ ساعته برای راهنمایی در مدیریت سرور.
📌 برای آشنایی بیشتر با سایر ابزارهای مدیریتی، فهرست دستورات خط فرمان لینوکس ما هم می‌تواند کمک‌کننده باشد.

از مستندات رسمی

مستندات رسمی GNU Findutils تأکید می‌کند که find عبارت‌های جستجو را از چپ به راست ارزیابی می‌کند؛ به همین دلیل ترتیب نوشتن شرط‌ها و اکشن‌ها (به‌ویژه ‎-delete‎) در نتیجه نهایی تعیین‌کننده است. منبع: GNU Findutils Manual.

محدودیت‌ها را صادقانه بدانید

find جادو نیست. روی فایل‌سیستم‌های بسیار بزرگ کند می‌شود و ممکن است بار I/O ایجاد کند؛ برای جستجوی پرتکرارِ صرفاً بر اساس نام، locate سریع‌تر است. سینتکس آن هم برای تازه‌کارها گیج‌کننده است و یک اشتباه کوچک در ‎-exec‎ یا ‎-delete‎ می‌تواند پرهزینه باشد. همیشه روی محیط تست یا با بکاپ تمرین کنید.

سؤالات متداول درباره دستور find

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

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

به‌جای ‎-name‎ از ‎-iname‎ استفاده کنید. برای نمونه find . -iname "backup*" هم backup و هم Backup و BACKUP را پیدا می‌کند.

از گزینه ‎-size‎ با علامت + استفاده کنید؛ مثلاً find / -type f -size +500M فایل‌های بزرگ‌تر از ۵۰۰ مگابایت را در کل سیستم می‌یابد. واحدها k برای کیلوبایت، M برای مگابایت و G برای گیگابایت هستند.

بله، با گزینه ‎-delete‎ یا با ‎-exec rm {} +‎. اما این کار برگشت‌ناپذیر است. روش امن این است که ابتدا فرمان را بدون ‎-delete‎ اجرا کنید، خروجی را با دقت ببینید و تنها پس از اطمینان، گزینه حذف را در انتهای فرمان اضافه کنید. تهیه بکاپ پیش از حذف انبوه ضروری است.

یعنی کاربر فعلی اجازه خواندن برخی پوشه‌ها را ندارد. می‌توانید فرمان را با sudo اجرا کنید یا با افزودن ‎2>/dev/null‎ به انتهای دستور، این پیام‌ها را پنهان کنید تا فقط نتایج معتبر نمایش داده شوند.

با ‎\;‎ دستور یک‌بار برای هر فایل اجرا می‌شود؛ پس اگر هزار فایل پیدا شود، هزار بار دستور صدا زده می‌شود. با ‎+‎ همه فایل‌ها یک‌جا به دستور داده می‌شوند که بسیار کارآمدتر است. برای حجم زیاد فایل، حالت ‎+‎ یا ابزار xargs را ترجیح دهید.

از گزینه ‎-maxdepth 1‎ استفاده کنید؛ مثلاً find . -maxdepth 1 -name "*.conf" فقط در پوشه جاری جستجو می‌کند. این گزینه باید پیش از شرط‌های دیگر نوشته شود.

با گزینه ‎-mtime‎: عدد منفی یعنی «اخیر» و عدد مثبت یعنی «قدیمی‌تر». برای نمونه find /var/www -mtime -3 فایل‌های تغییریافته در سه روز اخیر را نشان می‌دهد. برای دقت بر حسب دقیقه از ‎-mmin‎ استفاده کنید.

نسخه GNU این دستور (رایج در اوبونتو، دبیان، CentOS و سایر توزیع‌های اصلی) رفتار یکسانی دارد. تفاوت‌های جزئی ممکن است در سیستم‌های BSD یا macOS دیده شود، اما گزینه‌های پایه‌ای مثل ‎-name‎، ‎-type‎ و ‎-size‎ تقریباً همه‌جا یکسان‌اند.

جمع‌بندی؛ از جستجوی فایل تا مدیریت حرفه‌ای سرور

دستور find یکی از آن مهارت‌هایی است که با کمی تمرین، کار روزمره با سرور را زیر و رو می‌کند. دیدیم که ساختار آن از سه بخش مسیر، شرط و اکشن تشکیل شده و با ترکیب فیلترهای نام، نوع، حجم، زمان، مالک و مجوز می‌توان دقیقاً به فایل‌های موردنظر رسید. همچنین یاد گرفتیم چطور با ‎-exec‎ و xargs روی نتایج دستور اجرا کنیم و چرا باید با ‎-delete‎ بسیار محتاط باشیم.
اگر تازه شروع کرده‌اید، نگران پیچیدگی سینتکس نباشید؛ با چند مثال ساده و تمرین روی یک پوشه آزمایشی، خیلی زود به آن مسلط می‌شوید. مهم‌ترین توصیه ما این است که پیش از هر عملیات حذفی، یک‌بار فرمان را بدون اکشن اجرا کنید و خروجی را ببینید. در صورتی که سوالی داشتید می‌توانید در بخش نظرات با ما در ارتباط باشید.
وب داده
وب داده

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

مقاله‌ها: 7
پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *