Featured Image Alt:
–>
پیدا کردن فایل در لینوکس یکی از مهارتهایی است که هر مدیر سایت، مدیر سرور، برنامهنویس و کاربر VPS دیر یا زود به آن نیاز پیدا میکند. ممکن است بخواهید فایل کانفیگ یک سرویس را پیدا کنید، لاگهای حجیم را شناسایی کنید، فایلهای تغییرکرده در ۲۴ ساعت گذشته را ببینید، فایلهای با سطح دسترسی خطرناک را پیدا کنید، یا داخل هزاران فایل بهدنبال یک عبارت خاص بگردید. در همه این سناریوها، آشنایی با روشهای جستجوی فایل در لینوکس ضروری است.
دو ابزار اصلی برای پیدا کردن فایلها در لینوکس، دستورهای find و locate هستند. دستور find فایلسیستم را بهصورت زنده و دقیق جستجو میکند؛ اما دستور locate از یک دیتابیس ایندکسشده استفاده میکند و به همین دلیل بسیار سریعتر است. البته سرعت بیشتر locate به این معنی نیست که همیشه بهتر است؛ چون اگر دیتابیس آن بهروز نباشد، ممکن است فایلهای جدید را نشان ندهد یا فایلهای حذفشده را همچنان در نتیجه بیاورد.
در این مقاله، بهصورت کامل و کاربردی یاد میگیرید چطور با find و locate در لینوکس فایلها را پیدا کنید، تفاوت این دو دستور چیست، چطور بر اساس نام، نوع، حجم، زمان، مالک، گروه و سطح دسترسی جستجو کنید، چطور فایلهای پیدا شده را حذف یا ویرایش کنید، چطور با grep داخل فایلها جستجو کنید و در نهایت چطور از ابزارهایی مثل whereis و which برای پیدا کردن مسیر برنامهها استفاده کنید.
سطح: مقدماتی تا متوسط | مناسب برای: مدیران سایت، کاربران VPS، مدیران سرور لینوکس، توسعهدهندگان، کارشناسان پشتیبانی هاستینگ و افرادی که با ترمینال لینوکس کار میکنند.
فهرست مطالب
- چرا جستجوی فایل در لینوکس مهم است؟
- تفاوت find و locate در لینوکس چیست؟
- نصب locate در Ubuntu، Debian و AlmaLinux
- updatedb چیست و چرا برای locate مهم است؟
- آموزش استفاده از دستور locate
- آموزش استفاده از دستور find
- جستجوی فایل بر اساس نام
- جستجوی فایل بر اساس نوع
- جستجوی فایل بر اساس حجم
- جستجوی فایل بر اساس زمان تغییر، دسترسی و تغییر متادیتا
- جستجوی فایل بر اساس مالک و گروه
- جستجوی فایل بر اساس سطح دسترسی
- پیدا کردن فایلها و پوشههای خالی
- اجرای عملیات روی نتایج با exec و xargs
- جستجو داخل محتوای فایلها با find و grep
- تفاوت whereis و which با find و locate
- تکنیکهای پیشرفته find
- مثالهای واقعی برای مدیران سایت و سرور
- هشدارهای امنیتی و اشتباهات رایج
- جدول خلاصه دستورات جستجوی فایل در لینوکس
- سوالات متداول
- جمعبندی
چرا جستجوی فایل در لینوکس مهم است؟
در محیطهای لینوکسی، مخصوصاً روی سرور، فایلها در مسیرهای مختلفی قرار میگیرند. فایلهای کانفیگ معمولاً در /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. این دو ابزار هدف مشابهی دارند، اما روش کارشان متفاوت است.
| ویژگی | find | locate |
|---|---|---|
| روش جستجو | جستجوی زنده در فایلسیستم | جستجو در دیتابیس ایندکسشده |
| سرعت | در مسیرهای بزرگ کندتر است | بسیار سریع است |
| دقت لحظهای | بسیار دقیق و بهروز | وابسته به آخرین اجرای 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 updatedbupdatedb چیست و چرا برای 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 | لینک سمبلیک |
c | Character Device |
b | Block Device |
s | Socket |
پیدا کردن فایلهای معمولی
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" |
| جستجوی فایلهای PHP | find /path -type f -name "*.php" |
| جستجوی پوشهها | find /path -type d -name "cache" |
| پیدا کردن فایلهای بزرگتر از 100MB | find /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 |
| جستجوی سریع با locate | locate filename |
| آپدیت دیتابیس locate | sudo updatedb |
| نمایش فقط مسیرهای موجود در locate | locate -e filename |
| جستجو داخل فایلها | find /path -type f -print0 | xargs -0 grep -H "text" |
| پیدا کردن مسیر دستور اجرایی | which command |
| پیدا کردن binary و man page | whereis 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 و ابزارهای مرتبط، بخشی ضروری از مهارتهای روزمره شماست.
