Command-line ပတ်ဝန်းကျင်

Aliases နှင့် Functions များ

မိမိစိတ်ကူးကြည့်နိုင်သည့်အတိုင်း flag အများအပြား သို့မဟုတ် ရှည်လျားသော option များပါဝင်သည့် command ရှည်ကြီးများကို ခဏခဏ ရိုက်ထည့်နေရခြင်းသည် မောပန်းစရာကောင်းလှပါသည်။ သို့သော်လည်း shell အများစုသည် aliasing (အမည်ပြောင် သတ်မှတ်ခြင်း) ကို ထောက်ပံ့ပေးထားကြပါသည်။ ဥပမာအားဖြင့် bash တွင် alias တစ်ခု၏ တည်ဆောက်ပုံမှာ အောက်ပါအတိုင်း ဖြစ်သည် (= သင်္ကေတ၏ ဘေးတစ်ဖက်တစ်ချက်တွင် space ခြားထားခြင်း မရှိသည်ကို သတိပြုပါ) -

alias alias_name="command_to_alias"

Alias များတွင် အဆင်ပြေစေသော အင်္ဂါရပ်များစွာ ရှိပါသည် -

# Alias can summarize good default flags
alias ll="ls -lh"

# Save a lot of typing for common commands
alias gc="git commit"

# Alias can overwrite existing commands
alias mv="mv -i"
alias mkdir="mkdir -p"

# Alias can be composed
alias la="ls -A"
alias lla="la -l"

# To ignore an alias run it prepended with \
\ls
# Or can be disabled using unalias
unalias la

သို့သော်လည်း အခြေအနေများစွာတွင် alias များသည် ကန့်သတ်ချက် ရှိနိုင်ပါသည်၊ အထူးသဖြင့် argument များကို လက်ခံရယူသော command များကို ဆက်တိုက် တွဲရေးရန် ကြိုးစားသည့်အခါမျိုးတွင် ဖြစ်ပါသည်။ ယင်းအစား အခြားရွေးချယ်စရာတစ်ခုမှာ alias များနှင့် စိတ်ကြိုက် shell script များကြား လမ်းဝက်နေရာတွင် ရှိသော functions များ ဖြစ်ကြပါသည်။

Directory တစ်ခု တည်ဆောက်ပြီး ယင်းအတွင်းသို့ ချက်ချင်း ဝင်ရောက်သွားသည့် ဥပမာ function တစ်ခုမှာ အောက်ပါအတိုင်း ဖြစ်ပါသည် -

mcd () {
    mkdir -p $1
    cd $1
}

Alias များနှင့် function များသည် default အားဖြင့် shell session များ ကုန်ဆုံးသွားပါက ပျောက်ပျက်သွားမည် ဖြစ်သည်။ Alias တစ်ခုကို အမြဲတမ်း တည်ရှိနေစေရန် (persistent ဖြစ်စေရန်) ယင်းကို .bashrc သို့မဟုတ် .zshrc ကဲ့သို့သော shell startup script ဖိုင်များထဲတွင် ထည့်သွင်းပေးရန် လိုအပ်ပါသည်။ ကျွန်ုပ်၏ အကြံပြုချက်မှာ ၎င်းတို့ကို .alias ဖိုင်တစ်ခုထဲတွင် သီးသန့် ရေးသားပြီး အခြား shell config ဖိုင်များမှ ထိုဖိုင်ကို source လုပ်၍ ခေါ်ယူသုံးစွဲရန် ဖြစ်ပါသည်။

Shell များ နှင့် Framework များ

Shell နှင့် scripting သင်ခန်းစာတွင် ကျွန်ုပ်တို့သည် bash shell အကြောင်းကို လေ့လာခဲ့ကြပါသည်၊ အကြောင်းမှာ ယင်းသည် နေရာတိုင်းလိုလိုတွင် အများဆုံး သုံးကြပြီး စနစ်အများစုတွင်လည်း default ရွေးချယ်မှုအဖြစ် ပါဝင်သောကြောင့် ဖြစ်ပါသည်။ သို့သော်လည်း ယင်းသည် တစ်ခုတည်းသော ရွေးချယ်မှုတော့ မဟုတ်ပါ။

