1. 程式人生 > >Linux目錄配置詳解

Linux目錄配置詳解

在這裡插入圖片描述根據FHS(http://www.pathname.com/fhs/)的官方檔案指出, 他們的主要目的是希望讓使用者可以瞭解到已安裝軟體通常放置於那個目錄下, 所以他們希望獨立的軟體開發商、作業系統製作者、以及想要維護系統的使用者,都能夠遵循FHS的標準。 也就是說,FHS的重點在於規範每個特定的目錄下應該要放置什麼樣子的資料而已。 這樣做好處非常多,因為Linux作業系統就能夠在既有的面貌下(目錄架構不變)發展出開發者想要的獨特風格。
  事實上,FHS是根據過去的經驗一直再持續的改版的,FHS依據檔案系統使用的頻繁與否與是否允許使用者隨意更動, 而將目錄定義成為四種互動作用的形態,用表格來說有點像底下這樣:
  


四種類型:
1.可分享的:可以分享給其他系統掛載使用的目錄,所以包括執行檔案與使用者的郵件等資料, 是能夠分享給網路上其他主機掛載用的目錄;
2.不可分享的:自己機器上面運作的裝置檔案或者是與程式有關的socket檔案等, 由於僅與自身機器有關,所以當然就不適合分享給其他主機了。
3.不變的:有些資料是不會經常變動的,跟隨著distribution而不變動。 例如函式庫、檔案說明檔案、系統管理員所管理的主機服務配置檔案等等;
4.可變動的:經常改變的資料,例如登入檔案、一般使用者可自行收受的新聞組等。
事實上,FHS針對目錄樹架構僅定義出三層目錄底下應該放置什麼資料而已,分別是底下這三個目錄的定義:
/ (root, 根目錄):與開機系統有關;
/usr (unix software resource):與軟體安裝/執行有關;
/var (variable):與系統運作過程有關。
一. 根目錄 (/) 的意義與內容:

因此FHS標準建議:根目錄(/)所在分割槽應該越小越好, 且應用程式所安裝的軟體最好不要與根目錄放在同一個分割槽內,保持根目錄越小越好。 如此不但效能較佳,根目錄所在的檔案系統也較不容易發生問題。說白了,就是根目錄和Windows的C盤一個樣。根據以上原因,FHS認為根目錄(/)下應該包含如下子目錄:
/bin:系統有很多放置執行檔的目錄,但/bin比較特殊。因為/bin放置的是在單人維護模式下還能夠被操作的指令。在/bin底下的指令可以被root與一般帳號所使用,主要有:cat,chmod(修改許可權), chown, date, mv, mkdir, cp, bash等等常用的指令。
/boot:主要放置開機會使用到的檔案,包括Linux核心檔案以及開機選單與開機所需設定檔等等。Linux kernel常用的檔名為:vmlinuz ,如果使用的是grub這個開機管理程式,則還會存在/boot/grub/這個目錄。
/dev:在Linux系統上,任何裝置與周邊裝置都是以檔案的型態存在於這個目錄當中。 只要通過存取這個目錄下的某個檔案,就等於存取某個裝置。比要重要的檔案有/dev/null, /dev/zero, /dev/tty , /dev/lp*, / dev/hd*, /dev/sd*等等。
/etc
:系統主要的設定檔幾乎都放置在這個目錄內,例如人員的帳號密碼檔、各種服務的啟始檔等等。 一般來說,這個目錄下的各檔案屬性是可以讓一般使用者查閱的,但是隻有root有權力修改。 FHS建議不要放置可執行檔(binary)在這個目錄中。 比較重要的檔案有:/etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/等等。 另外,其下重要的目錄有:/etc/init.d/ :所有服務的預設啟動script都是放在這裡的,例如要啟動或者關閉iptables的話: /etc/init.d/iptables start、/etc/init.d/ iptables stop。/etc/xinetd.d/ :這就是所謂的super daemon管理的各項服務的設定檔目錄。/etc/X11/ :與X Window有關的各種設定檔都在這裡,尤其是xorg.conf或XF86Config這兩個X Server的設定檔。
/home:這是系統預設的使用者家目錄(home directory)。 在你新增一個一般使用者帳號時,預設的使用者家目錄都會規範到這裡來。比較重要的是,家目錄有兩種代號:~ :代表當前使用者的家目錄,而 ~guest:則代表使用者名稱為guest的家目錄。
/lib:系統的函式庫非常的多,而/lib放置的則是在開機時會用到的函式庫,以及在/bin或/sbin底下的指令會呼叫的函式庫而已 。 什麼是函式庫呢?妳可以將他想成是外掛,某些指令必須要有這些外掛才能夠順利完成程式的執行之意。 尤其重要的是/lib/modules/這個目錄,因為該目錄會放置核心相關的模組(驅動程式)。
/media:media是媒體的英文,顧名思義,這個/media底下放置的就是可移除的裝置。 包括軟碟、光碟、DVD等等裝置都暫時掛載於此。 常見的檔名有:/media/floppy, /media/cdrom等等。
/mnt:如果妳想要暫時掛載某些額外的裝置,一般建議妳可以放置到這個目錄中。在古早時候,這個目錄的用途與/media相同啦。 只是有了/media之後,這個目錄就用來暫時掛載用了。
/opt:這個是給第三方協力軟體放置的目錄 。 什麼是第三方協力軟體啊?舉例來說,KDE這個桌面管理系統是一個獨立的計畫,不過他可以安裝到Linux系統中,因此KDE的軟體就建議放置到此目錄下了。 另外,如果妳想要自行安裝額外的軟體(非原本的distribution提供的),那麼也能夠將你的軟體安裝到這裡來。 不過,以前的Linux系統中,我們還是習慣放置在/usr/local目錄下。
/root:系統管理員(root)的家目錄。 之所以放在這裡,是因為如果進入單人維護模式而僅掛載根目錄時,該目錄就能夠擁有root的家目錄,所以我們會希望root的家目錄與根目錄放置在同一個分割槽中。
/sbin:Linux有非常多指令是用來設定系統環境的,這些指令只有root才能夠利用來設定系統,其他使用者最多隻能用來查詢而已。放在/sbin底下的為開機過程中所需要的,裡面包括了開機、修復、還原系統所需要的指令。至於某些伺服器軟體程式,一般則放置到/usr/sbin/當中。至於本機自行安裝的軟體所產生的系統執行檔(system binary),則放置到/usr/local/sbin/當中了。常見的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。
/srv:srv可以視為service的縮寫,是一些網路服務啟動之後,這些服務所需要取用的資料目錄。 常見的服務例如WWW, FTP等等。 舉例來說,WWW伺服器需要的網頁資料就可以放置在/srv/www/裡面。呵呵,看來平時我們編寫的程式碼應該放到這裡了。
/tmp:這是讓一般使用者或者是正在執行的程式暫時放置檔案的地方。這個目錄是任何人都能夠存取的,所以你需要定期的清理一下。當然,重要資料不可放置在此目錄啊。 因為FHS甚至建議在開機時,應該要將/tmp下的資料都刪除。
除了這些目錄的內容之外,另外要注意的是,因為根目錄與開機有關,開機過程中僅有根目錄會被掛載, 其他分割槽則是在開機完成之後才會持續的進行掛載的行為。就是因為如此,因此根目錄下與開機過程有關的目錄, 就不能夠與根目錄放到不同的分割槽去。
那哪些目錄不可與根目錄分開呢?有底下這些:
/etc:配置檔案

/etc/rc /etc/rc.d /etc/rc*.d
啟動、或改變執行級時執行的scripts或scripts的目錄.
/etc/hosts 本地域名解析檔案
/etc/sysconfig/network IP、掩碼、閘道器、主機名配置
/etc/resolv.conf DNS伺服器配置
/etc/fstab 開機自動掛載系統,所有分割槽開機都會自動掛載
/etc/inittab設定系統啟動時Init程序將把系統設定成什麼樣的runlevel及載入相關的啟動檔案配置
/etc/exports設定NFS系統用的配置檔案路徑
/etc/init.d這個目錄來存放系統啟動指令碼
/etc/profile, /etc/csh.login, /etc/csh.cshrc全域性系統環境配置變數
/etc/issue認證前的輸出資訊,預設輸出版本核心資訊
/etc/passwd使用者資料庫,其中的域給出了使用者名稱、真實姓名、家目錄、加密的口令和使用者的其他資訊.
/etc/syslog.conf系統日誌引數配置

/bin:重要執行檔
/dev:所需要的裝置檔案

/dev:裝置檔案目錄,虛擬檔案系統,主要存放所有系統中device的相關資訊,不論是使用的或未使用的裝置,只要有可能使用到,就會在/dev中建立一個相對應的裝置檔案;裝置檔案分為2種類型:
字元裝置檔案和塊裝置檔案(目錄中基本上都是裝置檔案,如硬碟裝置檔案/dev/sda)
/dev/console:系統控制檯,也就是直接和系統連線的監視器;
/dev/hd:IDE裝置檔案;
/dev/sd:sata、usb、scsi等裝置檔案;
/dev/fd:軟碟機裝置檔案;
/dev/tty:虛擬控制檯裝置檔案;
/dev/pty:提供遠端虛擬控制檯裝置檔案;
/dev/null:所謂"黑洞",所有寫入該裝置的資訊都將消失,如當想要將螢幕上的輸出資訊隱藏起來時,只要將輸出資訊輸入到/dev/null中即可;
/dev/hd[a-t]IDE裝置 /dev/sd[a-z]SCSI裝置 /dev/fd[0-7]標準軟碟機
/dev/md[0-31]軟raid裝置 /dev/loop[0-7]本地迴環裝置
/dev/ram[0-15]記憶體/dev/null無限資料接收裝置,相當於黑洞 /dev/zero無限零資源
/dev/tty[0-63]虛擬終端 /dev/ttyS[0-3]串列埠 /dev/lp[0-3]並口 /dev/console控制檯
/dev/random隨機數裝置

/lib:執行檔所需的函式庫與核心所需的模組
/sbin:重要的系統執行檔案
這五個目錄千萬不可與根目錄分開在不同的分割槽。

二. /usr 的意義與內容:

/usr/X11R6/:為X Window System重要資料所放置的目錄,之所以取名為X11R6是因為最後的X版本為第11版,且該版的第6次釋出之意。
/usr/bin/:絕大部分的使用者可使用指令都放在這裡。請注意到他與/bin的不同之處。(是否與開機過程有關)
/usr/include/:c/c++等程式語言的檔頭(header)與包含檔(include)放置處,當我們以tarball方式
/usr/lib/:包含各應用軟體的函式庫、目標檔案(object file),以及不被一般使用者慣用的執行檔或指令碼(script)。
某些軟體會提供一些特殊的指令來進行伺服器的設定,這些指令也不會經常被系統管理員操作,
那就會被擺放到這個目錄下啦。要注意的是,如果你使用的是X86_64的Linux系統, 那可能會有/usr/lib64/目錄產生
/usr/local/:統管理員在本機自行安裝自己下載的軟體(非distribution預設提供者),建議安裝到此目錄, 這樣會比較便於管理。舉例來說,你的distribution提供的軟體較舊,你想安裝較新的軟體但又不想移除舊版,
此時你可以將新版軟體安裝於/usr/local/目錄下,可與原先的舊版軟體有分別啦。
你可以自行到/usr/local去看看,該目錄下也是具有bin, etc, include, lib…的次目錄
/usr/sbin/:非系統正常運作所需要的系統指令。最常見的就是某些網路伺服器軟體的服務指令(daemon)
/usr/share/:放置共享檔案的地方,在這個目錄下放置的資料幾乎是不分硬體架構均可讀取的資料, 因為幾乎都是文字檔案嘛。在此目錄下常見的還有這些次目錄:/usr/share/man:聯機幫助檔案/usr/share/doc:軟體雜項的檔案說明/usr/share/zoneinfo:與時區有關的時區檔案
/usr/src/:一般原始碼建議放置到這裡,src有source的意思。至於核心原始碼則建議放置到/usr/src/linux/目錄下。

三. /var 的意義與內容:

/var/cache/:應用程式本身運作過程中會產生的一些暫存檔。
/var/lib/:程式本身執行的過程中,需要使用到的資料檔案放置的目錄。在此目錄下各自的軟體應該要有各自的目錄。 舉例來說,MySQL的資料庫放置到/var/lib/mysql/而rpm的資料庫則放到/var/lib/rpm去。
/var/lock/:某些裝置或者是檔案資源一次只能被一個應用程式所使用,如果同時有兩個程式使用該裝置時, 就可能產生一些錯誤的狀況,因此就得要將該裝置上鎖(lock),以確保該裝置只會給單一軟體所使用。
舉例來說,燒錄機正在燒錄一塊光碟,你想一下,會不會有兩個人同時在使用一個燒錄機燒片?
如果兩個人同時燒錄,那片子寫入的是誰的資料?所以當第一個人在燒錄時該燒錄機就會被上鎖,
第二個人就得要該裝置被解除鎖定(就是前一個人用完了)才能夠繼續使用。
/var/log/:非常重要。這是登入檔案放置的目錄。裡面比較重要的檔案如/var/log/messages, /var/log/wtmp(記錄登入者的資訊)等。
/var/mail/:放置個人電子郵件信箱的目錄,不過這個目錄也被放置到/var/spool/mail/目錄中,通常這兩個目錄是互為連結檔案。
/var/run/:某些程式或者是服務啟動後,會將他們的PID放置在這個目錄下。
/var/spool/:這個目錄通常放置一些佇列資料,所謂的“佇列”就是排隊等待其他程式使用的資料。 這些資料被使用後通常都會被刪除。舉例來說,系統收到新信會放置到/var/spool/mail/中,
但使用者收下該信件後該封信原則上就會被刪除。信件如果暫時寄不出去會被放到/var/spool/mqueue/中,
等到被送出後就被刪除。如果是工作排程資料(crontab),就會被放置到/var/spool/cron/目錄中。

四、/home:預設存放使用者的宿主目錄(除了root使用者)

/home/~/.bashrc:提供bash環境中所需使用的別名;
/home/~/.bash_profile:提供bash環境所需的變數;一般先執行.bashrc後,才會再執行.bash_profile;
/home/~/.bash_history:使用者歷史命令檔案,記錄使用者曾經輸入過的所有命令;(預設為1000條,可以通過HISTSIZE變數更改)
/home/~/.bash_logout:當用戶登出的同時,系統會自動執行.bash_logout檔案,如果管理員需要記錄使用者登出的一些額外記錄、動作或其他資訊,就可以利用這個機制去完成;

五、/proc:虛擬檔案系統,此目錄是kernel載入後,在記憶體裡面建立的一個虛擬目錄,有專屬的檔案系統,主要提供系統一些實時的資訊,此目錄下不能建立和刪除檔案;(某些檔案可以修改)

/proc主要作用可以整理為:
–整理系統內部的資訊;
–存放主機硬體資訊;
–調整系統執行時的引數;
–檢查及修改網路和主機的引數;
–檢查及調整系統的記憶體和效能;
/proc下常用的資訊檔案有:
/proc/cpuinfo:cpu的硬體資訊,如型別、廠家、型號和效能等
/proc/devices:記錄所有在/dev目錄中相關的裝置檔案分類方式
/proc/filesystems:當前執行核心所配置的檔案系統
/proc/interrupts:可以檢視每一個IRQ的編號對應到哪一個硬體裝置
/proc/loadavg:系統"平均負載",3個數據指出系統當前的工作負載
/proc/dma:當前正在使用的DMA通道
/proc/ioports:將目前系統上所有可看到的硬體對應到記憶體位置的分配表的詳細資訊呈現出來
/proc/kcore:系統上可以檢測到的實體記憶體,主機記憶體多大,這個檔案就有多大
/proc/kmsg:在系統尚未進入作業系統階段,把載入kernel和initrd的資訊先記錄到該檔案中,後續會將日誌資訊寫入/var/log/message檔案中
/proc/meminfo:記錄系統的記憶體資訊
/proc/modules:與lsmod命令檢視到的模組資訊完全一致
/proc/mtrr:負責記憶體配置的機制
/proc/iomem:主要用於儲存配置後所有記憶體儲存的明細資訊
/proc/partitions:這個檔案可以實時呈現系統目前看到的分割槽
/proc/數字目錄:數字目錄很多,它們代表所有目前正在系統中執行的所有程式
/proc/bus:有關該主機上現有匯流排的所有資訊,如輸入裝置、PCI介面、PCMCIA擴充套件卡及USB介面資訊
/proc/net目錄:存放的都是一些網路相關的虛擬配置檔案,都是ASCII檔案,可以檢視(與ifconfig、arp、netstat等有關)
/proc/scsi:儲存系統上所有的scsi裝置資訊(包括sata和usb裝置的資訊)
/proc/sys目錄:存放系統核心所使用的一些變數,根據不同性質的檔案而存放在不同的子目錄中,可以通過/etc/sysctl.conf檔案設定和更改其預設值;變數時實時的變更,有很多設定很象是開關,設定後馬上生效;
/proc/tty:存放有關目前可用的正在使用的tty裝置的資訊
/proc/self:存放到檢視/proc的程式的程序目錄的符號連線,當2個程序檢視proc時,這將會是不同的連線;主要便於程式得到它自己的程序目錄;
/proc/stat:系統的不同狀態資訊;
/proc/uptime:系統啟動的時間長度;
/proc/version:系統核心版本;