menu

redirections و wildcards در لینوکس

redirections و wildcards در لینوکس

یکشنبه 23 آذر 1393

در این چند وقت گذشته، یک سری مسائل پیش اومد که باعث شد نتونم این مطلب را منتشر کنم.

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

همین طور به دلیل وجود یک سری مسائل توی بلاگ، تصمیم گرفتم که به جای منتشر کردن پست، ابتدا مشکلات و مسائل موجود را ابتدا حل کنم. مثل افزوده شدن کپچا به قسمت نظرها(comment) و تماس با ما تا جلوی یک سری روبات ها گرفته بشه و همچنین رفع مشکل لود شدن اسکریپت ها در ای جکس که از اون جایی که بلاگ من به طور کامل با ای جکس هست، یک مشکل بزرگ به حساب  می اومد. و همچنین رفع مشکل ریسپانسیو توی برخی نسخه های اندروید و iphone.

همچنین به دلیل این که بیشتر بلاگ من درباره ی توضیح کد هاست، یه highlighter هم به بلاگم اضافه کردم تا خوندن کدها راحت تر بشه.

و در آخر هم، یه مسافرت کوچولو افتاد این وسط!

خلاصه چرخ و خورشید و فلک در کارند....! و زمین هم کج هست و همه و همه دارند دست در دست هم میدهند!

این جور مسائل، همه و همه باعث شد که این پست، مدت های زیادی به عنوان یک پیش نویس باقی بمونه و منتشر نشه.

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

خلاصه، بگذریم!

بریم سراغ این مطلب:

در این مطلب، سعی میکنم که ابتدا درباره ی redirection ها و wildcard ها توضیح بدهم و بعد از آن، به بررسی اون در لینوکس و ترمینال بپردازم و در آخر، چندتا متغیر مفید هم در لینوکس معرفی کنم!

اول از همه، میریم سراغ redirection ها.

redirections در لینوکس:

طبق یه نظریه (که هرچه قدر فکر کردم، یادم نمیاد کی این قضیه را مطرح کرده بود) جریان(stream) اطلاعات در کامپیوتر سه حالت بیشتر نداره.

یا یک ورودی استاندارد هست ( که بیشتر اوقات به صورت پیشفرض، کیبورد در نظر گرفته میشود) یا یک خروجی استاندارد ( که در بیشتر اوقات به صورت پیشفرض، توسط مانیتور و صفحه ی نمایش، به نمایش در میاد) و یا یک خطای استاندارد ( که اون هم بیشتر اوقات توسط صفحه ی نمایش به نمایش در میاد).

به طور خلاصه، جریان اطلاعات در کامپیوتر یا stdin هست یا stdout و یا stderr.

ما هم با همین ورودی ها و خروجی ها کار داریم و ما میتونیم با استفاده از redirection ها، این جریان اطلاعات را کمی کنترل کنیم و پیشفرض هاش را تغییر بدیم و یا اون ها را منتقل کنیم. مثلا ما میتونیم:

  • خروجی استاندارد را در یک فایل ذخیره کنیم
  • خطای استاندارد را در یک فایل ذخیره کنیم
  • ورودی استاندارد را به جای کیبورد، از یک فایل دریافت کنیم
  • خطای استاندارد را به عنوان یک ورودی استاندارد برای یک کد دیگر در نظر بگیریم
  • خروجی استاندارد را به عنوان یک ورودی استاندارد برای یک کد دیگر در نظر بگیریم

و کارهای بسیار زیاد دیگر

البته از آنجایی که کارهای بالا، پر استفاده ترین کارها هستند، در این مطلب تنها به همان کارهای بالا اکتفا میکنم.

نکته ی دیگری که هست، اینه که ما معمولا ورودی استاندارد را 0 و خروجی استاندارد را 1 و خطای استاندارد را 2 در نظر میگیریم.

ابتدا، طریقه ی ذخیره ی یک خروجی استاندارد را در یک فایل بررسی میکنیم

کد زیر را در نظر بگیرید:

echo 'hello' > myfile

در کد بالا، ما یک دستور  داریم(echo) این دستور یه خروجی معمولی تولید میکند. به صورت پیشفرض، این خروجی بر روی مانیتور چاپ میشود، ولی ما با علامت > که یک علامت redirection هست اعلام کردیم که کد بالا، خروجی خود را به فایل myfile بریزد.

همچنین میتوانیم کد زیر را بزنیم:

