- 完美應用RHEL 8
- 何曉龍編著
- 4312字
- 2024-01-22 19:27:15
3.1 掌握RHEL文件系統
3.1.1 RHEL文件層次結構
從RHEL使用者的角度來看,RHEL的文件系統只是一個樹形層次組織結構的目錄文件。RHEL就是根據這棵樹來管理和組織服務器系統的軟硬件資源的,因為RHEL中一切皆文件,無論是軟件還是硬件,最終都會被抽象為文件,這一點和Windows系統存在很大不同,文件系統在Windows中就是一個存儲。至于文件系統的起點,將根據用戶身份的不同而不同,如超級用戶root的家目錄是root,而普通用戶的家目錄是/home目錄下和用戶名相同的目錄。所有的目錄無論其類型如何,歸根到底都是要直接、間接、自動、手動地掛載到根目錄/之上的,這與大樹的層級結構類似,大樹層級結構是根—干—枝—葉,無論如何組織,最終—干—枝—葉都要連接到根,這就比較容易理解UNIX/Linux化繁為簡的系統管理思路了,所以根目錄/相當于整個目錄文件樹的根,RHEL目錄文件的層次組織結構如圖3-1所示。

圖3-1 RHEL目錄文件的層次組織結構
子目錄是整個目錄文件樹形層次組織結構中的一個中間節點,是比當前目錄層次低一級的目錄。文件是整個目錄樹形層次組織結構中的一個葉子節點。如果/etc目錄是當前目錄,那么所有位于/etc下面的目錄及其子目錄都是當前目錄的子樹,如network和NetworkManager就是/etc下的子樹。除非明確指定了目錄路徑,大多數Linux系統命令均把文件參數看作當前目錄中的文件。
在文件系統中,若干文件可以組成一個目錄,而若干不同的目錄可以構成一個目錄的層次組織結構,那么位于目錄層次結構頂端的就是一個稱為根目錄的特殊目錄。根目錄包含了各種系統目錄和文件,如/bin、/boot、/dev、/etc、/home、/lib、/proc、/sbin、/tmp、/usr及/var等,更多權威信息請訪問維基百科。
RHEL文件系統的設計目的是把文件有序地組織在一起,提供一個從邏輯上組織文件的文件系統。除了文件的組織,文件安全也是文件系統的設計要點,所以文件的訪問權限就是文件系統的一個不可或缺的關鍵組成部分。
3.1.2 深入RHEL文件系統
RHEL文件系統的目錄和文件的組織結構是按一定邏輯功能劃分,并遵循LSB的HFS標準組織在一起的,這種結構有助于RHEL系統的管理和維護,并且便于用戶訪問和使用。下面介紹RHEL文件系統的重要目錄(不是全部),具體如下。
1.根目錄
根目錄是整個文集系統的邏輯終點,用/表示。
2.一級目錄
● /bin:RHEL 8中的/bin目錄只是/usr/bin目錄的一個鏈接文件,包含用戶高頻使用的各種程序,如bash、dd、df、gzip、grep、mv和mkdir等。
● /boot:包含系統引導程序GRUB及其配置文件、Linux內核文件vmlinuz和磁盤內存映像文件initrd.img等。
● /dev:包含系統支持的所有設備文件,具體來說,console表示系統控制臺,lp0表示打印機,mem表示系統的物理內存,sda表示連接到主控制器上第一個磁盤,sda1和sda2分別表示其中的第一個和第二個磁盤分區,ttyXX表示系統的串口設備,等等。
● /etc:包含系統管理和維護方面的所有配置文件,如host.conf、resolv.conf、sysctl.conf和syslog.conf等。此外,還有大量的配置文件分別位于單獨的子目錄中。需要注意的是,應定期使用Backups工具備份這個目錄中的重要配置文件,以便需要時能夠快速地恢復系統。
● /home:包含所有普通用戶的家目錄,每增加一個新用戶,系統將會在/home目錄中創建一個和用戶名相同的子目錄作為該用戶的家目錄。
● /lib:RHEL 8中為指向/usr/lib的符號鏈接,只包括內核模塊和各種動態鏈接共享庫文件(擴展名為.so,類似Windows系統中的.dll文件)。
● /lib64:RHEL 8中為指向/usr/lib64的符號鏈接,與/usr/lib類似,主要是64位的模塊和動態鏈接庫。
● /lost+found:每個文件系統分區都存在一個lost+found目錄,用于存儲fsck命令在檢測與修復文件系統時刪除的文件或目錄。
● /media:包含移動存儲介質(移動硬盤或U盤)的掛載點,如當插入U盤時,系統會自動將U盤掛載到此目錄下的某個子目錄中。
● /mnt:包含所有自定義文件系統的掛載點,可以掛載任何文件系統,如NFS或CIFS網絡文件系統。
● /opt:應用程序等附加軟件的安裝目錄,類似Windows系統中的Program Files目錄。
● /proc:虛擬文件系統,系統關閉時為空目錄,系統運行時為進程文件系統根目錄,其中的部分文件分別對應當前正在運行的進程,可用于訪問當前進程的地址空間。
● /root:超級用戶root的主目錄。
● /sbin:RHEL 8中為指向/usr/sbin的符號鏈接,包含超級管理員的常用工具,如管理和維護,系統引導和修復命令集合。
● /srv:分擔/var目錄的一些功能,保存一些網絡服務所用的數據文件。
● /sys:和proc一樣是虛擬目錄,系統各種設備配置信息的根目錄,如block子目錄中含有磁盤及磁盤分區的配置信息。
● /tmp:臨時文件目錄,用于存儲系統運行過程中生成的臨時文件,也可以供用戶存儲自己的臨時文件。需要注意的是,只有文件的創建者才能刪除相應文件。
● /usr:此目錄既可以作為根目錄下的一個子目錄,其中保存系統提供的各種共享數據(如用戶命令、庫函數、頭文件和文檔等),又可以作為一個單獨的文件系統,可以認為是對根目錄的一個遞歸目錄,使得文件系統具有更大的靈活性。
● /var:該目錄與/usr目錄類似,首先是根目錄下的一個子目錄,也可作為一個單獨的文件系統,用于存儲各種可變長的數據文件(如日志文件)、暫存文件或待處理的臨時文件等。
3.重要的二級目錄
● /boot/grub2:該目錄中保存的是GRUB 2的所有字體,配置等文件。
● /etc/yum.repos.d:該目錄中保存軟件倉庫配置文件,定義軟件倉庫的地址,描述等內容的repo文件。
● /etc/cron.d:用于存儲cron進程調度運行后臺所用的配置和計劃任務文件。
● /etc/sysconfig:用于保存系統中的各類重要配置文件,尤其是與網絡相關的配置文件。
● /usr/bin:其中包含用戶經常使用的各種命令,符號鏈接/bin目錄指向真正的/usr/bin目錄。
● /usr/include:用于存儲各種C語言頭文件。這個目錄及其子目錄中的頭文件是C開發人員需要經常引用的文件。其中,sys、linux和bits等子目錄中定義的數據結構,對于深入學習、理解和掌握Linux系統具有極大的參考價值。
● /usr/lib:根目錄下lib實際指向的目錄,其中包含各種共享的庫函數,以及可供程序員以靜態或動態方式鏈接自己開發的應用程序。
● /usr/lib64:根目錄下/lib64實際指向的目錄,其中包含各種共享的庫函數,以及可供程序員以靜態或動態方式鏈接自己開發的應用程序。
● /usr/sbin:包含系統引導完成之后系統管理員經常使用的各種系統管理和維護命令。
● /usr/share:共享目錄,其中含有man(聯機文檔的根目錄)、info(GNU info文檔的根目錄)、doc(各種軟件包特定的文檔)、locale(語言環境)、vim(用戶指南)及zoneinfo(時區定義)等子目錄。
● /usr/src:用于存放Linux系統內核的源代碼和文檔等。
● /usr/local/src:用于保存需要編譯安裝軟件的源代碼目錄。
● /var/lib:保存軟件包特定的動態鏈接共享庫、配置文件、數據文件和狀態信息等,如systemd、rpm等。
● /var/log:系統守護進程日志文件的存儲目錄,其中包括lastlog(每個用戶最后一次注冊的時間記錄)、messages(由syslogd記錄的所有內核和系統程序的日志消息)及wtmp(所有用戶的系統注冊/注銷記錄)等重要文件。位于/var/log目錄中的文件會不斷地增長,因而要求定期地備份或清除。通常,Linux系統均采用以日、周或月為時間周期,定時例行檢查,以循環截取(如使用/usr/sbin/logrotate一類的程序)的方式,刪除過時的數據,保留一定時間范圍內的最新數據,使文件的大小保持一個適中的規模。在RHEL Linux系統中,每日將會定時執行一次logrotate程序,檢查并處理系統日志文件。
● /var/lock:用于保存各種服務進程或應用程序訪問特定的設備或文件時設置的封鎖文件。
● /var/run:系統運行信息文件的根目錄,其中的各種.pid文件存有相應守護過程的PID,另外一個最典型的文件是/var/run/utmp,其中含有當前系統中的用戶注冊信息。
● /var/spool:用于緩存各種等待處理的文件,如打印任務等。通常,每類待處理的緩存文件均位于各自的子目錄中,如/var/spool/cups等。
● /var/tmp:用于保存各種臨時文件。
3.1.3 絕對路徑和相對路徑
文件系統是個層級系統,所以要訪問層級系統有兩個起點:一是每次都從根目錄開始算起,稱為絕對路徑,其特點是路徑名以斜線開始;二是從當前目錄開始算起,稱為相對路徑,其特點是以目錄名而非斜線開始。絕對路徑名指定了文件在文件系統的層級結構中從根目錄開始的存儲位置,而相對路徑名則是以當前目錄為起始字符的所有路徑名,指定了文件在文件系統中相對于當前工作目錄的存儲位置。
細心的讀者會注意到每個目錄都存在的兩個特殊目錄,它們是包含以句點“.”和雙句點“..”命名的兩個特殊的目錄文件,分別表示當前目錄及其父目錄。這兩個特殊目錄把文件系統中的各級目錄有機地連接在一起。此外,還可以活學活用,以此類推,可以用“../..”表示上一級目錄的上一級目錄,“../../..”表示上一級目錄的上一級目錄的上一級目錄。
下面幾個簡單的規則適用于所有的路徑名。
Tip:特殊目錄名稱
~:表示家目錄。
-:表示切換到當前目錄之前的目錄。
在RHEL系統中,文件是由一系列連續的字節流組成的,最后以一個EOF字符結束。但從物理實現來講,文件實際上是由磁盤(或其他存儲介質)上的一系列數據塊組成的,且組成文件的數據塊并不一定是連續的。如果文件是一個ELF的可執行文件,且具有執行權限,它執行后就會出現在內存中,以進程的形式在內存中運作。
RHEL系統并不像Windows系統那樣以擴展名區分文件的類型,因此單從文件名來看,大部分文件都無從知道其類型。RHEL系統雖然沒有對文件的命名規則,但有約定俗成的命名習慣。例如,以“.c”作為C源程序文件名的后綴,以“.sh”作為Shell腳本文件名的后綴。
在RHEL文件系統中存在多種類型的文件,如最流行的Ext3/Ext4文件系統,一般都支持5種不同類型的常規文件,即普通文件、目錄文件、鏈接文件、設備文件、符號鏈接文件(管道文件和套接字文件不在本章討論之列)。
1.普通文件
普通文件是一組信息的基本存儲單位。通常,每個文件都有一個名稱,通過名稱可以對文件的數據內容進行處理。在Ext3/Ext4等文件系統中,文件名可以長達255個字符。
普通文件可以保存任何數據,內容既可以是ASCII文本、源代碼、Shell腳本及各種文檔等,也可以是二進制程序代碼。
2.目錄文件
在RHEL系統中,目錄也是一種文件,而且是一種特殊類型的文件,其中存儲的是一系列文件名及其信息節點號。除了存儲的內容不同,目錄還用于提供文件名、信息節點與文件數據之間的關聯關系。
實際上,目錄文件是由一系列目錄項組成的,每個目錄項由兩個不同的字段組成:一個字段為信息節點號,用于引用信息節點;另一個字段為文件的名稱。
3.鏈接文件
鏈接文件類似Windows系統的快捷方式,即把同一數據或程序賦予不同的文件名,這種類型的文件在RHEL中被稱為鏈接文件,鏈接文件又分為硬鏈接文件和軟鏈接文件兩大類。硬鏈接實質上不增加存儲空間,既不占用新的inode的復制,也不跨越文件系統;軟鏈接能跨越不同的物理文件系統建立鏈接文件,鏈接文件用字母l表示。
4.設備文件
設備文件可能是最特殊的文件之一,初學者難以理解,其實只把它當成一個可打開、能讀寫的文件就好,設備文件的發明令用戶能夠和讀寫普通文件一樣訪問外部設備,而不必涉及各種I/O設備的具體操作細節,每個設備文件均對應一個I/O設備,由I/O設備驅動程序實現用戶與設備之間的數據通信。常用的設備文件類型有兩種:一種是字符特殊文件,用字母c表示;另一種是塊特殊文件,用字母b表示。
這么多的文件類型該如何確定呢?RHEL提供了file命令,下面來看一下該命令的執行結果。

- 電腦組裝與系統安裝
- Kali Linux滲透測試全流程詳解
- 蘋果電腦玩全攻略 OS X 10.8 Mountain Lion
- Instant Handlebars.js
- Linux網絡內核分析與開發
- Linux自動化運維:Shell與Ansible(微課版)
- 蘋果OS X Mavericks 10.9應用大全
- Linux服務器配置與管理
- Advanced Infrastructure Penetration Testing
- Ubuntu Linux操作系統實用教程
- 嵌入式微系統
- Docker容器技術與應用
- Windows 8完全自學手冊
- Getting Started with Raspberry Pi Zero
- Mastering Spring Cloud