Future ForgeFuture ForgeFuture ForgeFuture Forge
خدماتنمونه‌کارهاپکیج‌هاابزارهای رایگانیادداشت‌هادرباره ماتماس
شروع پروژه
  1. خانه
  2. /یادداشت‌ها
Future ForgeFuture Forge

استودیوی مهندسی محصول — طراحی، ساخت و استقرار نرم‌افزار.

پروژه‌تان را مطرح کنید

ارتباط

hello@futureforge.ir09128464105
Future ForgeFuture Forge

استودیوی مهندسی محصول — طراحی، ساخت و استقرار نرم‌افزار.

خدمات

طراحی و ساخت محصولتوسعه فول‌استکممیزی مهندسیمشاوره معماریزیرساخت و استقرارهوش مصنوعی در محصول

کاوش

نمونه‌کارهایادداشت‌هاپرسش‌هاپکیج‌ها

ابزارهای رایگان

ممیزی مهندسیمشاور معماریتخمین پروژهابزار پرامپت

شرکت

درباره ماتماسحریم خصوصیشرایط استفاده

پروژه‌تان را مطرح کنید

مسئله و محدودیت را بنویسید. اگر تطابق داشته باشیم، برای گفتگو هماهنگ می‌کنیم.

پروژه‌تان را مطرح کنید

ارتباط

hello@futureforge.ir09128464105
GitHubLinkedIn

© 2026 FutureForge. همه حقوق محفوظ است.

خانهخدماتابزارهای رایگانشروع پروژه
عملیات و استقرار

find در لینوکس: پیدا کردن فایل بر اساس نام، زمان و نوع

کار با find برای نام، اندازه، زمان ویرایش، -exec، حذف امن و تفاوت با grep و locate در لینوکس.

سا
سهیل ابراهیم‌پور

بنیان‌گذار و مهندس محصول

·۲۹ شهریور ۱۴۰۵·8 دقیقه مطالعه
find لینوکسfind -namefind -mtimefind -execlocatefd
ترمینال find -name و استیکی یادداشت دستور

grep داخل محتوا می‌گردد؛ find روی درخت فایل‌سیستم راه می‌رود و بر اساس نام، نوع، مجوز، اندازه و زمان انتخاب می‌کند. وقتی می‌پرسید «کدام فایل‌های لاگ از هفت روز پیش بزرگ‌تر از ۱۰۰ مگابایت‌اند؟» ابزار درست find است نه جست‌وجوی متن.

قدرت find در ترکیب آزمون‌ها و عمل‌هاست: پیدا کن، چاپ کن، یا با احتیاط روی هر نتیجه فرمانی اجرا کن. خطرش هم همانجاست — -delete یا -exec rm روی مسیر اشتباه خسارت واقعی می‌سازد.

جریان Path به -name به -type به -mtime

پاسخ کوتاه

شروع از یک ریشهٔ مشخص: `find /var/log -name '*.log' -type f`. زمان: `-mtime -7` برای تغییر در ۷ روز اخیر. اندازه: `-size +100M`. اجرای فرمان: ترجیحاً `-print0` با `xargs -0` یا `-exec ... {} +`. قبل از حذف، اول فقط چاپ کنید. برای جست‌وجوی تعاملی نام روی دسکتاپ، ابزارهای جدیدتر مثل fd سریع‌ترند؛ روی سرور، find استاندارد قابل‌اعتماد است.

اول مسیر را تنگ کنید، بعد شرط؛ find از / بدون فیلتر هم کند است هم پرحرف.

شکل پایه

bash

find . -name 'config.yaml' find . -iname 'readme*' find /etc -type f -name '*.conf' 2>/dev/null | head

-name به کوچک/بزرگ‌حساس است؛ -iname نیست. الگو glob است نه regex مگر -regex. نقل‌قول دور الگو مهم است تا شل زودتر * را باز نکند.

نوع، عمق و هرس مسیر

bash

find . -type d -name 'node_modules' find . -type f -name '*.js' -not -path '*/node_modules/*' find . -maxdepth 2 -type f find /var -path '/var/lib/docker/*' -prune -o -name '*.log' -print

-type f فایل عادی، d پوشه، l لینک نمادین. -maxdepth جلوی فرورفتن بی‌نهایت را می‌گیرد. -prune برای رد کردن زیردرخت‌های گران (مثل docker volumes) حیاتی است.

زمان و اندازه

bash

find /var/log -type f -mtime +14 find /var/log -type f -mtime -1 find /tmp -type f -mmin -30 find /var/log -type f -size +100M -ls find . -type f -empty

-mtime +14 یعنی آخرین تغییر محتوا بیش از ۱۴ روز پیش؛ -mtime -1 یعنی در ۲۴ ساعت اخیر. واحد روز برای mtime و دقیقه برای mmin را قاطی نکنید. -size +100M بزرگ‌تر از ۱۰۰ مگابایت.

مجوز و مالک

bash

find /var/www -type f -perm -o=w find /home -type f -user ubuntu -name '*.pem' 2>/dev/null find . -type f -perm 777

یافتن فایل world-writable یا کلید خصوصی رهاشده بخشی از سخت‌سازی سبک است. خروجی را قبل از هر اقدام جمعی مرور کنید.

عمل روی نتایج: print0 و xargs

bash

find . -type f -name '*.log' -print0 | xargs -0 ls -lh find . -type f -name '*.tmp' -print0 | xargs -0 rm -f

نام فایل با فاصله یا خط جدید بدون -print0 / -0 می‌شکند. عادت کنید همیشه حالت null-delimited را برای اتوماسیون به کار ببرید.

-exec و تفاوت {} \; با {} +

bash

find . -type f -name '*.py' -exec grep -H 'TODO' {} + find . -name '*.bak' -exec rm -i {} \;

{} + چند فایل را به یک اجرای فرمان می‌دهد (کاراتر)؛ \; برای هر فایل جدا اجرا می‌کند. rm -i برای یادگیری خوب است؛ در cron تعاملی نیست — آنجا اول dry-run چاپ کنید.

حذف امن: الگوی دو مرحله‌ای

  1. find با همان شرط فقط -print یا -ls.
  2. مرور لیست؛ اگر درست بود، همان شرط با -delete یا xargs rm.
  3. روی production، بکاپ/snapshot را قبل از پاکسازی دسته‌ای جدی بگیرید.

bash

find /var/log/myapp -type f -name '*.log' -mtime +30 -print # پس از تأیید: find /var/log/myapp -type f -name '*.log' -mtime +30 -delete

-delete خودش را به سمت راست آزمون‌ها حساس می‌داند؛ ترتیب عبارت‌ها را از مستند نسخه بخوانید. مسیر ریشه را دوبار چک کنید.

find در برابر locate و fd

ابزارنقطهٔ قوتمحدودیت
findشرط زنده روی متادیتا، همه‌جامی‌تواند روی درخت بزرگ کند باشد
locate/mlocateجست‌وجوی نام از DB سریعDB ممکن است کهنه باشد؛ نه همهٔ شرط‌ها
fdUX مدرن، سرعت، ignoreممکن است نصب نباشد

locate بعد از updatedb می‌درخشد؛ برای فایل تازه‌ساخته‌شده همان لحظه find مطمئن‌تر است.

ترکیب با grep

bash

find src -type f -name '*.go' -print0 | xargs -0 grep -n 'ListenAndServe' find /etc -type f -name '*.conf' -exec grep -l 'Listen ' {} +

این الگوی کلاسیک «اول فایل‌ها را با متا محدود کن، بعد محتوا را بجو» است و از grep -r بی‌قید روی کل دیسک بهتر است.

اشتباه‌های رایج

  • شروع از / بدون prune و پر شدن بار IO.
  • فراموش نقل‌قول -name '*.log' و انبساط شل.
  • xargs بدون -0 روی نام‌های فاصله‌دار.
  • -exec rm بدون چاپ قبلی.
  • اشتباه گرفتن -mtime +1 با «دیروز» به معنای تقویمی سست.

