تبلیغات :
آی تی قیمت
دوربین مداربسته
لوازم جانبی موبایل
دستگاه جوجه کشی خانگی
زیرساخت مرکز داده
دستگاه جوجه کشی
ماشین آلات بسته بندی
جراحی زیبایی بینی
سیم و کابل
[ سفارش آگهی متنی ]
















+ جواب دادن به اين بحث
صفحه 2 از 2 اولاول 12
نمايش نتايج 11 به 15 از 15

نام تاپيک: آموزش Linux Essentials

  1. #11
    کاربر فعال انجمن گنولینوکس Ali_RNT's Avatar
    تاريخ عضويت
    Jul 2013
    محل سكونت
    home/ali_rnt/
    پست ها
    1,327

    پيش فرض

    ۱۰. نمایش محتویات فایل ها - more و less

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

    برای نمایش محتویات فایل بر روی صفحه میتوانید به راحتی از دستور more استفاده کنید، این دستور میتواند محتویات یک فایل متنی را صفحه به صفحه برای شما نمایش دهد. یک صفحه از محتویات فایل نمایش داده میشود، و سپس در آخرین خط –-More-- را میبینید، میتوانید با فشردن کلید های معرفی شده در جدول زیر متن را پیمایش کنید.



    میتوانید more را با گزینه های خاصی که پشتیبانی میکند اجرا کنید. گزینه ی s- (مخفف squeeze) در صورت وجود چند خط خالی، فقط یک خط خالی را نمایش میدهد (صرفه جویی در فضای صفحه). با استفاده از گزینه ی n number- میتوانید تعین کنید که هر صفحه از چند خط تشکیل شود، در غیر این صورت، بر اساس مختصات ترمینال تنظیم خواهد شد.

    خروجی more محدودیت‌هایی نیز دارد، مثلاً نمیتوانید به عقب بازگردید تا به ابتدای فایل برسید. بنابراین بهتر است از نسخه بهبود یافته آن به نام less استفاده کرد. Less به شما این امکان را میدهد تا با کلید های جهت متن را پیمایش کنید، عمل‌کرد جستجو بهبود یافته و این امکان را میدهد که از ابتدا یا انتهای متن شروع به جستجو کنید. دستور های معمول در جدول زیر آمده اند.


  2. این کاربر از Ali_RNT بخاطر این مطلب مفید تشکر کرده است



  3. #12
    کاربر فعال انجمن گنولینوکس Ali_RNT's Avatar
    تاريخ عضويت
    Jul 2013
    محل سكونت
    home/ali_rnt/
    پست ها
    1,327

    پيش فرض قسمت یازدهم - جستجو

    جستجوی فایل‌ها – find

    برای پیدا کردن فایلی که نمیدانید دقیقاً کجا ذخیره کرده‌اید میتوانید از ابزار find استفاده کنید. این ابزار تمامی دیرکتوری ها را به طور بازگشتی جستجو میکند تا فایل مشابه را پیدا کند. بازگشتی (Recursively) به این معناست که اگر یک دیرکتوری را به آن بدهید، زیر شاخه‌ها، زیر شاخه‌های آن‌ها و به همین ترتیب را جستجو میکند. خروجی find شامل مسیر فایل هاست، که میتواند به دیگر برنامه‌ها منتقل شود. برای شناخت ساختار این فرمان به مثال زیر توجه کنید:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    این دستور مسیر فعلی را برای یافتن فایل‌های متعلق به کاربر joe جستجو میکند.گزینه ی print – در اینجا یک عمل (action) است، که به دستور میگوید نتایج را روی صفحه بنویسد. گرچه اگر عملی را تعیین نکنید دستور find به طور خودکار print را در نظر میگیرد. دستور find به آرگومان هایی هم نیاز دارد.

    دیرکتوری شروع

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

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

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

    شروط تست


    این گزینه ها به دستور میگویند که فایل مورد نظر دارای چه شرایط و نیازمندی هایی است. مهم‌ترین شروط تست در جدول زیر آمده اند

    شرط تست توضیحات
    -type نوع فایل را مشخص میکند( در آینده توضیح داده میشود)
    b: block device file
    c: character device file
    d: directory
    f: plain file
    l: symbolic link
    p: FIFO (named pipe)
    s: Unix domain socket
    -user مشخص میکند که مالک فایل کدام کاربر باشد، میتواند نام کاربری یا UID باشد.
    -group تعیین میکند که مالک فایل عضو کدام گروه کاربری است.
    -size فایل‌هایی با سایز مشخص را جستجو میکند.اگر تنها یک عدد بدهید واحد آن یک بلاک ۵۱۲ بایتی در نظر گرفته میشود، واحد بایت و kibibyte هم میتوان استفاده کرد (با اضافه کردن c یا k به انتهای عدد). گذاشتن – یا + قبل از عدد هم باعث می‌شود فایل‌هایی با حجم کمتر یا بیشتر از عدد تعین شده جستجو شوند.
    -atime بر اساس زمان آخرین دسترسی به فایل جستجو میکند، عددی که به این تست و دوتای بعدی میدهید، بر اساس روز محاسبه میشود. برای استفاده از دقیقه به جای روز، time… را با min… عوض کنید.
    -mtime بر اساس آخرین ویرایش فایل
    -ctime بر اساس آخرین تغییر inode ( مانند تغییر مجوز، دسترسی به محتویات، تغییر نام، و غیره)
    -perm با استفده از این تست تعیین میکنید فایل‌های مورد نظر دارای چه مجوزی هستند. این مجوز ها یک عدد در مبنای هشت اند.
    -links تعیین میکند فایل موردنظر چه شماره مرجعی دارد. در قسمت ۹ دیدیم که این شماره با ساختن لینک ها تغییر میکند.
    -inum جستجو بر اساس inode
    -name الگوی نام فایل را مشخص میکند (در قسمت‌های قبلی توضح داده شد). با گزینه ی iname- جستجو به کوچک یا بزرگی حروف حساس نمیشود.

    عملگر ها:


    گزینه عملگر معنا
    ! Not تستی که بعد از این علامت می‌آید نباید درست باشد.
    -a And تست قبل و بعد از این گزینه هر دو باید درست باشند.
    -o Or حداقل یکی از دو تست قبل و بعد از این گزینه باید درست باشند.

    اگر بخواهیم از چندین تست استفاده کنیم، آن‌ها را با هم And میکنیم. اگر از پرانتز استفاده شد، باید قبل از پرانتز \ بگذارید. یک مثال که فایل‌هایی که با A شروع می‌شوند یا دیرکتوری هستند را جستجو میکند:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    عمل‌ها (Actions)

    قبلاً یکی از عمل‌ها را دیدید (print-). علاوه بر آن، دو عمل دیگر نیز وجود دارند که دستوراتی را برای فایل‌ها اجرا میکنند. فرق میان این دو، این است که exec- قبل از اجرای فرمان از کاربر تأیید نمیخواهد ولی ok- از کاربر میخواهد که انجام فرمان را تأیید کند.

    دستوری که پس از exec- می آید، باید در انتها با ; همراه شود و چون این کاراکتر، یک کاراکتر خاص است، باید با گذاشتن \ پیش از آن، آنرا متمایز کنید.

    دو براکت ({}) در دستور با نام فایلی که پیدا شده جایگزین میشود. بهتر است براکت ها را در ' محدود کنید تا با فایل‌هایی که در اسم آن‌ها فاصله وجود دارد به مشکل بر نخورید.
    مثال:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    این مثال فایل‌های متعلق به joe را در دیرکتوری فعلی جستجو میکند و برای هر کدام دستور ls -l را اجرا میکند.
    مثال:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    این دستور فایل‌هایی را که بیش از دو هفته از آخرین دسترسی به آن‌ها گذشته را با اعلان به کاربر (i-) حذف میکند.

    نکته:
    گاهی اوقات مانند مثال بالا، اجرای پردازش rm برای هر فایل کار غیر مفیدی است، در این شرایط، دستور xargs به کمک ما می آید. به این نمونه توجه کنید:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    کاراکتری که قبل از xargs میبینید، خط لوله نام دارد و خروجی یک دستور را به عنوان ورودی به دستور دیگری میدهد، که در این مثال نام فایل‌های یافت شده است. Xargs ورودی های خود را تا یک حد مجاز (که قابل تنظیم است) میخواند و آن‌ها را به عنوان آرگومان به دستور میدهد. این عبارات خوانده شده با فاصله جدا میشوند.

    نکته:
    فایل‌های با اسمی عجیب (مانند آن‌ها که دارای فاصله اند)، در استفاده از ترکیب find و xargs دردسر ساز میشوند. راه حل استفاده از print0- به جای print- است که به جای جداسازی با فاصله یا خط جدید، از بایت نول (Null Byte) استفاده میکند که شل با آن به مشکلی بر نخورد. همچنین xargs نیز باید با 0r- به جای r- اجرا شود.

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    تمرین

    ۱. تمامی فایل‌های با حجم بیشتر از ۱ مگابایت را پیدا کنید، و نام آن‌ها را نمایش دهید.

    ۲. چگونه میتوان با استفاده از find یک فایل با نام غیر عادی (که شل های قدیمی پشتیبانی نمیکنند) را حذف کرد؟

    ۳. چگونه میتوان مطمئن شد که فایل‌های موجود در دیرکتوری tmp/ که متعلق به شماست بعد از خروج از سیستم حذف شده اند؟

    جستجوی سریع فایل‌ها – locate و slocate

    دستور find قوی اما پیچیده است، همچنین کند است چرا که باید تمام درخت دیرکتوری را طی کند، بنابراین برای کارهای ساده به صرفه نیست. دستور locate یک راه سریع‌تر است که یک نام فایل یا الگوی نام فایل را میگیرد، و نام آنها را مینویسد.

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    با وجود اهمیت locate، در برخی از توزیع‌ها به طور پیشفرض نصب نشده است.

    میتوانید از الگو ها هم استفاده کنید، فقط توجه کنید که locate فایل‌هایی را پیدا میکند که «کاملا» با الگو مطابق باشند، از ابتدا تا انتها. بنابراین در ابتدای الگو از * استفاده میکنیم:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    همچنین یادتان باشد که در مواردی که از الگو ها استفاده میکنید، آرگومان را در کوتیشن ها قرار دهید تا شل اقدام به گسترش آن‌ها نکند.

    علت سرعت locate، استفاده از دیتابیس ایجاد شده توسط updatedb به جای پیمایش درخت دیرکتوری است. این دیتابیس بسته به برنامه ی cron (که برای برنامه‌ریزی عملیات در سیستم استفاده میشود) در فواصل زمانی مختلف به روز رسانی میشود. برنامه ی cron در لینوکس پیشرفته آموزش داده میشود.

    برنامه ی slocate جایگزینی برای locate است. مشکلی که updatedb دارد، این است که به عنوان کاربر ریشه اجرا می‌شود و تمامی فایل‌ها را در دیتابیس ذخیره میکند. همچنین دسترسی آن محدود است. برنامه ی slocate علاوه بر نام فایل ها، اطلاعات مالک، گروه و مجوز ها را نیز در فایل ذخیره میکند. بنابراین فقط زمانی نام فایل جستجو شده را نمایش میدهد که کاربری که برنامه را اجرا کرده، مجوز دسترسی به فایل را داشته باشد. این برنامه به همراه updatedb نصب می‌شود. در بسیاری موارد، سیستم به گونه‌ای تنظیم شده که اجرای locate منجر به اجرای slocate میشود.

    تمرین

    ۱. README یک نام فایل متداول است، مسیر کامل تمامی فایل‌های README در سیستم را پیدا کنید.

    ۲. ابتدا فایل جدید را در پوشه خانگی خود ایجاد کنید، سپس
    الف) فایل را با locate جستجو کنید.
    ب) اکنون updatedb را اجرا و مجدداً جستجو را انجام دهید.
    پ) حالا فایل را حذف کنید و مجدداً locate را برای جستجوی فایل استفاده کنید.

    ۳. بررسی کنید که آیا میتوانید فایل etc/shadow/ را با slocate پیدا کنید؟

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

    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

  4. 2 کاربر از Ali_RNT بخاطر این مطلب مفید تشکر کرده اند


  5. #13
    کاربر فعال انجمن گنولینوکس Ali_RNT's Avatar
    تاريخ عضويت
    Jul 2013
    محل سكونت
    home/ali_rnt/
    پست ها
    1,327

    پيش فرض

    از این قسمت به بعد، همانگونه که گفته شد مبحث عبارات با قاعده را شروع میکنیم. مبحثی کسل کننده اما در عین حال به شدت کاربردی که میتواند بسته به مهارت شما پیچیده یا ساده باشد. پس این چند قسمت را تحمل کنید و پا به پای من بیایید تا به فیض برسید. و باز هم عذرخواهی میکنم که آموزش ها مختصر و با تاخیر ارائه میشود.

    عبارات باقاعده: مقدمات

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

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

    عبارات باقاعده معمولاً به صورت بازگشتی، و از عباراتی ایجاد می‌شوند که خودشان هم باقاعده اند. ساده‌ترین عبارات باقاعده حروف، کاراکتر ها، ارقام و خیلی چیز های دیگر هستند که به جای خودشان قرار میگیرند (به معنی خودشان هستند). برای مثال، a، یک عبارت باقاعده است که با کاراکتر a جور میشود.

    کلاس‌های کارکتری، که قبلاً کمی در مورد آن‌ها بحث کردیم، با روشی مشابه الگوهای جستجوی شل ایجاد میشوند. بنابراین عبارت باقاعده [a-e] (که یک محدوده (range) نیز نامیده میشود) دقیقاً با یک کاراکتر از a تا e مطابقت میکند، و a[xy]b با یکی از دو رشته ی axb یا ayb مطابقت میکند. میتوان این رشته‌ها را به طور مسلسل وار نوشت، مانند [A-Za-z] که با تمامی حروف کوچک و بزرگ مطابقت میکند.

    مکمل محدوده ها اما با روشی متفاوت از شل نوشته میشود. در عبارات با قاعده، برای مثال، محدوده [abc^] با تمامی حروف به جز a, b, c مطابقت میکند. در صورتی که در شل مینوشتیم [abc!]. نقطه، هم ارز علامت سؤال در الگوهای جستجوی شل است، یعنی با دقیقاً یک حرف مطابقت میکند. تنها کاراکتری که . با آن مطابقت نمیکند خط جدید (n\) است. پس a.c با abc و a/c مطابقت دارد، اما نه با

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

    تفاوت دیگر عبارات با قاعده و کلاس‌های کاراکتری، این است که کلاس‌های کاراکتری با ابتدای نام فایل مقایسه میشدند، اما عبارات باقاعده با هر قسمتی از یک خط میتواند مطابقت داشته باشد. البته میتوانید اینرا محدود کنید، اگر میخواهید فقط ابتدای خط بررسی شود ابتدای عبارت ^ و اگر میخواهید انتهای خط بررسی شود در انتهای عبارت، $ قرار دهید. در ضمن در صورت استفاده از $ نیازی به اشاره به کاراکتر خط جدید (n\) نیست. یعنی برای جستجوی خطوطی که با xyz تمام می‌شوند میتوان نوشت $xyz، و نیازی به $xyz\n نیست.

    نکته: ^ و $ در‌واقع با کاراکتر های مخفی مطابقت میکنند که ابتدا و انتهای خط را مشخص میکنند.
    از * نیز میتوان برای تکرار عبارت باقاعده ی پیش از آن استفاده کرد. یک مثال میزنیم. الگوی جستجوی a*.txt را در نظر بگیرید که با تمامی فایل‌هایی که با a شروع و با txt. خاتمه میافتند مطابق بود. عبارت باقاعده ی معادل آن این‌گونه است:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    .a میگوید که هر رشته ای که با a شروع شود موردنظر ماست. همچنین ^ مشخص میکند که جستجو از ابتدای خط شروع شود. سپس میخواهیم قسمت ثابت متن یعنی txt. را مشخص کنیم. اما نمینویسیم txt. چرا که در عبارات باقاعده . معادل «هر رشته ای» بود. پس آن را با گذاشتن دو \\، escape میکنیم.

    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

  6. 2 کاربر از Ali_RNT بخاطر این مطلب مفید تشکر کرده اند


  7. #14
    کاربر فعال انجمن گنولینوکس Ali_RNT's Avatar
    تاريخ عضويت
    Jul 2013
    محل سكونت
    home/ali_rnt/
    پست ها
    1,327

    پيش فرض

    با درودی دگرباره، با قسمتی جدید از آموزش Linux Essentials با شما هستم. در این قسمت مطالب قبلی را تکمیل میکنیم و شما را برای کاربرد های عملی grep آماده میکنیم. مثال های کاربردی منبع کم بود و در حال تهیه چند مثال کاربردی تر هستم ^.^

    ۱۳.۱ عبارات باقاعده: اضافیات

    توضیحات قسمت قبلی تقریباً با تمامی برنامه‌هایی که از عبارات باقاعده پشتیبانی میکنند مطابقت دارد. برنامه‌های مختلف به عبارات باقاعده بسط (extension) هایی اضافه میکنند تا کارایی برنامه هارا افزایش دهند. امثال آن زبان‌های اسکریپتی Perl, Tclو پایتون هستند، که قابلیت‌هایی فراتر از عبارات باقاعده دارند.
    برخی از بسط های متداول:

    • براکت های کلمات: >\ با آغاز یک کلمه و <\ با پایان یک کلمه مطابقت میکند (یک کلمه با حرفی که قبل از آن کاراکتری غیر از حروف آمده آغاز، و با حرفی که بعد از آن کاراکتری غیر از حرف آمده پایان میابد).
    • دسته بندی: توسط پرانتز ها میتوانید عبارات را به قسمت‌های مجزا تقسیم کنید. مثلاً
      کد:
      برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
      با یک حرف a که به دنبال آن هر چند تا bc آمده مطابقت دارد.
    • جایگزینی: با خط عمودی | میتوانید چند عبارت دلخواه را تعیین کنید تا انتخاب شوند. مثلا:
      کد:
      برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
      با motor bike، motor cycle و motor boat مطابقت میکند اما نه هیچ چیز دیگر.
    • عبارت اختیاری: با علامت سؤال تعیین میکنید که یک عبارت میتواند وجود نداشته باشد یا یک بار وجود داشته باشد. مثلا:
      کد:
      برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
      با Ali و Ali Rashidi مطابقت میکند.
    • حداقل یکبار تکرار: با استفاده از + به جای * در‌واقع همان عمل * را انجام میدهید، اما اینبار حداقل یکبار باید عبارت تکرار شود. مثلاً

      کد:
      برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
      عبارت اول با a و ali و alili و … مطابقت دارد، در حالی که دومی با a مطابقت نمیکند.
    • تعیین مرتبه تکرار: با استفاده از براکت میتوان تعیین کرد یک متن چند بار تکرار شود. مثلا:
      کد:
      برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
      با abb، abbb و abbbb مطابقت دارد. میتوانید حداقل یا حداکثر را حذف کنید. در صورت حذف حداقل، ۰ در نظر گرفته می‌شود و در صورت حذف حداکثر، بینهایت.
    • ارجاع به قبل: عبارتی مانند n\\ تکرار مرتبه ی nام عبارت بلی که در پرانتز آمده را سبب میشود. (از تعریف که هیچی معلوم نیست) برای مثال:
      کد:
      برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
      با abab مطابقت دارد، چرا که مرتبه ۱ پرانتز قبلی همان ab است. و عبارت زیر:
      کد:
      برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
      ابتدا ببینیم عبارت داخل پرانتز با چه چیزی جور میشود. در مرتبه ۱ با abaad و در مرتبه ۲ با abaaad جور میشود. یک x نیز به آن اضافه میشود. 2\\ یعنی مرتبه دوم پرانتز و در نهایت این عبارت با این دو رشته جور میشود: abaadxabaaad abaaadxabaaad اطلاعات بیشتر در راهنمای GNU grep موجود است.
    • عملگرهای غیر حریص (Non-greedy): عملگرهای ، + و ? رفتاری حریصانه دارند، یعنی سعی میکنند با بیشترین مقدار ورودی که ممکن است جور شوند. مثلاً اعمال عبارت a.*a^ به رشته ورودی abacada فقط با abacada جور میشود، نه با aba یا abaca. برای اعمال محدودیت میتوان از عملگر های غیر حریص
      کد:
      برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
      استفاده کرد که سعی میکنند کمترین ورودی ممکن را بگیرند. در مثال قبلی اگر از
      کد:
      برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
      استفاده کنیم با رشته ی aba جور میشود.


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

    بسط (Extension) GNU grep GNU egrep trad egrep vim emacs Perl Tcl
    براکت های کلمات •1 •1 •4 •4
    دسته بندی •1 •1 •1
    جایگزینی •1 •2 •1
    عبارت اختیاری •1 •3
    حداقل یکبار تکرار •1 •1
    تعیین مرتبه تکرار (اعمال محدودیت) •1 •1 •1
    ارجاع به قبل
    عملگر های غیر حریص •4

    ∘: پشتیبانی نشده، •: پشتیبانی شده.
    1. به یک \ قبل از عملگر نیاز است، مثلاً +\ab به جای +ab
    2. به پرانتز نیازی ندارد، عبارات جایگزین همواره به یک عبارت باقاعده کامل اشاره دارند.
    3. از =\ به جای ? استفاده شود.
    4. شیوه نوشتاری کاملاً متفاوتی دارند، مستندات را مطالعه کنید.

    حالا وقت آن رسیده که بدانید چگونه از این عبارات باقاعده استفاده کنید.

    ۱۳.۲ جستجوی متن در فایل‌ها – grep


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

    دو گونه از grep وجود دارد: نسخه قدیمی و ابتدایی به نام fgrep که از عبارات باقاعده پشتیبانی نمیکند و به رشته‌های کاراکتری محدود میشود. اما یک مزیت مهم دارد که سرعت آن است. گونه ی دیگر، egrep است (Extended grep) که عبارات با قاعده را نیز پشتیبانی میکند اما کمی کندتر است.
    نحوه نوشتاری grep به این صورت است که به حداقل یک عبارت باقاعده برای جستجو نیاز دارد. آرگومان دوم نام فایلی است که مورد جستجو واقع میشود. اگر تعیین نشود، ورودی استاندارد در نظر گرفته میشود. (در آینده توضیح داده خواهد شد).

    هنگام استفاده از grep عملگر های +\، ?\ و }\ با یک ممیز شناور قبل از خود همراه می‌شوند (در egrep اینکار ضروری نیست). متاسفانه، عملگر های غیر حریص در grep وجود ندارند.

    نکته: عبارات باقاعده را در نقل و قول‌ها محدود کنید تا از گسترش آن‌ها توسط شل جلوگیری کنید. مخصوصاً اگر عبارت پیچیده و دارای عبارات مشابه الگوهای جستجو میباشد.

    ابزار grep هم مانند هر ابزار دیگری میتواند گزینه (option) هایی را از طریق خط فرمان بگیرد که در جدول زیر مشاهده میکنید:

    گزینه نتیجه
    -c (count) فقط تعداد مطابقت ها را به خروجی میبرد.
    -i (insert) میان حروف کوچک و بزرگ تفاوتی قائل نمیشود.
    -l (list) فقط نام فایل‌هایی که مطابقت دارند را لیست میکند.
    -n (number) تعداد خطوطی که مطابقت دارند را نیز به خروجی میبرد.
    -r (recursive) فایل‌ها را در زیر شاخه (subdirectory) ها نیز جستجو میکند.
    -v (invert) خطوطی را به خروجی میبرد که با عبارت مطابقت ندارند.

    با استفاده از گزینه ی f- میتوانید فایلی شامل عبارت باقاعده را تعیین کنید. اگر فایل شامل چندین خط باشد هر خط به عنوان یک عبارت باقاعده مجزا در نظر گرفته می‌شود و این عبارات به صورت همزمان جستجو میشوند. ذخیره کردن عبارات در فایل راهکار خوبی برای جستجوی الگوهایی است که مکرراً استفاده میشوند.

  8. #15
    کاربر فعال انجمن گنولینوکس Ali_RNT's Avatar
    تاريخ عضويت
    Jul 2013
    محل سكونت
    home/ali_rnt/
    پست ها
    1,327

    پيش فرض

    در این قسمت ورودی-خروجی استاندارد و انتقال آنها را بررسی میکنیم.

    ۱.۱ کانال‌های استاندارد

    اغلب دستورات لینوکس برای گرفتن ورودی، پردازش آن‌ها و دادن خروجی به کار میروند. برای مثال، با نوشتن:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    خطوطی را مینویسید (ورودی)، grep آن‌ها را پردازش میکند و فقط خطوط شامل xyz را به خروجی میبرد (خطوط درشت ورودی ما و خطوط معمولی خروجی اند):
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    مفهومی به نام «کانال‌های استاندارد»1 وجود دارد و کانال‌های استاندارد ما در اینجا، صفحه‌کلید به عنوان «ورودی استاندارد2» و کنسول یا ترمینال به عنوان «خروجی استاندارد3» میباشند. یک کانال دیگر «خروجی استاندارد خطا4» است که پیغام های خطای برنامه، مانند فایل ورودی ناموجود یا اشتباه نحوی در عبارت باقاعده، به آن منتقل میشوند.

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



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

    کانال ورودی استاندارد هم میتواند به روش‌هایی منتقل شود، به گونه‌ای که به جای صفحه‌کلید ورودی اش را از یک فایل بگیرد.

    نکته: صفحه‌کلید و صفحه نمایش ترمینالی که با آن کار میکنید، به وسیله ی dev/tty/ در دسترس است. در صورتی که اطلاعات را از آن بخوانید به منزله کیبرد، و در صورت نوشتن اطلاعات در آن، به عنوان صفحه نمایش به کار میرود. مثال اول متنی را در tty مینویسد و میبینید که مانند این است که آنرا مستقیماً در صفحه نمایش بنویسیم:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    و در مثال دوم فایل ورودی grep را همین دستگاه تعیین کرده ایم، که مانند خواندن از صفحه‌کلید است:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    این فایل‌های خاص در قسمت‌های بعدی به طور مفصل‌تر بحث خواهند شد.
    ۱.۲ انتقال (تغییر مسیر) کانال‌های استاندارد

    عملگر شلِ < (علامت بزرگ‌تر) برای انتقال کانال خروجی استاندارد به کار میرود. برای مثال:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    خروجی دستور ls -laF را به فایل fileList منتقل میکند و همانطور که میبینید چیزی روی صفحه نمایش داده نمیشود و شل آماده دریافت دستور بعدی است.

    نکات:

    ۱. فایل fileList در صورتی که موجود نباشد ایجاد و در صورتی که هم‌اکنون موجود باشد، اطلاعات آن رونویسی میشود.

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

    ۳. برای جلوگیری از رونویسی فایل، از دستور زیر استفاده کنید تا در صورت انتقال خروجی به یک فایل موجود، یک خطا به جای رونویسی رخ دهد:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    حالا که از عملگر انتقال استفاده کردید، بیایید محتویات فایل fileList را ببینیم، اگر دقت کنید میبینید که فایل fileList هم با حجم صفر وجود دارد:

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

    برای اینکه خروجی یک دستور را به فایلی ببرید، بدون اینکه محتوای قبلی آن پاک شود (اضافه کردن یا append کردن) از عملگر << به جای < استفاده کنید. فایل مورد نظر در صورت عدم وجود ایجاد میشود.

    یک راه دیگر برای انتقال خروجی استاندارد، استفاده از بک تیک (علامت `) می باشد. این روش خروجی استاندارد دستوری که داخل بک تیک ها قرار دارد را به عنوان ورودی به برنامه میدهد. یک مثال:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اکنون نوبت به تغییر مسیر ورودی استاندارد میرسد که با عملگر > امکان‌پذیر است. مثلاً فیلتر wc که تعداد کلمات را میشمارد، در مثال زیر ورودی اش را به جای کیبرد از فایل میگیرد:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    نکته: برای ارسال محتوای چند فایل به یک برنامه میتوانید از این روش استفاده کنید. با | کمی جلوتر آشنا میشوید. فعلاً همین شکل را به خاطر داشته باشید:

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

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    کمی قبل تر گفته شد که یک کانال استاندارد دیگر هم به نام کانال خروجی استاندارد خطا وجود دارد که با شماره ۲ مشخص میشود. نکته‌ای که هنگام استفاده از عملگر ها باید بدانید این است که باید کانالی که عملگر روی آن‌ها اعمال می‌شود مشخص شود.

    اینکار برای کانال‌های ۰ و ۱ اختیاری است. یعنی نوشتن < با <1 و > با >0 فرقی ندارد. اما برای کانال ۲ اجباری است. با استفاده از این نکته و همچنین اینکه برای انتقال یک کانال به کانال دیگر از &< استفاده میکنیم، میتوانیم کار با کانال ۲ را شروع کنیم.

    مثال:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    دستور بالا خروجی استاندارد و خروجی استاندارد خطای برنامه make را به make.log منتقل میکند.

    توجه کنید که ترتیب مهم است، دستور بالا ابتدا مشخص میکند که خروجی استاندارد به make.log منتقل شود و بعد میگوید که کانال ۲ را به کانال ۱ یعنی خروجی استاندارد منتقل کند، و چون خروجی استاندارد را فایل make.log مشخص کرده‌ایم به آن منتقل میشود. اما اگر به این ترتیب بنویسیم:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    ابتدا کانال ۲ را به خروجی استاندارد (یعنی صفحه نمایش، ترمینال یا کنسول) منتقل میکند و سپس خروجی استاندارد را به make.log میبرد که در این مرحله شامل کانال ۲ (خروجی استاندارد خطا) نمیشود.
    تمرین‌ها

    1. با گزینه U- در دستور ls فایل‌ها بدون اینکه مرتب شوند به خروجی میروند. اما با این حال پس از اجرای

    ls -laU >fileList سایز fileList همچنان صفر میماند. علت چیست؟

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

+ جواب دادن به اين بحث
صفحه 2 از 2 اولاول 12

جواب سريع جواب سريع


* چنانچه از قبل در انجمن ثبت نام کرده اید و دارای نام کاربری هستید ، ابتدا وارد سایت شوید ( این فرم مخصوص ارسال پاسخ توسط کاربران میهمان است )

پایتخت ایران چه نام دارد ؟

Thread Information

Users Browsing this Thread

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

User Tag List

برچسب های این موضوع

به اشتراک بگذارید

به اشتراک بگذارید

قوانين ايجاد تاپيک در انجمن

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