echo 'hello' >> myfile

در این حالت، با استفاده از >> اعلام میکنیم که خروجی کد را، به انتهای فایل اضافه کن.

از اونجایی که عدد خروجی، عدد 1 است، میتوان کدهای بالا را به صورت زیر هم نوشت:

echo 'hello' 1> myfile
echo 'hello' 1>> myfile

که هیچ تفاوتی با کد های قبلی ندارند.

حال به بررسی طریقه ی ذخیره ی یک خطای استاندارد در یک فایل میپردازیم.

همانطور که گفتیم، عدد خروجی استاندارد عدد 1 است و عدد خطای استاندارد، عدد 2 است.

پس واضح است که اگر کدهای قبلی را به صورت زیر بنویسیم، در صورت وجود خطا، خطا در فایل ذخیره خواهد شد:

echo 'hello' 2> myfile
echo 'hello' 2>> myfile

البته کد بالا، هیچ خطایی ندارد پس خطایی در فایل ما ذخیره نخواهد شد.

میتوانیم کد بالا را به صورت زیر تغییر دهیم تا یک خطا تولید شود و خطا در فایل ذخیره شود:

echo $mahdi 2> myfile
echo $mahdi 2>> myfile

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

حالت بعدی که میخواهیم بررسی کنیم، گرفتن ورودی از یک فایل است.

کد زیر را در نظر بگیرید:

head -n2

کد زیر، یک سری ورودی میپذیرد که پس از آن، دو ردیف اول آن ها را نمایش میدهد

حال ما میتوانیم به کد بالا بگوییم که ورودی های خود را از یک فایل بگیرد و دو ردیف اول آن فایل را نمایش دهد:

head -n2 < myfile

همانطور که قبلا گفته شد، عدد مربوط به ورودی استاندارد، عدد 0 است. پس واضح است که کد بالا را به صورت زیر هم میتوان نوشت:

head -n2 0< myfile

این کد ( ورودی از فایل) در دستور هایی مانند cpio که بعدا انشا الله به بررسی آن ها خواهیم پرداخت، کاربرد فراوانی دارد.

الان، میتوانیم به یکی از مهم ترین علامت های pipe (|) بپردازیم.

وظیفه ی این علامت، این است که خروجی کد اول را به عنوان ورودی کد دوم در نظر میگیرد.

برای مثال، کد grep را در نظر بگیرید. وظیفه ی این دستور، این است که یک متن را پیدا کند و سینتکس آن به صورت زیر است

grep noisy

که در این حالت، شما یک سری رشته ی متنی میتوانید به آن بدهید تا متن noisy را در آن پیدا کند.

کد ps را هم در نظر بگیرید

این کد ، proccess ها در حال استفاده را نمایش میدهد. شما میتوانید از آپشن های زیادی در این کد استفاده کنید. سینتکس آن هم به صورت زیر است:

ps
ps a
ps aux

در کد بالا، در قسمت آخر از سه آپشن متفاوت استفاده شده است. آپشت a و x تمامی proccess ها را نشان میدهد و آپشن u مقدار مصرف رم و سی پی یو را هم نشان میدهد.

حال ما میخواهیم با استفاده از علامت pipe این دو کد را به هم متصل کنیم:

ps aux| grep bash

در کد بالا، ابتدا دستور ps اجرا میشود و تمامی proccess ها خروجی داده میشود. این خروجی به عنوان ورودی برای دستور grep استفاده می شود و از بین تمامی proccess ها، proccess مربوط به bash انتخاب میشود و به کاربر نمایش داده میشود.

و در آخر، یکی از آخرین redirections هایی که میخواهم معرفی کنم، علامت >> است. این علامت، کد مورد نظر را تا رسیدن به تگی که اعلام کرده ایم اجرا میکند و سینتکس آن به صورت زیر است

command << Tag

به عنوان آخرین مطلب در باب redirection ها، میخواهم به معرفی یه device به اسم null بپردازم. شاید برای شما پیش اومده باشه که برخی جاها، نیاز باشه خروجی و یا خطای خودتون را null قرار دهید. یعنی دقیقا خروجی کشک (!) و اون را بریزید یه جایی که هیچ تاثیری نداشته باشه. در این صورت، شما معمولا خروجی خودتون را برابر null قرار میدهید. در لینوکس، اگر شما بخواهید یک خروجی و یا یک خطا را دور بریزید( به عنوان null قرار دهید) یک device به اسم null وجود دارد که برای شما این کار را میکند. کافیست با استفاده از redirection ها خروجی خود را اونجا بریزید! مثلا:

