Featured Image Alt:
–>

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

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

در این مقاله، به‌صورت کامل و کاربردی یاد می‌گیرید چطور با find و locate در لینوکس فایل‌ها را پیدا کنید، تفاوت این دو دستور چیست، چطور بر اساس نام، نوع، حجم، زمان، مالک، گروه و سطح دسترسی جستجو کنید، چطور فایل‌های پیدا شده را حذف یا ویرایش کنید، چطور با grep داخل فایل‌ها جستجو کنید و در نهایت چطور از ابزارهایی مثل whereis و which برای پیدا کردن مسیر برنامه‌ها استفاده کنید.

سطح: مقدماتی تا متوسط | مناسب برای: مدیران سایت، کاربران VPS، مدیران سرور لینوکس، توسعه‌دهندگان، کارشناسان پشتیبانی هاستینگ و افرادی که با ترمینال لینوکس کار می‌کنند.

فهرست مطالب

چرا جستجوی فایل در لینوکس مهم است؟

در محیط‌های لینوکسی، مخصوصاً روی سرور، فایل‌ها در مسیرهای مختلفی قرار می‌گیرند. فایل‌های کانفیگ معمولاً در /etc هستند، لاگ‌ها در /var/log قرار می‌گیرند، فایل‌های سایت ممکن است در /home/user/public_html یا /var/www باشند، فایل‌های موقت در /tmp ساخته می‌شوند و داده‌های اپلیکیشن‌ها در مسیرهای متفاوت ذخیره می‌شوند.

اگر مسیر دقیق فایل را ندانید، جستجو از طریق محیط گرافیکی یا بررسی دستی پوشه‌ها هم کند است و هم پرخطا. اما با دستورات find و locate می‌توانید در چند ثانیه فایل موردنظر را پیدا کنید.

چند نمونه از کاربردهای واقعی جستجوی فایل در لینوکس:

  • پیدا کردن فایل‌های حجیم که باعث پر شدن دیسک سرور شده‌اند.
  • پیدا کردن فایل‌های لاگ خطا مثل error_log.
  • پیدا کردن فایل‌های کانفیگ مثل nginx.conf، php.ini یا my.cnf.
  • پیدا کردن فایل‌هایی که اخیراً تغییر کرده‌اند.
  • پیدا کردن فایل‌های با سطح دسترسی ناامن مثل ۷۷۷.
  • پیدا کردن فایل‌های متعلق به یک کاربر خاص.
  • جستجو داخل فایل‌ها برای پیدا کردن یک عبارت، دامنه، IP یا مقدار کانفیگ.
  • حذف یا فشرده‌سازی دسته‌ای فایل‌های قدیمی.

اگر از سرور مجازی ایران، سرور مجازی آلمان یا هر نوع VPS لینوکسی استفاده می‌کنید، یادگیری این دستورات برای عیب‌یابی و نگهداری سرور ضروری است.

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

برای جستجوی فایل در لینوکس معمولاً دو دستور اصلی داریم: find و locate. این دو ابزار هدف مشابهی دارند، اما روش کارشان متفاوت است.

ویژگیfindlocate
روش جستجوجستجوی زنده در فایل‌سیستمجستجو در دیتابیس ایندکس‌شده
سرعتدر مسیرهای بزرگ کندتر استبسیار سریع است
دقت لحظه‌ایبسیار دقیق و به‌روزوابسته به آخرین اجرای updatedb
فیلترهابسیار پیشرفته؛ نام، نوع، حجم، زمان، مالک، سطح دسترسی و…بیشتر مناسب جستجوی سریع مسیر و نام فایل
نیاز به نصبمعمولاً به‌صورت پیش‌فرض نصب استممکن است نیاز به نصب plocate یا mlocate داشته باشد
مناسب برایعیب‌یابی دقیق و عملیات مدیریتیپیدا کردن سریع مسیر فایل

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

نصب locate در Ubuntu، Debian و AlmaLinux

