CentOS6.x文件系統和目錄結構詳解


  Linux系統以文件形式對計算機中的數據和硬件資源進行管理,也就是徹底的一切皆文件,反映在Linux的文件類型上就是:普通文件、目錄文件(文件夾)、設備文件、鏈接文件、管道文件、套接字文件(數據通信接口)等等。而這些種類繁多的文件被Linux使用目錄樹進行管理,所謂的目錄樹就是以根目錄(/)為主,向下呈現分枝狀的一種文件結構。不同於純粹的ext2之類的文件系統,可以稱之為文件體系,一切皆文件和文件目錄樹的資源管理方式一起構成了Linux的文件系統,讓Linux操作系統可以方便使用系統資源。

一、文件系統概述

1、Linux文件系統模型

  由上而下主要分為用戶層、VFS層、文件系統層、緩沖層、塊設備層、磁盤驅動層、磁盤物理層。

2、文件I/O與標准I/O

  文件I/O又被稱為不帶緩沖的I/O,“不帶緩沖”是指每個讀寫操作都調用系統內核的一個系統調用。文件I/O和標准I/O的區別在於:

    標准I/O采用緩沖機制,打開文件的同時,在內存中建立一個緩沖區;而文件I/O一般不會建立緩沖區,需要手動創建;

    標准I/O針對的是控制台、打印輸出到屏幕等;文件I/O主要是對文件操作、讀寫硬盤等;

    標准I/O是跨平台的,而文件I/O只適用於Uinx/Linux平台。

3、文件描述符

  對內核而言,所打開的文件都是通過文件描述符引用的,當打開一個現有文件或者創建一個新文件時,內核向進程返回一個文件描述符,該文件描述符對文件進行讀寫操作。

  通過將文件描述符0與標准輸入相關聯,將文件描述符1與標准輸出相關聯,將文件描述符2與標准錯誤相關聯(STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO)。

4、緩沖機制

  基於流的操作最終都會一系統調用的形式進行I/O操作,,為了通過程序的運行效率,針對流通常會提供緩沖區,以減少系統調用的次數。

  全緩沖:直到緩沖區被填滿,才調用系統IO函數;

  行緩沖:直到遇到轉義字符-換行符“\n”,才會調用系統IO函數;

  無緩沖:沒有緩沖區,數據立即讀入或者輸出到外存文件或設備上。

二、文件類型

  Linux系統的大多數文件時普通文件或者目錄,也包括另外一些文件類型。文件類型包括如下幾種:

1、普通文件(-)

  從linux 的角度來說,類似mp4、pdf、HTML這樣應用層面上的文件類型都屬於普通文件;

  Linux用戶可以根據訪問權限對普通文件進行查看,更改和刪除。

2、目錄文件(d,ditectory file)

  目錄文件對於用慣Windows的用戶來說不太容易理解,目錄也是文件的一種;

  目錄文件包括了各自目錄下的文件名和指向這些文件的指針,打開目錄事實上就是打開目錄文件,只要有訪問權限,你就可以隨意訪問這些目錄下的文件(普通文件的執行權限就是目錄文件的訪問權限),但是只有一內核的進程可以修改它們。

  雖然不能修改,但是我們可以通過vi/vim目錄文件的內容。

3、塊設備文件(b,block)和字符設備文件(c,char)

  這些文件一般隱藏在/dev目錄下,在進行設備讀取和外設交互時會被使用到;

  比如磁盤光驅就是塊設備文件,串口設備則屬於字符設備文件;

  系統中的所有設備要么是塊設備文件,要么是字符設備文件,無一例外。

4、符號鏈接(l,symbolic link)

  這種類型的文件類型類似Windows中的快捷方式,是指向另一個文件的間接指針,也就是我們常說的軟連接。

5、FIFO(p,pipe)

  管道文件主要用於進程間通信。比如使用mkfifo命令可以創建一個FIFO文件,啟動一個進程A從FIFO文件里讀數據、啟動進程B往FIFO里寫數據,先進先出,隨寫隨讀。

6、套接字(s,socket)

  用於進程間的網絡通信,也可以用於本機之間的非網絡通信;

  這些文件一般隱藏在/var/run目錄下,證明着相關進程的存在。

