如何理解Linux一切皆是文件?這當中又有哪些值得後人借鑒的思想?


首先通常在windows中是文件的東西, 它們在linux中也是文件

其次一些在windows中不是文件的東西, 比如進程, 磁碟, 也被抽象成了文件. 你可以使用訪問文件的方法訪問它們獲得信息.

再其次,一些很離譜的東西, 比如管道, 比如/dev/zero(一個可以讀出無限個0的文件) /dev/null(一個重定向進去之後就消失了的文件). 它們也是文件

再再其次, 類似於socket這樣的東西, 使用的介面跟文件介面也是一致的.

帶來的好處就是, 你可以使用同一套api(read, write)和工具(cat , 重定向, 管道)來處理unix中大多數的資源.

順帶提及, 一切皆文件跟一切資源皆字元串我想是息息相關的.

這就使得組合了簡單的命令和字元處理工具(awk, sed)之後, shell腳本就能發揮出強大的功能.

可以讀一讀unix haters handbook


設計一個系統的終極目標往往就是要找到原子操作,一旦鎖定了原子操作,設計工作就會變得簡單而有序。「文件」作為一個抽象概念,其原子操作非常簡單,只有讀和寫,這無疑是一個非常好的模型。通過這個模型,API的設計可以化繁為簡,用戶可以使用通用的方式去訪問任何資源,自有相應的中間件做好對底層的適配。

我做過的一個項目亦是基於這個思想~將所有的操作原子化為讀和寫,這篇Demo Paper發表在了2014年SIGCOMM上。

AI3: application-independent information infrastructure 鏈接:http://dl.acm.org/citation.cfm?id=2631424


這個問題簡直就是一個哲學問題,當然整個Linux的設計都是充滿了哲學思考的。

「文件」本質就是一種抽象,一般是指對數據的一種抽象。同時,「文件」也表示數據的存儲組織形式。(資料庫就是另一種數據存儲組織形式)。

Linux下的「文件」對傳統意義上的文件進行了擴展,不僅僅是對數據的抽象,而是對許多資源的抽象,包括傳統文件,設備,套子節等等。這樣的設計給應用程序一個統一的訪問資源的方式,而且實現了一套統一的許可權管理方式。為什麼這麼好,不這樣會有什麼問題,這個就不是我能回答的了


懶得貼了。

給個簡單粗暴的解釋:rm -rf /dev。


Linux把主機和眾多外圍設備之間的交互抽象成一致的對文件的操作,甚至連網路上面遠不同於一般I/O的底層實現都不惜在上層封裝成文件的樣式展示給我們,為的就是實現統一,化繁為簡。這樣,我們再對它們進行管理或者在此基礎上執行更高層次的操作,就會變得容易簡單多了。


狹義上的文件,廣義上的文件,這一切都是VFS機制的實現


如果說Linux一切皆是文件是錯的,怎麼理解,有什麼反例沒?


Simple


推薦閱讀:

為什麼微內核系統在PC不如宏內核普及?
platform driver 是作為一個怎樣的概念出現的?
如何製造一個內核態的軟鎖死?
如何正確開發 linux bsp?
linux mmap匿名映射的作用是什麼?

TAG:軟體開發 | 操作系統 | Linux | 軟體工程 | Linux內核 |