دستور find معمولاً به‌صورت پیش‌فرض در اکثر توزیع‌های لینوکس نصب است. اما برای استفاده از locate ممکن است لازم باشد پکیج مربوط به آن را نصب کنید.

نصب locate در Ubuntu و Debian

در نسخه‌های جدید اوبونتو، معمولاً پکیج plocate استفاده می‌شود:

sudo apt update
sudo apt install plocate -y

در سیستم‌های قدیمی‌تر ممکن است از mlocate استفاده شود:

sudo apt install mlocate -y

نصب locate در AlmaLinux، Rocky Linux و CentOS

sudo dnf install mlocate -y

یا در سیستم‌های قدیمی‌تر:

sudo yum install mlocate -y

بعد از نصب، برای ساخت یا به‌روزرسانی دیتابیس locate این دستور را اجرا کنید:

sudo updatedb

updatedb چیست و چرا برای locate مهم است؟

دستور locate برخلاف find مستقیم داخل فایل‌سیستم نمی‌گردد. این دستور از یک دیتابیس آماده استفاده می‌کند که مسیر فایل‌ها در آن ذخیره شده است. این دیتابیس با دستور updatedb ساخته یا به‌روزرسانی می‌شود.

به همین دلیل، اگر فایلی را همین الان ایجاد کرده باشید، ممکن است locate آن را نشان ندهد؛ چون دیتابیس هنوز آپدیت نشده است. در این حالت باید دیتابیس را دستی به‌روزرسانی کنید:

sudo updatedb

سپس دوباره جستجو کنید:

locate filename

در بیشتر سیستم‌ها، updatedb به‌صورت روزانه توسط cron یا systemd timer اجرا می‌شود. اما در سرورهای موقت، کانتینرهای Docker یا محیط‌هایی که دائماً بازسازی می‌شوند، ممکن است دیتابیس locate وجود نداشته باشد یا قدیمی باشد.

تنظیم مسیرهای حذف‌شده از ایندکس locate

رفتار updatedb معمولاً از طریق فایل زیر کنترل می‌شود:

/etc/updatedb.conf

برای مشاهده یا ویرایش آن:

sudo nano /etc/updatedb.conf

در این فایل، متغیرهایی مثل PRUNEPATHS و PRUNEFS مشخص می‌کنند چه مسیرها یا فایل‌سیستم‌هایی ایندکس نشوند. برای مثال ممکن است مسیرهایی مثل /tmp، /media یا /var/lib/docker از ایندکس خارج شده باشند.

اگر نمی‌خواهید مسیر خاصی در دیتابیس locate ثبت شود، آن را به PRUNEPATHS اضافه کنید و سپس دستور زیر را اجرا کنید:

sudo updatedb

آموزش استفاده از دستور locate

دستور locate برای جستجوی سریع فایل‌ها بر اساس نام یا بخشی از مسیر استفاده می‌شود.

جستجوی ساده با locate

locate nginx.conf

این دستور همه مسیرهایی را که عبارت nginx.conf در آن‌ها وجود دارد نمایش می‌دهد.

جستجوی بخشی از نام فایل

locate error_log

این دستور برای پیدا کردن فایل‌های لاگ خطا در مسیرهای مختلف سرور کاربردی است.

جستجو فقط در نام فایل، نه کل مسیر

به‌صورت پیش‌فرض، locate کل مسیر را بررسی می‌کند. اگر می‌خواهید فقط نام فایل بررسی شود، از گزینه -b استفاده کنید:

locate -b wp-config.php

برای دقیق‌تر شدن می‌توانید از بک‌اسلش قبل از نام استفاده کنید تا فقط basename بررسی شود:

locate -b '\wp-config.php'

نمایش فقط فایل‌هایی که واقعاً هنوز وجود دارند

گاهی دیتابیس locate قدیمی است و فایل‌هایی را نشان می‌دهد که دیگر حذف شده‌اند. برای نمایش فقط مسیرهای موجود، از گزینه -e استفاده کنید:

