بخش اول: یادگیری پوسته

فصل ۱: مفاهیم بنیادین پوسته (Shell)

زمان مطالعه: ۱۲ دقیقه فصل ۱ از ۳۶ بخش اول

هنگامی که از «خط فرمان» سخن می‌گوییم، در واقع به پوسته یا همان Shell اشاره داریم. پوسته یک برنامه‌ی واسط و مفسر است که دستورات متنی واردشده توسط کاربر را از طریق صفحه‌کلید دریافت کرده و آن‌ها را جهت اجرا به سیستم‌عامل ارجاع می‌دهد. تقریباً تمامی توزیع‌های لینوکس به‌صورت پیش‌فرض از پوسته‌ای متعلق به پروژه‌ی گنو تحت عنوان bash بهره می‌برند. واژه‌ی bash سرنام عبارت Bourne Again SHell است که به جایگزینیِ تکامل‌یافته برای sh (پوسته‌ی اصلی و کلاسیک یونیکس که توسط «استیو بورن» توسعه یافته بود) اشاره دارد.

شبیه‌سازهای ترمینال (Terminal Emulators)

در محیط‌های مبتنی بر رابط کاربری گرافیکی (GUI)، برای تعامل با پوسته به نرم‌افزاری به نام شبیه‌ساز ترمینال نیاز داریم. با جست‌وجو در منوی برنامه‌های دسکتاپ خود، قطعاً یکی از این ابزارها را خواهید یافت. به‌طور معمول، محیط دسکتاپ KDE از konsole و محیط GNOME از gnome-terminal استفاده می‌کنند، هرچند ممکن است در فهرست برنامه‌ها صرفاً با عنوان عمومی «Terminal» نمایش داده شوند. شبیه‌سازهای ترمینال متعددی برای لینوکس وجود دارند، اما همگی یک هدف مشترک را دنبال می‌کنند: فراهم‌سازی بستری برای دسترسی به پوسته. انتخاب میان آن‌ها غالباً بر اساس ترجیحات شخصی و قابلیت‌های جانبی هر کدام صورت می‌گیرد.

تعامل با خط فرمان

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

[me@linuxbox ~]$

این خط به عنوان اعلان خط فرمان (Shell Prompt) شناخته می‌شود و هر زمان که سیستم آماده‌ی دریافت دستور جدید باشد، ظاهر می‌گردد. ساختار دقیق این اعلان ممکن است بسته به نوع توزیع لینوکس متفاوت باشد، اما به‌طور معمول شامل نام کاربری، نام رایانه (که با کاراکتر @ از هم جدا شده‌اند)، دایرکتوری کاری فعلی (که در فصول آتی به تفصیل بررسی می‌شود) و در نهایت کاراکتر $ است.

نکته: چنانچه آخرین کاراکتر اعلان شما به جای علامت دلار ($)، علامت هش (#) باشد، بدین معناست که نشست (Session) فعلی دارای سطح دسترسی ابرکاربر (Superuser) است. این وضعیت نشان می‌دهد که شما یا با حساب کاربری root وارد شده‌اید و یا ترمینال را با امتیازات مدیریتی اجرا کرده‌اید.

با فرض صحت تنظیمات، چند کاراکتر تصادفی را مشابه نمونه‌ی زیر در مقابل اعلان وارد کنید:

[me@linuxbox ~]$ kaekfjaeifj

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

bash: kaekfjaeifj: command not found
[me@linuxbox ~]$

تاریخچه دستورات

چنانچه کلید جهت‌نمای رو به بالا (Up Arrow) را فشار دهید، مشاهده خواهید کرد که دستور پیشین، یعنی kaekfjaeifj مجدداً در مقابل اعلان ظاهر می‌شود. این قابلیت تحت عنوان تاریخچه‌ی دستورات شناخته می‌شود. در اکثر توزیع‌های مدرن لینوکس، به‌صورت پیش‌فرض ۱۰۰۰ دستور اخیر در حافظه ذخیره می‌گردند. همچنین با فشردن کلید جهت‌نمای رو به پایین (Down Arrow)، می‌توانید میان دستورات پیمایش کرده یا دستور فراخوانی‌شده را از خط فعلی حذف کنید.

پیمایش مکان‌نما

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

مدیریت تمرکز (Focus) و تعامل با ماوس

هرچند پوسته ماهیتی مبتنی بر صفحه‌کلید دارد، اما در شبیه‌ساز ترمینال امکان بهره‌گیری از ماوس نیز فراهم است. در سیستم پنجره‌بندی X Window System (یکی از زیرساخت‌های گرافیکی توزیع‌های لینوکس)، مکانیزمی کارآمد برای عملیات کپی و درج سریع (Copy/Paste) تعبیه شده است؛ بدین صورت که با هایلایت کردن متن توسط دکمه سمت چپ ماوس، محتوا به‌طور خودکار در بافر (Buffer) ذخیره شده و با فشردن دکمه میانی (یا چرخک ماوس)، در محل مکان‌نما درج می‌گردد.

نکته: در محیط ترمینال، از ترکیب کلیدهای Ctrl+C و Ctrl+V برای کپی و پیست استفاده نکنید. این میان‌برها در پوسته مفاهیم عملیاتی متفاوتی دارند که دهه‌ها پیش از ظهور سیستم‌عامل ویندوز تعریف شده‌اند (به‌عنوان مثال، Ctrl+C برای توقف اجرای فرآیند جاری به کار می‌رود).

محیط‌های دسکتاپ مدرن (مانند GNOME یا KDE) جهت انطباق با تجربه کاربری ویندوز، به‌صورت پیش‌فرض از سیاست Click to Focus استفاده می‌کنند؛ یعنی برای فعال‌سازی یک پنجره حتماً باید روی آن کلیک کنید. این رفتار با رویکرد سنتی دنیای یونیکس تحت عنوان Focus Follows Mouse متفاوت است. در حالت سنتی، صرفاً با قرار گرفتن نشانگر ماوس بر روی یک پنجره، آن پنجره آماده دریافت ورودی می‌شود، بدون آنکه لزوماً به بالاترین لایه (پیش‌زمینه) منتقل شود.

تنظیم سیاست مدیریت تمرکز بر روی حالت «تمرکز به دنبال ماوس»، کارایی تکنیک کپی و درج سریع را دوچندان می‌کند. پیشنهاد می‌شود در صورت پشتیبانی محیط دسکتاپتان، این قابلیت را در تنظیمات مدیر پنجره (Window Manager) خود آزموده و مدتی با آن فعالیت کنید؛ بسیاری از کاربران حرفه‌ای این رویکرد را بسیار بهره‌ورتر می‌دانند.

اجرای دستورات مقدماتی

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

ابتدا با دستور date شروع می‌کنیم که زمان و تاریخ دقیق سیستم را گزارش می‌دهد:

[me@linuxbox ~]$ date
Thu Mar 8 15:09:41 EST 2025

دستور کاربردی دیگر uptime نام دارد؛ این ابزار مدت‌زمان سپری‌شده از آخرین راه‌اندازی سیستم (Boot)، تعداد کاربران فعال و میانگین بار سیستم (Load Average) را در بازه‌های زمانی مختلف نمایش می‌دهد:

[me@linuxbox ~]$ uptime
15:12:22 up 3 days, 23:40, 7 users, load average: 0.37, 0.37, 0.64

جهت پایش وضعیت فضای ذخیره‌سازی و مشاهده‌ی ظرفیت آزاد پارتیشن‌های سیستم، دستور df (مخفف disk free) را وارد کنید:

[me@linuxbox ~]$ df
Filesystem     1K-blocks      Used  Available Use% Mounted on
/dev/sda2       15115452   5012392    9949716  34% /
/dev/sda5       59631908  26545424   30008432  47% /home
/dev/sda1         147764     17370     122765  13% /boot
tmpfs             256856         0     256856   0% /dev/shm

به همین ترتیب، برای بررسی وضعیت حافظه‌ی اصلی (RAM) و مقدار حافظه‌ی آزاد، دستور free را اجرا نمایید:

[me@linuxbox ~]$ free
        total        used        free      shared  buffers       cached
Mem:   513712      503976        9736           0     5312       122916
-/+ buffers/cache: 375748      137964
Swap: 1052248       10472      947536

خاتمه نشست ترمینال

شما می‌توانید به سه روش مختلف به فعالیت خود در محیط ترمینال خاتمه داده و نشست جاری را ببندید:

  1. بستن پنجره‌ی شبیه‌ساز ترمینال از طریق رابط گرافیکی.
  2. تایپ و اجرای دستور exit در خط فرمان.
  3. استفاده از میان‌بر صفحه‌کلید Ctrl+D (این کاراکتر در دنیای یونیکس به معنای پایان فایل یا End-of-File است و به پوسته اعلام می‌کند که ورودی دیگری وجود ندارد).
[me@linuxbox ~]$ exit

کنسول‌های مجازی (Virtual Terminals)

حتی زمانی که هیچ شبیه‌ساز ترمینالی در محیط دسکتاپ باز نیست، چندین نشست متنی در لایه‌های زیرین سیستم‌عامل به‌صورت فعال در دسترس هستند. در اغلب توزیع‌های لینوکس، می‌توانید با استفاده از ترکیب کلیدهای Ctrl+Alt+F1 تا Ctrl+Alt+F6 به این نشست‌ها که ترمینال‌های مجازی (Virtual Terminals) یا کنسول‌های مجازی نامیده می‌شوند، دسترسی پیدا کنید.

هنگام ورود به یک کنسول مجازی، یک محیط ورود (Login) متنی ظاهر می‌شود که از شما نام کاربری و رمز عبور می‌خواهد. پس از ورود، برای جابه‌جایی میان این کنسول‌ها، صرفاً استفاده از کلیدهای Alt+F1 تا Alt+F6 کافی است. در اکثر سیستم‌های مدرن، برای بازگشت به رابط کاربری گرافیکی (GUI)، معمولاً از کلید Alt+F7 (یا در برخی موارد Alt+F1 یا Alt+F2) استفاده می‌شود.

جمع‌بندی

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

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

منابع مطالعه تکمیلی

جهت آشنایی بیشتر با استیو بورن (Steve Bourne)، خالق پوسته بورن (Bourne shell)، می‌توانید به مقاله زیر در ویکی‌پدیا مراجعه کنید:

مقاله زیر در ویکی‌پدیا به معرفی برایان فاکس (Brian Fox)، توسعه‌دهنده و برنامه‌نویس اصلی پوسته Bash اختصاص یافته است:

همچنین، برای درک عمیق‌تر مفهوم پوسته (Shell) در علوم رایانه، مطالعه مقاله زیر پیشنهاد می‌شود: