در دنیای لینوکس هر چیزی در قالب فایل می باشد و جهت کار با فایل ها دستورات متعددی وجود دارد. کانفیگ فایل ها، لاگ فایل ها و… نمونه ای از فایل های متنی هستند که با استفاده از دستوراتی نظیر cat, head, tail, more و… می توان محتویات آنها را مشاهده کرد. به دلیل حجیم بودن این فایل ها، کار کردن با دستوراتی مانند cat دشوار خواهد بود و نیازمند دستوراتی هستیم که قابلیت کار با پترن ها، جستجو و… را داشته باشند. یکی از این ابزارهای کاربردی grep می باشد که برگرفته از عبارت Global Regular Expression Print است. وظیفه این دستور جستجوی یک عبارت و یا الگو بین فایل یا فایلها (یا رشتهها) میباشد. این دستور آپشن های فراوانی دارد و ما فقط در این بخش به موارد کاربردی تر در حوزه VoIP خواهیم پرداخت.
مثال: می خواهیم بررسی کنیم آیا سیپ ترانکی با نام shatel_tr در فایل sip_additional.conf وجود دارد؟
grep “shatel_tr” /etc/asterisk/sip_additional.conf
اگر در فایل فوق عبارت shatel_tr وجود داشته باشد، آن را در خروجی نمایش می دهد و در غیراینصورت عبارتی نمایش داده نمی شود.
در این مثال در فایل sip_additional.conf کانتکستی به نام shatel_tr وجود دارد. پس grep آن را پیدا کرده و در خروجی سطر مربوطه را نمایش می دهد.
نکته: به صورت پیش فرض grep به حروف کوچک و بزرگ حساس می باشد. در صورتی که بخواهیم این حساسیت در نظر گرفته نشود، می توانیم از آپشن i استفاده کنیم.
grep -i “shatel_tr” /etc/asterisk/sip_additional.conf
نکته: فرض کنید دنبال عبارت خاصی در لاگ فایل ها هستید، استفاده از مثال فوق یکی از روش های سودمند خواهد بود.
مثال: اکنون که می دانیم در فایل فوق context ای به نام shatel_tr وجود دارد، می خواهیم شماره خط آن را بدست آوریم.
grep -n “shatel_tr” /etc/asterisk/sip_additional.conf
تصویر فوق بیانگر این است که این context در خط ۲۲۱ شروع شده است.
نکته: فرض کنید در کانفیگ فایل چند صد خطی سرویسی مانند آپاچی دنبال پارامترهای خاصی می گردید تا با ویرایشگرهای متنی مستقیما سراغ آن خطوط بروید. یکی از روش های سودمند استفاده از دستور مثال فوق می باشد.
مثال: به منظور فرآیند ممیزی می خواهیم بررسی کنیم چه تعداد داخلی SIP پسورد Admin110@ دارند.
grep -c “secret=Admin110@” /etc/asterisk/sip_additional.conf
در خروجی فوق عدد ۳ نمایش یافته است. پس ۳ اکانت سیپ پسورد Admin110@ دارند.
نکته: فرض کنید در لاگ ها فایل دنبال تعداد تلاش ها برای اتصال از یک IP خاص هستید، استفاده از دستور مثال فوق برای شما کاربردی خواهد بود.
مثال: اکنون که متوجه شدیم ۳ سیپ اکانت پسورد Admin110@ دارند، می خواهیم ابتدای context های آن ها را مشاهده کنیم.
grep -C 2 “secret=Admin110@” /etc/asterisk/sip_additional.conf
با دستور فوق ۲ خط قبل و ۲ خط بعد از عبارت match شده را مشاهده می کنیم.
مثال: سیپ ترانکی با نام shatel_tr داریم. می خواهیم ۹ خط ابتدای context آن را مشاهده کنیم.
grep -A 9 “shatel_tr” /etc/asterisk/sip_additional.conf
مثال: در دایرکتوری /etc/asterisk/ هستیم. می خواهیم ببینیم در کدام یک از فایل های sip.conf , sip_additional.conf و sip_custom.conf کانتکستی با نام shatel_tr وجود دارد.
grep “shatel_tr” sip.conf sip_custom.conf sip_additional.conf
در این خروجی بیان می شود که این context در فایل sip_additional.conf وجود دارد.
“سید محمد سجاد تکیه”
مدرس و مجری پروژه های شبکه های کامپیوتری، VoIP و IoT