locate -e nginx.conf

بررسی آمار دیتابیس locate

locate -S

این دستور اطلاعاتی درباره دیتابیس locate، تعداد مسیرها و حجم دیتابیس نمایش می‌دهد.

محدود کردن تعداد نتایج locate

اگر نتیجه‌ها زیاد است، می‌توانید تعداد خروجی‌ها را محدود کنید:

locate -n 20 log

این دستور فقط ۲۰ نتیجه اول را نشان می‌دهد.

آموزش استفاده از دستور find

دستور find یکی از قدرتمندترین ابزارهای لینوکس برای جستجوی فایل‌ها و پوشه‌هاست. ساختار کلی آن به این شکل است:

find [مسیر شروع] [شرط‌ها] [عملیات]

مثلاً:

find /var/log -type f -name "*.log"

در این دستور:

  • /var/log مسیر شروع جستجو است.
  • -type f یعنی فقط فایل‌های معمولی را پیدا کن.
  • -name "*.log" یعنی نام فایل با .log تمام شود.

اگر مسیر شروع را مشخص نکنید، find از مسیر فعلی جستجو را شروع می‌کند:

find -name "*.conf"

بهتر است همیشه مسیر را مشخص کنید تا هم خروجی دقیق‌تر باشد و هم سرور فشار کمتری تحمل کند.

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

جستجوی دقیق با حساسیت به حروف

find /etc -name "nginx.conf"

این دستور در مسیر /etc به‌دنبال فایلی با نام دقیق nginx.conf می‌گردد.

جستجوی بدون حساسیت به حروف

find /etc -iname "nginx.conf"

گزینه -iname تفاوت حروف کوچک و بزرگ را نادیده می‌گیرد.

جستجو با wildcard

find /var/log -name "*.log"

این دستور همه فایل‌هایی را پیدا می‌کند که نامشان با .log تمام می‌شود.

نکته مهم: الگوهای جستجو را داخل کوتیشن قرار دهید. اگر کوتیشن نگذارید، ممکن است Shell قبل از اجرای find الگو را تفسیر کند و نتیجه غیرمنتظره بگیرید.

جستجوی معکوس با not

برای پیدا کردن فایل‌هایی که نامشان با یک الگو مطابقت ندارد:

find /var/log -type f -not -name "*.gz"

یا:

find /var/log -type f \! -name "*.gz"

جستجو با چند شرط نام

find /var/log \( -name "*.log" -o -name "*.err" \)

در این دستور، -o یعنی OR. بنابراین فایل‌هایی با پسوند .log یا .err نمایش داده می‌شوند.

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

گزینه -type مشخص می‌کند دنبال چه نوع آبجکتی در فایل‌سیستم هستید.

نوعمعنی
fفایل معمولی
dپوشه یا Directory
lلینک سمبلیک
cCharacter Device
bBlock Device
sSocket

پیدا کردن فایل‌های معمولی

find /home -type f -name "*.php"

پیدا کردن پوشه‌ها

find /home -type d -name "cache"

پیدا کردن لینک‌های سمبلیک

find /var/www -type l

پیدا کردن فایل‌های کانفیگ در مسیر مشخص

find /etc -type f -name "*.conf"

این دستور برای مدیران سرور بسیار کاربردی است؛ چون بسیاری از تنظیمات سرویس‌ها در فایل‌های .conf قرار دارند.

جستجوی فایل بر اساس حجم

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

واحدهای رایج در size

  • c: بایت
  • k: کیلوبایت
  • M: مگابایت
  • G: گیگابایت

پیدا کردن فایل‌های بزرگ‌تر از ۱۰۰ مگابایت

find /home -type f -size +100M

پیدا کردن فایل‌های بزرگ‌تر از ۱ گیگابایت

find / -type f -size +1G 2>/dev/null

بخش ۲>/dev/null خطاهای Permission denied را مخفی می‌کند تا خروجی تمیزتر شود.