ဥပမာအားဖြင့် zsh shell သည် bash ၏ superset တစ်ခုဖြစ်ပြီး အသင့်သုံးနိုင်သော အဆင်ပြေသည့် အင်္ဂါရပ်များစွာကို ထောက်ပံ့ပေးထားပါသည် -

ထို့အပြင် shell အများအပြားကို framework များ ဖြင့်လည်း ပိုမိုကောင်းမွန်အောင် ပြုလုပ်နိုင်ပါသည်။ prezto သို့မဟုတ် oh-my-zsh ကဲ့သို့သော ရေပန်းစားသည့် အထွေထွေ framework များ ရှိသကဲ့သို့၊ zsh-syntax-highlighting သို့မဟုတ် zsh-history-substring-search ကဲ့သို့ သီးခြား feature များကို အဓိကထားသည့် ပိုမိုသေးငယ်သော framework များလည်း ရှိပါသည်။ fish ကဲ့သို့သော အခြား shell များတွင်မူ ဤအသုံးပြုရလွယ်ကူသော feature အများအပြားကို default အနေဖြင့် ထည့်သွင်းပေးထားပါသည်။ ၎င်းတို့တွင် ပါဝင်သော feature အချို့မှာ အောက်ပါအတိုင်း ဖြစ်သည် -

ဤ framework များကို အသုံးပြုရာတွင် သတိပြုရမည့် အချက်တစ်ခုမှာ ၎င်းတို့ runသည့် code များသည် သေချာစွာ စနစ်တကျ ပြင်ဆင်ထားခြင်း (optimize လုပ်ထားခြင်း) မရှိပါက သို့မဟုတ် စာကြောင်းများ အလွန်များပြားနေပါက သင်၏ shell သည် နှေးကွေးလာနိုင်ပါသည်။ သင်သည် ၎င်း၏ စွမ်းဆောင်ရည်ကို အမြဲတမ်း စစ်ဆေးကြည့်ရှုနိုင်ပြီး (profile လုပ်နိုင်ပြီး) မကြာခဏ မသုံးသော သို့မဟုတ် မြန်နှုန်းထက် ပိုမိုအရေးမကြီးသော feature များကို ပိတ်ထားနိုင်ပါသည်။

Terminal Emulator များ နှင့် Multiplexer များ

သင်၏ shell ကို စိတ်ကြိုက်ပြင်ဆင်ခြင်းနှင့်အတူ သင်သုံးစွဲမည့် terminal emulator ရွေးချယ်မှုနှင့် ယင်း၏ အပြင်အဆင်များကို ရှာဖွေလေ့လာရန် အချိန်အနည်းငယ် ပေးထိုက်ပါသည်။ ပြင်ပတွင် terminal emulator အများအပြား ရှိကြပါသည် (ဒီမှာ နှိုင်းယှဉ်ချက် ကို ကြည့်နိုင်ပါသည်)။

သင်သည် သင်၏ terminal တွင် နာရီပေါင်း ရာနှင့်ထောင်နှင့်ချီ၍ အချိန်ကုန်လွန်မည် ဖြစ်သောကြောင့် ယင်း၏ setting များကို လေ့လာစိစစ်ခြင်းသည် အကျိုးရှိစေပါသည်။ Terminal တွင် သင် စိတ်ကြိုက် ပြောင်းလဲလိုနိုင်သည့် အချက်အချို့မှာ အောက်ပါအတိုင်း ဖြစ်သည် -

