學(xué)Linux必看――Linux學(xué)習之路
很多同學(xué)接觸Linux不多,對Linux平臺的開(kāi)發(fā)更是一無(wú)所知。 而現在的趨勢越來(lái)越表明,作為一個(gè)優(yōu)秀的軟件開(kāi)發(fā)人員,或計算機IT行業(yè)從業(yè)人員, 掌握Linux是一種很重要的謀生資源與手段。
本文引用地址:http://dyxdggzs.com/article/201808/385171.htm下來(lái)我將會(huì )結合自己的幾年的個(gè)人開(kāi)發(fā)經(jīng)驗,及對 Linux,更是類(lèi)UNIX系統,及開(kāi)源軟件文化, 談?wù)凩inux的學(xué)習方法與學(xué)習中應該注意的一些事。
就如同剛才說(shuō)的,很多同學(xué)以前可能連Linux是什么都不知道,對UNIX更是一無(wú)所知。 所以我們從最基礎的講起,對于Linux及UNIX的歷史我們不做多談,直接進(jìn)入入門(mén)的學(xué)習。
Linux入門(mén)是很簡(jiǎn)單的,問(wèn)題是你是否有耐心,是否愛(ài)折騰,是否不排斥重裝一類(lèi)的大修。 沒(méi)折騰可以說(shuō)是學(xué)不好Linux的,鳥(niǎo)哥說(shuō)過(guò),要真正了解Linux的分區機制,對LVM使用相當熟練, 沒(méi)有20次以上的Linux裝機經(jīng)驗是積累不起來(lái)的,所以一定不要怕折騰。
由于大家之前都使用Windows,所以我也盡可能照顧這些“菜鳥(niǎo)”。 我的推薦,如果你第一次接觸Linux,那么首先在虛擬機中嘗試它。 虛擬機我推薦Virtual Box,我并不主張使用VM,原因是VM是閉源的,并且是收費的,我不希望推動(dòng)盜版。 當然如果你的Money足夠多,可以嘗試VM,但我要說(shuō)的是即使是VM,不一定就一定好。
付費的軟件不一定好。
首先,Virtual Box很小巧,Windows平臺下安裝包在80MB左右,而VM動(dòng)輒600MB,雖然功能強大,但資源消耗也多,何況你的需求Virtual Box完全能夠滿(mǎn)足。 所以,還是自己選。
如何使用虛擬機,是你的事,這個(gè)我不教你,因為很簡(jiǎn)單,不會(huì )的話(huà)Google或Baidu都可以, 英文好的可以直接看官方文檔。 現在介紹Linux發(fā)行版的知識。
正如你所見(jiàn),Linux發(fā)行版并非Linux,Linux僅是指操作系統的內核,作為科班出生的你不要讓我解釋?zhuān)?我也沒(méi)時(shí)間。
我推薦的發(fā)行版如下:
UBUNTU 適合純菜鳥(niǎo),追求穩定的官方支持,對系統穩定性要求較弱,喜歡最新應用,相對來(lái)說(shuō)不太喜歡折騰的開(kāi)發(fā)者。
Debian,相對UBUNTU難很多的發(fā)行版,突出特點(diǎn)是穩定與容易使用的包管理系統,缺點(diǎn)是企業(yè)支持不足,為社區開(kāi)發(fā)驅動(dòng)。
Arch,追逐時(shí)尚的開(kāi)發(fā)者的首選,優(yōu)點(diǎn)是包更新相當快,無(wú)縫升級,一次安裝基本可以一直運作下去,沒(méi)有如UBUNTU那樣的版本概念,說(shuō)的專(zhuān)業(yè)點(diǎn)叫滾動(dòng)升級,保持你的系統一定是最新的。缺點(diǎn)顯然易見(jiàn),不穩定。同時(shí)安裝配置相對Debian再麻煩點(diǎn)。
Gentoo,相對Arch再難點(diǎn),考驗使用者的綜合水平,從系統安裝到微調,內核編譯都親歷親為,是高手及黑客顯示自己技術(shù)手段,按需配置符合自己要求的系統的首選。
Slackware與Gentoo類(lèi)似。
CentOS,社區維護的RedHat的復刻版本,完全使用RedHat的源碼重新編譯生成,與RedHat的兼容性在理論上來(lái)說(shuō)是最好的。如果你專(zhuān)注于Linux服務(wù)器,如網(wǎng)絡(luò )管理,架站,那么CentOS是你的選擇。
LFS,終極黑客顯擺工具,完全從源代碼安裝,編譯系統。安裝前你得到的只有一份文檔,你要做的就是照文檔你的說(shuō)明,一步步,一條條命令,一個(gè)個(gè)軟件包的去構建你的Linux,完全由你自己控制,想要什么就是什么。如果你做出了LFS,證明你的Linux功底已經(jīng)相當不錯,如果你能拿LFS文檔活學(xué)活用,再將Linux從源代碼開(kāi)始移植到嵌入式系統,我敢說(shuō)中國的企業(yè)你可以混的很好。
1、Linux基礎
你得挑一個(gè)適合你的系統,然后在虛擬機安裝它,開(kāi)始使用它。 如果你想快速學(xué)會(huì )Linux,我有一個(gè)建議就是忘記圖形界面,不要想圖形界面能不能提供你問(wèn)題的答案, 而是滿(mǎn)世界的去找,去問(wèn),如何用命令行解決你的問(wèn)題。
在這個(gè)過(guò)程中,你最好能將Linux的命令掌握的不錯,起碼常用的命令得知道,同時(shí)建立了自己的知識庫, 里面是你積累的各項知識。
2、Linux平臺的C/C++開(kāi)發(fā),同時(shí)還有Bash腳本編程[JAVA]
再下個(gè)階段,你需要學(xué)習的是Linux平臺的C/C++開(kāi)發(fā),同時(shí)還有Bash腳本編程,如果你對Java興趣很深還有Java。 同樣,建議你拋棄掉圖形界面的IDE,從VIM開(kāi)始,為什么是VIM,而不是Emacs, 我無(wú)意挑起編輯器大戰,但我覺(jué)得VIM適合初學(xué)者,適合手比較笨,腦袋比較慢的開(kāi)發(fā)者。 Emacs的鍵位太多,太復雜,我很畏懼。然后是GCC,Make,Eclipse(Java,C++或者)。
雖然將C++列在了Eclipse中,但我并不推薦用IDE開(kāi)發(fā)C++,因為這不是Linux的文化, 容易讓你忽略一些你應該注意的問(wèn)題。 IDE讓你變懶,懶得跟豬一樣。如果你對程序調試,測試工作很感興趣,GDB也得學(xué)的很好, 如果不是GDB也是必修課。這是開(kāi)發(fā)的第一步,注意我并沒(méi)有提過(guò)一句Linux系統API的內容, 這個(gè)階段也不要關(guān)心這個(gè)。你要做的就是積累經(jīng)驗,在Linux平臺的開(kāi)發(fā)經(jīng)驗。
我推薦的書(shū)如下:C語(yǔ)言程序設計。 C語(yǔ)言,白皮書(shū)當然更好。 C++推薦 C++ Primer Plus, Java我不喜歡,就不推薦了,附一個(gè)別人的書(shū)單:java 入門(mén)書(shū)籍。 工具方面推薦VIM的官方手冊,GCC中文文檔,GDB中文文檔,GNU開(kāi)源軟件開(kāi)發(fā)指導(電子書(shū)), 匯編語(yǔ)言程序設計(讓你對庫,鏈接,內嵌匯編,編譯器優(yōu)化選項有初步了解,不必深度)。
如果你這個(gè)階段過(guò)不了就不必往下做了,這是底線(xiàn),最基礎的基礎,否則離開(kāi),不要霍霍Linux開(kāi)發(fā)。 不專(zhuān)業(yè)的Linux開(kāi)發(fā)者作出的程序是與Linux文化或UNIX文化相背的,程序是走不遠的, 不可能像Bash,VIM這些神品一樣。 所以做不好干脆離開(kāi)。
3、UNIX環(huán)境高級編程(作者英年早逝,第3版即將出版,稍等)
UNIX環(huán)境高級編程堪稱(chēng)神作,經(jīng)典中的經(jīng)典。
接下來(lái)進(jìn)入Linux系統編程,不二選擇,APUE,UNIX環(huán)境高級編程,一遍一遍的看, 看10遍都嫌少,如果你可以在大學(xué)將這本書(shū)翻爛,里面的內容都實(shí)踐過(guò),有作品,你口頭表達能力夠強, 你可以在面試時(shí)說(shuō)服所有的考官。
(可能有點(diǎn)夸張,但APUE絕對是圣經(jīng)一般的讀物,即使是Windows程序員也從其中汲取養分, Google創(chuàng )始人的案頭書(shū)籍,扎爾伯克的床頭讀物。)
這本書(shū)看完后你會(huì )對Linux系統編程有相當的了解,知道Linux與Windows平臺間開(kāi)發(fā)的差異在哪? 它們的優(yōu)缺點(diǎn)在哪?我的總結如下:做Windows平臺開(kāi)發(fā),很苦,微軟的系統API總在擴容, 想使用最新潮,最高效的功能,最適合當前流行系統的功能你必須時(shí)刻學(xué)習。 Linux不是,Linux系統的核心API就100來(lái)個(gè),記憶力好完全可以背下來(lái)。 而且經(jīng)久不變,為什么不變,因為要同UNIX兼容,符合POSIX標準。 所以L(fǎng)inux平臺的開(kāi)發(fā)大多是專(zhuān)注于底層的或服務(wù)器編程。
這是其優(yōu)點(diǎn),當然圖形是Linux的軟肋,但我站在一個(gè)開(kāi)發(fā)者的角度,我無(wú)所謂,因為命令行我也可以適應, 如果有更好的圖形界面我就當作恩賜吧。另外,Windows閉源,系統做了什么你更本不知道, 永遠被微軟牽著(zhù)鼻子跑,想想如果微軟說(shuō)Win8不支持QQ,那騰訊不得哭死。 而Linux完全開(kāi)源,你不喜歡,可以自己改,只要你技術(shù)夠。
另外,Windows雖然使用的人多,但使用場(chǎng)合單一,專(zhuān)注與桌面。 而Linux在各個(gè)方面都有發(fā)展,尤其在云計算,服務(wù)器軟件,嵌入式領(lǐng)域, 企業(yè)級應用上有廣大前景,而且兼容性一流,由于支持POSIX可以無(wú)縫的運行在UNIX系統之上, 不管是蘋(píng)果的Mac還是IBM的AS400系列,都是完全支持的。 另外,Linux的開(kāi)發(fā)環(huán)境支持也絕對是一流的,不管是C/C++,Java,Bash,Python,PHP,Javascript,。。。。。。就連C#也支持。而微軟除Visual Stdio套件以外,都不怎么友好,不是嗎?
如果你看完APUE的感觸有很多,希望驗證你的某些想法或經(jīng)驗,推薦UNIX程序設計藝術(shù), 世界頂級黑客將同你分享他的看法。
4、選擇方向:網(wǎng)絡(luò ),圖形,嵌入式,設備驅動(dòng)
網(wǎng)絡(luò )方向:服務(wù)器軟件編寫(xiě)及高性能的并發(fā)程序編寫(xiě)
現在是時(shí)候做分流了。 大體上我分為四個(gè)方向:網(wǎng)絡(luò ),圖形,嵌入式,設備驅動(dòng)。
如果選擇網(wǎng)絡(luò ),再細分,我對其他的不是他熟悉,只說(shuō)服務(wù)器軟件編寫(xiě)及高性能的并發(fā)程序編寫(xiě)吧。 相對來(lái)說(shuō)這是網(wǎng)絡(luò )編程中技術(shù)含量最高的,也是底層的。 需要很多的經(jīng)驗,看很多的書(shū),做很多的項目。
我的看法是以下面的順序來(lái)看書(shū):
APUE再深讀 – 尤其是進(jìn)程,線(xiàn)程,IPC,套接字
多核程序設計 - Pthread一定得吃透了,你很NB
UNIX網(wǎng)絡(luò )編程 – 卷一,卷二
TCP/IP網(wǎng)絡(luò )詳解 – 卷一 再看上面兩本書(shū)時(shí)就該看了
5.TCP/IP 網(wǎng)絡(luò )詳解 – 卷二 我覺(jué)得看到卷二就差不多了,當然卷三看了更好,努力,爭取看了
6.Lighttpd源代碼 - 這個(gè)服務(wù)器也很有名了
7.Nginx源代碼 – 相較于A(yíng)pache,Nginx的源碼較少,如果能看個(gè)大致,很NB??丛创a主要是要學(xué)習里面的套接字編程及并發(fā)控制,想想都激動(dòng)。如果你有這些本事,可以試著(zhù)往暴雪投簡(jiǎn)歷,為他們寫(xiě)服務(wù)器后臺,想一想全球的魔獸都運行在你的服務(wù)器軟件上。
Linux內核 TCP/IP協(xié)議棧 – 深入了解TCP/IP的實(shí)現
如果你還喜歡驅動(dòng)程序設計,可以看看更底層的協(xié)議,如鏈路層的,寫(xiě)什么路由器,網(wǎng)卡, 網(wǎng)絡(luò )設備的驅動(dòng)及嵌入式系統軟件應該也不成問(wèn)題了。
當然一般的網(wǎng)絡(luò )公司,就算百度級別的也該毫不猶豫的雇用你。 只是看后面這些書(shū)需要時(shí)間與經(jīng)驗,所以35歲以前辦到吧!跳槽到給你未來(lái)的地方!
圖形方向,我覺(jué)得圖形方向也是很有前途的,以下幾個(gè)方面。
Opengl的工業(yè)及游戲開(kāi)發(fā),國外較成熟。
影視動(dòng)畫(huà)特效,如皮克斯,也是國外較成熟。
GPU計算技術(shù),可以應用在瀏覽器網(wǎng)頁(yè)渲染上,GPU計算資源利用上,由于開(kāi)源的原因,有很多的文檔程序可以參考。如果能進(jìn)火狐開(kāi)發(fā),或google做瀏覽器開(kāi)發(fā),應該會(huì )很好 。
嵌入式方向:嵌入式方向沒(méi)說(shuō)的,Linux很重要。
掌握多個(gè)架構,不僅X86的,ARM的,單片機什么的也必須得懂。 硬件不懂我預見(jiàn)你會(huì )死在半路上,我也想走嵌入式方向,但我覺(jué)得就學(xué)校教授嵌入式的方法, 我連學(xué)電子的那幫學(xué)生都競爭不過(guò)。 奉勸大家,一定得懂硬件再去做,如果走到嵌入式應用開(kāi)發(fā),只能祝你好運, 不要碰上像Nokia,Hp這樣的公司,否則你會(huì )很慘的。
驅動(dòng)程序設計:軟件開(kāi)發(fā)周期是很長(cháng)的,硬件不同,很快。 每個(gè)月誕生那么多的新硬件,如何讓他們在Linux上工作起來(lái),這是你的工作。 由于Linux的兼容性很好,如果不是太低層的驅動(dòng),基本C語(yǔ)言就可以搞定,系統架構的影響不大, 因為有系統支持,你可能做些許更改就可以在A(yíng)RM上使用PC的硬件了, 所以做硬件驅動(dòng)開(kāi)發(fā)不像嵌入式,對硬件知識的要求很高。
可以從事的方向也很多,如家電啊,特別是如索尼,日立,希捷,富士康這樣的廠(chǎng)子,很稀缺的。
評論