پیدا کردن فایل‌های کوچک‌تر از ۱۰ کیلوبایت

find /home -type f -size -10k

پیدا کردن فایل‌هایی با اندازه دقیق

find /tmp -type f -size 0c

این دستور فایل‌های صفر بایتی را پیدا می‌کند.

جستجوی فایل بر اساس زمان تغییر، دسترسی و تغییر متادیتا

در لینوکس، برای فایل‌ها چند نوع زمان مهم وجود دارد:

  • mtime: آخرین زمان تغییر محتوای فایل
  • atime: آخرین زمان دسترسی یا خواندن فایل
  • ctime: آخرین زمان تغییر متادیتا مثل مالکیت یا سطح دسترسی

پیدا کردن فایل‌های تغییرکرده در ۲۴ ساعت گذشته

find /home -type f -mtime -1

عدد یعنی کمتر از یک روز گذشته.

پیدا کردن فایل‌های تغییرکرده بیشتر از ۳۰ روز قبل

find /var/log -type f -mtime +30

پیدا کردن فایل‌های تغییرکرده دقیقاً حدود ۱ روز قبل

find /home -type f -mtime 1

در عمل، معمولاً یا بیشتر استفاده می‌شود؛ چون مقدار دقیق ممکن است کمتر کاربردی باشد.

جستجو بر اساس دقیقه

برای جستجوی دقیق‌تر می‌توانید از -mmin استفاده کنید:

find /home -type f -mmin -60

این دستور فایل‌هایی را نشان می‌دهد که در ۶۰ دقیقه گذشته تغییر کرده‌اند.

پیدا کردن فایل‌های جدیدتر از یک فایل مرجع

ابتدا یک فایل مرجع بسازید:

touch /tmp/reference-file

سپس فایل‌هایی را پیدا کنید که بعد از آن تغییر کرده‌اند:

find /home -type f -newer /tmp/reference-file

این روش برای بررسی تغییرات بعد از یک آپدیت، نصب افزونه، Deploy یا رخداد مشکوک بسیار مفید است.

جستجوی فایل بر اساس مالک و گروه

در سرورهای لینوکسی، مالکیت اشتباه فایل‌ها می‌تواند باعث خطاهای زیادی شود؛ مثلاً سایت نتواند فایل آپلود کند، کش ساخته نشود یا وب‌سرور به فایل‌ها دسترسی نداشته باشد.

پیدا کردن فایل‌های متعلق به یک کاربر

find /home -user username

پیدا کردن فایل‌های متعلق به یک گروه

find /home -group groupname

پیدا کردن فایل‌هایی که کاربر یا گروه معتبر ندارند

find /home -nouser
find /home -nogroup

این دستورها وقتی کاربرد دارند که کاربری حذف شده ولی فایل‌هایش روی سرور باقی مانده‌اند.

جستجوی فایل بر اساس سطح دسترسی

سطح دسترسی یا permission در لینوکس نقش مهمی در امنیت سایت و سرور دارد. با find می‌توانید فایل‌ها و پوشه‌هایی با permission خاص را پیدا کنید.

پیدا کردن فایل‌هایی با سطح دسترسی دقیق ۷۷۷

find /home -type f -perm 0777

پیدا کردن پوشه‌هایی با سطح دسترسی دقیق ۷۷۷

find /home -type d -perm 0777

وجود فایل‌ها یا پوشه‌های ۷۷۷ در مسیر سایت می‌تواند ریسک امنیتی جدی باشد.

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

find /home -type f -perm -0644

علامت - قبل از permission یعنی فایل‌هایی را پیدا کن که حداقل این مجوزها را دارند.

پیدا کردن فایل‌های قابل نوشتن توسط همه کاربران

find /home -type f -perm -0002

این دستور فایل‌هایی را پیدا می‌کند که world-writable هستند؛ یعنی همه کاربران می‌توانند در آن‌ها بنویسند.

پیدا کردن فایل‌های SUID