tmux ကဲ့သို့သော terminal multiplexer များ အကြောင်းကိုလည်း ထည့်သွင်းပြောကြားထိုက်ပါသည်။ tmux သည် shell session အများအပြားကို pane များနှင့် tab များအဖြစ် ခွဲခြားပေးနိုင်ပါသည်။ ထို့ပြင် ယင်းသည် attach နှင့် detach လုပ်ခြင်းများကိုလည်း ထောက်ပံ့ပေးရာ remote server တစ်ခုတွင် အလုပ်လုပ်နေချိန် လက်ရှိ process များကို ရပ်တန့်သွားမည် စိုးရိမ်စရာမလိုဘဲ shell ကို ဆက်လက် run နေစေလိုသည့်အခါ အလွန် အသုံးဝင်ပါသည် (default အားဖြင့် သင် log out လုပ်လိုက်ပါက သင်၏ process များ သေဆုံးသွားလေ့ရှိသည်)။ ဤနည်းဖြင့် tmux ကို သုံး၍ ရှုပ်ထွေးသော terminal layout များထဲသို့ ဝင်ထွက် အသုံးပြုနိုင်ပါသည်။ Terminal emulator များကဲ့သို့ပင် tmux သည်လည်း ~/.tmux.conf ဖိုင်ကို ပြင်ဆင်ခြင်းဖြင့် အဆင့်မြင့် စိတ်ကြိုက် ပြင်ဆင်မှုများကို ထောက်ပံ့ပေးထားပါသည်။

Command-line utility များ

UNIX အခြေခံ operating system အများစုတွင် default ပါဝင်သော command line utility များသည် သင် ပုံမှန် လုပ်ဆောင်ရန် လိုအပ်သည့် အရာများ၏ ၉၉ ရာခိုင်နှုန်းအတွက် လုံလောက်သည်ထက်ပင် ပိုမိုပါသည်။

နောက်လာမည့် ပုဒ်ခွဲအနည်းငယ်တွင် အလွန်အသုံးများသော shell လုပ်ဆောင်ချက်များအတွက် အသုံးပြုရန် ပိုမိုအဆင်ပြေသည့် အခြားရွေးချယ်စရာ tool များကို ရှင်းပြသွားပါမည်။ ဤ tool အချို့သည် command တွင် ပိုမိုကောင်းမွန်သော တိုးတက်သည့် လုပ်ဆောင်ချက်သစ်များကို ပေါင်းစပ်ပေးထားပြီး အချို့မှာမူ ပိုမိုကောင်းမွန်သော default များဖြင့် ရိုးရှင်းပြီး ပိုမိုနားလည်လွယ်သည့် interface ကို ပေးစွမ်းနိုင်ရန်သာ အဓိကထားထားကြပါသည်။

fasd နှင့် cd

တိုးတက်လာသော path expansion နှင့် tab autocomplete များ ရှိနေသည့်တိုင် directory များ ပြောင်းလဲခြင်းသည် အတော်လေး ထပ်ခါတလဲလဲ ဖြစ်လာနိုင်ပါသည်။ Fasd (သို့မဟုတ် autojump) သည် သင် သွားရောက်ခဲ့ဖူးသော မကြာသေးမီကနှင့် မကြာခဏ သွားလေ့ရှိသော folder များကို စောင့်ကြည့်မှတ်သားပြီး fuzzy matching ပြုလုပ်ပေးခြင်းဖြင့် ဤပြဿနာကို ဖြေရှင်းပေးပါသည်။

ထို့ကြောင့် ကျွန်ုပ်သည် /home/user/awesome_project/code သို့ သွားရောက်ခဲ့ပါက z code ကို runလိုက်လျှင် ယင်းသို့ cd ဝင်သွားမည် ဖြစ်သည်။ အကယ်၍ code ဟု အမည်ရသော folder အများအပြား ရှိနေပါက ပိုမိုနီးစပ်သော ကိုက်ညီမှုဖြစ်စေရန် z awe code ဟု run ပြီး ကွဲပြားအောင် လုပ်နိုင်ပါသည်။ Autojump နှင့် မတူသည်မှာ fasd သည် cd ပြုလုပ်မည့်အစား မကြာခဏ သို့မဟုတ် မကြာသေးမီက သုံးထားသော ဖိုင်များ၊ folder များ သို့မဟုတ် နှစ်ခုစလုံး၏ စာလုံးများကို ဖြန့်ကျက် (expand) ပေးသည့် command များကိုပါ ထောက်ပံ့ပေးထားခြင်း ဖြစ်သည်။

bat နှင့် cat

cat သည် ယင်း၏ လုပ်ငန်းကို ပြီးပြည့်စုံစွာ လုပ်ဆောင်နိုင်သော်လည်း bat သည် syntax highlighting (စာကြောင်း ကာလာရောင်စုံပြသမှု)၊ paging၊ စာကြောင်းနံပါတ်များ နှင့် git integration များကို ပေးစွမ်းခြင်းဖြင့် ပိုမိုကောင်းမွန်အောင် ပြုလုပ်ပေးပါသည်။

exa/ranger နှင့် ls

ls သည် ကောင်းမွန်သော command တစ်ခုဖြစ်သော်လည်း raw byte များဖြင့် ဖိုင်ဆိုဒ်ကို ပြသခြင်း ကဲ့သို့သော default အချို့မှာ စိတ်ရှုပ်စရာ ကောင်းနိုင်ပါသည်။ exa သည် ပိုမိုကောင်းမွန်သော default များကို ပေးစွမ်းထားပါသည်

အကယ်၍ သင်သည် folder အများအပြားကို သွားရောက်ကြည့်ရှုရန် နှင့်/သို့မဟုတ် ဖိုင်အများအပြားကို ကြိုတင်ကြည့်ရှုရန် (preview) လိုအပ်ပါက ranger ၏ အလွန်ကောင်းမွန်သော interface ကြောင့် cd နှင့် cat ထက် များစွာ ပိုမို ထိရောက်နိုင်ပါသည်။ ယင်းသည် စိတ်ကြိုက် ပြင်ဆင်ရန် အလွန် အဆင်ပြေပြီး သေချာ စနစ်တကျ ပြင်ဆင်ထားပါက သင်၏ terminal အတွင်း၌ပင် ဓာတ်ပုံများကို ကြိုတင်ကြည့်ရှုနိုင်မည် ဖြစ်သည်

fd နှင့် find

fd သည် find ၏ နေရာတွင် သုံးနိုင်သော ရိုးရှင်း၊ မြန်ဆန်ပြီး အသုံးပြုရ လွယ်ကူသည့် အခြားရွေးချယ်စရာ တစ်ခု ဖြစ်သည်။ --name flag ကို အသုံးပြုရခြင်း (သင် ၉၉ ရာခိုင်နှုန်း လုပ်ဆောင်လိုသည့် အရာဖြစ်သည်) ကဲ့သို့သော find ၏ default အခြေအနေများကို ပိုမို လွယ်ကူစေပြီး နေ့စဉ် သုံးစွဲရန် အဆင်ပြေစေပါသည်။ ထို့အပြင် ယင်းသည် git ကို နားလည်ပြီး default အားဖြင့် သင်၏ .gitignore နှင့် .git folder ထဲရှိ ဖိုင်များကို ကျော်သွားမည် (skip လုပ်မည်) ဖြစ်သည်။ Default အားဖြင့် အရောင်စုံ ကာလာပြသမှု စနစ်လည်း ပါဝင်ပါသည်။

rg/fzf နှင့် grep

grep သည် ကောင်းမွန်သော tool တစ်ခု ဖြစ်သော်လည်း ဖိုင်အများအပြားကို တစ်ပြိုင်နက်တည်း အထဲထိ ဝင်ရောက် ရှာဖွေလိုပါက (grep လုပ်လိုပါက) ထိုအတွက် ပိုမိုကောင်းမွန်သော tool များ ရှိပါသည်။ ack, ag နှင့် rg တို့သည် သင်၏ gitignore စည်းမျဉ်းများကို လိုက်နာလျက် လက်ရှိ directory အောက်တွင် regex pattern ဖြင့် အဆင့်ဆင့် ရှာဖွေပေးကြပါသည်။ ၎င်းတို့အားလုံးသည် အလုပ်လုပ်ပုံ ခပ်ဆင်ဆင် ဖြစ်သော်လည်း ကျွန်ုပ်၏ home directory တစ်ခုလုံးကို အလွန် လျင်မြန်စွာ ရှာဖွေနိုင်သည့်အတွက် rg ကို ပိုမို သဘောကျပါသည်။