سناریو: پاکسازی دیسک قبل از پر شدن

وقتی df هشدار می‌دهد، به‌جای حذف کور:

bash

df -h find /var/log -type f -size +50M -mtime +7 -ls 2>/dev/null | head find /tmp -type f -mtime +3 -ls 2>/dev/null | head

بزرگان را پیدا کنید، به صاحب سرویس بگویید، سیاست retention را درست کنید — نه اینکه هر شب همهٔ /var را جارو کنید.

find و لینک نمادین

bash

find . -type l find -L . -type f -name '*.conf'

به‌طور پیش‌فرض find وارد لینک پوشه نمی‌شود مگر سیاست -follow/-L. روی درخت‌هایی با لینک حلقوی مراقب باشید.

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

-atime به دسترسی مربوط است و روی بعضی فایل‌سیستم‌ها با noatime بی‌معنا یا گمراه‌کننده می‌شود. برای پاکسازی لاگ معمولاً -mtime یا -ctime عملی‌تر است. مستند mount گزینه‌ها را ببینید.

خروجی ماشین‌خوان برای اسکریپت

bash

find /srv/data -type f -name '*.csv' -printf '%p\t%s\t%T@\n' | head

-printf در GNU find کنترل قالب می‌دهد؛ برای قابل‌حمل بودن POSIXمحض، به -print و پردازش بعدی تکیه کنید و وابستگی GNU را در README بنویسید.

چه زمانی find نه؟

  • جست‌وجوی محتوای متن: grep/rg.
  • ایندکس نام روی دسکتاپ روزمره: ابزار UI یا fd.
  • لیست بستهٔ نصب‌شده: apt/dpkg/rpm نه find روی /usr.

find و بکاپ قبل از پاکسازی

حتی وقتی لیست را مرور کرده‌اید، روی دادهٔ کاربر یک کپی یا snapshot بگیرید. دستور حذف دسته‌ای برگشت‌ناپذیر است؛ هزینهٔ بکاپ کوتاه معمولاً کمتر از بازیابی اضطراری است.

در تیم، اسکریپت پاکسازی را با متغیر DRY_RUN بنویسید که پیش‌فرضش فقط چاپ باشد و حذف فقط با پرچم صریح فعال شود.

bash

DRY_RUN=1 find /var/tmp/myapp -type f -mtime +14 -print # حذف فقط وقتی DRY_RUN=0 و تأیید انسانی

مجوز کافی و خطای stderr

find روی مسیر بدون اجرا/خواندن پوشه خطا می‌دهد. در اسکریپت‌ها اغلب stderr را جدا لاگ کنید تا با لیست نتایج قاطی نشود. خاموش کردن کامل خطاها عیب‌یابی را سخت می‌کند.

bash

find /home -name '*.pem' 2>/tmp/find.err | tee /tmp/find.out | head wc -l /tmp/find.err /tmp/find.out

تفاوت -mtime و -daystart

در GNU find گزینه‌هایی مثل -daystart تفسیر «روز» را به نیمه‌شب نزدیک می‌کنند. اگر گزارش انطباقی می‌نویسید، رفتار پیش‌فرض را در مستند نسخه بخوانید و در تست با فایل touchشده با زمان مشخص تأیید کنید.

find برای موجودی نرم‌افزار سبک

گاهی می‌خواهید بدانید کجا باینری یا فایل پیکربندی رها شده بدون بستهٔ رسمی. find جایگزین dpkg/rpm نیست ولی برای مسیرهای سفارشی مثل /opt و /usr/local مفید است:

bash

find /opt /usr/local -type f -executable 2>/dev/null | head find /etc -type f -name '*.bak' 2>/dev/null | head

خروجی را با فهرست بسته مقایسه کنید تا فایل یتیم بعد از حذف سرویس پیدا شود. این کار بخشی از بهداشت سرور است که معمولاً عقب می‌افتد تا دیسک پر شود.

