Showing posts with label Linux. Show all posts
Showing posts with label Linux. Show all posts

Thursday, February 7, 2013

Why CentOS ?

System Engineer ဒါမွမဟုတ္ Unix / Linux engineer လုပ္ဖို႕ ရည္ရြယ္ခ်က္ထားရင္ Ubuntu လို OS မ်ိဳးထက္ CentOS ကို ပိုေလ့လာဖို႕ ေျပာဖူးပါတယ္။ ဘာလို႕လည္း ? Ubuntu လည္း Server သုံးလို႕ရတယ္၊ Debian လည္း ေတာ္ေတာ္ေကာင္းတယ္၊ CentOS က ဘာပိုသာသလည္း ?

ဒီလိုေမးရင္ေတာ့ Technically ဘာမွ ပိုမသာဘူး လို႕ပဲေျဖရပါမယ္။ Package update ေတြမွာဆိုလည္း Debian / Ubuntu ကပိုျမန္တယ္။ Ubuntu နဲ႕ Debian မွာဆိုရင္ေတာ့ Server အတြက္ဆိုရင္ Debian ကပိုေကာင္းေနပါေသးတယ္။ Free Opensource ျဖစ္ခ်င္း community အားေကာင္းျခင္းေတြေၾကာင့္ Debian နဲ႕ Ubuntu က SME server ေတြမွာ Redhat / CentOS ထက္ ေနရာပိုယူလာႏိုင္ပါတယ္။ ဒါေပမယ့္.... ဒါဟာ စာလုံးၾကီးၾကီးနဲ႕ ေရးသင့္တယ့္ 'ဒါေပမယ့္'ပါ ..

Enterprise environment ေတြမွာ Redhat ကို ေက်ာ္ႏိုင္တယ့္ Linux မရွိေသးဘူးလို႕ပဲ ေျပာရပါမယ္။ Commercial support ဆိုတာကို ခဏေမ့ထားျပီး server တစ္ခုအတြက္ တျခားအေၾကာင္းအရာေတြကို ထဲ့စဥ္းစားၾကည့္ရေအာင္။ Enterprise ၾကီးတစ္ခုရဲ့ database server လို႕ေျပာရင္ MySQL , PostgreSQL တို႕မျဖစ္ဖို႕မ်ားပါတယ္။ Oracle ျဖစ္ရင္ျဖစ္မယ္၊ IBM DB2 လည္းျဖစ္ရင္ျဖစ္မယ္၊ ဒီလို giant commercial product ၾကီးေတြက သူတို႕ product အတြက္ support ကို branded OS ေတြအတြက္ပဲ ေပးပါတယ္။ ဆိုလိုတာကေတာ့ Oracle က AIX , HP-UX မွာပဲ support လုပ္တယ္လို႕ ေျပာထားရင္ ၊ တျခား OS မွာသြင္းလို႕ ျဖစ္သမွ် ျပသနာကို သူတို႕တာဝန္မယူပါဘူး။ သုံးေနရင္းနဲ႕မွ ျဖစ္ရင္ သူတို႕ product က ျပသနာဆိုရင္ေတာင္ unsupported configuration ဆိုျပီး technical support ေပးဖို႕ ျငင္းႏိုင္ပါတယ္။ User ဘက္က supported hardware / supported OS မွာမသုံးရင္ သူတို႕ ျပသနာမဟုတ္ဖူးလို႕ သတ္မွတ္ပါတယ္။ အဲေတာ့လည္း Enterprise company ၾကီးေတြက အမွားမခံႏိုင္တယ့္ Server ေတြမွာ branded OS ၾကီးေတြသုံးဖို႕ပဲ စဥ္းစားပါတယ္။ ဒါက Redhat ပိုေနရာရရျခင္း အေၾကာင္းတစ္ခု။

ေနာက္တစ္ခုက stability ပါ။ Redhat မွာ fancy new stuffs ေတြမပါပါဘူး။ Package တိုင္းက ေနာက္ဆုံး up to date ကိုမရႏိုင္ပါဘူး။ ဒါက drawback လို႕ေျပာလို႕လည္း ရပါတယ္။ လုံးဝ stable လို႕သတ္မွတ္တယ့္ version အထိပဲ ေပးပါတယ္။ New feature ေတြကိုစမ္းသပ္ျပီး အဆင္ေျပရင္ေတာ့ back ported လုပ္ေပးပါတယ္။

ေနာက္တစ္ခုက Support။ Commercial Support ဆိုတာ ပိုက္ဆံေပးရတာကိုပဲ တြက္လို႕မရပါဘူး။ တစ္ခုခုျဖစ္ရင္ ေနာက္မွာ ဒီ product ကို specialize လုပ္တဲ့ expert ေတြရွိတယ္လို႕ စိတ္ထဲထားလို႕ရပါတယ္။ Red Hat ရဲ့ L3 support ေတြက အမ်ားအားျဖင့္ RH ရဲ့ သက္ဆိုင္ရာအပိုင္းကို in and out သိတဲ့သူေတြပါ။ ဒါ Commercial Support ေတာ္ေတာ္မ်ားမ်ား အတူတူပါပဲ။ အဲဒီအတြက္ ျပသနာ ေတာ္ေတာ္မ်ားမ်ားကို ေနာက္ဆုံး ကိုယ့္ IT team က မေျဖရွင္းႏိုင္ရင္ေတာင္၊ သက္ဆိုင္ရာ support team က ကူညီႏိုင္လိမ့္မယ္လို႕ ယံုၾကည္လို႕ရပါတယ္။

ဒါေတြက MNC ေတြ Enterprise company ၾကီးေတြက Red Hat ကို Debian ထက္ ပိုသုံးတဲ့ အေၾကာင္းရင္းေတြထဲက တခ်ိဳ႕ပါ။ အဲေတာ့ Debian ကိုကြၽမ္းက်င္တာထက္ Red Hat ကြၽမ္းက်င္တာက Big sh*t company ၾကီးေတြက ေခၚတယ့္ အလုပ္ေတြနဲ႕ ပိုအဆင္ေျပႏိုင္ပါတယ္။ ဒါေၾကာင့္ CentOS ကိုေလ့လာတာက ပိုျပီး အခြင့္အေရးရွိပါတယ္။ (SuSE ေလလာခ်င္ရင္လည္း OpenSuSE ေလ့လာပါ။ )

 တကယ္တမ္း Red Hat expertise လို႕ ေျပာရင္ OS တစ္ခုထဲနဲ႕ မရပါဘူး။ JBoss လို႕ middleware ေတြ၊ RH Cluster ေတြ၊ RHN Satellite တို႕ product ေတြပါ သိဖို႕ လိုလာမွာပါ။ ဒါက Career အရ ေနာက္မွ Advance ျဖစ္သြားပါလိမ့္မယ္။  ဒီ post က ႏိုင္ငံျခားကို ထြက္ျပီး အလုပ္ရွာဖို႕ ရည္ရြယ္ထားၾကတဲ့ Administrator level အတြက္ကို ရည္ရြယ္တာပါ။ Linux ကို Career အျဖစ္ေရြးခ်င္တယ္ဆိုျပီး ၊ ဒါေပမဲ့ ေလ့လာတာ မွားေနရင္ အလုပ္ရွာရင္ အခက္အခဲေလးေတြ ရွိတတ္ပါတယ္။  ႏိုင္ငံျခားကို ထြက္ျပီး အလုပ္လုပ္ၾကရင္ အလုပ္ဝင္ဝင္ခ်င္းမွာ ရွိတတ္တဲ့ stress နဲ႕ ကိုယ္ေသခ်ာမသိတာကို စမ္းတဝါးဝါးလုပ္ရရင္ ျဖစ္တဲ့ stress က တခ်ိဳ႕ကို  လက္ေျမႇာက္ျပီးျပန္ခ်င္ေလာက္ေအာင္ျဖစ္ေစတဲ့အထိ ဆိုးပါတယ္။ အဲဒါေၾကာင့္ Linux သမားလုပ္ခ်င္တယ္၊ ႏိုင္ငံျခားထြက္မယ္ဆိုရင္ေတာ့ CentOS ကိုေလ့လာဖို႕ အၾကံေပးခ်င္ပါတယ္။

.............
ဒီ စာက ေရးထားတာ လြန္ခဲ့တဲ့ ႏွစ္ႏွစ္ကပါ ။ Linux တစ္ရပ္စာ ေမ်ာ္စင္ post သုံးခုျပီးေတာ့ ေရးထားတာ။ အခု စာျပန္ေရးမည္စဥ္းစားေတာ့ ဘာေရးရမွန္းမသိလို႕ ဒါကို ျပန္ရွာျပီး တင္လိုက္တယ္ ဟဲဟဲ ။ စာျပန္ေရးဖို႕ ၾကိဳးစားပါအုန္းမယ္ ။

Divinity

Related Posts
Linux တစ္ရပ္စာ ေမွ်ာ္စဥ္ထက္က ျမင္ကြင္း
Linux တစ္ရပ္စာ ေမွ်ာ္စဥ္ထက္က ျမင္ကြင္း (2)
Linux တစ္ရပ္စာ ေမွ်ာ္စဥ္ထက္က ျမင္ကြင္း (3)


ဪ ssh logon attempt ေတြ

Log file ေတြထဲမွာ လိုခ်င္တာရွာရတာ အခက္ဆုံးနဲ႕ စိတ္ညစ္စရာ အေကာင္းဆုံးက auth.log ျဖစ္မယ္ထင္တယ္။ Internet facing server ေတြမွာ ( Internet ကတိုက္႐ိုက္သုံးလို႕ရတယ့္ ၊ company အတြင္းပဲသုံးတာမဟုတ္တယ့္ server မ်ိဳးကိုေျပာခ်င္တာပါ) တစ္နာရီမွာ failed login attempt က 500 ေလာက္ရွိတတ္ပါတယ္။ ေျပာရရင္ေတာ့.. ဒါပံုမွန္ပါ။ တကယ္ target ထားျပီး လုပ္တာမ်ိဳးမဟုတ္ပါဘူး။ Botnet တစ္ခုက IP range တစ္ခုအတြင္း ရွိသမွ် server ေတြကို dictionary ေသးေသးတစ္ခုနဲ႕ attempt လုပ္ၾကည့္တာေလာက္ပဲရွိမယ္။ ရည္ရြယ္ခ်က္ရွိရွိေတာင္မဟုတ္ဖူး၊ ဒီလိုပဲ ေရာေကာေသာေကာပါသြားတာေတာင္ ဒီေလာက္ေတာ့ရွိမယ္။ ဟုတ္တယ္ တစ္ခါတစ္ေလ ကံေကာင္းရင္ တစ္နာရီေလာက္အတြင္း attempt ေလး ငါးေသာင္းေလာက္လဲျဖစ္ႏိုင္တယ္။ Failed attempt ပဲ ျပသနာမဟုတ္ပါဘူးလို႕ေျပာလို႕ရေပမယ့္ attempt လုပ္ခံရတာဟာ cracked ျဖစ္ဖို႕ တစ္ဆင့္နီးတာပဲ။ ( က်ေနာ္အတြက္ကေတာ့ ဘာပဲျဖစ္ျဖစ္ မ်က္စိေနာက္ပါတယ္။)

SSH service ရွိေနသမွ် ဒါမ်ိဳးေတြရွိမွာပဲ၊ SSH service disable လိုက္တာေကာင္းမယ္။ ဟုတ္တာေပါ့။ ဒါဆို attacker တင္မဟုတ္ဖူး ကိုယ္ပါဝင္လို႕မရေတာ့ဘူး ဟဲဟဲ၊ ဒါဆိုအလုပ္နည္းတာေပါ့။ အမွန္က SSH service run ထားရင္ သတိထားသင့္တာေလးေတြ ေရးမလို႕ပါ။ က်ေနာ္လို failed attempt ေတြကိုမ်က္စိေနာက္တဲ့သူအတြက္ ၊ ဒါမ်ိဳးေတြ နည္းသြားေအာင္လို႕ လုပ္လို႕ရတဲ့ နည္းေလးေတြေပါ့။

1. Root login
SSH ကေန direct root login ကို disable လုပ္ထားသင့္ပါတယ္။ Normal user နဲ႕ပဲဝင္ျပီး sudo သုံးတာျဖစ္ျဖစ္ ၊ root user နဲ႕သုံးရမွ ေက်နပ္ရင္လည္းေနာက္မွ su ျပန္ေျပာင္းျပီးျဖစ္ျဖစ္သုံးသင့္ပါတယ္။ ဘာလို႕လည္းဆို အေၾကာင္းျပခ်က္တစ္ခုက ၊ bot ေတြရဲ့ အဓိက target က known user account ေတြကိုပါ။ Linux / Unix မွန္ရင္ root ဆိုတယ့္ နာမည္နဲ႕ user ကရွိမွာပါပဲ။ အဲေတာ့ username မွန္းစရာမလိုပဲ password ေလာက္ပဲမွန္းရေတာ့မွာေပါ့။ အဲဒါမ်ိဳးမျဖစ္ေအာင္ root login ကို disable ထားျပီး admin ဆိုျပီး user account လုပ္ျပီးသုံးရင္လည္း သိပ္မထူးဘူးေပါ့။ ျဖစ္ႏိုင္ရင္ အဲလို username မ်ိဳးကိုလည္း မသုံးသင့္ပါဘူး။

2. SSH service port
ဒါက မထင္မွတ္စရာ အသုံးတဲ့ပါတယ္။ SSH attempt အေတာ္မ်ားမ်ားက port 22 ကိုပဲ ၾကိဳးစားၾကတာမ်ားပါတယ္။ Port scan တစ္ခါဖတ္၊ တစ္ခါ attempt လုပ္ဆိုတာမ်ိဳးက bot နဲ႕ random စမ္းတယ့္သူမ်ိဳးက သိပ္မၾကိဳးစားပါဘူး။ SSH port ကို တျခား port တစ္ခုေျပာင္းသုံးသင့္ပါတယ္။

3. public-key authentication
ျဖစ္ႏိုင္ရင္ public-key authentication only သုံးသင့္ပါတယ္။ Password နဲ႕ authenticate လုပ္တာကို လံုေလာက္တဲ့ security measure လို႕ မသတ္မွတ္ေတာ့တာ ၾကာပါျပီ။ SSH tunnel ေဆာက္တယ့္အခ်ိန္ username / password အဆင့္မေရာက္ခင္မွာ key အရင္စစ္ပါတယ္။ ( ssh -v နဲ႕ စမ္းၾကည့္ပါ။) တကယ္လို႕ public key authentication only ဆိုရင္ rsa / dsa key မမွန္ရင္၊ မေတြ႕ရင္ကို authentication break out ျဖစ္သြားပါျပီ ။ Username / password အဆင့္ကို မဆက္ေတာ့ပါဘူး။ အဲေတာ့ Security ပိုေကာင္းတယ္ေပါ့။ Log ကေတာ့ တက္အုန္းမွာပါ။

ေျပာလက္စနဲ႕မို႕လို႕ပါ။ Account password ေတြကို လြယ္လြယ္ကူကူမေပးသင့္ပါဘူး။ Username = admin , password = admin ဆိုတာမ်ိဳးကေတာ့ ပါသြားရင္နည္းေတာင္ နည္းေသးတယ္ေျပာရမွာပါပဲ။

ဆယ္မိနစ္မၾကာတယ့္ implementation ပါ။ ဒါေပမယ့္ security အရေတာ့ အမ်ားၾကီးကို ကြာသြားပါတယ္။ SSH brute force ကိုလည္း အတိုင္းအတာ တစ္ခုထိ ကာကြယ္ျပီးသားျဖစ္ပါတယ္။ တစ္ခါတစ္ေလေတာ့လည္း သိပ္မပ်င္းတာ ေကာင္းပါတယ္ :D

Divinity

Monday, July 30, 2012

Command ေတြကို Bash History ကေဖ်ာက္ရေအာင္




Bash မွာ ေရွ႕က႐ိုက္သြားတဲ့ history ကိုသိမ္းထားပါတယ္။ ျပန္ၾကည့္ခ်င္ရင္ 'history' ဆိုတဲ့ command နဲ႕ ျပန္ေခၚၾကည့္လို႕ရပါတယ္။ System administrator ေတြ ၊ system engineer ေတြ တစ္ခုခုေမ့သြားရင္ ျပန္ၾကည့္ဖို႕လည္း လြယ္သလို၊ Team လိုက္ဆိုရင္ သူမ်ားဘာလုပ္ထားလည္းျပန္ၾကည့္လို႕ ရတယ္။

တစ္ခါတစ္ေလ ကိုယ္႐ိုက္ထားတဲ့ command ကို သူမ်ားကိုမၾကည့္ေစခ်င္ဘူး။ 'root' ေပးမသုံးတဲ့ locked down system မွာဆိုရင္ ကိုယ့္ bash history နဲ႕ကိုယ္ရွိေပမဲ့ 'root' ကို share ျပီးသုံးၾကရင္ bash history ကတစ္ခုထဲ။ကိုယ္ဘာလုပ္သြားလည္း ေနာက္လူက history မွာျပန္ၾကည့္လို႕ရတယ္ ။ တစ္ခါတစ္ေလ ကိုယ္ troubleshoot လုပ္ထားပံုကို ေနာက္လူကို မသိေစခ်င္ရင္ ဘယ္လိုလုပ္မလည္း ? ( Team ေတြ Department ေတြ ကြဲတဲ့ Company ေတြမွာ အခ်င္းခ်င္းျပိဳင္ဆိုင္မႈေတြ ရွိပါတယ္။ ဟိုဘက္ Team ကေကာင္ေတြ စသုံးမက်ဘူးလို႕ ေျပာဖို႕ ေစာင့္ေနၾကေတာ့ ကိုယ့္အလွည့္က်ရင္လည္း ကိုယ့္ knowledge ကို တျခား team ကိုမေပးခ်င္တာေတြ ရွိတတ္ပါတယ္။)

