ترمینال لینوکس و آنچه برای شروع به کار با آن باید بدانید
این آموزش، از جمله آموزشهای ابتدایی به حساب میآید که به توضیح نحوه شروع کار با ابزار ترمینال - یا همان خط دستور - در لینوکس و اجرای فرامین توسط آن میپردازد. گفتنی است که اگر شما یک فرد مبتدی در زمینهی کار با لینوکس محسوب میشوید، بهتر است شیوهی استفاده از ترمینال را به خوبی فرا بگیرید، زیرا ابزار مذکور دراصل راهکار استاندارد جهت تعامل با سرورهای لینوکسی است؛ هر چند که کاربردهای مهم دیگری نیز برای آن وجود دارد.
معمولاً افراد در شروع، تصور میکنند استفاده از خط فرمان امری پیچیده و سخت است؛ ولی اگر مبانی را در این زمینه به درستی فرا بگیرید، بسیار سریع مهارت شما رشد خواهد کرد و به راحتی قادر خواهید بود با ترمینال کار کنید.
برای اینکه بیشترین استفاده را از آموزشی ببرید که در ادامه آمده، باید یک سرور لینوکس در دسترس داشته باشید و به آن متصل شوید. ضمناً لازم است یادآور شویم که این راهنما بر اساس اوبونتو ۱۴.۰۴ تنظیم شده، ولی از قواعد کلی پیروی میکند که در تمامی توزیعهای لینوکس رعایت میشوند.
حال اجازه دهید بحث را با پرداختن به مبحث «شبیهساز ترمینال» (Terminal Emulator) شروع کنیم.
شبیهساز ترمینال
«شبیهساز ترمینال» برنامهای است که به شما اجازه میدهد از این ابزار در یک محیط گرافیکی استفاده کنید. استفاده از شبیهساز ترمینال، تقریباً یک ضرورت برای اکثر کاربران سرورهای لینوکسی است و در ادامه میتوانید تعدادی از شبیهسازهای کاربردیتر برای سیستمعاملهای گوناگون را مشاهده کنید:
- OS X: ترمینال(پیشفرض)، iTerm2
- ویندوز: PuTTY
- لینوکس: ترمینال، کنسول KDE و XTerm
هر شبیهساز ترمینال مجموعهای از قابلیتهای مختص به خود را دارد، اما تمامی مواردی که در بالا ذکر شدند به شدت کارا هستند و استفاده از آنها نیز به سادگی امکانپذیر است.
«Shell»
در یک سیستم تحت لینوکس، «شِل» (Shell) یک رابط خط فرمان محسوب میشود که به ترجمهی دستورات کاربر و فایلهای اسکریپت میپردازد و در اصل از این طریق به سیستمعامل سرور میگوید که بر اساس دستورات دریافتی چه کاری را باید انجام دهد. چندین نوع شل وجود دارد که به صورت گسترده از آنها استفاده میشود و از جملهی شاخصترین موارد، میتوان به (Bourne shell (sh و یا (C shell (csh اشاره کرد. هر شل فارغ از اینکه دستورات را چگونه ترجمه میکند، مجموعه قابلیتها و البته پیچیدگیهای خاص خودش را دارد، اما همگی آنها از ویژگیهای یکسانی مثل دریافت ورودیها و هدایت خروجیها، امکان کار با متغیرها و... بهرهمند هستند.
راهنمایی که در حال خواندن آن هستید بر مبنای «Bourne-Again shell» نوشته شده است، که عموماً از آن با نام «bash» یاد میشود و در اکثر توزیعهای لینوکس مثل اوبونتو، CentOS و ردهت به عنوان شل پیشفرض ارائه میگردد.
Command Prompt
معمولاً وقتی برای نخستین بار به سرور لاگین میکنید به شما از طریق «پیغام روز» - اصطلاحاً «MOTD» - خوشآمد گفته میشود. این پیغام اطلاعات گوناگونی مانند نسخه و توزیع لینوکسی که در حال اجرا روی سرور هستند را در خود جای داده است. بعد از پیغام روز، به «command prompt» یا «shell prompt» هدایت میشوید و میتوانید در آنجا دستورات موردنظر خود را صادر و اجرایشان کنید.
اطلاعاتی که در ابتدای command prompt ارائه میشوند، قابل سفارشیسازی توسط کاربر هستند. مثلاً به صورت پیشفرض در صفحهی خط دستور - یا همان command prompt - اوبونتو ۱۴.۰۴ چنین پیغامی را مشاهده میکنید:
sammy@webapp:~$
حال اجازه دهید ساختار پیغام ابتدایی صفحهی خط دستور را جز به جز مرور کنیم:
- sammy: به نام کاربری فردی اشاره دارد که مشغول استفاده از سرور است.
- webapp: نام سرور میزبان را ذکر میکند.
- ~: به دایرکتوری فعلی اشاره میکند؛ اگر بخواهیم موضوع را بشکافیم، باید بگوئیم در «bash» یا همان شل پیشفرض اوبونتو، این نشانه به معنای منتهی شدن خط دستور به دایرکتوری خانگی کاربری است، که مشغول استفاده از سرور است. مثلاً در دستور بالا اگر کاربر «sammy» باشد، علامت ~ به مسیر زیر اشاره میکند:
/home/sammy
در یک مثال دیگر، چنانچه به عنوان کاربر «روت» (Root) به دایرکتوری var/log/ ورود کنید، پیغامی مشابه آنچه در زیر آمده است را در صفحهی خط فرمان خواهید دید:
root@webapp:/var/log#
توجه کنید نشانهی # در انتهای خط دستور بالا، مختص زمانی است که در نقش کاربر روت از سیستم استفاده میکنید. گفتنی است در لینوکس، کاربر روت، در اصل یک اَبَر کاربر به حساب میآید که بالاترین سطح دسترسی را دارد و میتواند از تمامی ابزارها و امکانات مدیریتی سرور بهرهی کامل را بگیرد و هر دستوری را پیاده و اجرایی کند.
اجرا کردن دستورات
میتوانیم به دستوارت معینی نام یک فایل اجرایی، مانند یک اسکریپت یا یک برنامهی باینری را تخصیص دهیم و از این طریق نسبت به اجرا کردن آن اقدام کنیم. شایان ذکر است که تعداد زیادی از دستوارت استاندارد لینوکس و ابزارهای مرتبط به صورت پیشفرض توسط سیستمعامل نصب شدهاند و به شما اجازه میدهند که به پیمایش در فایل سیستم پرداخته، پکیجهای مختلف نرمافزاری را نصب کنید و یا در تنظیمات سیستم و همینطور اپلیکیشنها تغییرات دلخواه را اعمال کنید.
به یک دستور در حال اجرا، «فرآیند» گفته میشود. البته کمتر متخصصی را مشاهده خواهید کرد که از عبارت «فرآیند» استفاده کند و اصطلاح «پراسس» (process) بسیار رایجتر است. برای توضیح بهتر موضوع، باید اینطور بگوئیم که وقتی دستور در پیشزمینه توسط کاربر صادر میشود، او میبایست منتظر بماند تا فرآیند مربوط به آن صورت پذیرفته و خاتمه یابد، با خاتمه یافتن فرآیند نتیجهی حاصل در پنجرهی خط دستور نشان داده خواهد شد و در این نقطه فرد میتواند مجدداً یک دستور دیگر را صادر کند.
نکتهی بسیار مهم دیگری که حتماً باید آن را بدانید، این است که تقریباً در همهجای لینوکس بزرگ و کوچک بودن حروف اهمیت دارد؛ لذا در حین درج نام فایلها، دایرکتوریها، دستورات، آرگومانها و... در ترمینال، همواره باید به این مسئله توجه داشته باشید. اگر دستوری را صادر کردید و آنطور که انتظار داشتید عمل نکرد، بد نیست کوچکی و بزرگی حروف اجزای مختلف آن را کنترل کنید؛ در بسیاری از مواقع همین اشتباه ناچیز باعث دردسرهای بزرگ میشود.
در ادامه با چند مثال ساده، اصول اولیهای که برای صدور و اجرای دستورات باید بدانید را مرور خواهیم کرد.
فرمانهای فاقد «آرگومان» یا «آپشن»
اگر قصد اجرای یک دستور بدون هیچ «آرگومان» (Arguments) و «آپشنی» (Options) را دارید، کافیست فقط خود آن دستور را به شکل صحیح تایپ کرده و دکمهی Enter را فشار دهید. با اجرای دستور به این شیوه، پس از صدور آن و بر حسب نوع دستور، شاهد بازخوردهای متفاوتی خواهید بود. مثلاً اگر دستور «cd» را بدون هیچ آرگومانی اجرا کنید، به دایرکتوری خانگی نام کاربری خود باز خواهید گشت. این دستور برای رفتن از دایرکتوری فعلی به دایرکتوری دیگر است؛ به معنای «Change Directory» بوده و در اصل آرگومان آن دایرکتوری میشود که میخواهید به آن سوئیچ کنید.
به همین شکل، اگر دستور «ls» را بدون هیچ آرگومانی اجرا کنید، فهرستی از فایلها و فولدرهای دایرکتوری که در آن به سر میبرید را مشاهده خواهید کرد. درج دستور «ip» بدون هیچ آرگومانی، به شما نحوهی استفاده از این دستور را توضیح خواهد داد.
اکنون در ترمینال خود دستور ls را بدون هیچ آرگومانی و به شکلی که در زیر میبینید وارد کنید و نتیجه را بسنجید:
ls
فرمانهای دارای آرگومان
بسیاری از دستورات پذیرای آرگومانها و پارامترهای گوناگون هستند، و این موارد میتوانند بر عملکرد آنها اثرات مختلف و متفاوتی بگذارند. برای مثال، رایجترین شیوهی استفاده از دستور cd این است که به آن تنها یک آرگومان اختصاص دهید و همین آرگومان بیان میکند که به کدام دایرکتوری میخواهید بروید. به عنوان نمونه، چنانچه بخواهید با دستور مذکور به مسیر usr/bin/ بروید، باید آنچه در ادامه آمده را در ترمینال وارد نمایید.
cd /usr/bin
در بالا، cd دستور اصلی محسوب میشود و usr/bin/ که در ادامهاش آمده آرگومانش است. اکنون اگر دقت کنید، میبینید دایرکتوری که در آن به سر میبرید در پنجرهی ترمینال نیز به روز رسانی شده. ضمناً با استفاده از دستور ls میتوانید فایلها و دایرکتوریهای موجود در این دایرکتوری را ببینید.
فرمانهای دارای آپشن
اکثر فرمانها دارای گزینههای جانبی یا اصطلاحاً «آپشن» هستند، که معمولاً با عناوین «flags» و «switches» شناخته میشوند. این آپشنها عملکرد دستور را به شیوههای مختلفی اصلاح و ویرایش میکنند. ضمناً بد نیست بدانید که آپشنها در ادامهی یک دستور میآیند و از طریق علامت «-» که در ابتدای آنها قرار میگیرد شناسایی میشوند؛ برای فعال کردن هر آپشن، معمولاً یک حرف به صورت کوچک یا بزرگ در دستور به شیوهای که گفته شد درج میشود. لازم است بدانید که برخی از آپشنها با علامت «--» شروع میشوند و با یک یا چند کاراکتر ادامه مییابند.
حال برای درک بهتر موضوع به یک مثال ساده میپردازیم؛ اجازه بدهید به سراغ دستور ls برویم، این دستور دارای چندین آپشن است که آنها را در پائین توضیح دادهایم.
- l-: یک «فهرست طولانی» (long list) شامل اطلاعاتی مانند مجوزهای سطح دسترسی، مالکیت، حجم فایلها و تاریخ ایجادشان را در اختیار ما میگذارد.
- a-: فهرستی از تمامی فایلهای دایرکتوری، حتی آنهایی که مخفی هستند را ارائه میکند.
برای استفاده از (flag) «فِلَگ» l- به همراه دستور ls، این دستور باید به صورتی که در زیر آمده در ترمینال وارد شود:
ls -l
دقت کنید فهرستی که با دستور بالا در اختیار شما قرار میگیرد، شامل همان فایلهایی میشود که دستور ls برایتان لیست میکرد، اما تفاوت در اینجاست که اکنون جزئیات بیشتری را راجع به این فایلها مشاهده میکنید.
همانطور که قبلاً هم اشاره کردیم، آپشنها میتوانند با همدیگر در یک گروه قرار گیرند. برای مثال اگر میخواهید از هر دو آپشن l- و a- به صورت همزمان استفاده کنید، دستور ls به شکل زیر تایپ خواهد شد:
ls -la
توجه نمایید فهرستی که از دستور بالا به دست میآید، علاوه بر جزئیات بیشتر در مورد فایلها، آن دسته از فایلهایی که نامشان با «.» و «..» شروع شده و مخفی هستند را نیز در خود لیست کرده.
فرمانهای دارای آپشن و آرگومان
در هنگام اجرای یک دستور، آپشنها و آرگومانها میتوانند با یکدیگر ترکیب شوند. برای مثال، با استفاده از دستور ls به شکل زیر، میتوانید فارغ از اینکه در چه دایرکتوری به سر میبرید محتوای دایرکتوری home/ را ببینید.
ls -la /home
در خط بالا ls دستور اصلی است، la- آپشنها را شامل میشود و home/ آرگومانی است که میگوید فهرست باید از کدام دایرکتوری تهیه شود.
متغیرهای محیطی (Environment Variables)
«متغیرهای محیطی» (Environment Variables) مقادیر نامگذاری شدهای هستند که برای تغییر چگونگی اجرای فرمانها و پراسسها استفاده میشوند. وقتی برای اولین به یک سرور لاگین میکنید، چندین متغیر محیطی مطابق با «فایلهای پیکربندی» (configuration files) بهصورت پیشفرض تنظیم میشوند.
مشاهده تمام متغیرهای محیطی
برای مشاهده تمام متغیرهای محیطی که برای یک «terminal session» خاص تنظیم شدهاند، دستور «env» را تایپ کنید.
env
این دستور خروجیهای زیادی دارد، ولی در میان آنها PATH حائز اهمیتتر است.
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
متغیر محیطی PATH یک فهرست معین از دایرکتوریها را شامل میشود و معین میکند ترمینال پس از صدور یک دستور در کجا باید به دنبال اسکریپتها و برنامههای اجرایی باشد. برای مثال، دستور env در مسیر usr/bin/ واقع شده و میتوانیم آن را بدون آدرس دهی اجرا کنیم، زیرا مسیر آن با آنچه در متغیر محیطی PATH وجود دارد یکی است.
مشاهده مقدار یک متغیر
برای مشاهده مقدار یک متغیر، میبایست نام آن را به همراه پیشوند «$» درج کنیم. برای مثال، اگر بخواهیم مقدار متغییر PATH را ببینیم، از دستور «echo» استفاده کرده و در ادامه نام این متغیر را به همراه پیشوندی که ذکر شد مینویسیم.
echo $PATH
لازم است این نکته را نیز بدانید که اگر سعی کنید به یک متغیر محیطی که تنظیم نشده دسترسی پیدا کنید، ترمینال به شما یک خط خالی را باز میگردند و عملاً اتفاقی در آن رخ نمیدهد.
تنظیم کردن متغیرهای محیطی
حال که میدانید چطور میتوانید متغیرهای محیطی را چک کرده و مقادیر آنها را ببینید، لازم است نحوهی تنظیم کردن آنها را نیز فرا بگیرید. برای تنظیم یک متغیر محیطی، تنها کاری که باید انجام دهید، تایپ نام آن متغیر، سپس گذاشتن یک علامت «=» و در نهایت ذکر مقدارش است. به مثال زیر توجه کنید:
VAR=value
توجه کنید که اگر یک متغیر محیطی موجود را تنظیم کنید، مقدار جدیدی که ذکر کردهاید جایگزین مقدار پیشین آن میشود. ضمناً، اگر متغیر محیطی وجود نداشته باشد، سیستم ابتدا آن را ایجاد کرده و سپس مقدار مورد نظرتان را به آن تخصیص میدهد.
Bash از دستوری با نام «export» هم پشتیبانی به عمل میآورد. این دستور یک متغیر را استخراج کرده و امکان به ارث برده شدن آن، توسط زیر-پراسسها را میسر میسازد. شاید توضیح علمی این دستور آن هم به صورت متن قدری دشوار باشد بنابراین سعی میکنیم موضوع را با یک مثال باز کنیم.
مثلاً فرض کنید شما برنامهای را در مسیر opt/app/bin/ نصب کردهاید، حال میخواهید این مسیر را نیز به متغیر PATH بیافزائید. به این منظور از دستور زیر استفاده میکنیم.
export PATH=$PATH:/opt/app/bin
اکنون مسیر مورد نظر ما باید به متغیر PATH اضافه شده باشد، برای کنترل کردن این موضوع میتوانیم از دستوری که در ادامه آماده بهره بگیریم.
echo $PATH
- آموزش لینوکس مقدماتی – ساختار داخلی و ترمینال لینوکس
- آموزش نصب لینوکس توزیع اوبونتو
- آموزش بش اسکریپت در گنو/لینوکس
^^