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

3 comments:

Vista said...

ၾကိဳဆိုပါတယ္ ..လင့္ထားပရေစ ၊ Network နဲ ့ Linux အပိုင္းကိုေတာ့ အၿမဲအားေပးမလို ့ပါ။

ေအာင္ဒင္ said...

Thanks. all are full of knowledge.

Zephyr said...

Hi Bro,

Nice Post ...

အူဘြန္တု တစ္ခါတင္ပါတယ္ ... မြတ္စလင္အဒီးရွင္တင္မိလို႕ ဟာလာ အူဘြန္တု တံဆိပ္နဲ႕တက္တက္လာတယ္ ....။

ၾကံဳဖူးတာေျပာပါတယ္။

Effect ေတြ ဂြမ္းတယ္ဆိုလုိ႕ စမ္းလုိက္တာ ... ေနာက္ေတာ႔ သူတုိ႕ေတြက free ရေပမယ္႔ တစ္ခ်ိဳ႕အပိုင္းေတြမွာ နည္းနည္း crude ျဖစ္ေနတယ္လို႕ ခံစားရတယ္။ smooth မျဖစ္ေသးတာေတြ႕ရတယ္။ workspace ၾကီးဗဟုဂံလုိ လည္ေနတာေတာ႔ သေဘာက်တယ္။

CentOS ကိုေတာ႔ Server မွာ သံုးဖူးတယ္။ Suse ထက္ေတာ႔ ပိုအဆင္ေျပျပီး Stable ျဖစ္တယ္လုိ႕ ကိုယ္ေတြ႕သိလုိ္က္ရတယ္။

Linux နဲ႔ပတ္သက္ရင္ေတာ႔ တစ္ေၾကာင္းတိတိ သိတယ္။
ls -l
ေအာ္ ႏွစ္ေၾကာင္းသိတာ ...။ ေနာက္တစ္ခုက bash

အဲဒီလို မသိရင္ ခဏခဏျပန္ေမးေမးေနရတဲ႔ linux for idiots ျဖစ္ျဖစ္ ...၊ linux in ကိုေမာင္ဆင္႔ (common sense) ျဖစ္ျဖစ္ေရးေပးေစခ်င္ပါတယ္။ ဒါဆို command ေတြလည္း တစ္စုတစ္စည္းထဲရိွသြားမယ္ ... ေလ႔လာရတာလည္း လြယ္သြားမယ္လုိ႕ ထင္တယ္။

ရံုးက guide မွာ ျပန္ရွာရတာထက္ Blog မွာ ျပန္ဖတ္လုိက္ရတာ ပိုျမန္မယ္လုိ႕ ထင္တယ္။ :P