آموزش linux Essentials - قسمت پنجم
در این قسمت آموزش، به معرفی شل میپردازیم و با دستورات و ساختار آنها آشنا میشویم.
حتی با وجود یک محیط کرافیکی قوی، شما بازهم به دلایلی به یک ترمینال نیازمند خواهید بود. توسط ترمینال میتوانید فرمانهای متنی را در پوسته (Shell) وارد کنید. اکثر محیط های گرافیکی برای باز کردن ترمینال راهکار های سادهای دارند. میتوانید از لیست برنامهها عبارت Terminal را جستوجو کنید و آنرا باز کنید. برخی ترمینال ها امکانات جالبی مانند سربرگ ها (Tabs) و ترمینال های گروهی را پشتیبانی میکنند. مانند Konsole. فعلاً به اطلاعات بیشتری نیاز نداریم.
چرا به پوسته (Shell) نیاز داریم؟
لینوکس برخلاف اغلب سیستم عامل های مدرن دیگر بر اساس ایده ی ورود دستورات توسط خط فرمان ساخته شده است. این برای برخی کمی نگران کننده و ترسناک به نظر میرسد، خصوصا اگر به سیستم عامل هایی مانند ویندوز عادت کرده باشند که بیش از بیست سال است که کاربرانشان را به استفاده از رابط گرافیکی ترغیب کرده اند. برای بسیاری از افراد که از ویندوز پا به دنیای لینوکس میگذارند، مقایسه ی ویندوز و لینوکس مانند یک شوک فرهنگی است، مثل اینکه فردی از قرن ۲۱ به زمان شاه آرتور برود، بدون موبایل و اینترنت، و با دندانپزشکانی هولناک.
اما اوضاع به این وخامت نیست. امروزه لینوکس – همانگونه که گفته شد – از محیط های گرافیکی بهره میبرد که با آنچه که ویندوز و OS X ارائه میدهند برابرند. همچنین خط فرمان و محی گرافیکی جدا نیستند، بلکه مکمل همدیگرند.
شل چیست؟
کاربران نمیتوانند مستقیماً باکرنل سیستم عامل ارتباط برقرار کنند. این کار تنها توسط برنامههایی انجام پذیر است که توسط «System Call” میتوانند به کرنل دسترسی داشته باشند. برای اجرای این برنامهها از شل استفاده میکنیم. شل یا همان پوسته، دستورات را از کیبرد میخواند و آنها را پردازش میکند. برای مثال این دستور میتواند اجرای یک برنامه باشد.
قدیمی ترین شل «Bourne Shell” نام دارد که اکنون به ندرت استفاده میشود، شل های دیگری نیز مانند C Shell و Korn Shell همچنان وجود دارند، اما شل استاندارد لینوکس، Bourne-Again Shell یا به اختصار bash نام دارد که بسیاری از قابلیت شل های گفته شده را در بر دارد.
دو راه معمول برای اجرای دستورات در شل، استفاده از ترمینال و شل اسکریپت است. شل اسکریپت فایلی حاوی دستورات شل است که یک به یک اجرا میشوند. شل ها برای اجرای دستور این فرآیند را طی میکنند:
۱.دستور را از ترمینال یا فایل میخوانند.
۲.آنرا اعتبار سنجی (validate) میکنند.
۳.دستور را مستقیماً اجرا میکنند یا برنامه ی مربوطه را اجرا میکنند.
۴.نتیجه را روی صفحه یا هر خروجی دیگر چاپ میکنند.
۵.دوباره به قدم ۱ میروند.
در کنار این فرآیند یا بهتر بگویم حلقه ی استاندارد، شل ها معمولاً قابلیتهای بیشتری هم دارند، مانند زبان برنامه نویسی. یعنی دستوراتی برای حلقه ها، جملات شرطی و … برای آنها تعریف شده است.
برای خاتمه دادن به شل، میتوانید دستور exit را در آن وارد کنید.
در این آموزش ما از bash استفاده میکنیم که روی اکثر توزیعهای لینوکسی هست و در آزمون های LPI هم از آن باید استفاده کنید.
فرمانها
چرا به فرمانها نیاز داریم؟
هر عملیاتی که یک رایانه انجام میدهد در سه مرحله خلاصه میشود:
۱.رایانه صبر میکند تا از کاربر دستور بگیرد.
۲.کاربر دستوری را توسط موس یا کیبرد به رایانه میدهد.
۳.رایانه آن دستور را اجرا میکند.
همانگونه که برای کار با محیط گرافیکی نیاز داریم تا دستورات گرافیکی مانند کلیک کردن، کشیدن و رها کردن و … را یاد داشته باشیم، برای زنده ماندن در دنیای شل نیز باید با دستورات آن آشنایی داشته باشیم. در لینوکس، شل یک اعلان نمایش میدهد، به این معنی که برای دریافت دستور آماده است. اعلان معمولاً از نام کاربری و نام رایانه، مسیر فعلی و یک کاراکتر در انتها تشکیل شده است. برای مثال در سیستم من به این شکل است:
ali-rnt@Ali-RNT-PC:/usr$
یعنی من با نام کاربری ali_rnt وارد سیستم شدهام و در مسیر /usr هستم.
ساختار دستورات
دستورات رشته ای از کاراکتر ها هستند که سینتکس (syntax) مشخصی دارند و با
فشردن Enter تمام شده و به شل ارسال میشوند. بسیاری از دستورات به زبان
انگلیسی اند یا از این زبان برگرفته شدهاند. وقتی شما دستوری را وارد
میکنید شل ابتدا آنرا به صورت کلمه به کلمه تقسیم میکند، کلمات، مانند آنچه
که در متون واقعی هم هست، با فاصله از هم جدا میشوند. معمولاً اولین کلمه،
همان دستوری است که میخواهیم اجرا شود و بقیه کلمات پارامتر های آن هستند
که اطلاعات بیشتری به شل میدهند.
نکتهای که باید به آن توجه کنید این است که شل میان حروف کوچک و بزرگ
تفاوت قائل میشود، و این برخلاف تجربه ایست که کاربران ویندوز و DOS داشته
اند. برای مثال دستور CD و cd و cD در شل با هم فرق دارند، در حالی که DOS
آنها را یکسان میبیند. در شل، تقریباً تمامی دستورات از حروف کوچک تشکیل
شده اند.
و یک نکته ی
دیگر، یک فاصله همان کاری را میکند که چندتا فاصله انجام میدهند. یعنی شل
برای جداسازی کلمات به تعداد فاصله هایی که بین آنها گذاشته اید توجه
نمیکند، همچنین با کاراکتر tab هم میتوانید کلمات را جدا کنید.
گاهی اوقات دستوری که مینویسید خیلی طولانی است و میخواهید آنرا در چند خط
بنویسید، برای اینکار، در انتهای هر خط یک / بگذارید و سپس اینتر را
بزنید.
پارامتر های ارسالی به یک فرمان دو دسته اند:
۱.آنهایی که با – شروع میشوند:
به این پارامتر ها گزینه (Option) میگویند.اینها معمولاً اختیاری هستند و
نیاز به وارد کردن آنها ندارید، مگر اینکه بخواهید فرمان عملیات را به
شکلی دیگر انجام دهد. در قسمت بعد که به معرفی فرمانها خواهیم پرداخت با
مثالهای زیاد وظایف آنها را خواهید فهمید.
۲.آرگومان ها:پارامتر هایی هستند که بدون – وارد میشوند و معمولاً نام فایل هستند که فرمان باید پردازش کند.
ساختار یک فرمان، در نهایت، به شکل زیر خلاصه میشود:
فرمان: کاری باید انجام شود؟
گزینه ها (Options): چگونه انجام شود؟
آرگومان ها: بر روی چه چیزی باید عملیات شود؟
انواع دستورات
در شل ها، دستورت به دو دسته تقسیم میشوند:
دستورات داخلی: دستوراتی که توسط خود شل فراهم شدهاند. Bash حدود ۳۰ دستور داخلی دارد که میتوانند خیلی سریع اجرا شوند (نسبت به نوع دوم دستورات).
دستورات خارجی:
این دستورات درواقع یک برنامه (فایل اجرایی) هستند. وقتی شما یک دستور
خارجی را وارد میکنید، شل درواقع فایل اجرایی آنرا که در مسیری از هارد
دیسک (معمولاً bin/ یا /usr/bin) وجود دارد را اجرا میکند.
برای تشخیص نوع دستور، آنرا به عنوان آرگومان به دستور type بفرستید.
هماکنون اینکار را انجام دهید. ترمینال را اجرا کنید و بنویسید:
type echo
این مثال به شما قسمتهای مختلف
یک فرمان را هم نشان میدهد. Type فرمانی است که باید اجرا شود، و echo هم
یک آرگومان است، یعنی آنچه که باید روی آن عملیات انجام شود. فرمان type یک
دستور را به عنوان آرگومان میگیرد و بررسی میکند که داخلی است یا خارجی.
پس از وارد کردن دستور بالا باید خروجی مانند این ببینید:
به آن معنی که echo یک فرمان داخلی است. اگر یک فرمان خارجی را بررسی کنید، مسیر فایل اجرایی آنرا به شما میگوید. مثلاً فرمان date :
خروجی اش به این صورت است:
دستور echo که بررسی کردید برای نمایش پیام و یک سری کارهای دیگر استفاده میشود. کافیست متنی که میخواهید را به عنوان آرگومان به آن بدهید:
$ echo Hello World!
Hello World!
و date هم تاریخ فعلی را نمایش میدهد:
$ date
Thu Apr 28 17:26:42 IRDT 2016
نکته: از این پس برای تشخیص فرمان وارد شده و خروجی آن در مثال ها، اول دستوراتی که وارد میشود یک $ قرار میدهیم. اما توجه کنید که شما نباید آن را وارد کنید.