很多同學(xué)接觸linux不多矮烹,對(duì)linux平臺(tái)的開(kāi)發(fā)更是一無(wú)所知。 而現(xiàn)在的趨勢(shì)越來(lái)越表明,作為一個(gè)優(yōu)秀的軟件開(kāi)發(fā)人員冤议,或計(jì)算機(jī)it行業(yè)從業(yè)人員,=""
掌握l(shuí)inux是一種很重要的謀生資源與手段师坎。
下來(lái)我將會(huì)結(jié)合自己的幾年的個(gè)人開(kāi)發(fā)經(jīng)驗(yàn)恕酸,及對(duì) Linux,更是類(lèi)UNIX系統(tǒng)胯陋,及開(kāi)源軟件文化蕊温,
談?wù)凩inux的學(xué)習(xí)方法與學(xué)習(xí)中應(yīng)該注意的一些事袱箱。
就如同剛才說(shuō)的,很多同學(xué)以前可能連Linux是什么都不知道义矛,對(duì)UNIX更是一無(wú)所知发笔。
所以我們從最基礎(chǔ)的講起,對(duì)于Linux及UNIX的歷史我們不做多談凉翻,直接進(jìn)入入門(mén)的學(xué)習(xí)了讨。
Linux入門(mén)是很簡(jiǎn)單的,問(wèn)題是你是否有耐心制轰,是否愛(ài)折騰前计,是否不排斥重裝一類(lèi)的大修。
沒(méi)折騰可以說(shuō)是學(xué)不好Linux的垃杖,鳥(niǎo)哥說(shuō)過(guò)残炮,要真正了解Linux的分區(qū)機(jī)制,對(duì)LVM使用相當(dāng)熟練缩滨,
沒(méi)有20次以上的Linux裝機(jī)經(jīng)驗(yàn)是積累不起來(lái)的势就,所以一定不要怕折騰。
由于大家之前都使用Windows脉漏,所以我也盡可能照顧這些“菜鳥(niǎo)”苞冯。 我的推薦,如果你第一次接觸Linux侧巨,那么首先在虛擬機(jī)中嘗試它舅锄。
虛擬機(jī)我推薦Virtual Box司忱,我并不主張使用VM,原因是VM是閉源的鳍烁,并且是收費(fèi)的幔荒,我不希望推動(dòng)盜版爹梁。
當(dāng)然如果你的Money足夠多姚垃,可以嘗試VM积糯,但我要說(shuō)的是即使是VM絮宁,不一定就一定好绍昂。
付費(fèi)的軟件不一定好窘游。
首先跳纳,Virtual
Box很小巧,Windows平臺(tái)下安裝包在80MB左右艾蓝,而VM動(dòng)輒600MB赢织,雖然功能強(qiáng)大馍盟,但資源消耗也多贞岭,何況你的需求Virtual Box完全能夠滿足瞄桨。
所以芯侥,還是自己選筹麸。
如何使用虛擬機(jī)白指,是你的事告嘲,這個(gè)我不教你,因?yàn)楹芎?jiǎn)單赋焕,不會(huì)的話Google或Baidu都可以, 英文好的可以直接看官方文檔仰楚。
現(xiàn)在介紹Linux發(fā)行版的知識(shí)。
正如你所見(jiàn)僧界,Linux發(fā)行版并非Linux,Linux僅是指操作系統(tǒng)的內(nèi)核捂襟,作為科班出生的你不要讓我解釋?zhuān)?我也沒(méi)時(shí)間。
我推薦的發(fā)行版如下:
UBUNTU 適合純菜鳥(niǎo)葬荷,追求穩(wěn)定的官方支持涨共,對(duì)系統(tǒng)穩(wěn)定性要求較弱,喜歡最新應(yīng)用宠漩,相對(duì)來(lái)說(shuō)不太喜歡折騰的開(kāi)發(fā)者。
Debian,相對(duì)UBUNTU難很多的發(fā)行版瘦陈,突出特點(diǎn)是穩(wěn)定與容易使用的包管理系統(tǒng),缺點(diǎn)是企業(yè)支持不足捉貌,為社區(qū)開(kāi)發(fā)驅(qū)動(dòng)。
Arch,追逐時(shí)尚的開(kāi)發(fā)者的首選醒陆,優(yōu)點(diǎn)是包更新相當(dāng)快瀑构,無(wú)縫升級(jí),一次安裝基本可以一直運(yùn)作下去刨摩,沒(méi)有如UBUNTU那樣的版本概念寺晌,說(shuō)的專(zhuān)業(yè)點(diǎn)叫滾動(dòng)升級(jí)世吨,保持你的系統(tǒng)一定是最新的。缺點(diǎn)顯然易見(jiàn)呻征,不穩(wěn)定耘婚。同時(shí)安裝配置相對(duì)Debian再麻煩點(diǎn)。
Gentoo陆赋,相對(duì)Arch再難點(diǎn)沐祷,考驗(yàn)使用者的綜合水平,從系統(tǒng)安裝到微調(diào)奏甫,內(nèi)核編譯都親歷親為戈轿,是高手及黑客顯示自己技術(shù)手段凌受,按需配置符合自己要求的系統(tǒng)的首選阵子。
Slackware與Gentoo類(lèi)似。
CentOS胜蛉,社區(qū)維護(hù)的RedHat的復(fù)刻版本挠进,完全使用RedHat的源碼重新編譯生成,與RedHat的兼容性在理論上來(lái)說(shuō)是最好的誊册。如果你專(zhuān)注于Linux服務(wù)器领突,如網(wǎng)絡(luò)管理,架站案怯,那么CentOS是你的選擇君旦。
LFS,終極黑客顯擺工具嘲碱,完全從源代碼安裝金砍,編譯系統(tǒng)。安裝前你得到的只有一份文檔麦锯,你要做的就是照文檔你的說(shuō)明恕稠,一步步,一條條命令扶欣,一個(gè)個(gè)軟件包的去構(gòu)建你的Linux鹅巍,完全由你自己控制,想要什么就是什么料祠。如果你做出了LFS骆捧,證明你的Linux功底已經(jīng)相當(dāng)不錯(cuò),如果你能拿LFS文檔活學(xué)活用髓绽,再將Linux從源代碼開(kāi)始移植到嵌入式系統(tǒng)敛苇,我敢說(shuō)中國(guó)的企業(yè)你可以混的很好。
1梧宫、Linux基礎(chǔ)
你得挑一個(gè)適合你的系統(tǒng)接谨,然后在虛擬機(jī)安裝它摆碉,開(kāi)始使用它。
如果你想快速學(xué)會(huì)Linux脓豪,我有一個(gè)建議就是忘記圖形界面巷帝,不要想圖形界面能不能提供你問(wèn)題的答案, 而是滿世界的去找扫夜,去問(wèn)楞泼,如何用命令行解決你的問(wèn)題。
在這個(gè)過(guò)程中笤闯,你最好能將Linux的命令掌握的不錯(cuò)堕阔,起碼常用的命令得知道,同時(shí)建立了自己的知識(shí)庫(kù)颗味, 里面是你積累的各項(xiàng)知識(shí)超陆。
2、Linux平臺(tái)的C/C++開(kāi)發(fā)浦马,同時(shí)還有Bash腳本編程[JAVA]
再下個(gè)階段时呀,你需要學(xué)習(xí)的是Linux平臺(tái)的C/C++開(kāi)發(fā),同時(shí)還有Bash腳本編程晶默,如果你對(duì)Java興趣很深還有Java谨娜。
同樣,建議你拋棄掉圖形界面的IDE磺陡,從VIM開(kāi)始趴梢,為什么是VIM,而不是Emacs币他,
我無(wú)意挑起編輯器大戰(zhàn)坞靶,但我覺(jué)得VIM適合初學(xué)者,適合手比較笨圆丹,腦袋比較慢的開(kāi)發(fā)者滩愁。
Emacs的鍵位太多,太復(fù)雜辫封,我很畏懼硝枉。然后是GCC,Make倦微,Eclipse(Java妻味,C++或者)。
雖然將C++列在了Eclipse中欣福,但我并不推薦用IDE開(kāi)發(fā)C++责球,因?yàn)檫@不是Linux的文化, 容易讓你忽略一些你應(yīng)該注意的問(wèn)題。
IDE讓你變懶雏逾,懶得跟豬一樣嘉裤。如果你對(duì)程序調(diào)試,測(cè)試工作很感興趣栖博,GDB也得學(xué)的很好屑宠,
如果不是GDB也是必修課。這是開(kāi)發(fā)的第一步仇让,注意我并沒(méi)有提過(guò)一句Linux系統(tǒng)API的內(nèi)容典奉,
這個(gè)階段也不要關(guān)心這個(gè)。你要做的就是積累經(jīng)驗(yàn)丧叽,在Linux平臺(tái)的開(kāi)發(fā)經(jīng)驗(yàn)卫玖。
我推薦的書(shū)如下:C語(yǔ)言程序設(shè)計(jì)。 C語(yǔ)言踊淳,白皮書(shū)當(dāng)然更好假瞬。 C++推薦 C++ Primer Plus,
Java我不喜歡嚣崭,就不推薦了笨触,附一個(gè)別人的書(shū)單:java 入門(mén)書(shū)籍懦傍。
工具方面推薦VIM的官方手冊(cè)雹舀,GCC中文文檔,GDB中文文檔粗俱,GNU開(kāi)源軟件開(kāi)發(fā)指導(dǎo)(電子書(shū))说榆,
匯編語(yǔ)言程序設(shè)計(jì)(讓你對(duì)庫(kù),鏈接寸认,內(nèi)嵌匯編签财,編譯器優(yōu)化選項(xiàng)有初步了解,不必深度)偏塞。
如果你這個(gè)階段過(guò)不了就不必往下做了唱蒸,這是底線,最基礎(chǔ)的基礎(chǔ)灸叼,否則離開(kāi)神汹,不要霍霍Linux開(kāi)發(fā)。
不專(zhuān)業(yè)的Linux開(kāi)發(fā)者作出的程序是與Linux文化或UNIX文化相背的古今,程序是走不遠(yuǎn)的屁魏, 不可能像Bash,VIM這些神品一樣捉腥。 所以做不好干脆離開(kāi)氓拼。
3、UNIX環(huán)境高級(jí)編程(作者英年早逝,第3版即將出版桃漾,稍等)
UNIX環(huán)境高級(jí)編程堪稱(chēng)神作坏匪,經(jīng)典中的經(jīng)典。
接下來(lái)進(jìn)入Linux系統(tǒng)編程撬统,不二選擇剥槐,APUE,UNIX環(huán)境高級(jí)編程宪摧,一遍一遍的看粒竖,
看10遍都嫌少,如果你可以在大學(xué)將這本書(shū)翻爛几于,里面的內(nèi)容都實(shí)踐過(guò)蕊苗,有作品,你口頭表達(dá)能力夠強(qiáng)沿彭, 你可以在面試時(shí)說(shuō)服所有的考官朽砰。
(可能有點(diǎn)夸張,但APUE絕對(duì)是圣經(jīng)一般的讀物喉刘,即使是Windows程序員也從其中汲取養(yǎng)分瞧柔,
Google創(chuàng)始人的案頭書(shū)籍,扎爾伯克的床頭讀物睦裳。)
這本書(shū)看完后你會(huì)對(duì)Linux系統(tǒng)編程有相當(dāng)?shù)牧私庠旃繪inux與Windows平臺(tái)間開(kāi)發(fā)的差異在哪?
它們的優(yōu)缺點(diǎn)在哪?我的總結(jié)如下:做Windows平臺(tái)開(kāi)發(fā),很苦廉邑,微軟的系統(tǒng)API總在擴(kuò)容哥蔚, 想使用最新潮,最高效的功能蛛蒙,最適合當(dāng)前流行系統(tǒng)的功能你必須時(shí)刻學(xué)習(xí)糙箍。
Linux不是,Linux系統(tǒng)的核心API就100來(lái)個(gè)牵祟,記憶力好完全可以背下來(lái)深夯。 而且經(jīng)久不變,為什么不變诺苹,因?yàn)橐琔NIX兼容咕晋,符合POSIX標(biāo)準(zhǔn)。
所以Linux平臺(tái)的開(kāi)發(fā)大多是專(zhuān)注于底層的或服務(wù)器編程筝尾。
這是其優(yōu)點(diǎn)捡需,當(dāng)然圖形是Linux的軟肋,但我站在一個(gè)開(kāi)發(fā)者的角度筹淫,我無(wú)所謂站辉,因?yàn)槊钚形乙部梢赃m應(yīng)呢撞,
如果有更好的圖形界面我就當(dāng)作恩賜吧。另外饰剥,Windows閉源殊霞,系統(tǒng)做了什么你更本不知道,
永遠(yuǎn)被微軟牽著鼻子跑汰蓉,想想如果微軟說(shuō)Win8不支持QQ绷蹲,那騰訊不得哭死。 而Linux完全開(kāi)源顾孽,你不喜歡祝钢,可以自己改,只要你技術(shù)夠若厚。
另外拦英,Windows雖然使用的人多,但使用場(chǎng)合單一测秸,專(zhuān)注與桌面疤估。 而Linux在各個(gè)方面都有發(fā)展,尤其在云計(jì)算霎冯,服務(wù)器軟件铃拇,嵌入式領(lǐng)域,
企業(yè)級(jí)應(yīng)用上有廣大前景沈撞,而且兼容性一流慷荔,由于支持POSIX可以無(wú)縫的運(yùn)行在UNIX系統(tǒng)之上, 不管是蘋(píng)果的Mac還是IBM的AS400系列关串,都是完全支持的拧廊。
另外,Linux的開(kāi)發(fā)環(huán)境支持也絕對(duì)是一流的晋修,不管是C/C++,Java凰盔,Bash墓卦,Python,PHP户敬,Javascript落剪,。尿庐。忠怖。。抄瑟。凡泣。就連C#也支持。而微軟除Visual
Stdio套件以外,都不怎么友好鞋拟,不是嗎?
如果你看完APUE的感觸有很多骂维,希望驗(yàn)證你的某些想法或經(jīng)驗(yàn),推薦UNIX程序設(shè)計(jì)藝術(shù)贺纲, 世界頂級(jí)黑客將同你分享他的看法航闺。
4、選擇方向:網(wǎng)絡(luò)猴誊,圖形潦刃,嵌入式,設(shè)備驅(qū)動(dòng)
網(wǎng)絡(luò)方向:服務(wù)器軟件編寫(xiě)及高性能的并發(fā)程序編寫(xiě)
現(xiàn)在是時(shí)候做分流了懈叹。 大體上我分為四個(gè)方向:網(wǎng)絡(luò)福铅,圖形,嵌入式项阴,設(shè)備驅(qū)動(dòng)滑黔。
如果選擇網(wǎng)絡(luò),再細(xì)分环揽,我對(duì)其他的不是他熟悉略荡,只說(shuō)服務(wù)器軟件編寫(xiě)及高性能的并發(fā)程序編寫(xiě)吧。 相對(duì)來(lái)說(shuō)這是網(wǎng)絡(luò)編程中技術(shù)含量最高的歉胶,也是底層的汛兜。
需要很多的經(jīng)驗(yàn),看很多的書(shū)通今,做很多的項(xiàng)目粥谬。
我的看法是以下面的順序來(lái)看書(shū):
APUE再深讀 – 尤其是進(jìn)程,線程辫塌,IPC漏策,套接字
多核程序設(shè)計(jì) - Pthread一定得吃透了,你很NB
UNIX網(wǎng)絡(luò)編程 – 卷一臼氨,卷二
TCP/IP網(wǎng)絡(luò)詳解 – 卷一 再看上面兩本書(shū)時(shí)就該看了
5.TCP/IP 網(wǎng)絡(luò)詳解 – 卷二 我覺(jué)得看到卷二就差不多了掺喻,當(dāng)然卷三看了更好,努力储矩,爭(zhēng)取看了
6.Lighttpd源代碼 - 這個(gè)服務(wù)器也很有名了
7.Nginx源代碼 –
相較于Apache感耙,Nginx的源碼較少,如果能看個(gè)大致持隧,很NB即硼。看源代碼主要是要學(xué)習(xí)里面的套接字編程及并發(fā)控制屡拨,想想都激動(dòng)只酥。如果你有這些本事褥实,可以試著往暴雪投簡(jiǎn)歷,為他們寫(xiě)服務(wù)器后臺(tái)层皱,想一想全球的魔獸都運(yùn)行在你的服務(wù)器軟件上性锭。
Linux內(nèi)核 TCP/IP協(xié)議棧 – 深入了解TCP/IP的實(shí)現(xiàn)
如果你還喜歡驅(qū)動(dòng)程序設(shè)計(jì),可以看看更底層的協(xié)議叫胖,如鏈路層的草冈,寫(xiě)什么路由器,網(wǎng)卡瓮增, 網(wǎng)絡(luò)設(shè)備的驅(qū)動(dòng)及嵌入式系統(tǒng)軟件應(yīng)該也不成問(wèn)題了怎棱。
當(dāng)然一般的網(wǎng)絡(luò)公司,就算百度級(jí)別的也該毫不猶豫的雇用你绷跑。 只是看后面這些書(shū)需要時(shí)間與經(jīng)驗(yàn)拳恋,所以35歲以前辦到吧!跳槽到給你未來(lái)的地方!
圖形方向,我覺(jué)得圖形方向也是很有前途的砸捏,以下幾個(gè)方面谬运。
Opengl的工業(yè)及游戲開(kāi)發(fā),國(guó)外較成熟垦藏。
影視動(dòng)畫(huà)特效梆暖,如皮克斯,也是國(guó)外較成熟掂骏。
GPU計(jì)算技術(shù)轰驳,可以應(yīng)用在瀏覽器網(wǎng)頁(yè)渲染上,GPU計(jì)算資源利用上弟灼,由于開(kāi)源的原因级解,有很多的文檔程序可以參考。如果能進(jìn)火狐開(kāi)發(fā)田绑,或google做瀏覽器開(kāi)發(fā)勤哗,應(yīng)該會(huì)很好
。
嵌入式方向:嵌入式方向沒(méi)說(shuō)的辛馆,Linux很重要俺陋。
掌握多個(gè)架構(gòu),不僅X86的昙篙,ARM的,單片機(jī)什么的也必須得懂诱咏。 硬件不懂我預(yù)見(jiàn)你會(huì)死在半路上苔可,我也想走嵌入式方向,但我覺(jué)得就學(xué)校教授嵌入式的方法袋狞,
我連學(xué)電子的那幫學(xué)生都競(jìng)爭(zhēng)不過(guò)焚辅。 奉勸大家映屋,一定得懂硬件再去做,如果走到嵌入式應(yīng)用開(kāi)發(fā)同蜻,只能祝你好運(yùn)棚点,
不要碰上像Nokia,Hp這樣的公司湾蔓,否則你會(huì)很慘的瘫析。
驅(qū)動(dòng)程序設(shè)計(jì):軟件開(kāi)發(fā)周期是很長(zhǎng)的,硬件不同默责,很快贬循。 每個(gè)月誕生那么多的新硬件,如何讓他們?cè)贚inux上工作起來(lái)桃序,這是你的工作杖虾。
由于Linux的兼容性很好,如果不是太低層的驅(qū)動(dòng)媒熊,基本C語(yǔ)言就可以搞定奇适,系統(tǒng)架構(gòu)的影響不大, 因?yàn)橛邢到y(tǒng)支持芦鳍,你可能做些許更改就可以在ARM上使用PC的硬件了嚷往,
所以做硬件驅(qū)動(dòng)開(kāi)發(fā)不像嵌入式,對(duì)硬件知識(shí)的要求很高怜校。
可以從事的方向也很多间影,如家電。
最后分享一些Linux相關(guān)的學(xué)習(xí)資料便于學(xué)習(xí)參考