آموزش‌های خط فرمانی

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

آموزش‌های خط فرمانی

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

بار دیگر شل چیست؟

ترجمه از The GNU Bash Reference Manual for Bash Version 4.1

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

یک شل یونیکس، هم یک مفسر فرمان است و هم یک زبان برنامه‌نویسی می‌باشد. به عنوان مفسرفرمان، شل یک رابط کاربری برای دستیابی به مجموعه غنی ابزارهای گنو را فراهم می‌سازد. و به عنوان زبان برنامه‌نویسی اجازه می‌دهد که این ابزارها با یکدیگر ترکیب گردند. به این معنا که فایلهایی محتوی دستورات ایجاد می‌شوند، که خودشان به دستورات تبدیل می‌گردند. این دستورات جدید که همان وضعیت دستورات سیستمی از قبیل آن‌هایی که در دایرکتوری bin/ هستند، را دارند، به کاربران اجازه می‌دهند محیط ویژه‌ای برای خودکارکردن وظایف عمومی‌شان برقرار نمایند.

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

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

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

به عنوان مثال cd و break و continue و exec نمی‌توانند خارج از شل پیاده‌سازی گردند. زیرا آن‌ها به طور مستقیم توسط خود شل با مهارت مدیریت می‌شوند. دستورات داخلی history و getopts و kill یا pwd می‌توانند به صورت ابزارهای جداگانه، ایجاد گردند. لیکن مناسب‌تر است که به صورت دستورات داخلی باشند.

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

شل‌ها برای حالت محاوره‌ای، ویژگی‌های خاص بیشتری نسبت به زبان برنامه‌نویسی ارائه می‌کنند.

استاندارد POSIX

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

مؤسسه مهندسی الکتریک و الکترونیک(IEEE) یا Institute of Electrical and Electronics Enginers که اجتماعی از مهندسین و متخصصین حرفه‌ای الکترونیک و مهندسی کامپیوتر در آمریکا می‌باشد، پیشگام شده و با مقدار چشم‌گیری تلاش وکوشش فروشندگان عمده یونیکس، یک نسخه استانداردی برای یونیکس که POSIX نامیده شد ایجاد نمودند، این نام، کوته‌نوشتی از …Portable Operating System Interface for Unix می‌باشد.

این استاندارد تضمین می‌کند چنانچه برنامه‌های کامپیوتری با رعایت اصول آن طراحی گردند، بر روی تمام سیستم‌هایی که از این استاندارد تبعیت می‌کنند، اجرا گردد. شما نمی‌توانید سیستم عاملی به نام POSIX داشته باشید. اما سیستم یونیکس یا لینوکس شما، می‌تواند مطابق این استاندارد عمل کند. این امر از نظر قابلیت حمل برنامه‌ها بسیار با اهمیت می‌باشد.

وفای به عهد

یکی از معتبرترین راهنماهای Bash که در (The Linux Documentation Project) یا پروژه مستندسازی لینوکس- tldp - نیز قرار گرفته است Bash Guide for Beginners نوشته Machtelt Garrels می‌باشد که نسبت به ترجمه آن برای علاقمندان کار با خط فرمان و اسکریپت‌نویسی Bash اقدام نمودهام و علاقمندان می‌توانند آن را در اینجا ملاحظه نمایند.همچنین تجمیع شده آن در یک فایل را در اینجا با حجم یک MB قرار داده‌ام که پس از دریافت و استخراج آن با دستور tar -xvf bbg.gz یک دایرکتوری با نام Bash-Beginners-Guide شامل کلیه فایلها و دایرکتوریهای مربوط ایجاد می‌گردد. کافیست فایل Bash_beginners.html را ترجیحاً در مرورگر فایرفاکس باز کنید. برای زیبا‌تر دیدن متن، پیشنهاد می‌گردد فونت زیبای XB Zar را در سیستم خود نصب نموده و آن را با اندازه۱۸ فونت پیش‌فرض مرورگر فایرفاکس قرار بدهید.

نام‌گذاری فایلها

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

