分享--linux学习之路(学linux必看)
很多同学接触Linux不多,对Linux平台的开发更是⼀⽆所知。⽽现在的趋势越来越表明,作为⼀个优秀的软件开发⼈员,或计算机IT⾏业从业⼈员,掌握Linux 是⼀种很重要的谋⽣资源与⼿段。
下来我将会结合⾃⼰的⼏年的个⼈开发经验,及对 Linux,更是类UNIX系统,及开源软件⽂化,谈谈Linux的学习⽅法与学习中应该注意的⼀些事。
就如同刚才说的,很多同学以前可能连Linux是什么都不知道,对UNIX更是⼀⽆所知。所以我们从最基础的讲起,对于Linux及UNIX的历史我们不做多谈,直接进⼊⼊门的学习。
怎么将linux系统改成中文Linux⼊门是很简单的,问题是你是否有耐⼼,是否爱折腾,是否不排斥重装⼀类的⼤修。没折腾可以说是学不好Linux的,鸟哥说过,要真正了解Linux的分区机制,对LVM使⽤相当熟练,没有20次以上的Linux装机经验是积累不起来的,所以⼀定不要怕折腾。
由于⼤家之前都使⽤Windows,所以我也尽可能照顾这些“菜鸟”。我的推荐,如果你第⼀次接触Linux,那么⾸先在虚拟机中尝试它。虚拟机我推荐Virtual Box,我并不主张使⽤VM,原因是VM是闭源的,并且是收费的,我不希望推动盗版。当然如果你的Money⾜够多,可以尝试VM,但我要说的是即使是VM,不⼀定就⼀定好。
付费的软件不⼀定好。
⾸先,Virtual Box很⼩巧,Windows平台下安装包在80MB左右,⽽VM动辄600MB,虽然功能强⼤,但资源消耗也多,何况你的需求Virtual Box完全能够满⾜。所以,还是⾃⼰选。
如何使⽤虚拟机,是你的事,这个我不教你,因为很简单,不会的话Google或Baidu都可以,英⽂好的可以直接看官⽅⽂档。现在介绍Linux发⾏版的知识。
正如你所见,Linux发⾏版并⾮Linux,Linux仅是指操作系统的内核,作为科班出⽣的你不要让我解释,我也没时间。
我推荐的发⾏版如下:
UBUNTU 适合纯菜鸟,追求稳定的官⽅⽀持,对系统稳定性要求较弱,喜欢最新应⽤,相对来说不太喜欢折腾的开发者。
Debian,相对UBUNTU难很多的发⾏版,突出特点是稳定与容易使⽤的包管理系统,缺点是企业⽀持不⾜,为社区开发驱动。
Arch,追逐时尚的开发者的⾸选,优点是包更新相当快,⽆缝升级,⼀次安装基本可以⼀直运作下去,
没有如UBUNTU那样的版本概念,说的专业点叫滚动升级,保持你的系统⼀定是最新的。缺点显然易见,不稳定。同时安装配置相对Debian再⿇烦点。
Gentoo,相对Arch再难点,考验使⽤者的综合⽔平,从系统安装到微调,内核编译都亲历亲为,是⾼⼿及⿊客显⽰⾃⼰技术⼿段,按需配置符合⾃⼰要求的系统的⾸选。
Slackware与Gentoo类似。
CentOS,社区维护的RedHat的复刻版本,完全使⽤RedHat的源码重新编译⽣成,与RedHat的兼容性在理论上来说是最好的。如果你专注于Linux服务器,如⽹络管理,架站,那么CentOS是你的选择。
LFS,终极⿊客显摆⼯具,完全从源代码安装,编译系统。安装前你得到的只有⼀份⽂档,你要做的就是照⽂档你的说明,⼀步步,⼀条条命令,⼀个个软件包的去构建你的Linux,完全由你⾃⼰控制,想要什么就是什么。如果你做出了LFS,证明你的Linux功底已经相当不错,如果你能拿LFS⽂档活学活⽤,再将Linux 从源代码开始移植到嵌⼊式系统,我敢说中国的企业你可以混的很好。
1、Linux基础
你得挑⼀个适合你的系统,然后在虚拟机安装它,开始使⽤它。如果你想快速学会Linux,我有⼀个建
议就是忘记图形界⾯,不要想图形界⾯能不能提供你问题的答案,⽽是满世界的去,去问,如何⽤命令⾏解决你的问题。
在这个过程中,你最好能将Linux的命令掌握的不错,起码常⽤的命令得知道,同时建⽴了⾃⼰的知识库,⾥⾯是你积累的各项知识。
2、Linux平台的C/C++开发,同时还有Bash脚本编程[JAVA]
再下个阶段,你需要学习的是Linux平台的C/C++开发,同时还有Bash脚本编程,如果你对Java兴趣很深还有Java。同样,建议你抛弃掉图形界⾯的IDE,从VIM开始,为什么是VIM,⽽不是Emacs,我⽆意挑起编辑器⼤战,但我觉得VIM适合初学者,适合⼿⽐较笨,脑袋⽐较慢的开发者。 Emacs的键位太多,太复杂,我很畏惧。然后是GCC,Make,Eclipse(Java,C++或者)。
虽然将C++列在了Eclipse中,但我并不推荐⽤IDE开发C++,因为这不是Linux的⽂化,容易让你忽略⼀些你应该注意的问题。 IDE让你变懒,懒得跟猪⼀样。如果你对程序调试,测试⼯作很感兴趣,GDB也得学的很好,如果不是GDB也是必修课。这是开发的第⼀步,注意我并没有提过⼀句Linux系统API的内容,这个阶段也不要关⼼这个。你要做的就是积累经验,在Linux平台的开发经验。
我推荐的书如下:C语⾔程序设计。 C语⾔,⽩⽪书当然更好。 C++推荐 C++ Primer Plus, Java我
不喜欢,就不推荐了,附⼀个别⼈的书单:java ⼊门书籍。⼯具⽅⾯推荐VIM的官⽅⼿册,GCC中⽂⽂档,GDB中⽂⽂档,GNU开源软件开发指导(电⼦书),汇编语⾔程序设计(让你对库,链接,内嵌汇编,编
译器优化选项有初步了解,不必深度)。
如果你这个阶段过不了就不必往下做了,这是底线,最基础的基础,否则离开,不要霍霍Linux开发。不专业的Linux开发者作出的程序是与Linux⽂化或UNIX⽂化相背的,程序是⾛不远的,不可能像Bash,VIM这些神品⼀样。所以做不好⼲脆离开。
3、UNIX环境⾼级编程(作者英年早逝,第3版即将出版,稍等)
UNIX环境⾼级编程堪称神作,经典中的经典。
接下来进⼊Linux系统编程,不⼆选择,APUE,UNIX环境⾼级编程,⼀遍⼀遍的看,看10遍都嫌少,如果你可以在⼤学将这本书翻烂,⾥⾯的内容都实践过,有作品,你⼝头表达能⼒够强,你可以在⾯试时说服所有的考官。
(可能有点夸张,但APUE绝对是圣经⼀般的读物,即使是Windows程序员也从其中汲取养分, Google创始⼈的案头书籍,扎尔伯克的床头读物。)
这本书看完后你会对Linux系统编程有相当的了解,知道Linux与Windows平台间开发的差异在哪?它们的优缺点在哪?我的总结如下:做Windows平台开发,很苦,微软的系统API总在扩容,想使⽤最新潮,最⾼效的功能,最适合当前流⾏系统的功能你必须时刻学习。 Linux不是,Linux系统的核⼼API就100来个,记忆⼒好完全可以背下来。⽽且经久不变,为什么不变,因为要同UNIX兼容,符合POSIX标准。所以Linux平台的开发⼤多是专注于底层的或服务器编程。
这是其优点,当然图形是Linux的软肋,但我站在⼀个开发者的⾓度,我⽆所谓,因为命令⾏我也可以适应,如果有更好的图形界⾯我就当作恩赐吧。另
外,Windows闭源,系统做了什么你更本不知道,永远被微软牵着⿐⼦跑,想想如果微软说Win8不⽀持QQ,那腾讯不得哭死。⽽Linux完全开源,你不喜欢,可以⾃⼰改,只要你技术够。
另外,Windows虽然使⽤的⼈多,但使⽤场合单⼀,专注与桌⾯。⽽Linux在各个⽅⾯都有发展,尤其在云计算,服务器软件,嵌⼊式领域,企业级应⽤上有⼴⼤前景,⽽且兼容性⼀流,由于⽀持POSIX可以⽆缝的运⾏在UNIX系统之上,不管是苹果的Mac还是IBM的AS400系列,都是完全⽀持的。另外,Linux的开发环境⽀持也绝对是⼀流的,不管是C/C++,Java,Bash,Python,PHP,Javascript,。。。。。。就连C#也⽀持。⽽微软除Visual Stdio套件以外,都不怎么友好,不是吗?
如果你看完APUE的感触有很多,希望验证你的某些想法或经验,推荐UNIX程序设计艺术,世界顶级
⿊客将同你分享他的看法。
4、选择⽅向:⽹络,图形,嵌⼊式,设备驱动
⽹络⽅向:服务器软件编写及⾼性能的并发程序编写
现在是时候做分流了。⼤体上我分为四个⽅向:⽹络,图形,嵌⼊式,设备驱动。
如果选择⽹络,再细分,我对其他的不是他熟悉,只说服务器软件编写及⾼性能的并发程序编写吧。相对来说这是⽹络编程中技术含量最⾼的,也是底层的。需要很多的经验,看很多的书,做很多的项⽬。
我的看法是以下⾯的顺序来看书:
APUE再深读 – 尤其是进程,线程,IPC,套接字
多核程序设计 - Pthread⼀定得吃透了,你很NB
UNIX⽹络编程 – 卷⼀,卷⼆
TCP/IP⽹络详解 – 卷⼀再看上⾯两本书时就该看了
5.TCP/IP ⽹络详解 – 卷⼆我觉得看到卷⼆就差不多了,当然卷三看了更好,努⼒,争取看了
6.Lighttpd源代码 - 这个服务器也很有名了
7.Nginx源代码 – 相较于Apache,Nginx的源码较少,如果能看个⼤致,很NB。看源代码主要是要学习⾥⾯的套接字编程及并发控制,想想都激动。如果你有这些本事,可以试着往暴雪投简历,为他们写服务器后台,想⼀想全球的魔兽都运⾏在你的服务器软件上。
Linux内核 TCP/IP协议栈 – 深⼊了解TCP/IP的实现
如果你还喜欢驱动程序设计,可以看看更底层的协议,如链路层的,写什么路由器,⽹卡,⽹络设备的驱动及嵌⼊式系统软件应该也不成问题了。
当然⼀般的⽹络公司,就算百度级别的也该毫不犹豫的雇⽤你。只是看后⾯这些书需要时间与经验,所以35岁以前办到吧!跳槽到给你未来的地⽅!
图形⽅向,我觉得图形⽅向也是很有前途的,以下⼏个⽅⾯。
Opengl的⼯业及游戏开发,国外较成熟。
影视动画特效,如⽪克斯,也是国外较成熟。
GPU计算技术,可以应⽤在浏览器⽹页渲染上,GPU计算资源利⽤上,由于开源的原因,有很多的⽂档程序可以参考。如果能进⽕狐开发,或google做浏览器开发,应该会很好。
嵌⼊式⽅向:嵌⼊式⽅向没说的,Linux很重要。
掌握多个架构,不仅X86的,ARM的,单⽚机什么的也必须得懂。硬件不懂我预见你会死在半路上,我也想⾛嵌⼊式⽅向,但我觉得就学校教授嵌⼊式的⽅法,我连学电⼦的那帮学⽣都竞争不过。奉劝⼤家,⼀定得懂硬件再去做,如果⾛到嵌⼊式应⽤开发,只能祝你好运,不要碰上像Nokia,Hp这样的公司,否则你会很惨的。
驱动程序设计:软件开发周期是很长的,硬件不同,很快。每个⽉诞⽣那么多的新硬件,如何让他们在Linux上⼯作起来,这是你的⼯作。由于Linux的兼容性很好,如果不是太低层的驱动,基本C语⾔就可以搞定,系统架构的影响不⼤,因为有系统⽀持,你可能做些许更改就可以在ARM上使⽤PC的硬件了,所以做硬件驱动开发不像嵌⼊式,对硬件知识的要求很⾼。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。