فروش ویژه : ثبت دامنه آی آر IR فقط 99 هزار تومان سفارش آنلاین/ تحویل آنی
فروش ویژه : ثبت دامنه دات کام COM فقط 899 هزار تومان سفارش آنلاین/ تحویل آنی (بهترین پیشنهاد)
فروش ویژه : 1500 مگابایت هاست ابری به همراه SSL رایگان ماهیانه فقط 69 هزار تومان مشاهده مشخصات و پلن ها

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

دستور Find که برای جستجو و پیدا کردن فایل در سیستم عامل linux مورد استفاده قرار می گیرد.
شما می توانید فایل های مورد نیاز را بر اساس date ,permission ,type ,group ,owner ,name و دیگر معیارها پیدا کند.

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

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

find [-H] [-L] [-P] [path...] [expression]

 

پیدا کردن یک فایل با نام آن و بدون در نظر گرفتن کوچکی و بزرگی حروف

find / -iname "host.conf"

 

پیدا کردن یک فایل با نام فایل

find / -name "host.conf"

 

دستور زیر ۵ تا از بزرگترین فایل های موجود در دایرکتوری و زیر دایرکتوری جاری را لیست میکند . با توجه به اندازه فایل مورد نیاز این جستجو ممکن است کمی زمانبر باشد.

find . -type f -exec ls -s {} \; | sort -n -r | head -5

 

یافتن ۵ تا از کوچکترین فایل ها در دایرکتوری جاری

find . -type f -exec ls -s {} \; | sort -n | head -5

 

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

find . -maxdepth 1 -empty

 

یافتن فایل passwd در دایرکتوری روت فقط تا یک سطح بعد از دایرکتوری روت

find / -maxdepth 2 -name passwd

 

یافتن فایل passwd در دایرکتوری روت تا حداکثر دو سطح بعد از دایرکتوری جاری

find -mindepth 3 -maxdepth 5 -name passwd

 

یافتن فایل passwd بین زیر دایرکتوری جاری دوم و چهارم

find -mindepth 3 -maxdepth 5 -name passwd

 

پیدا کردن همه ی فایل های با پسوند txt و کپی آنها از یک دایرکتوری به دایرکتوری دیگر

find /home/user1 -name ‘*.txt’ | xargs cp -av –target-directory=/home/backup/ –parents

 

نمایش همه ی فایل ها داخل پارتیشن لینوکس ( / ) که دارای مجوز مورد نظر هستند

find / -perm -u+s

 

جستجوی فایل های با پسوند rpm و تغییر مجوز آنها !

find / -name *.rpm -exec chmod 755 ‘{}’ \;

 

جستجوی فایل های ایجاد شده با تغییر کرده در طول ۱۰ روز گذشته

find /usr/bin -type f -mtime -10

 

جستجوی فایل های باینری که در ۱۰۰ روز گذشته استفاده نشده اند

find /usr/bin -type f -atime +100

 

جستجوی فایل و دایرکتوری متعلق به user1

find / -user user1

 

نمایش مکان یک فایل باینری , سورس یا مستندات

whereis halt

 

پیدا کردن فایلهایی که بیشتر از ۱۰۰ کیلو بایت و کمتر از یک مگابایت حجم دارند

find . -size +100k -and -size -1M

 

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

find -maxdepth 1 -not -iname "MyCProgram.c"

دستور بالا با عمق یک دایرکتوری تمام فایلهایی را که نام آن‌ها Myprogram.c (غیر حساس به حروف کوچک و بزرگ) نیست را پیدا کرده و چاپ میکند.

میتوانید به جای -not از ! هم استفاده کنید. در این صورت باید قبل از ! یک بک اسلش (\) قرار دهید تا shell (پوسته)این علامت را به اشتباه تفسیر نکند. دستور زیر مشابه دستور بالاست.

find -maxdepth 1 \! -iname "MyCProgram.c"

 

دستور زیر دایرکتوری جاری و تمام زیر دایرکتوری هایش را جستجو میکند و فایلهایی را نشان میدهد که محتویات آن‌ها در ۶۰ دقیقه اخیر تغییر کرده‌ است

find . -mmin -60

 

دستور زیر دایرکتوری ریشه یعنی / را جستجو میکند و فایلهایی را که محتویات آن‌ها در ۲۴ ساعت گذشته یا یک روز پیش تغییر کرده‌ است را نشان میدهد.

find / -mtime -1

 

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

find . -type f -newermt 2016-06-19 ! -newermt 2016-06-28

 

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

find . -type f -newerat 2016-06-19 ! -newerat 2016-06-28

 

