十年网站开发经验+多家企业客户+靠谱的建站团队
量身定制+运营维护+专业推广+无忧售后,网站问题一站解决
很多同学接触Linux不多,对Linux平台的开发更是一无所知。而现在的趋势越来越表明,作为一个优秀的软件开发人员,或计算机IT行业从业人员,掌握Linux是一种很重要的谋生资源与手段。下来我将会结合自己的几年的个人开发经验,及对Linux,更是类UNIX系统,及开源软件文化,谈谈Linux的学习方法与学习中应该注意的一些事。
就如同刚才说的,很多同学以前可能连Linux是什么都不知道,对UNIX更是一无所知。所以我们从最基础的讲起,对于Linux及UNIX的历史我们不做多谈,直接进入入门的学习。
Linux入门是很简单的,问题是你是否有耐心,是否爱折腾,是否不排斥重装一类的大修。没折腾可以说是学不好Linux的,鸟哥说过,要真正了解Linux的分区机制,对LVM使用相当熟练,没有20次以上的Linux装机经验是积累不起来的,所以一定不要怕折腾。
由于大家之前都使用Windows,所以我也尽可能照顾这些“菜鸟”。我的推荐,如果你第一次接触Linux,那么首先在虚拟机中尝试它。虚拟机我推荐VirtualBox,我并不主张使用VM,原因是VM是闭源的,并且是收费的,我不希望推动盗版。当然如果你的Money足够多,可以尝试VM,但我要说的是即使是VM,不一定就一定好。付费的软件不一定好。首先,VirtualBox很小巧,Windows平台下安装包在80MB左右,而VM动辄600MB,虽然功能强大,但资源消耗也多,何况你的需求VirtualBox完全能够满足。所以,还是自己选。如何使用虚拟机,是你的事,这个我不教你,因为很简单,不会的话Google或Baidu都可以,英文好的可以直接看官方文档。
UBUNTU适合纯菜鸟,追求稳定的官方支持,对系统稳定性要求较弱,喜欢最新应用,相对来说不太喜欢折腾的开发者。
Debian,相对UBUNTU难很多的发行版,突出特点是稳定与容易使用的包管理系统,缺点是企业支持不足,为社区开发驱动。
Arch,追逐时尚的开发者的首选,优点是包更新相当快,无缝升级,一次安装基本可以一直运作下去,没有如UBUNTU那样的版本概念,说的专业点叫滚动升级,保持你的系统一定是最新的。缺点显然易见,不稳定。同时安装配置相对Debian再麻烦点。
Gentoo,相对Arch再难点,考验使用者的综合水平,从系统安装到微调,内核编译都亲历亲为,是高手及黑客显示自己技术手段,按需配置符合自己要求的系统的首选。
Slackware与Gentoo类似。
CentOS,社区维护的RedHat的复刻版本,完全使用RedHat的源码重新编译生成,与RedHat的兼容性在理论上来说是最好的。如果你专注于Linux服务器,如网络管理,架站,那么CentOS是你的选择。
LFS,终极黑客显摆工具,完全从源代码安装,编译系统。安装前你得到的只有一份文档,你要做的就是照文档你的说明,一步步,一条条命令,一个个软件包的去构建你的Linux,完全由你自己控制,想要什么就是什么。如果你做出了LFS,证明你的Linux功底已经相当不错,如果你能拿LFS文档活学活用,再将Linux从源代码开始移植到嵌入式系统,我敢说中国的企业你可以混的很好。
你得挑一个适合你的系统,然后在虚拟机安装它,开始使用它。如果你想快速学会Linux,我有一个建议就是忘记图形界面,不要想图形界面能不能提供你问题的答案,而是满世界的去找,去问,如何用命令行解决你的问题。在这个过程中,你最好能将Linux的命令掌握的不错,起码常用的命令得知道,同时建立了自己的知识库,里面是你积累的各项知识。
再下个阶段,你需要学习的是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++PrimerPlus,Java我不喜欢,就不推荐了。工具方面推荐VIM的官方手册,GCC中文文档,GDB中文文档,GNU开源软件开发指导(电子书),汇编语言程序设计(让你对库,链接,内嵌汇编,编译器优化选项有初步了解,不必深度)。
如果你这个阶段过不了就不必往下做了,这是底线,最基础的基础,否则离开,不要霍霍Linux开发。不专业的Linux开发者作出的程序是与Linux文化或UNIX文化相背的,程序是走不远的,不可能像Bash,VIM这些神品一样。所以做不好干脆离开。
接下来进入Linux系统编程,不二选择,APUE,UNIX环境高级编程,一遍一遍的看,看10遍都嫌少,如果你可以在大学将这本书翻烂,里面的内容都实践过,有作品,你口头表达能力够强,你可以在面试时说服所有的考官。(可能有点夸张,但APUE绝对是圣经一般的读物,即使是Windows程序员也从其中汲取养分,Google创始人的案头书籍,扎尔伯克的床头读物。)
现在是时候做分流了。大体上我分为四个方向:网络,图形,嵌入式,设备驱动。
如果选择网络,再细分,我对其他的不是他熟悉,只说服务器软件编写及高性能的并发程序编写吧。相对来说这是网络编程中技术含量最高的,也是底层的。需要很多的经验,看很多的书,做很多的项目。
我的看法是以下面的顺序来看书:
APUE再深读–尤其是进程,线程,IPC,套接字
多核程序设计-Pthread一定得吃透了,你很NB
UNIX网络编程–卷一,卷二
TCP/IP网络详解–卷一再看上面两本书时就该看了
5.TCP/IP网络详解–卷二我觉得看到卷二就差不多了,当然卷三看了更好,努力,争取看了
7.Nginx源代码–相较于Apache,Nginx的源码较少,如果能看个大致,很NB。看源代码主要是要学习里面的套接字编程及并发控制,想想都激动。如果你有这些本事,可以试着往暴雪投简历,为他们写服务器后台,想一想全球的魔兽都运行在你的服务器软件上。
Linux内核TCP/IP协议栈–深入了解TCP/IP的实现
如果你还喜欢驱动程序设计,可以看看更底层的协议,如链路层的,写什么路由器,网卡,网络设备的驱动及嵌入式系统软件应该也不成问题了。
图形方向,我觉得图形方向也是很有前途的,以下几个方面。
Opengl的工业及游戏开发,国外较成熟。
影视动画特效,如皮克斯,也是国外较成熟。
GPU计算技术,可以应用在浏览器网页渲染上,GPU计算资源利用上,由于开源的原因,有很多的文档程序可以参考。如果能进火狐开发,或google做浏览器开发,应该会很好。
嵌入式方向:嵌入式方向没说的,Linux很重要。
掌握多个架构,不仅X86的,ARM的,单片机什么的也必须得懂。硬件不懂我预见你会死在半路上,我也想走嵌入式方向,但我觉得就学校教授嵌入式的方法,我连学电子的那帮学生都竞争不过。奉劝大家,一定得懂硬件再去做,如果走到嵌入式应用开发,只能祝你好运,不要碰上像Nokia,Hp这样的公司,否则你会很惨的。
驱动程序设计:软件开发周期是很长的,硬件不同,很快。每个月诞生那么多的新硬件,如何让他们在Linux上工作起来,这是你的工作。由于Linux的兼容性很好,如果不是太低层的驱动,基本C语言就可以搞定,系统架构的影响不大,因为有系统支持,你可能做些许更改就可以在ARM上使用PC的硬件了,所以做硬件驱动开发不像嵌入式,对硬件知识的要求很高。可以从事的方向也很多,如家电啊,特别是如索尼,日立,希捷,富士康这样的厂子,很稀缺的。
LDD–Linux驱动程序设计与内核编程的基础读物
深入理解Linux内核–进阶的
Linux源代码–永无止境的
当然你还的看个方面的书,如《linux就该这么学》啊什么的。
以下是比较经典的Linux编程学习路线:
第一阶段:linux基础入门
1.开班课程介绍-规章制度介绍-破冰活动;
2.Linux硬件基础/Linux发展历史;
3.Linux系统安装/xshell连接/xshell优化/SSH远程连接故障问题排查
4.第一关一大波命令及特殊字符知识考试题讲解
5.Linux基础优化
6.Linux目录结构知识精讲
7.第二关一大波命令及特殊知识考试题讲解(上)
8.第二关一大波命令及特殊知识考试题讲解(下)
9.Linux文件属性一大堆知识精讲
10.Linux通配符/正则表达式
11.第三关一大波命令及重要知识考试题讲解(上)
12.第三关一大波命令及重要知识考试题讲解(下)
13.Linux系统权限(上)
14.Linux系统权限(下)
15.第一阶段结束需要导师或讲师对整体课程进行回顾
第二阶段:linux系统管理进阶
1.Linux定时任务
2.Linux用户管理
3.Linux磁盘与文件系统(上)
4.Linux磁盘与文件系统(中下)
5.Linux三剑客之sed命令
第三阶段:LinuxShell基础
1.Shell编程基础1
2.Shell编程基础234
3.Linux三剑客之awk命令
第四阶段:Linux网络基础
1.计算机网络基础上
2.计算机网络基础下
3.第二阶段结束需要导师或讲师对整体课程进行回顾。
第五阶段:Linux网络服务
1.集群实战架构开始及环境准备
2.rsync数据同步服务
3.Linux全网备份项目案例精讲
4.nfs网络存储服务精讲
5.inotify/sersync实时数据同步/nfs存储实时备份项目案例精讲
第六阶段:Linux重要网络服务
2.nginxweb介绍及基础实践
3.nginxweb精讲结束
4.lnmp环境部署/数据库异机迁移/共享数据异机迁移到NFS系统
5.nginx负载均衡深入透彻
6.keepalived高可用深入透彻
第七阶段:Linux中小规模集群构建与优化(50台)
1.期中架构开战说明+期中架构部署回顾
2.全体昼夜兼程部署期中架构并完成上台述职演讲(加上两个周末共9天)
3.kickstartcobbler批量自动安装系统
4.pptpvpn与ntp服务
5.memcached原理及部署/作为缓存及session会话共享
第八阶段:Ansible自动化运维与Zabbix监控
1.SSH服务秘钥认证
2.ansible批量自动化管理集群(入门及深入)
3.zabbix监控
第九阶段:大规模集群高可用服务(Lvs、Keepalived)
1.Centos7系统自行安装/centos6与7区别
2.lvs负载均衡集群/keepalived管理LVS集群
第十阶段:JavaTomcat服务及防火墙Iptables
1.iptables防火墙精讲上
2.iptables防火墙精讲下
3.tomcatjava应用服务/nginx配合tomcat服务部署及优化
第十一阶段:MySQLDBA高级应用实践
1.MySQL数据库入门基础命令
2.MySQL数据库进阶备份恢复
3.MySQL数据库深入事务引擎
4.MySQL数据库优化SQL语句优化
5.MySQL数据库集群主从复制/读写分离
6.MySQL数据库高可用/mha/keepalved
第十二阶段:高性能数据库Redis和Memcached课程
第十三阶段:Linux大规模集群架构构建(200台)
第十四阶段:LinuxShell编程企业案例实战
第十五阶段:企业级代码发布上线方案(SVN和Git)
1.GIT管理
2.代码上线项目案例
第十六阶段企业级Kvm虚拟化与OpenStack云计算
1.KVM虚拟化企业级实战
2.OpenStack云计算企业级实战
第十七阶段公有云阿里云8大组件构建集群实战
第十八阶段:Docker技术企业应用实践
1.Docker容器与微服务深入实践
2.大数据Hadoop生态体系及实践
第十九阶段:Python自动化入门及进阶
第二十阶段:职业规划与高薪就业指导
自学大数据学习路线:(前提:以Java语言为基础)
总共分为四个模块:
大数据基础
大数据框架
大数据项目
其他
第一模块:大数据基础
Java基础:集合,IO流
JVM:重点是项目调优
多线程:理论和项目应用
Linux:最基本的操作
这一个模块的重点是为了面试做准备,个人根据自己的情况去复习,复习的时候理论部分建议看书和博客资料,应用部分建议看视频和Demo调试。
下面分别去详细的介绍一下:
主要是理论部分,可以看书或者博客总结,这一块没什么推荐的,网上很多资料可以找到。
这两块重点要结合到项目中,通过项目中的实际使用,然后反馈到对应的理论基础,这一块建议在B站上看对应的视频。B站”尚硅谷“官网上的视频很详细。
第二模块:大数据框架
Hadoop:重点学,毕竟大数据是以Hadoop起家的,里面就HDFS,MapReduces,YARN三个模块。
Hive:先学会怎么用,当作一个工具来学习。
Spark:重点学,用来替代Hadoop的MapReduces的,里面重点有三块:SparkCore,SparkSQL,SparkStreaming。
Flink:我还没学。
Hbase:当作一个工具来学习,先学习怎么用。
Kafka:先学怎么用,其实里面的模块可以先理解成两部分:生产者和消费者。所有的核心都是围绕这两个展开的。
Flume:当作一个工具来学习,先学习怎么用。
Sqoop:当作一个工具来学习,先学习怎么用。
Azkaban:当作一个工具来学习,先学习怎么用。
Scala:这个是一门编程语句,基于Java而来的,可以工作后在学习。
Zookeeper:当作一个工具来学习,先学习怎么用。
以上的学习视频和资料可以在B站的”尚硅谷“和”若泽大数据“里找到,很详细。资料目前最详细的资料就是各个框架对应的官网。视频里也是对着官网一步一步讲的。官网都是英文的,可以用Google浏览器的翻译插件,翻译成中文后在看。
第三模块:大数据项目
B站的”尚硅谷“和”若泽大数据“。
第四模块:其他
分布式:知道最基本的概念,有个分布式项目的经验。分布式项目可以在B站的”尚硅谷“里找到。
算法:网上有详细的总结,书:推荐《剑指Offer》和《算法4》,看算法的目的是先掌握实现算法的思路然后才是实现方式。
SQL:主要是调优,网上有很详细的总结。
除此之外:Storm框架不要学了。
很多准备前期都是为了面试,例如:JVM和多线程,SQL调优和算法。这些东西真正使用的过程中千差万别,但核心知识不变,所以面试的时候总是会问,这一块的前期以通过面试为主要点。
学习了差不多了,例如:Hadoop,Hive和Spark学完了,就去面试面试,通过面试的情况在来调整自己的学习。
Linux技术其实很好学,只要你找到方法就行,建议你读读linux的书,比如《linux就该这么学》,这本书写的就挺好的
其他回答
1、先找一本基础的书,我当初用的是鸟哥的linux私房菜,基础篇和服务欺篇,当然了,我介绍我朋友用的也是他哦。貌似网上有电子版的。
2、先大体上浏览一下书。不要很详细的看,看不下去,会烦的。
3、安装一个linux的系统。在虚拟机上就可以了。
4、把你的基础篇的书,从头到尾的敲上一遍,看看会出什么现象,多做试验哦。
5、要做笔记的,把你敲试验的新得体会总结一下,这样就成你的知识了。
6、要多出错误,多排除错误,这是通往高手的必经之路哦。
7、多与别人交流
linux最先要学的是Linux基础知识,学完基础知识才算入门,之后还要学习综合架构、Shell编程、数据库、云计算以及网络安全方面的知识,以下是linux基础部分要学习的内容:
1.计算机硬件、组成原理、操作系统基础、Linux起源、核心介绍及Linux安装实战入门
2.Xshell远程网络连接Linux、基础优化、远程连接网络基础、Xshell连接故障排错、核心基础命令讲解
3.Linux系统核心通配符体系、三剑客(grep,sed,awk)核心正则表达式精讲及企业级案例实战模拟精讲