Linux一切皆檔案(包含好處和弊端)

2020-07-16 10:04:46
Linux 中所有內容都是以檔案的形式儲存和管理的,即一切皆檔案,普通檔案是檔案,目錄(Windows 下稱為資料夾)是檔案,硬體裝置(鍵盤、監視器、硬碟、印表機)是檔案,就連通訊端(socket)、網路通訊等資源也都是檔案。

Linux系統中,檔案具體可分為以下幾種型別:

1) 普通檔案

類似 mp4、pdf、html 這樣,可直接拿來使用的檔案都屬於普通檔案,Linux 使用者根據存取許可權的不同可以對這些檔案進行檢視、刪除以及更改操作。

2) 目錄檔案

對於用慣 Windows 系統的使用者來說,目錄是檔案可能不太好理解。

Linux 系統中,目錄檔案包含了此目錄中各個檔案的檔名以及指向這些檔案的指標,開啟目錄等同於開啟目錄檔案,只要你有許可權,可以隨意存取目錄中的任何檔案。

注意,目錄檔案的存取許可權,同普通檔案的執行許可權,是一個意思。

3) 字元裝置檔案和塊裝置檔案

這些檔案通常隱藏在 /dev/ 目錄下,當進行裝置讀取或外設互動時才會被使用。

例如,磁碟光碟機屬於塊裝置檔案,串列埠裝置則屬於字元裝置檔案。

Linux 系統中的所有裝置,要麼是塊裝置檔案,要麼是字元裝置檔案。

4) 通訊端檔案(socket)

通訊端檔案一般隱藏在 /var/run/ 目錄下,用於進程間的網路通訊。

5) 符號連結檔案(symbolic link)

類似與 Windows 中的快捷方式,是指向另一檔案的簡介指標(也就是軟連結)。

6) 管道檔案(pipe)

主要用於進程間通訊。例如,使用 mkfifo 命令建立一個 FIFO 檔案,與此同時,啟用進程 A 從 FIFO檔案讀資料,啟用進程 B 從 FIFO檔案中寫資料,隨寫隨讀。

“一切皆檔案”的利弊

和 Windows 系統不同,Linux 系統沒有 C 盤、D 盤、E 盤那麼多的碟符,只有一個根目錄(/),所有的檔案(資源)都儲存在以根目錄(/)為樹根的樹形目錄結構中。

這樣做最明顯的好處是,開發者僅需要使用一套 API 和開發工具即可調取 Linux 系統中絕大部分的資源。舉個簡單的例子,Linux 中幾乎所有讀(讀檔案,讀系統狀態,讀 socket,讀 PIPE)的操作都可以用 read 函數來進行;幾乎所有更改(更改檔案,更改系統引數,寫 socket,寫 PIPE)的操作都可以用 write 函數來進行。

不利之處在於,使用任何硬體裝置都必須與根目錄下某一目錄執行掛載操作,否則無法使用。我們知道,本身 Linux 具有一個以根目錄為樹根的檔案目錄結構,每個裝置也同樣如此,它們是相互獨立的。如果我們想通過 Linux 上的根目錄找到裝置檔案的目錄結構,就必須將這兩個檔案系統目錄合二為一,這就是掛載的真正含義。

有關 Linux 掛載的具體知識,後續文章將會詳細介紹。