從心開始的CentOS學習筆記之三:文件和目錄簡介

    Linux使用樹狀的目錄結構組織文件,簡單來說就是在一個目錄中放置子目錄和文件,子目錄中可以繼續放置子目錄和文件,以此類推,形似一棵樹的分支。Linux的這種文件結構的起始點爲“根目錄”,就是“/”,是一切文件的起點。FHS(文件系統層次標準)定義了在根目錄下的主要目錄和每個目錄內應該放置的文件。請注意在Linux中,“文件”是一種很寬泛的概念,一切皆文件。所以不管是目錄還是設備,都是一種文件,或者說,只要是在系統中可以看到的都是文件

    一、文件類型

    用戶可以通過“ls -al 目錄”顯示文件類型。通過ls -al 顯示出來每行每個文件或者目錄信息的第一字符,來判斷文件類型。

    第一字符爲[d],代表是一個目錄。

    第一字符爲[-],代表是一個文件。

    名稱爲 . ,代表當前目錄;爲..,代表當前目錄的上一級目錄(這和Windows相同)

    文件名以.開始,如下圖中的.bash_logout代表是一個隱藏文件或目錄。


    snap022.jpg 


    相比Windows下的文件,Linux的文件類型,除了常規文件(純文本文件、二進制文件、數據文件等)外,還有以下文件:

    輸入命令 ls -al /dev (顯示/dev下的所有文件的詳細信息)

    區塊設備文件:第一個屬性字符爲[b],一般是代表一些存儲設備。如sda代表第一塊SATA或者SCSI硬盤,hda代表第一塊IDE硬盤。

    字符設備文件:第一個屬性字符爲[c],一般是一些串行端口的接口設備,如鼠標鍵盤。

    鏈接文件:第一個屬性字符爲[l]的文件,它又區分爲軟鏈接和硬鏈接。

            

    snap023.jpg

    數據接口文件:第一屬性字符爲[s],這種類型的文件通常被用在網絡上的交換數據。

    (輸入命令 ls -al /run | grep  ^s 

    snap024.jpg

    數據輸送文件(FIFO,pipe):一種特殊的文件類型,主要用來解決多個程序同時讀寫一個文件所造成的錯誤問題,FIFO是先進先出(first in first out)的縮寫,即管道。

    2、文件擴展名

    基本上,Linux沒有所謂擴展名的概念,這一點和Windows有很大差別。在Windows下,.com .exe .bat 通常代表可執行文件,還有.dll等類型文件。但在Linux下,一個文件是否能被執行,它主要由兩方面決定:一是它的內容是否是可執行代碼,二是用戶否具有可執行權限。跟它是否有擴展名、擴展名爲什麼無關。

    當然Linux也通過一些特定的擴展名來區分一些特殊類型的文件,

    *.sh:代表腳本或批處理文件

    *.Z,*.tar *.tar.gz *.zip *.tga:代表經過打包的壓縮文件

    *.html *.php:網頁文件。

    3、文件名的限制

    單一文件或目錄最大容許文件名爲255個字符,英文最大255個字符長度,漢字大約128個之間。

    由於有些特殊字符在命令模式有特殊意義,所以* ? < . ; & ! { } | \ ' '" ` ( ) { } 等字符不能在文件名中存在。

    4、目錄配置依據(FHS)

    由於Linux開源,爲了保證規範,Linux逐漸形成了的軟件開發商、操作系統製作者、以及想要維護系統的使者,都能夠遵循的目標配置依據FHS(文件系統層次化標準).

    事實上,FHS針對目錄樹架構僅定義出三層目錄下面應該放置什麼數據而已,分別是:

     / (root, 根目錄):與開機系統有關;

     根目錄是整個系統最重要的一個目錄,因爲不但所有的目錄都是由根目錄衍生出來的,同時根目錄也與開機/還原/系統修復等動作有關。 由於系統開機時需要特定的開機軟件、核心文件、開機所需程序、函數庫等等文件數據,若系統出現錯誤時,根目錄也必須要包含有能夠修復文件系統的程序才行。 因爲根目錄是這麼的重要,所以在FHS的要求方面,他希望根目錄不要放在非常大的分區內, 因爲越大的分區你會放入越多的數據,如此一來根目錄所在分區就可能會有較多發生錯誤的機會。因此FHS標準建議:根目錄(/)所在分區應該越小越好, 且應用程序所安裝的軟件最好不要與根目錄放在同一個分區內,保持根目錄越小越好。 如此不但性能較佳,根目錄所在的文件系統也較不容易發生問題。

     /usr (unix software resource):與軟件安裝/執行有關;

     /var (variable):與系統運行過程有關。

    根目錄(/)FHS要求必須要存在的目錄

    QQ圖片20200113152632.png

    根目錄(/)FHS建議可以存在的目錄

    /home:是系統默認的使用者主文件夾(home directory)。在用戶新增一個一般使用者帳號時, 默認的使用者主文件夾都會規範到這裏來。比較重要的是,主文件夾有兩種代號喔:~:代表目前這個使用者的主文件夾 ~fromheart :則代表fromheart 的主文件夾。

    /lib<qual>:用來存放與 /lib 不同的格式的二進制函數庫,例如支持 64 位的 /lib64 函數庫等

    /root:系統管理員(root)的主文件夾。之所以放在這裏,是因爲如果進入單用戶維護模式而僅掛載根目錄時,該目錄就能夠擁有root的主文件夾,所以用戶會希望root的主文件夾與根目錄放置在同一個分區中。

    

    /usr/下FHS要求必須要存在的目錄

    /usr/bin/:所有一般用戶能夠使用的指令都放在這裏!目前新的 CentOS 7 已經將全部的使用者指令放置於此,而使用鏈接文件的方式將 /bin 鏈接至此!也就是說, /usr/bin 與 /bin 是一模一樣了!另外,FHS 要求在此目錄下不應該有子目錄。

    /usr/lib/: 基本上,與 /lib 功能相同,所以 /lib 就是鏈接到此目錄中的。

    /usr/local/:系統管理員在本機自行安裝自己下載的軟件(非distribution默認提供者),建議安裝到此目錄, 這樣會比較便於管理。

    /usr/sbin/:非系統正常運行所需要的系統指令。最常見的就是某些網絡服務器軟件的服務指令(daemon),不過基本功能與 /sbin 也差不多, 因此目前 /sbin 就是鏈接到此目錄中的。

    /usr/share/:主要放置只讀架構的數據文件,當然也包括共享文件。在這個目錄下放置的數據幾乎是不分硬件架構均可讀取的數據, 因爲幾乎都是文字文件,在此目錄下常見的還有這些次目錄:/usr/share/man:線上說明文檔;/usr/share/doc:軟件雜項的文件說明 /usr/share/zoneinfo:與時區有關的時區文件

    

    /usr下FHS建議可以存在的目錄

    /usr/games/: 與遊戲比較相關的數據放置處。

    /usr/include/:c/c++等程序語言的文件。

    /usr/libexec/:某些不被一般使用者慣用的可執行文件或腳本(script)等等,都會放置在此目錄中。例如大部分的 X 窗口下面的操作指令, 很多都是放在此目錄下的。

    /usr/lib<qual>/: 與 /lib<qual>/功能相同,因此目前 /lib<qual> 就是鏈接到此目錄中。

    /usr/src/:一般源代碼建議放置到這裏。至於核心源代碼則建議放置到/usr/src/linux/目錄下。


    /var/下FHS要求必須要存在的目錄

    /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放置在這個目錄下。與 /run 相同,這個目錄鏈接到 /run去了!

    /var/spool/:這個目錄通常放置一些隊列數據。

     

    其他重要目錄

     /lost+found:這個目錄是使用標準的ext2/ext3/ext4文件系統格式纔會產生的一個目錄,目的在於當文件系統發生錯誤時, 將一些遺失的片段放置到這個目錄下。不過如果使用的是 xfs 文件系統的話,就不會存在這個目錄了!

    /proc:這個目錄本身是一個“虛擬文件系統(virtual filesystem)”。他放置的數據都是在內存當中, 例如系統核心、行程信息(process)、周邊設備的狀態及網絡狀態等等。因爲這個目錄下的數據都是在內存當中, 所以本身不佔任何硬盤空間啊!比較重要的文件例如:/proc/cpuinfo, /proc/dma,/proc/interrupts, /proc/ioports, /proc/net/* 等等。

    /sys:這個目錄其實跟/proc非常類似,也是一個虛擬的文件系統,主要也是記錄核心與系統硬件信息較相關的信息。 包括目前已載入的核心模塊與核心偵測到的硬件設備信息等等。這個目錄同樣不佔硬盤容量。





     

    





   

            


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章