Friday, March 30, 2012

Linux commands (2)

အသုံးတည့္တဲ့ Linux command ေလးေတြ ၊ bash shell မွာ သုံးလို႕ရတဲ့ ပံုစံေလးေတြ ဟိုးအရင္ကေရးဖူးပါတယ္ ။

Linux commands (1)

အခုက်ေနာ္တို႕ ေန႕စဥ္ အသုံးမ်ားတဲ့ command ေလးေတြကို ၾကည့္ရေအာင္။

top
 top command က Linux မွာေတာ့ Task Manager ပါပဲ။ လက္ရွိ run ေနတဲ့ process ေတြရဲ့ PID ေတြ CPU usage ၊ Memory usage ေတြျပပါတယ္ ။ Process တစ္ခုခုက CPU usage အရမ္းမ်ားေနသလား ၊ လိုအပ္တာထက္ျပီျပီး memory usage တက္ေနလား top ကေနၾကည့္ေလ့ရွိပါတယ္။

ဒါ Linux Administrator ေတြ အလုပ္လုပ္ခ်င္ေယာင္ေဆာင္တဲ့ command ပါ။ ဘာအလုပ္မွ မရွိရင္ terminal ေလးတစ္ခုဖြင့္ top ေလး run ထားျပီး အလုပ္လုပ္ေနသလိုလို အေယာင္ေဆာင္ေနလို႕ရတယ္။ Process ေတြက တက္လာလိုက္ ေပ်ာက္သြားလိုက္ေန ၊ terminal ေပၚမွာ ရွုပ္ေနေတာ့ မသိတဲ့လူၾကည့္ရင္ အလုပ္ေတြ လုပ္ေနတယ္ထင္မွာပဲ။

kill / killall
Process တစ္ခုခု hang ေနရင္ပဲျဖစ္ျဖစ္ ၊ မလိုအပ္တဲ့ process မို႕လို႕ end လုပ္ခ်င္ရင္ပဲျဖစ္ျဖစ္ linux မွာေတာ့ kill တယ္လို႕ သုံးပါတယ္။ kill နဲ႕ killall ဘာကြာလည္းဆို ေယဘူရေျပာရရင္ေတာ့ kill က PID နဲ႕ kill ရျပီးေတာ့ killall ကေတာ့ process name နဲ႕ သုံးပါတယ္။ killall မွာ interactive mode တို႕ ၊ specific user's process ပဲ kill တာတို႕လုပ္လို႕ရပါတယ္ ။

man
Nix user ေတြ Admin ေတြ ဘယ္လိုမွ ကင္းရွင္းေအာင္ေနလို႕မရတဲ့ command ပါပဲ။ Command တစ္ခုခုရဲ့ sub command ေတြ parameter ေတြ syntax ေတြေမ့ေနရင္ man နဲ႕ ျပန္ၾကည့္ရတာပဲ။ Manual ဆိုတဲ့ စကားလုံးကို အတိုေခၚတာပါ။ Man page လို႕ေခၚတဲ့ command manual ကို ျပန္ေဖာ္ျပပါတယ္။

ls
ေန႕တိုင္း သုံးၾကတဲ့ command တစ္ခုပါ။ DOS ရဲ့ dir command ရဲ့ Linux version ေပါ့။ List ဆိုတဲ့ စကားလုံးကို အတိုယူထားတာပါ။ ls ပဲ႐ိုက္ရင္ file / folder list ပဲျပပါတယ္။ ls -l ဆိုရင္ေတာ့ file size ေတြ ၊ time stamp ေတြနဲ႕ျပပါတယ္။ File size ကို MB ေတြ GB ေတြနဲ႕ ျပေစခ်င္ရင္ ls -lh လို႕ ႐ိုက္ရပါတယ္။

pwd
လက္ရွိ ကိုယ္ဘယ္ path ေအာက္မွာ ေရာက္ေနလည္း ျပန္ျပန္ၾကည့္တဲ့ command ပါ။ Print Working Directory ဆိုတာကို အတိုေခၚတာပါ။ တစ္ခါတစ္ေလ ကိုယ့္ home directory ထဲက backup file ကို ျပင္ေနမိတာလား ၊ /etc/ ေအာက္က တကယ့္ config file ကို ျပင္ေနမိတာလားမေသခ်ာရင္ ကိုယ္ဘယ္ေရာက္ေနလည္း ျပန္ၾကည့္ရတာေပါ့ ။