တစ္ခါတစ္ေလၾက audit ေပါ့။ Server မွာ ျပသနာ တစ္ခုခုျဖစ္သြားရင္ ၊ ဘယ္သူ႕ေၾကာင့္လည္း ျပန္ရွာတယ္။ ကိုယ္ကအမွားလုပ္လိုက္မိလို႕ ျပန္ fix လုပ္ျပီး ဖုံးထားခ်င္ရင္ေတာင္ bash history ကလိမ္ဖို႕ ခက္တယ္။bash_history file ကို edit လုပ္ရင္လည္း file integrity ပ်က္တယ္။ ေနာက္ျပီး edit လုပ္ထားမွန္းက ေဖ်ာက္ဖို႕မလြယ္ ။

ကဲ ကိုယ္႐ိုက္ထားတဲ့ command ေတြ ဘယ္လို ေဖ်ာက္ထားမလည္း ?

'history' command ရဲ့ output ကိုတစ္ခ်က္ၾကည့္ရေအာင္ ။

  994  exit
  995  cd /etc
  996  ls
  997  ls
  998  vi rc.local
  999  ps -ef|more
 1000  exit

ဒီမွာ ဘယ္ဘက္က နံပါတ္ေတြကို offset လို႕ေခၚပါတယ္။ ညာဘက္ျခမ္းကေတာ့ command ေပါ့။ Offset number ကိုသိရင္ အဲ offset number ကို bash history ကေနဖ်က္ဖို႕ command ရွိပါတယ္။

'history' command မွာ '-d' ဆိုတဲ့ option ရွိပါတယ္ ။ ကိုယ္ဖ်က္ခ်င္တဲ့ command ကို history ကဖ်က္လို႕ရပါတယ္။ တစ္ခုပဲ ျပသနာက ။ 'history -d xx' ဆိုတဲ့ ဖ်က္လိုက္တယ္ဆိုတဲ့ line ၾကီးကေတာ့  history ထဲဝင္သြားတယ္။ ဥပမာ offset number 998 ( vi rc.local) ဆိုတာကို history ကဖ်က္ခ်င္တယ္ဆိုရင္ ' history -d 998' လို႕ ဖ်က္ရပါတယ္ ။ ဒါေပမဲ့ ေနာက္တစ္ခါ history ျပန္ၾကည့္ရင္ ဒီလိုၾကီး  ေပၚလိမ့္မယ္။

  994  exit
  995  cd /etc
  996  ls
  997  ls
  998 ps -ef|more
  999  exit
 1000  history -d 998

အဲေတာ့မွ ဘာဖ်က္ထားတာလည္းဆိုျပီး ရွုပ္ကုန္မွာ။ နည္းနည္း ပိုေကာင္းတဲ့ နည္းလမ္းေတြရွိပါတယ္ ။

Bash မွာ Shell Variable တစ္ခုရွိပါတယ္။ HISTCMD လို႕ေခၚတဲ့ Variable ပါ။ 'echo $HISTCMD' လို႕႐ိုက္ၾကည့္ရင္ နံပါတ္တစ္ခုကိုေပးပါလိမ့္မယ္။ အဲဒါက ေနာက္ command အတြက္ offset ပါ။ ခုနက 1000 အထိေရာက္ျပီးတဲ့ အခ်ိန္မွာ  'echo $HISTCMD' လို႕႐ိုက္ၾကည့္ရင္ 1002 ဆိုတဲ့ output ကိုေပးပါလိမ့္မယ္။ ဘာလို႕လည္းဆို 1000 က 'history -d 998' ဆိုတဲ့ command ျဖစ္ျပီး echo $HISTCMD က 1001 ပါ။ အဲေတာ့ output က ေနာက္ command အတြက္ ရမယ့္ offset 1002 လို႕ရတာပါ။ ဒီ Variable ကိုသုံးျပီး bash history ကိုလိမ္လို႕ရပါတယ္။

$HISTCMD က ေနာက္လာမဲ့ command ရဲ့ offset ကိုေပးတယ္လို႕ ခုနကေျပာထားတယ္ေနာ္။ $HISTCMD-1 ဆိုရင္ လက္ရွိ command ရဲ့ offset ေပါ့။ 'history -d (($HISTCMD-1)) ဆိုရင္ ဒီ command ကို bash history ကေန ျပန္ျပန္ဖ်က္ေနတာနဲ႕ အတူတူပဲ။

ေနာက္တစ္ခု သိရမွာက Bash ရဲ့ operator ေတြပါ ။ Bash ရဲ့ '&&' ဆိုတဲ့ operator က 'AND' ကို ကိုယ္စားျပဳပါတယ္။ Command ႏွစ္ခုကို တစ္ခုျပီး တစ္ခု ဆက္လုပ္သြားဖို႕ သုံးပါတယ္။ Package compilation အတြက္ 'make && make install' ဆိုတာမ်ိဳး႐ိုက္ျပီး ထမင္းသြားစာတာမ်ိဳးေပါ့။ ပထမ command က completed successful ျဖစ္ရင္ ဒုတိရ command ကို ဆက္အလုပ္လုပ္ပါတယ္။ Error ျဖစ္သြားရင္ေတာ့ ရပ္သြားတယ္။ Command ႏွစ္ခုျဖစ္ေပမဲ့ Bash History မွာေတာ့ offset တစ္ခုနဲ႕ entry တစ္ခုပဲ ဝင္ပါတယ္။

1003  ls -l && history

ကဲ ဒီေလာက္ဆို မွန္းမိေလာက္ပါျပီ ။ ႐ိုက္ခ်င္တဲ့ command ကို႐ိုက္ ၊ ျပီးရင္ေနာက္က && ခံျပီး 'history -d (($HISTCMD-1))' ထဲ့႐ိုက္ရင္ ကိုယ္႐ိုက္သမွ် bash history ထဲ မေရာက္ေတာ့ဘူး။ ဒါမ်ိဳးေပါ့ ..

# rm -rf /etc && history -d (($HISTCMD-1))

ဒါဆို /etc ကို ဖ်က္လိုက္တဲ့ command က history ထဲမေရာက္ေတာ့ဘူး။ 'history -d' ကို အေရွ႕မွာထားထား အေနာက္မွာထားထား တူတူပါပဲ။ တစ္ခါတစ္ေလ ေနာက္က ထဲ့႐ိုက္ဖို႕ေမ့သြားရင္လို႕ bash history ထဲေရာက္သြားရင္ေတာ့  ဒီလို ကြန္႕လိုက္ေပါ့။ ဒါဆို ေနာက္ဆုံး history ႏွစ္ခု ဖ်က္သြားလိမ့္မယ္။ ေရွ႕က ေမ့သြားတဲ့ command ေရာ ၊ ဒီဖ်က္တဲ့ဟာကိုေရာ။

# history -d $((HISTCMD-2)) && history -d $((HISTCMD-1))

Catch တစ္ခုေတာ့ ရွိပါတယ္။ ဒါက Bash Variable ပါ ။ ဒါေတာင္ Bash version အေဟာင္းေတြမွာ ဒီ Variable မရွိပါဘူး။ ksh တို႕ဘာတို႕မွာလည္း မရွိဘူး ထင္တယ္။  HISTCMD မရွိရင္ နည္းနည္း ေလး အလုပ္ပိုပါတယ္။

TMP=$(history | tail -1 | awk '{print $1}') && history -d $TMP

ဒါလည္း ေရွ႕ကထားထား ေနာက္ကထားထား ရပါတယ္ ။

႐ိုက္ရတာ ရွုပ္ရင္ ကိုယ့္ bashrc ထဲမွာ ကိုယ့္ဟာကို alias ေပးထားလိုက္ေပါ့ ။ ဒါေပမယ့္ trace မက်န္ေအာင္ဖ်က္ပါတယ္ဆို bashrc မွာ trace ၾကီးက်န္ေနမွာေတာ့ မမိုက္ပါဘူး ၊ ဒါေပမဲ့ က်ေနာ္လို lazy ေတြကေတာ့ ဝင္ဝင္ခ်င္း alias ေလးေပး ၊ ျပီး session close မလုပ္ခင္မွာ bashrc ကေန ျပန္ဖ်က္ျပီး အေပၚမွာေပးထားတဲ့အတိုင္း ေနာက္ဆုံး command ႏွစ္ခုဖ်က္ခဲ့လိုက္တယ္။

တစ္ခုေတာ့ Caution ေပးပါတယ္။ တစ္ခ်ိဳ႕ environment မွာ VPN နဲ႕မွ servers ေတြကို ဝင္လို႕ရျပီး VPN မွာ keystroke log လုပ္ထားတတ္ပါတယ္။ ဒါဆိုရင္ေတာ့ ဟဲဟဲ ။
ကဲ ကိုယ့္ trace ကိုယ္ ေဖ်ာက္ႏိုင္ပါေစ ။ က်ေနာ္ သိတဲ့ ၊ သုံးတဲ့ technique တစ္ခုကို share တာပါ ။ က်ေနာ္မသိတဲ့ catch ရွိေကာင္းရွိႏိုင္ပါတယ္ ။

Divinity

Tuesday, April 3, 2012

လာျပန္ျပီ Spam ေတြ


# mailq |  grep marketing@blahblah\.com | cut -d ' ' -f1 | tr -d '*!' | postsuper -d -

မေန႕က ထမင္းစားေနတုန္း ၊ Mail server ၾကီးက respond ေႏွးလို႕တဲ့ ။ ဒါကပုံမွန္လိုျဖစ္ေနလို႕ က်ေနာ္လည္း သိပ္ေတာင္ ဂ႐ုမစိုက္မိဘူး။ Mail Server က dedicated လည္းမဟုတ္ ။ ဒီ Server ေပၚမွာ Website 200 ေက်ာ္ ၊ Database 100 ေက်ာ္ ၊ DNS server အပါအဝင္ တျခား service ေတြကရွိေသးတယ္။ Mail Server က Postfix သုံးျပီး Domain 200 ေက်ာ္အတြက္ Mailbox 3000 ေလာက္ရွိတယ္။ Server က အေဟာင္း၊ ေရွ႕မွာ IPS ေလာက္မဟုတ္ရင္ေတာင္ spam filter ေကာင္းေကာင္းခံဖို႕ ေျပာတာ သုံးႏွစ္ေလာက္ရွိျပီ ။ ဒီတိုင္းပဲ ။ Website ေတြ ဘာျဖစ္ျဖစ္က က်ေနာ္တို႕ ဂ႐ုမစိုက္လို႕ရေပမယ့္ spam ဝင္လို႕ Server MTA နဲ႕ Spamd က ေလးလာရင္ ၊ mail delivery ေႏွးလာရင္ က်ေနာ္တို႕ ဖုန္းေတြ အဆက္မျပတ္ျမည္ပါျပီ ။ Server ကလည္း သိပ္ေကာင္းလွတာမဟုတ္ေတာ့ Mail Queue ထဲမွာ သုံးေထာင္ေလာက္ရွိရင္ စေလးလာေလ့ရွိပါတယ္။ ငါးေထာင္ေလာက္ဆို ေဘးခ်င္းကပ္ပို႕ရင္ေတာင္ ဆယ္မိနစ္ေလာက္ေနမွေရာက္တယ္။ Server ေပၚမွာက Opensource Spam filter တစ္မ်ိဳးပဲရွိတာမို႕ သိပ္ handle မလုပ္ႏိုင္ပါဘူး။ သူကလည္း 60% efficiency ေလာက္ပဲရွိတယ္ထင္တယ္။ ဘယ္ေတာ့မွ Spam ကိုႏိုင္တယ္လို႕မရွိဘူး။ ဒါမ်ိဳးက ျဖစ္ေနၾကမို႕လို႕  မေန႕က ဖုန္းေတြလာေတာ့ ေအးေဆးပဲ ။ ထမင္းစားေနလို႕ ျပီးရင္ ၾကည့္လိုက္မယ္လို႕ ေျပာလိုက္တယ္ ။

ရုံးျပန္ေရာက္ေတာ့လည္း က်ေနာ္က အလုပ္ထြက္ေတာ့မယ့္လူမို႕လို႕ ေတာ္႐ံု က်ေနာ္ ဝင္မပါပါဘူး။ က်ေနာ္ေနရာရဲ့ replacement အစ္ကိုၾကီးကလည္း ဒီေန႕ off ပါတယ္။ အငယ္တစ္ေယာက္ပဲရွိတယ္။ ဒါေပမဲ့ သူက က်ေနာ္စီက ဒီ hosting service ေတြကို handover လုပ္ယူထားရတဲ့ သူ ၊ ေနာက္ျပီး သူက Redhat certified System Administrator ။ အဟဲ ။ သူ မသိရင္ေတာင္ သူကသင္ရင္ သိပ္မၾကိဳက္ဖူး။ သူ႕ကိုပဲ Mail Service မွာ spam ဝင္တယ္ထင္တယ္ ၾကည့္လိုက္အုန္းလို႕ေျပာလိုက္မိတယ္။ Spam ဝင္ရင္ mailq မွာ deferred ေတြ ဘယ္လို ဖ်က္ဆိုတာေလာက္ေတာ့ သူ႕ကို ျပထားဖူးတယ္။ သူကလည္း CD drive ထဲသာ DVD ထဲ့ျပီး ဒီ server က boot မတက္ဘူးေျပာရင္ေျပာတာ၊ ဒါမ်ိဳးခိုင္းရင္ သူသိတယ္ ဆိုတာၾကီးပဲ။ လူေရွ႕မွာ သိပ္သင္လို႕ မရဘူး။ သူက က်ေနာ့ထက္ အသက္ေရာ လုပ္သက္ေရာၾကီးပါတယ္။ ဘာေတြလုပ္ေနခဲ့လည္းေတာ့ သိပ္မေသခ်ာဘူး။

သုံးနာရီေလာက္ အထိ mail send / receive ေႏွးေနေသးတာ က်ေနာ္သိပါတယ္။ ေရာက္လား မေရာက္လားသာ မသိတာ ။ ဒါေပမဲ့ accountability အတြက္ production server ေတြကို က်ေနာ္ login မဝင္ေတာ့ပါဘူး။ ဒါက်ေနာ့ ေနာက္ဆုံး အပတ္ေလ။ သူလည္း ၾကိဳးစားပန္းစားလုပ္ေနေတာ့ အဆင္ေျပလား သြားေမးလိုက္ေသးတယ္။ ေနာက္ေတာ့ GM က ဖုန္းဆက္တယ္။ ၾကည့္လိုက္ပါတဲ့ ၊ ငါ့ဖုန္း ၾကာရင္ explode ျဖစ္ေတာ့မယ္တဲ့။ Reseller ေတြကလည္း တဂြမ္ဂြမ္ဆက္ေနျပီ ။ ျဖစ္ေနတာ သုံးနာရီေလာက္ ရွိသြားျပီကိုး။

Login ဝင္ျပီး အရင္ဆုံး Mail Queue ကိုၾကည့္မိတယ္ ။ လြယ္လြယ္ကူကူ

# mailq | tail

လို႕ ၾကည့္ေတာ့ ေတာ္ေတာ္နဲ႕ return မလာဘူး ။ ေတာ္ေတာ္မ်ားေနလို႕ျဖစ္မယ္ လို႕စဥ္းစားျပီး mailq ပဲ႐ိုက္ၾကည့္လိုက္တယ္ ။ အဲမွာ စေတြ႕တာပဲ ။ ပုံမွန္ ေလးငါးေထာင္ေလာက္ဆိုရင္ mailq က ဆယ္စကၠန့္ေလာက္အတြင္းမွာတင္ ဆုံးပါတယ္။ ေပၚလာတာကလည္း ျမန္လို႕ လိုက္ဖတ္ဖို႕ မမွီပါဘူး။ ဒီတစ္ေခါက္ေတာ့ တစ္မ်က္ႏွာခ်င္း ေျဖးေျဖးခ်င္းေပၚေနတယ္။ ေတာ္ေတာ္ၾကာတဲ့အထိလည္း မျပီးေတာ့ escape လိုက္တယ္ ။ top နဲ႕ၾကည့္ေတာ့ load က postfix-queue process က အျမဲတန္း CPU usage 40% ေလာက္ တက္ေနတယ္။ ဒီေလာက္နဲ႕ေတာ့ mailq က အဲေလာက္ ေႏွးမေနသင့္ဘူးေပါ့။ အခုက mailq ထဲ mail ဘယ္ေလာက္ရွိေနမွန္းကို မသိရေသးဘူး။ 