find / -perm -4000 -type f 2>/dev/null

فایل‌های SUID از نظر امنیتی حساس هستند و باید روی سرورهای عمومی بررسی شوند.

پیدا کردن فایل‌ها و پوشه‌های خالی

برای پیدا کردن فایل‌ها یا پوشه‌های خالی، از گزینه -empty استفاده می‌شود.

پیدا کردن فایل‌های خالی

find /tmp -type f -empty

پیدا کردن پوشه‌های خالی

find /tmp -type d -empty

حذف پوشه‌های خالی

find /tmp -type d -empty -delete

هشدار: قبل از استفاده از -delete ابتدا همان دستور را بدون -delete اجرا کنید تا مطمئن شوید فقط موارد درست انتخاب شده‌اند.

اجرای عملیات روی نتایج با exec و xargs

قدرت اصلی find فقط در پیدا کردن فایل‌ها نیست؛ بلکه می‌توانید روی نتایج پیدا شده عملیات انجام دهید. برای این کار معمولاً از -exec یا xargs استفاده می‌شود.

استفاده از exec

ساختار کلی:

find [شرط‌ها] -exec command {} \;

در این ساختار، {} با مسیر هر فایل پیدا شده جایگزین می‌شود.

تغییر سطح دسترسی فایل‌های PHP

find /home/example/public_html -type f -name "*.php" -exec chmod 644 {} \;

تغییر سطح دسترسی پوشه‌ها

find /home/example/public_html -type d -exec chmod 755 {} \;

حذف فایل‌های بکاپ قدیمی

find /home/example/backups -type f -name "*.tar.gz" -mtime +30 -exec rm {} \;

برای عملکرد بهتر در تعداد زیاد فایل‌ها، می‌توانید به‌جای \; از + استفاده کنید:

find /home/example/backups -type f -name "*.tar.gz" -mtime +30 -exec rm {} +

در این حالت، فایل‌ها به‌صورت دسته‌ای به دستور مقصد داده می‌شوند و اجرای دستور سریع‌تر است.

استفاده از xargs

xargs خروجی یک دستور را می‌گیرد و آن را به‌عنوان آرگومان به دستور دیگری می‌دهد.

find /var/log -type f -name "*.log" | xargs ls -lh

اما این روش برای فایل‌هایی که فاصله یا کاراکترهای خاص در نام دارند همیشه امن نیست. روش بهتر استفاده از -print0 و xargs -0 است:

find /var/log -type f -name "*.log" -print0 | xargs -0 ls -lh

فشرده‌سازی موازی فایل‌های لاگ

find /var/log -type f -name "*.log" -print0 | xargs -0 -n 10 -P 4 gzip

در این دستور:

  • -print0 خروجی را با کاراکتر null جدا می‌کند.
  • xargs -0 همان فرمت null را می‌خواند.
  • -n 10 هر بار ۱۰ فایل را به دستور می‌دهد.
  • -P 4 چهار پردازش موازی اجرا می‌کند.

جستجو داخل محتوای فایل‌ها با find و grep

گاهی نمی‌خواهید فقط نام فایل را پیدا کنید؛ بلکه می‌خواهید داخل فایل‌ها دنبال یک عبارت بگردید. در این حالت ترکیب find و grep بسیار کاربردی است.

جستجو داخل فایل‌های conf

find /etc -type f -name "*.conf" -exec grep -H "PermitRootLogin" {} \;

گزینه -H باعث می‌شود نام فایل هم کنار خط پیدا شده نمایش داده شود.

نمایش فقط نام فایل‌هایی که عبارت را دارند

find /etc -type f -name "*.conf" -exec grep -l "PermitRootLogin" {} \;

جستجوی سریع‌تر با xargs

find /etc -type f -name "*.conf" -print0 | xargs -0 grep -H "127.0.0.1"

جستجو در فایل‌های PHP برای پیدا کردن یک دامنه

find /home/example/public_html -type f -name "*.php" -print0 | xargs -0 grep -H "old-domain.com"

جستجو در فایل‌های وردپرس

find /home/example/public_html -type f \( -name "*.php" -o -name "*.js" -o -name "*.css" \) -print0 | xargs -0 grep -H "wp-content"

این روش برای بررسی هک، پیدا کردن کدهای مشکوک، تغییر دامنه، پیدا کردن کلید API یا بررسی کانفیگ‌ها بسیار کاربردی است.

تفاوت whereis و which با find و locate

دستورهای whereis و which برای جستجوی عمومی فایل‌ها طراحی نشده‌اند. این ابزارها بیشتر برای پیدا کردن مسیر برنامه‌ها، فایل‌های اجرایی و man pageها استفاده می‌شوند.

دستور which

which نشان می‌دهد وقتی یک دستور را اجرا می‌کنید، Shell کدام فایل اجرایی را از مسیرهای PATH پیدا می‌کند.

which php
which python3
which nginx

نمونه خروجی:

/usr/bin/php

اگر چند نسخه PHP، Python یا Node.js روی سرور دارید، which کمک می‌کند بفهمید دقیقاً کدام نسخه اجرا می‌شود.

دستور whereis

whereis می‌تواند مسیر فایل اجرایی، سورس و man page برنامه را نشان دهد:

whereis nginx
whereis php
whereis find

برای نمایش فقط مسیر فایل اجرایی:

whereis -b nginx

برای نمایش فقط man page:

whereis -m find

چه زمانی از کدام استفاده کنیم؟

  • برای پیدا کردن فایل‌ها و پوشه‌ها با شرط‌های دقیق: find
  • برای پیدا کردن سریع مسیر فایل بر اساس ایندکس: locate
  • برای پیدا کردن مسیر اجرایی یک دستور در PATH: which
  • برای پیدا کردن binary، source و man page یک دستور: whereis

تکنیک‌های پیشرفته find

محدود کردن عمق جستجو با maxdepth

اگر فقط می‌خواهید در سطح مشخصی از پوشه‌ها جستجو کنید، از -maxdepth استفاده کنید:

find /home/example -maxdepth 2 -name "*.log"

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

شروع جستجو از حداقل عمق با mindepth

find /home/example -mindepth 2 -name "*.log"

این دستور فایل‌هایی را که در سطح اول هستند نادیده می‌گیرد و از عمق دوم به بعد جستجو می‌کند.

ترکیب mindepth و maxdepth

find /home/example -mindepth 2 -maxdepth 4 -name "*.php"

این دستور فقط در بازه مشخصی از عمق پوشه‌ها جستجو می‌کند.

حذف مسیرهای خاص از جستجو با prune

گاهی پوشه‌هایی مثل node_modules، .git، vendor یا cache نتایج زیادی تولید می‌کنند و جستجو را کند می‌کنند. برای حذف آن‌ها از جستجو، از -prune استفاده کنید.

find . -type d -name "node_modules" -prune -o -type f -name "*.js" -print

در این دستور، پوشه node_modules از جستجو حذف می‌شود و بقیه مسیرها برای فایل‌های .js بررسی می‌شوند.

حذف چند مسیر از جستجو

find . \( -path "./node_modules" -o -path "./.git" -o -path "./vendor" \) -prune -o -type f -name "*.php" -print

این دستور برای پروژه‌های وب بسیار کاربردی است؛ چون مسیرهای حجیم و غیرضروری را از جستجو حذف می‌کند.

مثال‌های واقعی برای مدیران سایت و سرور

پیدا کردن فایل‌های حجیم روی سرور

find / -type f -size +500M 2>/dev/null

این دستور برای زمانی مناسب است که دیسک سرور پر شده و می‌خواهید فایل‌های بزرگ را پیدا کنید.

پیدا کردن فایل‌های لاگ بزرگ‌تر از ۱۰۰ مگابایت

find /var/log -type f -size +100M

پیدا کردن فایل‌های error_log در هاست

