အင်တာဗျူး မေးခွန်းနှင့် အဖြေများ — Linux¶
ဤမေးခွန်းများသည် Automation၊ NetDevOps နှင့် SRE အင်တာဗျူးများတွင် မေးလေ့ရှိပြီး ယနေ့ခေတ် သာမန် Network Engineer အင်တာဗျူးများတွင်ပါ မကြာခဏ မေးမြန်းလာကြပါသည်။
Shell ဆိုင်ရာ မေးခွန်းများ¶
Exit code 0 က ဘာကို ဆိုလိုသနည်း၊ အဘယ်ကြောင့် အရေးပါသနည်း။
Exit code 0 သည် အောင်မြင်သည် (Success) ဟု ဆိုလိုသည်။ သုညမဟုတ်သော အခြားနံပါတ်တိုင်းသည် ကျရှုံးမှု (Failure) ဖြစ်ပြီး အကြောင်းရင်းအလိုက် နံပါတ်များ ကွဲပြားသည်။ Scripts များသည် &&, ||, if စသည့် ဆုံးဖြတ်ချက်များ ချမှတ်ရာတွင်လည်းကောင်း၊ CI pipeline တစ်ခုက job ကျရှုံးသည်ဟု သတ်မှတ်ရာတွင်လည်းကောင်း ဤ exit code ကိုသာ ကြည့်ရှုသည်။ အမြဲတမ်း 0 ထွက်နေသော script သည် မည်မျှပင် ပျက်စီးနေပါစေ pipeline ကို fail မဖြစ်စေနိုင်ပါ။
set -euo pipefail က ဘာလုပ်ပေးသနည်း၊ အဘယ်ကြောင့် သုံးသင့်သနည်း။
-e သည် command တစ်ခုခု fail ဖြစ်ပါက script ကို ရပ်တန့်စေသည်; -u သည် သတ်မှတ်မထားသော variable များ သုံးမိပါက typo အမှားများကို ဖမ်းယူပေးသည်; -o pipefail သည် pipeline တစ်ခုလုံးတွင် အဆင့်တစ်ခုခု fail ဖြစ်ပါက အောင်မြင်သည်ဟု မယူဆဘဲ တစ်ခုလုံးကို fail အဖြစ် သတ်မှတ်ပေးသည်။ pipefail မပါပါက false | true သည် အောင်မြင်သွားမည်ဖြစ်ပြီး ပျက်စီးနေသော backup script တစ်ခုက လပေါင်းများစွာ အောင်မြင်သည်ဟု သတင်းပို့နေတတ်ပါသည်။
Shell တွင် Variables များကို အဘယ်ကြောင့် quote ခတ်သင့်သနည်း။
Quote မခတ်ပါက shell သည် whitespace နေရာများတွင် စာလုံးခွဲပစ်ပြီး globs များကို ဖြန့်ကျက်ပစ်သည်။ FILE="my config.txt" ဖြစ်နေချိန်တွင် rm $FILE ရိုက်ပါက ဖိုင်နှစ်ခုလုံးကို လိုက်ဖျက်ပါလိမ့်မည်။ "$FILE" သည် argument တစ်ခုတည်းအဖြစ်သာ ပို့ဆောင်ပေးသည်။
> နှင့် >> ၏ ခြားနားချက်ကား အဘယ်နည်း၊ 2>&1 က အဘယ်နည်း။
> သည် မူလဖိုင်ကို အစားထိုးဖျက်ပြီး ရေးသည်၊ >> သည် အောက်ခြေတွင် ဆက်ရေးသည်။ 2>&1 သည် stderr (အမှားစီးကြောင်း) ကို stdout ထဲ ပေါင်းထည့်ပေးသည် — ထို့ကြောင့် cmd > log 2>&1 သည် output ရော error ပါ နှစ်ခုစလုံးကို ဖိုင်ထဲ သိမ်းဆည်းပေးသည်။ အစီအစဉ် မှန်ကန်ရန် အရေးကြီးပါသည်။
စက်ပေါင်း ၂၀၀ ပေါ်တွင် BGP စစ်ဆေးပြီး ချို့ယွင်းနေသည်ကိုသာ သိလိုပါက မည်သို့ လုပ်ဆောင်မည်နည်း။
စက်စာရင်းကို loop ပတ်ကာ check လုပ်ပြီး၊ အောင်မြင်သော အခြေအနေအစား ကျရှုံးသော အခြေအနေများ (Failure states) ကို စစ်ဆေးပါ — ပုံမှန်အချိန်တွင် ဘာမျှမပြဘဲ တိတ်ဆိတ်နေစေရန် ဖြစ်သည်။ စက်သေနေသဖြင့် ရပ်တန့်မသွားစေရန် timeout ထည့်ပါ၊ ပြိုင်တူစစ်ဆေးရန် xargs -P သုံးပါ၊ ပြဿနာရှိပါက CI/cron က အရေးယူနိုင်ရန် non-zero exit code ဖြင့် ထွက်ပါ။
အောင်မြင်သော စာသားတစ်ခုတည်းကိုသာ စစ်ဆေးခြင်းက အဘယ်ကြောင့် Bug ဖြစ်စေသနည်း။
အဘယ်ကြောင့်ဆိုသော် ကွန်ရက်ပြတ်တောက်နေချိန်တွင် မည်သည့်အသံမျှ ထွက်မလာသောကြောင့် ဖြစ်သည်။ grep -q Estab သည် peer တစ်ခုတည်း တက်နေပြီး အခြား peer များ ကျနေချိန်တွင်လည်း အောင်မြင်နေမည် ဖြစ်သည်။ ထို့ကြောင့် ဆုံးဖြတ်ရမည့် မကောင်းသော အခြေအနေတိုင်းကို စစ်ဆေးပါ သို့မဟုတ် အရေအတွက် ရေတွက်၍ မျှော်လင့်ထားသည့် အရေအတွက်နှင့် ကိုက်မကိုက် စစ်ဆေးပါ။
စာသား စီမံခန့်ခွဲမှု (Text Processing)¶
cut ထက် awk ကို မည်သည့်အခါတွင် သုံးသင့်သနည်း။
စက်ပစ္စည်း output များကဲ့သို့ variable whitespace နေရာများဖြင့် ခွဲခြားထားသော နေရာတိုင်းတွင် ဖြစ်သည်။ cut -d' ' သည် space တစ်ခုချင်းစီကို separator အဖြစ် သတ်မှတ်သဖြင့် တန်းညှိထားသော ကော်လံများတွင် ဗလာ fields များ ထွက်ပေါ်လာတတ်သည်။ awk သည် whitespace များကို အလိုအလျောက် ပေါင်းစည်းပေးသည်။
show ip bgp summary မှ Established မဖြစ်သော peers များကို parse လုပ်နည်း။
show ip bgp summary | awk '$1 ~ /^[0-9]+\./ && $9 != "Estab" {print $1}'
$1 ~ /^[0-9]+\./ သည် IP ဖြင့်စသော စာကြောင်းများကိုသာ စစ်ထုတ်ပေးပြီး header စာသားများကို ကျော်သွားစေသည်။
Text Parsing ထက် JSON output နှင့် jq ကို အဘယ်ကြောင့် ပိုမို ဦးစားပေးသင့်သနည်း။
Text output သည် လူဖတ်ရန်ဖြစ်ပြီး software version အသစ်များတွင် ကော်လံနေရာများ ရွေ့သွားတတ်သည် — သင်၏ $9 သည် မှားယွင်းသော field ဖြစ်သွားနိုင်သည်။ JSON keys များသည် API ၏ အစိတ်အပိုင်းဖြစ်ပြီး တည်ငြိမ်သည်။ စက်က | json ထောက်ပံ့ပါက jq ကို သုံးပါ။
grep ERROR app.log | awk '{print $5}' | sort | uniq -c | sort -rn ၏ အလုပ်လုပ်ပုံကို ရှင်းပြပါ။
ကြိမ်နှုန်းပြ ဇယား (Frequency table) ဖြစ်သည်။ Error စာကြောင်းများကို စစ်ထုတ်သည်၊ field 5 ကို ယူသည်၊ uniq အလုပ်လုပ်နိုင်ရန် sort စီသည်၊ အရေအတွက် ရေတွက်သည်၊ အများဆုံးမှ အနည်းဆုံးသို့ ကိန်းဂဏန်းအလိုက် ပြန်စီသည်။ Log ဖိုင်များထဲတွင် အဖြစ်အများဆုံး ပြဿနာကို ရှာဖွေသည့် စံနည်းလမ်း ဖြစ်သည်။
<(command) ဆိုသည်မှာ အဘယ်နည်း။
Process substitution ဖြစ်သည် — Command ၏ output ကို ဖိုင်တစ်ခုကဲ့သို့ ဟန်ဆောင်ပေးကာ ယာယီဖိုင်များ မလိုဘဲ diff <(ssh r1 "show run") <(ssh r2 "show run") ကဲ့သို့ စက်နှစ်လုံးကို တိုက်ရိုက် နှိုင်းယှဉ်နိုင်သည်။
SSH ဆိုင်ရာ မေးခွန်းများ¶
Passwords အစား Keys ဖြင့် authentication ပြုလုပ်ခြင်းက အဘယ်ကြောင့် ပိုကောင်းသနည်း။
လူမပါဘဲ အလိုအလျောက် (unattended) အလုပ်လုပ်နိုင်သည်။ ပိုမိုလုံခြုံသည်၊ key တစ်ခုချင်းစီအလိုက် ပယ်ဖျက်နိုင်သည်၊ စက်ပေါ်တွင် မည်သည့် shared secret မှ မကျန်ရစ်စေပါ။ Cron သို့မဟုတ် CI စနစ်တိုင်းအတွက် မဖြစ်မနေ လိုအပ်သည်။
Key authentication အလုပ်မလုပ်ပါက မည်သည့်အရာများကို စစ်ဆေးမည်နည်း။
Permissions များကို အရင်စစ်ပါ — ~/.ssh သည် 700၊ Private key သည် 600၊ authorized_keys သည် 600 ဖြစ်ရမည်။ ထို့နောက် ssh -v ဖြင့် ရပ်တန့်သွားသော နေရာကို ဖတ်ပါ။ ထို့နောက် စက်၏ authorized_keys ထဲသို့ public key အမှန်တကယ် ရောက်မရောက် စစ်ပါ။
ProxyJump ဆိုသည်မှာ အဘယ်နည်း၊ Agent Forwarding ထက် အဘယ်ကြောင့် ပိုကောင်းသနည်း။
ProxyJump သည် traffic ကို bastion မှတစ်ဆင့် tunnel ဖောက်ပေးပြီး authentication ကို မိမိစက်တွင်း၌သာ ထားရှိသည်။ Agent Forwarding သည် သင်၏ agent socket ကို remote စက်ပေါ် ဖွင့်ပေးထားသဖြင့် ထိုစက်ရှိ root user က သင်ချိတ်ဆက်နေစဉ် သင်၏ keys များကို ခိုးယူသုံးစွဲသွားနိုင်သည်။
Scripts များထဲတွင် BatchMode=yes ကို အဘယ်ကြောင့် ထည့်သင့်သနည်း။
ချိတ်ဆက်မရပါက password တောင်းဆိုမည့်အစား ချက်ချင်း fail ဖြစ်စေရန် ဖြစ်သည်။ ၎င်းမပါပါက မည်သူမျှ မရိုက်မည့် password ကို စောင့်ရင်း unattended job တစ်ခုလုံး ထာဝစဉ် ရပ်တန့်နေပါလိမ့်မည်။
'Connection refused' နှင့် 'Connection timed out' အကြား ခြားနားချက်ကား အဘယ်နည်း။
Refused ဆိုသည်မှာ တစ်ဖက်စက်သို့ ရောက်ရှိသော်လည်း ငြင်းပယ်ခံရခြင်းဖြစ်သည် — Host ရောက်သည်၊ Port တွင် service နားမထောင်နေပါ။ Timed out ဆိုသည်မှာ မည်သည့်အသံမျှ ပြန်မထွက်လာခြင်းဖြစ်သည် — Routing မှားယွင်းခြင်း၊ Firewall ပိတ်ထားခြင်း သို့မဟုတ် စက်သေနေခြင်း ဖြစ်သည်။
Host key verification failed ဖြစ်ပါက မည်သို့ လုပ်ဆောင်မည်နည်း။
စက်ကို အသစ်ပြန်တည်ဆောက်ထားခြင်း သို့မဟုတ် လဲလှယ်ထားခြင်း ဟုတ်မဟုတ် အရင်စစ်ပါ။ ဟုတ်ပါက ssh-keygen -R <host> ဖြင့် ဖျက်ပြီး ပြန်ချိတ်ပါ။ မဟုတ်ပါက ကြားဖြတ်တိုက်ခိုက်ခံရခြင်း ဟုတ်မဟုတ် စုံစမ်းပါ။ StrictHostKeyChecking=no ကို အလွယ်တကူ မသုံးပါနှင့်။
Services နှင့် Logs¶
systemctl start နှင့် enable အကြား ခြားနားချက်ကား အဘယ်နည်း။
start သည် ယခုလက်ရှိ run ပေးခြင်းဖြစ်ပြီး၊ enable သည် စက် boot တက်တိုင်း အလိုအလျောက် စတင်စေခြင်း ဖြစ်သည်။ တစ်ခုလုပ်ရုံဖြင့် နောက်တစ်ခု အလိုအလျောက် မဖြစ်ပါ။ enable --now က နှစ်ခုစလုံး လုပ်ပေးသည်။
Service တစ်ခု အဘယ်ကြောင့် fail ဖြစ်သွားသည်ကို မည်သို့ ရှာဖွေမည်နည်း။
systemctl status <unit> ဖြင့် အခြေအနေကို ကြည့်ပါ၊ ထို့နောက် journalctl -u <unit> -p err --since "<ပျက်သွားချိန်>" ဖြင့် အမှားများကို စစ်ထုတ်ပါ။ df -h ဖြင့် disk ပြည့်မပြည့်ကိုလည်း မဖြစ်မနေ စစ်ဆေးပါ။
ping က မပြောနိုင်ဘဲ ss က ပြောနိုင်သော အချက်ကား အဘယ်နည်း။
Port တွင် service အမှန်တကယ် နားထောင်နေခြင်း ရှိမရှိနှင့် မည်သည့် IP address ပေါ်တွင် နားထောင်နေသနည်း ဆိုသည့် အချက်ဖြစ်သည်။ 0.0.0.0 အစား 127.0.0.1 တွင် bind လုပ်ထားပါက ping ရသော်လည်း အပြင်မှ ချိတ်ဆက်၍ မရနိုင်ပါ။
BGP client မလိုဘဲ စက်တစ်ခု၏ TCP/179 ပွင့်မပွင့် မည်သို့ စစ်ဆေးမည်နည်း။
nc -zv <host> 179 ဖြင့် စစ်ဆေးနိုင်သည်။ Protocol စကားပြောစရာမလိုဘဲ TCP connection အောင်မအောင် စစ်ပေးသဖြင့် "Port ပိတ်နေခြင်း" နှင့် "BGP config မှားနေခြင်း" ကို သဲကွဲစွာ ခွဲခြားပေးနိုင်သည်။
traceroute ထက် mtr က အဘယ်ကြောင့် ပိုကောင်းသနည်း။
စဉ်ဆက်မပြတ် run ပေးပြီး probe ပေါင်းများစွာမှတစ်ဆင့် hop တစ်ခုချင်းစီ၏ packet loss ကို တိကျစွာ ပြသပေးသောကြောင့် ပြတ်တောင်းပြတ်တောင်း ဖြစ်တတ်သော ပြဿနာများကို ဖော်ထုတ်ပေးနိုင်သည်။
Terminal တွင် run ရသော်လည်း cron အောက်တွင် script fail ဖြစ်ရသည့် အကြောင်းရင်းကား အဘယ်နည်း။
cron သည် minimal environment ဖြင့်သာ run ပါသည် — PATH အပြည့်အစုံ မရှိပါ၊ shell profile မရှိပါ။ Script အတွင်း ဖိုင်လမ်းကြောင်း အားလုံးကို Absolute Path သုံးပါ၊ log ထဲသို့ redirect လုပ်ပါ။
Git ဆိုင်ရာ မေးခွန်းများ¶
ကွန်ရက် Configuration အပြောင်းအလဲများကို မည်သို့ ခြေရာခံမည်နည်း။
Configs များကို Git တွင် သိမ်းဆည်းပြီး အချိန်ဇယားဖြင့် snapshot ယူသည်။ Timestamps များကို sed ဖြင့် ဖြတ်ထုတ်ပြီး git diff --quiet ဖြင့် မပြောင်းလဲပါက commit ကျော်သွားစေခြင်းဖြင့် သန့်ရှင်းသော history ကို ရယူသည်။
Push ပြီးသား အမှားတစ်ခုကို နောက်ပြန်ဆုတ်ရန် revert သုံးမည်လား၊ reset သုံးမည်လား။
revert ကိုသာ သုံးမည်။ ၎င်းသည် မူလ commit ကို ဖျက်ပယ်သော commit အသစ်တစ်ခု တည်ဆောက်ပေးသဖြင့် history မပျက်စီးဘဲ အခြားသူများ၏ clone နှင့် တစ်ပြေးညီ ဆက်လက် ရှိနေစေသည်။ reset --hard သည် history ကို ဖျက်ဆီးပစ်သဖြင့် အခြားသူများ၏ repo ကို ပျက်စီးစေသည်။
Staging Area သည် အဘယ်အတွက်နည်း။
မိမိပြင်ဆင်ထားသော ပြောင်းလဲမှုများထဲမှ အချို့ကိုသာ ခွဲထုတ် commit လုပ်နိုင်စေရန် ဖြစ်သည်။ git add -p ဖြင့် သက်ဆိုင်ရာ အပိုင်းအစများကို ရွေးချယ်နိုင်ပြီး မိမိကိုယ်တိုင် ပြန်လည်စစ်ဆေးသည့် သဘောလည်း သက်ရောက်သည်။
စက် Password တစ်ခုကို မတော်တဆ commit လုပ်မိပါက မည်သို့ လုပ်ဆောင်မည်နည်း။
Credential ကို ချက်ချင်း အသစ်လဲလှယ် (rotate) ရမည်။ History ပြင်ဆင်ခြင်းသည် မိမိ repo မှ ပျောက်သွားသော်လည်း အခြားသူများ၏ clone သို့မဟုတ် CI caches များမှ မပျောက်သွားပါ။ ပေါက်ကြားသွားပြီဟု သဘောထားပြီး စက်ပေါ်တွင် password အသစ် ပြောင်းလဲခြင်းသာလျှင် တစ်ခုတည်းသော စိတ်ချရသည့် ဖြေရှင်းနည်း ဖြစ်သည်။ ထို့နောက် .gitignore ထဲ ထည့်ပါ။
Kernel Networking & Packet Diagnostics¶
TCP TIME_WAIT နှင့် CLOSE_WAIT အကြား ခြားနားချက်ကား အဘယ်နည်း။
TIME_WAIT သည် ချိတ်ဆက်မှု အရင်ပိတ်သူဘက်တွင် ရှိပြီး နောက်ဆုံး ACK ရောက်ရှိစေရန်နှင့် လမ်းခုလတ်ရှိ packets များ ကုန်ဆုံးစေရန် 2MSL ကြာ စောင့်ဆိုင်းခြင်း ဖြစ်သည်။ CLOSE_WAIT သည် တစ်ဖက်က ပိတ်ပြီးနောက် မိမိဘက် application က close() မခေါ်ဘဲ စောင့်နေခြင်း ဖြစ်သည်။ CLOSE_WAIT များပြားနေပါက Application တွင် socket resource leak bug ရှိနေခြင်း ဖြစ်သည်။
tcpdump တွင် bitwise filtering ဖြင့် TCP SYN packets များကိုသာ မည်သို့ capture လုပ်မည်နည်း။
tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack == 0'
tcp-syn သည် bit position 1 (တန်ဖိုး 2) ကို စစ်ဆေးပြီး initial handshake packets များကိုသာ သီးသန့် ခွဲထုတ်ပေးသည်။
Linux ရှိ Policy-Based Routing (PBR) ကို ရှင်းပြပါ။
PBR သည် destination IP သာမက Source IP သို့မဟုတ် TOS အပေါ် မူတည်၍ traffic ကို လမ်းကြောင်းလွှဲပေးခြင်း ဖြစ်သည်။ ip rule list ဖြင့် စစ်ဆေးနိုင်ပြီး custom table များထံသို့ လမ်းကြောင်းညွှန်ပေးသည် (ip route add ... table 100)။
Network Namespaces (netns) သည် network stacks များကို မည်သို့ သီးခြားခွဲထုတ်သနည်း။
netns တစ်ခုစီတွင် ကိုယ်ပိုင် routing table၊ iptables rules၊ interfaces၊ နှင့် socket bindings များ ပါဝင်သည်။ Virtual ethernet pairs (veth) ဖြင့် namespaces များကို host bridges သို့မဟုတ် အခြား namespaces များနှင့် ချိတ်ဆက်ပေးသည်။
Layer 1 & Physical Infrastructure¶
DOM/DDM ဆိုသည်မှာ အဘယ်နည်း၊ အဘယ်ကြောင့် စောင့်ကြည့်ရသနည်း။
Digital Optical Monitoring (DOM) သည် Tx/Rx optical power (dBm)၊ laser bias current၊ နှင့် အပူချိန်တို့ကို တိုင်းတာပေးသည်။ Rx power ကျဆင်းမှုကို စောင့်ကြည့်ခြင်းဖြင့် link လုံးဝမပြတ်မီ fiber ပျက်စီးမှု သို့မဟုတ် optical attenuation ကို ကြိုတင်သိရှိနိုင်သည်။
Single-Mode Fiber (SMF) နှင့် Multi-Mode Fiber (MMF) ၏ ခြားနားချက်ကား အဘယ်နည်း။
MMF သည် ပိုကျယ်သော 50 µm core ကို သုံးပြီး 850nm lasers ဖြင့် အကွာအဝေးတို (100m အောက်) အတွက် သုံးသည်။ SMF သည် သေးငယ်သော 9 µm core ကို သုံးပြီး 1310nm/1550nm lasers ဖြင့် အကွာအဝေးဝေး (10km ကျော်) အတွက် သုံးသည်။ ရောနှောတပ်ဆင်မိပါက ပြင်းထန်သော optical loss ဖြစ်ပေါ်သည်။
Correctable နှင့် Uncorrectable FEC errors ၏ ခြားနားချက်ကား အဘယ်နည်း။
Correctable FEC errors များသည် algorithm က အောင်မြင်စွာ ပြန်လည်ပြင်ဆင်ပေးနိုင်ပြီး packet loss မရှိပါ။ Uncorrectable FEC errors များသည် ပြင်ဆင်နိုင်သည့် အတိုင်းအတာထက် ကျော်လွန်သွားသဖြင့် Physical layer တွင် packet drops တိုက်ရိုက် ဖြစ်ပေါ်စေသည်။
Optical Power ကို mW မှ dBm သို့ မည်သို့ ပြောင်းလဲတွက်ချက်သနည်း။
P_{\text{dBm}} = 10 \cdot \log_{10}(P_{\text{mW}})။ ဥပမာ 1.0\text{ mW} = 0\text{ dBm} ဖြစ်ပြီး 0.5\text{ mW} = -3\text{ dBm} (3 dB loss သည် စွမ်းအင် ၅၀% ကျဆင်းသွားခြင်း ဖြစ်သည်)။