Linux command ေတြက ေျပာရရင္ အမ်ားၾကီးပါ ။ ေန႕တိုင္း သုံးျဖစ္တာေလးေတြေလာက္ပဲ အခု ေရးထားတာပါ ။ ေန႕တိုင္းမဟုတ္ေပမဲ့ မၾကာမၾကာ သုံးတဲ့ less / more တို႕ tar တို႕ tail / head တို႕ ေနာက္မွ ေရးေတာ့မယ္ ။ Linux command list ကို ဒီေအာက္က link မွာ ၾကည့္ႏိုင္ပါတယ္ ။
http://www.oreillynet.com/linux/cmd/

Thursday, March 29, 2012

chkconfig script သို႕မဟုတ္ init script

ဟိုေန႕က client တစ္ခုက အင္ဂ်င္နီယာက သူဟာဟာသူေရးထားတဲ့ script တစ္ခုကို server boot time မွာ run ခ်င္လို႕တဲ့ လွမ္းေမးတယ္ ။ သူတို႕ က RHEL 6 သုံးေနတာပါ ။ အဲဒါနဲ႕ init script ေလးေရးျပီး init.d ထဲထဲ့ထားလိုက္လို႕ ျပန္ေျပာလိုက္တယ္။ ေနာက္ေန႕က် ေရးေပးပါတဲ့။ သူက ဘာ script run ခ်င္မွန္းမသိတာနဲ႕ template ပံုစံေလးေရးေပးလိုက္တယ္။

( Note: blogspot မွာ script ေရးျပရတာ ေတာ္ေတာ္ စိတ္ညစ္စရာ ေကာင္းတာပဲ syntax အကုန္ေပ်ာက္ျပီး left align ေတြျဖစ္ကုန္တယ္ )


#! /bin/bash
# (script) init script
###
# chkconfig: 235 35 55
# description: Starting ( your script ) at boot up

case "$1" in
start)
/path/to/your/script &
echo "(script) is starting"
;;
stop)
kill -9 `ps -ef | grep (script) | grep -v grep| cut -d" " -f6`
echo "(script) is stopping"
;;
*)
exit 1
echo "Usage : /sbin/service (script) {start|stop}"
esac

exit 0


(script) ဆိုတဲ့ ေနရာေလးေတြ မွာ ကိုယ့္ script နဲ႕ အစားထိုးပါလို႕ဆိုျပီး ေပးလိုက္တယ္ ။ အဆင္ေျပသြားတယ္တဲ့ ။ Init script က ဒီ syntax နဲ႕ပဲ အလုပ္လုပ္ပါတယ္ ။ ကိုယ့္ဟာကိုယ္ တျခား script တစ္ခုခုကို စခ်င္လည္း ဒီ template ကိုသုံးလို႕ရပါတယ္ ။ အေရးၾကီးတာ No.4 လိုင္းပါ ။ အဲမွာ chkconfig 235 35 55 လို႕ေပးထားပါတယ္ ။

အေရွ႕ဆုံးက 235 ဆိုတာက ဒီ script ကို run မဲ့ runlevel ေတြပါ ။ Runlevel ဆိုတာ ဘာလည္းမေသခ်ာရင္ ရွာဖတ္ၾကည့္ေစခ်င္ပါတယ္။ ပံုမွန္အားျဖင့္ 0 to 6 ရွိပါတယ္ ။
0 = shutdown ၊
6 = reboot ၊
1 = single user mode
2 = multi-user mode without networking
3 = multi-user mode with networking
4 = User-definable
5 = multi-user mode with networking + GUI


ဒီ init script မွာဆို လိုခ်င္တဲ့ service / script ကို runlevel 2 , 3 နဲ႕ 5 မွာပဲ စမယ္လို႕ ေျပာထားပါတယ္ ။