find /home -type f -name "error_log" 2>/dev/null

پیدا کردن فایل‌های وردپرس

find /home -type f -name "wp-config.php" 2>/dev/null

پیدا کردن فایل‌هایی که در ۲۴ ساعت گذشته تغییر کرده‌اند

find /home/example/public_html -type f -mtime -1

این دستور برای بررسی تغییرات بعد از هک، آپدیت افزونه، آپلود فایل یا Deploy بسیار مفید است.

پیدا کردن فایل‌های PHP مشکوک در uploads وردپرس

find /home/example/public_html/wp-content/uploads -type f -name "*.php"

در حالت عادی، وجود فایل PHP داخل uploads وردپرس می‌تواند مشکوک باشد و باید بررسی شود.

پیدا کردن فایل‌های با permission ناامن

find /home/example/public_html -type f -perm 0777

اصلاح سطح دسترسی فایل‌ها و پوشه‌های سایت

find /home/example/public_html -type d -exec chmod 755 {} \;
find /home/example/public_html -type f -exec chmod 644 {} \;

این دو دستور برای بسیاری از سایت‌های PHP و وردپرسی کاربرد دارند، اما قبل از اجرا باید مطمئن شوید مالکیت فایل‌ها درست است.

پیدا کردن فایل‌های قدیمی بکاپ و حذف آن‌ها

find /home/example/backups -type f -name "*.tar.gz" -mtime +30 -print

ابتدا فقط نتیجه را ببینید. اگر مطمئن شدید، حذف کنید:

find /home/example/backups -type f -name "*.tar.gz" -mtime +30 -delete

پیدا کردن فایل‌هایی که داخل آن‌ها یک IP خاص وجود دارد

find /etc -type f -print0 | xargs -0 grep -H "192.168.1.10"

پیدا کردن مسیر php.ini

locate -b '\php.ini'

یا:

find / -type f -name "php.ini" 2>/dev/null

پیدا کردن مسیر nginx.conf

locate nginx.conf

یا با find:

find /etc -type f -name "nginx.conf"

هشدارهای امنیتی و اشتباهات رایج

۱. اجرای find از ریشه سرور بدون نیاز

دستور زیر کل فایل‌سیستم را می‌گردد و ممکن است کند باشد:

find / -name "*.log"

بهتر است تا جای ممکن مسیر را محدود کنید:

find /var/log -name "*.log"

۲. حذف مستقیم بدون بررسی خروجی

اجرای مستقیم دستورهای حذف خطرناک است:

find /home -name "*.bak" -delete

روش بهتر این است که اول خروجی را ببینید:

find /home -name "*.bak" -print

بعد از اطمینان، حذف را انجام دهید.

۳. استفاده نادرست از xargs برای فایل‌های دارای فاصله

این روش ممکن است برای فایل‌هایی با فاصله در نام مشکل‌ساز شود:

find . -name "*.log" | xargs rm

روش امن‌تر:

find . -name "*.log" -print0 | xargs -0 rm

۴. تکیه کامل به locate برای فایل‌های جدید

اگر فایلی تازه ساخته شده، ممکن است locate آن را نشان ندهد. در این شرایط یا sudo updatedb اجرا کنید یا از find استفاده کنید.

۵. نادیده گرفتن Permission denied

اگر به‌عنوان کاربر عادی جستجو می‌کنید، ممکن است خطاهای Permission denied ببینید. برای مخفی کردن آن‌ها:

find / -name "*.conf" 2>/dev/null

اما اگر واقعاً لازم است مسیرهای سیستمی را بررسی کنید، باید با دسترسی مناسب یا sudo جستجو کنید.

جدول خلاصه دستورات جستجوی فایل در لینوکس

