پیدا کردن فایلها و دایرکتوریها یکی از رایجترین کارها در مدیریت سیستم است. ابزارهای مختلفی برای این منظور در لینوکس وجود دارند که هرکدام برای سناریوهای خاصی طراحی شدهاند. در این بخش، چهار ابزار اصلی برای یافتن فایلها را بررسی میکنیم: find (قدرتمندترین و انعطافپذیرترین)، locate (سریعترین)، which (برای پیدا کردن مسیر دستورات) و whereis (برای پیدا کردن باینری، سورس و صفحات man).
find
دستور find قدرتمندترین و پرکاربردترین ابزار برای جستجوی فایلها و دایرکتوریها در درخت فایلسیستم است. این دستور بهصورت بازگشتی (Recursive) دایرکتوریها را جستجو میکند و بر اساس معیارهای مختلفی مانند نام، نوع، اندازه، تاریخ تغییر، مجوزها و ... فایلها را پیدا میکند.
ساختار کلی:
find [path] [expression]
-
path: مسیر شروع جستجو (یک یا چند دایرکتوری). -
expression: شامل گزینهها، معیارهای جستجو و اقدامات (Actions) است.
گزینههای اصلی find (معیارهای جستجو)
| معیار | توضیح | مثال |
|---|---|---|
-name pattern | جستجو بر اساس نام فایل (Case-Sensitive). | find . -name "*.txt" |
-iname pattern | جستجو بر اساس نام فایل (Case-Insensitive). | find . -iname "readme*" |
-type type | جستجو بر اساس نوع فایل. (f: فایل، d: دایرکتوری، l: لینک سمبلیک) | find . -type d |
-size [+-]n[cwbkMG] | جستجو بر اساس اندازه. | find . -size +10M |
-mtime [+-]n | جستجو بر اساس زمان تغییر (Modification time) بر حسب روز. | find . -mtime -7 |
-atime [+-]n | جستجو بر اساس زمان دسترسی (Access time) بر حسب روز. | find . -atime +30 |
-ctime [+-]n | جستجو بر اساس زمان تغییر وضعیت (Change time) بر حسب روز. | find . -ctime -1 |
-mmin [+-]n | جستجو بر اساس زمان تغییر بر حسب دقیقه. | find . -mmin -5 |
-amin [+-]n | جستجو بر اساس زمان دسترسی بر حسب دقیقه. | find . -amin +60 |
-cmin [+-]n | جستجو بر اساس زمان تغییر وضعیت بر حسب دقیقه. | find . -cmin -10 |
-user username | جستجو بر اساس مالک (Owner). | find . -user root |
-group groupname | جستجو بر اساس گروه. | find . -group admin |
-perm mode | جستجو بر اساس مجوزها. | find . -perm 755 |
-empty | جستجوی فایلها یا دایرکتوریهای خالی. | find . -empty |
-maxdepth n | محدود کردن عمق جستجو. | find . -maxdepth 2 |
-mindepth n | شروع جستجو از عمق مشخص. | find . -mindepth 3 |
-path pattern | جستجو بر اساس مسیر کامل (نه فقط نام فایل). | find . -path "./src/*.js" |
توضیح علامتهای + و - در معیارهای زمانی و اندازهای:
-
+n: بیشتر ازn. -
-n: کمتر ازn. -
n: دقیقاًn.
اقدامات (Actions) در find
پس از پیدا کردن فایلها، میتوانید با استفاده از -exec یا -ok بر روی آنها اقدام کنید.
| اقدام | توضیح | مثال |
|---|---|---|
-print | نمایش مسیر فایلها (پیشفرض). | find . -name "*.txt" -print |
-exec command {} \; | اجرای یک دستور روی هر فایل پیدا شده ({} جایگزین فایل میشود). | find . -name "*.tmp" -exec rm {} \; |
-exec command {} + | اجرای دستور با همه فایلهای پیدا شده (کارآمدتر). | find . -name "*.tmp" -exec rm {} + |
-ok command {} \; | مشابه -exec، اما قبل از هر اجرا تأیید میخواهد. | find . -name "*.tmp" -ok rm {} \; |
-delete | حذف فایلهای پیدا شده. | find . -name "*.tmp" -delete |
-ls | نمایش جزئیات فایلها (مشابه ls -l). | find . -name "*.txt" -ls |
نکته مهم: در -exec command {} \;، {} با نام فایل جایگزین میشود و \; پایان دستور را مشخص میکند. در -exec command {} +، {} با لیستی از تمام فایلهای پیدا شده (بهعنوان آرگومان) جایگزین میشود که باعث میشود دستور یک بار (نه بهازای هر فایل) اجرا شود و کارایی بالاتری داشته باشد.
مثالهای کاربردی find
۱. جستجوی ساده بر اساس نام
-
پیدا کردن همهی فایلهای با پسوند
.logدر دایرکتوری فعلی و زیرشاخهها:find . -name "*.log"
-
پیدا کردن فایلها با نام
readme(بدون حساسیت به بزرگ/کوچکی):find . -iname "readme"
-
پیدا کردن همهی دایرکتوریهای
node_modules:find . -type d -name "node_modules"
۲. جستجوی بر اساس زمان
-
پیدا کردن فایلهایی که در ۷ روز اخیر تغییر کردهاند:
find . -type f -mtime -7
-
پیدا کردن فایلهایی که بیش از ۳۰ روز از دسترسی به آنها گذشته است:
find . -type f -atime +30
-
پیدا کردن فایلهایی که در ۱۰ دقیقه اخیر تغییر کردهاند:
find . -type f -mmin -10
۳. جستجوی بر اساس اندازه
-
پیدا کردن فایلهای بزرگتر از ۱۰۰ مگابایت:
find . -type f -size +100M
-
پیدا کردن فایلهای کوچکتر از ۱ کیلوبایت:
find . -type f -size -1k
-
پیدا کردن فایلهای با اندازه دقیقاً ۵۰۰ بایت:
find . -type f -size 500c
۴. جستجوی بر اساس مجوزها و مالکیت
-
پیدا کردن فایلهایی که مجوز
755دارند:find . -type f -perm 755
-
پیدا کردن فایلهایی که متعلق به کاربر
rootهستند:find . -type f -user root
-
پیدا کردن فایلهایی که گروه آنها
www-dataاست:find . -type f -group www-data
۵. ترکیب معیارها با عملگرهای منطقی
find از عملگرهای -and (پیشفرض)، -or و -not پشتیبانی میکند.
-
پیدا کردن فایلهای
.txtیا.log(با-or):find . -name "*.txt" -or -name "*.log"
-
پیدا کردن فایلهای
.txtکه اندازهی آنها کمتر از ۱ مگابایت است (با-andکه پیشفرض است):find . -name "*.txt" -size -1M
-
پیدا کردن فایلهای
.tmpکه متعلق بهrootنیستند (با-not):find . -name "*.tmp" -not -user root
۶. اقدامات (Actions)
-
حذف همهی فایلهای
.tmp(با-delete):find . -name "*.tmp" -delete
(این کار معادل
find . -name "*.tmp" -exec rm {} \;است اما سریعتر است و نیازی به فراخوانیrmندارد.) -
تغییر مجوز فایلهای
.shبه755(با-exec):find . -name "*.sh" -exec chmod 755 {} \;
-
تغییر مجوز بهصورت دستهجمعی (با
+برای کارایی بهتر):find . -name "*.sh" -exec chmod 755 {} +
-
حذف فایلهای خالی:
find . -type f -empty -delete
-
حذف دایرکتوریهای خالی:
find . -type d -empty -delete
۷. محدود کردن عمق جستجو
-
جستجو فقط در دایرکتوری فعلی (عمق ۱):
find . -maxdepth 1 -name "*.txt"
-
جستجو از عمق حداقل ۲ (نادیده گرفتن دایرکتوری فعلی):
find . -mindepth 2 -name "*.txt"
locate
دستور locate یک ابزار بسیار سریع برای پیدا کردن فایلهاست که از یک پایگاه داده (Database) برای جستجو استفاده میکند. این پایگاه داده معمولاً هر شب با دستور updatedb بهروزرسانی میشود و شامل لیستی از تمام فایلهای سیستم است.
مزیت: locate بسیار سریعتر از find است.
معایب:
-
فایلهای جدید (که بعد از آخرین بهروزرسانی پایگاه داده ایجاد شدهاند) را پیدا نمیکند.
-
ممکن است فایلهایی را نشان دهد که حذف شدهاند اما هنوز در پایگاه داده موجود هستند.
ساختار کلی:
locate [option] pattern
گزینههای اصلی locate
| گزینه | توضیح | مثال |
|---|---|---|
-i | جستجوی بدون حساسیت به بزرگ/کوچکی (Case-Insensitive). | locate -i readme |
-c | فقط شمارش تعداد نتایج (Count). | locate -c "*.txt" |
-r regex | جستجو با عبارت منظم (Regex). | locate -r ".*\.conf$" |
-n n | محدود کردن تعداد نتایج به n. | locate -n 10 "*.log" |
-e | فقط فایلهایی که واقعاً وجود دارند را نمایش بده. | locate -e "*.conf" |
مثالها
-
پیدا کردن همهی فایلهای
.conf:locate .conf -
پیدا کردن فایلهای
bashrc(بدون حساسیت به بزرگ/کوچکی):locate -i bashrc
-
شمارش تعداد فایلهای
.log:locate -c .log
-
پیدا کردن ۵ فایل
.txtاول:locate -n 5 .txt
-
بهروزرسانی پایگاه داده (نیاز به
sudo):sudo updatedb
which
دستور which برای پیدا کردن مسیر کامل (Absolute Path) یک دستور اجرایی در سیستم استفاده میشود. این دستور، متغیر محیطی PATH را جستجو میکند و اولین مسیری که فایل اجرایی مورد نظر را پیدا کند، نمایش میدهد. (قبلاً در بخش ۱.۴ بهطور کامل توضیح داده شده است.)
ساختار کلی:
which [option] command...
مثال:
which python # خروجی: /usr/bin/python
whereis
دستور whereis یک ابزار جامعتر از which است که علاوه بر مسیر فایل اجرایی، مسیر فایلهای سورس (Source) و صفحات man مربوط به یک دستور را نیز نمایش میدهد. (قبلاً در بخش ۱.۴ بهطور کامل توضیح داده شده است.)
ساختار کلی:
whereis [option] command...
مثال:
whereis ls # خروجی: ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
مقایسهی ابزارهای پیدا کردن فایل
| ابزار | سرعت | دقت | کاربرد اصلی |
|---|---|---|---|
| find | کند (جستجوی لحظهای) | بالا | جستجوی پیشرفته با معیارهای مختلف (زمان، اندازه، مجوز، ...) |
| locate | بسیار سریع (از پایگاه داده) | وابسته به بهروزرسانی پایگاه داده | جستجوی سریع بر اساس نام فایل |
| which | سریع (جستجو در PATH) | بالا | پیدا کردن مسیر دستورات اجرایی |
| whereis | سریع (جستجو در پایگاه داده) | بالا | پیدا کردن باینری، سورس و man یک دستور |
خلاصه و نکات کلیدی
-
از
findاستفاده کنید زمانی که:-
نیاز به جستجوی پیشرفته بر اساس زمان، اندازه، مجوزها، مالکیت و ... دارید.
-
میخواهید روی فایلهای پیدا شده اقدام کنید (حذف، تغییر مجوز، ...).
-
نیاز به دقت و قطعیت دارید و نمیخواهید به پایگاه دادهای متکی باشید.
-
-
از
locateاستفاده کنید زمانی که:-
سرعت برایتان اولویت است و میخواهید بهسرعت یک فایل را بر اساس نام پیدا کنید.
-
پایگاه دادهی سیستم بهروز است (معمولاً در سیستمهای دسکتاپ و سرورها هر شب بهروز میشود).
-
میدانید که فایل چند روز پیش ایجاد شده است.
-
-
از
whichاستفاده کنید زمانی که:-
میخواهید بدانید یک دستور (مثل
pythonیاdocker) از کدام مسیر اجرا میشود. -
میخواهید چندین نسخه از یک دستور را در
PATHپیدا کنید (با-a).
-
-
از
whereisاستفاده کنید زمانی که:-
علاوه بر مسیر دستور، میخواهید صفحات man یا سورس کد آن را نیز پیدا کنید.
-
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: منبع مستندات