【李遙的回答(101票)】:
【馮東的回答(27票)】:
@李遙 對注冊表出現(xiàn)的需求解釋的很到位,但是,注冊表最終還是作為二進(jìn)制數(shù)據(jù)庫保留下來,說明了 Windows 和 Unix 對待「performance hack」的不同態(tài)度。Windows 的態(tài)度是:當(dāng)年我需要,后來要兼容,就這樣了。Unix 的態(tài)度就是慢慢從底層優(yōu)化、替代,淘汰舊的機(jī)制,保留策略的可選擇性。
卸載不能完全清除配置信息,是大型軟件固有的問題。Unix 也不能說完全解決。
包依賴是某些 Unix,特別是某些 Linux 發(fā)行版,對冗余的過分潔癖。Redundency is bad, dependency is worse。
【吳宇非的回答(10票)】:
我先假設(shè)題主說的是unix是unix-like包含linux等把。因?yàn)殚]源的unix我實(shí)在是沒用過,也沒有發(fā)言權(quán)。
1. 注冊表和linux系的/etc基本是差不多的作用,都是用來存儲系統(tǒng)及軟件設(shè)置的地方。 至于存些什么, 都是由應(yīng)用軟件自己決定的。 區(qū)別就是,一個是數(shù)據(jù)庫, 一個是目錄樹。實(shí)質(zhì)上并沒有什么不同。 這是設(shè)計決策的問題。 linux偏愛文件系統(tǒng), 所以就用了文件系統(tǒng)而已。題主所說的卸載不干凈并不是注冊表帶來的問題, 而是各種軟件的installer腳本寫得不夠好的問題。 在linux下安裝和卸載蹩腳的軟件, 同樣也會有殘留。
2.包依賴的問題這在各個平臺下都有。 只不過誰做的早,誰做的晚。windows的manifest也是為了這個解決這個問題而生的。 xp之前就是一團(tuán)漿糊。
windows因?yàn)槭谴蠖?,由一家開發(fā),發(fā)行周期長,更新慢,內(nèi)容多,也不需要管理include和src,所以系統(tǒng)本身提供的類庫依賴性天生就不需要用戶擔(dān)心(第三方類庫依然是漿糊)
而linux系是由無數(shù)多的個人和小團(tuán)體開發(fā),慢慢被修改完善的,每個工具和庫都有無數(shù)的版本, 也都有自己以來的不同版本的包,再加上需要管理include和src,顯得比較混亂。但事實(shí)上,并沒有哪個Linux軟件會因?yàn)榘姹締栴}而跑不起來。也就是說, 都是可以解決的。所以我認(rèn)為, linux系的包管理已經(jīng)足夠好了。對初級用戶來說,可以自動的在repo中解決大部分的依賴問題. 這一點(diǎn), windows顯然是做不到的把?
【胡江的回答(6票)】:
Windows多用戶系統(tǒng)及使用時,注冊表使得各用戶配置能相對獨(dú)立,同時共用運(yùn)行資源變得簡單。
而Linux編譯或安裝文件時,運(yùn)行、配置文件就像老母雞下蛋一樣,扔得到處都是。
【樸三世的回答(2票)】:
Windows是選擇了用注冊表,而不是它注定要用注冊表。
Unix有自己的哲學(xué),TA希望數(shù)據(jù)文件都是文本化的,這樣程序間才可以互操作,而不用費(fèi)力去解析二進(jìn)制文件。比如說搜索Unix內(nèi)某用戶的信息,可以用任何一種編輯器,vim,sed,emacs,甚至grep,cat,less等等。要查看某進(jìn)程的堆棧,同樣是用這些工具。
但是用Windows的注冊表的話,一般你只能使用
【注冊表編輯器】或
【用戶】等專用的程序來察看。
當(dāng)然,注冊表有自己的優(yōu)點(diǎn),我可以理解的優(yōu)點(diǎn)就是速度快。因?yàn)槭嵌M(jìn)制嘛~
包依賴可以理解為,額,.net里的dll?你寫.net程序時會注意到這個的。
但是Unix里的包不僅僅是鏈接庫,是bin,lib,include,doc等等的打包。
【知乎用戶的回答(0票)】:
win,因?yàn)楫?dāng)初win的幾乎每個配置都要應(yīng)用自己去檢索和修改內(nèi)容,這就需要每個應(yīng)用都要自己實(shí)現(xiàn)讀寫配置的代碼;且在win軟件大量增加以后,各應(yīng)用間共享配置的要求日益增多,所以就有了注冊表。
unix有/etc目錄樹,因?yàn)?nix系列,有shell腳本,有n個工具,n*m個方法來檢索和修改/etc中配置中的文本,所以一般沒必要自己實(shí)現(xiàn)代碼做這個,各應(yīng)用配置內(nèi)容格式雖然五花八門可存儲格式一般都是txt。
不過linux的gnome就早已有了類似注冊表的東西……
【海濤的回答(0票)】:
注冊表,是微軟的做法:把所有配置都存在一個地方(樹形數(shù)據(jù)庫);
*nix的做法是:每個應(yīng)用自己有一套小的配置文件。
各有優(yōu)劣:
前者統(tǒng)一存儲,找起來方便,不容易遺漏,但是壞了后果嚴(yán)重(危及整個系統(tǒng)),想復(fù)制一個應(yīng)用的配置,比較麻煩(有些應(yīng)用的配置不僅僅是在一個分支里的);
后者各自配置,分散、凌亂,但壞了只影響自己(一個應(yīng)用),復(fù)制一個應(yīng)用的配置比較方便。
總的來說,還是*nix的做法更好一些。
因?yàn)閭浞菟信渲玫臋C(jī)會不多,恢復(fù)到別的電腦,意義不大。
復(fù)制個別應(yīng)用的配置到另一臺電腦的機(jī)會比較多。
win下的應(yīng)用,直接使用配置文件也可以的,注冊表出現(xiàn)前,就是都使用ini的。
我寫的win下的應(yīng)用,也是都使用ini的,盡量不注冊表(除非是需要操作系統(tǒng)自動做什么)
這樣的程序才綠色(即拷即用,即刪即清)
【vczh的回答(18票)】:
注冊表跟普通文件最大的區(qū)別就是,他是transactional的,就算你硬盤寫了一半斷電了,注冊表本身的格式也不會被破壞。你自己把配置維護(hù)在自己的文件里面,一不小心寫掛了,就完了吧,你真的回去這么認(rèn)真的做災(zāi)難恢復(fù)嘛,顯然是不會的。
至于為什么注冊表顯得有點(diǎn)不好,這完全是因?yàn)閣indows自帶了regedit,要是從一開始你就只能用api訪問,那也沒那么多菜鳥會去亂動然后怪windows的注冊表了。
【滕金光的回答(1票)】:
Unix的一切都是文件。
【王鵬飛的回答(5票)】:
WINDOWS和類UNIX系統(tǒng)的設(shè)計哲學(xué)不一樣。WINDOWS不是微內(nèi)核的,OS要全包全管,肯定有個統(tǒng)一存放配置信息的地方比較合理;UNIX是微內(nèi)核的,內(nèi)核之外全是“工具”, 所以/etc下一堆東西。工具們自己管好自己的事情,工具之間通過管道交互即可。
原文地址:知乎
聯(lián)系客服