学习linux,首先得看你想用linux作那方面的工做。你能够作一个系统管理员,也能够作一个linux服务器环境开发人员,也能够作网络通讯方面的,甚至底层的能够向驱动程序发展。
先大概讲一下这些方面都作些什么吧。
系统管理没必要多说,你得精通linux的命令和脚本,擅长处理各类数据文件,linux的脚本语言不少,shell是一种。系统管理员最主要的工做所管理维护Linux系统的配置环境,因此这项工做必须熟悉“命令行和脚本”。
环境开发:主要是利用linux现有的系统调用接口SCI,开发基于linux环境的应用程序。什么是SCI,简单来讲,就是Linux内核提供的函数库。例如linux的函数read提供读文件的功能。那么环境开发是个什么样的工做呢?就是利用linux已经提供好的SCI这样一个库函数调用接口,去写一些支持linux系统环境的程序,举个例子,C语言程序员熟知的stdio.h就是依靠SCI编写出来的,环境开发就是在linux提供的SCI上面开发一些函数库,提供比较基本的功能例如数据文件管理,数据库管理等。数据文件管理也能够经过命令行来作,可是命令行作的功能不如环境开发编程能实现的功能强大和灵活。
网络编程:这是linux最为核心的功能之一。linux网络编程提供了在TCP和IP层编程接口,在上面进行的编程涉及到网络层次中的传输层,网络层,链路层。链路层更接近网卡等硬件,网络层和传输层提供了在不一样主机之间传送数据的接口。若是能把Linux网络编程学好,那么看懂nginx这类http服务器源码不会有太大障碍,由于这类开源项目都使用了linux提供的TCP/IP等编程函数库。
驱动开发:若是说,你想进一步往底层硬件发展,使用linux为各类硬件设备写驱动程序,那么驱动开发就是linux一个不错的方向。驱动开发位于内核水平,因此当你作驱动开发的时候,每每须要必定程度的了解linux内核结构。
这里,咱们梳理一下:
任何人学习linux都从最上面的用户层,即便用linux系统功能开始学起,最后才一点点的往底层发展。因此基本的学习顺序是:
linux命令行脚本-->Linux环境开发/网络编程-->linux驱动开发-->linux内核 linux
所以给LZ建议的读书方案是这样的:
(1)学会“使用linux”
不管你往上面哪一个方向发展,一开始要作的应当是学会使用linux的命令行和shell脚本,这一步帮助你了解“怎么使用Linux”。 推荐书籍《鸟哥linux私房菜(上卷)》(鸟哥的下卷是关于linux服务器架站方面的内容,若是你想利用linux搭建一个本身的网络服务器,那么能够看完上卷后继续看下卷),《linux命令行与shell脚本》(这本书主要教你使用shell脚本处理各类linux系统任务)
(2)学会“开发linux用户程序”
这里所说的是在linux提供的SCI库基础上进行编程,写一些应用程序。下面介绍的是本人学过的几本,都是出自同一个做者
unix高级环境编程:主要是关于如何使用linux函数库编写本地用户程序
unix网络编程(steven):主要所关于使用linux函数库编写跨主机网络通讯程序
学习上面书籍过程当中可能涉及到linux的I/O操做,多进程,进程通讯等详细内容。通常咱们在《操做系统原理》上面学的只是抽象的一些I/O操做和多进程的原理,可是上面两本书会告诉你当使用Linux平台的状况下,如何使用操做系统提供的这些功能。
注:UNIX系统和linux系统的SCI在很大程度上是相同的,我推荐你学习《unix网络编程》这本书,你不必定非得用unix系统去写上面的程序,在linux上面也能运行这些程序,unix和linux提供了类似的SCI。
(3)底层硬件开发
我不是作这方面工做的,我以为若是开发硬件,最起码得学过《数字电路》《单片机》《嵌入式系统》。若是说linux涉及到底层硬件开发的书籍,我只能介绍《linux设备驱动程序》这本书,不过本人不作这方面,因此仅供参考。
(4)研究linux内核代码
这估计是不少大牛所从事过的事情:linux是一款开源系统,你能够下linux源代码下来研究linux这样一款系统是如何写出来的。不过直接看源代码估计对大部分人来讲很挑战他们的记忆力和阅读能力。因此我提议LZ若是想研究LINUX内核代码,能够先从linux的架构开始了解,推荐书籍有:
《深刻Linux内核架构》《深刻理解linux内核》
nginx
最后请记住:学习一个操做系统的第一步,就是先学会怎么使用这个系统,因此赶忙安装一个linux发行版,不管是ubuntu仍是centOS,安装好linux系统后,就开始在上面捣鼓命令和脚本吧,而后你就能体会到linux是一款多么强大的系统。若是你还想对linux作更为深刻的了解,在熟悉了linux的命令行使用后,能够向内核或者编程开发进发。这是一段很长的路,祝LZ能够坚持下去,成为一个LINUX技术大牛。程序员