အေနာက္က 35 နဲ႕ 55 က script ကို boot up time မွာစမဲ့ priority နဲ႕ shutdown time မွာ kill မဲ့ priority ပါ။ /etc/rcx.d/ ထဲမွာ script ေတြကို S55httpd ၊ K55httpd ဆိုျပီး အေရွ႕မွာ Sxx ၊ Kxx ေတြနဲ႕ ရွိေလ့ရွိပါတယ္။ ဒါကဘာကို ေဖာ္ျပတာလည္းဆိုရင္ ၊ ဆိုၾကပါစို႕ rc3.d ထဲမွာ S10sshd နဲ႕ S55httpd ဆိုျပီးရွိတယ္ ။ ဒါဆို တကယ္လို႕ server က runlevel 3 ကို run တယ္ဆိုရင္ Inittab က rc3.d ထဲက start script ေတြကို အစီအစဥ္အလိုက္ စပါတယ္ ။ ဒီမွာဆို S10 ျဖစ္တဲ့ sshd က အရင္စပါလိမ့္မယ္ ၊ ေနာက္မွ S55 ျဖစ္တဲ့ httpd က စပါလိမ့္မယ္။ အဲေတာ့ ကိုယ့္ script ကို ေစာေစာစီးစီး စေစခ်င္ရင္ အဲမွာ 35 ေနရာမွာ နံပါတ္ေသးေသး ေပးရပါလိမ့္မယ္ ။ rcx.d ကို ဖြင့္ၾကည့္ရင္ ကိုယ့္ script က ဘယ္အခ်ိန္ေလာက္မွာ စရင္ အဆင္ေျပမလည္း စဥ္းစားလို႕ရမွာပါ။ အေနာက္က 55 က လည္း ထိုနည္းတူပါပဲ ။ Shutdown လုပ္တဲ့အခ်ိန္မွာ ေစာေစာ kill ေစခ်င္ရင္ နံပါတ္ေသးေသးေပးပါ။ ေနာက္ဆုံးမွ kill ေစခ်င္ရင္ 99 လို႕ေပးလိုက္ပါ။

ဒီ init script က သူ run ခ်င္တာကို root အေနနဲ႕ run ဖို႕ ေရးထားတာပါ ။ တကယ္လို႕ တျခား user အေနနဲ႕ run ခ်င္ရင္ လိုင္းနံပါတ္ 9 မွာ su ကိုသုံးရပါမယ္ ။ ဒါဆို ဒီလိုျဖစ္သြားမယ္

su username -c /path/to/your/script &


Stop လုပ္တဲ့ အပိုင္းကေတာ့ လြယ္လြယ္ကူကူ PID ကိုရွာျပီး kill လိုက္တာပဲ ေရးထားပါတယ္ ။

ျပီးရင္ေတာ့ ဒီ init script ေလးကို /etc/init.d/ ေအာက္ထဲမွာ သြားထားရပါမယ္။ testscript လို႕ filename ကိုေပးလိုက္တယ္ ဆိုပါေတာ့။ ျပီးရင္ ဒါကို executable ျဖစ္ေအာင္ ေပးရပါတယ္။ ဒီ command ကို႐ိုက္ပါ ။
# chmod +x /etc/init.d/testscript


ျပီးရင္ chkconfig မွာ register လုပ္ရပါတယ္ ။ /etc/init.d ေအာက္ထဲမွာရွိတိုင္း rcx.d မွာမရွိပါဘူး ။ အဲထဲကို သက္ဆိုင္ရာ S နံပါတ္ K နံပါတ္နဲ႕ ေရာက္ေအာင္က register ရပါတယ္ ။
# chkconfig --add testscript


အဲဒါျပီးရင္ ကိုယ့္ရဲ့ script က server bootup တိုင္းမွာ သူ့ဘာသာသူ start ေနပါလိမ့္မယ္

( Note : rcx.d ဆိုတာ nix နဲ႕ နဲနဲ ရင္းႏွီးရင္ သိပါတယ္။ /etc ေအာက္မွာ rc1.d ၊ rc2.d ဆိုျပီး rc5.d အထိရွိပါတယ္ ။ သက္ဆိုင္ရာ runlevel မွာ စတဲ့ service ေတြရဲ့ start script ၊ stop script ေတြက အဲဒီထဲမွာရွိပါတယ္ ။ )

Divinity