دستور grep یکی از مهمترین و پرکاربردترین ابزارهای خط فرمان در لینوکس است که تقریبا هر کاربر حرفهای لینوکس، مدیر سرور یا توسعهدهنده روزانه از آن استفاده میکند. این دستور برای جستجوی متن، فیلتر کردن خروجی دستورات، پیدا کردن الگوها در فایلها و تحلیل لاگهای سیستمی کاربرد دارد.
اگر تا امروز فقط از grep برای جستجوی ساده کلمات استفاده کردهاید، باید بدانید این ابزار بسیار قدرتمندتر از چیزی است که تصور میکنید. قابلیت استفاده از Regular Expression، جستجوی بازگشتی، شمارش نتایج، جستجوی معکوس و ترکیب با سایر دستورات لینوکس باعث شده grep به یکی از ستونهای اصلی کار در ترمینال تبدیل شود.
در این مطلب بهصورت کامل دستور grep در لینوکس را بررسی میکنیم و با کاربردهای حرفهای آن آشنا میشویم.
دستور grep در لینوکس چیست؟
دستور grep ابزاری برای جستجوی متن در فایلها یا خروجی دستورات است. نام grep از عبارت زیر گرفته شده است:
Global Regular Expression Print
این دستور خطوطی را نمایش میدهد که با الگوی جستجوی شما مطابقت دارند.
ساختار کلی دستور به این شکل است:
grep [options] pattern [file]
در این ساختار:
- options تنظیمات و قابلیتهای اضافی دستور هستند
- pattern الگوی جستجو است
- file فایل یا فایلهایی هستند که باید بررسی شوند
چرا grep یکی از مهمترین ابزارهای لینوکس است؟
در محیط لینوکس تقریبا همه چیز به متن وابسته است. فایلهای تنظیمات، لاگها، خروجی دستورات و حتی بسیاری از ابزارهای مدیریتی مبتنی بر متن هستند.
به همین دلیل grep در سناریوهای مختلف استفاده میشود:
- جستجو در فایلهای لاگ
- پیدا کردن خطاهای سیستمی
- بررسی تنظیمات سرویسها
- فیلتر کردن خروجی دستورات
- مانیتورینگ سرور
- تحلیل دادههای متنی
- اسکریپتنویسی Bash
جستجوی ساده با grep
سادهترین استفاده grep جستجوی یک کلمه در فایل است.
فرض کنید فایلی به نام users.txt دارید و میخواهید کلمه admin را پیدا کنید:
grep admin users.txt
اگر کلمه موردنظر در فایل وجود داشته باشد، خطوط مرتبط نمایش داده میشوند.

