很多朋友应该已经知道,我是由机械强行转行到 Linux。但是,我是 Linux 应用开发,而不是运维!所以,很多朋友拿一些运维相关的问题来问我,我也答不上来啊!
我不是说运维工程师怎样,只是说,这是两个不同的方向。我是做 Linux 的,但不代表关于Linux的什么都懂。就像你们天天用 Windows 电脑,但你们会在 Window 下开发个应用程序吗(专业人员除外)?
由于我自己也是个转行的,所以我的底子相对科班来讲肯定要薄弱。但是,我也是在不停的学习,丰富自己的知识,提高自己的技能。下面我结合自己的自学经历,谈一谈自己对于Linux学习的一些经验与看法。
很多学习经验我已经分享到了我的那篇自学之路,点击下文即可查看:
Linux 常用命令怎么学?
不管是做 Linux 哪个方向的,Linux 的一些基本操作是肯定需要过关的。对于这些基本操作,百度上搜索一下「Linux 常用命令」,会出来一堆的资料。这些资料里,挑一个最顺眼的看就可以了。
很多人推荐「鸟哥的私房菜」,但我并不是很推崇它。对于运维人员来讲,这是一本必备书,但如果仅仅是学习 Linux 的基本操作的话,完全没必要这本书。为啥呢?因为这本书面面俱到,对于初学者来讲,肯定是量太大了。
Linux 的命令有非常多个,但常用的命令可能也就那么二三十个。所以,先把那些命令全部学完之后,再去拓展更高级的命令。有些命令你可能一辈子都用不到,所以千万不要要求自己全部掌握 Linux 所有命令。
Linux 应用开发是什么?
很多朋友一直在问我,Linux 应用开发到底是什么?我通常会拿 Windows 应用程序来比喻:
QQ 是 Windows下的一个应用程序是吧?Windows 是操作系统,而 QQ 就是跑在 Windows 上的一个应用程序。而 Linux 应用开发就是在 Linux 操作系统上开发一个类似于 QQ 这样的应用程序。
所以 Linux 应用开发更偏向的是 开发 ,而运维更偏向的是 Linux 的一些操作。
对于 Linux 应用开发的学习请查看下文:
Linux 底层开发学习方法
Linux 还有一个重要的方向是底层开发。很多公司,特别是小公司,经常是底层开发人员由应用开发人员一并兼任,所以,底层开发也是嵌入式人员需要掌握的技能之一。
对于底层开发,一般涉及到四个方面:bootloader、内核、驱动程序、根文件系统。学好这四个方面,基本上就是一个合格的底层开发工程师。
bootloader
bootloader 其实就是一个复杂一些的裸板程序。虽然复杂了一些,但还是很多人把它看懂了,并且很多高手甚至自己动手写了另外一个功能相同的 bootloader。
bootloader 涉及到比较底层的操作,直接面对硬件,所以需要有一定的硬件知识。可以参考的书籍是:ARM体系架构与编程,嵌入式Linux应用开发完全手册,除此之外,可以参考韦东山的1期视频。
内核
内核是一个非常庞大的代码,想要把它看完读懂要花费不少的时间。当然,对于新手,千万不要要求自己去看懂内核,除非你是学生。对于内核,可以参考两本书:Linux内核完全注释,Linux内核源代码情景分析。
驱动程序
同样的,驱动程序部分也是直接面对硬件,所以硬件知识是必不可少的。要想写好驱动,一定要学会看原理图,读懂芯片手册。没有别的办法,多练吧。对于驱动,可以参考的书有:Linux设备驱动开发,Linux设备驱动开发详解,嵌入式Linux应用开发完全手册,除此之外,可以参考韦东山的2期视频。
根文件系统
根文件系统首先是内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。
Tips:
对于底层开发的学习,没有特别的办法,就是要做到多看、多理解、多练。有时可能会比较繁琐,写了很多代码,改了很多参数,但是却一直没达到预期效果。遇到这种情况,一定要沉住气,一步步排查,找到问题的症结点。