Internal & External Command


Command


Command ဆုိတာက user ကေနျပီး computer ကို ေပးလိုက္တဲ့ instruction ပဲျဖစ္ပါတယ္။ 
instruction ဆုိတာက ခုိင္းခ်င္တာကို computer နားလည္ေအာင္ေျပာလိုက္တဲ့သေဘာပါ။ 
ဥပမာ.. ကုိယ္ဘယ္ေနရာ ဘယ္directory locationမွာ ေရာက္ေနလဲ သိခ်င္တယ္ဆုိပါေတာ့ 
Terminalမွာ $pwd လုိ့ရိုက္လိုက္တာနဲ့ ကိုယ္ခု ရွိေနတဲ့ လက္ရွိ(current working)directory ကို
 ျပေပးမွာပဲျဖစ္ပါတယ္။ ‘pwd’ (present working directory) ဆုိတာသည္ ကိုယ့္ခုလက္ရွိ ရွိေနတဲ့
 directory ကို ျပဖုိ့ computer ကို terminal ကေန တစ္ဆင္ခုိင္းလိုက္တဲ့ instruction ပဲ ျဖစ္ပါတယ္။ 
Linux မွာက command နဲ ့ပါတ္သက္ရင္ window လိုပဲ external command နဲ ့ internal command
 ဆုိျပီး ႏွစ္မ်ိဳးရွိတယ္ဗ်ာ့။
Internal & External Command

Internal command ဆုိတာက shell မွာ defaultပါလာတဲ့ built-in command ေတြျဖစ္ျပီးေတာ့ 
OS boot စတက္တဲ့ အခ်ိန္မွာ load လုပ္ပါတယ္။ အဲ့အတြက္ေႀကာင့္ internal command ေတြကို  
run တဲ့အခ်ိန္မွာ shell အေနနဲ ့ process တစ္ခု(separate process)ထပ္ run ဖုိ ့မလိုေတာ့ပါဘူး 
OS တက္ကတည္းက loading လုပ္ထားျပီး ျဖစ္တာေႀကာင့္ပါ။ ျမင္သာတဲ့ ဥပမာအေနနဲ ့ ေျပာရရင္ 
လူတစ္ေယာက္ စျပီးေမြးဖြားလာျပီ လူျဖစ္လာျပီဆိုတာနဲ ့ သူ့ ့မွာ ပုခုံုးနွစ္ဘက္ႀကားမွာေခါင္းပါမယ္
 ေျခေတြလက္ေတြရွိမယ္  အဲ့ ေမြးကတည္းက (built-in) ပါထာတဲ့ လက္ေတြကိုသံုးျပီး ထိုးတာ
 ေျခကိုသံုးျပီးကန္တာ စတဲ့ အျပဳအမူမ်ိဳးေတြဟာ ေျပာရရင္ ကိုယ့္မွာ ရွိျပီးသားအရာကို အသံုးခ်တာကို 
internal command လုိ ့ေခၚတယ္။ အဲ့လုိပဲ OS Boot တက္လာျပီး shell က loading လုပ္ျပီးေနာက္ 
သူ ့(shell) မွာ သူနဲ ့အတူ Built-in ရွိေနတဲ့ internal command ေတြကို သံုးတာျဖစ္ပါတယ္။ 
ကုိယ္သံုးေနတဲ့ command က internal command ဟုတ္မဟုတ္ကို type ဆုိတဲ့ command နဲ ့
စစ္လိုက္လို့ရပါတယ္။

ပံုမွာဆုိ pwd, cd, echo, compgen တုိ့သည္ shell builtin internal command ေတြျဖစ္တယ္ဆုိတာကို 
type ဆုိတဲ့ command နဲ ့ႀကည့္နုိင္ပါတယ္။ အဲ့မွာ gns3 ကို ႀကည့္လိုက္ရင္ေတာ့ shell buildin မဟုတ္ပဲ 
ထပ္ထည့္ထားတဲ့ external command ျဖစ္တာမုိ့လို့ သူ့ရဲ ့ Path လမ္းေႀကာင္းျဖစ္တဲ့ /usr/local/bin/gns3 
ကို ျပေပးတာပါ။
Run နိုင္တဲ builtin command list ကို ႀကည့္ခ်င္တယ္ဆုိရင္ compgen -b ဆုိတဲ့ comand ကို အသံုးျပဳျပီး 
ႀကည့္ရွဳနုိင္ပါတယ္။
compgen မွာ သူနဲ့ တြဲသုံုးနုိင္တဲ့ options ေတြရွိပါေသးတယ္။ အဲ့တာေတြကေတာ့..
  • -a means Names of alias
  • -b means Names of shell builtins
  • -c means Names of all commands
  • -d means Names of directory
  • -e means Names of exported shell variables
  • -f means Names of file and functions
  • -g means Names of groups
  • -j means Names of job
  • -k means Names of Shell reserved words
  • -s means Names of service
  • -u means Names of userAlias names
  • -v means Names of shell variables
ေတြပဲျဖစ္ပါတယ္။ အျခားအသံုးျပဳလို့ရတာ ေတြလဲ ရွိပါေသးတယ္။ compgen ရဲ ့ man page မွာ သြားေရာက္ႀကည့္ရွဳ
 ေလ့လာနုိင္ပါတယ္။
External command က် သူက shell မွာ Built-in ပါတာ မဟုတ္ေတာ့ပဲနဲ့ မတူညီတဲ့ေနရာေတြ 
(different location)မွာ separate binary ဖုိင္ေတြအေနနဲ ့ရွိေနပါတယ္။ အဲ့ separate ျဖစ္ေနတဲ ့
binary file ေတြကို ဘယ္လို့သိလဲဆုိေတာ့ $PATH ဆိုတဲ့ variable ထဲမွာ binary ဖုိင္ေတြကုိထားတဲ့ 
path လမ္းေႀကာင္းေတြကို ထည့္ထားပါတယ္။ pathလမ္းေႀကာင္း တစ္ခုခ်င္းဆီကို : ေလးေတြနဲ ့ျခားေပးထားပါတယ္။

အကယ္လို ့ ကိုယ့္စိတ္ႀကိဳက္ create လုပ္ထားတဲ့ commandေတြကို ေနရာတစ္ခုနဲ့ ထားခ်င္ရင္ 
အဲ့ထားတဲ့ေနရာရဲ ့ location လမ္းေႀကာင္းကို $PATH variable ထဲ့ထည့္ထားေပးဖုိ့လုိပါတယ္။ အဲ့လိုမွ
 shall က သူ ့မွာ Built-in မပါတဲ့ external command ေတြ run လိုက္ျပီဆုိရင္ $PATH ထဲမွာ ရွိတဲ့
 pathလမ္းေႀကာင္းေတြမွာ လုိက္စစ္ပါတယ္။ pathလမ္းေႀကာင္းမရွိရင္ runလုိက္တဲ့ command ကို မေတြ ့ရင္
 “No command found” ဆုိျပီး error တက္ပါလိမ့္မယ္။ ျပီးေတာ့ external command ေတြကို run လိုက္ျပီဆုိရင္လဲ 
shell အေနနဲ ့ ေနာက္ထပ္ process အငယ္စား(separate sub-process) အေနနဲ ့ execute လုပ္ပါတယ္။ 
internal command တုန္းကက် built-in ပါတာ မို့လို့ sub-process မလိုပဲ တန္း run ပါတယ္။ ေျပာရရင္ေတာ့ ဗ်ာ 
internal command နဲ ့ external command ကို ထပ္ျပီးျမင္သာေအာင္ ႏွိဳင္းယွဥ္ျပီး ေျပာရမယ္ ဆုိရင္ အေပၚတုန္းက
 ေျပာခဲ့တဲ့ ဥပမာကိုပဲ ထပ္ေဆာင္းေျပာရရင္ လူတစ္ေယာက္ လမ္းေလ်ာက္ေနမယ္ဆိုပါေတာ့ အဲ့ေလ်ွာက္တယ္ဆိုတဲ့ 
processs မွာ ေမြးကတည္းက build-in ပါလာတဲ ့ ေျခေထာက္ေတြနဲ ့ပဲ ေလ်ွာက္ေနတယ္ဗ်ာ ့အဲ့တာက internal ေပါ့ဗ်ာ။ အဲ့ေနာက္ မိုးရြာလာတယ္။ ထီးဖြင့္ဖုိ ့ လုိလာျပီ ထီးဘယ္နားထားတယ္ဆုိျပီး မွတ္ထားတာက $PATH ေပါ့ဗ်ာ့ ထီးရွိတဲ့ ေနရာသိျပီးဆုိေတာ့ ထီးကို အိပ္ထဲကယူျပီး (separate Sub-process) ေဆာင္းလိုက္တာကို External လို ့ျမင္ႀကည့္ပါဗ်ာ။
The difference between internal and external command
  • - The commands that are directly executed by the shell are known as internal commands. No separate process is there to run these commands.
  • - The commands that are executed by the shell/kernel are knows as external commands. Each command has its unique process id.
  • The only difference that exists between internal and external command is that internal commands work much faster than the external ones as the shell has to look for the path when it comes to the use of external commands.

Comments