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

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

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

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

التزام و انعطاف

سیستم‌های مبتنی بر یونیکس، و از جمله لینوکس، نسبت به حالت حروف( کوچک و بزرگ ) حساس هستند. یعنی فایلهای myfile و Myfile و myFile می‌توانند در یک دایرکتوری وجود داشته باشند، چون که از نظر لینوکس نامهای متفاوتی هستند.

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

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

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

چیزهایی که باید بدانید

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

در یک سیستم یونیکسی هر چیزی یک فایل است. ممکن است به نظر واضح باشد، البته که یک سند متنی یک فایل است، یا یک تصویر یا فایل صوتی هم همین‌طور. اما یک دایرکتوری چه؟ آن هم یک فایل است که محتوی اطلاعاتی در مورد سایر فایلهاست.دیسک‌ها هم در لینوکس فایل هستند. برای درک اهمیت مطلب نقل‌قولی در اینجا لازم است. « به تجربه دریافته‌ایم که کاربر مبتدی در زمینه کامپیوتر، ایده پرونده و معنای آن را به سادگی و وضوح فردی خبره در کامپیوتر نمی‌فهمد. همچنین دریافته‌ایم که بعضی کاربران کهنه کار کامپیوتر نیز آن‌طوری هم که فکر می‌کنند آگاهی چندانی در باره پرونده‌ها ندارند. به‌خصوص وقتی که بحث مبانی پرونده‌ها در یونیکس پیش می‌آید. در نهایت نیز پی برده‌ایم که خود ما هم آن قدری که فکر می‌کنیم در باره پرونده‌ها نمی‌دانیم و موردی به سادگی مجوزها بیش از اندازه موجب به خطا رفتنمان می‌گردد(نقل از صفحه ۴۷ ویرایش سوم کتاب خودآموز استفاده از Unix اثر کوین ریچارد-اریک جانسون ترجمه آقای محمدرضا آیت‌اله‌زاده شیرازی- انتشارات چرتکه که توسط کانون نشر علوم در سال ۷۴ چاپ گردیده است.)

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

«لینکلن گفت ' حکومت باید مال مردم، توسط مردم، برای مردم' باشد، تامپسون و ریچی یونیکس را طوری طراحی کردند که ' مال فایلها، توسط فایلها، و برای فایلها' باشد.هر چه در دنیای یونیکس انجام می‌دهید از طریق فایلها صورت می‌گیرد( نقل از صفحه ۸۵ کتاب خودآموز sco unix اثر تام کاتبرتسون ترجمه مری شاخو – ناشر کانون نشر علوم سال ۷۱) فایلها، دایرکتوری‌ها، دیسک‌ها، صفحه نمایش، صفحه‌کلید، چاپگر، وغیره همه در سیستم‌های یونیکسی ازجمله در لینوکس فایل می‌باشند.

کدام shell؟

تعداد بسیاری پوسته متنی یونیکسی موجود است. اما تمام آن‌ها را می‌توان به دو گروه اصلی تقسیم نمود. گروه اول با گرایش به Bourne shell یا sh ، و گروه دیگر با گرایش C shell یا csh می‌باشد.

در روزهای اولیه یونیکس، در آزمایشگاه‌های تحقیقاتی بل AT&T توسط Steve Bourne پوسته‌ای نوشته شد که در هفتمین نسخه یونیکس آن‌ها به طور رسمی ظاهر گردید. این پوسته ساده و قدرتمندی برای یونیکس بود که با استفاده از حروف اول نام خالق آن sh نامیده شد. که احتمالاً هنوز در سیستم شما با همین نام sh در دایرکتوری bin واقع در ریشه موجود است.

مؤسسه نرم‌افزارهای آزاد(FSF) پیاده‌سازی مجدد منبع باز پوسته بورن به نام bash را ارائه نمود، که البته خیلی بیش از یک بازتولید می‌باشد. Bash یک پوسته فعل و انفعالی و به طور شگفت‌آوری قدرتمند و انعطاف‌پذیر است، که دارای محیط اسکریپت‌نویسی قوی و نیرومند می‌باشد.

سر گروه دسته دیگر پوسته‌ها C shell است، که مهمترین نوآوری دانشکده برکلی دانشگاه کالیفرنیا در قلمرو اسکریپت‌نویسی می‌باشد. در این پوسته گرامر خاص شل بورن به یک ترکیب همانندتری با زبان برنامه‌نویسی C تبدیل گردیده است.

پوسته‌های دیگری همچون tch و zsh و غیره نیز موجود هستند که شاید بعد از اُنس گرفتن با bash ، آن گزینه‌ها را هم بررسی کنید، اما دانش در مورد bash در دنیای گنو-لینوکس ضروری است.

شل یا پوسته چیست؟

وقتی ما با سیستم کار می‌کنیم، رویدادهای چند لایه‌ای رخ می‌دهد که ما به عنوان کاربر فقط بالاترین لایه یعنی پوسته را ملاحظه می‌کنیم.

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

رابط‌های کاربری به دو گروه عمده تقسیم می‌گردند.

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

گروه دیگر رابط‌های کاربری مبتنی بر کاراکتر هستند و دستورات متنی که توسط کاربر تایپ می‌گردنند را می‌پذیرند.

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


رابط متنی یکی از مهمترین ویژگی‌های کلیدی لینوکس است. اگر شما یک کاربر توانای لینوکس رومیزی باشید احتمالاً همواره یک ترمینال باز خواهید داشت و اگر کاربر مبتدی لینوکس هستید، شاید گمان کنید که هرگز از shell استفاده نمی‌کنید، اما شما نیز همین‌طور که بیشتر از لینوکس استفاده می‌کنید بیشتر خواهید خواست که از پوسته استفاده کنید.

اگر شما می‌خواهید کاربر ماهر لینوکس شوید، باید در خط‌فرمان آن مهارت لازم را کسب نمایید. زیرا shell از بسیاری جهات قدرت و ظرافت کلیدی لینوکس است. کارهایی را با خط فرمان می‌توانید انجام دهید که با هیچ رابط GUI نمی‌توانید به سادگی انجام دهید، مهم نیست که kde یا gnome یا سایر رابط‌های کاربری گرافیکی چقدر قدرتمند باشند، شما همواره با یک ترمینال کارها را سریعتر و به طور مؤثرتر انجام خواهید داد.

یک نگاه کلی

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

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

در یک سیستم گنو- لینوکس چهار بخش اصلی وجود دارد.

۱- کرنل لینوکس

۲- ابزارهای گنو

۳- محیط رومیزی گرافیکی

۴- نر‌م‌افزارهای کاربردی

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

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

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

  • ابزارهای مدیریت فایل

  • ابزارهای دستکاری و پردازش متن

  • ابزارهای مدیریت فرآیندها

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

یکی از مهم‌ترین ابزارهای پروژه گنو، پوسته گنو یا Bash می‌باشد.