شما برای مطالعه این مقاله فقط 8 دقیقه وقت نیاز دارید

find-command-in-linux

آموزش دستور find برای جستجوی فایل ها در لینوکس

3.5/5 - (2 امتیاز)

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

با استفاده از دستور find به راحتی می توانید فیلتر ها و پارامترهای خاصی را اعمال کنید و به طور دقیق و واضح به فایل های مورنظر خود در لینوکس دسترسی پیدا کنید.

پس اگر می خواهید با کاربرد و طرز استفاده از این دستور آشنا شوید ادامه مطلب را از دست ندهید چون آموزش نحوه اعمال شرط ها و پارامترها در دستور find با استفاده از مثال های کاربردی انجام می شود و با این مثال ها سریع تر می توانید شروع به استفاده از این دستور کنید:

نحوه استفاده از دستور find در لینوکس

برای اینکه از دستور find برای پیدا کردن فایل های موردنظر خود استفاده کنید، اول باید سیستم شما مجهز به یکی از توزیع های لینوکس باشد. حالا اگر سیستم شما محلی است که چه بهتر! کافیست ترمینال را باز کنید و دستورات را اجرا کنید.

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

با اینکه بعضی از مثال ها، توسط کاربر غیر روت هم اجرا می شوند ولی بعضی از آنها هم نیاز به مجوز های کاربر روت دارند و اگر توسط یک کاربر غیر روت اجرا شوند با خطای Permission denied همراه می شوند. پس بهترین کار این است که دستورات را با امتیازات sudo اجرا کنید تا در این زمینه با محدودیتی روبرو نباشید.

اما سینتکس find به چه صورت است؟

find [path] [options] [expression]

path: مسیر دایرکتوری موردنظر برای جستجوی فایل

options: پارامترهای شرطی لازم برای تعریف فیلتر مثل اسم، نوع و مجوز

expression: اقدامات موردنظر برای فایل های موردنظر

در ادامه با بررسی پرکاربردترین مثال های مربوط به دستور find، نحوه استفاده از آن را به طور کامل آموزش می دهیم:

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

واضح ترین راه برای پیدا کردن یک فایل این است که اسم آن فایل را جستجو کنید. برای این کار می توانید از دستور زیر استفاده کنید:

find / -name "file-name"

این دستور تمام فایل های هم اسم با اسمی که شما لحاظ کرده اید را از دایرکتوری روت جستجو می کند و در خروجی به شما نشان می دهد.

البته، بهتر است به این نکته هم اشاره کنیم که آپشن name نسبت به کوچک یا بزرگ بودن حروف حساس است و اگر می خواهید این حساسیت را نادیده بگیرید، بهتر است از آپشن iname استفاده کنید.

find / -iname "file-name"

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

find / -not -name "file-name"

یا

find / \! -name "file-name"

برای پیدا کردن فایل های بیشتر با اسم های متفاوت باید از عملگر or استفاده کنید:

find / -name "file-name1" –or -name "file-name2"

اگر فرمت خاصی را مدنظر دارید و می خواهید جستجو را بر اساس آن انجام دهید، باید از آپشن name به صورت زیر استفاده کنید:

find / -name ".mp3"

حالا بهتر است کمی هم به نحوه تعیین مسیر جستجو اشاره کنیم:

جستجو در مسیر فعلی:

find . -name "file-name"

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

find ./folder-name -name "file-name"

جستجو در یک مسیر دیگر:

find /home/documents/articles -name "file-name"

برای اینکه با نحوه استفاده از expression موجود در سینتکس هم آشنا شوید. بیایید مثال خود را تکمیل تر کنیم. اگر می خواهید بعد از پیدا کردن فایل های موردنظر، آنها را از سیستم خود حذف کنید، باید دستور find را به صورت زیر اجرا کنید:

find ./folder-name -name "file-name" –exec rm –i {} \;

وقتی این دستور را اجرا کنید، یک پیام برای تایید حذف فایل ها نشان داده می شود که اگر موافق این قضیه هستید کافی است y یا Y را وارد کنید و  Enter را بزنید.

یا اینکه برای حذف آنها می توانید از آپشن delete استفاده کنید:

find /var/log/ -name '*.temp' –delete

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

با استفاده از پارامتر type به راحتی می توانید نوع فایل هایی که می خواهید پیدا کنید را تعیین کنید. با توجه به اینکه در دنیای لینوکس، همه چیز یک “فایل” است پس تنوع فایل هایی که با آنها سر و کار داریم بالا است. در ادامه به چند مورد از آنها اشاره می کنیم:

f: فایل معمولی پرکاربرد مثل JPEG، PDF و MP4

d: دایرکتوری

l: لینک نمادین

c: دستگاه هایی مثل کیبورد، ماوس و کارت صدت

b: دستگاه های بلاک مثل هارد دیسک، رم و غیره

s: سوکت

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

find . -type d

find . -type f

یا اگر می خواهید به لیست دستگاه های موجود در پوشه dev دسترسی پیدا کنید، دستور find را به صورت زیر اجرا کنید:

