استفاده از “find” و “grep” دو ابزار جتسجو
![استفاده از](https://linuxacademy.ir/wp-content/uploads/2023/04/Orginal-findgrep-copy.jpg)
find :
دستور “find” یک ابزار قدرتمند در لینوکس است که برای جستجو، پیدا کردن و عملیاتی بر روی فایلها و دایرکتوریها استفاده میشود. این دستور دارای بسیاری از آپشنها است که به کاربر امکانات بیشتری برای جستجو و عملیات بر روی فایلها و دایرکتوریها میدهد. در ادامه یک مقاله کامل برای دستور “find” به همراه تمامی آپشنهای آن است:
با استفاده از این دستور، میتوانید به سادگی فایلها و دایرکتوریها را براساس معیارهای مختلفی مانند نام، اندازه، تاریخ تغییرات و … جستجو کرده و عملیات مختلفی مانند حذف، انتقال، تغییر سطوح دسترسی و … را بر روی آنها انجام کرد.
ساختار کلی دستور “find” به صورت زیر است:
[دستور یا کامند] [آپشنها] [مسیر] find
که به ترتیب شامل “مسیری که قرار است جستجو در آن انجام شود”، “آپشنهای مورد نظر برای تعیین معیارهای جستجو”، و “اعمالی که قرار است روی فایلها و دایرکتوریها انجام شوند”، میباشد.
آپشنها:
type
– : جستجو براساس نوع فایل یا دایرکتوری. برخی از موارد این آپشن عبارتند از:
f
: فایلهاd
: دایرکتوریهاl
: لینکهای سمبلیکb
: بلاکc
: کاراکترp
: پایپهاs
: سوکتها
"find /root/etc -type f -name "*.txt
iname-
: جستجو براساس الگوی نام فایل یا دایرکتوری بدون توجه به حروف بزرگ یا کوچک بودن آن.
size
– : جستجو براساس اندازه فایل یا دایرکتوری. میتوانید از مقادیری مانند c
برای بایت، k
برای کیلوبایت، M
برای مگابایت، و G
برای گیگابایت استفاده کنید.
به عنوان مثال: size +100M-
جستجوی فایلهایی با اندازه بیشتر از 100 مگابایت.
find /root/etc -size +1M
empty
– : جستجو برای فایلها و دایرکتوریهای خالی (بدون محتوا).
group
– : جستجو براساس گروه مالکیتی فایل یا دایرکتوری.
find /root/etc -group users
user
– : جستجو براساس کاربر مالک فایل یا دایرکتوری.
find /root/etc -user john
mtime
– : جستجو براساس تاریخ تغییرات فایل یا دایرکتوری به تعداد روزهای مشخص شده پیش از اجرای دستور.
find /root/etc -mtime +30
ctime
– : جستجو براساس تاریخ تغییرات سیستمی فایل یا دایرکتوری به تعداد روزهای مشخص شده پیش از اجرای دستور.
find /root/etc -ctime -7
atime-
: جستجو براساس تاریخ دسترسی فایل یا دایرکتوری به تعداد روزهای مشخص شده پیش از اجرای دستور.
mount-
: محدود کردن جستجو در یک فایلسیستم خاص.
xdev
– : مانع از ورود به سایر فایلسیستمها متصل شده در یک سیستم.
newer file-
: جستجو براساس فایلهای جدیدتر از فایل داده شده.
delete-
: حذف فایلها و دایرکتوریهای پیدا شده.
follow-
: پیگیری لینکهای سمبلیک و جستجو در مقصد آنها.
depth-
: جستجو از عمق پایین به بالا در ساختار درختی فایلها و دایرکتوریها.
exec-
: اجرای یک دستور خارجی برای هر فایل یا دایرکتوری یافته شده.
+ {} find /root/etc -name "*.log" -exec rm
ok-
: اجرای یک دستور خارجی برای هر فایل یا دایرکتوری یافته شده با تایید کاربر.
maxdepth-
: محدود کردن عمق جستجو تا سطح خاصی از دایرکتوری.
"find /root/etc -maxdepth 2 -name "*.jpg
mindepth-
: عمق حداقل جستجو از یک سطح دایرکتوری مشخص.
iregex-
: جستجو براساس عبارت منظم (Regular Expression) در نام فایل یا دایرکتوری بدون توجه به حروف بزرگ یا کوچک بودن آن.
"find /root/etc -iregex ".*\.txt
not expr-
: جستجو براساس عدم برقراری عبارت منظم (expr) در مورد فایل یا دایرکتوری
perm mode-
: جستجو براساس سطوح دسترسی فایل یا دایرکتوری با مود داده شده.
print-
: چاپ نتایج جستجو به صورت پیشفرض.
find /root/etc -name "*.txt" -print
prune-
: متوقف کردن جستجو درون یک دایرکتوری خاص و عبور از آن.
** در iname
وiregex
اگر i را حذف کنیم، حروف کوچک و بزرگ مهم میشوند**
grep :
دستور “grep” یک ابزار قدرتمند در سیستم عامل لینوکس است که برای جستجوی الگوها در فایلها یا متنها استفاده میشود. “grep” کوتاه شدهی “Global Regular Expression Print” است و در بسیاری از توزیعهای لینوکس، از جمله Ubuntu، Debian، CentOS و Fedora، پیشفرض نصب شده است.
برای جستجو به صورت زیر میتوان اقدام کرد:
[مسیر] [کلمه] grep
grep "hello" file.txt
r- : اگر میخواهید در تمامی زیردایرکتوریها و فایلهای یک دایرکتوری جستجو کنید، از “r-” استفاده کنید. برای مثال:
grep -r "hello" /home/user
این دستور، کلیه فایلها و زیردایرکتوریهای داخل مسیر ” /home/user” را بررسی میکند و تمامی خطوطی که کلمه “hello” در آنها وجود دارد را نمایش میدهد.
i- : اگر میخواهید جستجویی انجام دهید که به بزرگی و کوچکی حروف حساس نباشد، از “i-” استفاده کنید. برای مثال:
grep -i "hello" file.txt
این دستور، تمامی خطوطی را که کلمه “hello” با هر ترکیبی از حروف بزرگ و کوچک آن در آنها وجود دارد در فایل “file.txt” پیدا کرده و نمایش میدهد.
l- (نمایش فقط نام فایلهای حاوی الگو): اگر میخواهید فقط نام فایلهایی که الگو در آنها وجود دارد را مشاهده کنید، از “-l” استفاده کنید. برای مثال:
grep -l "hello" /home/user
v- (نمایش خطوطی که الگو در آنها وجود ندارد): اگر میخواهید خطوطی را که الگو در آنها وجود ندارد نمایش دهید، از “v-” استفاده کنید. برای مثال:
grep -v "hello" file.txt
این دستور، تمامی خطوطی را که کلمه “hello” در آنها وجود ندارد در فایل “file.txt” پیدا کرده و نمایش میدهد.
n- (نمایش شماره خطوط): اگر میخواهید شماره خطوطی که الگو در آنها وجود دارد را نمایش دهید، از “n-” استفاده کنید. برای مثال:
grep -n "hello" file.txt
E- (استفاده از عبارات باقاعده): اگر میخواهید از عبارات باقاعده (Regular Expressions) برای جستجو استفاده کنید، از “E-” استفاده کنید. برای مثال:
grep -E "hello|world" file.txt
این دستور، تمامی خطوطی را که کلمه “hello” یا “world” در آنها وجود دارد در فایل “file.txt” پیدا کرده و نمایش میدهد.
f- (خواندن الگوها از یک فایل): اگر میخواهید الگوها را از یک فایل جداگانه بخوانید، از “f-” استفاده کنید. برای مثال:
grep -f patterns.txt file.txt
این دستور، تمامی الگوهای موجود در فایل “patterns.txt” را خوانده و در فایل “file.txt” جستجو میکند و تمامی خطوطی را که با الگوهای موجود در فایل “patterns.txt” مطابقت دارند، نمایش میدهد.
A- (نمایش خطوط بعد از مطابقت): اگر میخواهید تعدادی خط بعد از هر خطی که با الگو مطابقت دارد را نمایش دهید، از “A-” به همراه عدد تعداد خطوط مورد نظر استفاده کنید. برای مثال:
grep -A 3 "error" log.txt
این دستور، تمامی خطوطی را که کلمه “error” در آنها وجود دارد همراه با سه خط بعد از آنها، نمایش میدهد.
B- (نمایش خطوط قبل از مطابقت): اگر میخواهید تعدادی خط قبل از هر خطی که با الگو مطابقت دارد را نمایش دهید، از “B-” به همراه عدد تعداد خطوط مورد نظر استفاده کنید. برای مثال:
grep -B 3 "warning" log.txt
C- (نمایش خطوط قبل و بعد از مطابقت): اگر میخواهید تعدادی خط قبل و بعد از هر خطی که با الگو مطابقت دارد را نمایش دهید، از “C-” به همراه عدد تعداد خطوط مورد نظر استفاده کنید. برای مثال:
grep -C 3 "error" log.txt
این دستور، تمامی خطوطی را که کلمه “error” در آنها وجود دارد همراه با دو خط قبل و دو خط بعد از آنها، نمایش میدهد.