linux 系統目錄詳解

来源:https://www.cnblogs.com/ITnoteforlsy/archive/2020/04/04/12634197.html
-Advertisement-
Play Games

[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 系統啟動流程

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 中。

  1. /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 文件當運行級別改變時,負責啟動/停止各種服務。

  2. /etc/init 或 /etc/init.d

    init 文件夾包含所有服務在各個運行等級中的全部啟動腳本。一般來說,它們都是標準的 shell 腳本,遵守最基本的標準。每個腳本最少接受兩個參數 start 和 stop,它們分別代表啟動和停止服務 (如網頁服務)。除此之外,init腳本通常還會接受一些額外的選項,如 restart(重啟伺服器)、status(返回服務當前狀態)、reload(告知服務從配置文件中重新載入配置)以及 force-reload(強制服務重載它的配置)。當用不帶參數的方式運行腳本的時候,一般應該返回一個它會接受的參數列表。

    init.d 目錄存放的是一些腳本,一般是 linux 以 rpm 包安裝時設定的一些服務的啟動腳本。系統在安裝時裝了好多rpm 包,這裡面就有很多對應的腳本。執行這些腳本可以用來啟動,停止,重啟這些服務。前面說到,init.d 這個目錄下的腳本就類似與 windows 中的註冊表,在系統啟動的時候執行。

  3. /etc/inittab init 進程的配置文件。

  4. /etc/passwd 用戶資料庫,其中的域給出了用戶名、真實姓名、用戶起始目錄、加密口令和用戶的其 他信息。

  5. /etc/fdprm 軟盤參數表,用以說明不同的軟盤格式。可用 setfdprm 進行設置。

  6. /etc/fstab 指定啟動時需要自動安裝的文件系統列表。啟動時 mount -a 命令(在 /etc/rc 或等效的啟動文件中)自動 mount 的文件系統列表也包括用 swapon -a 啟用的 swap 區的信息。

  7. /etc/group/etc/adduser.conf/etc/deluser.conf/etc/sudoers 類似 /etc/passwd ,但說明的不是用戶信息而是組的信息。包括組的各種數據。

    添加的用戶信息,刪除用戶信息。

    具有sodu執行許可權的用戶信息。

  8. /etc/issue 包括用戶在登錄提示符前的輸出信息。通常包括系統的一段短說明或歡迎信息。具體內容由系統管理員確定。

  9. /etc/magic “file” 的配置文件。包含不同文件格式的說明,“file” 基於它猜測文件類型。

  10. /etc/motd motd 是 message of the day 的縮寫,用戶成功登錄後自動輸出。內容由系統管理員確定。常用於通告信息,如計劃關機時間的警告等。

  11. /etc/mtab 當前安裝的文件系統列表。由腳本( scritp )初始化,並由 mount 命令自動更新。當需要一個當前安裝的文件系統的列表時使用(例如 df 命令)。

  12. /etc/shadow 在安裝了影子( shadow )口令軟體的系統上的影子口令文件。影子口令文件將 /etc/passwd 文件中的加密口令移動到 /etc/shadow 中,而後者只對超級用戶( root )可讀。這使破譯口令更困難,以此增加系統的安全性。

  13. /etc/login.defs login 命令的配置文件。

  14. /etc/printcap 類似 /etc/termcap ,但針對印表機。語法不同。

  15. /etc/profile 、/etc/csh.login、/etc/csh.cshrc

    /etc/profile 系統全局環境變數設置,裡面可以添加對所有用戶有效的環境變數,系統配置等。

    登錄或啟動時 bourne 或 c shells執行的文件。這允許系統管理員為所有用戶建立全局預設環境。

  16. /etc/securetty 確認安全終端,即哪個終端允許超級用戶( root )登錄。一般只列出虛擬控制台,這樣就不可能(至少很困難)通過數據機( modem )或網路闖入系統並得到超級用戶特權。

  17. /etc/shells 列出可以使用的 shell。chsh 命令允許用戶在本文件指定範圍內改變登錄的 shell。提供一臺機器 ftp 服務的服務進程 ftpd 檢查用戶 shell 是否列在 /etc/shells 文件中,如果不是,將不允許該用戶登錄。

  18. /etc/termcap 終端性能資料庫。說明不同的終端用什麼“轉義序列”控制。寫程式時不直接輸出轉義序列(這樣只能工作於特定品牌的終端),而是從 /etc/termcap 中查找要做的工作的正確序列。這樣,多數的程式可以在多數終端上運行。

  19. /etc/bash.bashrc bash 的環境變數配置,裡面添加啟動bash時讀取的環境。

  20. /etc/hosts 主機功能變數名稱的配置。

  21. /etc/ld.so.cof ldconfig命令讀取的系統庫目錄配置文件。/etc/ld.so.cache ldconfig命令讀取的系統庫路徑生成的緩存文件。

  22. /etc/sysctl.conf 系統內核的配置文件。

  23. /etc/protocols 系統支持的ip協議簇。

  24. /etc/timezone 系統的時間時區設置。

/dev 文件系統

​ /dev 目錄包括所有設備的設備文件。設備文件用特定的約定命名,這在設備列表中說明。設備文件在安裝時由系統產生,以後可以用 /dev/makedev 描述。/dev/makedev.local 是系統管理員為本地設備文件(或連接)寫的描述文稿(即如一些非標準設備驅動不是標準 makedev 的一部分)。下麵簡要介紹 /dev 下一些常用文件。

  1. /dev/console 系統控制台,也就是直接和系統連接的監視器。

  2. /dev/hd[a-t] ide 硬碟驅動程式介面。如:/dev/hda 指的是第一個硬碟,had1 則是指 /dev/hda 的第一個分區。如系統中有其他的硬碟,則依次為 /dev/hdb、/dev/hdc、. . . . .;如有多個分區則依次為 hda1、hda2 . . . . . .

  3. /dev/sd[a-z] scsi 磁碟驅動程式介面。如有系統有 scsi 硬碟,就不會訪問 /dev/had,而會訪問 /dev/sda。

  4. /dev/fd[0-7] 軟碟機設備驅動程式。如:/dev/fd0 指系統的第一個軟盤,也就是通常所說的 a:盤,/dev/fd1 指第二個軟盤,. . . . . .而 /dev/fd1h1440 則表示訪問驅動器1中的4.5高密盤。

  5. /dev/st scsi 磁帶驅動器驅動程式。

  6. /dev/tty 提供虛擬控制台支持。如:/dev/tty1 指的是系統的第一個虛擬控制台,/dev/tty2 則是系統的第二個虛擬控制台。

  7. /dev/pty 提供遠程登陸偽終端支持。在進行 telnet 登錄時就要用到 /dev/pty 設備。

  8. /dev/ttys 電腦串列介面,對於 dos 來說就是“ c o m 1”口。

  9. /dev/cua 電腦串列介面,與數據機一起使用的設備。

  10. /dev/null “黑洞”,所有寫入該設備的信息都將消失。例如:當想要將屏幕上的輸出信息隱藏起來時,只要將輸出信息輸入到 /dev/null 中即可。

  11. /dev/zero

    該設備無窮盡地提供空字元(ASCII NUL, 0x00),可以使用任何你需要的數目。它通常用於向設備或文件寫入字元串0,用於初始化數據存儲。(當然,也可作為輸出流的接受容器)

  12. /dev/lp[0-3]

    並口

  13. /dev/loop[0-7]

    本地迴環設備

  14. /dev/md[0-31]

    軟raid設備

  15. /dev/random、/dev/urandom

    隨機數設備。

  16. /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 可容納許多大型的軟體包和它們的配置文件。下麵列出一些重要的目錄(一些不太重要的目錄被省略了)。

  1. /usr/x11r6 包含 x window 系統的所有可執行程式、配置文件和支持文件,之所以取名為 X11R6 是因為最後的X版本為第11版,且該版的第6次釋出之意。為簡化 x 的開發和安裝,x 的文件沒有集成到系統中。x window 系統是一個功能強大的圖形環境,提供了大量的圖形工具程式。用戶如果對 microsoft windows 或 machintosh 比較熟悉的話,就不會對 xwindow 系統感到束手無策了。

  2. /usr/x386 類似 /usr/x11r6,但是是專門給 x 11 release 5 的。

  3. /usr/bin 集中了幾乎所有用戶命令,是系統的軟體庫。另有些命令在 /bin 或 /usr/local/bin 中。

  4. /usr/sbin 包括了根文件系統不必要的系統管理命令,例如多數服務程式。

  5. /usr/man、/usr/info、/usr/doc 這些目錄包含所有手冊頁、gnu 信息文檔和各種其他文檔文件。每個聯機手冊的“節”都有兩個子目錄。例如:/usr/man/man1 中包含聯機手冊第一節的源碼(沒有格式化的原始文件),/usr/man/cat1 包含第一節已格式化的內容。聯機手冊分為以下九節:內部命令、系統調用、庫函數、設備、文件格式、游戲、巨集軟體包、系統管理和核心程式。

  6. /usr/include 包含了 c 語言的頭文件,這些文件多以 . h 結尾,用來描述 c 語言程式中用到的數據結構、子過程和常量。為了保持一致性,這實際上應該放在 /usr/lib 下,但習慣上一直沿用了這個名字。

  7. /usr/lib lib 是 library 的簡寫。存放的是各應用軟體的動態鏈接庫以及一些不被一般使用者慣用的執行檔或腳本(script)。編程的原始庫也存在 /usr/lib 里。當編譯程式時,程式便會和其中的庫進行連接。也有許多程式把配置文件存入其中。

  8. /usr/local 系統管理員在本機安裝下載的軟體(非 distribution 預設提供者),建議安裝到此目錄, 這樣會比較便於管理。舉例來說,你的 distribution 提供的軟體較舊,你想安裝較新的軟體但又不想移除舊版, 此時你可以將新版軟體安裝於 /usr/local/ 目錄下,可與原先的舊版軟體有分別啦。 你可以自行到 /usr/local 去看看,該目錄下也是具有 bin, etc, include, lib...的次目錄。

  9. /usr/share

    放置共用文件的地方,在這個目錄下放置的數據幾乎是不分硬體架構均可讀取的數據, 因為幾乎都是文本文件。在此目錄下常見的還有這些次目錄:/usr/share/man:聯機幫助文件;/usr/share/doc:軟體雜項的文件說明;/usr/share/zoneinfo:與時區有關的時區文件。

  10. /usr/src

    src 是 source 的縮寫,一般原始碼建議放置到這裡。至於核心原始碼則建議放置到 /usr/src/linux/ 目錄下。

/var 文件系統

/var 包含系統一般運行時要改變的數據。通常這些數據所在的目錄的大小是要經常變化或擴充的。原來 /var 目錄中有些內容是在 /usr 中的,但為了保持 /usr 目錄的相對穩定,就把那些需要經常改變的目錄放到 /var 中了。每個系統是特定的,即不通過網路與其他電腦共用。下麵列出一些重要的目錄(一些不太重要的目錄省略了)。

  1. /var/catman 包括了格式化過的幫助( man )頁。幫助頁的源文件一般存在 /usr/man/man 中;有些 man 頁可能有預格式化的版本,存在 /usr/man/cat 中。而其他的 man 頁在第一次看時都需要格式化,格式化完的版本存在 /var/man 中,這樣其他人再看相同的頁時就無須等待格式化了。( /var/catman 經常被清除,就像清除臨時目錄一樣。)

  2. /var/lib 程式執行的過程中,需要使用到的數據文件放置的目錄。在此目錄下各自的軟體應該要有各自的目錄。 舉例來說,MySQL 的資料庫放置到 /var/lib/mysql/ 而 rpm 的資料庫則放到 /var/lib/rpm 中。

  3. /var/local 存放 /usr/local 中安裝的程式的可變數據(即系統管理員安裝的程式)。註意,如果必要,即使本地安裝的程式也會使用其他 /var 目錄,例如 /var/lock 。

  4. /var/lock 鎖文件。許多程式遵循在 /var/lock 中產生一個鎖定文件的約定,以用來支持他們正在使用某個特定的設備或文件。其他程式註意到這個鎖定文件時,就不會再使用這個設備或文件。

  5. /var/log 各種程式的日誌( log )文件,尤其是 login( /var/log/wtmp log紀錄所有到系統的登錄和註銷) 和 syslog ( /var/log/messages 紀錄存儲所有核心和系統程式信息)。/var/log 里的文件經常不確定地增長,應該定期清除。

  6. /var/run 保存在下一次系統引導前有效的關於系統的信息文件。例如, /var/run/utmp 包含當前登錄的用戶的信息。某些程式或者是服務啟動後,會將他們的PID放置在這個目錄下。

  7. /var/spool 放置“假離線( spool )”程式的目錄,如mail、news、列印隊列和其他隊列工作的目錄。每個不同的 spool 在 /var/spool 下有自己的子目錄,例如,用戶的郵箱就存放在 /var/spool/mail 中。

  8. /var/tmp 比 /tmp 允許更大的或需要存在較長時間的臨時文件。註意系統管理員可能不允許 /var/tmp 有很舊的文件。

  9. /var/cache

    應用程式運行過程中會產生的一些暫存檔。

/proc 文件系統

/proc 文件系統是一個偽文件系統,它並不存在磁碟上,只存在記憶體當中。它以文件系統的方式為訪問系統內核數據的操作提供介面。用戶和應用程式可以通過 proc得到系統的信息,並可以改變內核的某些參數。下麵說明一些最重要的文件和目錄( /proc 文件系統在 proc man 頁中有更詳細的說明)。

  1. /proc/cmdline

    這個文件給出了內核啟動的命令行。它和用於進程的cmdline項非常相似。

  2. /proc/x 關於進程x的信息目錄,這一x是這一進程的標識號。每個進程在/proc 下有一個名為自己進程號的目錄。

  3. /proc/cpuinfo 存放處理器(CPU)的信息,如 cpu 的類型、製造商、型號和性能等。

  4. /proc/meminfo 這個文件給出了記憶體狀態的信息。它顯示出系統中空閑記憶體,已用物理記憶體和交換記憶體的總量。它還顯示出內核使用的共用記憶體和緩衝區總量。這些信息的格式和free命令顯示的結果類似。

  5. /proc/devices 當前運行的核心配置的設備驅動的列表。

  6. /proc/dma 這個文件列出由驅動程式保留的DMA通道和保留它們的驅動程式名稱。

  7. /proc/filesystems 這個文件列出可供使用的文件系統類型,一種類型一行。雖然它們通常是編入內核的文件系統類型,但該文件還可以包含可載入的內核模塊加入的其它文件系統類型。

  8. /proc/interrupts 顯示被占用的中斷信息和占用者的信息,以及被占用的數量。這個文件的每一行都有一個保留的中斷。每行中的域有:中斷號,本行中斷的發生次數,可能帶有一個加號的域(SA_INTERRUPT標誌設置),以及登記 這個中斷的驅動程式的名字。可以在安裝新硬體前,像查看 /proc/dma和/proc/ioports 一樣用 cat 命令手工查看手頭的這個文件。這個文件列出了當前投入使用的資源(但是不包括那些沒有載入驅動程式的硬體所使用的資源)。

  9. /proc/ioports 當前使用的 i/o 埠。這個文件列出了諸如磁碟驅動器,乙太網卡和音效卡設備等多種設備驅動程式登記的許多I/O埠範圍。

  10. /proc/kcore 系統物理記憶體映像。與物理記憶體大小完全一樣,然而實際上沒有占用這麼多記憶體;它僅僅是在程式訪問它時才被創建。(註意:除非你把它拷貝到什麼地方,否則 /proc 下沒有任何東西占用任何磁碟空間。)

  11. /proc/kmsg 這個文件用於檢索用 printk 生成的內核消息。任何時刻只能有一個具有超級用戶許可權的進程可以讀取這個文件。也可以用系統調用syslog檢索這些消息。通常使用工具dmesg或守護進程klogd檢索這些消息。

  12. /proc/ksyms 核心符號表。這個文件列出了已經登記的內核符號;這些符號給出了變數或函數的地址。每行給出一個符號的地址,符號名稱以及登記這個符號的模塊。程式ksyms,insmod和kmod使用這個文件。它還列出了正在運行的任務數,總任務數和最後分配的PID。

  13. /proc/loadavg 這個文件給出以幾個不同的時間間隔計算的系統平均負載,這就如同uptime命令顯示的結果那樣。前三個數字是平均負載。這是通過計算過去1分鐘,5分鐘,15分鐘里運行隊列中的平均任務數得到的。隨後是正在運行的任務數和總任務數。最後是上次使用的進程號。

  14. /proc/modules 存放當前載入了哪些核心模塊信息。

  15. /proc/mounts

    這個文件以 /etc/mtab 文件的格式給出當前系統所安裝的文件系統信息。這個文件也能反映出任何手工安裝從而在 /etc/mtab 文件中沒有包含的文件系統。

  16. /proc/misc

    這個文件報告用內核函數misc_register登記的設備驅動程式。

  17. /proc/net 此目錄下的文件描述或修改了聯網代碼的行為。可以通過使用arp,netstat,route和ipfwadm命令設置或查詢這些特殊文件中的許多文件。

  18. /proc/self 存放到查看 /proc 的程式的進程目錄的符號連接。當2個進程查看 /proc 時,這將會是不同的連接。這主要便於程式得到它自己的進程目錄。

  19. /proc/stat 這個文件包含的信息有 CPU 利用率,磁碟,記憶體頁,記憶體對換,全部中斷,接觸開關以及啟動時間(自1970年1月1日起的秒數)。

  20. /proc/uptime 系統啟動的時間長度。

  21. /proc/version 核心版本

  22. /proc/locks

    這個文件包含在打開的文件上的加鎖信息。文件中的每一行描述了特定文件和文檔上的加鎖信息以及對文件施加的鎖的類型。內核也可以需要時對文件施加強制性鎖。

  23. /proc/pci

    這個文件給出PCI設備的信息。用它可以方便地診斷PCI問題。你可以從這個文件中檢索到的信息包括諸如IDE介面或USB控制器這樣的設備,匯流排,設備和功能編號,設備延遲以及IRQ編號。

  24. /proc/scsi

    此目錄下包含一個列出了所有檢測到的SCSI設備的文件,並且為每種控制器驅動程式提供一個目錄,在這個目錄下又為已安裝的此種控制器的每個實例提供一個子目錄。

  25. /proc/sys

    在此目錄下有許多子目錄。此目錄中的許多項都可以用來調整系統的性能。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這次的疫情帶來的影響真的超乎想象……怎麼疫情和這篇筆記有關呢!到現在還有好多學校都沒有開學,學生們都在家網上學習(這其中包括我的小舅子)。正題來了,他們老師給了一個視頻鏈接(學習視頻)—— 格式是m3u8的。用手機太費眼了,又喜歡打游戲……他想在電腦上看,便問了我一下怎麼播放。我開始給他找了一些線上 ...
  • 面向對象第一次作業周期(前四周)總結 ——對面向對象程式設計的基本認識 0.前言: 接觸面向對象程式設計這門課程已經有四周有餘了,經過四周的網課,直播課,PTA作業題等的練習,我對面向對象程式設計有了自己的理解和興趣。前三次的PTA作業讓我逐漸從面向過程思維逐步轉變為面向對象思維,作業由自己獨立思考 ...
  • 圖解Java設計模式之策略模式 編寫鴨子項目,具體要求如下 : 傳統方案解決鴨子問題的分析和代碼實現 傳統方式解決鴨子問題分析和解決方案 策略模式基本介紹 策略模式的原理類圖 策略模式解決鴨子問題 策略模式在JDK - Arrays 應用的源碼分析 策略模式的註意實現和細節 編寫鴨子項目,具體要求如 ...
  • 圖解Java設計模式之狀態模式 APP抽象活動問題 狀態模式基本介紹 狀態模式的原理類圖 狀態模式解決APP抽獎問題 狀態模式的註意事項和細節 APP抽象活動問題 請編寫程式完成APP抽象活動,具體要求如下 :1)加入每參加一個這個活動要扣除用戶50積分,中獎概率是10%。2)獎品數量固定,抽完就不 ...
  • 將文本正確轉換為 DateTime 需要執行三個子任務:1、正確格式的日期和時間字元串。2、區域性,不同地區的日期和時間表示格式有區別,字元串格式有區別。3、指定轉換格式,例如轉換後的DateTime,可能沒有時間部分。 使用Parse轉換和TryParse轉換: string dateInput ...
  • 腳本編程(一) 啰里啰唆:每周的最後一天都特別難受。墨跡扣不出文章。 一、概況 註釋是以#開都的,#開頭不一定都是註釋 SHELL是解釋型語言 SHELL腳本第一句以#!/bin/bash開頭 SHELL腳本需要具有執行許可權 一般以.sh結尾 別名在腳本中無效。在腳本中不能使用別名。 bash使用技 ...
  • 疫情在家有些閑,發現自己的簡歷有1年半沒更新過了,上一次面試還是1年半以前。想看看外面的行情也順便摸一下自己的底,把自己的方向理清晰一些,就更新了自己的簡歷,公開出去了。公開的第二天收到了一些面試推薦。雖然在家,但是白天還是在遠程辦公,所以也沒有面試很多,選了其中兩家。一個是阿裡CBU技術部-C2M ...
  • 有換入就應該有換出 1. get_free_page ? 2. FIFO頁面置換 D換A不合適,因為接下來A也要進行使用,所以應該換最近用不到的C合適 3. MIN頁面置換 4. LRU頁面置換 5. LRU的準確實現,用時間戳 A是第一個時刻使用,B是第二個時刻使用,C是第三個時刻使用,然後又是A ...
一周排行
    -Advertisement-
    Play Games
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...