Linux的修炼之道:从小工到专家

前言html

 

我依然记得在2004年我刚开始使用Ubuntu 4.04的日子,做为学生,能够在Ubuntu网站上申请免费的安装盘,几天之后,一个包含CD的包裹就到了:linux

 

 

从那时候开始,我在Linux平台上度过了不少编程时光,从Linux和Linux社区中学到了不少,我必须得说,经过学习Linux,我变成了一个更好的程序员。 ios

 

若是你有志于在计算机编程领域长久地发展,必定要学习Linux,可是到底学习什么?怎么学习?程序员

 

这是一份给初学者从零开始学Linux的指南。shell

 

为何要学习Linux?编程

 

也许你据说过Linux是***的一个很酷的工具,或者Linux对开发人员更加友好, 我认为学习Linux有三个缘由:服务器

 

1. Linux统治了服务器市场网络

 

大多数服务器都跑Linux, 程序员尤为是Web程序员,你的程序也会跑在Linux上,你须要在Linux上部署代码,维护服务器。架构

 

2. 学习系统级和底层编程编程语言

 

随着物联网的来临,更多的软件涉及到底层编程,使用C/C++编程是基本要求,这种开发一般须要精通Linux技能。 

 

3. 经过Linux学习计算机的基础知识

 

Linux是个开源项目,全世界成千上万的人在维护它,有不少关于Linux内部知识的资源和优秀书籍,对学习操做系统有极大帮助。 

 

Linux学习指南

 

对Linux的学习分为几个层次:

1. 平常使用

2. 在Linux上进行应用开发,操做和维护

3. 系统级开发

4. 内核开发

 

很明显,须要一层层地学习,越往下越难。

 

码农翻身注:

对于普通程序员来讲,作到第二层就差很少了。

对于想成为某个领域专家的程序员,须要达到第三层。

最后一层可能只有少数人,他们多是自由职业者,***,还有很多是大公司的员工。

 

在开始有趣的旅程以前,先来推荐一本Linus Torvalds的自传:

 

 

平常使用

 

这包括:

  • 如何login , logout 

  • 如何联网

  • 如何打开命令行窗口

  • 如何使用命令行安装/卸载软件

  • 如何编辑文本文件

  • 如何建立,移动,删除文件

  • 如何查看压缩文件,提取内容。

 

这个阶段最难的部分就是从图形界面转向命令行。个人建议是就像学游泳那样,把本身扔到水里。不入水永远都学不会游泳。

 

 

因此,必定要在你的PC上安装一个Linux。你可使用多系统,可是不要尝试虚拟机,由于你很容易就会放弃Linux。

 

到底使用哪一个版本的Linux呢?如今可能有十个常见的版本,选择最主流的就好,好比Ubuntu, CentOS等。他们直接的主要区别就是GUI和软件包管理方式。

 

 

Linux上的应用开发

 

Linux上有各类各样的应用开发,例如Web应用,桌面GUI应用,命令行等等。 

 

你可能须要学习Web开发,C/C++/Python或者其余编程语言。

 

在Linux上作开发和在Windows上的体验不一样,这里一般没有一个强大的IDE。大部分时候,你的工具链是一系列的小工具,你须要在shell中把他们“连”在一块儿。

 

 

你须要学习的是:

  • 在一个编辑器中写代码, 常见的编辑器是Vim/Emacs/VSCode

  • 如何编译你的程序

  • 如何从命令行启动你的程序

  • 使用调试器来寻找bug

 

学习一些Shell脚本编程必不可少, 至少你得学到能看懂常见Shell的水平。 

 

如今不少程序员更喜欢Python/Ruby, 可是仍然有不少以前开发的shell脚本须要维护。

 

你须要创建属于你本身的Linux开发环境。把配置文件都记录下来(好比使用Git)。若是你的开发环境搞得很好,编程的效率会有五倍提高。

 

 

《Linux Bible》 and 《Linux命令行大全》会对命令行和开发环境有个很是好的介绍。

 

码农翻身注:在国内,天然是《鸟哥的Linux私房菜》了。

 

在这一阶段花费的学习时间比较长,要保持耐心。 

 

系统级开发

 

若是你的目标是开发那些“底层”的软件,好比存储程序,网络程序,那必需要进入这一层次。 

 

系统级编程和应用层编程大不相同,主要涉及操做系统和网络的东西。

 

你须要学习那些Linux内核对外提供的接口,因为历史和性能的缘由,大部分都是C语言的。 

 

使用GDB来调试程序也是必备的技能,你能够参考《Debuging with GDB》,Valgrind 是另一个有用的内存检查工具。

 

 

《Linux 系统编程》,《Linux系统编程手册》都是很是好的书。

 

网络是系统编程的一个重要编程领域,《Unix网络编程》是你最好的选择。

 

能走到这个阶段但是不简单,只有不多程序员有使用C/C++编程的能力,现代的程序员通常使用更加高级的编程语言例如Python, Ruby ,Java。 

 

技术潮起潮落,可是基础老是不变,系统编程的核心知识能提高你的技能,扩展你的设计能力

 

内核开发

 

成为内核开发人员,那要求但是至关高,能走到这一步,你将是一位受人景仰的英雄人物。 在这个时候,你应该已经学过操做系统的课程了。

 

内核包含不少子模块:内存管理,进程调度,虚拟内存,文件系统,设备管理等。还有不少辅助开发的命令:readelf, nm, ipcs, iostat, objdump, free, chrt, pmap, uptime, top, pidstat, etc.

 

 

Robot Love写的《Linux Kernel Development》是讲述内核开发最好的入门书, 它会给你提供一个很好的内核概览。 

 

中文版名称是《Linux 内核设计与实现》,由陈莉君教授翻译。

 

还有一些内核开发的好书:

《现代操做系统》

《深刻理解LINUX内核》

《深刻Linux内核架构》

 

切记,Linux内核开发的领域太多,初学者不可能同时涉及全部领域。你的学习策略应该是:

 

1. 获取Linux内核的概览。 

 

一个好方法就是读《Linux 内核设计与实现》,或者去读一下Linux早期版本的源码,由于代码要少不少,这里有不少早期的版本:https://mirrors.edge.kernel.org/pub/linux/kernel/Historic/old-versions/

大约两周的时间就能够完成。

 

码农翻身注:两周的时间过短了!

 

MIT开发的教学操做系统xv6也是一个不错的选择:https://pdos.csail.mit.edu/6.828/2012/xv6.html

 

2 专一在特定子模块 

 

选一个你最感兴趣的模块,试图理解它的设计和细节,参与内核开发的社区,阅读相关的文档,加入Linux的mail list;查看别人的补丁,提交你的补丁。 

 

Linux内核社区有本身的协做风格,你须要学习这些规则。

 

你的第一个被接受的补丁,将会是你的一个里程碑,当你在一个领域内有了足够的知识和技能后,切换到别的领域会变的简单。

 

成为内核开发的大师须要花费不少年时间,快乐地编程吧!

相关文章
相关标签/搜索