جستجوی بدون حساسیت به حروف بزرگ و کوچک
بهصورت پیشفرض grep بین حروف بزرگ و کوچک تفاوت قائل میشود.
برای مثال:
grep root users.txt
ممکن است Root یا ROOT را پیدا نکند.
برای غیرفعال کردن حساسیت به حروف از گزینه i- استفاده میشود:
grep -i root users.txt
اکنون تمام حالتها جستجو میشوند.
نمایش شماره خطوط در نتایج
گاهی لازم است بدانید متن پیدا شده در کدام خط فایل قرار دارد.
برای این کار از گزینه -n استفاده کنید:
grep -n error logfile.log
خروجی چیزی شبیه این خواهد بود:
عدد ابتدای هر خط شماره خط فایل است.
جستجو در چند فایل همزمان
grep میتواند چند فایل را همزمان بررسی کند.
مثال:
grep warning app.log system.log parsdev.log
در این حالت grep تمام فایلها را جستجو میکند و نتایج را نمایش میدهد.
جستجوی بازگشتی در پوشهها
یکی از کاربردیترین قابلیتهای grep جستجو در کل پوشه و زیرشاخهها است.
برای این کار از گزینه r- استفاده میشود:
/grep -r database /etc
این دستور تمام فایلهای داخل پوشه etc/ را بررسی میکند.
این قابلیت برای مدیران سرور بسیار مهم است، به ویژه هنگام بررسی تنظیمات سرویسها
جستجوی معکوس در grep
گاهی لازم است خطوطی نمایش داده شوند که شامل عبارت موردنظر نیستند.
برای این کار از گزینه -v استفاده میشود:
grep -v localhost hosts.txt
اکنون تمام خطوط بهجز خطوط شامل localhost نمایش داده میشوند.
شمارش تعداد نتایج
اگر فقط تعداد تطابقها مهم باشد، میتوانید از گزینه c- استفاده کنید:
grep -c failed auth.log
این دستور تعداد خطوط شامل عبارت failed را نمایش میدهد.
استفاده از Regular Expression در grep
قدرت واقعی grep زمانی مشخص میشود که از Regular Expression استفاده کنید.
Regular Expression یا Regex الگوهای پیشرفته جستجو هستند که امکان تحلیل حرفهای متن را فراهم میکنند.
جستجوی خطوطی که با یک کلمه شروع میشوند
نماد ^ ابتدای خط را مشخص میکند:
grep "^root" passwd
این دستور خطوطی را پیدا میکند که با root شروع میشوند.
جستجوی خطوطی که با عبارت خاصی تمام میشوند
نماد $ انتهای خط را مشخص میکند:
grep "nologin$" passwd
جستجوی چند الگو همزمان
برای جستجوی چند عبارت میتوان از | استفاده کرد:
grep "error|warning" app.log
در برخی نسخهها باید از حالت Extended استفاده کنید:
grep -E "error|warning" app.log
با خرید سرور مجازی لینوکس به محیطی حرفهای برای مدیریت سرور، اجرای Docker و توسعه سرویسهای آنلاین دسترسی داشته باشید.
تفاوت grep و egrep
در نسخههای مدرن لینوکس معمولا egrep معادل زیر است:
grep -E
این حالت امکانات پیشرفتهتر Regex را فعال میکند.
مثال:
grep -E "(fail|error|warning)" logfile.log
هایلایت کردن نتایج جستجو
برای خوانایی بهتر میتوانید نتایج را رنگی نمایش دهید:
grep --color error logfile.log
در بسیاری از توزیعهای لینوکس این قابلیت بهصورت پیشفرض فعال است.
استفاده از grep همراه با دستورات دیگر
یکی از مهمترین قابلیتهای لینوکس امکان ترکیب دستورات با Pipe است.
grep معمولا همراه سایر دستورات استفاده میشود.
بررسی پردازشها
ps aux | grep nginx
این دستور پردازشهای مرتبط با Nginx را نمایش میدهد.
بررسی پورتهای فعال
ss -tulpn | grep 80
تحلیل لاگهای سیستمی
journalctl -xe | grep failed
این روش یکی از رایجترین کاربردهای grep در مدیریت سرور است.
جستجوی فایلهای باینری
بهصورت پیشفرض grep فایلهای باینری را نادیده میگیرد. برای جستجو در این فایلها میتوانید از گزینه a- استفاده کنید:
grep -a text binaryfile
جستجو فقط در نام فایلها
اگر فقط میخواهید نام فایلهایی که شامل عبارت خاصی هستند نمایش داده شود، از l- استفاده کنید:
grep -l password *.txt
جستجو با نمایش خطوط اطراف
گاهی لازم است چند خط قبل و بعد از نتیجه نیز نمایش داده شوند.
نمایش خطوط بعد از نتیجه
grep -A 3 error logfile.log
نمایش خطوط قبل از نتیجه
grep -B 2 error logfile.log
نمایش خطوط قبل و بعد
grep -C 2 error logfile.log
کاربرد grep در مدیریت سرور
مدیران لینوکس و DevOps بیشترین استفاده را از grep دارند.
برخی کاربردهای حرفهای عبارتند از:
- بررسی حملات SSH
- پیدا کردن خطاهای Apache و Nginx
- تحلیل لاگ Docker
- مانیتورینگ سرویسها
- بررسی وضعیت Cron
- تحلیل لاگ Fail2Ban
- فیلتر کردن خروجی Kubernetes
مثال:
grep "Failed password" /var/log/auth.log
تفاوت grep و ripgrep
در سالهای اخیر ابزارهایی مانند ripgrep یا rg محبوب شدهاند که سرعت بالاتری دارند.
با این حال grep هنوز:
- روی همه توزیعها نصب است
- بسیار پایدار است
- مصرف منابع کمی دارد
- در اسکریپتها استاندارد محسوب میشود
به همین دلیل grep همچنان یکی از مهمترین ابزارهای لینوکس است.
اشتباهات رایج هنگام استفاده از grep
بسیاری از کاربران تازهکار هنگام استفاده از grep دچار خطا میشوند.
فراموش کردن کوتیشن
اگر عبارت جستجو فاصله داشته باشد باید داخل کوتیشن قرار بگیرد:
grep "internal server error" log.txt
جستجوی اشتباه Regex
برخی کاراکترها در Regex معنی خاص دارند و باید Escape شوند.
مثال:
grep "\." file.txt
عبارت \. یعنی جستجوی نقطه واقعی داخل متن فایل، خروجی خطوطی خواهد بود که دارای کاراکتر . باشند
استفاده اشتباه در فایلهای بزرگ
در فایلهای بسیار بزرگ بهتر است از گزینههایی مانند F- یا ابزارهایی مانند rg استفاده شود تا عملکرد بهتر باشد.
بهترین گزینههای کاربردی grep
در استفاده روزمره این گزینهها بیشترین کاربرد را دارند:
جستجوی بدون حساسیت به حروف
grep -i
جستجوی بازگشتی
grep -r
نمایش شماره خطوط
grep -n
جستجوی معکوس
grep -v
شمارش نتایج
grep -c
فعالسازی Extended Regex
grep -E
جمعبندی
دستور grep یکی از قدرتمندترین ابزارهای خط فرمان لینوکس است که تقریبا در تمام سناریوهای مدیریتی، برنامهنویسی و تحلیل سیستم استفاده میشود. از جستجوی ساده متن گرفته تا تحلیل حرفهای لاگها و پردازش خروجی دستورات، grep نقش مهمی در کار روزمره کاربران لینوکس دارد.
یادگیری حرفهای grep نهتنها سرعت کار شما را در ترمینال افزایش میدهد، بلکه درک بهتری از ساختار سیستمعامل لینوکس و مدیریت سرورها به شما میدهد.
اگر به مدیریت سرور، DevOps، امنیت یا برنامهنویسی Bash علاقه دارید، تسلط بر grep یکی از مهارتهای ضروری شما خواهد بود.
