#01 Understanding The File System Hierarchy
အားလုံးဘဲ မင်္ဂလာပါဗျာ။ ကျွန်တော် ဒီ post လေးမှာတော့ Linux File System မှာ directory structure အဆင့်ဆင့် တည်ဆောက်ထားပုံကို ပြောပြချင်ပါတယ်။
Learning About the File System Hierarchy
- Linux System ကို command line interface ( CLI ) ကနေ ကျွမ်းကျင်စွာ ခိုင်းစေ အသုံးပြု နိုင်ဖို့အတွက်ဆိုရင် Linux File System မှာ Files ၊ Directories တွေကို ဘယ်လိုမျိုး ပုံစံတွေနဲ့ တည်ဆောက် ထားတယ်ဆိုတာကို အရင်းဆုံး နားလည်ထားရမှာ ဖြစ်ပါတယ်။
- Linux မှာဆိုရင်
copying
,deleting
,moving
,renaming
စတဲ့ basic tasks တွေသည် Linux File System Hierarchy ကို နားလည်မှသာ command line ကနေ တစ်ဆင့် အလွယ်တစ်ကူ လုပ်ဆောင်နိုင်မှာ ဖြစ်ပါတယ်။ - Linux ရဲ့ Files တွေ Directories တွေ ဖွဲ့စည်း တည်ဆောက်ထားတဲ့ ပုံစံသည် tree-like structures ပုံစံမျိုး အဆင့်ဆင့် ဖွဲ့စည်း တည်ဆောက်ထားတာ ဖြစ်ပါတယ်။
- Window OS မှာလိုတော့ Drive Letter တွေနဲ့ Partitions တွေ ခွဲခြားပြီး သိမ်းဆည်း တာမျိုး Linux မှာ မရှိပါဘူး။
- Linux ရဲ့ directories structure တည်ဆောက်မှုသည် parent-child relationships ပုံစံမျိုးနဲ့ သွားတာ ဖြစ်ပြီး top-level directory ဖြစ်တဲ့
/
အောက်မှာ sub-directores တွေအဆင့်ဆင့် တည်ဆောက်ပြီး သိမ်းတာ ဖြစ်ပါတယ်။ - အခုလိုမျိုး
/
root directories တစ်ခုအောက်ကနေ sub-directories တွေ အဆင့်ဆင့် ဖွဲ့ဆည်းတည်ဆောက်သွားတာမျိုးကိုHierarchical File System
လို့လည်း ခေါ်ပါတယ်။ Hierarchical File System
ရဲ့ အားသာချက်က Users တွေအနေနဲ့ Files, Directories တွေကို tree structure နဲ့ အဆင့်ဆင့် Organize ပြုလုပ် သိမ်းဆည်းထားတာ ဖြစ်တဲ့ အတွက်ကြောင့် data တွေကို access ပြုလုပ်ရမှာ Absolute Path or Relative Path တွေကို အသုံးပြုပြီး တိကျ မြန်ဆန်စွာ navigate ပြုလုပ်နိုင်စေတာ ဖြစ်ပါတယ်။- Linux ရဲ့ File System မှာ Directories တွေကို အသုံးပြုပုံ ရည်ရွက်ချက်အမျိုးမျိုးဖြင့် စနစ်တကျ ဖွဲ့စည်း တည်ဆောက်ထားပါတယ်။ အောက်မှာ တစ်ခုချင်းစီရဲ့ အသုံးပြုပုံကို လေ့လာ ကြည့်ရအောင်ပါ။
- Linux မှာ Folder ကို Directory လို့ ခေါ်တာ ဖြစ်ပါတယ်။
/
** The Root Directory **
- Hierarchical File System ကြီး တစ်ခုလုံးရဲ့ အစဆုံး Directory ဖြစ်ပါတယ်။
/
ကို Primary hierarchy root ဒါမှမဟုတ် root directory လို့လည်း အလွယ် ခေါ်ပါတယ်။ Linux file system ရဲ့ starting point ဖြစ်ပါတယ်။- Linux မှာ ကျန်တဲ့ Files တွေ Directories တွေ အကုန်လုံးသည်
/
root directory အောက်မှာ tree-structures နဲ့ အဆင့်ဆင့် သိမ်းဆည်း ထားတာ ဖြစ်ပါတယ်။ root
user တစ်ယောက်သာ လျှင်ပဲ/
directory အောက်မှာရှိတဲ့ directories တွေ၊ files တွေ အကုန်လုံး ကို full access ရရှိတာ ဖြစ်ပါတယ်။
/bin/
** Essential User Binaries **
- Normal Users တွေ အသုံးပြုခွင့်ရှိတဲ့ executable files, command ( banaries ) တွေ အကုန်လုံးသည်
/bin/
directory အောက်မှာ ထားတာ ဖြစ်ပါတယ်။ /bin/
directory သည် တစ်ကယ်က shortcut directory လေး တစ်ခုသာ ဖြစ်ပါတယ်။ သူနဲဲ့ တစ်ကယ် Linked လုပ်ထားတဲ့ directory သည်/usr/bin/
directory ဖြစ်ပါတယ်။/bin/
=>/usr/bin/
ဖြစ်ပါတယ်။/usr/bin/
directory သည်/bin/
directory ရဲ့ actual path ဖြစ်ပါတယ်။- Users တွေ အနေနဲ့ daily tasks တွေ အတွက် ပုံမှန် အသုံးပြုနေတဲ့ basic command တွေ ဥပမာ
cat
,cp
,mv
,rm
,ls
စတဲ့ commands ( binaries ) တွေသည်/usr/bin/
directory path လမ်းကြောင်းမှာ သိမ်းဆည်းထားတာ ဖြစ်ပါတယ်။ - နောက်ပြီး Directory Path တွေကို ရေးတဲ့ အခါမှာ Directory Name ရဲ့နောက်မှာ forward-slash (/) ထည့်ပေးခြင်းသည် ပိုပြီးတော့ formal ကျပါတယ်။ forward slash (/) သာ ထည့်မရေးဘူး ဆိုရင် File type သည် directory မဟုတ်ဘဲ တစ်ခြား file type အမျိုးစားတွေ အနေနဲ့ ယူဆ နိုင်သွားလို့ပါ။
- ဥပမာ
/bin
နဲ့/bin/
သည် အတူတူပင်ဖြစ်ပေမဲ့/bin/
လို့ ရေးတာက ပို ပြီး မှန်ကန်ပါတယ်။
which
command ကိုအသုံးပြုပြီး commands တွေကို stored လုပ်ထားတဲ့ path လမ်းကြောင်းကို စစ်ပြထားပါတယ်။/usr/bin/
အောက်မှာ သိမ်းတာ ဖြစ်ပါတယ်။
/sbin/
** System Binaries **
/bin/
directory နဲ့ သဘောတရား အတူတူ ပင် ဖြစ်ပါတယ်။/sbin/
directory ရဲ့ actual path သည်/usr/sbin/
directory ဖြစ်ပါတယ်။- မတူတဲ့အချက်ကတော့
/sbin/
directory သည်root user
ဒါမှမဟုတ်superuser
တွေသာလျှင် အသုံးပြုနိင်တဲ့ commands (binares) , executable files တွေကို ထားတာ ဖြစ်ပါတယ်။ - ဥပမာ
useradd
,userdel
,usermod
,fdisk
,gdisk
စတဲ့ root privileges လိုအပ်တဲ့ commands တွေကို/sbin/
directory အောက်မှာ သိမ်း တာ ဖြစ်ပါတယ်။
- အထက်ပါ example မှာဆိုရင်
which
command ကို အသုံးပြုပြီး command (binaries ) တွေကို file system ပေါ်မှာ သိမ်းထားတဲ့ နေရာကို စစ်ကြည့်နိုင်ပါတယ်။ အသုံးပြုဖို့ရန် root privileges လိုအပ်တဲ့ command တွေ ဖြစ်တဲ့ အတွက်/usr/sbin/
အောက်မှာ ရှိတာကို တွေ့ရမှာပါ။
/boot/
** Static Boot Files **
/boot/
directory မှာဆိုရင်grub
,initrd.img
, ‘vmlinuz
စတဲ့ Linux OS Boot တက်ဖို့ရန် အတွက် မရှိမဖြစ်လိုအပ်တဲ့ files တွေကို သိမ်းတာ ဖြစ်ပါတယ်။grub
ကိုGrant Unified Bootloader
လို့ ခေါ်ပါတယ်။- Computer ဖွင့်ပြီးလို့ POST Process ပြီး ပြီဆိုတာနဲ့ စတင် အလုပ် လုပ်တဲ့ bootloader software တစ်ခု ဖြစ်ပါတယ်။ သူ့ရဲ့တာဝန်က
initrd.img
နဲ့vmlinuz
files နှစ်ခုကို RAM ပေါ်ကို load လုပ်ပေးတာ ဖြစ်ပါတယ်။ initrd.img
file ကို တစ်နည်းအားဖြင့်initial RAM Disk
လို့လည်းခေါ်ပါတယ်။grub
bootloader က အရင်ဆုံး temporary root file system ဖြစ်တဲ့initrd.img
ကို အရင်ဆုံး load လုပ်ပါတယ်။- Temporary root file system ကို RAM ပေါ်မှာ load လုပ်ပြီး ပြီ ဆိုမှ ကျွန်တော် တို့ တစ်ကယ်အသုံးပြုမဲ့ Kernel Image ဖြစ်တဲ့
vmlinuz
နဲ့ Actual root file system ကို RAM ပေါ်မှာ load လုပ်တာ ဖြစ်ပါတယ်။ vmlinuz
file ကိုVirtual Memory LINUx gZip
လို့လည်းခေါ်ပါသေးတယ်။Gzip
compressing tools ကို အသုံးပြုပြီး compressed ပြုလုပ်ထားတဲ့ bootable linux kernel image တစ်ခု ဖြစ်ပါတယ်။- ဒီဘက်ခေတ် Linux Distro တော်တော်များများမှာ two-stage boot process ကို အသုံးပြုကြပါတယ်။
- အခုလောက်ဆိုရင်
/boot/
directory အောက်မှာ ရှိတဲ့ files တွေအကြောင်းကို နာလည် လောက်ပြီလို့ ထင်ပါတယ်။
- ကျွန်တော် Example အနေနဲ့
kali linux
ရဲ့/boot/
directory အောက်မှာ ရှိတဲ့ files တွေပြထားပါတယ်။ image name တွေနောက်မှာ version ပါတာကို တွေ့ရမှာ ဖြစ်ပါတယ်။
/dev/
** Essential Device FIles **
-
/dev/
directory အောက်မှာဆိုရင် Hardware နဲ့ သက်ဆိုင်တဲ့ Device Files တွေရှိပါတယ်။ - Linux System တစ်ခုရဲ့ Hardware Components တွေအတွက် အလုပ်လုပ်ပေးနေတဲ့ Drivers သည်လည်း File (Binaries) တွေ ဖြစ်တဲ့အတွက်ကြောင့်
/dev/
directory အောက်မှာ သိမ်းတာ ဖြစ်ပါတယ်။ - ဥပမာ
/dev/sda
သည် SATA Disk ကို ကိုယ်စားပြုတဲ့ device file ဖြစ်ပါတယ်။ /dev/cdrom
ဆိုရင် Optical Drive ကို ကိုယ်စားပြုတဲ့ device file တစ်ခု ဖြစ်ပါတယ်။Terminal
တွေသည်လည်း command input / output တွေကို လုပ်ဆောင်ပေးတဲ့ device အမျိုးအစားထဲမှာ ပါဝင်ပါတယ်။ ဒါကြောင့်terminal
တွေကို ကိုယ်စားပြုတဲ့ tty numbers တွေကိုလည်း /dev/ အောက် မှာ တွေ့နိုင်ပါတယ်။- နောက်ထပ် တစ်ခုက တော့
/dev/null
null device file လေးပဲ ဖြစ်ပါတယ်။ Blackhole file လေးတစ်ခုလို့လည်း နားလည်လို့ရပါတယ်။ - သူ့ရဲ့ တာဝန်က သူ့ဆီကို ဝင်လာတဲ့ ဘယ် inpult ကိုမဆို discard ပြုလုပ်ပေးမှာ ဖြစ်ပါတယ်။
- တစ်ချို့ အခြေအနေတွေမှာ ကျွန်တော်တို့သည် command တစ်ခုကို run လိုက်လို့ ထွက်လာတဲ့ ဘယ် output ကိုမဆို
terminal
မှာလဲ default အနေနဲ့မပြစေချင်ဘူး၊ တစ်ခြား file တွေမှာလည်း redirect ပြုလုပ်ပြီး မသိမ်းချင်ဘူးဆိုရင်/dev/null
null file ဆီကို redirect ပြုလုပ်ပြီး discard ပြုလုပ်ပါတယ်။
1
ping 8.8.8.8 &> /dev/null
- အပေါ်က example မှာဆိုရင် ping command ကနေ ထွက်လာမည့် output တွေကို
/dev/null
file ကို redirect ပြုလုပ်ပြီး discard ပြုလုပ်တာ ဖြစ်ပါတယ်။
/etc/
** Configuration Files **
/etc/
directory ထဲမှာ system-wide configuration file အများစု ကို ထားတာ ဖြစ်ပါတယ်။- Linux server တွေမှာ ကိုယ့်ရဲ့ လိုအပ်ချက်ပေါ်မူတည်ပြီး သက်ဆိုင်ရာ services တွေကို installed ပြုလုပ်ကြပါတယ်။ ဥပမာ web service , database service , email service, ftp service , ssh service , အစ ရှိသဖြင့်ပေါ့။
- အဲ့ဒီတော့ ကျွန်တော်တို့ service တွေကို Installed လုပ်လိုက်ပြီဆိုတာနဲ့ သက်ဆိုင်ရာ service တစ်ခုခြင်းဆီရဲ့ configuration file တွေသည်
/etc/
directory အောက်မှာ တည်ဆောက်သွားမှာ ဖြစ်ပါတယ်။ - နောက်ပြီး preinstalled ပြုလုပ်ထားတဲ့ services တွေရဲ့ configuration files တွေသည်လည်း
/etc/
directory အောက်မှာ သိမ်းတာ ဖြစ်ပါတယ်။ - ဒါကြောင့် linux server admin တွေ အနေနဲ့ ကိုယ် Setup ပြုလုပ်ထားတဲ့ service တွေရဲ့ configuration တွေကို လိုအပ်သလို ပြုပြင်နေရတာ ဖြစ်တဲ့အတွက်
/etc/
directory သည် အသုံးအများဆုံး directory path တစ်ခုထဲ မှာ ပါဝင်ပါတယ်။ - ဥပမာ ပြောရမယ်ဆိုရင် ssh service ရဲ့ listen port ကို ပြောင်းတာတို့၊ web server ရဲ့ document root directory ကိုပြောင်းတာတို့ ၊ ssl configuration ပြုလုပ်တာတို့၊ virtual hosting ပြုလုပ်တာ တို့ အစရှိသဖြင့်ပေါ့။
- Linux မှာ configuration file အများစု ရဲ့ file extension သည် .conf ဖြစ်ပါတယ်။
1
2
3
4
5
6
#Example
/etc/passwd #user account info
/etc/group #group info
/etc/shadow #encrypted password info
/etc/sysctl.conf #modify kernel run time parameters
/etc/sudoers #root privileges permission
/root/
/root/
directory က တော့ linux system မှာ privileges အမြင့်ဆုံးဖြစ်တဲ့ root user account ရဲ့ home directory ဖြစ်ပါတယ်။
/home/
** Normal User Home Directory **
/home/
directory ကို normal user account တစ်ခုချင်းစီရဲ့ home directory တွေကို isolated ဖြစ်ဖြစ် သိမ်းဖို့ရန်အတွက် အသုံးပြုတာ ဖြစ်ပါတယ်။/home/
directory မှာဆိုရင် Linux System မှာ register ပြုလုပ်ထားတဲ့ user name နဲ့ home directory တစ်ခု ရှိနေမှာဖြစ်ပြီး ထို directory အထဲမှာဆိုရင် User အတွက် လိုအပ်တဲ့Desktop
,Decuments
,Downloads
,Pictures
အစရှိတဲ့ directories တွေ ရှိနေမှာ ဖြစ်ပါတယ်။
/lib/
** Essential Shared Libraries **
- ကျွန်တော်တို့ Linux System မှာ Installed ပြုလုပ်ထားတဲ့ Binaries , Applications တွေ အလုပ်လုပ်ဖို့ရန်အတွက် လိုအပ်တဲ့ Shared Library Files အများစု ကို
/lib/
directry အောက်မှာ သိမ်းတာ ဖြစ်ပါတယ်။ - နောက်ပြီး Kernel modules တွေသည်လည်း
/lib/
directory အောက်မှာ သိမ်းတာ ဖြစ်ပါတယ်။ - Shared Libraries Files အများစု ရဲ့ file extension သည် *.so ဖြစ်ပါတယ်။
- Window မှာ ဆိုရင်တော့ Shared Libraries Files ရဲ့ file extension သည် Dynamic Link Library (.DLL) ဖြစ်ပါတယ်။
- Shared Libraries Files တွေသည် Linux System တစ်ခု ပုံမှန် လည်ပက်အလုပ်လုပ်ဖို့ရန်အတွက် လိုအပ်တဲ့ files တွေဖြစ်ပါတယ်။
/media/
** Removable Media **
- Linux System ကို Attacted လာလုပ်တဲ့ Removable Devices (e.g. CD, Usb Stick, External Hardisk) တော်တော်များကို
/media/
directory အောက်မှာ mount ပြုလုပ်မှာ ဖြစ်ပါတယ်။ - Linux System မှာ Mount လုပ်တယ်ဆိုတာသည် Removable Devices တစ်ခုထဲမှာရှိတဲ့ Files တွေကို Linux System Hard Disk ရဲ့ Storage Location နေရာတစ်ခုမှာ Cache သဘောမျိုး ခဏတာ အသုံးပြုလို့ရအောင် တွဲ လိုက်တာ ဖြစ်တယ်။
- Mount လုပ်ပေးတဲ့အခါ ဥပမာ CD ROM တစ်ခုအား Mount မလုပ်မှီ ၎င်း CD ROM Files တွေထားဖို့ Directory တစ်ခုကြိုဆောက်ထားဖို့လိုအပ်တယ်။ ဒါ့ကြောင့် Linux Systems တွေမှာ Mounting လုပ်ဖို့ Default အားဖြင့် /media ဆိုတဲ့ Directory တစ်ခု Create လုပ်ပေးထားတယ်။
- ၎င်း /media Directory ထဲမှာမှ Mount Directory (Mount Point) တွေသည် Sub Directories တွေအနေနဲ့ရှိမှာဖြစ်။
- Linux System မှာ Removable Device တစ်ခုခုကိုတပ်လိုက်တာနဲ့ /media Directory ထဲမှာ System သည် Auto Sub Directory တစ်ခုလာ Create လုပ်ပြီး ၎င်းမှာ Auto Mount လုပ်ပေးလိုက်တာ ဖြစ်တယ်။
/mnt/
** Temporary Mount Points **
- အရင် Linux System အဟောင်းတွေမှာဆိုရင်
/mnt/
directory ကို Default Mounting Directory အဖြစ် အသုံးပြုကြပါတယ်။ ဒီနေ့ခေတ် Linux Systems တွေမှာတော့/mnt/
directory အစား/media/
ကို အသုံးပြုလာကြတာ ဖြစ်ပါတယ်။ - ဒါပေမဲ့ /mnt Directory ကို ယနေ့ခေတ်မှာ လုံးဝအသုံးမပြုတော့ တဲ့ ပုံစံမျိုးမဟုတ်ဘဲ အသုံးနည်းတဲ့ Mounting နည်းလမ်းဖြစ်တဲ့ တစ်ကြိမ်ထဲ အသုံးပြုမယ့် Media မျိုးကို Server မှာ Mount လုပ်တဲ့အခါမှာပဲ /mnt Directory အားအသုံးပြုတော့တယ်။
/usr/
** User Binaries & Read-Only Data **
/usr/
Directory ထဲမှာ Users တွေ အကုန် Access လုပ်နိုင်တဲ့ Program Files တွေရှိတယ်။ အထူးသဖြင့်/usr/bin/
ထဲမှာ Program Files တွေရှိတယ်။/usr/X11R6
ထဲမှာ Graphical User Environment ရှိတယ်။/usr/src
ထဲမှာ Open Source Programs တွေနဲ့ Kernel တွေရဲ့ Source Files တွေရှိတယ်။ ဒါ့ကြောင့်/usr
Directory ထဲမှာ အရေးကြီးတဲ့ နောက်ထပ် Sub Directories တွေအများကြီးရှိတာဖြစ်။)- နောက် ပြီး ကျွန်တော်တို့ အပေါ်မှာ ရှင်းပြခဲ့တဲ့
/bin/
တို့/sbin/
တို့ သည် sort link ( short cut ) တွေသာ ဖြစ် ပြီး သူတို့ သည်/usr
အောက် မှာ ရှိတာ ဖြစ်တယ်။ /bin/
->/usr/bin/
/sbin/
->/usr/sbin/
- Lib files တွေသည် လည်း sort link (shortcut) file တွေဘဲ ဖြစ်တယ်။
/usr/
မှာ သိမ်းထားတာ ဖြစ်တယ်။
/opt/
** Optional Packages **
- usr ထဲမှာတော့ Sub Directories တွေနဲ့ Binaries တွေအများကြီးရှိတယ်။ ဒါပေမဲ့ /usr Directory ထဲမှာရှိတဲ့ Sub Directories အများစုနဲ့ Binaries အများစုသည် များသောအားဖြင့် Small Software Packages တွေအတွက်ပဲဖြစ်။
- /opt Directory ထဲမှာတော့ Large Software တွေအတွက် program files တွေသိမ်းတာဖြစ်တယ်။ EG. Large Software Packages တွေဖြစ်တဲ့ Gnome Graphical Interface တို့ Office Suites တို့ Oracle Database တို့ စတဲ့ Large Software တွေကို Install လုပ်တဲ့အခါ /usr Directory အောက်မှာ သွားပြီး Install လုပ်တာမဟုတ်ဘဲ /opt Directory အောက်မှာပဲ Install လုပ်တာဖြစ်။)
/proc/
** Knernel & Process Files **
/proc/
directory ကို လက်ရှိ RAM ထဲမှာရှိတဲ့ Kernel runtime system parameters တွေနဲ့ processes-related information တွေကို သိမ်းဆည်းတာ ဖြစ်ပါတယ်။- User က RAM ထဲမှာ အလုပ်လုပ်နေတဲ့ kernel နဲ့ ပတ်သက်တဲ့ parameters setting တွေ ၊ လက်ရှိ running ဖြစ်နေတဲ့ processes နဲ့ ပတ်သက်တဲ့ information တွေကို access ပြုလုပ်လိုတဲ့အခါ special system call တွေကို အသုံးပြုစရာမလိုဘဲ
/proc/
directory ကနေ တစ်ဆင့် direct access ပြုလုပ်နိုင်တာဖြစ်ပါတယ်။ - Linux မှာ running ဖြစ်နေတဲ့ process တိုင်းသည် သူနဲ့ သက်ဆိုင်တဲ့ files and directories တွေကို
/proc/
directory အောက်မှာ process id number နဲ့ directory တစ်ခု အတွင်းမှာ သိမ်းဆည်းမှာ ဖြစ်ပါတယ်။ - ဥပမာ
/proc/123/
directory အောက်မှာ PID 123 နဲ့ သတ်ဆိုင်တဲ့ files တွေ directories တွေကို သိမ်းဆည်းမှာ ဖြစ်ပါတယ်။
- နောက်ပြီး ဥပမာ လက်ရှိ RAM ထဲမှာ running ဖြစ်နေတဲ့ linux kernel မှာ NAT setting on ချင်တဲ့ အခါမျိုးတွေမှာ ဆိုရင်လည်း
/proc/sys/net/ipv4/
directory အောက်မှာ ရှိတဲ့ ip_forward file ကို ပြင်ပေး ရတာ ဖြစ်ပါတယ်။
-
ဒါကြောင့်
/proc
သည် RAM ထဲ running ဖြစ်နေတဲ့ kernel parameters နဲ့ processes-related information ကို တွေ users တွေနဲ့ applications တွေ အလွယ်တကူ access ပြုလုပ်နိုင်အောင် file system ပေါ်မှာ mount ပြုလုပ်ထားတဲ့ virtual directory တစ်ခု သာ ဖြစ်ပါတယ်။ -
အခု လောက်ဆိုရင် တော့ Linux File System နဲ့ ပက်သတ်ပြီးတော့ အထိုက်အလျောက် နားလည်လောက်ပြီလို့ ထင်ပါတယ်ဗျ။ အဆုံးထိ ဖတ်ပေးတဲ့အတွက်လည်း ကျေးဇူးပါဗျာ။