بسیار معقول است که نام فایلها به طریقی انتخاب شوند که بیانگر محتوای آن‌ها باشد. به عنوان نمونه اگر بخواهید دو فایل متنی از نام مشتریان متقاضی cd اوبونتو و opensuse تهیه کنید، نام ordersforcdubuntu و ordersforcdopensuse چندان جالب نیستند. شاید بخواهید برای تشخیص آن‌ها از یکدیگر به صورت orders/for-cd-ubuntu و orders/for-cd-opensuse نام‌گذاری نمایید. اما این کاراکتر / برای جداسازی نام فایلها و دایرکتوریها می‌باشد و استفاده از آن به این صورت، اشکال ایجاد می‌کند.

زیرا موقعی که می‌خواهید به آن در آدرس home/mah/orders/for-cd-ubunru/ رجوع کنید دستور شما صحیح عمل نخواهد کرد. چون شل گمان می‌کند که orders یک دایرکتوری داخل دایرکتوری mah می‌باشد. به همین علت کاربرد / در نام فایل مجاز نیست. اما کاراکتر خط تیره یا منها( minus ) در صورتی که در ابتدای نام فایل نباشد و در اطراف آن فاصله موجود نباشد، مجاز خواهد بود. اگر در ابتدای نام از علامت منها استفاده شود، وقتی نام فایل با فرمان‌های bash به کار برود، با پیغام خطا مواجه می‌گردد. زیرا پوسته آن را به عنوان یک گزینه تلقی می‌نماید، و گمان می‌کند می‌خواهید با آن گزینه فرمان را اجرا کنید. در نتیجه پیغام خطایی در ارتباط با عدم وجود آن گزینه صادر می‌کند.

چنانچه مایل باشید، می‌توانید از کاراکترفاصله در نام فایل استفاده کنید، اما باید به شل بگویید که این کاراکتر بخشی از نام فایل است. در غیر آن‌صورت با مشکل مواجه می‌شوید. چون شل کاراکتر فاصله را به عنوان جداکننده شناسه‌ها از یکدیگر در نظر می‌گیرد و اگر شما بخواهید فایل orders for cd ubuntu را با استفاده از فرمانی به کار بگیرید پوسته گمان می‌کند، از او می‌خواهید فرمان را با هر یک از شناسه‌های orders و for و cd و ubuntu به کار ببرد. و بنابراین حداقل آن خواهد بود که مقصود شما برآورده نمی‌شود. برای پرهیز از این امر، باید کاراکترهای ویژه‌، که معنی خاصی برای پوسته دارند را با کاراکتر گریز ( \ ) پوشش بدهیم. یا نام فایل را در نقل‌قول قرار دهیم که به این ترتیب کار خواهد کرد. اما همواره یک زحمت اضافه برای نقل‌قولی کردن نام فایل به همراه خواهد داشت. با کاراکترهای خاص وکاراکتر گریز و سایر مقولاتی که در این یادداشت به کار رفت به طور گسترده‌تر در راهنماهایی که در دست ترجمه است و به زودی لینک آن‌ها را به نوبت در اینجا قرار خواهم داد، آشنا خواهید شد.

استفاده عاقلانه از آزادی

کاربرانی که DOS را به یاد دارند، می‌دانند که در آن سیستم نام فایلها حداکثر ۸ کاراکتر به علاوه سه کاراکتر برای پسوند تعیین کننده نوع فایل می‌توانست باشد. در یونیکس و همچنین گنو-لینوکس طول نام یک فایل می‌تواند تا ۲۵۵ کاراکتر باشد. استفاده از ۲۵۵ کاراکتر برای نامیدن یک فایل می‌تواند توصیف دقیق و کامل و مناسبی از فایل را در خود داشته باشد. اما شیفته آن نشوید. در‌واقع ایده خوبی خواهد بود که نام فایل را کمتر از ۸۰ کاراکتر در نظر بگیریم. زیرا این معادل عرض معمول یک ترمینال است و نام یک فایل بهتر است بتواند در یک سطر قرار گیرد. البته این یک نظر مشورتی است، نه التزام. آزادی توصیف فایل با بیش از ۲۰۰ کاراکتر از آنِ شماست، اما عاقلانه از آن استفاده کنید.