🔍 بخش ۱۶ – جستجو در لینوکس با find و locate

📖 مقدمه
وقتی سیستمعامل لینوکس پر از فایل و پوشه باشه، پیدا کردن یک فایل به روش دستی تقریبا غیرممکنه — مخصوصا روی سرورها و دایرکتوریهای بزرگ.
اینجاست که دو ابزار قدرتمند find و locate وارد میشوند:
find→ جستجو بهصورت واقعی در فایلسیستم، با بررسی لحظهای.locate→ جستجو از طریق یک پایگاهدادهای که قبلاً ساخته شده (بسیار سریع).
🏗 فصل ۱ – دستور find (جستجوی زنده در سیستم)
۱.۱ ساختار کلی
find مسیر [شرطها] [عمل]
- مسیر: از کجا شروع به جستجو کند.
- شرطها: بر اساس نام، نوع، تاریخ، اندازه و…
- عمل: کاری که بعد از پیدا کردن انجام دهد (مثل نمایش یا حذف).
۱.۲ جستجوی فایل بر اساس نام
find /home -name "report.txt"
اگر بخواهید بدون توجه به حروف بزرگ یا کوچک جستجو کنید:
find /home -iname "report.txt"
۱.۳ جستجو بر اساس الگو (Pattern)
find /var/log -name "*.log"
۱.۴ جستجوی پوشهها
find /home -type d -name "projects"
۱.۵ جستجو بر اساس اندازه
find / -size +100M
معنی:
+100M→ بزرگتر از ۱۰۰ مگابایت-50k→ کوچکتر از ۵۰ کیلوبایت
۱.۶ جستجو بر اساس زمان تغییر
- فایلهای تغییر یافته در ۷ روز گذشته:
find /etc -mtime -7
- فایلهای تغییر یافته بیش از ۳۰ روز پیش:
find /var/log -mtime +30
۱.۷ اجرای عملی روی فایلهای پیدا شده
حذف همه فایلهای .tmp در /tmp:
find /tmp -name "*.tmp" -type f -delete
یا با exec:
find /tmp -name "*.tmp" -type f -exec rm {} \;
۱.۸ نمایش فقط مسیر فایل (بدون پیام خطا)
find /home/user -name "data.csv" 2>/dev/null
⚡ فصل ۲ – دستور locate (جستجوی سریع با دیتابیس)
۲.۱ تفاوت با find
find→ جستجو در لحظه، ممکن است کند باشد، ولی دقیق است.locate→ جستجو بر پایه پایگاهداده، سریع است اما دادههای تازه ایجاد شده قبل از آپدیت دیتابیس را نمییابد.
۲.۲ نصب locate
در توزیعهای Debian/Ubuntu:
sudo apt install mlocate
در CentOS/Fedora:
sudo yum install mlocate
۲.۳ بهروزرسانی پایگاهداده
sudo updatedb
این کار خروجی جستجو را دقیقتر میکند.
۲.۴ جستجوی سریع
locate report.txt
۲.۵ جستجو بر اساس بخشی از نام
locate log | grep apache
۲.۶ محدود کردن نتایج
locate -l 10 passwd
(-l یعنی تعداد نتایج محدود شود.)
🛡 فصل ۳ – نکات و ترفندهای ایمنی و سرعت
- در مسیرهای بزرگ از
locateاستفاده کن چون سریعتر است. - وقتی دنبال فایل خیلی جدید هستی از
findاستفاده کن چون دیتابیسlocateنیاز به آپدیت دارد. - برای حذف فایلها با
findهمیشه اول بررسی کن:
find /tmp -name "*.tmp"
و بعد حذف را انجام بده.
🎯 فصل ۴ – تمرینهای عملی
تمرین ۱ – پیدا کردن همه فایلهای .conf
find /etc -name "*.conf"
تمرین ۲ – جستجوی فایلهای بزرگتر از ۵۰۰ مگابایت
find / -size +500M 2>/dev/null
تمرین ۳ – پیدا کردن فایلهای جدیدتر از یک روز
find /var/log -mtime -1
تمرین ۴ – جستجوی سریع با locate
locate .bashrc
💡 فصل ۵ – سناریوی واقعی: پاکسازی اتوماتیک لاگهای قدیمی
فرض کن سرور پر شده از لاگهای قدیمیتر از ۳۰ روز:
find /var/log -type f -name "*.log" -mtime +30 -exec rm -v {} \;
برای اجرای سریع مشابه، میتوان مسیرها را با locate گرفت و فیلتر کرد، ولی دقت پایینتری دارد.
📌 جمعبندی
find→ همهفنحریف، دقیق، ولی ممکن است کند باشد.locate→ فوق سریع، ولی نیازمند دیتابیس بهروز.- میتوان این دو را ترکیب کرد برای جستجوی بهتر.