ထို့အတူပင် မိမိကိုယ်ကိုယ် CMD | grep PATTERN ကို ထပ်ခါတလဲလဲ ပြုလုပ်နေရသည်ကို တွေ့ရလေ့ ရှိပါသည်။ fzf သည် မည်သည့် command ၏ output ကိုမဆို တိုက်ရိုက် တုံ့ပြန်ဆန်းစစ်၍ (interactively) စစ်ထုတ်နိုင်စေသည့် command line fuzzy finder တစ်ခု ဖြစ်ပါသည်။

rsync နှင့် cp/scp

mv နှင့် scp တို့သည် အခြေအနေ အများစုအတွက် ပြီးပြည့်စုံသော်လည်း၊ ဖိုင်ပမာဏ အများအပြားကို ကူးယူ/ရွှေ့ပြောင်းသည့်အခါ၊ ဖိုင်ကြီးများကို ကူးယူသည့်အခါ သို့မဟုတ် ပန်းတိုင် (destination) တွင် ဒေတာ အချို့ ရောက်ရှိပြီး ဖြစ်နေသည့်အခါမျိုးတွင် rsync သည် အလွန် ကြီးမားသော တိုးတက်ပြောင်းလဲမှု ဖြစ်ပါသည်။ rsync သည် ကူးယူပြီးသား ဖိုင်များကို ကျော်သွားမည် ဖြစ်ပြီး --partial flag ပါဝင်ပါက ယခင်က ပြတ်တောက်သွားခဲ့သော ကူးယူမှုကို ပြန်လည် စတင်နိုင်မည် ဖြစ်သည်။

trash နှင့် rm

rm သည် ဖိုင်တစ်ခုကို ဖျက်လိုက်ပါက ပြန်လည် ရယူ၍ မရတော့သည့် သဘောရှိသဖြင့် အန္တရာယ်ရှိသော command ဖြစ်ပါသည်။ သို့သော်လည်း ခေတ်ပေါ် OS များသည် file explorer တွင် တစ်ခုခုကို ဖျက်လိုက်သည့်အခါ ထိုသို့ အလုပ်မလုပ်ဘဲ ပုံမှန် ပို့ပစ်လေ့ရှိသော Trash folder ထဲသို့သာ ရွှေ့ပြောင်းပေးလိုက်ကြခြင်း ဖြစ်သည်။

Trash ကို စီမံခန့်ခွဲပုံသည် OS တစ်ခုနှင့်တစ်ခု မတူညီကြသဖြင့် တစ်ခုတည်းသော CLI utility ဟု မရှိပါ။ macOS တွင် trash ရှိပြီး linux တွင် trash-cli စသည်ဖြင့် အသီးသီး ရှိကြပါသည်။

mosh နှင့် ssh

ssh သည် အလွန် အသုံးဝင်သော tool တစ်ခု ဖြစ်သော်လည်း သင်၏ လိုင်းဆက်ကြောင်း နှေးကွေးပါက lag ဖြစ်မှုသည် စိတ်ပျက်စရာ ကောင်းလာနိုင်ပြီး ချိတ်ဆက်မှု ပြတ်တောက်သွားပါက ပြန်လည် ချိတ်ဆက်ရလေ့ ရှိသည်။ mosh သည် roaming လုပ်ခြင်းကို ခွင့်ပြုပြီး ပြတ်တောင်းပြတ်တောင်း ချိတ်ဆက်မှုကို ထောက်ပံ့ပေးသည့်အပြင် ဉာဏ်ရည်ထက်မြက်သော local echo ကိုလည်း ပေးစွမ်းနိုင်သည့် အသုံးဝင်သော tool တစ်ခု ဖြစ်ပါသည်။

tldr နှင့် man

အများစုတွင် command တစ်ခု အလုပ်လုပ်ပုံနှင့် ယင်း၌ ပါဝင်သည့် option များကို man သို့မဟုတ် -h/--help flag များကို သုံး၍ ရှာဖွေနိုင်ပါသည်။ သို့သော်လည်း အချို့သော အခြေအနေများတွင် ၎င်းတို့သည် အသေးစိတ် အလွန်များပြားပါက လိုက်လံ ကြည့်ရှုရသည်မှာ အနည်းငယ် လက်ဝင် စိတ်ပျက်စရာ ဖြစ်နိုင်ပါသည်။

