[TOC] 在早期的 UNIX 系統中,各個廠家各自定義了自己的 UNIX 系統文件目錄,比較混亂。Linux 面世不久後,對文件目錄進行了標準化,於1994年對根文件目錄做了統一的規範,推出 FHS ( Filesystem Hierarchy Standard ) 的 Linux 文件系統層次結 ...
[TOC]
在早期的 UNIX 系統中,各個廠家各自定義了自己的 UNIX 系統文件目錄,比較混亂。Linux 面世不久後,對文件目錄進行了標準化,於1994年對根文件目錄做了統一的規範,推出 FHS ( Filesystem Hierarchy Standard ) 的 Linux 文件系統層次結構標準。FHS 標準規定了 Linux 根目錄各文件夾的名稱及作用,統一了Linux界命名混亂的局面。
FHS 定義了系統中每個區域的用途、所需要的最小構成的文件和目錄同時還給出了例外處理與矛盾處理。 FHS 定義了兩層規範。第一層是, / 下麵的各個目錄應該要放什麼文件數據,例如: /etc 應該要放置設置文件,/bin 與 /sbin 則應該要放置可執行文件等等。第二層則是針對 /usr 及 /var 這兩個目錄的子目錄來定義,例如: /var/log 放置系統登錄文件、 /usr/share 放置共用數據等等。
FHS 依據文件系統使用的頻繁與否以及是否允許用戶隨意改動,將目錄定義為四種交互作用的形態,如下表所示:
可分享(shareable) | 不可分享(unshareable) | |
---|---|---|
靜態的(static) | /usr 存放軟體 /opt 第三方軟體 |
/etc 配置文件 /boot 開機及內核文件 |
可變的(variable) | /var/mail 用戶郵件信箱 /var/news 新聞組 |
/var/run 程式相關 /var/lock 鎖相關 |
/:根目錄,一般根目錄下只存放目錄,不要存放件,/etc、/bin、/dev、/lib、/sbin應該和根目錄放置在一個分區中。
linux 系統啟動流程
- 系統加電之後,首先進行的硬體自檢,然後是 bootloader 對系統的初始化,載入內核。
- 內核被載入到記憶體中之後,就開始執行了。一旦內核啟動運行,對硬體的檢測就會決定需要對哪些設備驅動程式進行初始化。
- 從這裡開始,內核就能夠掛裝根文件系統(這個過程類似於Windows識別並存取C盤的過程)。
- 內核掛裝了根文件系統,並已初始化所有的設備驅動程式和數據結構等之後,就通過啟動一個叫 init 的用戶級程式,完成引導進程。
- Init 進程是系統啟動之後的第一個用戶進程,所以它的 pid (進程編號)始終為1。
- init 進程上來首先做的事是去讀取 /etc/ 目錄下 inittab 文件中 initdefault id 值,這個值稱為運行級別(run-level)。它決定了系統啟動之後運行於什麼級別。運行級別決定了系統啟動的絕大部分行為和目的。
運行級別如下表所示:
0 | 停機(千萬別把initdefault設置為0,否則系統永遠無法啟動) |
---|---|
1 | 單用戶模式,可以對系統進行軟體維護。 |
2 | 多用戶,沒有 NFS,,啟動網路工作站服務。 (最後會啟動dtlogin允許圖形界面工作站) |
3 | 完全多用戶模式(標準的運行級) |
4 | 系統保留的 |
5 | X11 (x window) |
6 | 重新啟動 (千萬不要把initdefault 設置為6,否則將一直在重啟 ) |
系統目錄概要說明
目 錄 | 全 稱 | 用 途 | 說 明 |
---|---|---|---|
/bin | Binary | 存放二進位可執行文件,供所有用戶使用的基本命令一般都在這裡。 | 常用命令 ls,cat,mkdir,cp,rm,netstat,ping,ip,cat,chmod,chown,less,more 等命令存放於此。系統啟動就會用到,不能關聯至獨立分區。 |
/sbin | Super user Binary | 存放二進位可執行文件,只有root才能訪問。 | 這裡存放的是系統管理員使用的系統級別的管理命令和程式。如 ifconfig,iptables,mkfs,reboot,shutdown,poweroff 等。 |
/boot | 引導文件存放目錄 | 內核文件(vmlinux)、引導載入器(grub)存放於此目錄。建議單獨分區,分區大小 100M 即可。 | |
/etc | 拉丁語全稱etcetera 另一種說法為Editable Text Configuration |
存放系統管理所需的配置文件及目錄 | 例如:host.conf,adduser.conf 等。重要的配置文件有 /etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d等 |
/dev | device | 設備文件及特殊文件存儲位置 | 任何設備與介面設備都以文件的形式存放在此目錄,相當於設備的入口,通過訪問該目錄下的文件,就等於訪問對應設備。例如:null,zero,tty,sd*,cpu,char,bus 等。 |
/sys | system | 用於輸出當前系統上硬體設備相關信息的虛擬文件系統 | 該文件系統是內核設備樹的一個直觀反映。當一個內核對象被創建的時候,對應的文件和目錄也在內核對象子系統中被創建。 |
/lib | library | 存放系統最基本的動態連接共用庫 | 類似於Windows里的DLL文件 |
/lib64 | 64位系統上存放輔助共用庫文件 | ||
/proc | process | 這是一個虛擬的目錄,它是系統記憶體數據的映射 | 這個目錄的內容不在硬碟上而是在記憶體里,可以通過直接訪問這個目錄來獲取系統信息。例如:內核、進程、外部設備的狀態,網路狀態等。 比較重要的目錄有 /proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/ 等。 |
/usr | Unix System Resource | 系統應用程式存放目錄,例如 ftp,telnet 等等。 | /bin 目錄存放系統用戶使用的應用程式,所有用戶可訪問。例如:who,whoami,sudo,users,attr,clear,ssh,gcc,perl,Python等。 /sbin 目錄存放超級用戶使用的比較高級的管理程式和系統守護程式。例如:arp,arpd,adduser,useradd,addgroup,groupdel,chroot,chpasswd等。 /lib 目錄存放應用程式的庫或包文件。例如:Apache,gcc,Python 等程式的庫文件。 /lib64 目錄存放64位系統的程式和軟體包的庫文件。 /include 目錄存放C程式的頭文件即 .h 文件。 /share 目錄存放共用數據。/usr/share/doc: 系統說明文件存放目錄。/usr/share/man: 程式說明文件存放目錄 /local 目錄是第三方應用程式的安裝位置,包括 bin,sbin,lib,lib64,etc,include等子目錄。 /src 目錄存放源代碼,linux內核的源代碼就放在/usr/src/linux里。 /doc 目錄存放 linux 文檔。 |
/opt | 第三方應用程式的安裝位置 | 以前的 Linux 系統中,習慣放置在 /usr/local 目錄下。一般情況下,我們可以把 tomcat 等都安裝到這裡。 | |
/var | variable data file | 存放經常變動的文件 | /cache 目錄是應用程式緩存目錄。 /local 目錄是專用於 /usr/local 下應用的可變數據 /opt 目錄專用於 /opt 目錄下的程式存儲可變數據。 /lock 目錄用於存放鎖文件。 /log 目錄 用於存放日誌目錄及文件。/var/log/wtmp記錄系統登錄和註銷日誌,/var/log/message記錄核心和系統程式的信息。 /run 目錄存放運行中的進程相關數據,通常用於存儲進程的 pid 文件。 /tmp 目錄保存系統兩次重啟之間產生的臨時數據。 /lib 目錄存放系統正常運行時隨時會改變的文件。 /spool 目錄為應用程式數據池。 /mail 目錄存放用戶郵件文件。 建議單獨分區,設置較大的磁碟空間 |
/root | 管理員的根目錄 | 最好將 /root和 /放置在一個分區下。 | |
/home | 普通用戶的根目錄 | 建議單獨分區,並設置較大的磁碟空間,方便用戶存放數據。 | |
/mnt | mount | 用於臨時掛載其它文件系統 | 例如可以將光碟機掛載在/mnt/上,然後進入該目錄就可以查看光碟機里的內容 |
/tmp | temp | 用來存放一些臨時文件 | 任何人都可以訪問,重要數據不可放置在此目錄下 |
/media | 用於將識別的設備掛載到這個目錄下 | linux系統會自動識別一些設備,例如U盤、光碟機等等,當識別後,linux會把識別的設備掛載到這個目錄下。 | |
/srv | service | 存放一些服務啟動之後需要提取的數據 | 如 www 服務需要訪問的網頁數據存放在 /srv/www 內 |
系統詳細介紹
/etc 文件系統
/etc 目錄包含各種系統配置文件,下麵說明其中的一些。其他的你應該知道它們屬於哪個程式,並閱讀該程式的man頁。許多網路配置文件也在 /etc 中。
/etc/rc 或 /etc/rc.d 或 /etc/rc?.d
rc.d 是 runlevel control directory 的縮寫。
/etc/rc.d/rc0.d - rc6.d 各啟動級別的啟動腳本,這些文件夾下的 init 腳本都有一些特別的名字,命名都以S(start)、K(kill)或 D(disable)開頭,後面跟一個數字。當init進入一個運行等級的時候,它會按照數字順序運行所有以 K 開頭的腳本並傳入 stop 參數,除非對應的 init 腳本在前一個運行等級中沒有啟動。然後 init 按照數字順序運行所有以 S 開頭的腳本並傳入 start 參數。任何以 D 開頭的 init 腳本都會被忽略—這讓你可以在指定的運行等級禁止一個腳本,或者你也可以僅僅移除全部符號鏈接。所以如果你有兩個腳本,S01foo 和 S05bar, init 首先會運行 S01foo start,當它進入特定的運行等級後再執行 S05bar start。
/etc/rc.d/rcS.d 單用戶模式啟動腳本。
/etc/rc.d/rc.local 通常它是一個留給用戶修改的shell腳本。一般會在init進程結束的時候運行它,所以你可以在這裡放一些想要運行的額外腳本,而不用再創建自己的init腳本。
/etc/rc.d/rc.sysinit 文件主要做在各個運行模式中相同的初始化工作,包括設定 PATH、設定網路配置(/etc/sysconfig/network)、啟動 swap 分區、設定 /proc 等等。
/etc/rc.d/rc 文件當運行級別改變時,負責啟動/停止各種服務。
/etc/init 或 /etc/init.d
init 文件夾包含所有服務在各個運行等級中的全部啟動腳本。一般來說,它們都是標準的 shell 腳本,遵守最基本的標準。每個腳本最少接受兩個參數 start 和 stop,它們分別代表啟動和停止服務 (如網頁服務)。除此之外,init腳本通常還會接受一些額外的選項,如 restart(重啟伺服器)、status(返回服務當前狀態)、reload(告知服務從配置文件中重新載入配置)以及 force-reload(強制服務重載它的配置)。當用不帶參數的方式運行腳本的時候,一般應該返回一個它會接受的參數列表。
init.d 目錄存放的是一些腳本,一般是 linux 以 rpm 包安裝時設定的一些服務的啟動腳本。系統在安裝時裝了好多rpm 包,這裡面就有很多對應的腳本。執行這些腳本可以用來啟動,停止,重啟這些服務。前面說到,init.d 這個目錄下的腳本就類似與 windows 中的註冊表,在系統啟動的時候執行。
/etc/inittab init 進程的配置文件。
/etc/passwd 用戶資料庫,其中的域給出了用戶名、真實姓名、用戶起始目錄、加密口令和用戶的其 他信息。
/etc/fdprm 軟盤參數表,用以說明不同的軟盤格式。可用 setfdprm 進行設置。
/etc/fstab 指定啟動時需要自動安裝的文件系統列表。啟動時 mount -a 命令(在 /etc/rc 或等效的啟動文件中)自動 mount 的文件系統列表也包括用 swapon -a 啟用的 swap 區的信息。
/etc/group、/etc/adduser.conf、/etc/deluser.conf、/etc/sudoers 類似 /etc/passwd ,但說明的不是用戶信息而是組的信息。包括組的各種數據。
添加的用戶信息,刪除用戶信息。
具有sodu執行許可權的用戶信息。
/etc/issue 包括用戶在登錄提示符前的輸出信息。通常包括系統的一段短說明或歡迎信息。具體內容由系統管理員確定。
/etc/magic “file” 的配置文件。包含不同文件格式的說明,“file” 基於它猜測文件類型。
/etc/motd motd 是 message of the day 的縮寫,用戶成功登錄後自動輸出。內容由系統管理員確定。常用於通告信息,如計劃關機時間的警告等。
/etc/mtab 當前安裝的文件系統列表。由腳本( scritp )初始化,並由 mount 命令自動更新。當需要一個當前安裝的文件系統的列表時使用(例如 df 命令)。
/etc/shadow 在安裝了影子( shadow )口令軟體的系統上的影子口令文件。影子口令文件將 /etc/passwd 文件中的加密口令移動到 /etc/shadow 中,而後者只對超級用戶( root )可讀。這使破譯口令更困難,以此增加系統的安全性。
/etc/login.defs login 命令的配置文件。
/etc/printcap 類似 /etc/termcap ,但針對印表機。語法不同。
/etc/profile 、/etc/csh.login、/etc/csh.cshrc
/etc/profile 系統全局環境變數設置,裡面可以添加對所有用戶有效的環境變數,系統配置等。
登錄或啟動時 bourne 或 c shells執行的文件。這允許系統管理員為所有用戶建立全局預設環境。
/etc/securetty 確認安全終端,即哪個終端允許超級用戶( root )登錄。一般只列出虛擬控制台,這樣就不可能(至少很困難)通過數據機( modem )或網路闖入系統並得到超級用戶特權。
/etc/shells 列出可以使用的 shell。chsh 命令允許用戶在本文件指定範圍內改變登錄的 shell。提供一臺機器 ftp 服務的服務進程 ftpd 檢查用戶 shell 是否列在 /etc/shells 文件中,如果不是,將不允許該用戶登錄。
/etc/termcap 終端性能資料庫。說明不同的終端用什麼“轉義序列”控制。寫程式時不直接輸出轉義序列(這樣只能工作於特定品牌的終端),而是從 /etc/termcap 中查找要做的工作的正確序列。這樣,多數的程式可以在多數終端上運行。
/etc/bash.bashrc bash 的環境變數配置,裡面添加啟動bash時讀取的環境。
/etc/hosts 主機功能變數名稱的配置。
/etc/ld.so.cof ldconfig命令讀取的系統庫目錄配置文件。/etc/ld.so.cache ldconfig命令讀取的系統庫路徑生成的緩存文件。
/etc/sysctl.conf 系統內核的配置文件。
/etc/protocols 系統支持的ip協議簇。
/etc/timezone 系統的時間時區設置。
/dev 文件系統
/dev 目錄包括所有設備的設備文件。設備文件用特定的約定命名,這在設備列表中說明。設備文件在安裝時由系統產生,以後可以用 /dev/makedev 描述。/dev/makedev.local 是系統管理員為本地設備文件(或連接)寫的描述文稿(即如一些非標準設備驅動不是標準 makedev 的一部分)。下麵簡要介紹 /dev 下一些常用文件。
/dev/console 系統控制台,也就是直接和系統連接的監視器。
/dev/hd[a-t] ide 硬碟驅動程式介面。如:/dev/hda 指的是第一個硬碟,had1 則是指 /dev/hda 的第一個分區。如系統中有其他的硬碟,則依次為 /dev/hdb、/dev/hdc、. . . . .;如有多個分區則依次為 hda1、hda2 . . . . . .
/dev/sd[a-z] scsi 磁碟驅動程式介面。如有系統有 scsi 硬碟,就不會訪問 /dev/had,而會訪問 /dev/sda。
/dev/fd[0-7] 軟碟機設備驅動程式。如:/dev/fd0 指系統的第一個軟盤,也就是通常所說的 a:盤,/dev/fd1 指第二個軟盤,. . . . . .而 /dev/fd1h1440 則表示訪問驅動器1中的4.5高密盤。
/dev/st scsi 磁帶驅動器驅動程式。
/dev/tty 提供虛擬控制台支持。如:/dev/tty1 指的是系統的第一個虛擬控制台,/dev/tty2 則是系統的第二個虛擬控制台。
/dev/pty 提供遠程登陸偽終端支持。在進行 telnet 登錄時就要用到 /dev/pty 設備。
/dev/ttys 電腦串列介面,對於 dos 來說就是“ c o m 1”口。
/dev/cua 電腦串列介面,與數據機一起使用的設備。
/dev/null “黑洞”,所有寫入該設備的信息都將消失。例如:當想要將屏幕上的輸出信息隱藏起來時,只要將輸出信息輸入到 /dev/null 中即可。
/dev/zero
該設備無窮盡地提供空字元(ASCII NUL, 0x00),可以使用任何你需要的數目。它通常用於向設備或文件寫入字元串0,用於初始化數據存儲。(當然,也可作為輸出流的接受容器)
/dev/lp[0-3]
並口
/dev/loop[0-7]
本地迴環設備
/dev/md[0-31]
軟raid設備
/dev/random、/dev/urandom
隨機數設備。
/dev/shm
這個目錄不在硬碟上,而是在記憶體里。預設系統就會載入/dev/shm ,它就是所謂的tmpfs。因此在 linux下,就不需要大費周折去建 ramdisk,直接使用 /dev/shm/ 就可達到很好的優化效果。它預設最大為記憶體的一半大小,使用df -h命令可以看到。但它並不會真正的占用這塊記憶體,如果/dev/shm/下沒有任何文件,它占用的記憶體實際上就是0位元組;如果它最大為 1G,裡頭放有 100M 文件,那剩餘的900M 仍然可為其它應用程式所使用,但它所占用的 100M 記憶體,是絕不會被系統回收重新劃分的。象虛擬磁碟一樣,tmpfs 可以使用您的 RAM,但它也可以使用您的交換分區來存儲。而且傳統的虛擬磁碟是個塊設備,並需要一個 mkfs 之類的命令才能真正地使用它,tmpfs 是一個文件系統,而不是塊設備;您只是安裝它,它就可以使用了。
tty是teletypewriter的縮寫 [ 轉自:http://blog.chinaunix.net/uid-8194676-id-2513202.html ]
揭秘 TTY 見:http://www.linusakesson.net/programming/tty/
getty 是 get teletypewriter 的縮寫
終端是一種字元型設備,它有多種類型,通常使用 tty 來簡稱各種類型的終端設備。tty 是 teletypewriter 的縮寫。Teletype 是最早出現的一種終端設備,很象電傳打字機,是由 Teletype 公司生產的。設備名放在特殊文件目錄 /dev/ 下,終端特殊設備文件一般有以下幾種:
1. 串列埠終端(/dev/ttySn) 串列埠終端(Serial Port Terminal)是使用電腦串列埠連接的終端設備。電腦把每個串列埠都看作是一個字元設備。有段時間這些串列埠設備通常被稱為終端設備,因為那時它的最大用途就是用來連接終端。這些串列埠所對應的設備名稱是 /dev/tts/0(或/dev/ttyS0)、/dev/tts/1(或 /dev/ttyS1)等,設備號分別是(4,0)、(4,1)等,分別對應於 DOS 系統下的 COM1、COM2 等。若要向一個埠發送數據,可以在命令行上把標準輸出重定向到這些特殊文件名上即可。例如,在命令行提示符下鍵入:echo test > /dev/ttyS1 會把單詞 ”test” 發送到連接在 ttyS1(COM2)埠的設備上。 2. 偽終端(/dev/pty/) 偽終端(Pseudo Terminal)是成對的邏輯終端設備,例如 /dev/ptyp3 和 /dev/ttyp3(或著在設備文件系統中分別是 /dev/pty/m3和/dev/pty/s3)。它們與實際物理設備並不直接相關。如果一個程式把 ttyp3 看作是一個串列埠設備,則它對該埠的讀/寫操作會反映在該邏輯終端設備對的另一個上面( ttyp3 )。而 ttyp3 則是另一個程式用於讀寫操作的邏輯設備。這樣,兩個程式就可以通過這種邏輯設備進行互相交流,而其中一個使用 ttyp3 的程式則認為自己正在與一個串列埠進行通信。這很象是邏輯設備對之間的管道操作。 對於 ttyp3(s3),任何設計成使用一個串列埠設備的程式都可以使用該邏輯設備。但對於使用 ptyp3 的程式,則需要專門設計來使用 ptyp3(m3)邏輯設備。 例如,如果某人在網上使用 telnet 程式連接到你的電腦上,則telnet程式就可能會開始連接到設備ptyp2(m2)上(一個偽終端埠上)。此時一個 getty 程式就應該運行在對應的 ttyp2(s2)埠上。當telnet 從遠端獲取了一個字元時,該字元就會通過 m2、s2 傳遞給 getty 程式,而 getty 程式就會通過 s2、m2 和 telnet 程式往網路上返回 ”login:” 字元串信息。這樣,登錄程式與 telnet 程式就通過“偽終端”進行通信。通過使用適當的軟體,就可以把兩個甚至多個偽終端設備連接到同一個物理串列埠上。 在使用設備文件系統(device filesystem)之前,為了得到大量的偽終端設備特殊文件,HP-UX AIX等使用了比較複雜的文件名命名方式。 3. 控制終端(/dev/tty) 如果當前進程有控制終端(Controlling Terminal)的話,那麼 /dev/tty 就是當前進程的控制終端的設備特殊文件。可以使用命令”ps –ax”來查看進程與哪個控制終端相連。對於你登錄的 shell,/dev/tty 就是你使用的終端,設備號是(5,0)。使用命令”tty”可以查看它具體對應哪個實際終端設備。/dev/tty 有些類似於到實際所使用終端設備的一個聯接。 4. 控制台終端(/dev/ttyn, /dev/console) 在 UNIX 系統中,電腦顯示器通常被稱為控制台終端(Console)。它模擬了類型為Linux的一種終端(TERM=Linux),並且有一些設備特殊文件與之相關聯:tty0、tty1、tty2等。當你在控制臺上登錄時,使用的是 tty1。使用 Alt+[F1—F6] 組合鍵時,我們就可以切換到 tty2、tty3 等上面去。tty1 –tty6 等稱為虛擬終端,而 tty0 則是當前所使用虛擬終端的一個別名,系統所產生的信息會發送到該終端上。因此不管當前正在使用哪個虛擬終端,系統信息都會發送到控制台終端上。 你可以登錄到不同的虛擬終端上去,因而可以讓系統同時有幾個不同的會話期存在。只有系統或超級用戶root 可以向 /dev/tty0 進行寫操作, 5. 其它類型 還針對很多不同的字元設備存在有很多其它種類的終端設備特殊文件。例如針對 ISDN 設備的 /dev/ttyIn 終端設備等。這裡不再贅述。
tmpfs 的優勢:
1,動態文件系統的大小。
2,tmpfs 的另一個主要的好處是它閃電般的速度。因為典型的 tmpfs 文件系統會完全駐留在 RAM 中,讀寫幾乎可以是瞬間的。
3,tmpfs 數據在重新啟動之後不會保留,因為虛擬記憶體本質上就是易失的。所以有必要做一些腳本做諸如載入,綁定的操作。
一、修改 /dev/shm 大小
預設的最大一半記憶體大小在某些場合可能不夠用,並且預設的 inode 數量很低一般都要調高些,這時可以用mount 命令來管理它。
#mount -o size=1500M -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm
在 2G 的機器上,將最大容量調到 1.5G,並且 inode 數量調到 1000000,這意味著大致可存入最多一百萬個小文件。
如果需要永久修改 /dev/shm 的值,需要修改 /etc/fstab
tmpfs /dev/shm tmpfs defaults,size=1.5G 0 0
#mount -o remount /dev/shm
二、/dev/shm 應用
首先在 /dev/shm 建個 tmp 文件夾,然後與實際 /tmp 綁定
#mkdir /dev/shm/tmp
#chmod 1777 /dev/shm/tmp
#mount –bind /dev/shm/tmp /tmp(–bind )
在使用 mount –bind olderdir newerdir命令來掛載一個目錄到另一個目錄後,newerdir 的許可權和所有者等所有信息會發生變化。掛載後的目錄繼承了被掛載目錄的所有屬性,除了名稱。Oracle 11g 的 amm 記憶體管理模式就是使用 /dev/shm,所以有時候修改 MEMORY_TARGET 或者 MEMORY_MAX_TARGET 會出現 ORA-00845 的錯誤。
/usr 文件系統
/usr 是個很重要的目錄,通常這一文件系統很大,因為所有程式安裝在這裡。/usr 里的所有文件一般來自 linux 發行版( distribution);本地安裝的程式和其他東西在 /usr/local 下,因為這樣可以在升級新版系統或新發行版時無須重新安裝全部程式。/usr 目錄下的許多內容是可選的,但這些功能會使用戶使用系統更加有效。/usr 可容納許多大型的軟體包和它們的配置文件。下麵列出一些重要的目錄(一些不太重要的目錄被省略了)。
/usr/x11r6 包含 x window 系統的所有可執行程式、配置文件和支持文件,之所以取名為 X11R6 是因為最後的X版本為第11版,且該版的第6次釋出之意。為簡化 x 的開發和安裝,x 的文件沒有集成到系統中。x window 系統是一個功能強大的圖形環境,提供了大量的圖形工具程式。用戶如果對 microsoft windows 或 machintosh 比較熟悉的話,就不會對 xwindow 系統感到束手無策了。
/usr/x386 類似 /usr/x11r6,但是是專門給 x 11 release 5 的。
/usr/bin 集中了幾乎所有用戶命令,是系統的軟體庫。另有些命令在 /bin 或 /usr/local/bin 中。
/usr/sbin 包括了根文件系統不必要的系統管理命令,例如多數服務程式。
/usr/man、/usr/info、/usr/doc 這些目錄包含所有手冊頁、gnu 信息文檔和各種其他文檔文件。每個聯機手冊的“節”都有兩個子目錄。例如:/usr/man/man1 中包含聯機手冊第一節的源碼(沒有格式化的原始文件),/usr/man/cat1 包含第一節已格式化的內容。聯機手冊分為以下九節:內部命令、系統調用、庫函數、設備、文件格式、游戲、巨集軟體包、系統管理和核心程式。
/usr/include 包含了 c 語言的頭文件,這些文件多以 . h 結尾,用來描述 c 語言程式中用到的數據結構、子過程和常量。為了保持一致性,這實際上應該放在 /usr/lib 下,但習慣上一直沿用了這個名字。
/usr/lib lib 是 library 的簡寫。存放的是各應用軟體的動態鏈接庫以及一些不被一般使用者慣用的執行檔或腳本(script)。編程的原始庫也存在 /usr/lib 里。當編譯程式時,程式便會和其中的庫進行連接。也有許多程式把配置文件存入其中。
/usr/local 系統管理員在本機安裝下載的軟體(非 distribution 預設提供者),建議安裝到此目錄, 這樣會比較便於管理。舉例來說,你的 distribution 提供的軟體較舊,你想安裝較新的軟體但又不想移除舊版, 此時你可以將新版軟體安裝於 /usr/local/ 目錄下,可與原先的舊版軟體有分別啦。 你可以自行到 /usr/local 去看看,該目錄下也是具有 bin, etc, include, lib...的次目錄。
/usr/share
放置共用文件的地方,在這個目錄下放置的數據幾乎是不分硬體架構均可讀取的數據, 因為幾乎都是文本文件。在此目錄下常見的還有這些次目錄:/usr/share/man:聯機幫助文件;/usr/share/doc:軟體雜項的文件說明;/usr/share/zoneinfo:與時區有關的時區文件。
/usr/src
src 是 source 的縮寫,一般原始碼建議放置到這裡。至於核心原始碼則建議放置到 /usr/src/linux/ 目錄下。
/var 文件系統
/var 包含系統一般運行時要改變的數據。通常這些數據所在的目錄的大小是要經常變化或擴充的。原來 /var 目錄中有些內容是在 /usr 中的,但為了保持 /usr 目錄的相對穩定,就把那些需要經常改變的目錄放到 /var 中了。每個系統是特定的,即不通過網路與其他電腦共用。下麵列出一些重要的目錄(一些不太重要的目錄省略了)。
/var/catman 包括了格式化過的幫助( man )頁。幫助頁的源文件一般存在 /usr/man/man 中;有些 man 頁可能有預格式化的版本,存在 /usr/man/cat 中。而其他的 man 頁在第一次看時都需要格式化,格式化完的版本存在 /var/man 中,這樣其他人再看相同的頁時就無須等待格式化了。( /var/catman 經常被清除,就像清除臨時目錄一樣。)
/var/lib 程式執行的過程中,需要使用到的數據文件放置的目錄。在此目錄下各自的軟體應該要有各自的目錄。 舉例來說,MySQL 的資料庫放置到 /var/lib/mysql/ 而 rpm 的資料庫則放到 /var/lib/rpm 中。
/var/local 存放 /usr/local 中安裝的程式的可變數據(即系統管理員安裝的程式)。註意,如果必要,即使本地安裝的程式也會使用其他 /var 目錄,例如 /var/lock 。
/var/lock 鎖文件。許多程式遵循在 /var/lock 中產生一個鎖定文件的約定,以用來支持他們正在使用某個特定的設備或文件。其他程式註意到這個鎖定文件時,就不會再使用這個設備或文件。
/var/log 各種程式的日誌( log )文件,尤其是 login( /var/log/wtmp log紀錄所有到系統的登錄和註銷) 和 syslog ( /var/log/messages 紀錄存儲所有核心和系統程式信息)。/var/log 里的文件經常不確定地增長,應該定期清除。
/var/run 保存在下一次系統引導前有效的關於系統的信息文件。例如, /var/run/utmp 包含當前登錄的用戶的信息。某些程式或者是服務啟動後,會將他們的PID放置在這個目錄下。
/var/spool 放置“假離線( spool )”程式的目錄,如mail、news、列印隊列和其他隊列工作的目錄。每個不同的 spool 在 /var/spool 下有自己的子目錄,例如,用戶的郵箱就存放在 /var/spool/mail 中。
/var/tmp 比 /tmp 允許更大的或需要存在較長時間的臨時文件。註意系統管理員可能不允許 /var/tmp 有很舊的文件。
/var/cache
應用程式運行過程中會產生的一些暫存檔。
/proc 文件系統
/proc 文件系統是一個偽文件系統,它並不存在磁碟上,只存在記憶體當中。它以文件系統的方式為訪問系統內核數據的操作提供介面。用戶和應用程式可以通過 proc得到系統的信息,並可以改變內核的某些參數。下麵說明一些最重要的文件和目錄( /proc 文件系統在 proc man 頁中有更詳細的說明)。
/proc/cmdline
這個文件給出了內核啟動的命令行。它和用於進程的cmdline項非常相似。
/proc/x 關於進程x的信息目錄,這一x是這一進程的標識號。每個進程在/proc 下有一個名為自己進程號的目錄。
/proc/cpuinfo 存放處理器(CPU)的信息,如 cpu 的類型、製造商、型號和性能等。
/proc/meminfo 這個文件給出了記憶體狀態的信息。它顯示出系統中空閑記憶體,已用物理記憶體和交換記憶體的總量。它還顯示出內核使用的共用記憶體和緩衝區總量。這些信息的格式和free命令顯示的結果類似。
/proc/devices 當前運行的核心配置的設備驅動的列表。
/proc/dma 這個文件列出由驅動程式保留的DMA通道和保留它們的驅動程式名稱。
/proc/filesystems 這個文件列出可供使用的文件系統類型,一種類型一行。雖然它們通常是編入內核的文件系統類型,但該文件還可以包含可載入的內核模塊加入的其它文件系統類型。
/proc/interrupts 顯示被占用的中斷信息和占用者的信息,以及被占用的數量。這個文件的每一行都有一個保留的中斷。每行中的域有:中斷號,本行中斷的發生次數,可能帶有一個加號的域(SA_INTERRUPT標誌設置),以及登記 這個中斷的驅動程式的名字。可以在安裝新硬體前,像查看 /proc/dma和/proc/ioports 一樣用 cat 命令手工查看手頭的這個文件。這個文件列出了當前投入使用的資源(但是不包括那些沒有載入驅動程式的硬體所使用的資源)。
/proc/ioports 當前使用的 i/o 埠。這個文件列出了諸如磁碟驅動器,乙太網卡和音效卡設備等多種設備驅動程式登記的許多I/O埠範圍。
/proc/kcore 系統物理記憶體映像。與物理記憶體大小完全一樣,然而實際上沒有占用這麼多記憶體;它僅僅是在程式訪問它時才被創建。(註意:除非你把它拷貝到什麼地方,否則 /proc 下沒有任何東西占用任何磁碟空間。)
/proc/kmsg 這個文件用於檢索用 printk 生成的內核消息。任何時刻只能有一個具有超級用戶許可權的進程可以讀取這個文件。也可以用系統調用syslog檢索這些消息。通常使用工具dmesg或守護進程klogd檢索這些消息。
/proc/ksyms 核心符號表。這個文件列出了已經登記的內核符號;這些符號給出了變數或函數的地址。每行給出一個符號的地址,符號名稱以及登記這個符號的模塊。程式ksyms,insmod和kmod使用這個文件。它還列出了正在運行的任務數,總任務數和最後分配的PID。
/proc/loadavg 這個文件給出以幾個不同的時間間隔計算的系統平均負載,這就如同uptime命令顯示的結果那樣。前三個數字是平均負載。這是通過計算過去1分鐘,5分鐘,15分鐘里運行隊列中的平均任務數得到的。隨後是正在運行的任務數和總任務數。最後是上次使用的進程號。
/proc/modules 存放當前載入了哪些核心模塊信息。
/proc/mounts
這個文件以 /etc/mtab 文件的格式給出當前系統所安裝的文件系統信息。這個文件也能反映出任何手工安裝從而在 /etc/mtab 文件中沒有包含的文件系統。
/proc/misc
這個文件報告用內核函數misc_register登記的設備驅動程式。
/proc/net 此目錄下的文件描述或修改了聯網代碼的行為。可以通過使用arp,netstat,route和ipfwadm命令設置或查詢這些特殊文件中的許多文件。
/proc/self 存放到查看 /proc 的程式的進程目錄的符號連接。當2個進程查看 /proc 時,這將會是不同的連接。這主要便於程式得到它自己的進程目錄。
/proc/stat 這個文件包含的信息有 CPU 利用率,磁碟,記憶體頁,記憶體對換,全部中斷,接觸開關以及啟動時間(自1970年1月1日起的秒數)。
/proc/uptime 系統啟動的時間長度。
/proc/version 核心版本
/proc/locks
這個文件包含在打開的文件上的加鎖信息。文件中的每一行描述了特定文件和文檔上的加鎖信息以及對文件施加的鎖的類型。內核也可以需要時對文件施加強制性鎖。
/proc/pci
這個文件給出PCI設備的信息。用它可以方便地診斷PCI問題。你可以從這個文件中檢索到的信息包括諸如IDE介面或USB控制器這樣的設備,匯流排,設備和功能編號,設備延遲以及IRQ編號。
/proc/scsi
此目錄下包含一個列出了所有檢測到的SCSI設備的文件,並且為每種控制器驅動程式提供一個目錄,在這個目錄下又為已安裝的此種控制器的每個實例提供一個子目錄。
/proc/sys
在此目錄下有許多子目錄。此目錄中的許多項都可以用來調整系統的性能。