هدفدستور
جستجوی فایل با نام دقیقfind /path -name "file.txt"
جستجوی بدون حساسیت به حروفfind /path -iname "file.txt"
جستجوی فایل‌های PHPfind /path -type f -name "*.php"
جستجوی پوشه‌هاfind /path -type d -name "cache"
پیدا کردن فایل‌های بزرگ‌تر از 100MBfind /path -type f -size +100M
پیدا کردن فایل‌های تغییرکرده در ۲۴ ساعت گذشتهfind /path -type f -mtime -1
پیدا کردن فایل‌های قدیمی‌تر از ۳۰ روزfind /path -type f -mtime +30
پیدا کردن فایل‌های یک کاربرfind /path -user username
پیدا کردن فایل‌های ۷۷۷find /path -perm 0777
پیدا کردن فایل‌های خالیfind /path -type f -empty
پیدا کردن پوشه‌های خالیfind /path -type d -empty
جستجوی سریع با locatelocate filename
آپدیت دیتابیس locatesudo updatedb
نمایش فقط مسیرهای موجود در locatelocate -e filename
جستجو داخل فایل‌هاfind /path -type f -print0 | xargs -0 grep -H "text"
پیدا کردن مسیر دستور اجراییwhich command
پیدا کردن binary و man pagewhereis command

سوالات متداول درباره جستجوی فایل در لینوکس

بهترین دستور برای جستجوی فایل در لینوکس چیست؟

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

تفاوت find و locate چیست؟

find فایل‌سیستم را به‌صورت زنده جستجو می‌کند و نتیجه دقیق و لحظه‌ای می‌دهد. اما locate از دیتابیس ایندکس‌شده استفاده می‌کند و سریع‌تر است، ولی ممکن است فایل‌های جدید را تا قبل از اجرای updatedb نشان ندهد.

چرا locate فایل جدید را پیدا نمی‌کند؟

چون دیتابیس locate هنوز به‌روزرسانی نشده است. دستور زیر را اجرا کنید:

sudo updatedb

چطور فایل‌های حجیم را در لینوکس پیدا کنم؟

برای پیدا کردن فایل‌های بزرگ‌تر از ۱ گیگابایت:

find / -type f -size +1G 2>/dev/null

چطور فایل‌هایی را که امروز تغییر کرده‌اند پیدا کنم؟

برای فایل‌های تغییرکرده در ۲۴ ساعت گذشته:

find /path -type f -mtime -1

چطور داخل فایل‌ها دنبال یک متن بگردم؟

از ترکیب find و grep استفاده کنید:

find /path -type f -print0 | xargs -0 grep -H "your-text"

چطور فایل‌های با سطح دسترسی ۷۷۷ را پیدا کنم؟

find /home -perm 0777

آیا استفاده از find برای حذف فایل‌ها امن است؟

اگر درست استفاده شود بله؛ اما قبل از حذف، همیشه همان دستور را با -print اجرا کنید تا مطمئن شوید فایل‌های درست انتخاب شده‌اند.

which چه فرقی با whereis دارد؟

which فقط اولین فایل اجرایی موجود در مسیر PATH را نشان می‌دهد، اما whereis می‌تواند مسیر binary، source و man page را نمایش دهد.

جمع‌بندی

جستجوی فایل در لینوکس یکی از مهارت‌های پایه اما بسیار مهم برای مدیریت سرور است. دستور find برای جستجوی دقیق، لحظه‌ای و پیشرفته استفاده می‌شود و می‌تواند فایل‌ها را بر اساس نام، نوع، حجم، زمان، مالک، گروه، سطح دسترسی و حتی شرایط ترکیبی پیدا کند. در مقابل، locate برای جستجوی سریع مسیر فایل‌ها مناسب است، اما به دیتابیس updatedb وابسته است.

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

برای مدیریت حرفه‌ای سرور، مخصوصاً روی سرور مجازی ایران، سرور مجازی آلمان، سرور مجازی و اختصاصی یا سرویس‌های هاست لینوکس، آشنایی با find، locate، grep، xargs و ابزارهای مرتبط، بخشی ضروری از مهارت‌های روزمره شماست.

منابع پیشنهادی برای مطالعه بیشتر