ခုနက mailq ၾကည့္တုန္းက marketing@blahblah.com ဆိုတဲ့ mail ေတြ အမ်ားၾကီးေတြ႕လိုက္တယ္ ။ ျမင္လိုက္သမွ်အားလုံးနီးပါး သူ့ mail ေတြၾကီးပဲ။  အဲဒီ client ကိုလည္း က်ေနာ္သိပါတယ္။ ေတြ႕ကရာ click ျပီး မၾကာမၾကာ virus ဝင္ေလ့ရွိသလို password ကိုလည္း password တို႕ 123456 တို႕ သိပ္ေပးလြန္းလို႕ မၾကာမၾကာ ျပသနာ တက္ေလ့ရွိတယ္။ သူတို႕ mail address တစ္ခု ျပသနာျဖစ္ျပန္တာလား၊ သူတို႕ပဲ mail advertisement ကို စြတ္လုပ္ေနသလားမသိဘူး။ Maillog မွာ သြားရွာၾကည့္ေတာ့ ဒီ mail address marketing@blahblah.com ဆိုျပီး IP အစုံကေန authenticate လုပ္ထားတာေတြ႕လိုက္တယ္။ သြားျပီဆိုတာ ေသခ်ာပါတယ္။ သူတို႕ကို ဖုန္းဆက္အေၾကာင္းၾကားေပးဖို႕ တစ္ေယာက္ကိုေျပာလိုက္တယ္။

ဘယ္သူ႕မ်က္ႏွာမွမၾကည့္ပဲ ၊ ဖ်က္စရာရွိတာ ဖ်က္ တဲ့ေနရာမွာ က်ေနာ္ ထိပ္ဆုံးကပါမယ္ထင္တယ္။ ဘာမွလည္း ၾကည့္လို႕မရေတာ့ အရင္ဆုံး postfix service ကို ခဏပိတ္လိုက္တယ္။ Lag ေနတာလည္း ေတာ္ေတာ္ၾကာျပီမို႕ တစ္မိနစ္ေလာက္ downtime က ေျပာပေလာက္ေအာင္မရွိဘူးလို႕ ယူဆလိုက္တယ္။ Service ပံုမွန္ ျပန္ျဖစ္ဖို႕ ခဏေတာ့ အနစ္နာခံရမွာပဲ။
# service postfix stop

အဲဒီ mail address ကေန mail ပို႕တာကို temporary barred လိုက္ပါတယ္ ။ ဘယ္လိုလုပ္လည္းဆိုရင္ေတာ့ Postfix မွာ smtpd_recipient_restrictions နဲ႕  smtpd_sender_restrictions ဆိုတာရွိပါတယ္။ အဲမွာ ဘယ္ mail address ကေနလာတဲ့ mail ၊ သို႕မဟုတ္ ဘယ္ mail address ကို ပို႕မယ့္ mail ကို drop ေပးပါလို႕ configure လို႕ရပါတယ္။ အဲမွာ marketing@blahblah.com ကို smtpd_sender_restrictions မွာ ထဲ့လိုက္ပါတယ္။ ေနာက္ေတာ့ အရင္ postfix service ကိုျပန္စလိုက္တယ္။
# service postfix start

ေနာက္ျပီး mailq ထဲမွာ marketing@blahblah.com က mail ဘယ္ေလာက္ရွိသလည္းလို႕ သိခ်င္လို႕ ဒီ command ေလး run ၾကည့္တယ္။
# mailq |  grep marketing@blahblah\.com | wc -l

ဒါေပမဲ့ ခုနက ဒီအတိုင္း mailq ႐ိုက္တာေတာင္ result ကမဆုံးတာ ၊ ဒီလိုလည္း ေတာ္ေတာ္နဲ႕ result မရပါဘူး။ အဲဒီမွာပဲ client ကအေၾကာင္းျပန္တယ္။ သူတို႕ ဒီေန႕ အဲ marketing email ကေန ဘာမွမပို႕ပါဘူးတဲ့။ Password က password လို႕ေပးထားေၾကာင္း အေၾကာင္းျပန္တယ္။ ဒါဆို mail queue ထဲကဟာေတြက က်ေနာ္တို႕ဖ်က္ျပစ္လိုက္လို႕ရတာ ေသခ်ာပါျပီ။ အမွန္က မေသခ်ာလည္း က်ေနာ္ဖ်က္ဖို႕ပါပဲ။ သူတို႕ဟာေတြဆိုလည္း ေနာက္မွ ျပန္ပို႕ပါလို႕ ေျပာျပီး ဖ်က္မွာပါပဲ။

ကဲ ဘယ္လိုဖ်က္မလည္း ? Mail ID ေတြကလည္းမသိ၊ mailq ကလည္း ၾကည့္မရေတာ့ ဘယ္ေလာက္ရွိမွန္းလည္းမသိ ၊ queue တစ္ခုလုံး flush ျပစ္လိုက္ရင္လည္း ေပါက္ဆိန္နဲ႕ ေပါက္သလိုျဖစ္ေတာ့မယ္ ။ Script ေလးတစ္ေၾကာင္း ေရးလိုက္လို႕ရရင္ ေကာင္းမယ္ ။ ပထမဆုံး mailq ရဲ့ output ကို ၾကည့္ရေအာင္။

0BEA87C8029*     111654    Tue Apr  3 10:56:46     marketing@blahblah.com

Database စကားနဲ႕ ေျပာရင္ primary key က ေရွ႕ဆုံးကေကာင္ Mail ID / Queue ID ။ ဒါက Queue ထဲရွိသမွ် mail တိုင္းမွာ unique ျဖစ္တယ္။ SQL မွာ select .. where .. ဆိုျပီး ေရးရသလိုပါပဲ ။ marketing@blahblah.com က mail ေတြကိုစစ္ထုတ္ျပီး delete လိုက္ရင္ ရမယ္။ Mail ကို Queue ထဲက delete လုပ္တာက postsupre -d ။ ဒါေပမယ့္ ID ေသခ်ာ ေပးမွျဖစ္မွာ ။ ကဲ ဆက္ေရးၾကည့္မယ္။

ခုနက result ေတြထဲက marketing@blahblah.com ဆိုတဲ့ address ပါတဲ့ result ေတြကိုပဲ ယူမယ္ ။

# mailq |  grep marketing@blahblah\.com

ခုနက result မွာ က်ေနာ္တို႕လိုတာ ေရွ႕ဆုံးက ID ၊ ေနာက္က time stamp ေတြဘာေတြ မလိုခ်င္ဘူး filter လုပ္ဖို႕လိုျပီ ။

# mailq |  grep marketing@blahblah\.com | cut -d ' ' -f1

အဲမွာလည္း ID မွာ * ေတြ ပါတယ္။ Queue ထဲမွာ Active ျဖစ္ေနတယ္လို႕ ျပတာပါ။ အဲ asterisk ကိုလည္း ဖ်က္မွ ၊ မဟုတ္ရင္ postsuper က အလုပ္လုပ္ႏိုင္မွာမဟုတ္ဖူး ။

# mailq |  grep marketing@blahblah\.com | cut -d ' ' -f1 | tr -d '*!'

ဒီေလာက္ဆို က်ေနာ္လိုခ်င္တဲ့ marketing@blahblah.com ကလာတဲ့ mail ေတြရဲ့ ID တစ္လုံးထဲ ရျပီ ။ အဲဒါကို postsuper ကို pass ေပးလိုက္ျပီး ဖ်က္လိုက္ရင္ ရပါျပီ ။

# mailq |  grep marketing@blahblah\.com | cut -d ' ' -f1 | tr -d '*!' | postsuper -d -

58964 messages deleted တဲ့ ။ ပလုတ္တုတ္ ။ ဒီ mail address ကေနဝင္လာတဲ့ mail ၊ Queue ထဲမွာတင္ ေျခာက္ေသာင္းေလာက္ရွိတယ္။ အဲကလာတာ မဟုတ္တဲ့ mail ၊ Queue ထဲမွာ ႏွစ္ေထာင္ေက်ာ္ က်န္ပါတယ္။ Spam ေတြရွုပ္ေနတာနဲ႕ deliver မလုပ္ႏိုင္ေသးတဲ့ mail ေတြေပါ့။

အဲေနာက္မွာေတာ့ mail server က ပံုမွန္ ျပန္ျဖစ္သြားပါတယ္။ marketing@blahblah.com က mail ေတြ အဝင္ကေတာ့ရွိဆဲ။ ဒါေပမဲ့ deliver attempt မလုပ္ေတာ့ပဲ တန္း drop ေတာ့ load သက္သာတာေပါ့။ ဒါေပမဲ့ traffic နဲ႕ socket ကေတာ့ စားဆဲမို႕လို႕ ေနာက္ေတာ့ သူတို႕ marketing email ကို temporary deactivate လိုက္ပါတယ္ ။ အဲေတာ့မွ Queue ထဲက ေကာင္ေတြ ေကာင္းေကာင္းမြန္မြန္ ထြက္ေတာ့တယ္။


တစ္ေၾကာင္း bash script ေလးပါပဲ ။ ဒါေပမဲ့ ျပသနာ ေတာ္ေတာ္ ေျပလည္သြားတယ္ ။ ညေန ေျခာက္နာရီအထိ အားလုံး အဆင္ေျပေနတာနဲ႕ စီးတီးေဟာကို ထမင္းစားဖို႕ သြားလိုက္ႏိုင္တယ္ ။ ေတာ္ပါေသးရဲ့ ။ ေတာ္ၾကာ ထြက္ခါနီးမွ ထြက္ခတ္ခတ္ျပီး မိုးခ်ဳပ္ေအာင္ ေနေနရအုန္းမယ္။

Divinity

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

Friday, May 6, 2011

Geez, what hardware spec i've got there ?

တစ္ခါတစ္ေလ Server ေတြရဲ့ Hardware spec ျပန္ၾကည့္ခ်င္တယ္၊ Serial Number ျပန္ၾကည့္ခ်င္တယ္၊ Server ကလည္း အနားမွာမရွိဘူး ၊ က်ေနာ္လို႕ documentation ေကာင္းရင္ ဘာ server သုံးခဲ့မိမွန္းေတာင္ မမွတ္မိေတာ့ဘူးဆိုရင္ command line ကေန ၾကည့္လို႕ရပါတယ္။ အမ်ားဆုံးျဖစ္တတ္တာက က်ေနာ္တို႕ဆို memory upgrade လုပ္ခ်င္တာ၊ memory type သိခ်င္ရုံနဲ႕လည္း Data center အထိမသြားခ်င္၊ သြားျဖစ္လည္း ဒါေလးအတြက္နဲ႕ BIOS ထဲဝင္မၾကည့္ခ်င္ရင္ အသုံးတဲ့ပါတယ္။

Linux မွာေတာ့ dmidecode command က ေတာ္ေတာ္အသုံးဝင္ပါတယ္။
Serial number ေလာက္ျပန္ၾကည့္ခ်င္တာဆို
# dmidecode --type 1

လို႕႐ိုက္လိုက္ရင္ Chassis က serial number ကိုျပေပးပါတယ္။ Memory slot ေတြနဲ႕ ပတ္သက္တယ့္ information က type 16 ျဖစ္ေလ့ရွိပါတယ္။ Slot အေရအတြက္နဲ႕ Max capacity ျပပါလိမ့္မယ္။ အခုလက္ရွိတပ္ထားတယ့္ memory ကိုၾကည့္ခ်င္ရင္ေတာ့ Server အဖုံးဖြင့္ၾကည့္ရပါတယ္။ အခုလက္ရွိ တပ္ထားတယ့္ memory ရဲ့ information ေလာက္ပဲၾကည့္ခ်င္ရင္ေတာ့ 'dmidecode --type 17' ဆိုရင္ရပါတယ္။ DDR အမ်ိဳးအစားနဲ႕ speed ကိုျပပါလိမ့္မယ္။

Type နံပါတ္မေသခ်ာရင္လည္း dmidecode ရဲ့ output တစ္ခုလုံးကို output pipe နဲ႕ more ဒါမွမဟုတ္ less ဆိုျပီး ၾကည့္ရင္လည္းရပါတယ္။ Output ကရွင္းပါတယ္ ၊ လိုတယ့္ information ကိုရွာလို႕ လြယ္ပါတယ္။ ဒါဆို command က ဒါမ်ိဳးေပါ့။
# dmidecode | less


Linux ရဲ့ dmidecode ကေတာ့ hardware info ကိုပဲ အဓိကျပပါတယ္။

Windows မွာဆိုရင္ေတာ့ wmic ဆိုတယ့္ command တစ္ခု ပါပါတယ္။ Windows Management Instrumentation ေပၚမွာ အေျခခံထားတယ့္ command ပါ။ wmic command output ကရွုပ္လို႕ တစ္ခါမွ လိုက္မၾကည့္ဖူးပါဘူး။ လိုတာပဲမွတ္ထားမိတယ္။ ဒါေပမယ့္ သူကေတာ့ ပိုျပီး information မ်ားမ်ား retrieve လုပ္ႏိုင္ပါတယ္။

Serial number ကေတာ့ BIOS မွာရွိပါတယ္ ။
> wmic bios

ဆိုရင္ မ်က္စိေနာက္စရာ output နဲ႕ျပပါတယ္။ လိုခ်င္တာေလးျပန္ ျဖတ္ၾကည့္ရတယ္။
> wmic bios get serialnumber

ဒါမွ လိုခ်င္တာေလးျပတယ္။

Memory speed ကေတာ့ memorychip ထဲမွာပါ။
> wmic memorychip get speed

ဒါမွမဟုတ္ပဲ တျခားဘာေတြရွိေသးလည္းၾကည့္ခ်င္ရင္ ေနာက္က get speed ျဖဳတ္႐ိုက္ေပါ့။ အဲ Memory capacity က်ေတာ့ memphysical ထဲမွာ ။
>wmic memphysical get maxcapacity

ဆိုရင္ maximum capacity ျပျပီး ၊
>wmic memphysical get memorydevices

ဆိုရင္ slot ဘယ္နခုရွိလည္း ျပပါတယ္။

WMIC က hardware info retrieve လုပ္ဖို႕ေလာက္ လုပ္ထားတာမဟုတ္ပဲ current system ရဲ့ info ေတာ္ေတာ္မ်ားမ်ား process info ေတြ ၊ partition table ေတြပါၾကည့္လို႕ရပါတယ္။ WMIC အေၾကာင္းထပ္သိခ်င္ေသးရင္ ဒီ link မွာ ရွိပါေသးတယ္။ အေသးစိတ္ကေတာ့ Google ကရွာျပီး Microsoft technet article သာရွာဖတ္ၾကည့္ေပါ့။

http://www.robvanderwoude.com/ntadmincommands.php

အသုံးတဲ့မယ္ထင္ပါတယ္။ မတဲ့လည္း သုံးၾကည့္ေပါ့ ။ :D

Divinity

Wednesday, April 27, 2011

Make your own shutdown command :D

စာေရးမယ္ ေျပာတုန္းကေျပာျပီး ေရးဖို႕ၾက ပ်င္းတယ္။ Game က လည္း ဆက္ကစားရအုန္းမယ္ ။ အခ်ိန္ေတြက ေလာက္ကို မေလာက္ဖူး ။ ေခါင္းစဥ္ဖတ္ျပီး ၾကီးၾကီးက်ယ္က်ယ္ေတာ့ မထင္ပါနဲ႕ ။ Linux ေပၚမွာ ေပါက္ကရ ေပါက္စေလးတစ္ခုေလာက္ လုပ္ၾကည့္ရေအာင္။

Bash မွာ command alias ေလးတစ္ခုေလာက္ ေရးၾကည့္ရေအာင္ ။ ကိုယ့္နာမည္႐ိုက္လိုက္ရင္ laptop က shutdown က်သြားတာမ်ိဳးေလးဆို မဆိုးဘူး။
$HOME ရဲ့ေအာက္မွာ .bash_profile သို႕မဟုတ္ .profile ဆိုတယ့္ file ရွိပါတယ္။ Bash shell မွာ .bash_profile လို႕ေတြ႕ရျပီး Sh မွာေတာ့ .profile လို႕ေတြ႕ရပါတယ္။ ( မိုးေလဝသ ေၾကညာတယ့္ ေလသံမ်ားေပါက္သြားလားမသိဘူး) Filename မွာ ေရွ႕မွာ full stop ပါပါတယ္။ ဒါ nix မွာ ေတာ့ hidden attribute ပါ။ ls နဲ႕ၾကည့္ရင္ ls -a ဆိုမွ ျမင္ရပါလိမ့္မယ္။ ကဲ အဲဒီ file ကို edit လုပ္ၾကမယ္။ vi ပဲျဖစ္ျဖစ္ vim ပဲျဖစ္ျဖစ္ nano ပဲျဖစ္ျဖစ္ ၾကိဳက္ရာနဲ႕ ဖြင့္၊ edit ျပီး save လို႕ရရင္ ျပီးတာပဲ။ ျပီးရင္ ဒီ ႏွစ္လိုင္းကို ေအာက္ဆုံးမွာ ျဖည့္လိုက္ပါ။

gant=`which shutdown`
alias divinity='$gant -h now'


Generic ျဖစ္ေအာင္ ႏွစ္လိုင္းေရးလိုက္တာပါ။ Shutdown file ရွိတယ့္ path ကိုတန္းေပးျပီး $gant လို႕ မေပးေတာ့ရင္လည္း ရပါတယ္။ divinity ေနရာကေတာ့ ကိုယ့္နာမည္ ကိုေျပာင္းေပါ့။ Save လုပ္ျပီးရင္ စမ္းခ်င္ရင္ logout ျပီး ျပန္ login ဝင္ရပါတယ္။ Shell environment ကို edit တာမို႕ ခ်က္ခ်င္း effective မျဖစ္ပဲ next login မွာမွ effective ျဖစ္ပါတယ္။ ကဲ အခုဆိုရင္ေတာ့ ကိုယ့္နာမယ္ ကိုယ္႐ိုက္ျပီး shutdown ခ်လို႕ ရပါျပီ ။ ( စားၾကမယ္ေဟ့ ေကာင္းေကာင္း ေလသံေပါက္သြားလားမသိ )


Divinity

Thursday, July 29, 2010

Linux commands (1)

Linux console ေပၚမွာ အလုပ္လုပ္တယ့္ အခါ တစ္ခ်ိဳ႕ command ေတြက သိထားရင္ command line interface မွာ အေတာ္အသုံးဝင္ပါတယ္။ မသိလည္းရတယ္ ၊ သိရင္ ပိုအဆင္ေျပတယ့္ command ေလးေတြေပါ့။ နည္းနည္းခ်င္း ေခါင္းထဲေပၚလာသေလာက္ ေရးသြားပါမယ္။

...........
Log file လိုဟာမ်ိဳးကို ဖတ္တယ့္အခါမွာ tail command ကသုံးဝင္ပါတယ္ ။ ဆိုၾကပါေတာ့၊ httpd ရဲ့ access_log file ။ Apache process run ေနျပီး user ေတြက access လုပ္ေနတိုင္း access_log ကေရးေနပါတယ္။ ဒီလို log မ်ိဳးရဲ့ ေနာက္ဆုံး process ေတြ log ကို လိုခ်င္ရင္ အလြယ္တကူက `cat /var/log/httpd/access_log ဆိုျပီး cat ထုတ္လိုက္တာမ်ိဳး ၊ tail -n50 /var/log/httpd/access_log ဆိုျပီး ေနာက္ဆုံး လိုင္း 50 ေခၚၾကည့္တာတို႕ လုပ္လိုက္တာမ်ားတယ္။ ဒါေတြက ဒီ command ကို ႐ိုက္လိုက္တယ့္ အခ်ိန္က log ထဲမွာရွိတာကိုျပတာပါ။ Real time ေတာက္ေလွ်ာက္လာေရးေနတာကို ဖတ္ခ်င္ရင္ေတာ့
tail -f /var/log/httpd/access_log

ဆိုျပီး tail -f ကိုသုံးပါတယ္။ ဒါဆို console ထဲမွာ log file ကပြင့္လာျပီး log မွာ တစ္လိုင္းအသစ္လာေရးတိုင္း တစ္လိုင္းတက္တက္လာတယ္။ ဒါဆို debug လုပ္ဖို႕ ပို အဆင္ေျပပါတယ္။

........
တစ္ခါတစ္ေလ log file ( text file တစ္ခုခုေပါ့) ကို ရွင္းလိုက္ခ်င္တာမ်ိဳးေတြမွာ ၊ အထဲက စာေတြ လိုက္ဖ်က္ရရင္လည္း မလြယ္ဘူး။ File ကိုဖ်က္ျပစ္လိုက္ျပီး ၊ process က log ျပန္လာေရးခိုင္းတာကလည္း ေျပာရင္ သိပ္မေကာင္းဖူး။ File ကို ဖ်က္ျပစ္လိုက္ရတာကိုက မေကာင္းဘူး။ အထဲက content ကိုပဲ ရွင္းလိုက္ခ်င္ရင္ ဒီလိုေလးက လြယ္တယ္ ။
> /path/to/log.file

အေရွ႕က '>' ေလးက command ထဲမွာပါပါတယ္။ တစ္ကယ္က
echo "" > /path/to/log.file

ကိုလုပ္သြားတာပါ။ echo command နဲ႕ output pipe '>' ကိုသိရင္ ဒါကိုသိပါလိမ့္မယ္။ File ထဲက content ကို blank space တစ္ခုနဲ႕ overwrite လုပ္လိုက္တာပါ။ အဲေတာ့ log file က empty log ျဖစ္သြားတာေပါ့။

..........
ေနာက္တစ္ခုကေတာ့ shell arguments ေတြပါ။ အသုံးျဖစ္ဆုံးကေတာ့ ! နဲ႕ !$ ပါ ။
! က ေနာက္ဆုံးသုံးခဲ့တယ့္ argument ကို ကိုယ္စားျပဳပါတယ္။ တကယ္လို႕ အေပၚမွာ file တစ္ခုကို vi သုံးျပီး edit ထားတယ္။ အခု တျခား directory ကိုေရာက္ေနျပီ ။ File path ၾကီးကရွည္လို႕ ျပန္မ႐ိုက္ခ်င္ဖူးဆိုရင္
!vi

လို႕ သုံးလို႕ရပါတယ္။ Shell history ထဲက ေနာက္ဆုံး vi command ကိုျပန္ေခၚေပးပါလိမ့္မယ္။

.......
!$ ကေတာ့ last command ရဲ့ argument ကိုပဲယူတာပါ။
ls -l /bar/nyar/thar/da/kar/file

လို႕ ရွာျပီး၊ ေနာက္တစ္လိုင္းမွာ အဲ file ကို vi မွာ edit ဖို႕ဆိုရင္ ပံုမွန္ဆို vi /bar/nyar/thar/da/kar/file ဆိုျပီး ရွည္ရွည္လွ်ားလွ်ား႐ိုက္ေနရပါမယ္။ အဲေတာ့
vi !$

လို႕႐ိုက္လိုက္ရင္ ေနာက္ဆုံး command ရဲ့ argument ကိုျပန္ယူျပီး vi သြားပါလိမ့္မယ္ ။
( Up arrow နဲ႕ last command ကိုျပန္ေခၚ၊ Home ကိုႏွိပ္ျပီး ls -l ကိုဖ်က္ vi လို႕႐ိုက္ ၊ ဒါလည္းရပါတယ္။ ဒါေပမယ့္ ပိုမရွည္ဖူးလား။ ဒါေတာင္ Home တို႕ End တို႕ကို Shell environment ထဲမွာ set ထားမွပါ။ Unix အမ်ားစုမွာ default အားျဖင့္မပါပါဘူး။ Home ႏွိပ္လိုက္ရင္ ^ ေတြနဲ႕ ေပၚလာပါလိမ့္မယ္။ )

..........
အခုေတာ့ ေတာ္ေလာက္ျပီ။ အခုသုံးလိုက္မိတာေလးေတြ ေျပာျပတာပါ။ ေနာက္ၾကံုရင္ ၾကံုတာေတြ ေရးပါအုန္းမယ္ ။ တစ္ခ်ိဳ႕ command ေတြက သူ႕ေနာက္က option ေတြအရမ္း powerful ျဖစ္တာေတြရွိပါတယ္။ find တို႕လို command မ်ိဳးေပါ့။ exec လို အသုံးတယ့္တာေတြလည္း ရွိပါေသးတယ္။ ေနာက္မ်ားမွ ....

Divinity

Wednesday, July 21, 2010

SUID ဆိုတာ

Linux / Unix system ေတြအေၾကာင္းေလ့လာရင္ SUID / SGID ဆိုတယ့္ အသုံးအႏွုန္းမ်ိဳး ေတြ႕ရတတ္ပါတယ္ ။ SUID ဆိုတာ Set User ID ကို အတိုေခၚတာပါ။ Executable file ေတြရဲ့ permission မွာ ေပးေလ့ရွိပါတယ္ ။ SUID ေပးရတယ့္ ရည္ရြယ္ခ်က္က executable permission ရွိတယ့္ ဘယ္ user ကပဲ execute လုပ္လုပ္ ၊ ဒီ command / file ကို file owner ရဲ့ identity နဲ႕ run လိုက္ပါတယ္။ ဆိုလိုတာကေတာ့ root user ရဲ့ file တစ္ခုကို everyone executable ေပးထားမယ္၊ ဒါေပမဲ့ SUID set ထားရင္ ဘယ္ user ကပဲ run run ဒီ file က root user အေနနဲ႕ run ပါမယ္။ အနီးစပ္ဆုံး လို႕ ထင္တယ့္ windows ဥပမာကေတာ့ run as administrator နဲ႕ run သလိုေပါ့။ ( သိပ္ေတာ့မတူသလိုပါပဲ။ Run as administrator ကိုေသခ်ာမသိလို႕ မေျပာႏိုင္ပါဘူး)

Linux / Unix မွာ file permission ကို rwx ( Read, Write, Execute) ဆိုျပီး သတ္မွတ္ပါတယ္။ SGID / SUID ေပးထားရင္ေတာ့ s ဆိုတာေလးေတြ႕ရေလ့ရွိပါတယ္။ဥပမာေလး ေျပာရေအာင္ ။

User တိုင္းကို cd တို႕ ls တို႕လို command မ်ိဳးကိုေတာ့ ေပးသုံးရပါတယ္။ အဲလို command တစ္ခုရဲ့ permission ကိုၾကည့္ရင္
$ ls -l /bin/ls
-rwxr-xr-x 1 root root 116688 2010-04-28 23:56 /bin/ls


File ရဲ့ owner က root ျဖစ္ျပီး other users ( Everyone ေပါ့ဗ်ာ Windows မွာေတာ့) ကို Executable permission ေပးထားတာေတြ႕ပါလိမ့္မယ္ ။ Linux File permission ( rwx တို႕ ၊ 700 တို႕ 777 တို႕ )အေၾကာင္းသိျပီးသား လို႕ ယူစလို႕ ဒါကိုမရွင္းေတာ့ပါဘူး။ ls command ကို User တိုင္းက အသုံးျပဳႏိုင္တယ္။ ေနာက္ထပ္ User တိုင္း သုံး လို႕ရတယ့္ command ေလးတစ္ခုကိုၾကည့္ရေအာင္။ Password change တယ့္ passwd command ပါ။
ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 25836 2009-09-14 20:14 /usr/bin/passwd


သူလည္း everyone executable ေပးထားတယ္ ဒါေပမယ့္ တတိယအလုံးမွာ x မဟုတ္ပဲ s ျဖစ္ေနတယ္။ ဒါ SUID set ထားတယ္လို႕ ေဖာ္ျပတာပါ။ ls command တုန္းကလိုပဲ သူ႕မွာလည္း ေနာက္ဆုံးအလုံးက 'x' ၊ ဒါဆို others မွာ executable permission ေပးထားတာေပါ့။ ကြာတာက ၊ ေရွ႕မွာ 's' ျဖစ္ေနတယ္။ ls command တုန္းကလိုပဲ User တိုင္းကသုံးႏိုင္တယ္။ ဒါေပမဲ့ ဒီ passwd command ကို သုံးျပီး လုပ္သမွ်အလုပ္တိုင္းကိုေတာ့ root အေနနဲ႕ လုပ္သြားမွာျဖစ္ပါတယ္။ SUID ကို security consideration တစ္ခုအေနနဲ႕ သတ္မွတ္ၾကေလ့ရွိပါတယ္။ Command တိုင္း file တိုင္းကို အားတိုင္း SUID set မလုပ္ဖို႕ အျပင္းအထန္ ကန္႕ကြက္ပါတယ္။ ဘာလို႕လည္း ?

ခုနက passwd command ေလးကိုပဲ ၾကည့္ရေအာင္။ User တစ္ေယာက္ရဲ့ password ဟာ /etc/shadow ဆိုတယ့္ file ထဲမွာ hash အေနနဲ႕ ရွိပါတယ္။ တကယ္လို႕သာ ဒီ hash ေတြကို ရရင္ rainbow table ေတြဘာေတြနဲ႕ decipher လုပ္ႏိုင္ေကာင္းလုပ္ႏိုင္ပါတယ္။ Root user ရဲ့ password လည္း hash အေနနဲ႕ ရွိပါတယ္။ အဲေတာ့ ဒီ /etc/shadow file ထဲက data က အရမ္းအေရးၾကီးတယ့္ sensitive data ပါ။ ျဖစ္ႏိုင္ရင္ ဘယ္ user ကိုမွ ေပးမၾကည့္သင့္ဖူးေပါ့။ ဒီ /etc/shadow file ရဲ့ owner က default အေနနဲ႕ root ျဖစ္ျပီး permission က 700 ( Owner သာလွ်င္ rwx ရွိျပီး က်န္တယ့္လူေတြ read ေတာင္လုပ္လို႕မရတယ့္ permission) ေပးထားေလ့ရွိပါတယ္။

အဲမွာ စတာပါပဲ ၊ User တစ္ေယာက္က password change ရင္ passwd command ရဲ့ process တစ္ခုအေနနဲ႕ password အသစ္ကို hash ေျပာင္းျပီး ဒီ /etc/shadow file ထဲမွာရွိတယ့္ သူ႕ရဲ့ password hash ကို ျပင္ရပါမယ္။ ဒါမွ password အသစ္ျဖစ္မွာကိုး။ ဒါေပမယ့္ root user ကပဲ ဒီ file ကို edit လို႕ရတယ္။ ဒါဆို password change တိုင္း root ကိုလွမ္း change ခိုင္းရမွာလား ။ ဒါဆိုလည္း မဟုတ္ေသးဘူး။ ဒါေတြေၾကာင့္ password change ရာမွာသုံးတယ့္ passwd command ကို root အေနနဲ႕ SUID set ထားလိုက္ပါတယ္။ passwd command က လုပ္တယ့္ အလုပ္မွန္သမွ် ၊ /etc/shadow မွာ hash update လုပ္တာအပါအဝင္၊ အားလုံးကို ဒီ file ရဲ့ owner ျဖစ္တယ့္ root user အေနနဲ႕ လုပ္သြားလိုက္တယ္။ /etc/shadow ကို everyone editable ေပးရတာထက္ အမ်ားၾကီးေကာင္းတာေပါ့။ ဒီေလာက္ဆိုရင္ SUID ဆိုတာ ဘာလုပ္တယ္၊ ဘယ္လိုဆိုတာ သိေလာက္ပါျပီ။

အေပၚမွာ ေျပာခဲ့သလိုပဲ SUID set ရင္ အလြန္သတိထားရပါတယ္။ ဒီ executable file က ဘာေတြလုပ္သလည္းဆိုတာရယ္ သူ႕ source ရယ္ကို သိသင့္ပါတယ္။ SGID set ထားတယ့္ file တစ္ခုက တစ္ျခား user ကို write permission မေပးရပါဘူး။ Edit လုပ္ျပီး သူလိုခ်င္တယ့္ command ေတြေျပာင္းသြားရင္ ကိုယ္ပဲ ျပသနာျဖစ္ပါမယ္။ Shell script လိုဟာမ်ိဳး ၊ source file လိုဟာမ်ိဳးကို SUID မေပးသင့္ပါဘူး။ Content ကိုျမင္ေနရလို႕ Buffer Over Flow(BOF) flaw ရွိတာတို႕ဘာတို႕ ျဖစ္ႏိုင္ပါတယ္။ ျဖစ္ႏိုင္ရင္ Compiled binary ကိုပဲ SUID ေပးသင့္ပါတယ္။ ဒါေတာင္ safe လို႕ေျပာလို႕မရပါဘူး။

ခုတစ္ေလာ စာမေရးျဖစ္တာၾကာလို႕ Clonezilla ေလးနဲ႕ server တစ္ခုကို image အျဖစ္ေျပာင္းေနတာ ထိုင္ေစာင့္ရင္း ဒီ post ကိုေရးလိုက္ပါတယ္။ SGID ေတာ့ ေနာက္မွေပါ့ ။ ဘာေရးရမွန္းမသိသလို စာစီမရတာလည္းၾကာျပီ ။ :D


Regards
Divinity

Sunday, June 27, 2010

Linux မွာ virus မရွိဘူးဆို ?

အခုတစ္ေလာ Linux မွာ virus မရွိလို႕သုံးတယ္ဆိုတယ့္ သူေတြမ်ားလာတယ္ဆိုတယ့္အေၾကာင္း ညီေလးတစ္ေယာက္ကလာလာေျပာေနတယ္။ Virus ေၾကာက္စရာမလိုလို႕ Ubuntu ပဲသုံးတယ္ဆိုတယ့္ သူေတြေပါ့။ Linux ကေပ်ာ္စရာ လည္းေကာင္းသလို challenging လည္း ပိုမ်ားပါတယ္။ သူတို႕ဘာသာ ဘာေၾကာင့္ပဲသုံးသုံးပါ သုံးျဖစ္ဖို႕က အဓိကေပါ့။ သုံးျဖစ္သြားရင္ သုံးရင္း ေလ့လာရင္း သိလာလိမ့္မယ္။ ဒါေပမယ့္ မသုံးျဖစ္တယ့္ သူေတြ၊ ေလ့လာမႈ အားမေကာင္းတယ့္ သူေတြအတြက္ idea အမွားၾကီးျဖစ္ျပီး 'ဪ ၾကားျပီးျပီလား၊ Linux ဆိုတာၾကီးက virus မရွိဖူးတဲ့' ဆိုျပီး ေယာင္ေတာင္ေတာင္နဲ႕ ကိုယ္တိုင္လည္းမသိပဲ သံေယာင္လိုက္မယ့္သူေတြ အတြက္ေတာ့ မေကာင္းဖူး။

Linux က bullet proof operating system တစ္ခုမဟုတ္ပါဖူး။ Security ကို အဓိက ဦးစားေပးစဥ္းစားထားတယ့္ Unix ကို အေျခခံထားတာပဲရွိတယ္။ လူလုပ္တယ့္ ကိစၥ ဘယ္ေတာ့မွ perfect မျဖစ္ဖူး၊ စိတ္ပူမေနနဲ႕။ Windows နဲ႕ ယွဥ္လိုက္ရင္ Virus နည္းတယ္လို႕ပဲေျပာလို႕ရတယ္။ နည္းလြန္းလို႕ မရွိသလိုျဖစ္ေနတာပါ။ ဘာေၾကာင့္ နည္းတာလည္း ဆိုရင္ေတာ့ ဒါေတြေၾကာင့္လို႕ က်ေနာ္က ျမင္တယ္။

၁။ အသုံးျပဳမႈနည္းပါးျခင္း
Home user ေတြၾကားထဲမွာ Linux အသုံးျပဳသူက 2% ေလာက္ပဲရွိပါတယ္။ ဒီေလာက္ေလးနဲ႕ၾက virus/trojan ေရးတယ့္သူေတြကို မဆြဲေဆာင္ႏိုင္ပါဘူး။ ကိုယ္ေရးတယ့္ virus/trojan ျပန္႕ႏိုင္စြမ္းလည္း နည္းမယ္။ အလုပ္လည္းသိပ္မျဖစ္ဖူးေပါ့။ ဒါနဲ႕ပဲ Linux မွာ virus ေရးဖို႕ သိပ္စိတ္မဝင္စားၾကတာျဖစ္မယ္။ ေနာက္ေတာ့ ရွိလာၾကမွာပါ။

၂။ Advanced Users
လြန္ခဲ့တယ့္ သုံးႏွစ္ 2007 ေလာက္ကထိ Linux ကသုံးရတာမလြယ္ကူပါဘူး။ လြယ္လြယ္ကူကူ သုံးခ်င္သူေတြ၊ Computer အေၾကာင္း သိပ္မသိခ်င္ပါဖူး၊ သုံးလို႕ရျပီးတာပဲ ဆိုတယ့္ သူေတြရဲ့ choice မျဖစ္ခဲ့ပါဖူး။ Linux သုံးတယ့္ သူေတာ္ေတာ္မ်ားမ်ားက IT နယ္ပယ္ထဲကလူေတြ၊ IT ကို အနည္းနဲ႕ အမ်ား စိတ္ဝင္စားတယ့္ သူေတြ မ်ားပါတယ္။ ဒီ computer ေပၚမွာ သူတို႕ ဘာလုပ္ေနတယ္ဆိုတာကို ေသျခာသိတယ့္ သူေတြမို႕ ၊ security sense ရွိၾကပါတယ္။ ေတြ႕ကရာ ေလွ်ာက္ click ၊ install ဆိုျပီး လုပ္ၾကမယ့္ သူေတြမဟုတ္လို႕ ဒီလိုလူေတြကို target ထားတာထက္စာရင္ ၊ Pop-up ေတြ႕ရင္ ေကာက္ click လိုက္မယ့္ novice ေတြကို ပိုျပီး target ထားတာေကာင္းမွာေပါ့။ အဲလို novice ေတြက သုံးရတာပိုလြယ္ကူတယ့္ windows သုံးေလ့ရွိတယ္ေလ။ အဲလို user ေတြ Linux မ်ားမ်ားသုံးလာရင္ Linux လည္း target ေကာင္းတစ္ခုျဖစ္လာမွာပါ၊ စိတ္ဓာတ္မက်ပါနဲ႕။

၃။ Fix ေတြထြက္တာျမန္တယ္
Opensource မို႕လို႕ lib ေတြမွာ exploit ေတြ flaw ေတြရွိေနရင္ ရွာေဖြေတြ႕ရွိသူကတာ inform လုပ္၊ ေနာက္က fix လုပ္မယ့္ သူေတြက အမ်ားၾကီး။ ဒါေၾကာင့္ Linux ရဲ့ exploit ေတြက သိပ္ျပီး ၾကိဳးစားၾကည့္ခ်င္စရာ မေကာင္းဖူး။ ကိုယ္က ဒီေန႕ရွာေတြ႕ ေနာက္ေန႕ fix ထြက္ေနျပီ။ User ေတြ patch install လုပ္တာ မလုပ္တာ တစ္ပိုင္းေပါ့။ MS မွာေတာ့ Conficker တုန္းက exploit ရွာေတြ႕တာနဲ႕ fix က ႏွစ္လေလာက္ၾကာပါတယ္။ User က update မလုပ္မိတာေတြရွိလို႕ ဒီ exploit က တစ္ႏွစ္ေလာက္ ေကာင္းေကာင္း အလုပ္ျဖစ္ေနတာပဲ။ ဒီလိုေတြရွိေတာ့လည္း လုပ္စားရ ပိုေကာင္းတယ့္ Windows က virus/trojan ပိုထြက္တာေပါ့။

ဒါ ထင္သာ ျမင္သာ အခ်က္ေတြပါ။ ဒါထက္ပိုတာေတြ ရွိအုန္းမွာပါ။ Unix / Linux မွာ အရင္တုန္းက rootkit ဆိုတယ့္ အသုံးအႏွုန္းက ပိုေခတ္စားပါတယ္။ Trojan လို backdoor လို ေကာင္မ်ိဳးပါပဲ။ Backdoor ပိုဆန္မယ္ထင္တယ္။ Kernel module တစ္ခုအျဖစ္၊ device driver တစ္ခုအျဖစ္ ကိုယ့္ကိုကိုယ္ ဟန္ေဆာင္ျပီး Operation system တက္တိုင္း သူကပါလိုက္တက္လာမယ္၊ service တစ္ခု port တစ္ခု compromise ထားမယ္၊ attacker အတြက္ ဝင္လမ္း ထြက္လမ္းဖြင့္ေပးထားမယ္ေပါ့။ ဒါေပမယ့္ process list ထဲမွာေတာ့ မေပၚဘူး။ ဒါမ်ိဳးက တကယ္ intrude လုပ္ျပီးသြားမွ ေနာက္တစ္ခါ ျပန္ဝင္ရလြယ္ေအာင္ လုပ္တာမ်ိဳးပါ။ Virus / Trojan ဆိုတာမ်ိဳးထက္ advance ျဖစ္ပါတယ္။

ခုေတာ့ user information ခိုးတယ့္ trojan လိုေကာင္ေတြေတာင္ linux မွာ ေပါလာပါျပီ။ Ubuntu / debian package ျဖစ္တယ့္ deb file ေတြမွာ trojan ေလးေတြထဲ့ေပးတာတို႕၊ tarball မွာကို ပါလာတာတို႕ရွိလာပါျပီ။ Opensource မို႕လို႕ security fix ထြက္တာျမန္သလို ၊ opensource မို႕လို႕ trojan ေလးထဲ့ေပးလိုက္ဖို႕လည္း ပိုလြယ္ပါတယ္။ Deb တို႕ rpm တို႕ဆိုတာ လြယ္လြယ္ေျပာရင္ exe installer ေတြလိုပါပဲ။ Run လိုက္ရင္ ဘာေတြလုပ္မယ္၊ ဘယ္လမ္းေၾကာင္းေအာက္မွာ ဘာထားမယ္၊ ဘယ္ service ကို startup မွာတင္ run ေအာင္ service register မယ္၊ ဒါမ်ိဳးေတြပါပဲ။ ပံုမွန္ install လုပ္မယ့္ action ေလးအျပင္ trojan install ေလးပါထဲ့ေပးထားရင္ သိမွာမဟုတ္ပါဘူး။

Tarball source file ေတြဆိုလည္း ျပန္ျပင္ထားတယ့္ source file ေလးေတြထဲ့ေပးထား၊ user က compile ျပီး install လည္းလုပ္လိုက္ေရာ trojan ေလးပါဝင္။ ဒါလည္းျဖစ္တာပဲ။ ပံုမွန္ကေတာ့ ယံုၾကည္ရတယ့္ site က repository ကမဟုတ္ရင္ install မလုပ္ဖို႕ပဲရွိပါတယ္။ Security အတြက္ instller package က original အတိုင္းဟုတ္မဟုတ္ ၊ ေျပာင္းလည္းထားတာရွိမရွိ PGP တို႕ GPG တို႕လို hash matching / keys ေတြနဲ႕ ေပးေလ့ရွိပါတယ္။ ဒါကေတာ့ သုံးေနတယ့္သူေတြ သိမွာပါ။ GPG မကိုက္လို႕ ၊ ဒါမွမဟုတ္ official GPG မရွိလို႕ install လုပ္မွာ ေသခ်ာလား ဆိုတယ့္ confirmation မ်ိဳးေမးတာ Ubuntu မွာလည္း ရွိပါတယ္။ ဒါမ်ိဳးေလးေတြ နည္းနည္း ေတာ့ ဂ႐ုစိုက္ေပးရင္ ပိုေကာင္းပါမယ္။

AppArmor တို႕ SELinux တို႕လို႕ security layer မ်ိဳးထပ္သုံးရင္ေတာ့ ပိုေကာင္းပါတယ္။ ဘယ္ user ၊ ဘယ္ process က ၊ ဘယ္ folder ကိုပဲ access ရမယ္၊ ဘယ္လို action မ်ိဳးပဲရမယ္ ဆိုတာမ်ိဳးေတြက ပံုမွန္ Unix / Linux ရဲ့ native ACL ထက္ အမ်ားၾကီး ပိုျပည့္စံုပါတယ္။ ဒါေပမယ့္ အလုပ္ပိုလို႕ Fedora တို႕ ဘာတို႕မွာဆို ေတာ္ေတာ္မ်ားမ်ားက disable ျပီး သုံးၾကတယ္။ က်ေနာ္အပါအဝင္ပါ :D ။ သတိဆိုတာေတာ့ ပိုတယ္မရွိေပါ့ဗ်ာ။ ( သူမ်ားေတြအတြက္ေျပာတာပါ )

ခုတစ္ေလာ Unreal IRCD ရဲ့ news ကိုဖတ္မိလို႕ ဒီ post ေရးျဖစ္သြားတာ။ Unreal IRCD ဆိုတာ opensource IRC server patform တစ္ခုပါ။ IRCD ထဲမွာေတာ့ နာမည္ အရွိဆုံးပဲထင္တယ္။ သူတို႕ရဲ့ Official download mirror တစ္ခ်ိဳ႕က tarball ေတြကို တစ္ေယာက္ေယာက္က trojan ပါတယ့္ file ေတြနဲ႕ အစားထိုးသြားပါတယ္။ Compile / install လုပ္လိုက္ရင္ trojan ေလးပါ ပါလာမယ္။ ဒါေတာင္ official mirror ေတြ။ သူတို႕က GPG နဲ႕ေပးတာမ်ိဳးမဟုတ္ေတာ့ file ရဲ့ integrity check မပါဖူးေပါ့။ ျပင္ထားလည္း User ဘက္ကမသိႏိုင္ဖူး။

Linux မွာ virus ေတြ trojan ေတြရွိတယ္လို႕ လွန္႕တာမဟုတ္ပါဘူး။ Windows နဲ႕ယွဥ္ရင္ အေတာ္ကိုနည္းပါတယ္။ ရွိတာေတာ့ ရွိတာပါပဲ။ Linux က idiot proof OS တစ္ခုမဟုတ္ေၾကာင္းနဲ႕ 'ငါတို႕ကေတာ့ virus မေၾကာက္ရလို႕ Linux ပဲသုံးတယ္' လို႕ ျပဳံးျပဳံးၾကီး မေျပာမိေအာင္ သတိေပးတာပါ။ ကိုယ္ကိုတိုင္လည္း အမွားၾကီးကို မွတ္ထား၊ သူမ်ားေတြကိုလည္း အမွားေတြ ေလွ်ာက္ေျပာေနမိရင္ ဆက္ေလ့လာတယ့္ေနရာမွာ သိထားတယ့္ အေၾကာင္းအရာ အမွားၾကီးေတြက ကန္႕လန္႕ခံေနလို႕ ပိုျပီး ခက္ခဲေနမွာ ဆိုးလို႕ပါ။ Santa Clause တကယ္ရွိမရွိနဲ႕ ၊ Linux မွာ virus / trojan တကယ္ရွိမရွိက သူမ်ားေျပာတာထက္. . သုံးရင္း ၊ ေလ့လာရင္း ရွာေဖြေတြ႕ရွိပါလိမ့္မယ္။


Divinity

Sunday, June 13, 2010

Clean script ( shell scripting)

Google docs ထဲၾကည့္ရင္းနဲ႕ အရင္က Shell script တိုတိုေလး တစ္ခုကို post လုပ္ျပီး ေရးဖို႕ စိတ္ကူးရလို႕။ Analysing လိုလို post ေတြက ေလွ်ာက္သာေရးေနတာ ကိုယ့္ဟာကိုယ္လည္း ပ်င္းတယ္။

ဒီ script မ်ိဳးကို က်ေနာ္တို႕က clean script လို႕ေခၚပါတယ္။ တကယ္ အလုပ္လုပ္တာက process kill တာပါ။ တခ်ိဳ႕ service ေတြက start ရင္ပဲျဖစ္ျဖစ္ stop ရင္ပဲျဖစ္ျဖစ္ တဝက္တပ်က္မွာ ရပ္သြားတာမ်ိဳးရွိတတ္ပါတယ္။ ျပန္ start ရင္လည္း service က run ေနျပီလို႕ေျပာတယ္။ Process list ထဲမွာလည္းရွိတယ္။ Log ထဲမွာက error ၾကီးနဲ႕ access လုပ္လို႕မရဘူး။ တခါတေလ service port ေတာင္ မပြင့္လိုက္ဖူး။ Stop လုပ္လို႕လည္းမရေတာ့ဘူး။ လြယ္လြယ္ေျပာရင္ေတာ့ Hang သြားတာေပါ့။ ဒါဆို kill မွရေတာ့မယ္။ ဒါမ်ိဳးက Failover Cluster လိုမ်ိဳးမွာ သုံးေလ့ရွိပါတယ္။ တစ္ဖက္မွာ hang ေနရင္ kill လိုက္၊ ျပန္စၾကည့္ ၊ ထပ္ hang ရင္ ထပ္ kill ျပီး ေနာက္ server တစ္လုံးကို failover လုပ္သြား၊ admin ကို mail ေလးဘာေလးပို႕။ ( MySQL ဆို file access permission error ရွိရင္ အဲဒါမ်ိဳးျဖစ္တက္တယ္။ )

Service kill တာပဲ ကိုယ့္ဟာကိုယ္ ps ေလး႐ိုက္ျပီးၾကည့္ ၊ pid ေလးမွတ္ျပီး kill လိုက္႐ံုေပါ့။ ဒါက manual လုပ္မွ ျဖစ္မွာပါ။ Administrator တစ္ေယာက္က ဘယ္မွာ ဘာ hang ေနလည္း သိဖို႕ စိတ္တန္ခိုးရွိမွ ျဖစ္မယ္၊ မဟုတ္ရင္ သိလိုက္မွာ မဟုတ္ဖူး။ တစ္ခါတစ္ေလ ဒီ server ေတြကို Veritas Cluster တို႕ဘာတို႕လို Server and service monitor ေတြနဲ႕ monitor လုပ္ခိုင္းထားျပီး service status ကို သူ႕ဟာသူ စစ္ခိုင္းထားတာမ်ိဳး၊ လူကိုယ္တိုင္ manual လုပ္ရတာမ်ိဳး နည္းႏိုင္သမွ် နည္းေအာင္ လုပ္ခ်င္တာမ်ိဳးဆိုရင္ေတာ့ script ေလးေတြလိုျပီ။ Veritas က ဒီ serivce hang ေနမွန္းသိရင္ (ဒါကလည္း တျခား script တစ္ခုနဲ႕ စစ္တာမ်ိဳးပါ) clean script ကိုေခၚျပီး kill လိုက္ပါတယ္။ ျပီးမွ start script ကို ေခၚျပီး ျပန္ စတာေပါ့။

#!/bin/sh

pid=`/usr/bin/ps -ef | /usr/bin/grep mysqld | grep -v grep|awk -F' ' '{print $2}'`;

if test "$pid" = "" ; then
echo "Process is not Running";
else
echo "Killing process..."
kill -9 $pid;
fi


ဒီ script မွာ mysqld ကို ဥပမာ အေနနဲ႕ေပးထားပါတယ္။ Script ေလးကိုျပန္ၾကည့္ရေအာင္။

ပထမ line မွာ #!/bin/sh လို႕ေပးထားတာက Shell Env ကို sh shell လို႕သက္မွတ္တာပါ။ ဒီ script က bash shell မွာလည္း အလုပ္လုပ္ပါတယ္။

ဒုတိယ line က ဒီ script မွာ အဓိက အလုပ္လုပ္တယ့္ line ပါ။
pid=`/usr/bin/ps -ef | /usr/bin/grep mysqld | grep -v grep | awk -F' ' '{print $2}'`;


pid ဆိုတယ့္ variable တစ္ခုယူလိုက္ပါတယ္။ ဘာ type ျဖစ္ရမယ္လို႕ ၾကိဳသတ္မွတ္ေပးဖို႕မလိုပါဘူး။ pid ထဲကို value တစ္ခုထဲ့တယ့္ေနရာမွာ နည္းနည္းအေသးစိတ္ပါတယ္။ ေနာက္က command ေတြကိုအရင္စမ္းၾကည့္၊ လိုခ်င္တယ့္ result ရမွ ဒီline ကိုေရးတာေကာင္းပါတယ္။ #ps -ef | grep mysqld နဲ႕ MySQL service ရဲ့ process id ကိုၾကည့္လို႕ရပါတယ္။ ဒါေပမယ့္ -ef ရဲ့ ထုံးစံအရ၊ MySQL ရဲ့ pid အျပင္ အခု run လိုက္တယ့္ grep command ရဲ့ pid ပါျပေနတယ္။ ဒါဆို pid အပိုတစ္ခုပါေနတယ္။ ဒါဆိုမလိုအပ္တယ့္ grep ရဲ့ pid ကို ဖယ္ထုတ္မယ္။ grep -v grep ကိုသုံးပါတယ္။ grep -v က invert match လို႕ေခၚတယ့္ option ပါ။ grep -v grep လို႕ေပးလိုက္ေတာ့ grep ရဲ့ pid က လြဲရင္ လို႕ ဆိုလိုလိုက္တာပါ။ ဒါဆို mysqld တစ္လိုင္းထဲရျပီ။ ( တကယ္လို႕ တျခားမဆိုင္တာေတြရွိရင္လည္း ဖယ္ရပါလိမ့္မယ္။ ဒါမွမဟုတ္လည္း result ထဲက ေနာက္တစ္ခုကို ထပ္ grep လိုက္ေပါ့။ ) လိုခ်င္တာ တစ္လိုင္းထဲရျပီဆိုရင္ လိုခ်င္တယ့္ Process ID တစ္ခုထဲကို pid variable ထဲကို ထဲ့ဖို႕ လိုပါတယ္။ တစ္လိုင္းလုံးေပးလိုက္လို႕မရပါဘူး။ ဒီမွာ awk ကိုသုံးျပီး pattern filtering လုပ္ပါတယ္။ awk -F' ' ဆိုတာက awk ကိုသုံးျပီး output result ကို filed ေတြခြဲလိုက္တာပါ။ ဘာနဲ႕ ခြဲလည္းဆိုေတာ့ -F ဆိုတယ့္ Field separator နဲ႕ field ေတြကို space နဲ႕ခြဲထားတယ္လို႕ ေျပာလိုက္ပါတယ္။ -F ရဲ့ ေနာက္က quote ေလးႏွစ္ခုၾကားမွာ space တစ္ခ်က္ပါပါတယ္။ ေနာက္က '{print $2}' ဆိုတာကေတာ့ ခုနက space ေတြနဲ႕ခြဲထားတယ့္ထဲက ဒုတိယ field ကိုပဲျပပါလို႕ ေျပာတာပါ။ ဒါဆို Mysqld ရဲ့ process id တစ္လုံးထဲရပါျပီ။ အဲဒီ process id number ကို pid ဆိုတယ့္ variable ထဲကို ထည့္လိုက္ပါတယ္။

ေျပာစရာ က်န္ခဲ့တာက equal sign ေလးရဲ့ေနာက္က command execution တစ္ခုလုံးကို ` ` ႏွစ္ခုၾကားမွာေရးပါတယ္။ Keyboard မွာ 1 ေဘးကေကာင္ေလးေပါ့။ exec comand နဲ႕ ခက္ဆင္ဆင္တူပါတယ္။ ဒီ line မွာ Mysqld က run ေနရင္ mysqld ရဲ့ pid ကို output result အျဖစ္ pid variable ထဲထည့္လိုက္ျပီး ၊ run မေနဖူးဆိုရင္ ဘာ output မွမထြက္တယ့္အတြက္ pid variable က empty value ပဲ ဆက္ျဖစ္ေနပါလိမ့္မယ္။

ဒုတိယ line ကရလာတာကို မွ if .. else နဲ႕ ျပန္စစ္ျပီး အလုပ္လုပ္ပါျပီ။
if test "$pid" = "" ; then

if test နဲ႕စစ္ျပီး then ရဲ့ေနာက္က (ေအာက္က) line ေတြကို အလုပ္လုပ္ပါတယ္။ if test "$pid" = "" လို႕စစ္လိုက္တယ့္အရ $pid ထဲမွာ ဘာ value မွမရွိပဲ blank ျဖစ္ေနမယ္ဆိုရင္ ေအာက္ကလိုင္းျဖစ္တယ့္ echo ကိုအလုပ္လုပ္ပါတယ္။

else နဲ႕ တကယ္လို႕ pid variable မွာ value တစ္ခုခုရွိေနမယ္ ဆိုရင္ process kill ေၾကာင္း echo msg ေလးတစ္ေၾကာင္းေပးျပီး kill -9 $pid နဲ႕ pid variable ထဲမွာပါလာတယ့္ process id number ကို kill ပါတယ္။ ဒီမွာ process က hang ေနတာမို႕ -9 နဲ႕ မွရပါလိမ့္မယ္။

ဒီမွာ နည္းနည္း ထြန္႕စရာေလးေတြ ရွိေသးတယ္။ ps မွာ -ef option ကမ်က္စိေနာက္တယ္။ -ae နဲ႕ မရဖူးလားဆို ရပါတယ္။ print မွာ $1 ျဖစ္သြားပါလိမ့္မယ္။ Unix style နဲ႕ aux နဲ႕ဆိုရင္ေတာ့ $2 ပါပဲ။ ကိုယ့္ဟာကိုယ္ျပင္ေပါ့။ -ae က MySQL လိုမ်ိဳး process name ရွင္းမွ အဆင္ေျပပါတယ္။ Java လိုေကာင္ေတြဆိုရင္ Java ဆိုတယ့္ process name နဲ႕ပဲ ေခၚထားတယ့္ class ေပၚမွာမူတည္ျပီး မတူညီတယ့္ process ေတြျဖစ္တက္ပါတယ္။ အဲဒါမ်ိဳးဆို ps -ef နဲ႕ java ကို တစ္ခါ ၊ classname ကိုတစ္ခါ grep မွ လိုခ်င္တယ့္ process ကိုအတိအက်ရပါလိမ့္မယ္။

If test မွာလည္း "" နဲ႕ blank လို႕မစစ္ပဲ NULL ျဖစ္မျဖစ္စစ္ရင္လည္း ရပါတယ္။ Space ေလးေတြျဖဳတ္ေရးရပါလိမ့္မယ္။ Knowledge sharing သက္သက္ပါ။ က်ေနာ္လည္း shell scripting expert မဟုတ္လို႕ ဒီထက္လြယ္ကူတယ့္ နည္းလမ္းလည္း ရွိႏိုင္ပါတယ္။ သိရင္ ျပန္လာ share ပါ။ စိတ္ဝင္စားပါတယ္။ :D

Thursday, June 10, 2010

Linux တစ္ရပ္စာ ေမွ်ာ္စဥ္ထက္က ျမင္ကြင္း (3)

1994 မွာစတင္ကခဲ့ျပီး OpenSource community ရဲ့ leading company လို႕ ကိုယ့္ကိုကိုယ္ ေခၚတယ့္ company ကေတာ့ Redhat ပါ။ Opensource လို႕ေျပာတယ့္ product ေတြနဲ႕ စီးပြါးေရးလုပ္တယ္ပဲေျပာရမလားပဲ။ သူတို႕ရဲ့ ကိုယ္ပိုင္ proprietary component ေတြ tools ေတြကလြဲရင္ Redhat Enterprise Linux တစ္ခုလုံးရဲ့ source code ကို opensource ေပးပါတယ္။ JBoss ဆိုလည္း Community version ဆိုျပီးရွိတယ္။ တခ်ိဳ႕ေသာ အစိတ္အပိုင္းေတြက လြဲရင္ အားလုံး Opensource ေပးျပီး သူတို႕က Technical Support တို႕ Consultancy တို႕ ေရာင္းစားပါတယ္။

Redhat ကေပးထားတယ့္ Source code ေတြကို Community ကျပန္ compile လုပ္ထားတဲ့ OS ေတြရွိပါတယ္။ Redhat clone လို႕လည္းေခၚၾကတယ့္ Redhat derivation ေတြပါ။ အဲထဲမွာေတာ့ CentOS ၊ Scientific Linux နဲ႕ Whitebox က လူသုံးၾကပါတယ္။ အဲထဲမွာေတာ့ CentOS က လူသုံးအမ်ားဆုံးနဲ႕ Redhat နဲ႕ အတူဆုံးပါပဲ။ Desktop user / home user ေတြကို အဓိကထားတာမဟုတ္လို႕ End user application ေတြ သိပ္မပါလွပါဘူး။ ( Redhat Enterprise Linux Desktop ဆိုျပီး ရွိေပမယ့္ တစ္ခါမွ စမ္းဖို႕ မၾကံုေသးပါဘူး။ )

CentOS ကလည္း Linux Sever OS ထဲမွာ အေတာ္တြင္က်ယ္ပါတယ္။ Redhat Enterprise Linux နဲ႕ CentOS က 95% ေလာက္အတူတူပါပဲ။ Redhat ရဲ့ source codes ကို centOS community / team ကျပန္ compile လုပ္ထားတာပါ။ အဲဒါေၾကာင့္ update ေတြ patch ေတြၾကေတာ့ CentOS တို႕ SL တို႕ က နည္းနည္းေနာက္ၾကပါတယ္။ Redhat က release လုပ္ျပီးမွ လိုက္ compile လုပ္တာကိုး။ Stability ပိုင္းမွာ စိတ္တိုင္းၾကစရာ ေကာင္းပါတယ္။

Redhat ကေငြေၾကးအားျဖင့္ ေထာက္ပံ့ထားတယ့္ Community linux တစ္ခုကေတာ့ Fedora ပါ။ Redhat Engineer ေတြလည္း Fedora team မွာပါပါတယ္။ Community linux တို႕ရဲ့ ထုံးစံအတိုင္း အျမဲတန္း အရွိန္အဟုန္နဲ႕ သြားတယ့္ linux တစ္ခုပါပဲ။ Fedora project က အျမဲတမ္း feature အသစ္အဆန္းေလးေတြ ထြက္ေလ့ရွိတယ့္ project လို႕ေျပာၾကပါတယ္။ Fedora ရဲ့ တည္ထြင္မႈေတြဟာ စမ္းသက္မႈအဆင့္ဆင့္ေက်ာ္ျဖတ္ျပီးရင္ Redhat က ေမြးစားေလ့ရွိပါတယ္။ စမ္းသပ္တယ့္ ေနရာလိုျဖစ္ေနလို႕ တစ္ခ်ိဳ႕ Fedora version ေတြဟာ buggy ျဖစ္တက္ပါတယ္။

ေျပာဖို႕ က်န္သြားတယ္။ Oracle ရဲ့ Oracle Enterprise Linux ဆိုတာလည္းရွိပါတယ္။ 1998 မွာ Oracle က သူတို႕ database product ကို Redhat ေပၚမွာ run ႏိုင္ေၾကာင္း ( Supported OS) အျဖစ္ ေၾကညာပါတယ္။ ေနာက္ေတာ့ ဘယ္လိုျဖစ္တယ္မသိ သူတို႕ logo နဲ႕ Linux ထြက္လာပါတယ္။ အနည္းငယ္ ျပဳျပင္ထားတယ္လို႕ေတာ့ သူမ်ားေျပာဖူးတယ္။ ေရာင္းတယ့္ product ကို ကိုကျပန္ ဖန္တီးျပီး ျပန္ေရာင္းတာဆိုေတာ့ သိပ္မမိုက္ပါဘူး။ ပိုက္ဆံေပးရတာခ်င္းတူရင္ေတာ့ origin ျဖစ္တယ့္ Redhat က Technical Support ပိုသာမယ္လို႕ ယူဆရတာပဲ။ Linux က Redhat အတြက္က main stream product ကိုး။

Redhat လိုပဲ rpm based linux လို႕သတ္မွတ္ျပီး ( ဒါေပမယ့္ Redhat ကိုအေျခမခံပါဘူး) Commercial product ၾကီးေနာက္တစ္ခုကေတာ့ Novell ရဲ့ SuSE enterprise ပါ။ ဟိုးအစတုန္းက Slackware ကိုအေျခခံခဲ့ျပီး ေျဖးေျဖးျခင္းကြဲထြက္လာတာ အခုဆို slack နဲ႕ ေတာ္ေတာ္ကို မတူေတာ့ပါဘူး။ အသုံးတြင္က်ယ္မႈမွာေတာ့ Redhat ကိုမမွီေပမယ့္ တကယ့္ company အၾကီးၾကီးေတြရဲ့ mission criticle server ေတြမွာေတာ့ ေဝပံုၾကယူထားတာပါပဲ။ Technical support ပိုင္းနဲ႕ Customer care မွာ Redhat ထက္ေတာင္သာတယ္လို႕ ဆိုပါတယ္။ ( ဒါကေတာ့ ကို William ေျပာတာပါ။ သူတို႕ company မွာ SuSE ကိုပဲ အဓိကသုံးတယ္ဆိုလို႕ ေမးျဖစ္ခဲ့တာပါ။)

SuSE မွာလည္း Redhat ရဲ့ Fedora လို စမ္းသက္ကြင္းတစ္ခုရွိပါတယ္။ OpenSuse ပါ။ သူကလည္း beta လိုလို နဲ႕ က်ေနာ္သုံးဖူးတုန္းကေတာ့ စိတ္ေလစရာေကာင္းေလာက္ေအာင္ buggy ခဲ့ပါတယ္။ KDE မို႕လို႕ ၾကည့္ရတာ မိုက္ပါတယ္။ SuSE / OpenSuSE ရဲ့ GUI က တစ္ခ်ိဳ႕ေနရာေတြမွာ ေတာ္ေတာ္လွပါတယ္။ KDE ေတာင္မွ သူက ထက္ျပင္ထားတာမို႕ Gnome ေတြထက္ေတာ့ memory ပိုစားပါတယ္။

စကားစပ္လို႕ပါ၊ မွတ္မွတ္ရရ OpenSuSE ကို စိတ္နာေစတယ့္ အေၾကာင္းေလးေပါ့။ အလုပ္ကဝင္ခါစ၊ Linux က သိပ္မတတ္တေခါက္၊ Samba ကို Active directory နဲ႕ cross authenticate လုပ္ခ်င္လို႕။ PAM ေတြျပင္တယ္ command line ကေန။ GUI မွာ user account manager ေလးဖြင့္ျပီး ျပန္ပိတ္လိုက္ရင္ က်ေနာ္ျပင္ခဲ့သမွ် PAM configuration အကုန္ roll back ပဲ။ မရွိေတာ့ဘူး။ အကုန္ default ေတြျပန္ျဖစ္ကုန္တယ္။ Samba မွာ Authentication method မွာ local authentication ( server) အစား AD authentication (ads) လို႕ ျပင္ ၊ save လုပ္၊ ျပန္ၾကည့္ရွိေသးတယ္။ UI ကေန Samba configuration wizard ေလးဖြင့္လိုက္၊ ခ်က္ခ်င္း ဘာမွမျပင္ပဲ cancel လုပ္၊ ဟိုမွာ server ျပန္ျဖစ္ေနျပီ။ UI က wizard ေလးဖြင့္လိုက္မိတာနဲ႕ အကုန္ျပန္လုပ္ရတာပဲ။ အဲဒါျပီးကတယ္က က်ေနာ္ OpenSuSE ျပန္မသုံးျဖစ္ေတာ့ပါဘူး။ o_O

ဒီေန႕ ေခါင္းကလည္းမူးေနသလိုလို အိပ္ခ်င္ေနသလိုလိုနဲ႕ ေရးထားတာ အဆက္အစပ္သိပ္မရွိဖူး။ ေနာက္မွ တစ္ခ်ိဳ႕ဟာေလးေတြ ျပန္ျဖည့္ပါအုန္းမယ္။ Zero / Zero = Zero ေျပာသလို ရုံးထဲမွာ အိပ္ေငြ႕ခ်တယ့္ ဓာတ္ရွိပုံရတယ္။ တစ္ေနကုန္ သူမ်ားရုံးမွာ သြားေနတာ လန္းဆန္းလို႕ ၊ ရုံးလည္းျပန္လာေရာ 10 minutes မၾကာဖူး ေလးလံထိုင္းမိႈင္းျပီး အိပ္ငိုက္သြားတယ္။ ေနာက္ေန႕ၾက ခံုေျပာင္းထိုင္ၾကည့္အုန္းမွပါ။ :(

Thursday, June 3, 2010

Linux တစ္ရပ္စာ ေမွ်ာ္စဥ္ထက္က ျမင္ကြင္း (2)

Linux distribution ေခတ္ဦးေလာက္ 1993 - 1994 ပတ္ဝန္းက်င္မွာ Slackware နဲ႕ေရွ႕ဆင့္ေနာက္ဆင့္နီးပါး ထြက္လာတယ့္ distro ကေတာ့့ Debian ပါ။ Operation System ေတြထဲက အေအာင္ျမင္ဆုံး Community driven server OS လို႕ေတာင္ေျပာလို႕ရပါတယ္။ Enterprise level linux server ေတြမွာ Redhat ျပီးရင္ လူသုံးအမ်ားဆုံးေလာက္ရွိပါတယ္။ Stability အားေကာင္းတယ့္ Linux distro တစ္ခုပါ။ Ubuntu ရဲ့အေဖမို႕ Ubuntu ကြၽမ္းက်င္ရင္ Debian ေလ့လာရတာ မခက္ပါဘူး။ Community အလြန္အားေကာင္းပါတယ္။ အဲဒီအတြက္လည္း Debian ဟာအလြန္ up to date ျဖစ္ပါတယ္။ Re Debian package (.deb) ေတြ ကို Commnity တစ္ခုလုံးက Engineer ေထာင္နဲ႕ခ်ီ maintain လုပ္ေနတာမို႕ Commercial Linux ေတြထက္ update release ပိုျမန္ပါတယ္။ Library တစ္ခု ၊ package တစ္ခု version အသစ္ထြက္ရင္ Debian repo ေတြမွာလည္း update version ရွိေနပါျပီ။ Debian မွာ package manager အေနနဲ႕ apt ကို အဓိကသုံးပါတယ္။ က်ေနာ္ကိုယ္တိုင္က Deb linux fans မဟုတ္ေပမယ့္ package management မွာ apt က redhat ရဲ့ yum ထက္ပိုသာတယ္လို႕ ျမင္ပါတယ္။ Server OS မို႕ laptop မွာသြင္းရင္ driver ေလးေတြ ကိုယ့္ဟာကိုယ္ ရွာသြင္းရတာမ်ိဳး ျဖစ္တတ္ပါတယ္။ ဥပမာ webcam လိုဟာမ်ိဳးေပါ့။

အေဖထက္သား တစ္လၾကီးတယ့္ Deb-based Linux ကေတာ့ ဇာတ္လိုက္ေက်ာ္ Ubuntu ပါ။ Community driven ပါပဲ။ Server OS ေနရာမွာ Debian ကိုမေက်ာ္ႏိုင္ေပမယ့္ Desktop version ကေတာ့ Linux တစ္ခုအေနနဲ႕ဆိုရင္ ဟုန္းဟုန္းေတာက္ေအာင္ျမင္ပါတယ္။ Ubuntu က desktop ေတြ laptop ေတြအတြက္ အဓိကထားထားတာမို႕ hardware ေတာ္ေတာ္မ်ားမ်ားကို driver သိပါတယ္။ Release cycle က ေျခာက္လတစ္ခါ release လုပ္ေတာ့ အျမဲတန္း kernel အသစ္ library အသစ္ hardware driver အသစ္ေတြနဲ႕ အဆင္ေျပပါတယ္။ Install လုပ္လိုက္ရင္ hardare အားလုံးနီးပါးက သုံးရန္အသင့္၊ လိုအပ္မယ့္ package ေလးေတြကလည္း default ပါျပီးသား၊ ထပ္ install လုပ္ခ်င္ရင္လည္း GUI ကေန click click နဲ႕တင္ရတယ္။ Mouse ေလးသုံးရမွ ေက်နပ္သူေတြအတြက္ ေတာ္ေတာ္အဆင္ေျပပါတယ္။ Windows ေလာက္ idiot proven usability မဟုတ္ေပမယ့္ 90% ေလာက္ ok မွာပါ။ Debian ရဲ့သားမို႕ debian community ကိုအေမြဆက္ခံထားပါတယ္။ Windows မဝယ္ခ်င္လို႕၊ Virus စိတ္ညစ္လို႕ Linux ဖက္ေျပာင္းလာသူေတြက Ubuntu ကိုေရြးေလ့ရွိတာမို႕ beginner ဆန္ဆန္ေမးခြန္းေတြ ေတာ္ေတာ္မ်ားမ်ားက ubuntuforum.org မွာရွိေနျပီးသားပါ။ မသိရင္ ေမးစရာေတာင္မလိုဘူး။ သြားရွာ ၊ ရွိတယ္။

ဒါဆို ေတာ္ေတာ္အစဥ္ေျပတယ့္ Linux ပဲလို႕ေျပာလို႕ရပါတယ္။ တစ္ခုေတာ့ရွိပါတယ္။ ဒါကလည္း ၾကားျဖတ္ေျပာတယ့္ က်ေနာ့ရဲ့personal အျမင္၊ အၾကံေပးတာပါ။ သိပ္ user friendly ျဖစ္လြန္းေတာ့ Windows အစားထိုးစစ္စစ္ျဖစ္ေနတတ္ပါတယ္။ Windows သုံးတုန္းကလည္း Operation system လို႕ေျပာရင္ မ်က္လုံးအဝိုင္းသား၊ Ubuntu သုံးေတာ့လည္း ထိုနည္းလေကာင္း။ User အတြက္ အစဥ္ေျပပါတယ္။ Engineer ျဖစ္ခ်င္ရင္ေတာ့ ေလ့လာရုံေလာက္ပဲ GUI ကိုအားကိုးသင့္ပါတယ္။ Linux ကိုတကယ္ သိခ်င္ တက္ခ်င္ရင္ေတာ့ GUI ကို သိပ္မမွီခိုေစခ်င္ပါဘူး။ မဟုတ္ရင္ Ubuntu user ပဲျဖစ္လာတတ္ပါတယ္။ Linux user ျဖစ္မလာေတာ့ပါဘူး။

Ubuntu က Gnome desktop နဲ႕လာေလ့ရွိျပီး၊ Kubuntu ရယ္လို႕ KDE နဲ႕ လာတာလည္းရွိပါတယ္။ Ubuntu ကိုမွ အေျခခံတယ့္ Educational version Edubuntu တို႕ဘာတို႕လည္းရွိေသးတယ္။ ေနာက္ထက္ Ubuntu ကိုအေျခခံထားတယ့္ အတိုင္းအတာတစ္ခုထိ ေအာင္ျမင္တယ္လို႕ေျပာလို႕ရတယ့္ Linux ကေတာ့့ Linux Mint ပါ။ သူလည္း home user ေတြအတြက္ ရည္ရြယ္တာမို႕ OpenOffice တို႕ Multimedia player ေတာ္ေတာ္မ်ားမ်ားတို႕ အဆင္သင့္ပါလာပါတယ္။ သူလည္းလွလွပပနဲ႕ သုံးရတာ အေတာ္လြယ္တယ့္ Linux ပါပဲ။

Ubuntu လိုပဲ Debian အေျခခံတယ့္ ေနာက္နာမည္ၾကီး Linux တစ္ခုက Knoppix ပါ။ 2003 မွာ စတင္ခဲ့ျပီး Linux LiveCD distro ထဲမွာ သူစေအာင္ျမင္တာလို႕ ေျပာရမလားမသိဘူး။ သူ႕ထက္ေစာတယ့္ DemoLinux တို႕ဘာတို႕ရွိေပမယ့္ က်ေနာ္တို႕က 2004 ေလာက္မွ မ်က္စိစပြင့္တာမို႕ Knoppix နဲ႕ပဲ စသိခဲ့တာပါ။ Install လုပ္စရာမလိုပဲ CD ေပၚကေနတင္ boot တက္လို႕ရတယ္။ အမ်ားအားျဖင့္ rescue disc အေနနဲ႕ အသုံးမ်ားပါတယ္။ အဲ အခုေတာ့ Ubuntu အပါအဝင္ Linux တိုင္းနီးပါးက LiveCD option ေပးလာပါတယ္။ Download ပါ၊ စမ္းၾကည့္ပါ၊ ၾကိဳက္မွ install ပါေပါ့။

ဒါကေတာ့ Deb based ထဲက ေရာက္တက္ရာရာပဲ။ Rpm based ထဲက Redhat တို႕ Fedora တို႕၊ Slackware ကို အေျခခံတယ့္ Novell ရဲ့ SuSE linux တို႕ ၊ Linux from scratch တို႕၊ Hacker လို႕ကိုယ့္ကိုကိုယ္ ေခၚတယ့္သူေတြၾကိဳက္တယ့္ Security auditing linux ေတြ၊ SmoothWall တို႕လို firewall linux ေတြ ... ေတာ္ေတာ္မ်ားတာပဲ။ ေရးျဖစ္မယ္ ဆိုရင္ေျပာပါတယ္။ :D

Wednesday, June 2, 2010

Linux တစ္ရပ္စာ ေမွ်ာ္စဥ္ထက္က ျမင္ကြင္း

အခုေနာက္ပိုင္း ျမန္မာ အိုင္တီ community ေတြမွာ Linux အေၾကာင္းေတြေျပာလာၾက သုံးတယ့္သူပိုမ်ားလာၾကတာေတြ႕ရတယ္။ Windows နဲ႕ Operation System အတူတူပဲလို႕ထင္ရာကေန၊ Computer နဲ႕ Windows ခြဲျခားမရတယ့္အေနအထားကေန ေျပာင္းလည္းလာတာေတာ့ ဝမ္းသာစရာပါ။ ဒါေပမယ့္ Linux လို႕ေျပာရင္ Ubuntu ေျပးေျပးျမင္တယ့္သူေတြ မ်ားမ်ားလာတာေတာ့ စိတ္ကသိကေအာင့္ျဖစ္စရာပဲ။ Linux distro ေတြအေၾကာင္းနည္းနည္းေလာက္ ေလ့လာၾကည့္ရေအာင္။ က်ေနာ္ေသခ်ာမသိတယ့္ မသုံးဖူးတယ့္ distro ေတြကို ရမ္းမတုတ္ခ်င္လို႕ ထဲ့မေျပာေတာ့ပါဘူး။ က်ေနာ္သိသေလာက္ထဲက ဘယ္ distro က ဘာေတြစိတ္ဝင္စားစရာေကာင္းလည္းပဲ ေျပာေတာ့မယ္။ က်ေနာ္သိသေလာက္ထဲက ျပန္မွ်ေဝယံုေလာက္ပါ။

Linux distro ေတြမွာ တခ်ိဳ႕က power user ေတြအတြက္အဓိက ထားတာမ်ိဳးရွိပါတယ္။အဲလို distro ေတြက stability နဲ႕ performance ကိုအဓိကထားပါတယ္။ Linux ကိုနားလည္းထားျပီးသား experienced user ေတြအတြက္သာ အစဥ္ေျပပါတယ္။ ဥပမာေျပာရရင္ေတာ့ Gentoo နဲ႕ Slackware ပါ။ Slackware က Linux history ရဲ့ သက္တမ္းအရင့္ဆုံး distro ပါ။ User က ကြၽမ္းက်င္ရင္ ကြၽမ္းက်င္သလို customized လုပ္ႏိုင္လို႕ ကိုယ့္စိတ္တိုင္းၾက ရႏိုင္တယ္လို႕ ဆိုၾကပါတယ္။ အဲ၊ တကယ္လို႕ Linux အေၾကာင္းကို မေတာက္တေခါက္ေတာင္ မသိဘူး၊ သူမ်ားေျပာတာ နားမေယာင္ဘူး၊ ခုမွ Linux ကိုနားလည္ခ်င္လို႕ စစမ္းခ်င္တာဆိုရင္လည္း Gentoo သို႕မဟုတ္ Slackware ကိုသုံးတာ အေကာင္းဆုံးလို႕ ေျပာၾကပါတယ္။ တကယ္တမ္း စိတ္ရွည္ရွည္နဲ႕ အေသးစိတ္ေလ့လာခ်င္တယ္ ဆိုရင္ပါ။ Gentoo သို႕မဟုတ္ Slackware သုံးတက္တာဟာ Linux သုံးတတ္တာပဲ လို႕ Senior ေတြေျပာတာ မွတ္သားဖူးတယ္။ စိတ္ရွည္ရွည္ထားႏိုင္ရင္ အေကာင္းဆုံး distro ေတြေပါ့။

ဖတ္ရတာေတာ့ စိတ္ဝင္စားစရာ distro ပဲ၊ ဘာလို႕ မသုံးၾကတာလည္း ? သုံးၾကပါတယ္။ အလြယ္တကူမရွိလို႕ Home user usable မျဖစ္လို႕၊ လူသုံးနည္းတာပါ။ Package ေတြကိုယ္တိုင္ compile လုပ္ configure လုပ္ရတာ စိတ္ဝင္စားစရာေကာင္းေပမယ့္ အလွ်င္လိုလို႕မရပါဘူး။ ဒီေန႕ install လုပ္၊ ေနာက္ေန႕သူမ်ားေတြေရွ႕ 'ေတြ႕လား ငါ linux သုံးေနတာ' လုပ္ခ်င္ရင္ေတာ့ ဒီ distro မ်ိဳးနဲ႕ အစဥ္မေျပပါဘူး။ Linux system တစ္ခုရဲ့ အလုပ္လုပ္ပံု၊ kernel module ေတြ၊ package ေတြ compile လုပ္တာ၊ Makefile ေတြ၊ လိုအပ္တယ့္ library ေတြ ၊ behind the scene က အေၾကာင္းအရာေတြ သိခ်င္ရင္ေတာ့ စိတ္ဝင္စားစရာ ေကာင္းတယ့္ Linux distro ေတြပါ။

.............................
အင္းးးးးးးးးးးးး အားလုံး အစအဆုံးေရးျပီးမွတင္ခ်င္ေပမယ့္ က်ေနာ့ google docs ထဲမွာလည္း ေရးလက္စေတြ ေတာ္ေတာ္မ်ားေနျပီ။ အလကားသိမ္းထားတာပဲ အဖတ္တင္ေနမွာဆိုးလို႕ ဒါကို အရင္တင္လိုက္ပါတယ္။ xD

Thursday, March 18, 2010

NTFS Filesystem support on Linux

Ubuntu တို႕ Fedora တို႕မွာေတာ့ NTFS support က အစကတည္းကပါလာလိမ့္ရွိပါတယ္။ ဒါေတာင္တခါတစ္ေလၾက read ပဲရျပီး write မရပဲျဖစ္တက္ေသးတယ္။ က်ေနာ္က CentOS အသုံးမ်ားေတာ့ CentOS မွာက NTFS write support မပါတက္ဖူး။ Kernel recompile ရင္ေတာ့ရေပမယ့္ NTFS write ေလးရဖို႕ kernel ေတာ့ recompile မလုပ္ခ်င္ဖူး။ NTFS read/write ရေအာင္ NTFS-3G ဆိုတယ့္ FS module ရွိတယ္။ RPMforge repository မွာရွိပါတယ္။ လြယ္လြယ္ကူကူ အဲဒါေလးပဲ install လိုက္တာေကာင္းပါတယ္။

အရင္ဆုံး rpm-forge repo ကို yum repo ထဲမွာထဲ့ဖို႕လိုပါတယ္။ ဒါမွ yum နဲ႕ install လုပ္ရင္ သူ႕ဟာသူ dependency resolving လုပ္သြားမွာ။ မဟုတ္ရင္ ကိုယ့္ဟာကိုယ္ dependency ေတြ install ေနရမယ္။ CentOS လို႕ယူဆျပီးပဲ ေျပာပါမယ္။ ဒါေပမယ့္ RPM အလုပ္လုပ္တယ့္ Linux တိုင္းမွာ ရမွာပါ။

1. rpmforge rpm ေလးအရင္ download မယ္။ (wget ကေတာ့ ရွိျပီးသားလို႕ ယူဆလိုက္ပါတယ္။ မရွိရင္ေတာ့ wget အရင္ သြင္းပါ။)
#wget http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.i386.rpm


2. GPG key import လုပ္မယ္။ မဟုတ္ရင္ RPM ကို install လုပ္လို႕မရပဲျဖစ္ေနပါလိမ့္မယ္။ 3rd party RPM ျဖစ္ေနလို႕ပါ
#rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt


3. RPM ကိုအရင္စစ္
#rpm -K rpmforge-release-0.3.6-1.el5.rf.i386.rpm


4. RPMforge repo install လုပ္မယ္
#rpm -i rpmforge-release-0.3.6-1.el5.rf.i386.rpm

ဒီလို လုပ္လိုက္ျခင္းအားျဖင့္ ေနာက္ install လုပ္တိုင္း CentOS repo က တင္မဟုတ္ပဲ RPMforge repo ကပါ package ေတြကိုရွာပါလိမ့္မယ္။

5. RPMforge repo မွာရွိတယ့္ package ေတြရဲ့ list ကို အရင္ build လုပ္ရပါအုန္းမယ္။
#yum check-update


6. Kernel version ေလး တစ္ခ်က္ ၾကည့္ရေအာင္။ ဒါအေရးၾကီးပါတယ္။ Kernel version နဲ႕ kernel-devel version က တူဖို႕လိုပါတယ္
#uname -r


7. Kernel-devel install လုပ္မယ္။
#yum install kernel-devel

တကယ္လို႕ Kernel devel နဲ႕ Kernel နဲ႕ version မတူရင္ kernel ပါျပန္ install လုပ္ျပီး restart တစ္ခါခ်ရပါလိမ့္မယ္။ Kernel အသစ္နဲ႕ boot လုပ္ျပီးမွ က်န္တာ ဆက္လုပ္ပါ။

8. လိုအပ္တယ့္ Package ေတြကို တစ္ခါထဲ install လုပ္ရေအာင္
#yum install fuse fuse-ntfs-3g dkms dkms-fuse


9. NTFS partition ကို Linux ေပၚမွာ mount လို႕ရပါျပီ
#mount -t ntfs-3g /mount_point /windows_partition

Mount point ကေတာ့ ကိုၾကိဳက္ရာနဲ႕ အစားထိုးေပါ့။ အစကတည္းက ၾကိဳျပီး create မထားရင္လည္း အခု create လို႕ရပါတယ္။ Windows partitions ကိုမသိရင္ေတာ့ fdisk နဲ႕ၾကည့္ပါ။

#fdisk -l


ၾကလာတယ့္ table ထဲက NTFS file system နဲ႕ partition ကိုမွတ္ထား။ ဆိုၾကပါေတာ့ /dev/hda2 ဆိုရင္ အေပၚက /windows-partition ေနရာမွာ /dev/hda2 ကို အစားထိုးလိုက္ပါ။ စမ္းၾကည့္ပါ အဆင္ေျပမွာပါ။


Divinity

Tuesday, February 2, 2010

Linux Directory Structure

Linux system ကိုစေလ့လာမယ္ဆိုရင္ Linux ရဲ့ directory structure ဟာ Windows နဲ႕ လုံးဝကြဲျပားေနတာကို ေတြ႕ရပါလိမ့္မယ္။ Windows မွာတုန္းကလို C: D: ေတြလည္းမရွိေတာ့ သလို Windows directory လိုမ်ိဳးလည္း ရွာေတြ႕မွာမဟုတ္ပါဘူး။Windows မွာဆိုရင္ ဒါကေတာ့ C:\windows ေအာက္မွာ၊ ဒါဆိုရင္ေတာ့ system32 ေအာက္မွာ ဆိုတာမ်ိဳး ရင္းႏွီးေနေပမယ့္ Linux မွာဆိုရင္ေတာ့ ဘယ္လို file ေတြက ဘယ္ directory ေအာက္မွာရွိတတ္တယ္ဆိုတာ စစခ်င္းမွာ ရွာဖို႕ခက္ေနတတ္ပါတယ္။ ဒါဆို Linux မွာဘာေတြရွိလည္း၊ အဲဒါေတြက ဘာေတြလည္းဆိုတာ နည္းနည္းေလ့လာၾကည့္ရေအာင္။ (Linux / Unix environment မွာ directory ဆိုတယ့္ အသုံးအႏွုန္းအစား File System လို႕လည္းသုံးတတ္ပါတယ္။ )

Linux distribution အလိုက္ တျခား directory ေတြရွိတတ္ေပမယ့္ က်ေနာ္တို႕ Linux တိုင္းမွာပါတယ့္ Generic ျဖစ္တယ့္ directory ေတြကို အဓိက ၾကည့္ၾကရေအာင္။

Linux မွာdirectory( file system) ေတြ အားလုံးက System Root directory လို႕ေခၚတယ့္ '/' ကေနစပါတယ္။ System root directory ျဖစ္တဲ့ “/” ေအာက္ကေန က်န္တဲ့ directory ေတြအားလံုး ဆက္သြားပါတယ္။ ဒါေၾကာင့္ /boot တို႕ /etc တို႕ဆိုျပီး '/' ရဲ့ေနာက္မွာ ဆက္ျပီးေရးၾကတာပါ။ ( ဒါဆို '/' က C: ၾကီးေပါ့လို႕ေတာ့ မထင္ပါနဲ႕။ တူတာေတြရွိေပမယ့္ မတူတာေတြလည္းရွိပါတယ္။) Linux ရဲ့ directory structure ကေတာ့


/ --
- /boot
- /sbin
- /bin
- /etc
- /home
- /root
- /lib
- /usr
- /var
- /tmp
- /dev
- /mnt
- /proc
- /opt



/
ဒီ directory ကေတာ့ Linux directory structure ရဲ့ အစမွတ္ျဖစ္ပါတယ္။ System Root directory လို႕ ေခၚပါတယ္။ ဒါေပမယ့္ အလြယ္တကူ root directory လို႕ပဲေခၚၾကတယ့္ အတြတ္ Root user ရဲ့ home directory ျဖစ္တယ့္ /root နဲ႕ ေရာတတ္ၾကပါတယ္။ က်န္တယ့္ directory ေတြဟာ Root directory ( '/' ) ကေနမွ directory tree အျဖစ္ခြဲထြက္လာၾကတာပါ။
Root directory ( '/' )က ပုံမွန္အားျဖင့္ directory ေတြစုထားတယ့္ ပင္မ directory တစ္ခုပါ။ Root directory ( '/' ) ရဲ့ ေအာက္မွာ (/usr တို႕ /bin တို႕လို) directory ေတြပဲရွိတတ္ပါတယ္။ ပံုမွန္ file တစ္ခုကို '/' ေအာက္မွာ ဖြဲ႕စည္းေလ့မရွိပါဘူး။


/boot
Boot directory ကေတာ့ Operation system တစ္ခု boot တက္လာဖို႕လိုအပ္တယ့္ file ေတြ သိမ္းစည္းထားတယ့္ ေနရာပါ။ /boot directory ရဲ့ ေအာက္မွာ Boot loader လို႕ေခၚတယ့္ Grub တို႕ lilo တို႕ရဲ့ config file ေတြ၊ Kernel image ေတြ initrd file ေတြရွိပါတယ္။


/sbin
System binary directory ပါ။ ဒီ /sbin directory မွာ System administrator တစ္ေယာက္အတြက္ လိုအပ္မယ့္ command ေတြ binary ေတြကိုထားပါတယ္။ /sbin ေအာက္မွာရွိတယ့္ တစ္ခ်ိဳ႕ command ေတြကို System Administrator ကသာ Access လုပ္ခြင့္ရွိပါတယ္။ Harddisk ကို partition ပိုင္းတယ့္ fdisk တို႕ ၊ format ခ်တယ့္ mkfs command ေတြကို /sbin ေအာက္မွာထားပါတယ္။ /sbin ရဲ့ ပံုစံတူ ေနာက္ထပ္ directory တစ္ခုကေတာ့ /usr/sbin directory ပါ။ Administrator ေတြပဲသုံးရတယ့္ useradd / userdel / groupadd တို႕လို command မ်ိဳးေတြ ထားပါတယ္။


/bin
User ေတြအားလုံး ေန႕စဥ္ အသုံးျပဳေနတယ့္ binary ( commands) ေတြကို /bin directory ေအာက္မွာထားပါတယ္။ cp / mv / rm / ls တို႕လို command ေတြအျပင္ SHELL ေတြျဖစ္တယ့္ bash တို႕ csh တို႕ကိုနဲ႕ ဆိုင္တယ့္ binary ေတြကို /bin directory ထဲမွာ ထားပါတယ္။


/etc
Editable Text Configuration directory လို႕ ဆိုတယ့္ အတိုင္း System မွာရွိတယ့္ services ေတြရဲ့ configuration file ေတြကို /etc directory ထဲမွာ ထားေလ့ရွိၾကပါတယ္။ Hostname configuration အတြက္ hosts file တို႕၊ DNS server address မွတ္တယ့္ resolve.conf တို႕လို configuration file ေတြအျပင္၊ GUI windows အတြက္ လိုအပ္တယ့္ X11 ရဲ့ configuration ေတြလည္းရွိပါတယ္။ တကယ္လို႕ သင့္ရဲ့ System ေပၚကို တစ္ျခား application ေတြ တင္မယ္ဆိုရင္ ၊ ဆိုၾကပါဆို႕ Apache တို႕ MySQL server တို႕ တင္မယ္ဆိုရင္ Apache service အတြတ္ Mysql-server service အတြက္ လိုအပ္တယ့္ Configuration file ေတြကို /etc ေအာက္မွာ /etc/apache2 စသျဖင့္ သက္ဆိုင္ရာ sub-directory ေအာက္မွာ ထားသြားမွာျဖစ္ပါတယ္။


/home
User ေတြရဲ့ home directory ပါ။ User တစ္ေယာက္ခ်င္းအတြက္ /home directory ရဲ့ေအာက္မွာ username နဲ႕ sub-directory တစ္ခုဆီ တည္ေဆာက္ေပးေလ့ရွိပါတယ္။ (ဥပမာ၊ divinity ဆိုတယ့္ user အတြတ္ /home/divinity ဆိုတဲ့ directory ကိုေဆာက္ေပးမွာျဖစ္ျပီး user 'divinity' ရဲ့ ကိုယ္ပိုင္ home directory အျဖစ္သတ္မွတ္ေပးမွာ ျဖစ္ပါတယ္။)User တစ္ေယာက္ရဲ့ home directory ကို တစ္ျခား user တစ္ေယာက္က ဝင္ၾကည့္ ဝင္ျပင္ လုပ္လို႕မရေအာင္ လုပ္ထားေလ့ရွိပါတယ္။ User တစ္ေယာက္ခ်င္းစီရဲ့ Environmental variable / parameter ေတြကိုလည္း သက္ဆိုင္ရာ User ရဲ့ home directory ေအာက္မွာ သက္မွတ္ေပးေလ့ရွိပါတယ္။


/root
ဒီ directory ကို directory tree ရဲ့ အစျဖစ္တယ့္ System Root directory ( '/' ) နဲ႕ ေရာတတ္ၾကပါတယ္။ ဒီ /root directory က Linux system ေတြရဲ့ SuperUser ျဖစ္တယ့္ root user ရဲ့ home directory ျဖစ္ပါတယ္။ System root directory ( '/' ) နဲ႕ဘာမွမဆိုင္ပဲ System root ရဲ့ေအာက္မွာ ဒိုက္႐ိုက္ရွိေနတယ့္ directory တစ္ခုမွ်သာျဖစ္ပါတယ္။


/lib
Linux system နဲ႕ သူ႕ရဲ့ Program ေတြက အသုံးျပဳမယ့္ library files ေတြထားတယ့္ေနရာျဖစ္ပါတယ္။ Library file ဆိုတာ Windows မွာ ဆိုရင္ေတာ့ DLL file ေတြနဲ႕ တူပါတယ္။


/usr
User application ေတြနဲ႕ သက္ဆိုင္တဲ့ file ေတြကို ထားတယ့္ေနရာျဖစ္ပါတယ္။ User ေတြအသုံးျပဳမယ့္ telnet တို႕ ftp တို႕အတြတ္ binary ေတြ configuration ေတြကို /usr ေအာက္က သက္ဆိုင္ရာ sub-directory ေတြထဲမွာ ထားပါတယ္။ ( ဥပမာ၊ တကယ္လို႕ Apache ကို install လုပ္ထားမယ္ဆိုရင္ Apache configuration file က /etc ေအာက္ကိုေရာက္ေနေပမယ့္ က်န္တယ့္ Apache module ေတြက /usr ေအာက္မွာ ရွိမွာျဖစ္ပါတယ္။ )


/var
ဒီ directory ကေတာ့ Spooling လုပ္ဖို႕လိုအပ္တယ့္ data ေတြကို ထားတယ့္ ေနရာလို႕ ေျပာလို႕ရပါတယ္။ Variable data directory လို႕ေခၚတယ့္ အတိုင္း အျမဲတန္းေျပာင္းလဲေနတယ့္ file ေတြပါ။ Printer deamon ရဲ့ printer spool လိုမ်ိဳးေတြ၊ Mail server ေတြရဲ့ mailbox ေတြ mail queue ေတြကို /var ေအာက္မွာထားပါတယ္။ Linux system ရဲ့ system log file ေတြကိုလည္း /var/log directory ထဲမွာ ထားေလ့ရွိပါတယ္။ System မွာ run ေနတယ့္ service ေတြနဲ႕ system ရဲ့ လုပ္ေဆာင္ခ်က္အားလုံးနည္းပါးကို /var/log ေအာက္မွာ သက္ဆိုင္ရာ log file ေတြနဲ႕ မွတ္ပါတယ္။


/tmp
User တိုင္း Service တိုင္း everyone full permission ရတယ့္ directory တစ္ခုပါပဲ။ Service ေတြအတြက္ လိုအပ္တယ့္ temporary file ေတြကို /tmp directory ထဲမွာ ထားေလ့ရွိပါတယ္။ /tmp ထဲက temporary file ေတြကို အခ်ိန္အပိုင္းအျခားတစ္ခုနဲ႕ျဖစ္ေစ၊ Program ကအသုံးျပဳျပီးသြားရင္ သူ႕အလိုအေလ်ာက္ျဖစ္ေစ၊ system reboot မွာျဖစ္ေစ ရွင္းျပစ္ေလ့ရွိပါတယ္။


/dev
Linux system ရဲ့ အထူးစမ္းဆုံး directory ပါ။ Computer မွာရွိေနတယ့္ hardware ေတြကို file ေတြအျဖစ္နဲ႕ ျပထားတာကို ေတြ႕ရပါလိမ့္မယ္။ /dev/cdrom, /dev/fd0 အစရွိသျဖင့္ computer ရဲ့ CDrom device နဲ႕ floppy device ကို ကိုယ္စားျပဳတယ့္ file ေတြ ကိုေတြ႕ရပါလိမ့္မယ္။ IDE hard drive ေတြကို ပထမ hard drive ကို /dev/hda၊ ဒုတိယ hard drive ကို /dev/hdb အစရွိသျဖင့္၊ SATA, SCSCI drive ေတြကို /dev/sda , /dev/sdb အစရွိသျဖင့္ ကိုယ္စားျပဳေလ့ရွိပါတယ္။ /dev directory မွာရွိတယ့္ file တိုင္းဟာ read ႏိုင္ write ႏိုင္ျပီး hardware device ေတြကို direct communicate လုပ္ပါတယ္။ ဥပမာေျပာရရင္ /dev/dsp ဆိုတယ့္ file ဟာ system speaker ကို ကိုယ္စားျပဳပါတယ္။ Speaker file ကို တစ္ခုခုေရးၾကည့္ရေအာင္။ echo "Hello testing" >> /dev/dsp လို႕ command ႐ိုက္ရင္ speaker က အသံတစ္မ်ိဳးထြက္ပါလိမ့္မယ္။ (Hello Testing လို႕ေတာ့ မဟုတ္ဖူးေပါ့ဗ်ာ။ /dev ေအာက္က fileေတြကို read / write လုပ္ခ်င္းအားျဖင့္ hardware device ေတြကို access လုပ္တယ္ဆိုတာ သိေစ႐ံု သက္သက္မွ်သာ ျဖစ္ပါတယ္။ )


/mnt
Linux system ေတြရဲ့ Generic mount point ျဖစ္ပါတယ္။ Default မွာေတာ့ directory အလြတ္ၾကီးတစ္ခုပါ။ ဥပမာ pen drive ေလးတပ္လိုက္တယ္ဆိုရင္ တကယ္လို႕ pen drive ကို detect ျဖစ္မယ္ဆိုရင္ Linux က /mnt ေအာက္မွာ mount point တစ္ခု တည္ေဆာက္ေပးသြားမွာ ျဖစ္ပါတယ္။ /mnt/FAT ဆိုတာမ်ိဳးေပါ့။ အဲဒီ /mnt/FAT ကို ဖြင့္ၾကည့္ရင္ ကိုယ့္ pen drive ထဲက file ေတြကို ျမင္ရမွာျဖစ္ပါတယ္။ တစ္ခ်ိဳ႕ device ေတြကို manual mount လုပ္ေပးရရင္လည္း Generic အေနနဲ႕ /mnt ေအာက္မွာပဲ mount လုပ္ၾကေလ့ရွိပါတယ္။


/proc
Linux ရဲ့ ထူးစမ္းတဲ့ file system / directory ေနာက္တစ္ခုျဖစ္ပါတယ္။ /proc directory ဟာ ဘယ္ hardware media ေပၚမွာမွ မရွိပါဘူး။ Virtual memory ထဲမွာ ယာယီတည္ေဆာက္ထားတယ့္ directory တစ္ခုျဖစ္ပါတယ္။ Operation system ရဲ့ လက္ရွိ အေျခအေန (Current state) ကိုေဖာ္ျပတယ့္ file ေတြကို tree structure တစ္ခုလို directory အဆင့္ဆင့္နဲ႕ တည္ေဆာက္ထားျပီး အခ်ိန္နဲ႕အမွ်ေျပာင္းလည္းေနႏိုင္တယ့္ filesystem တစ္ခုလည္းျဖစ္ပါတယ္။ /proc အေၾကာင္း အေသးစိတ္ကေတာ့ ဒီ URL ကို ညႊန္ပါရေစ
http://www.freeos.com/articles/2879/


/opt
Unix standard directory တစ္ခုျဖစ္ျပီး Linux system ေတြမွာ အသုံးနည္းတဲ့ directory တစ္ခုပါ။ Default installation တုန္းက မပါခဲ့တယ့္ system / operation system နဲ႕လည္း မသက္ဆိုင္တယ့္ Application ေတြကို /opt ေအာက္မွာ install ၾကေလ့ရွိပါတယ္။ Linux distribution အမ်ားဆုကေတာ့ /usr ကို ပိုအသုံးမ်ားျပီး /opt ကို သိပ္အသုံးျပဳေလ့မရွိပါဘူး။

................

ဒီ directory structure အေၾကာင္း ဒီတိုင္းဖတ္ရင္ နည္းနည္း ေခါင္းေနာက္သြားႏိုင္ပါတယ္။ ဒါေပမယ့္ Linux computer တစ္လုံးနဲ႕ ယွဥ္ျပီး ၾကည့္ရင္ အလြန္လြယ္လြယ္ကူကူ သေဘာေပါက္ႏိုင္ပါတယ္။ Linux community ေတြမွာ ေျပာေလ့ရွိတယ့္ စကားတစ္ခုရွိပါတယ္။ 'Get your hands dirty'။ လက္ေတြ႕လုပ္ဖို႕ တိုက္တြန္းတယ့္ idiom တစ္ခုျဖစ္ပါတယ္။ စမ္းသပ္ရင္း နားလည္လာရင္ Linux installation လုပ္ကတည္းက ကိုယ္က ဒီ linux box ကို ဘာ အတြက္အသုံးျပဳမလည္း ဆိုတာေပၚမူတည္ျပီး partitioning ကို လိုသလို partition ပိုင္းျပီး ပိုေကာင္းတယ့္ read / write speed ကို လည္း ရႏိုင္ပါလိမ့္မယ္။

Linux system တစ္ခုအတြက္ partitioning stage အေၾကာင္းကိုလည္း ေနာက္ doc တစ္ခုမွာ ေရးဖို႕ၾကိဳးစားပါမယ္။ Guide line ဆိုတာမ်ိဳးထက္ partitioning အေၾကာင္းရွင္းျပရင္းနဲ႕ ဘယ္လို server မ်ိဳးအတြက္ ဘယ္လို partition scheme မ်ိဳးထားသင့္တယ္ဆိုတာမ်ိဳး ေဆြးေႏြးခ်င္ပါေသးတယ္။ ေက်းဇူးတင္ပါတယ္။


Divinity