زمان‌بندی چنین جارویی را با ionice/nice در ساعات کم‌بار انجام دهید تا روی دیسک تولید فشار نیاورید.

خلاصه

find راه رفتن هدفمند روی درخت فایل است: نام، نوع، زمان، اندازه، مجوز، سپس چاپ یا عمل. مسیر را محدود کنید، null-delimited کار کنید، حذف را دو مرحله‌ای کنید. با grep برای محتوا ترکیبش کنید و با locate/fd برای سرعت نام آشنا باشید.

سوالات متداول

چرا find چیزی برنمی‌گرداند؟

مجوز خواندن پوشه، مسیر غلط، یا glob بدون نقل‌قول. با ls روی همان ریشه شروع کنید.

تفاوت -delete و -exec rm چیست؟

-delete توکار find است؛ rm انعطاف پرچم‌های rm را دارد. هر دو خطرناک‌اند اگر شرط اشتباه باشد.

چطور فقط فایل‌های تغییر یافته امروز را ببینم؟

`find . -type f -mtime -1` نقطهٔ شروع است؛ برای دقیق‌تر، -newermt با تاریخ GNU find.

منابع و مراجع

  • find(1) — Linux manual page: https://man7.org/linux/man-pages/man1/find.1.html
  • GNU Findutils Manual: https://www.gnu.org/software/findutils/manual/html_mono/find.html
  • xargs(1): https://man7.org/linux/man-pages/man1/xargs.1.html
  • locate(1) (mlocate/plocate family): https://man7.org/linux/man-pages/man1/locate.1.html

نویسنده

سا

سهیل ابراهیم‌پور بنیان‌گذار FutureForge است. روی طراحی محصول، معماری و استقرار نرم‌افزار سفارشی کار می‌کند.

یادداشت‌های مرتبط

یادداشت‌های مرتبط

دسته‌بندی‌ها

خدمات مرتبط

از یادداشت تا پروژه

اگر موضوع این مقاله به سیستم یا محصول شما نزدیک است، می‌توانیم درباره دامنه واقعی صحبت کنیم.

اگر در انتخاب معماری یا مسیر توسعه مطمئن نیستید، می‌توانید درباره پروژه صحبت کنیم.

مسئله و محدودیت را بنویسید. اگر تطابق داشته باشیم، برای گفتگو هماهنگ می‌کنیم.

سهیل ابراهیم‌پور
یادداشت‌ها
Logging چیست؟ ثبت رویداد برای تشخیص و پاسخ به حادثه
تعیین اندازهٔ سرور: RAM، CPU و Storage بر اساس Workload
Docker در برابر Kubernetes؛ مقایسهٔ دقیق نه شعار
چرا همیشه به Kubernetes نیاز ندارید؟
Kubernetes چیست؟ اجرای مقاوم workloadهای کانتینری

عملیات و استقرار

Logging چیست؟ ثبت رویداد برای تشخیص و پاسخ به حادثه

۲۹ شهریور ۱۴۰۵

عملیات و استقرار

تعیین اندازهٔ سرور: RAM، CPU و Storage بر اساس Workload

۲۹ شهریور ۱۴۰۵

عملیات و استقرار

Docker در برابر Kubernetes؛ مقایسهٔ دقیق نه شعار

۲۹ شهریور ۱۴۰۵

عملیات و استقرار

چرا همیشه به Kubernetes نیاز ندارید؟

۲۹ شهریور ۱۴۰۵

عملیات و استقرار

Kubernetes چیست؟ اجرای مقاوم workloadهای کانتینری

۲۹ شهریور ۱۴۰۵
همه یادداشت‌ها219
معماری نرم‌افزار13
واژه‌نامه37
عملیات و استقرار87
مهندسی محصول74
راهنمای وب8
طراحی و ساخت محصول
توسعه فول‌استک
ممیزی مهندسی
مشاوره معماری
زیرساخت و استقرار
پروژه‌تان را مطرح کنید
ابزارهای رایگان
پروژه‌تان را مطرح کنید