為什麼 Linux 沒有註冊表?為什麼說註冊表是萬惡之源?
gconf
對@Cosmos Thinker 進行小小的補充
當初Window引入註冊表基於如下考量:
- 統一訪問介面。傳統的Windows ini配置文件和Linux下的文本配置文件的訪問依賴於配置文件結構,有鍵值對形式的,有類似XML之類標記語言的,還有Json等等。註冊表就沒有如此多樣化差異。
- 提高訪問速度。註冊表在硬碟上是以二進位樹形結構存儲,訪問速度上有優勢。
- 保護版權。以前很多商業軟體的驗證信息會隱藏在註冊表中,相比於Linux文本文件配置直白而言,註冊表的二進位存儲方式也在一定程度上增加了破解難度,保護了版權,鼓勵軟體開發者開發更多的Windows軟體。
但是,Windows系統所有系統配置和定製化信息全寄托在註冊表的完整基礎之上。然而註冊表的遷移幾乎是不可能的,所以Windows系統上軟體的遷移十分不便。因此註冊表的優勢相對於劣勢而言實實在是算不上優勢。
-------------
我個人實在很不喜歡註冊表,不能遷移最為可恨。帶來了無數次重裝系統後無數次再重裝軟體的痛苦。系統備份也麻煩的多。Linux下好多了,保留一份/etc 和 /home解決了絕大多數問題。現在不也有dconf了么,然後dconf-service跑滿cpu,阻塞調用,掛住桌面……果然是萬惡之源。
關於分散的文本文件和集中的註冊表兩種軟體配置方式的優劣,目前仍有爭論。主流操作系統中,Linux操作系統一直使用單獨的文本文件來存放配置信息。而Windows平台下基於.NET框架的軟體對註冊表的依賴性也大大減弱。事實上,.NET軟體通常使用純文本的XML(稱為app.config)文檔而不是註冊表進行配置,這在某種意義上是向當初的ini文本配置方式的一種回歸。部分綠色軟體支持者認為,集中式的註冊表要求軟體需要進行專門的安裝步驟才可以正常運行,而單獨的文本配置文檔則可以不需要安裝,只要將軟體的文檔目錄拷貝過來就可以使用;當不再需要軟體的時候,除刪除相關文檔外對於註冊表也需要進行卸載步驟,才有可能不在系統中留下痕迹(很多軟體即使提供了卸載步驟,仍然會留下痕迹),如果使用文本配置文檔,則能做得更乾淨。但是,文本配置方式導致某些系統軟體的配置較為困難且缺乏統一的界面(如Linux中的情況),也是不爭的事實,儘管現在已經有很多軟體可以方便進行系統配置,但仍存在標準不夠統一的問題。 著名開源軟體Fetchmail的作者Eric S. Raymond在《UNIX編程藝術》一書中有如下敘述:
對比terminfo資料庫和Windows註冊表,我們發現註冊表出名地容易受到錯誤代碼的破壞。這可能會使整個系統都無法使用。即使系統沒有癱瘓,但如果破壞本身干擾了專用的註冊表編輯工具,恢復工作就會很困難。
對比terminfo資料庫和Windows註冊表,我們發現註冊表出名地容易受到錯誤代碼的破壞。這可能會使整個系統都無法使用。即使系統沒有癱瘓,但如果破壞本身干擾了專用的註冊表編輯工具,恢復工作就會很困難。 從2000年以來部分惡性病毒如熊貓燒香等的破壞情形看,的確存在「破壞本身干擾註冊表編輯器」的問題。在某些情況下,病毒程序會監視系統進程列表,並強行關閉名為regedit的任何程序。這使得受損用戶難以直接通過編輯註冊表進行恢復。
-----分割線----- 以上內容來自維基百科,wikipedia說得太客氣了。這是什麼的圖標?
昨天不知怎麼搞的突然想到註冊表,看那個註冊表的圖標,突然發現人家是按照空間思考問題的,怪不得人家比我們高效,在人家看來那個樹形的註冊表是一種一層套一層,一個挨一個堆積起來的立方空間結構體,那個表面就是上圖那個「計算機」根節點。我以前理解不了註冊表,昨天突然就一下子明白了,根本無需深入學習就知道它是幹什麼的怎麼乾的以及它是否是良好的,是否會存在下去,突破什麼邊界會是不良好的,怎樣避免突破那個邊界…
這是誰人設計的圖標?又是誰人封鎖的知識?是誰人在阻止我們不讓我們激活右腦?那些人真狹隘!那些說計算機軟體行業不如同建築行業的人是根本不理解計算機軟體!你以為他們理解了,因為他們說像建築,結果他們又反悔了說不像建築,原來你突然發現他們其實根本從來就沒理解計算機軟體行業。
註冊表是直接掛在計算機根節點下的一片森林,雖然.NET開發的應用程序是不需要用註冊表的,之所以不需要用註冊表其實是把「註冊表」放在了應用系統的當地去了,分形到當地的配置目錄樹上去了。
昨天不知道怎麼回事就冒出了註冊表概念,剛才搜索了一下人們好像對windows中的註冊表很有抱怨。註冊表這個詞看來是不能提了。但註冊表應該是個好東西,windows算是一個系統,windows的註冊表如果只供微軟用的話就是個好東西,如果供第三方讀寫的話就不是好東西。許可權引擎的目錄樹應只供許可權引擎自己讀寫,若供第三方讀寫考慮走LDAP協議。
註冊表是個好設計,windows把它的所有軟硬體資源掛在了它的註冊表上,linux雖然沒有註冊表但是它的文件系統幹了註冊表乾的事情。操作系統是一種成熟的系統,我們的業務系統可以借鑒它們的設計也弄一個自己內部使用的「註冊表」把業務系統感知到的資源都掛上去。業務系統看作是操作系統的分形,而操作系統又是計算機硬體體系結構的分形,計算機硬體體系結構又是時空的分形。推薦閱讀:
※Linux Kernel 4.0 中的 live patching 是如何實現的?
※如何用c++監控windows和linux文件夾中文件的變化,有沒有什麼api可以讓系統在保存文件的時候通知程序?
※如何學會使用 Linux 操作系統?
※Arch Linux 怎麼安裝?
※有非常豐富的 Linux/Unix 下工作的經驗指的是什麼?