find /dev -type c
Output
/dev/vcsa4
/dev/vcsu4
/dev/vcs4
/dev/vcsa3
/dev/vcsa2
/dev/vcsu2
/dev/vcs2
. . .

موقع جستجوی فایل های خالی هم بهتر است آپشن type را لحاظ کنید:

فایل های خالی:

find /tmp -type f –empty

دایرکتوری های خالی:

find /tmp -type d -empty

بعضی مواقع باید از آپشن ها به صورت ترکیبی استفاده کنید. مثلاً برای دسترسی به فایل هایی با پسوند.conf  موجود در پوشه usr، باید دو آپشن name و type را در دستور find لحاظ کنید:

find /usr -type f -name "*.conf"
Output
/usr/src/linux-headers-5.4.0-88-
generic/include/config/tristate.conf
/usr/src/linux-headers-5.4.0-90-generic/include/config/auto.conf
/usr/src/linux-headers-5.4.0-90-
/usr/share/byobu/keybindings/tmux-screen-keys.conf
/usr/share/libc-bin/nsswitch.conf
...

یکی از نمونه های رایج آپشن type این است که با استفاده از آن به صورت بازگشتی مجوز فایل های وبسایت خود را تعییر دهید. اینجاست که هم type را لحاظ می کنید و هم از دستور chmod به عنوان expression استفاده می کنید.

تغییر مجوز فایل های وبسایت به 644:

find /var/www/my_website -type f -exec chmod 0644 {} \;

تغییر مجوز دایرکتوری های وبسایت به 755:

find /var/www/my_website -type d -exec chmod 0755 {} \;

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

با استفاده از پارامتر size می توانید فایل ها را بر اساس اندازه آنها فیلتر کنید. برای انجام این کار باید پسوند خاصی را به انتهای عدد موردنظر اضافه کنید تا واحد سایز فایل مشخص باشد.

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

c: بایت

k: کیلوبایت

M: مگابایت

G: گیگابایت

b: بلوک های 512 بایتی

برای پیدا کردن فایل هایی که دقیقاً 50 بایت هستند باید دستور find را به صورت زیر اجرا کنید:

find /usr -size 50c

اما اگر می خواهید حداقل یا حداکثر اندازه فایل را مشخص کنید تا جستجو بر اساس این محدوده انجام شود باید از علامت – یا + استفاده کنید.

کلیک کنید  حل مشکل connection is not secure در کروم، فایرفاکس و اندروید

فایل هایی که کمتر از 1 گیگابایت هستند:

find /usr -size -1G

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

find /usr -size +700M

اگر هم می خواهید یک بازه مشخص کنید تا فایل هایی که اندازه آنها در این بازه قرار دارند را جستجو کنید، از دستور زیر استفاده کنید:

find . -type f -size +500M -size -1G

دستور بالا مسیر فعلی خط فرمان را جستجو می کند و فایل هایی که حجم آنها بین 500 مگابایت تا 1 گیگابایت است را پیدا می کند.

دستور زیر هم یک ترکیب از 3 آپشن بالایی است که فایل هایی با فرمت .mp3 که حجمشان بالای 10 مگابایت هستند را پیدا کرده و بعد حذف می کند.

find / -type f -name *.mp3 -size +10M -exec rm {} \;

جستجو بر اساس زمان

سیستم لینوکس برای تمام فایل های خود داده های زمانی خاصی را اختصاص می دهد که این داده ها در  3 شکل ذخیره می شوند.

Access Time: آخرین باری که فایل خوانده یا نوشته شده است.

Modification Time: آخرین باری که محتوای فایل دستکاری شده است.

Change Time: آخرین بازی که متادیتای فایل تغییر پیدا کرده است.

اگر می خواهید از آپشن time استفاده کنید باید این 3 آیتم را هم درنظر بگیرید و جستجوی خود را دقیق تر انجام دهید. mtime ،atime و ctime، آپشن های مربوط به این داده های زمانی هستند که از پیشوند هر کدام متوجه می شوید که مربوط به کدام داده ها هستند.

برای پیدا کردن فایل هایی که در روز گذشته اصلاح شده اند، دستور find را به صورت زیر اجرا کنید:

find /usr -mtime 1

البته، مثل آپشن اندازه برای اینکه با آپشن زمان هم انعطاف بیشتری داشته باشید می توانید از علامت های – و + استفاده کنید.

مثلا، اگر می خواهید به فایل هایی که در طول 10 روز پیش دستکاری شده اند، دسترسی پیدا کنید، می توانید از دستور زیر استفاده کنید:

find /usr -mtime -10

یا برای پیدا کردن فایل های که بیشتر از 5 روز پیش، متادیتای آنها تغییر کرده است، می توانید از دستور زیر استفاده کنید:

find /usr -ctime +5

اگر می خواهید موقع فیلتر کردن فایل های اصلاح شده، امروز را هم لحاظ کنید می توانید از آپشن daystart استفاده کنید. مثلاً اگر می خواهید به لیست فایل هایی که 30 روز قبل یا بیشتر اصلاح شده اند دسترسی پیدا کنید،  دستور find را به صورت زیر اجرا کنید:

find /home -mtime +30 –daystart

اگر دوست دارید بازه خاصی را برای این جستجو لحاظ کنید، باید علامت های + و – را با هم ترکیب کنید. به عنوان مثال، دستور زیر فایل هایی را جستجو می کند که در 50 الی 100 روز پیش دستکاری شده اند:

find / -mtime +50 –mtime -100

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

find / -newer reference_file

جستجو بر اساس مجوز

هر کدام از فایل های موجود در سیستم لینوکس دارای مجوزهای خاصی هستند و اگر می خواهید جستجوی خود را بر این اساس انجام دهید، باید از آپشن perm استفاده کنید.

مثلا برای پیدا کردن فایل هایی با مجوز 644 ( خواندن/نوشتن برای مالک فایل و فقط خواندن برای گروه یا کاربران دیگر) باید دستور find را به صورت زیر اجرا کنید:

find / -perm 644

اگر می خواهید یک “حداقل” برای مجوز ها مشخص کنید و جستجو را بر اساس آن انجام دهید، از علامت – استفاده کنید:

find / -perm -644

این دستور فایل هایی که دارای مجوز های اضافی نسبت به 644 هستند را پیدا می کند که مجوز 744 با این قانون مطابقت دارد.

یا اگر می خواهید این حداقل را برای کاربران لحاظ کنید، می توانید از اسلش استفاده کنید. به این صورت که برای دسترسی به فایل هایی که حداقل یکی از کاربران (مالک فایل، گروه ها یا کاربران دیگر) دارای مجوز 644 هستند، از دستور زیر استفاده کنید:

find . -perm /444

بعضی مواقع، نیاز داریم که فایل هایی که مجوز لازم را ندارند پیدا کنیم که در این گونه مواقع باید علامت ! را لحاظ کنید:

find / -type f ! -perm 777

برای پیدا کردن فایل هایی که فقط قابل خواندن هستند، دستور find را به صورت زیر اجرا کنید:

find / -perm /u=r

اگر می خواهید به فایل های قابل اجرا دسترسی پیدا کنید، دستور بالا را به صورت زیر اجرا کنید:

find / -perm /a=x

اگر می خواهید اقدام خاصی را روی دایرکتوری ها اعمال کنید، به عنوان مثال مجوز آنها را از 755 به 777 تغییر دهید، دستور find را به صورت زیر اجرا کنید:

find / -type d -perm 777 -exec chmod 755 {} /;

جستجو بر اساس کاربر

نوع کاربر یکی دیگر از پارامترهایی است که می توانید برای فیلتر کردن فایل ها استفاده کنید. user و group از آپشن هایی هستند که می توانید در این زمینه استفاده کنید.

به عنوان مثال، برای پیدا کردن فایل هایی که متعلق به کاربر syslog هستند باید دستور find را به صورت زیر اجرا کنید:

find /var -user syslog

یا اگر گروه خاصی را در نظر دارید و می خواهید فایل های متعلق به آن گروه را پیدا کنید، دستور زیر را اجرا کنید:

find /etc -group group-name

بهتر است از دنیای واقعی هم یک مثال بزنیم تا بهتر متوجه اهمیت این آپشن شوید. فرض کنید که می خواهیم تمام فایل های متعلق به کاربر user1 را پیدا کنیم و مالکیت آنها را به کاربر user2 تغییر دهیم. برای این کار باید دستور را به صورت زیر اجرا کنید:

find / -user user1 -type f  -exec chown user2 {} /;

مطمئناً تا الان متوجه شده اید که پیدا کردن فایل ها یا دایرکتوری های موردنظر با استفاده از دستور find چقدر راحت و سریع انجام می شود. با ترکیب هر کدام از آپشن ها می توانید جستجوی دقیق تری انجام دهید و مستقیماً به فایل های موردنظر خود دسترسی پیدا کنید.

کلام آخر

دستور find برای جستجو و پیدا کردن فایل ها در سیستم لینوکس استفاده می شود و آپشن های آن کارها را برای شما راحت تر می کنند. کافی است پارامترهای موردنظر خود را انتخاب کنید و با استفاده از آنها، فایل های سیستم را فیلتر کنید تا فقط به فایل های موردنظر خود دسترسی پیدا کنید. ترکیب این پارامترها مثل اسم، نوع، سایز و … شرایط را برای یک جستجوی دقیق تر فراهم می کند.

از اینکه تا انتهای مقاله با ما همراه بودید، از شما متشکریم. امیدواریم که مطالعه این مقاله برای شما مفید واقع شده باشد. در صورت داشتن هرگونه سوال، درخواست و نیاز به راهنمایی، می توانید با ثبت نظر خود، با ما وارد ارتباط شوید تا هر چه زودتر به شما پاسخ دهیم.

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

بله دستور locate از معروف ترین جایگزین های دستور find است که به مراتب سریع تر از find هم عمل می کند.

مطالب مشابهی که شاید علاقمند باشید

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

دیدگاه های شما

برای دریافت این مقاله لطفا ایمیلتان را وارد کنید

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