دستور های لینوکسی (یونیکسی) به دو دسته کلی دستور های Internal و External تقسیم می شوند. دستور های Internal یا Build-in Commands آن دسته از دستور هایی هستند که توسط خود Shell و از درون آن اجرا می شوند. این دستور ها مستقیمن توسط خود شِل اجرا می شوند و در مسیر دایرکتوری های درون متغیر PATH$ وجود ندارند. بر خلاف دستور های Internal که مستقیم توسط خود شِل اجرا می شوند، دستور های External باید توسط شِل در حافظه بارگذاری شده و سپس اجرا شوند. دستور های External در مسیر های متغیر PATH$ وجود دارند.بطور مثال دستور های cd و pwd از نوع دستور های Internal و دستور های date و less از دستور های External هستند. تفاوت دیگر دستور های Internal با دستور های External در این است که Internal Command ها بدون Manual Page هستند و اجرا دستور زیر، برای هر کدام از آنها تنها یک صفحه را نشان می دهد.
man BUILD-IN COMMAND NAME
می توان از شکل زیر برای خواندن راهنما (Help) دستور های Build-in استفاده کرد.
help BUILD-IN COMMAND NAME
برای تعیین نوع یک دستور، از دستور type که خود نیز دستوری Internal است استفاده می کنیم. به هر حال خروجی این دستور یکی از انواع زیر است :
- خروجی می تواند یک Alias یا نام مستعار باشد. برای مشاهده تمامی Alias های تعریف شده در سیستم از دستور alias استفاده کنید.
- خروجی Function یا تابع است.
- خروجی دستوری Internal یا Build-in است.
- خروجی دستوری External است که در مسیر های متغیر PATH$ وجود دارد.
- کلمات کلید مانند if و for که Keyword گویند.
با دستور زیر می توانید راهنمای دستور type که از نوع Internal است را بخوانید.
help type
دستور های External بصورت فایلی درون دیسک قرار دارند و مسیرشان باید در متغیر PATH$ وجود داشته باشد.اما چگونه فهرستی از دستور های Build-in یا Internal را ببنیم؟ یک راه، فهمیدن از خروجی دستور type است که عبارت Build-in نشان داده می شود. روش دیگر این است که هرگاه دستور های Build-in را پس از دستور man اجرا کنیم، برای تمامی دستور های Biuld-in یا Internal صفحه ی شکل یک نشان داده می شود. در اولین بخش همین شکل لیستی از دستور های Build-in نشان داده شده است. مانند alias,bg,bind,pwd,cd و … که در شکل اول نشان داده شده است. همچنین می توانید این فایل را دانلود کنید.
اما در شکل بالا بطور مثال دستور ls که جز دستور های Internal نیست و بصورت یک alias نشان داده شده است. اما اگر دستور زیر را اجرا کنید خواهید دید که دستور ls در واقع یک alias نیست و جزئی از دستور های External و قرار گرفته در مسیر های متغیر PATH$ است.
which ls
دستور type دارای سوئیچ t- است که نوع یک دستور را تعیین می کند که یکی از موارد زیر است :
alias : یعنی یک نام مستعار تعیرف شده.
keyword : یک لغت کلیدی مانند if
file : یک دستور External که در یکی از مسیر های متغیر PATH$ وجود دارد.
buildin : یک دستور Build-in یا Internal
function : یک تابع تعریف شده.
type -t COMMAND_NAME
اگر دقت کرده باشید برخی از دستور ها مانند ls که در اصل دستورهایی External و در مسیری از مسیر های متغیر PATH$ وجود دارد بصورت یک Alias نشان داده می شود. با استفاده از سوئیج a- بصورت کامل اطلاعات نشان داده می شود.
type -a ls
دستور which برای پیدا کردن محل ذخیره سازی یک دستور External استفاده می شود. اگر یک دستور از نوع External باشد و همچنین مسیر ذخیره سازی آن بر روی دیسک در فهرست دایرکتوری های متغیر PATH$ نیز وجود داشته باشد، which محل ذخیره آنرا نشان می دهد. ولی اگر دستور از نوع Internal باشد و به دلیل عدم وجود دستور های Internal یا Build-in در بین دایرکتوری های متغیر PATH$ یک خطا بصورت شکل زیر در صورت اجرای دستور which برای یافتن محل دستوری مانند cd که از نوع Build-in است نشان داده می شود که معرف عدم وجود cd در بین دایرکتوری های PATH$ است.
which cd
به هر حال اگر شما به دنبال مسیر یک دستور External هستنید به خاطر عدم وجود مسیر آن در متغیر PATH$ یا اینکه بطور کلی آن دستور نصب نشده است،بازهم با خطای بالا مواجه می شوید