قبلا در خصوص تفاوت بین Kernel و Operating System صحبت کرده ایم اما بد نیست کمی در خصوص تفاوت بین Shell و Kernel نیز صحبت کنیم که برخی اوقات با هم اشتباه گرفته می شوند. Kernel یا هسته در واقع مرکز مدیریت یک سیستم عامل است که تمامی فرامین برای اجرا شدن از طریق این مرکز مدیریت صادر می شوند.
تمامی اجزای سیستم عامل وابسته به این Kernel است. Kernel بصورت لایه بندی شده کار می کند و هر چقدر به درون این لایه بیشتر وارد شویم به منابع و دسترسی های بیشتری دسترسی پیدا خواهیم کرد اما نکته اینجاست که این لایه ها یا پوسته ها را ما به عنوان Shell یا پوسته می شناسیم.
Shell ها در واقع رابط کاربری ما برای دستور دادن به Kernel سیستم عامل هستند و شما از طریق این رابط ها می توانید با سیستم عامل ارتباط برقرار کنید. واژه های Kernel و Shell را ممکن است بیشتر در سیستم عامل های لینوکس و UNIX شنیده باشید اما توجه کنید که حتی سیستم عامل ویندوز هم برای خودش یک یا حتی چند نوع Shell دارد که می تواند از این طریق دسترسی ما به Kernel را فراهم کند.
در واقع می توان از Shell به عنوان یک مترجم نام برد که دستورات کاربر را دریافت می کند و آنها را به زبان Kernel ترجمه می کند تا Kernel آنها را اجرا کند. Shell یک نوع برنامه است که در حالت Unprivileged یا دسترسی محدود اجرا می شود و دستوراتی که از جانب کاربر دریافت می کند را به حالت Privileged یا دسترسی بالا منتقل می کند که Kernel در اینجا قرار دارد و دستورات شما در این قسمت اجرا می شوند.
اما چه اتفاقی می افتد اگر شما یک سیستم عامل داشته باشید که دارای Kernel باشد اما Shell نداشته باشد ؟ پاسخ ساده است ، در چنین حالتی شما یک سیستم عامل دارید که فقط و فقط می تواند کارهایی که از پیش برایش تعریف شده اند را انجام دهد و به هیچ عنوان نمی تواند درخواست های کاربران را پاسخ دهد زیرا رابط کاربری یا Shell ای وجود ندارد که بتواند با Kernel ارتباط برقرار کند.
این دقیقا مثل این است که بگوییم شما ویندوز را نصب کرده اید اما هیچ محیطی برای ارتباط با Kernel از لحاظ گرافیکی و خط فرمانی ندارید. حالا فکر کنید آیا ممکن است شما فقط Shell داشته باشید اما Kernel نداشته باشید ؟ پاسخ این سئوال مشخص است ... چنین چیزی امکان ندارد ، در واقع Shell محیطی است که خود Kernel برای برقراری ارتباط با ما در اختیارمان قرار می دهد و نبود Kernel به معنی نبود Shell نیز هست
درسته، من خودمم پارسال درباره مباحث لینوکس LPIC1 می خوندم ولی هر کلمه ای که می خوندم رو کلی دربارش تحقیق می کردم که خوب بعد یک سال هم توی این مبحث به جایی نرسیدم و خیلی گیج شده بودم.
درسته، بیشتر باید مباحث رو درک کرد و در حد حرفه و نیاز خودت وارد جزئیات اونا بشی چون تکنولوژی و مباحث اون خیلی خیلی زیاد هست و اگه بخوای روی هر کلمه ای عمیق بشی، فقط باعث میشه بیشتر گیج بشی و از هدف خودتم دور بشی.
خیلی ممنونم آقای نصیری بابت یاد آوری این نکته و حتما ازش در مسیر یادگیری خودم استفاده می کنم
مهیار عزیز ، یه پیشنهاد بهت می کنم جسارتا ، برای یادگیری بهتر در آینده هست ، یه دانشجویی داشتم میومد سر کلاس ، میگفتم پرینتر رو اینجوری به اشتراک میزاریم ، راست کلیک فلان فلان فلان ... بعد سوالش این میشد !!! خوب وقتی من اینکار رو می کنم چه دستوری سیستم عامل به پرینتر در چه لایه ای میده که باعث میشه کاربر و فایروال با هم بتونن ارتباط بگیرن !!!
ببینید من توسعه دهنده نرم افزار نیستم ، من یک کاربر یا User سیستم عامل هستم و اصلا به من ارتباطی نداره در سطح سیستم عامل چه اتفاقاتی می یوفته ، من باید برای ارائه سرویس این دکمه رو بزنم و میزنم ، زیاد بخام وارد بحث سیستمش بشم از خیلی چیزهایی که باید یاد بگیرم غافل میشم مگر اینکه کلا بخام برم تو بحث برنامه نویسی سیستم عامل و اصلا اون موقع نه این دوره نیازم هست و نه این کتابها ... کتاب و دوره و تخصص خاص خودش هست ...
شما و من وظیفمون استفاده درست از سیستم عامل جهت ارائه سرویس هست ... وقتی درگیر تعاریف ریز و درشتی میشیم که هیچ ارتباطی به اصل ماجرا و کمکی به ما در ارائه خدمات نمی کنن ... فقط وقت هدر دادیم ... تعریف شل با سواد بنده این هست که نتیجه جستجو هست ... حالا بین علما ممکنه اختلاف باشه که هر چیزی که رابط کاربر بود شل هست یا نیست ! واقعا مهمه ؟ از نظر من هست ... حالا یکی دیگه میاد میگه نیست ! یکی میگه اگر دستوری بود شل هست اگر دستوری نبود شل نیست و ... بحث الکی طولانی میشه ...
حالا این وسط اونی که کارش این هست داره رو راه اندازی سرویس کلاود کار می کنه و به من و تویی که درگیر نوک سوزن شدیم داره پوزخند میزنه که اینا درگیر چی شدن ... دنیا یادگیری خدمات باش نه تعاریف ... ازت تو بازار کار اینو میخان ... اگر دنبال کار نیستی بحث دیگه ای هست ...
یادمه یه روز تمام با یه دانشجوی نتورک پلاس درگیر این بودیم که کاربرد MAC Address چیه و چرا ازش استفاده می کنیم ، بعد از صدجور بحث اومد تز داد چرا خوب ما خودمون نمیایم یه آدرس طراحی کنیم به سیستم بدیم و بعد به جاش ال کنیم بل کنیم و .. مگه نمیشه؟ یعنی در این حد ... بهش گفتم بشین طراحی کن اوکیه .. الان سالهاست که درگیر همین مسائل هست و هیچ جا بهش کار ندادن و نمیدن چون وارد چیزی میشه که هیچکس بهش نیازی نداره ... امیدوارم منظور رو گرفته باشی
گفتین که کرنل ها بصورت لایه بندی هستند که این لایه ها رو به عنوان شل می شناسیم و شل ها رابط کاربری ما برای دستور دادن به کرنل هستند و از طریق این رابط ها می تونیم با سیستم عامل ارتباط برقرار کنیم.
یکی از این شل ها، انواع مختلفی از ترمینال ها در سیستم عامل های لینوکسی هستند که دستورات ما رو برای کرنل ترجمه و ارسال می کنند.
چه چیزهای دیگه ای به عنوان شل شناخته میشه ؟
آیا محیط گرافیکی ما هم نوعی شل محسوب میشه که می تونیم با کلیک کردن، دستورات مختلفی رو به کرنل ارسال کنیم ؟
خیر ، ماوس و کیبورد دستگاه های ورودی ما هستند ... Input Devices ...
سلام، گفتین شل ها رابط کاربری ما برای دستور دادن به کرنل هست و کرنل دارای شل های مختلفی نیز هست.
ماوس و کیبوردی که به سیستم عامل دستوراتمون رو ارسال می کنیم، نوعی شل برای ارسال داده ها به کرنل هستند ؟