echo 'hello' > /dev/null

خروجی خود را دور میریزد!

قسمت بعدی که در این مطلب میخواهم به معرفی بپردازم، wildcard ها هستند

wildcard ها در لینوکس

برای آشنایی با wildcard ها کد زیر را در ترمینال بزنید:

man glob

علائم wildcard در لینوکس بسیار پر کاربرد هستند و میتوانند زمان زیادی را برای شما صرفه جویی کنند.

یکی یکی به بررسی مهم ترین آن ها میپردازیم:

؟ (علامت سوال):

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

برای مثال، کاراکتر

'hd?'

میتواند به عنوان hda و hdb و hdc و دیگر کاراکترها (از a تا z و از 0 تا 9) شود.

* (ستاره)

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

برای مثال، کاراکتر

'cd*'

جانشین cdrom و cda و cdrecord و کلا هرچیزی که با cd شروع بشه میشه. یا مثلا کاراکتر

'm*l'

میتونه جانشین mail و mill و ml و کلا هرچیزی که با m شروع و به l ختم بشه میشه!

[ ] (قلاب)

این علامت یک مجموعه را تعریف میکند. برای مثال، [a-z] یک مجموعه از حروف بین حرف a تا z را تعریف میکند. و یا کاراکتر

'm[u,o,a]m'

شامل کاراکتر های mum و mom و mam میشه. به همین سادگی!

\

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

\n

استفاده کنید و یا برای چاپ \ میتوانید از \\ استفاده کنید.

^

این علامت به معنای شروع است. مثلا

'^a'

شامل تمامی کاراکتر هایی است که با حرف a شروع میشوند مثل ali و ....

$

برعکس ^ به معنای پایان است. مثلا

'a$'

به معنای تمامی کاراکتر هایی است که با a پایان می یابد. مثل sara ...

البته wildcard های دیگری مانند  {} و ! و [!] و [^] و... وجود دارد و در این مطلب تنها سعی شده به مهم ترین آنها که همین موارد بالا بودند پرداخته شود.

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

man regex

علائم جداکننده ی فرمانها

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

الف) اجرای به ترتیب دستور ها

cmd1;cmd2;cmd3

در این حالت ابتدا دستور اول اجرا میشود و سپس دستور دوم و الی آخر

ب) اجرا در صورت موفق بودن

cmd1 && cmd2

در این حالت ابتدا دستور اول اجرا میشود، سپس در صورت موفقیت آمیز بودن این دستور و عدم خطا در آن، دستور بعدی اجرا میشود

ج) اجرا در صورت موفقیت آمیز نبودن

cmd1 || cmd2

در این حالت ابتدا دستور اول اجرا میشود و درصورتی که در حین اجرا با خطا مواجه شد، به سراغ دستور دوم میرود

د) اجرای دو دستور به طور همزمان

cmd1 & cmd2

در این حالت، هر دو دستور به طور همزمان اجرا خواهند شد

متغیرهای پیشفرض

در لینوکس، متغیر های پیشفرض زیادی وجود دارد

برای مشاهده ی آنها، ابتدا دستور زیر را وارد کنید

echo $

و سپس به جای زدن اینتر برای اجرای دستور، دوبار دکمه ی tab را فشار دهید. در این حالت تمامی متغیرهای سیستم به شما نشان داده خواهد شد. ولی برخی از این متغیر ها هستند که از اهمیت بیشتری برخوردارند. در این جا به عنوان آخرین مبحث در این مطلب به طور خللاصه چند تا از آنها را میخواهم معرفی کنم

Home

در این متغیر، آدرس دایرکتوری خانه (~) ی کاربر ذخیره شده است

IFS

مخفف Input field separator است و جداکننده ی آرگومانها و ورودی ها در آن ذخیره شده است. به صورت پیشفرض مقدار آن space و یا tab است

LOGNAME

نام یوزر کاربر در این متغیر ذخیره شده است

PATH

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

TERM

ترمینال مورد استفاده شما در این متغیر ذخیره شده است

PS1

مخفف prompt string 1 است. این متغیر تعیین کننده ی اشاره گر قبل از کد است! البته واقعا نمیدونم اسمش چیه! اسمش همون prompt string هست. همین که توی تصویر زیر میبینید!

به اون قسمتی که نوشته rfkrocktk@work-laptop میگند prompt string

با این متغیر، شما میتونید این متن را کنترل کنید و تغییر دهید!

برای مشاهده ی متغیر های بالا، کافیست از دستور echo مثل زیر استفاده کنید:

echo $PS1;
echo $HOME;
echo $IFS;

و برای تغییر اون ها، کافیست مثل زیر، بدون علامت $ اون ها را تغییر دهید:

IFS=:
HOME=/myhome
PS1=write your code:

منتشر شده در:

  • آواتار GeraldWak

    GeraldWak

    جمعه 10 شهریور 1396

    ارسال پاسخ

    sudafed cialis <a href="http://cialisbsl.su/">website </a> chef de produit cialis <a href=http://cialisbsl.su/>cialis without a doctor prescription</a>
  • آواتار GeraldWak

    GeraldWak

    جمعه 10 شهریور 1396

    ارسال پاسخ

    mexican online pharmacies <a href="http://canadianpharmaciesonlineseo.today">canadian online pharmacies</a> onlinecanadianpharmacy.com <a href=http://canadianpharmacieskom.bid>Jackwoono</a> canada pharmacy online reviews <a href="http://canadianpharmaciesbsl.us">canadian pharmacy</a> no 1 canadian pharcharmy online <a href=http://canadianpharmaciesonlinebsl.club>home </a>
  • آواتار Felipenit

    Felipenit

    جمعه 10 شهریور 1396

    ارسال پاسخ

    drugstore online <a href="http://canadianpharmacieskom.today">canadian pharmacy</a> canadian rx pharmacy online <a href=http://canadapharmacyseo.us>canadian drugs</a> canadian pharmacies top best <a href="http://canadianpharmaciesseo.club">canadian online pharmacies</a> pharmacy without dr prescriptions <a href=http://canadianpharmacybsl.today>http://canadapharmacybsl.bid</a>
  • آواتار GeraldWak

    GeraldWak

    شنبه 11 شهریور 1396

    ارسال پاسخ

    overseas pharmacy forum <a href="http://canadianpharmacyseo.us">canadian pharmacy</a> prescription cost comparison <a href=http://canadianpharmacyseo.us>canadian online pharmacies</a>
  • آواتار Felipenit

    Felipenit

    شنبه 11 شهریور 1396

    ارسال پاسخ

    no prescription online pharmacy <a href="http://canadapharmacybsl.bid">http://canadapharmacybsl.bid/</a> canada pharmacy online <a href=http://canadapharmacybsl.bid>canadian online pharmacies</a>
  • آواتار Matthewstund

    Matthewstund

    یکشنبه 12 شهریور 1396

    ارسال پاسخ

    cheap drugs online <a href="http://canadapharmacybsl.today">web </a> canada drug prices <a href=http://canadapharmacybsl.today>canadian online pharmacies</a>
  • آواتار GeraldWak

    GeraldWak

    یکشنبه 12 شهریور 1396

    ارسال پاسخ

    canada pharmacies online pharmacy <a href="http://canadianpharmacyseo.us">canadian pharmacies shipping to usa</a> prescription without a doctor's prescription <a href=http://canadianpharmacyseo.us>northwest pharmacy</a>
  • آواتار Felipenit

    Felipenit

    یکشنبه 12 شهریور 1396

    ارسال پاسخ

    write my book report <a href="http://writemyessaybsl.com/">write my essay</a> phd dissertation writing services <a href=http://writemyessaybsl.com/>essay writer</a>
  • آواتار Matthewstund

    Matthewstund

    یکشنبه 12 شهریور 1396

    ارسال پاسخ

    expert assignment writers <a href="http://writemyessaybsl.com/">write my essay</a> research dissertation <a href=http://writemyessaybsl.com/>cialis prices</a>
  • آواتار GeraldWak

    GeraldWak

    یکشنبه 12 شهریور 1396

    ارسال پاسخ

    top essay writing services <a href="http://writemyessaybsl.com/">Clarkwoono</a> paper writing services reviews <a href=http://writemyessaybsl.com/>write my essay</a>
  • آواتار Felipenit

    Felipenit

    یکشنبه 12 شهریور 1396

    ارسال پاسخ

    someone write my essay <a href="http://writemyessaybsl.com/">essay writer</a> academic essay writers <a href=http://writemyessaybsl.com/>write my essay</a>
  • آواتار GeraldWak

    GeraldWak

    یکشنبه 12 شهریور 1396

    ارسال پاسخ

    how to write a phd thesis <a href="http://writemyessaybsl.com/">http://writemyessaybsl.com/</a> college essay writing service reviews <a href=http://writemyessaybsl.com/>http://writemyessaybsl.com/</a>
  • آواتار Matthewstund

    Matthewstund

    دوشنبه 13 شهریور 1396

    ارسال پاسخ

    cat essay writer <a href="http://resumewritingservicesbsl.online/">writing a resume</a> writer service <a href=http://resumewritingservicesbsl.online/>essay writer</a>
  • آواتار Felipenit

    Felipenit

    دوشنبه 13 شهریور 1396

    ارسال پاسخ

    original essay writing service <a href="http://resumewritingservicesbsl.online/">http://resumewritingservicesbsl.online/</a> buy an essay cheap <a href=http://resumewritingservicesbsl.online/>writing a resume</a>
  • آواتار GeraldWak

    GeraldWak

    دوشنبه 13 شهریور 1396

    ارسال پاسخ

    buying papers online <a href="http://resumewritingservicesbsl.online/">writing a resume</a> college application essay writing service <a href=http://resumewritingservicesbsl.online/>http://resumewritingservicesbsl.online/</a>
  • آواتار RalphTew

    RalphTew

    چهارشنبه 15 شهریور 1396

    ارسال پاسخ

    lichen planus cialis <a href="http://cialisxrm.com/">cialis generic</a> vision changes with cialis <a href=http://cialisxrm.com/>cialis coupon</a>
  • آواتار RalphTew

    RalphTew

    چهارشنبه 15 شهریور 1396

    ارسال پاسخ

    cialis Г© vasodilatador <a href="http://cialisxrm.com/">cialis without a doctor prescription</a> grapefruit interactions with cialis <a href=http://cialisxrm.com/>cialis coupon</a>
  • آواتار Matthewstund

    Matthewstund

    شنبه 18 شهریور 1396

    ارسال پاسخ

    grapefruit juice cialis <a href="http://buycialisgenericbsl.com/">cialis without a doctor prescription</a> cialis and blood glucose <a href=http://buycialisgenericbsl.com/>cialis prices</a>
  • آواتار Matthewstund

    Matthewstund

    شنبه 18 شهریور 1396

    ارسال پاسخ

    diferenças entre viagra cialis e levitra <a href="http://buycialisgenericbsl.com/">cialis coupon</a> where to buy cialis in auckland <a href=http://buycialisgenericbsl.com/>buy generic cialis</a>
  • آواتار Felipenit

    Felipenit

    شنبه 18 شهریور 1396

    ارسال پاسخ

    levitra und blutdrucksenkende medikamente <a href="http://levitra20mgbsl.com/">hp </a> levitra besser wie viagra <a href=http://levitra20mgbsl.com/>levitra 20 mg</a>
  • آواتار Felipenit

    Felipenit

    شنبه 18 شهریور 1396

    ارسال پاسخ

    dicloxacil viagra interaction <a href=http://viagrawithoutadoctorbsl.com/>herpes online prescription viagra </a> <a href="http://viagrawithoutadoctorbsl.com/">viagra without a doctor prescription usa</a> viagra 24 hour delivery uk
  • آواتار GeraldWak

    GeraldWak

    شنبه 18 شهریور 1396

    ارسال پاسخ

    no prescription online pharmacy <a href="http://canadianpharmaciesonlinebsl.com/">http://canadianpharmaciesonlinebsl.com/</a> canadianpharmacy <a href=http://canadianpharmaciesonlinebsl.com/>canadian drugs</a>
  • آواتار GeraldWak

    GeraldWak

    شنبه 18 شهریور 1396

    ارسال پاسخ

    buy prescription drugs without doctor <a href="http://canadianpharmaciesonlinebsl.com/">canadian pharmacies online</a> canadian pharma companies <a href=http://canadianpharmaciesonlinebsl.com/>canada drug</a>
  • آواتار Matthewstund

    Matthewstund

    یکشنبه 19 شهریور 1396

    ارسال پاسخ

    cialis e prestazione sportiva <a href="http://buycialisgenericbsl.com/">cialis prices</a> cialis uso continuado <a href=http://buycialisgenericbsl.com/>cialis coupon</a>
ارسال نظر
خوانا نیست؟تعویض کد