Linux 下 「一切皆文件」 思想的本質和好處在哪裡?與 Windows 下的文件管理思想有啥差別?

一直聽到說這個思想非常好,但是一直不太能理解。比如和微軟的windows相比差別和好處在哪裡?


就是為了操作的一致性。即使是硬體,也可以利用系統調用進行讀寫操作。

例如輸入以下命令:

cat /dev/urandom &> /dev/dsp

揚聲器裡傳出了噪聲。


好處是幾乎所有讀取(讀文件,讀系統狀態,讀socket,讀PIPE),都可以用read函數來進行。

幾乎所有的更改(寫文件,更改系統參數,寫socket,寫PIPE),都可以用write函數來進行。

是不是很美,哈哈


微軟也實現了「一切皆文件」理念,在Windows下,打開串口就是用CreateFile API函數打開,命名管道也是可以用CreateFile API打開的,並不是Linux獨有的概念。

要說也就是Windows 系統本身就是完全的GUI,而不是基於終端的(CMD不算),用戶很難感受到「一切皆文件」的思想。

題外話,Windows與Linux不同的是,Windows是一個商業軟體注重軟體的兼容性,其系統調用介面非常龐大和混亂(逃。


對windows沒什麼研究(也是懶得花時間研究),說說linux這麼安排的好處吧。

這裡的「文件「,要結合文件的特性來說,文件的特性無非讀,寫,許可權,字元流(易讀)。這樣不管是文件還是硬體資源都擁有同一套管理機制。足夠簡單,體現懶人哲學設計思想。

比如你可以直接 cat /dev/tcp/127.0.0.1/8080 來讀取本機8080埠tcpsock的字元數據,也可以使用重定嚮往裡面寫字元數據,這樣的腳本在驗證某個通信服務是否出現異常很有用。你看訪問系統資源的方式和訪問文件無異。由於對windows缺乏足夠的了解所以很難說linux這樣的安排相比windows有什麼更好之處。但至少讓你不再覺得硬體、軟體、系統資源屬於不同範疇而為自己知識樹的構建帶來額外的複雜度。所以就系統抽象這一層來說linux是英明的。


「一切皆文件」的好處更多的表現在開發者上,好處就是大部分操作可以統一介面,甚至只用open/read/write/ioctl/close就可以完成大部分(甚至全部)操作。

所以,從本質上說「一切皆文件」對於開發者來說更有益,代碼的移植也更為方便。想想看如果一切設備的操作都能統一,那麼對於碼農,甚至一些設備維護人員來說是多麼美好的事情。

好處說完了就開始說缺點:

對於用戶來說,缺點就是這個概念太難以理解了。

對於大多數普通用戶來說,鍵盤是鍵盤,滑鼠是滑鼠,這些設備跟文件的概念相差太遠了,對於普通用戶來說,「我的電腦」、「鍵盤」、「滑鼠」這些概念更直接,如果非要說滑鼠是文件「/dev/input/mouse0」,那麼普通用戶恐怕很難理解。

對開發者友好和對於普通用戶友好其實是兩碼事,要知道這個世界上大部分計算機設備的使用者都不是開發人員。

說點政治不正確的話:不能因為自己是程序員,就認為世界上所有的人都應該是程序員。(利益相關:我自己也是一個程序)

所以一個友好的界面是必要的,對於普通用戶來說封閉一部分操作系統的內部實現也是必要的。大多數安卓用戶不會關心/dev下面有什麼,而只是關心手機怎麼用,怎麼好用。

說完Linux再說Windows:

Windows的內部實現也近似於「一切皆文件」的思想,當然,這一切都只在內核里才有,下載一個WinObj這軟體就可以看到,Windows上各種設備、分區、虛擬對象都是掛載到根「」下的,通過這個樹可以訪問各種設備、驅動、文件系統等等。

因為微軟也是知道「一切皆文件」對於開發者來說很友好:

Windows與Linux不同的就是把這些對象又重新封裝了一層WindowsAPI,對外以設備、盤符、文件等等表現出來,重新封裝WindowsAPI的目的是為了兼容性,而設備、盤符、文件這些是為了讓普通用戶更好理解。

所以「一切皆文件」好處是對開發者方便,但也請注意:不是所有計算機使用者都是一個開發人員。


優點就是:介面一致性(不是嚴格的一致) ,最受益的我覺得就是新增的硬體驅動很方便了。


Windows操作系統也是如此,文件,管道,內核驅動…都可以用CreateFile打開,ReadFile/WrieFile交互…


一切可以讀可以寫

所以你夠厲害,可以做到二次開發,將系統重新寫一個版本出來


推薦閱讀:

如何快速選擇寬度大於長度的圖片?
為什麼讀10MB的TXT文件那麼慢,而打開1G的視頻卻很快?
文件很多很雜,求國產雲同步軟體推薦?
對數量龐大的照片進行分類管理,最好的方便檢索的方法是什麼?
Windows Phone 8.1 的 Files 文件管理功能有什麼用?

TAG:MicrosoftWindows | Linux | Linux系統管理 | 文件管理 |