0

Linux لينوكس براي همه

 
hojat20
hojat20
کاربر طلایی1
تاریخ عضویت : تیر 1388 
تعداد پست ها : 42154
محل سکونت : بوشهر

Linux لينوكس براي همه

 

Linux لينوكس براي همه   پايپ ها و انتقال پيش از آن كه در اين شماره به طور جدي وارد مبحث برنامه نويسي در پوسته( 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.
محمدرضا قرباني

Linux لينوكس   براي   همه

آنروز .. تازه فهمیدم .. 

 در چه بلندایی آشیانه داشتم...  وقتی از چشمهایت افتادم...

جمعه 26 آذر 1389  5:03 PM
تشکرات از این پست
javad1373
javad1373
کاربر برنزی
تاریخ عضویت : آذر 1389 
تعداد پست ها : 235
محل سکونت : فارس

پاسخ به:Linux لينوكس براي همه

لینوکس سیستم عاملی جدید وکاملا شناخته شده در میان مردم می باشد که اصطلاحا آن را open source می نامند شرکت هایی مانند آوانتا و.. برای این که نرم افزار خود میان مردم معروف گردد  علاوه بر این که آن را به صورت رایگان در اختیار مردم قرار می دهند source یا کد وبرنامه آن را نیز در اختیار مردم قرار می دهند نرم افزار های معروفopen source ازجمله: fire fox-google chrome-notepad و...می باشند

                       چنانکه گوهر پاک انسانی را خواهی یافت

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

 

شنبه 27 آذر 1389  2:32 PM
تشکرات از این پست
دسترسی سریع به انجمن ها