tldr command သည် အသိုက်အဝန်း (community) အခြေပြု documentation စနစ်တစ်ခု ဖြစ်ပြီး command line မှ ရယူသုံးစွဲနိုင်ကာ၊ command အလုပ်လုပ်ပုံနှင့် အသုံးအများဆုံး argument option များအတွက် ရှင်းလင်းသော ဥပမာအနည်းငယ်ကို ပေးစွမ်းထားပါသည်။

aunpack နှင့် tar/unzip/unrar

ဤ xkcd တွင် ညွှန်းဆိုထားသကဲ့သို့ tar အတွက် option များကို မှတ်မိရန် ခက်ခဲနိုင်ပြီး တစ်ခါတစ်ရံတွင် .rar ဖိုင်များအတွက် unrar ကဲ့သို့သော လုံးဝ မတူညီသည့် အခြား tool တစ်ခုကို အသုံးပြုရန် လိုအပ်တတ်ပါသည်။ atool package သည် မှန်ကန်သော option များကို အလိုအလျောက် တွက်ချက်ပေးပြီး ဖြည်ထုတ်လိုက်သော archive များကို folder အသစ်တစ်ခုအတွင်းသို့ အမြဲတမ်း ထည့်သွင်းပေးသည့် aunpack command ကို ထောက်ပံ့ပေးထားပါသည်။

လေ့ကျင့်ခန်းများ

  1. အသုံးအများဆုံး command ၁၀ ခုကို ရယူရန် cat .bash_history | sort | uniq -c | sort -rn | head -n 10 (သို့မဟုတ် zsh အတွက် cat .zhistory | sort | uniq -c | sort -rn | head -n 10) ကို run ပါ၊ ပြီးလျှင် ၎င်းတို့အတွက် ပိုမိုတိုတောင်းသော alias များကို ရေးသားရန် စဉ်းစားကြည့်ပါ။
  2. Terminal emulator တစ်ခုကို ရွေးချယ်ပြီး အောက်ပါ property များကို မည်သို့ ပြောင်းလဲရမည်ကို ရှာဖွေကြည့်ပါ -
    • ဖောင့် ရွေးချယ်မှု
    • Color scheme။ စံနှုန်းသတ်မှတ်ထားသော scheme တစ်ခုတွင် အရောင် မည်မျှ ပါဝင်သနည်း။ အဘယ်ကြောင့်နည်း။
    • Scrollback history ဆိုဒ်
  3. fasd သို့မဟုတ် အလားတူ ဆော့ဖ်ဝဲလ်တစ်ခုခုကို တပ်ဆင်ပါ၊ ပေးပို့လိုက်သော argument များအပေါ် fuzzy matching ပြုလုပ်ပြီး အကောင်းဆုံး ကိုက်ညီသည့် ရလဒ်ကို သင် ရွေးချယ်ထားသော editor တွင် ဖွင့်ပေးသည့် v ဟု အမည်ရသော bash/zsh function တစ်ခုကို ရေးသားပါ။ ထို့နောက် ကိုက်ညီမှု အများအပြား ရှိနေပါက fzf ဖြင့် ရွေးချယ်နိုင်စေရန် ပြင်ဆင်ပါ။
  4. fzf သည် fuzzy ရှာဖွေမှုများ ပြုလုပ်ရန် အလွန် အဆင်ပြေပြီး shell history သည် ထိုကဲ့သို့သော ရှာဖွေမှုမျိုးနှင့် သင့်တော်သောကြောင့် fzf ကို ^R သို့ မည်သို့ bind ပြုလုပ်ရမည်ကို စုံစမ်းလေ့လာပါ။ အချက်အလက်အချို့ကို ဒီနေရာတွင် ရှာဖွေတွေ့ရှိနိုင်ပါသည်။
  5. ack တွင် --bar option သည် မည်သည့်အရာကို လုပ်ဆောင်သနည်း။

Edit this page.

Licensed under CC BY-NC-SA.