دستور زیر تمام فایل هایی که در بازه زمانی مشخص شده سطح دسترسی آنها تغییر یافته است (permission) را نمایش خواهد داد

find . -type f -newerct 2016-06-19 ! -newerct 2016-06-28

 

پیدا کردن فایلی از طریق مقایسه آن با Modification time فایلی دیگر فرض کنید که یک ساعت پیش فایل MybashProgram.sh را ویرایش کردید. حالا میخواهید تمام فایلهایی که از آن موقع تا کنون تغییر کرده‌اند را ببینید. گزینه -newer این کار را انجام میدهد و فایلهایی را که Modification time آن‌ها از یک فایل خاص جدیدتر است را نمایش میدهد. مسیر کامل این فایل خاص را باید بعد از -newer وارد کنید.

find -newer MybashProgram.sh

 

دستور زیر فایل‌هایی که بعد از ویرایش فایل /etc/hosts در دسترس قرار گرفته‌اند را نشان میدهد. اگر شما به خاطر می آورید که چیزی را به فایل /etc/hosts اضافه کردید و میخواهید فهرست تمام فایل‌هایی را ببینید که بعد از آن در دسترس قرار گرفته‌اند این دستور را بزنید.

find -anewer /etc/hosts

 

دستور زیر تمام فایلهایی را نشان میدهد که inode آن‌ها پس از ویرایش محتویات فایل /etc/fstab ، تغییر کرده . اگر شما یادتان می‌آید که یک mount point به فایل /etc/fstab اضلفه کرده‌اید و میخواهید تمام فایلهایی را که پس از آن واقعه ، اطلاعات inode شان تغییر کرده را ببینید این دستور را بزنید:

find -cnewer /etc/fstab

 

 

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

 

* دستور rm برای پاک کردن

* دستور cp برای کپی کردن

* دستور mv برای تغییر نام یا جابه جایی

* دستور md5sum برای محاسبه الگوریتم md5sum

* دستور wc برای شمارش فایلها

* اجرای هر دستور دلخواه دیگر

* اجرای شل اسکریپتی که خودتان نوشته‌اید.

 

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

find <PATH> <CONDITION to Find files> -exec <OPERATION> {} \;

 

میخواهیم فایلهایی که myprogram.c نام دارند را پیدا کرده و سپس آن‌ها را در پوشهhome/$USERNAME/backup کپی کنیم. برای کپی فایلها باید از دستور cp استفاده کنیم. سینتکس دستور cp بدین صورت است.

find -iname "MyCProgram.c" -exec /bin/cp {} /home/$USERNAME/bakup \;

 

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

find . -name mycprogram -delete

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

 

اگر میخواهید فایلهایی که متعلق به گروه خاصی هستند را پیدا کنید، میتوانید با گزینه -group آن را مشخص کنید.

find -group root

 

تعداد لینک

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

با گزینه -links میتوانید جستجو را بر اساس تعداد لینکهای سخت انجام دهید مثلاً دستور زیر تمام فایلهایی را که بیشتر از ۳ لینک سخت دارندو از نوع f هستند پیدا میکند.

find -type f -links +3

 

برای ذخیره نتیجه جستجو در یک فایل متنی میتوانید از دستور زیر استفاده نمایید:

find -fls list

دستور بالا خروجی را در فایلی به نام list ذخیره میکند. اگر این فایل وجود نداشته باشد ساخته می‌شود و اگر وجود داشته باشد بر روی آن overwrite میشود.

آیا این پاسخ مفید بود؟

خوانده شده

آموزش اضافه کردن هارد جدید در CentOS

در این آموزش فرض نموده هارد درایو فیزیکی روی سیستم نصب شده و در سیستم عامل قابل رویت می باشد....

تنظیمات شبکه در CentOS 6

تنظیمات شبکه در CentOS 6 : در نظر داشته باشید که برای پیاده سازی تنظیمات ذیل ابتدا باید از طریق...

لینک فایل و دایرکتوری در لینوکس – دستور ln

لینک ها در لینوکس همان مفهوم Short Cut ویندوز هستند. لینک های هارد Hard Link • با لینک های...

تنظیمات شبکه در CentOS 7

در نظر داشته باشید که برای پیاده سازی تنظیمات ذیل ابتدا باید از طریق پروتکل SSH به سرور خود متصل...

تغییر پورت 22 SSH در CentOS 7

جهت افزایش امنیت سرور لینوکس خود بهتر است نسبت به تغییر پورت SSH از پیش فرض (یعنی 22) به یک پورت...