三、目錄結構

  /(root文件系統):root文件系統是文件系統的頂級目錄(根目錄)。它必須包含在掛載其他文件系統前需要用來啟動Linux系統的全部文件。它必須包含需要用來啟動剩余文件系統的全部可執行文件和庫。文件系統啟動以后,所有的文件系統作為root文件系統的子目錄掛載到標准的、預定義好的掛載點。一般根目錄只存放目錄,不存放文件。

  /bin: /usr/bin: 存放可執行文件,如常用的命令ls,tar,mv,cat等。

  /boot:放置Linux系統啟動時用到的一些文件。/boot/vmlinuz為Linux的內核文件,以及/boot/gurb 。

  /dev: 存放Liunx系統下的設備文件,訪問該目錄下某個文件,相當於訪問某個設備,常用的掛載光驅mount /dev/cdrom /mnt/ .

  /etc: 系統配置文件存放的目錄,不建議在此目錄下存放可執行文件,重要的配置文件有/etc/initab , /etc/init.d , /etc/X11 , /etc/sysconfig , /etc/xinetd.d 修改配置文件之前記得備份。注:/etc/X11 存放與 X、Windows有關的配置。

    /etc/rc   or /etc/rc.d   or /etc/rc*.d    

      啟動、或改變運行級時運行的scripts或scripts的目錄.
              /etc/passwd  
            用戶數據庫,其中的域給出了用戶名、真實姓名、家目錄、加密的口令和用戶的其他信息. 
    /etc/fstab  
      啟動時mount -a命令(在/etc/rc 或等效的啟動文件中)自動mount的文件系統列表. Linux下,也包括用swapon -a啟用的swap區的信息.
    /etc/group   
      類似/etc/passwd ,但說明的不是用戶而是組. 
    /etc/inittab  
      init 的配置文件. 
    /etc/issue  
      getty 在登錄提示符前的輸出信息.通常包括系統的一段短說明或歡迎信息.內容由系統管理員確定. 
    /etc/motd  
      Message Of The Day,成功登錄后自動輸出.內容由系統管理員確定.經常用於通告信息,如計划關機時間的警告. 
    /etc/mtab  
      當前安裝的文件系統列表.由scripts初始化,並由mount 命令自動更新.需要一個當前安裝的文件系統的列表時使用,例如df 命令. 
    /etc/shadow  
      在安裝了影子口令軟件的系統上的影子口令文件.影子口令文件將/etc/passwd 文件中的加密口令移動到/etc/shadow 中,而后者只對root可讀.這使破譯口令更困難. 
    /etc/login.defs  
      login 命令的配置文件. 
    /etc/printcap  
      類似/etc/termcap ,但針對打印機.語法不同. 
    /etc/profile , /etc/csh.login , /etc/csh.cshrc  
      錄或啟動時Bourne或C shells執行的文件.這允許系統管理員為所有用戶建立全局缺省環境. 
    /etc/securetty  
      確認安全終端,即哪個終端允許root登錄.一般只列出虛擬控制台,這樣就不可能(至少很困難)通過modem或網絡闖入系統並得到超級用戶特權. 
    /etc/shells  
      列出可信任的shell.chsh 命令允許用戶在本文件指定范圍內改變登錄shell.提供一台機器FTP服務的服務進程ftpd 檢查用戶shell是否列在 /etc/shells 文件中,如果不是將不允許該用戶登錄. 
    /etc/sysconfig 
      網絡配置相關目錄

  /home: 系統默認的用戶家目錄,新增用戶賬號時,用戶的家目錄都存在此目錄下,~表示當前用戶的家目錄,~test表示用戶test的家目錄。建議單獨分區,並設置較大的磁盤空間,方便用戶存放數據。

  /lib:/usr/lib:/usr/local/lib:系統使用的函數庫目錄,程序在執行過程中,需要調用一些額外的參數時需要函數庫的協助,比較重要的是/lib/modules 。

  /lost+found: 系統異常產生錯誤時,會將一些遺失的片段放置於此目錄下,如加載disk中,此目錄下就會自動產生目錄 /disk/lost+found 。

  /mnt:/media: 光盤默認掛載點,通常掛盤掛載於/mnt/cdrom下,也不一定,可以選擇任意位置進行掛載。

  /opt; 給主機額外安裝軟件所存放的目錄。

  /proc: 此目錄的數據都在內存中,如系統核心,外部設備、網絡狀態,由於數據都存在內存中,所以不占用磁盤,比較重要的目錄。

  /root :系統管理員root的家目錄,系統第一個啟動的分區 / ,所以最好將/root和 / 放在一個分區下。

  /sbin: /usr/sbin/: /usr/local/sbin : 放置系統管理員使用的可執行命令,如disk,shutdown,mount.與/bin 不同的是,這里面存放的命令是給系統管理員root使用的命令,一般用戶只能使用和設置。

  /tmp :一般用戶或正在執行的程序臨時存放文件的目錄,任何人都可以訪問,重要數據不可放置在此目錄下。

  /srv: 服務啟動之后需要訪問的數據目錄,如www服務器需要訪問的網頁數據存放在/srv/www內。

  /usr: 應用程序存放目錄。/usr/bin 存放應用程序;/usr/share 存放共享數據;/usr/lib存放不能直接運行的,卻是許多程序運行所必需的一些函數庫文件;/usr/local存放軟件升級包;/usr/share/doc系統說明文件存放目錄;/usr/share/man程序說明文件存放目錄。

  /var: 放置系統執行過程中經常變化的文件,如隨時更改的日志文件/var/log,/var/log/message所有登陸文件存放目錄,var/spool/mail郵件存放目錄,/var/run程序或者服務啟動。

    /var/catman  
      當要求格式化時的man頁的cache.man頁的源文件一般存在/usr/man/man* 中;有些man頁可能有預格式化的版本,存在/usr/man/cat* 中.而其他的man頁在第一次看時需要格式化,格式化完的版本存在/var/man 中,這樣其他人再看相同的頁時就無須等待格式化了. (/var/catman 經常被清除,就象清除臨時目錄一樣.)  
    /var/lib  
      系統正常運行時要改變的文件.  
    /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 包含當前登錄的用戶的信息.
    /var/spool  
      mail, news, 打印隊列和其他隊列工作的目錄.每個不同的spool在/var/spool 下有自己的子目錄,例如,用戶的郵箱在/var/spool/mail 中.  
    /var/tmp  

      比/tmp 允許的大或需要存在較長時間的臨時文件. (雖然系統管理員可能不允許/var/tmp 有很舊的文件.) 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM