اطلاعیه

Collapse
No announcement yet.

linux shell programming

Collapse
This is a sticky topic.
X
X
 
  • Filter
  • زمان
  • Show
Clear All
new posts

  • linux shell programming

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

    : برنامه نویسی در شل

    کنسول در سیستمهای عامل اپن سورس از مهمترین مزایای انها بشمار میاید . به گونه ای که کاربران حرفه ای بیشتر ترجیح میدهند تنها در مواقع اندکی از ابزارهای گرافیکی و به طور کلی محیط گرافیکی استفاده کنند .
    از آنجا که در اسکریپت نویسی می توان تابع ، متغییر ، شرط ، حلقه و … بکار برد شاید بتوان از شل اسکریپت بعنوان یک شبه نرم افزار نیز نام برد .
    همچنین یکی از مهمترین جنبه های کاربرد اسکریپتهای شل ، استفاده به عنوان ابزارهای پیکره بندی و نصب خودکار است .
    مانند اولین تمرینهای برنامه نویسی ! از یک HELLO WORLD ساده شروع میکنیم
    کد:
    #!/bin/bash
    echo "HELLO WORL"
    و اما چه چیزی نوشته ایم ؟
    خط اول مفسر دستوراتی را که در اسکریپت می نویسم معرفی می کند ، همانند سایر اسکریپتها که در لینوکس می نویسیم .
    در خط دوم فرمان - ابزار - echo را فراخوانی کرده و به عنوان ارگومان نوشته خود را در داخل " " قرار می دهیم . البته می توان به روشهای دیگری نیز این کار را انجام داد :
    کد:
    t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ echo "HELLO WORLD@`date`"
    HELLO WORLD@Sat Jul  9 18:36:12 IRDT 2011
    t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ echo HELLO WORLD@`date` 
    HELLO WORLD@Sat Jul 9 18:36:16 IRDT 2011
    t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ echo 'HELLO WORLD@`date`'
    HELLO WORLD@`date`
    t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $
    که همانطور که می بینید خروجیهای متفاوتی را خواهیم داشت . که در آینده راجع به ان بحث خواهیم کرد .



    اینجا و در ابتدای ار تنها مباحث اولیه گفته میشه ... به امید خدا در ادامه هر کدام از بحثها باز خواهند شد با نمونه های کاربردی
    Last edited by t4z3v4r3d; 07-09-2011, 03:56 AM.

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


    FreeBSD t4yt4n 6.3-RELEASE-p2 FreeBSD 6.3-RELEASE-p2 #0:
    Sun May 11 20:03:31 IRDT 2008 root@t4yt4n:/usr/obj/usr/src/sys/H1 i386
    نه برای فخر فروشی برای یاد آوری آنچه نمی دانم

  • #2
    : برنامه نویسی در شل

    چگونگی نمایش تابع :

    اصولا bash به زبان c بسیار نزدیک است و خصوصیات شبیه ان دارد .
    تعریف تابع به دو صورت انجام پذیر است
    کد:
    1) 
    function f {
    some codes
    }
    
    
    2 )
    f() {
    some codes
    }
    تابع میتواند مقادیر ورودی بگیرد یا خروجی را برگرداند .
    توابع میتوانند دارای متغییرهای سراسری یا محلی باشند .
    برای فراخوانی تابع تنها نام تابع را صدا زده و تابع اجرا خواهد شد

    متغیرها :
    مانند همه زبانهای برنامه نویسی نیز در شل اسکریپت نویسی متغیرها وجود دارند.
    همینطور متغیرها به صورت محلی و یا به صورت سراسری وجود دارند


    متغیرهای محلی ماند زبان c تنها در تابعی که مقدار دهی شده وجود دارند و در صورت خروج از تابع مقدار انها NULL خواهد بود


    متغیر سراسری همانگونه که از نامش پیداست در کل اسکریپت قابل دسترسی می باشد

    نکته دارای اهمیت اینکه :

    متغیر های سراسری نیز به نوعی محلی -شاید- بحساب میروند چون در هیچ تابعی بکار گرفته نشده اند.
    به بیان دیگر هرگاه متغیری درون یک تابع باشد محلی بحساب می اید و تا زمانیکه در جایی -تابعی دیگر – فراخوانی نشود مقداری ندارد



    کد:
    #!/bin/bash
    [COLOR="Lime"]var[/COLOR]=global_var
    [COLOR="SlateGray"]test[/COLOR]() {
          [COLOR="DarkOrchid"]local[/COLOR] [COLOR="Lime"]var[/COLOR]=local_var
          [COLOR="Purple"]echo[/COLOR] [COLOR="Lime"]$var[/COLOR]
    }
    [COLOR="DarkOrchid"]echo[/COLOR] [COLOR="Lime"]$var[/COLOR]
    test
    [COLOR="Purple"]echo[/COLOR] [COLOR="Lime"]$var[/COLOR]
    کد:
    t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ bash /tmp/test 
    global_var
    local_var
    global_var
    Last edited by t4z3v4r3d; 07-09-2011, 04:59 AM.

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


    FreeBSD t4yt4n 6.3-RELEASE-p2 FreeBSD 6.3-RELEASE-p2 #0:
    Sun May 11 20:03:31 IRDT 2008 root@t4yt4n:/usr/obj/usr/src/sys/H1 i386
    نه برای فخر فروشی برای یاد آوری آنچه نمی دانم

    Comment


    • #3
      : برنامه نویسی در شل

      وضعیتهای شرطی :

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

      تعیین وضعیت با if:

      کد:
       if [ some state ];then
      do something
      else
      do something_else
      fi
      در نمونه کد بالا میبینم که با تعیین شرطی که در بین [ ] می اید ، یک فرمان صادر میشود که این فرمان از انجام یک کار تا مقدار دهی به یک متغیر و یا چاپ یک پیغام و یا ... باشد.
      در صورتی که این شرط نقض گردد یعنی slse برقرار باشد کاردیگری انجام خواهد شد .
      و در پایان fi خاتمه بررسی شرط است .

      برای مثال میتوان از وجود یا عدم وجود یک فایل در یک محل خاص مطلع شد

      کد:
      if [ ! -f /some/where/some/.file ];then
      [COLOR="Magenta"]echo[/COLOR] " [COLOR="Red"]File not found[/COLOR]"
      else
      [COLOR="#ff00ff"]echo[/COLOR] "[COLOR="Red"]File founded[/COLOR]"
      fi
      تعیین وضعیت با case :

      شاید برای بررسی تعداد زیادی وضعیت استفاده از if خیلی منطقی نباشد (همانطور که میدانید استفاده از if مقدار زیادی از منابع را در مقایسه با case درگیر میکند)

      چگونگی استفاده از case
      برای بکاربردن این ابزار به شیوه زیر عمی خواهیم کرد ...:

      کد:
      [B]case[/B] [COLOR="Lime"]some_state/variable/something[/COLOR] in
      state no1)
      do job 1
      [B];;[/B]
      state no 2)
      do job2
      [B];;[/B]
      *)
      default state 
      [B];;[/B]
      [B]esac[/B]

      خب خیلی پیچیده نیست . تنها یک مقدار/حالت برای بررسی در نظر گرفته میشود و در صورتی که مقادیر متنوع ورودی با هرکدام از حالتها سازگار باشد کار مورد نظر انجام می گردد .
      در صورتی که هیچ کدام مقادیر/حالتهای در نظر گرفته شده با مقدار/حالت بدست امده در ورودی تطابق نداشته باشد میتوان یک عمل/مقدار پیش فرض را برای انجام کار در نظر گرفت
      پس از خاتمه وضعیت هم مانند if باید شرط را با esac پایان داد
      Last edited by t4z3v4r3d; 07-09-2011, 01:00 PM.

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


      FreeBSD t4yt4n 6.3-RELEASE-p2 FreeBSD 6.3-RELEASE-p2 #0:
      Sun May 11 20:03:31 IRDT 2008 root@t4yt4n:/usr/obj/usr/src/sys/H1 i386
      نه برای فخر فروشی برای یاد آوری آنچه نمی دانم

      Comment


      • #4
        برنامه نویسی در شل :

        حلقه ها:

        برای تکرار در یک عمل به تعدادی که نوشتن هر باره مقرون به صرفه نیست شاید بهترین راه ،کاربرد حلقه ها باشد


        حلقه for

        معروفترین حلقه در میان حلقه ها . در صوری که با زبان c آشنایی داشته باشید این حلقه برای شما بسیار اسان است .
        شروع حلقه با مقدار دهی یک متغیر از کران پایین تا بالا و میزان تغییرات این در همه زبانها برای done است و ممکن است تنها اندکی در syntax تفاوت وجود داشته باشد .

        کد:
        [B]for ((var=start; var <  / >  / <=> end ; var ++/var-- ));[B]do[/B][/B]
        do something
        [B]done[/B]
        این حلقه بسیار اسان و قابل فهم است : به ازای اندازه تغییر از مقدار پایه تا کران بالا /پایین ، یک مقدار را میشمرد که این شمردن ممکن است مثبت یا منفی باشد ( اولین بار برای اجرای یک مربع از این حلقه استفاده کردم )

        حلقه while :

        عملکرد این حلقه مانند استفاده از یک حلقه for بعلاوه if که شرط از حد گذشتن را چک کند ولی مقدار کران بالا در حلقه نامتناهی باشد . به بیان دیگر ممکن است شرط حلقه هنوز برقرار باشد اما شرط if نقض شده باشد . در زیر یک نمونه میبینیم

        کد:
        var=some_number
        [B]while[/B] [ [COLOR="Lime"]var[/COLOR] = [COLOR="#00ff00"]default_state[/COLOR] ];[B]do[/B]
        [COLOR="Red"]do something[/COLOR]
        [B]done[/B]
        برای اجرا شدن این نوع حلقه باید برای شرط حلقه مقداری معین وجود داشته باشد و با مقداری پیش فرض مقایسه گردد تا زمانیکه این شرط برقرار است دستوری که بین do تا done قرار گرفته اجرا خواهد شد .
        نکته اینکه : متغیرهایی که در این حلقه ها وجود دارند متغیرهای محلی به حساب می ایند و بنابراین مقادیر انها در بیرون از حلقه تقریبا قابل دسترس نیست.
        Last edited by t4z3v4r3d; 07-09-2011, 02:23 PM.

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


        FreeBSD t4yt4n 6.3-RELEASE-p2 FreeBSD 6.3-RELEASE-p2 #0:
        Sun May 11 20:03:31 IRDT 2008 root@t4yt4n:/usr/obj/usr/src/sys/H1 i386
        نه برای فخر فروشی برای یاد آوری آنچه نمی دانم

        Comment


        • #5
          سلام . یه چندروزی مشکل دارم اما دلم نمیاد این پست رو ول کنم هرجوری که باشم

          برنامه نویسی در شل :

          تا اینجا چند ابزار و دستوراتی که بیشتر بکار میاد رو با هم بررسی کردیم
          و حالا کاربرد های ساده اما کاربردی

          کاربرد متغیر و اجرای یک دستور شرطی

          کد:
          #!/usr/bin/env/ bash
          
          ###Checking if user ID Was not root###
          
          [COLOR="Lime"]i_d[/COLOR]="`[COLOR="Red"]id[/COLOR] -u`"
          
          [B]if[/B] [ "[COLOR="Lime"]$i_d[/COLOR]" != "[COLOR="Magenta"]0[/COLOR]" ];[B]then[/B]
          
           [COLOR="#ff00ff"]echo[/COLOR] "[COLOR="Red"]Not root[/COLOR]"
          [B]else[/B]
          
           [COLOR="Magenta"]echo[/COLOR] "[COLOR="Red"]root[/COLOR]"
          [B]fi[/B]
          
          [COLOR="Magenta"]echo[/COLOR] [COLOR="Lime"]$i_d[/COLOR]

          خب در خط اول که معرفی مفسر دستور هست
          خط دوم کامنت اسکریپت هست در شل اسکریپت نویسی برای کامنت گذاشتن از "#" استفاده می کنیم
          خط سم مقدار دهی به یک متغیر هست . نکته اینکه در این زبان نیاز به معرفی متغیر از قبل نیست . و اما نوع مقدار دهی :
          اگر دقت کرده باشید اولین مبحث که Hello world بود یک متغیر تعریف کردیم وحالا در اینجا بیشتر بررسی میکنیم
          متغیر رو با یک " `` " مقدار دهی میکنیم به این صورت که هر چیزی که بین کوتیشنها قرار میگیره به صورت یکجا به متغیر نسبت میدهیم
          اما برای اجرا کردن دستوراتی که باید مقدار برگشتی انها به متغیر داده بشه با استفاده از `` دستورات رو اجرامیکنیم . البته اشکال دیگری هم داره که بعدا بررسی میکینم و تفاوت اجرای اونها رو هم میببینم
          برای فراخانی متغیر، باید جاوی نام ان یک $ قرار داد.

          کد:
          t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ /tmp/s
          Not root
          1001
          Last edited by t4z3v4r3d; 07-18-2011, 08:22 AM.

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


          FreeBSD t4yt4n 6.3-RELEASE-p2 FreeBSD 6.3-RELEASE-p2 #0:
          Sun May 11 20:03:31 IRDT 2008 root@t4yt4n:/usr/obj/usr/src/sys/H1 i386
          نه برای فخر فروشی برای یاد آوری آنچه نمی دانم

          Comment


          • #6
            برنامه نویسی در شل :

            آرایه ها
            همانند سایر زبانهای برنامه نویسی اینجا نیز آرایه ها وجود دارند .

            ساده ترین نمونه از کار با ارایه ها را برای شروع کار مثال میزنیم

            کد:
            #!/usr/bin/env bash
            [COLOR="Lime"]array[/COLOR]=[COLOR="#00ffff"]( [/COLOR][COLOR="Red"]'a' 'b' 'c' 'd''e' [/COLOR]  [COLOR="#00ffff"]) [/COLOR]
            [COLOR="#00ff00"]len=[/COLOR][COLOR="Red"]"[/COLOR][COLOR="#00ff00"]${#array[@]}[/COLOR][COLOR="#ff0000"]"[/COLOR]
            
            [COLOR="Magenta"]echo[/COLOR][COLOR="Lime"] $len[/COLOR]
            [B]for[/B] ((i=0 ; i<[COLOR="Lime"]$len[/COLOR] ;i++));do
            [COLOR="Magenta"]echo[/COLOR] [COLOR="Lime"]${array[$i]}[/COLOR]
            [B]done[/B]
            در اولین خط مانند سایر اسکریدتها مفسر اسکریپت را معرفی میکنیم
            ارایه ای از حروف یا هرچه که مد نظر است در اینجا معرفی می گیرد . array حاوی ارایه های ما است .
            همچنین میتوان مقدار طول ارایه را به روشی که در خط سوم اسکریپت امده بدست اورد . "@" بدین معنی است که همه اعضای یک ارایه برای شمارش طول - یا نمایش یا هر کار دیگری که برنامه نویس نیز دارد - فراخوانی شود
            برای بدست اوردن طول هم از # استفاده می کنیم . فراخوانی ارایه نیز مانند یک متغیر صورت میگیرد اما اندیس هر عضوی باید به تنهایی فراخوانیگردد .

            برای این منظور از یک حلقه for استفاده می کنیم . و برای نمایش :
            اعضای ارایه را با بدست اوردن طول کلی ارایه ، یکی کی بکمک دستور echo نمایش میدهیم


            output
            کد:
            t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ bash bin/array.sh
            5
            a
            b
            c
            d
            e
            Last edited by t4z3v4r3d; 07-19-2011, 05:33 AM.

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


            FreeBSD t4yt4n 6.3-RELEASE-p2 FreeBSD 6.3-RELEASE-p2 #0:
            Sun May 11 20:03:31 IRDT 2008 root@t4yt4n:/usr/obj/usr/src/sys/H1 i386
            نه برای فخر فروشی برای یاد آوری آنچه نمی دانم

            Comment


            • #7
              برنامه نویسی در شل :

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

              گرفتن داده
              یکی از سریعترین و ساده ترین روشها ، بکار گیری read به همراه سوییچهای مختلفی است که کاربر را به ورود داده به چند شکل متفوت قادر میگرداند
              read -s something
              کاربرد :
              فرض کنید کاربر باید داده هایی مانند password را وارد کند ، طبعا نباید این ورودی دیده شود

              کد:
              t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ read -s res
              t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ echo $res
              yes
              read -d "some delimiter"

              کاربرد :جریان داده های ورودی در صورت ورود نوع خاصی از کاراکتر بلافاصله قطع گردد


              کد:
              t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ read -d . res
              Hello this is the test .t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ 
              t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ echo $res
              Hello this is the test
              read -a


              ورود داده ها بصورت ارایه . برای نمونه درپست گذشت ، چنانچه جدا ساختن داده ها ضوروی باشد می توان با این روش و بدون کارهای اضافی، داده های ورودی را به صورت یک ارایه جدا سازی نموده و بکار گرفت .

              کد:
              t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ read -a res
              Hello thi is the array
              t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ echo $res
              Hello
              t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ echo $res[1]
              Hello[1]
              t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ echo ${res[1]}
              thi
              t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ echo ${res[@]}
              Hello thi is the array
              t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $
              read -n "Some number"


              فرض کنید تعداد محدودی کاراکتر برای ورود نیاز دارید ، و بیش از ان برای برنامه شما لزومی ندارد

              کد:
              t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ read -n 10 res
              1234567890t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ echo $res
              1234567890
              t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $
              read -t "time out"

              کاربر باید در زمان محدودی داده های شما را وارد کند و پس از ان اسکریپت هیچ داده های ا کاربر دریافت نمیکند - تست کنکور / بازی شطرنج یا هرچی شما دوست دارین جراکه نه ؟-

              کد:
              t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ read -t 3 res
              yt4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ y
              Last edited by t4z3v4r3d; 07-20-2011, 02:13 AM.

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


              FreeBSD t4yt4n 6.3-RELEASE-p2 FreeBSD 6.3-RELEASE-p2 #0:
              Sun May 11 20:03:31 IRDT 2008 root@t4yt4n:/usr/obj/usr/src/sys/H1 i386
              نه برای فخر فروشی برای یاد آوری آنچه نمی دانم

              Comment


              • #8
                برنامه نویسی در شل :

                Select
                یکی از دستورات مهم و کاربردی در اسکریپت نویسی در شل است که به ما توان انتخاب یک یا چند گزینه از بین چندین گزینه می دهد .

                برای نمونه فرض کنید می خواهیم از میان چندیدن فایل ، یکی را انخاب کرده و نمایش دهیم - خط به خط -

                کد:
                #!/usr/bin/env bash
                
                [B]select[/B] [B]file[/B] [B]in[/B] `[COLOR="Magenta"]ls[/COLOR] [B].[/B] | [COLOR="#ff00ff"]grep[/COLOR] txt` ;[B]do[/B] 
                [COLOR="#ff00ff"]echo[/COLOR] "[COLOR="Red"]seleted file[/COLOR]  [COLOR="Lime"]$file[/COLOR]" 
                [COLOR="Magenta"]cat[/COLOR][COLOR="Lime"] $file[/COLOR] 
                [COLOR="DarkOrchid"]break[/COLOR] 
                [B]done[/B]
                دستور select مقادیر خروجی "ls | grep txt " را گرفته و برای انتخاب به کاربر نمایش میدهد و یا میتوان از سایر روشها برای دادن ورودی به select نیز سود جست .
                این ابزار مانند سایر حلقه ها که در بالا ذکر شدند دارای شروع و پایان است .
                مقادیر انتخاب شده در خط سوم نمایش داده میشوند که در اینجا تنها جنبه چک کردن خروجی استفاده شده.
                حال برای مثال میتوان فایل انخاب شده را "cat" کرد .

                برای خروج از "select" هم در اینجا از "break" استفاده شده که پس از اولین انتخاب
                انجام میگیرد . در صورتی که این کار انجام نشود حلقه به صورت بودن پایان کار خواهد کرد .
                Last edited by t4z3v4r3d; 07-21-2011, 04:38 PM.

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


                FreeBSD t4yt4n 6.3-RELEASE-p2 FreeBSD 6.3-RELEASE-p2 #0:
                Sun May 11 20:03:31 IRDT 2008 root@t4yt4n:/usr/obj/usr/src/sys/H1 i386
                نه برای فخر فروشی برای یاد آوری آنچه نمی دانم

                Comment


                • #9
                  حسین جان بخاطر علمی بودن پستت هم ازت ممنونم هم موضوع رو سنجاق کردم
                  ممنون امیدوارم به همین خوبی ادامه بدی

                  Comment


                  • #10
                    برنامه نویسی در شل :

                    ورودی و خروجیها

                    در خانواده unix سه نوع جریادن داده استاندارد وجود دارد که شامل

                    0 stdin
                    1 stdout
                    2 stderr


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

                    executing some command > output file


                    در حالت بالا تمام خروجی شامل پیغامهای سیستم (۱) و خطاهای اجرای دستور(۲) به سمت فایل مورد نطر هدایت می گردد . اما این محتویات بدلیل استفاده از ">" فایل خروجی را باز نویسی می کنند و تنها داده ها شامل خروجی یک عمی در این فایل ثت می گردند .

                    executing some command >> output file



                    در صورتیکه نیاز به نگهداری همه خروجیها باشد می توان از ">>" سود جست .


                    executing some command 2>> output file

                    تنها خروجی شامل خطاها در فایل نگهداری میگردند .


                    لوله کشی | piping

                    در صورتی که استریم خروجی یک دستور را بعنوان ورودی دستور یا برنامه دیگری بکار ببریم از این روش سود خواهیم جست .
                    executing some command | another command/program-



                    کار با Text files

                    یکی از قدرتهای هر زبانی برناه نویسی ، توان کار با فایلها و بویژه در اینجا کا با فایلهای text است
                    cat
                    از اشناترین ابزارها کار با فایلهای تکست است که برای - گاهش نوشن ! و ایجاد یک فایل - دیدن محتوای یک فایل بکار میرود .


                    cat -b some file

                    دیدن یک فایل اما به گونه ای که خط به خط شماره گذاری شده

                    cat -e some file

                    کد:
                    t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ cat -b /bin/cat 
                         1  ELF      44 (▒444���▒�▒�▒��� 00��,,,▒▒P�td�▒/libexec/ld-elf.so.FreeBSD�>
                    
                                                                                                    %/(


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

                    [CODE]

                    cat -s some file

                    کد:
                    t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ cat -s /bin/cat 
                    ELF      44 (▒444���▒�▒�▒��� 00��,,,▒▒P�td�▒/libexec/ld-elf.so.FreeBSD�>
                                                                                            %/(
                    !

                    خواندن فایلها بدون فاصله اولیه در هر خط فایل

                    کد:
                    t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ cat -e /bin/cat 
                    ^?ELF^A^A^A     ^@^@^@^@^@^@^@^@^B^@^C^@^A^@^@^@ M-^K^D^H4^@^@^@^\^_^@^@^@^@^@^@4^@ ^@^G^@(^@^Z^@^Y^@^F^@^@^@4^@^@^@4M-^@^D^H4M-^@^D^HM-`^@^@^@M-`^@^@^@^E^@^@^@^D^@^@^@^C^@^@^@^T^A^@^@^TM-^A^D^H^TM-^A^D^H^U^@^@^@^U^@^@^@^D^@^@^@^A^@^@^
                    همچنین می توان دو یا چند فایل را پشت سر هم به کمک cat نمایش داد و یا خروجی دستور را به یک فایل وارد کنیم . مثلا از چندین فایل مجزای text یک فایل بسازیم (کاربردهای دیگر را براحتی میتوانید پیدا کنید)

                    tac

                    همانند cat کار میکند اما خروجی را بصورت برعکس نمایش میدهد (البته شاید در همه خانواده یونیکس در دسترس نباشد )

                    sed

                    بسیار پر کاربرد و مهمترین آن -برای من - جایگزین ساختن یک یا چند کارکتر با یک یا چند کاراکتر دیگر

                    کد:
                    t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ echo "hello world" | sed 's/h/H/'
                    Hello world
                    ### کاربردهای دیگر این ابزار را در اسکریپت نویسی پیشرفته تری بررسی خواهیم کرد ---
                    Last edited by t4z3v4r3d; 07-24-2011, 11:53 AM.

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


                    FreeBSD t4yt4n 6.3-RELEASE-p2 FreeBSD 6.3-RELEASE-p2 #0:
                    Sun May 11 20:03:31 IRDT 2008 root@t4yt4n:/usr/obj/usr/src/sys/H1 i386
                    نه برای فخر فروشی برای یاد آوری آنچه نمی دانم

                    Comment


                    • #11
                      برنامه نویسی در شل :

                      ادامه کار با text files

                      cut

                      cut -d "one delimiter"
                      کد:
                      t4z3v4r3d@ t4yt4n5 ~ $ echo "Hello world" | cut -d " " -f 1 
                      Hello
                      cut -d "delim" -f "start-to end"

                      کد:
                      t4z3v4r3d@ t4yt4n5 ~ $ echo "Hello Shabgard's members " | cut -d " " -f 1-3 
                      Hello Shabgard's members
                      t4z3v4r3d@ t4yt4n5 ~ $
                      grep

                      برای جستجوی یک الگو - نمایش یا عدم نمایش ان - در یک فایل / خروجی یک دستور
                      همچنین میتوان شماره خطی که الگوی ما دران یافت شده را یافت و یا از همان سطر به تعداد دلخواه به بعد را نمایش داد


                      کد:
                      t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ grep -A 10 bash bin/1.sh 
                      #!/usr/local/bin/bash
                      # [email protected] 
                      ds="`date | cut -d " " -f 4`"
                      echo "starter @ $ds" > /tmp/time.txt
                      clear
                      echo "Starting  $0 with PID $$"
                      ####
                      # for getting ips and path logs at first i should find nom of ips then for each ip getting paths
                      # but first checking rescords of ips and after it getting paths
                      # 
                      ####################################
                      در بسیاری از موارد (مثلا برای خواندن یک فایل نانند یک دیتابیس) میتوان از این روش سود برد .-میتوانید نمونه های بسیاری از کاربرد این ابزرا را خودتان ازمایش کنید

                      grep -B "nuber of lines" your pattern to search

                      میتان در اینجا عکس مورد بالا عمل کرد یعنی به تعداد دلخواه خطوط پیش از الگوی مورد نظر را جستجو کرد . در واقع میتوان این عملکرد را مانند "head -n "som number" "some file" | tail -n some number" دانست . (دوستانی که با این دستور اشنایی ندارند .... میگویم )
                      کد:
                      t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ grep -B 10 root /var/log/messages
                      Jul 25 12:00:00 t4yt4n5 newsyslog[2522]: logfile turned over due to size>100K
                      Jul 25 12:06:08 t4yt4n5 sshd[2570]: error: PAM: authentication error for illegal user rooot from 192.168.10.250
                      Jul 25 12:06:52 t4yt4n5 kernel: ipfw: limit 500 reached on entry 65534
                      .
                      .
                      .
                      grep -n pattern "some file"
                      نمایش شماره خطی که الگوی ما در ان یافت شده
                      کد:
                      t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ grep -n log  /var/log/messages
                      1:Jul 25 12:00:00 t4yt4n5 newsyslog[2522]: logfile turned over due to size>100K
                      grep -v "some unwanted pattern" some file

                      برای اینکه الگوی خاصی از نتایج جستجوی شما حذف گردد برای مثال میخواهید هر خط حاوی یک نام حذف گردد

                      کد:
                      t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ grep -v "root" /var/log/messages     
                      Jul 25 12:00:00 t4yt4n5 newsyslog[2522]: logfile turned over due to size>100K
                      Jul 25 12:06:08 t4yt4n5 sshd[2570]: error: PAM: authentication error for illegal user rooot from 192.168*.*
                      Jul 25 12:08:04 t4yt4n5 sshd[2573]: error: ssh_msg_send: write
                      grep -i some pattern some file

                      برای جستجوی یک الگو که بزرگی یا کوچک بودن حروف ان برای شما یا نامعلوم است یا بی اهمیت یا ....
                      کد:
                      t4yt4n5# grep -i fail /var/log/auth.log
                      Jul 19 04:38:41 t4yt4n5 sshd[6847]: reverse mapping checking getaddrinfo for dsl78.188-7687.ttnet.net.tr [78.188.30.7] failed - POSSIBLE BREAK-IN ATTEMPT!
                      Jul 19 04:38:44 t4yt4n5 sshd[6849]: reverse mapping checking getaddrinfo for dsl78.188-7687.ttnet.net.tr [78.188.30.7] failed - POSSIBLE BREAK-IN ATTEMPT!
                      Jul 19 04:38:46 t4yt4n5 sshd[6851]: reverse mapping checking getaddrinfo for dsl78.188-7687.ttnet.net.tr [78.188.30.7] failed - POSSIBLE BREAK-IN ATTEMPT!
                      .
                      .
                      .
                      Jul 19 16:53:58 t4yt4n5 sshd[10651]: Failed keyboard-interactive/pam for invalid user oot from 192.168.*.* port 51823 ssh2

                      grep -m "some number pattern" "some file"

                      برای نمایش تنها تعداد محدودی از الگوی یافت شده

                      کد:
                      t4yt4n5# grep -i fail -m 2  /var/log/auth.log
                      Jul 19 04:38:41 t4yt4n5 sshd[6847]: reverse mapping checking getaddrinfo for dsl78.188-7687.ttnet.net.tr [78.188.30.7] failed - POSSIBLE BREAK-IN ATTEMPT!
                      Jul 19 04:38:44 t4yt4n5 sshd[6849]: reverse mapping checking getaddrinfo for dsl78.188-7687.ttnet.net.tr [78.188.30.7] failed - POSSIBLE BREAK-IN ATTEMPT!
                      grep -o "pattern" some file

                      تنها یافتن و نمایش الگوی مورد نظر

                      کد:
                      t4yt4n5# grep -o fail -m 2 /var/log/auth.log
                      fail
                      fail
                      grep -R/-r pattern 'some file"

                      برای جستجو به صورت بازگشتی

                      کد:
                      t4z3v4r3d@ t4yt4n5 /usr/home/t4z3v4r3d $ grep -r bash bin/
                      bin/graph.sh:#!/usr/local/bin/bash
                      bin/ssh_key.sh:#!/usr/local/bin/env bash
                      bin/graph.sh~:#!/usr/local/bin/bash
                      bin/1.sh:#!/usr/local/bin/bash
                      bin/air.sh:#!/bin/bash

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


                      FreeBSD t4yt4n 6.3-RELEASE-p2 FreeBSD 6.3-RELEASE-p2 #0:
                      Sun May 11 20:03:31 IRDT 2008 root@t4yt4n:/usr/obj/usr/src/sys/H1 i386
                      نه برای فخر فروشی برای یاد آوری آنچه نمی دانم

                      Comment


                      • #12
                        برنامه نویسی در شل
                        خب بعد ازمدتی می تونم بنویسم .

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

                        کار بسیار بسیار ساده انجام میشه . نکنه ای که باید توجه کنید :
                        زمانیکه شما این اسکریپت رو بکار میگیرد حتما روت گرفتین .

                        کد:
                        #!/usr/bin/env bash
                        #APACHE LOG ****ER V2
                        #Search and find
                        [COLOR="Magenta"]echo[/COLOR] "[COLOR="Red"]Enter Attacker ip[/COLOR] "
                        [COLOR="magenta"]read[/COLOR] [COLOR="lime"]ip[/COLOR]
                        [COLOR="magenta"]echo[/COLOR] -e "[COLOR="red"]Enter \033[1;31m FAKE  \033[0m Attacker ip[/COLOR] "
                        [COLOR="magenta"]read[/COLOR] [COLOR="Lime"][COLOR="lime"]fake[/COLOR][/COLOR]
                        
                        [B]for[/B] file in `[COLOR="Orange"]grep[/COLOR] -R http /var/log/ 2>/dev/null | [COLOR="orange"]cut[/COLOR] -d ":" -f 1 | [COLOR="orange"]uniq[/COLOR] `; [B]do[/B]  
                        [COLOR="magenta"]echo[/COLOR] -e  "File founded[COLOR="Lime"] $file[/COLOR] "
                        [B]if[/B] [ "[COLOR="lime"]$[/COLOR]([COLOR="orange"]grep[/COLOR] [COLOR="lime"]$ip $file[/COLOR])" ];[B]then[/B]
                         [COLOR="magenta"]echo[/COLOR] "Founded ip in [COLOR="lime"]$file[/COLOR]"
                         [COLOR="orange"]sed[/COLOR] 's/'[COLOR="lime"]$ip[/COLOR]'/'[COLOR="lime"]$fake[/COLOR]'/'[COLOR="lime"] $file[/COLOR] >/tmp/1
                         [COLOR="orange"]cat[/COLOR] /tmp/1 >[COLOR="lime"]$file[/COLOR]
                        [B]fi[/B]
                        [B]done[/B]


                        خب بعد از خوندن دو تا IP که میدونید چیه .دنبال جایی که فایلهایی با محتوای "HTTP" هست می گرده . ادرسهای تکراری حذف میشن و در صورتی که محتوای مورد نظر ما توی فایل پیدا بشه .... اون فایل ادیت میشه و سپس جایگزین میشه .
                        بنا به چیزایی که قبلا گفته شده دلیلی برای توضیحات بیشتر نمی بینم . اگر هرجاش گنگ بود بگید ...
                        ممنون میشم تا انیجا هرکسی هر نظری داره بگه .
                        Last edited by t4z3v4r3d; 08-14-2011, 10:39 AM.

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


                        FreeBSD t4yt4n 6.3-RELEASE-p2 FreeBSD 6.3-RELEASE-p2 #0:
                        Sun May 11 20:03:31 IRDT 2008 root@t4yt4n:/usr/obj/usr/src/sys/H1 i386
                        نه برای فخر فروشی برای یاد آوری آنچه نمی دانم

                        Comment


                        • #13
                          این کد آخریه مشکل داره
                          کسی میتونه پیدا کنه مشکلش چیه ؟؟؟
                          اگر پیدا کردید برید از نویسندش جایزه بگیرید
                          Emperor Hacking Team

                          سکوت در جای جای مکتوبات مقدسشان به چشم می خورد و خیانتها در پی هم. اگر با آنها باشی چه خوب است.
                          عاشقانه تو را بر مکتوباتشان می پذیرند و هنگامی که می خواهی با آنان نباشی ، خون تو را از آب چشمه های کوهستان گوارا تر می پندارند!

                          آدرس توئیتر من:https://twitter.com/#!/iM4n_

                          به صفحه شبگرد در فیسبوک بپیوندید
                          http://www.facebook.com/groups/shabgard

                          تیم Emperor عضو جدید میپذیرد ! برای اطلاعات بیشتر با خودم تماس بگیرید

                          sigpic

                          Comment


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

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


                            FreeBSD t4yt4n 6.3-RELEASE-p2 FreeBSD 6.3-RELEASE-p2 #0:
                            Sun May 11 20:03:31 IRDT 2008 root@t4yt4n:/usr/obj/usr/src/sys/H1 i386
                            نه برای فخر فروشی برای یاد آوری آنچه نمی دانم

                            Comment


                            • #15
                              معمولا قبل از یونیک از sort استفاده میکنند

                              Comment

                              Working...
                              X