تاریخ انتشار : دوشنبه ۳ آذر ۱۳۹۹ - ۱۳:۰۰
کد خبر : 32788

آموزش لینوکس (اسکریپت نویسی با Bash)

آموزش لینوکس (اسکریپت نویسی با Bash)

اسکریپت نویسی با بش (Bash) در لینوکس بش (bash) نام زبان ترمینال در لینوکس هست. هنگامی که یک ترمینال (مانند GNOME Terminal) را اجرا می کنید، پوسته Bash را اجرا می کنید که با یک اعلان مواجه می شوید. معمولاً یک علامت دلار ( $ ) که نشان می دهد پوسته منتظر وارد کردن ورودی شما است.
وقتی کامپیوتر بوت می شود، یک هسته (اعم از لینوکس ، BSD ، Mach یا NT) تمام سخت افزارهای فیزیکی را تشخیص می دهد و به هر یک از اجزا امکان می دهد تا با یکدیگر صحبت کنند و توسط برخی از نرم افزارهای اساسی تنظیم شوند.
بعد از بالا آمدن کامپیوتر، برای برقراری ارتباط با آن ۲ راه وجود دارد که یکی از طریق محیط گرافیکی و دیگری از طریق دستورات کامندی است که از طریق همین bash انجام می پذیرد.
بش اسکریپت معمولا توسط متخصصین امنیت مورد استفاده قرار میگیرد. برنامه نویسی یکی از مهم ترین ویژگی های یک مختصص امنیت محسوب می شود و باعث میشود متخصص سریع تر باهوش تر و موفق تر باشد. زیرا با یادگیری منطق برنامه نویسی شما میتوانید روند کار ابزار ها را بیشتر درک کنید.
البته بش اسکریپت قدرت خیلی بالایی ندارد و صرفا برای لینوکس و محیط ترمینال..

اسکریپت نویسی با بش (Bash) در لینوکس

بش (bash) نام زبان ترمینال در لینوکس هست. هنگامی که یک ترمینال (مانند GNOME Terminal) را اجرا می کنید، پوسته Bash را اجرا می کنید که با یک اعلان مواجه می شوید. معمولاً یک علامت دلار ( $ ) که نشان می دهد پوسته منتظر وارد کردن ورودی شما است.

وقتی کامپیوتر بوت می شود، یک هسته (اعم از لینوکس ، BSD ، Mach یا NT) تمام سخت افزارهای فیزیکی را تشخیص می دهد و به هر یک از اجزا امکان می دهد تا با یکدیگر صحبت کنند و توسط برخی از نرم افزارهای اساسی تنظیم شوند.

بعد از بالا آمدن کامپیوتر، برای برقراری ارتباط با آن ۲ راه وجود دارد که یکی از طریق محیط گرافیکی و دیگری از طریق دستورات کامندی است که از طریق همین bash انجام می پذیرد.

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

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

خروجی دستورات لینوکس در فایل txt

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

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

برای مثال ما می توانیم با دستور زیر خروجی دستور ping را در یک فایل txt ذخیره کنیم.

ping 192.168.1.102 -c 4 > ip.txt
خروجی دستورات لینوکس در فایل txt
خروجی دستورات لینوکس در فایل txt

همانطور که در دستور بالا مشاهده می کنید ما به ترمینال دستور دادیم ۴ بار از آی پی ۱۹۲.۱۶۸.۱.۱۰۲ پینگ گرفته و آن را بر روی فایل ip.txt ذخیره کند.

دستور (grep ، cut ، tr)

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

cat list.txt | grep "علیرضا"

به همین سادگی میتوانیم لیست را فیلتر کنیم. معمولا برای نفوذگرها کاربرد این دستور در اسکن کردن ip است. به طوری که می توانیم با دادن یک لیست بزرگ ip به سیستم و فیلتر کردن آنها به یک لیست ip فعال دسترسی بگیریم.

وقتی به یک سیستم داخل شبکه ping میگیریم اولین کلمه خروجی آن bytes 64 است. که به معنای فعال بودن و جواب دادن پکت است.

حال می توانیم از یک سیستم پینگ بگیریم و خروجی آن را ip.txt بگذاریم و با دستور زیر پکت هایی که جواب داده شده را نمایش دهیم.

cat ip.txt | grep "64 bytes"
استفاده از grep در ترمینال
استفاده از grep در ترمینال

همچنین می توانیم با اضافه کردن cut، فقط یک قسمت دلخواه از خروجی فیلتر شده را ببینیم. در مثال پایین با ماژول d- تمام خط فاصله ها و کلمات را حذف می کنم و با دستور f 4- کلمه چهارم از جمله را نگه میدارم.

cat ip.txt | grep "64 bytes" | cut -d " " -f 4
استفاده از cut در ترمینال
استفاده از cut در ترمینال

حال در خروجی فقط IP را میبینیم ولی در آخر ip یک : وجود دارد که می توانیم با دستور tr آنرا هم حذف کنیم و یک ip یکدست داشته باشیم.

 cat ip.txt | grep "64 bytes" | cut -d " " -f 4 | tr -d ":"
استفاده از tr در ترمینال
استفاده از tr در ترمینال

نوشتن یک اسکریپت در لینوکس

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

اما به جای اینکه ما دستورات را یکی یکی وارد ترمینال کنیم، می توانیم آنها را در قالب یک اسکریپت با پسوند sh. ذخیره کرده و خیلی راحت از آن استفاده کنیم.

برای مثال در دستور پایین یک اسکریپت ساده برای اسکن ip را می بینید که فقط با ذخیره کردن آن در یک فایل با پسورد sh. می توانید از آن استفاده کنید.

#!/bin/bash for ip in `seq 1 254` ; do ping -c 1 $1.$ip | grep "64 bytes" | cut -d " " -f 4 | tr -d ":" & done
  • دستور for به معنای “برای” است و یک حلقه تکرار محسوب می شود.
  • دستور seq برای رنج ip استفاده شده است.

دستور بالا را در یک فایل به نام ipsweep.sh ذخیره کرده و بعد از آن برای اسکن رنج آی پی ۱۹۲.۱۶۸.۱.۱ : ۱۹۲.۱۶۸.۱.۲۵۴ دستور زیر را وارد می کنم:

./ipsweep.sh 192.168.1
نوشتن اسکریپت با زبان بش در لینوکس
نوشتن اسکریپت با زبان بش در لینوکس

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

./ipsweep.sh 192.168.1 > iplist.txt

برای اینکه اسکریپت ما برای دیگران هم قابل استفاده باشد، میتوانیم یک راهنما برای آن بنویسیم! به طور مثال میتوانیم یک شرط اضافه کنیم که اگر کاربر رنج ip را وارد نکرد، یک پیغام نمایش دهد که “ip وارد نشده است و نحوه استفاده از اسکریپت اینگونه است”.

#!/bin/bash if [ "$1" == "" ] then echo "hello from kaliboys!" echo "IP faramosh shode !!!" echo "syntax : ./ipsweep.sh 192.168.1"  else  for ip in seq 1 254 ; do ping -c 1 $1.$ip | grep "64 bytes" | cut -d " " -f 4 | tr -d ":" & done fi
گذاشتن شرط در بش اسکریپت
گذاشتن شرط در بش اسکریپت
  • دستور if به معنای “اگر” است و شرط ما را بیان می کند.
  • دستور then به معنای “سپس” است که در تایید if می آید و دستور پایینش را اجرا می کند.
  • دستور else به معنای “در غیر این صورت” است که اگر شرط ما اشتباه بود برای ما ip را اسکن کند.

حلقه های تکرار (for , loops)

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

در مثال پایین من از فایل txt که بالاتر، آن را با اسکریپت خودمان به دست آوردیم استفاده کرده و پورت ۸۰ تمام ip های فعال در شبکه خصوصی خود را با ابزار nmap اسکن می کنیم.

for ip in $(cat iplist.txt); do nmap -sS -p 80 -T4 $ip & done
حلقه های تکرار (for , loops)
حلقه های تکرار در لینوکس

همانطور که در عکس بالا می بینید، من با یک خط کد پورت چندین ip را با ابزار nmap اسکن کردم.

از حلقه های تکرار می توانید در اسکریپت های bash هم استفاده کنید. مثلا می توانید اسکریپتی که برای اسکن ip ساختیم را به یک حلقه تکرار متصل کنیم.

این کار را به عنوان یک تمرین برای شما در نظر گرفته ام که خودتان بتونید اسکریپت نویسی کنید.

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

نوشته آموزش لینوکس (اسکریپت نویسی با Bash) اولین بار در کالی بویز. پدیدار شد.

برچسب ها :

ناموجود
ارسال نظر شما
مجموع نظرات : 0 در انتظار بررسی : 0 انتشار یافته : 0
  • نظرات ارسال شده توسط شما، پس از تایید توسط مدیران سایت منتشر خواهد شد.
  • نظراتی که حاوی تهمت یا افترا باشد منتشر نخواهد شد.
  • نظراتی که به غیر از زبان فارسی یا غیر مرتبط با خبر باشد منتشر نخواهد شد.