+ ارسال موضوع جدید
صفحه 2 از 2 نخستنخست 1 2
نمایش نتایج: از شماره 11 تا 11 , از مجموع 11

موضوع: مقالات آموزشی لينوكس

  1. #1
    کاربر سایت

    http://www.iranjoman.com/images/iranjoman/neshan2.gifhttp://www.iranjoman.com/images/iranjoman/neshan2.gifhttp://www.iranjoman.com/images/iranjoman/neshan2.gif

    [ ]
    تاریخ عضویت
    Sep 2007
    محل سکونت
    تهران
    نوشته ها
    1,290
    تشکر
    2,461
    تشکر شده 2,627 بار در 1,217 پست

    پیش فرض مقالات آموزشی لينوكس

    پايپ ها و انتقال پيش از آن كه در اين شماره به طور جدي وارد مبحث برنامه نويسي در پوسته( shell ) شويم، بهتر است ابتدا با شيوه هاي انتقال ورودي و خروجي آشنا شويم.
    انتقال خروجي
    ممكن است تا كنون به چنين دستوري برخورده باشيد:
    ls -l > lsoutput.txt$
    اين دستور، خروجي دستور ls را داخل فايلي به نام lsoutput.txt مي ريزد. با عملگر> تقريبا همه خروجي ها را مي توان منتقل كرد. و اگر فايل مقصد از قبل وجود داشته باشد، در اين صورت فايل جديد جايگزين آن خواهد شد. براي اين كه خروجي را به انتهاي فايل اضافه كنيم، اما فايل قبلي پاك نشود، از عملگر> استفاده كنيد:
    $ls << lsoutput.txt
    اين دستور، نتيجه را به انتهاي فايل قبلي اضافه خواهد كرد.
    انتقال ورودي
    درست مانند انتقال خروجي دستورات، مي توان ورودي ها را هم منتقل كرد و از ورودي استاندارد استفاده نكرد. براي نمونه:
    more > lsoutput.txt$
    البته اين مثال، بسيار جزيي و اندك بود و انتقال جريان ورودي و خروجي نسبت به ويندوز، ابعاد بسيار گسترده تري دارد.
    پايپ ها
    مي توانيد پروسس ها را با عملگر پايپ (1) به همديگر وصل كنيد. برخلاف سيستم عامل داس، در لينوكس مي توان به كمك پايپ ها، پروسس ها را همزمان با هم اجرا كرد و به طور خودكار با انتقال جريان داده در ميان آن ها، زمان بندي كرد. يك مثال ساده: مي توانيد به سادگي خروجي حاصل از دستور ps را به دستور sort بدهيد. اگر از پايپ ها استفاده نكنيد، دستور چند گام به درازا خواهد كشيد:

    ps < psout.txt$
    <$sort psout.txt pssort.out

    حالا راه بهتر و تر و تميزتر اين است كه اين دو پروسس را با يك پايپ به هم وصل كنيم:

    ps1 sort < pssort.out$
    لابد مي خواهيد خروجي كار هم، صفحه بندي شده باشد، پس حتما از دستور سومي استفاده خواهيد كرد به نام more و آن را با پايپ به دو دستور قبلي وصل مي كنيد:

    $ps1 sort 1 more
    در عمل هيچ محدوديتي براي تعداد پروسس هايي كه به هم وصل مي شوند، وجود ندارد. فرض بگيريم كه مي خواهيد نام تمام پروسس هايي كه در حال اجرا هستند به جز پوسته را ببينيد. اين خط دستور را نگاه كنيد:
    $ps-xo comm1 sort 1 uniq
    grep -v sh1 more

    اين دستور چه كار مي كند؟

    خروجيps را مي گيرد، به ترتيب الفبا مرتب مي كند، پروسس ها را با استفاده ازuniq استخراج مي كند، با استفاده از grep -v sh پروسسي كه اسمش sh است را حذف مي كند و دست آخر به صورت صفحه بندي شده به خروجي (نمايشگر) مي فرستد. اين روش، همان طور كه شما هم مي بينيد، عجب روش تر و تميزي است براي پيوندانيدن چند دستور به همديگر! تازه بدون اين كه به دردسر بيافتيم و فايل هاي موقت ايجاد بكنيم! هرچند، حسابي مراقب يك چيز باشيد: اگر رشته اي از دستورها داشتيد و قرار بود خروجي را به يك فايل بفرستيد، هيچ وقت از يك نام فايل دوبار در رشته دستوري استفاده نكنيد. براي مثال اگر چنين دستوري بنويسيد:

    cat mydata.txt 1 sort 1 uniq < mydata.txt$
    در اين صورت با يك فايل خالي مواجه خواهيد شد، چون پيش از اين كه بخواهيد فايلmydata.txt را بخوانيد، آن را بازنويسي كرده ايد.
    پوسته يا يك زبان برنامه نويسي
    حالا كه ديگر برخي از عمليات پايه پوسته را ياد گرفتيم، وقت آن رسيده است كه سراغ برنامه هاي واقعي پوسته برويم. دو راه براي نوشتن برنامه هاي پوسته وجود دارد. مي توانيد رشته اي از دستورات را بنويسيد و به پوسته اجازه بدهيد كه آن ها را تك تك اجرا كند، يا دستورات را داخل فايل بريزيد و بعد به عنوان برنامه از آن استفاده كنيد.
    برنامه هاي تعاملي
    (Interactive Programs)
    نوشتن و اجرا كردن دستورها، يكي از راه هاي سريع و آسان آزمايش تكه هاي كوچك كد است، براي يادگرفتن مناسب. فرض بگيريد تعداد زيادي فايلC داريد و مي خواهيد فايل هايي كه شامل رشتهPOSIX هستند را شناسايي كنيد، به جاي اين كه تك تك و از طريق دستور grep بخواهيم اين كار را انجام دهيم، مي توانيم همه اين كارها را داخل اسكريپتي تعاملي بنويسيم، اين پايين را نگاه كنيد:
    for file in *$
    do <
    if grep -l POSIX $file<
    then<
    more $file<
    fi<
    done<

    نگاه كنيد كه چقدر طبيعي $ برنامه پوسته به < تبديل مي شود و پوسته منتظر اطلاعات بعدي است. مي توانيد تايپ كردن را بس كنيد و به پوسته اجازه بدهيد خودش تصميم بگيرد كه شما كارتان تمام شده است و بعد اسكريپت فورا اجرا مي شود. پوسته همچنين ازWildcard expansion ها نيز پشتيباني مي كند. ديگر قريب به يقين شما مي دانيد كه * يعنيWildcard براي همه كاراكترها. ممكن است اين را ندانيد كه براي يك حرف نيزWildcard به نام داريم، همچنين]set[ مجموعه اي از كاراكترها را در خود مي گيرد كه قرار است چك شوند. برعكس آن اگر 8 بيايد، مثل]set[ در اين صورت، هر چيزي را شامل مي شود جز آن هايي كه داخل براكت اند. نشان آكولاد ت ت هم به شما اجازه مي دهد تا چند رشته را در مجموعه اي كنار هم قرار دهيد تا كار خاصي انجام بدهيد:
    ls my- تfinger, toeتs$
    اين دستور فايل هاي myfingers و mytoes را ليست مي كند. اين دستور از پوسته استفاده مي كند تا هر فايلي كه داخل دايركتوري فعلي است را بررسي كند.
    ساختن يك اسكريپت
    با هر ويرايشگر متني كه ميلتان مي كشد، مي توانيد فايلي شامل دستورات بسازيد، فايلي بسازيد به نام first كه شبيه مثال زير باشد:

    /bin/shَ#
    firstَ#
    This file looks throughَ#
    all the files in the current
    directory for the string POSIX,َ#
    and then prints the names of
    those files to the standard output.َ#
    for file in *
    do
    file$if grep -q POSIX
    then
    file$echo
    fi
    done
    0exit

    توضيحات (comment) ها با نماد آغاز مي شوند و تا پايان خط به عنوان توضيح به حساب مي آيند؛ هر چند عرف است كه در ستون اول هميشه بگذارند. حال در خط بعدي به دستور َbin/sh/! بر مي خوريم كه فرم خاصي از توضيح است. كاراكترهاي َ به سيستم مي گويند كه آرگومان هايي كه در ادامه مي آيند، برنامه اي است كه براي اجراي اين فايل بايد دنبال شودbin/sh/ . برنامه پوسته پيش فرض است.

    نكته: مسير پس از َ مسير قطعي(Absolute) است. با هم توافق كرده اند كه اين رشته را از 32 كاراكتر كمتر نگه دارند تا با سيستم هاي قديمي تر همخوان باشد، چون برخي از يونيكس هاي قديمي از تعداد محدودي از كاراكترهايي كه بعد از ! مي آيند، بهره مي بردند. واضح است كه لينوكس هاي امروزي ديگر اين محدوديت را ندارند. از آن جايي كه اسكريپت وارده، به عنوان ورودي استانداردي در پوسته مطرح است. در اين صورت مي تواند شامل هر دستوري باشد كه متغير محيطي PATH شما مسير آن را در خود دارد.

    دستورexit در انتهاي اسكريپت اطمينان مي دهد كه اسكريپت با كد خروجي مطمئن كنترل اجراي دستورات را به سيستم عامل بر مي گرداند. هرچند كه به ندرت چنين چيزي چك مي شود، اما مي شود فهميد كه آيا اسكريپت با موفقيت اجرا شده است يا خير. در اين صورت مي توان با اطمينان از اين اسكريپت در اسكريپت يا دستوري ديگر استفاده كرد و از صحت اجراي آن اطمينان حاصل كرد. حتا اگر نخواهيد اسكريپت تان را بقيه اجرا كنند، باز هم در انتهاي اسكريپت اين كد را بگذاريد كه كاري منطقي است. به كاربردي بودن اسكريپت خود اعتقاد داشته باشيد. فرض بگيريد كه شايد، يك در يك ميليون قرار باشد به عنوان بخشي از اسكريپتي ديگر به كار گرفته شود.
    نكته: عدد صفر نشانگر خروج موفقيت آميز است.

    اجرايي كردن يك اسكريپت
    حالا فايل اسكريپت مان را ساختيم، مي توانيم به دو صورت آن را اجرا كنيم. راه ساده تر اين است كه اسم فايل را به پوسته بدهيم.
    /bin/sh first $
    اين دستور بايد عمل كند، اما چقدر خوب مي شود كه اسكريپت را فقط با صدا كردن نامش استفاده كنيم و از اينbin/sh/ خلاص شويم. اين كار را با تغيير حالت فايل (chmod) به سادگي مي توان انجام داد:

    $chmod+xfirst
    اين دستور، فايل first را با +x اجرايي مي كند. و پس از اين، تنها كافي است با دستور زير اسكريپت را اجرا كنيد:

    $first
    اگر پيغامي گرفتيد كه "چنين دستوري يافت نشد!" متغير محيطي PATH احتمالا به مسير فايل هاي اسكريپت شما اشاره نمي كند. براي رفع اين مشكل، يا تايپ كنيدPATH=$PATH: يا فايل bash-profile را ويرايش كنيد و اين دستور را به انتهاي آن بيفزاييد. سپس يك بارlog out كنيد و دوباره به سيستم برگرديد. اين هم نشد،first/. را در دايركتوري اي كه اسكريپت داخلش است، بنويسيد تا مسير كامل نسبي به اسكريپت را به فايل بدهيد.
    استفاده از ./ يك سود ديگر هم دارد، آن اين است كه شما تصادفا دستور ديگري با اين نام را اجرا نخواهيد كرد. اگر ديديد كه اسكريپت شما با موفقيت اجرا شد، مي توانيد به جاي مطمئني منتقلش كنيد، اگر از اين دستور فقط خودتان استفاده مي كنيد، مي توانيد يك دايركتوري bin در فولدر home خود بسازيد و مسيرش را بهPATH اضافه كنيد. اگر مي خواهيد بقيه كاربران هم از آن استفاده كنند، آن را داخل فولدرusr/local/bin/ قرار دهيد. اگر دسترسيRoot نداريد، بايد از سرپرست سيستم درخواست كنيد اين كار را براي شما انجام دهد. اگر هم مايل نيستيد كه كسي آن را تغيير دهد، مي توانيد دسترسي نوشتن در آن فايل را برداريد. دستوراتي كه سرپرست سيستم طي آن مالكيت و دسترسي هاي نرم افزار را مشخص مي كند، چيزي شبيه اين خواهد بود:

    cp first /usr/local/binَ#
    chown root /usr/local/bin/firstَ#
    chgrp root /usr/local/bin/firstَ#
    َchmod557 /usr/local/bin/first #
    توجه داشته باشيد كه از شكل كلي دستور chmod استفاده كرديم، چون دقيقا مي دانستيم كه چه سطح دسترسي اي مي خواهيم بدهيم. اما شما مي توانيد از شكل طولاني تر، اما شايد واضح تر دستور chmod استفاده كنيد:

    َ chmod u=rwx,go=rx /usr/local/bin/first #

    براي اطلاعات بيشتر از راهنماي دستور chmod استفاده كنيدman chmod

    [برای دیدن لینک ها ابتدا باید عضو انجمن شوید. برای ثبت نام اینجا کلیک کنید...][برای دیدن لینک ها ابتدا باید عضو انجمن شوید. برای ثبت نام اینجا کلیک کنید...]


    اگر روزي دشمن پيدا کردي, بدان در رسيدن به هدفت موفق بودي !
    اگر روزي تهديدت کردند, بدان در برابرت ناتوانند!
    اگر روزي خيانت ديدي, بدان قيمتت بالاست!
    اگر روزي ترکت کردند , بدان با تو بودن لياقت مي خواهد!






  2. 2 کاربر مقابل از این پست zeus تشکر کرده اند.


  3. #11
    کاربر سایت

    http://www.iranjoman.com/images/iranjoman/neshan2.gifhttp://www.iranjoman.com/images/iranjoman/neshan2.gifhttp://www.iranjoman.com/images/iranjoman/neshan2.gif

    [ ]
    تاریخ عضویت
    Sep 2007
    محل سکونت
    تهران
    نوشته ها
    1,290
    تشکر
    2,461
    تشکر شده 2,627 بار در 1,217 پست

    پیش فرض

    swap
    این فرمت برای پارتیشنی به کار میرود که لینوکس برای ایجاد حافظه مجازی استفاده میکند. فرض کنید میخواهید از برنامه ای استفاده کنید که احتیاج به مقدار زیادی حافظه ram دارد. لینوکس از این فرمت برای شبیه سازی ram روی هارد دیسک استفاده میکند. البته این نمیتواند به عنوان جایگزینی برای ram در نظر گرفته شود زیرا سرعت آن بسیار پایین تر از ram است. ولی تا وقتی که شما ram خود را افزایش دهید میتواند کار شما را راه بیندازد. اندازه این پارتیشن باشد باید به اندازه حافظه ram ویا دوبرابر آن باشد. اگر فضای کافی روی هارد دیسک خود دارید پیشنهاد میشود فضایی معادل دو برابر ram به این پارتیشن اختصاص دهید. البته باید توجه داشته باشید که این مقدار بدون توجه به مقدار حافظه ای که دارید باید بین 32mb تا 2gb باشد. به عنوان مثال اگر مقدار ram شما 2gb است نمیتوانید 4gb به این پارتیشن اختصاص دهید.

    [برای دیدن لینک ها ابتدا باید عضو انجمن شوید. برای ثبت نام اینجا کلیک کنید...][برای دیدن لینک ها ابتدا باید عضو انجمن شوید. برای ثبت نام اینجا کلیک کنید...]


    اگر روزي دشمن پيدا کردي, بدان در رسيدن به هدفت موفق بودي !
    اگر روزي تهديدت کردند, بدان در برابرت ناتوانند!
    اگر روزي خيانت ديدي, بدان قيمتت بالاست!
    اگر روزي ترکت کردند , بدان با تو بودن لياقت مي خواهد!






  4. کاربر مقابل از این پست zeus تشکر کرده است.


+ ارسال موضوع جدید
صفحه 2 از 2 نخستنخست 1 2

اطلاعات موضوع

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

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

تعداد اعضای بازدید کننده از این تایپیک : 0

بازدید کنندگان :  (نمایش کلی)

نامی برای نمایش وجود ندارد.

کلمات کلیدی این موضوع

Bookmarks

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •