تفاوت exit و logout در لینوکس

استاندارد
bash_command_line

در این مطلب میخواهیم درباره تفاوت بین دستورات logout و exit برای شما عزیزان صحبت کنیم. logout یک دستور Internal یا بعبارتی Internal Command است.

دستورات Internal و External

دستورات داخلی یا Internal Commands در لینوکس و نیز سیستم عامل های خانواده Unix به دستوراتی گفته می شود که بصورت Built-in داخل Shell قرار دارند و به آنها معمولا Built-in Commands نیز می گویند. سرعت اجرای این دستورات به همان اندازه است که Shell به دنبال اجرای دستوراتی که داخل متغیر محیطی PATH تعریف شده اند می باشد. دستوراتی مثل cd ، fg ، alias ، echo ، export ، history و … از جمله Internal Command ها می باشند. توجه کنید که برخی از Internal Command ها نیز برای اجرا شدن باید توسط Shell از طریق PATH ابتدا فراخوانده شوند.

دستورات خارجی یا External Commands به دستوراتی اطلاق می شود که داخل Shell بصورت Built-in تعریف نشده اند. این نوع دستورات برای اجرا شدن باید داخل متغیر محیطی PATH تعریف شوند. زمانی که این دستورات میخواهند اجرا شوند Shell باید به متغیر محیطی PATH مراجعه کند و مسیری که دستور مربوطه در آن قرار دارد را بخواند و دستور را اجرا کند که این خود یک Process جدید اجرا می کند. External Command ها معمولا در شاخه bin// و یا usr//bin// قرار دارند. دستوراتی مثل ls ، cat ، grep ، cp ، mv و … از جمله دستورات External می باشند. برای اینکه بدانید یک دستور Internal هست یا External کافیست تا دستور type را به همراه نام دستور در مقابل آن تایپ کنید

# type cat

cat is /bin/cat

همانطور که مشاهده می کنید خروجی دستور type cat به ما می گوید که دستور cat در مسیر bin//cat// واقع شده است. که نشان دهنده این است که این دستور External است. یا برای مثالی دیگر :

# type history

history is a shell builtin

همانطور که در خروجی دستور type history مشاهده می کنید پیغام history is a shell builtin به ما نشان داده می شود که بیانگر این است که دستور history یک دستور Internal یا Shell Built-in Command است. حتی خود دستور type نیز Internal Command هست. به یک نکته مهم توجه کنید که برخی از دستورات مانند pwd که در خروجی مسیر جاری که در آن هستید را نشان می دهد هم می تواند یک Internal Command و هم External Command می باشد.

# type -a pwd

pwd is a shell builtin

pwd is /bin/pwd

همانطور که در خروجی دستور فوق مشاهده کردید دستور pwd هم یک دستور Internal و هم یک دستور External می باشد. نکته آخر این هست که زمانیکه External Command علاوه بر Internal Command روی سیستم نصب می شود Internal Command در اجرا شدن بر External Command تقدم و اولویت دارد. دلیل آن هم کاملا واضح است چون Internal Command هم راحت تر و هم می توان گفت به صورت نامحسوسی با سرعت بیشتر اجرا می شود. برای اجرا کردن External Command ای که Internal Command آن نیز در سیستم وجود دارد بایستی مسیر دقیق یا Exact Path آن دستور را در Shell مشخص کنید. امیدوارم مورد توجه شما قرار گرفته باشد.

خوب حالا برگردیم سر اصل قضیه

فرق بین exit و logout

دستور logout برای بستن Login Shell کاربرد دارد. یعنی زمانی که به یک سرور لینوکسی SSH میزنید و با یک Terminal واقعی کار می کنید ( نه Terminal Emulator یا Virtual Terminal Console ) میتوانید با استفاده از دستور logout از Session ای که با یک کاربر زدید خارج شوید. همچنین زمانی که بصورت کنسولی ( یعنی زمانیکه پای سرور نشسته باشید ) به سرور لینوکسی تان لاگین کنید و دستور logout را اجرا کنید به معنای واقعی از سرور Logout می شوید ( مثل Logout شدن از یک سیستم ویندوزی ) و برای استفاده از سرور طبیعتا باید به آن لاگین کنید.

دستور exit نیز مانند دستور logout یک Internal Command است با این تفاوت که دستور exit کاری که می کند این است که Interactive Shell ها را Terminate می کند. برای مثال اگر در لینوکس خود یک ترمینال ( Terminal Emulator ) باز کردید و تایپ کردید bash یک Process جداگانه با نام bash و طبیعتا با یک PID جدید ایجاد می شود و برای اینکه این Shell را ببندید میتوانید دستور exit را تایپ کنید.

زمانی که exit را اجرا کردید پنجره ترمینال بسته نمی شود بلکه Process آن Shell ای که با دستور bash اجرا کردید خاتمه داده یا Terminate می شود. حالا اگر مجددا دستور exit را اجرا کنید پنجره Terminal Emulator بسته خواهد شد. اگر بیشتر بخواهیم این مورد را بسط دهیم میتوانیم بگوییم که برای مثال زمانیکه با کلید های ترکیبی CTL+ALT+F1 یک پنجره Console TTY جدید ( یا یک Interactive Shell جدید ) در یک تب جدید باز می کنید و دستور exit را میزنید این پنجره ترمینال بسته خواهد شد. امیدوارم تفاوت بین این دو دستور را بخوبی درک کرده باشید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *