工作几年来,一直从事Linux内核驱动方面的开发。从接触Linux到现在,读过不少Linux方面的书籍,现把认为很不错的一部分列出来和大家分享一下。
入门类
一直认为,在一个系统上学习开发之前,首先需要熟悉这个系统的使用。鉴于天朝的国情,绝大部分人第一个接触的操作系统就是Windows,因此对于这绝大部分人来说,如果要学习Linux开发,学会使用这个系统都是必不可少的一个环节。
现在的Linux初学者是幸福的,随着Linux桌面环境越来越易用,入门一个新的系统是非常容易的事情。虽然命令行对于提高工作效率更加有效,但我们完
全可以把熟悉命令的过程放到日常使用中进行。无论学习什么知识,在实践中学习都是高效而且有趣的。在这个阶段,我们也未必一定需要书籍。现在很多
Linux发行版的Wiki写得都非常详细,在使用某一种发行版时找到相应的Wiki阅读查询就可以了。而且,桌面环境变化太快,关于桌面的介绍类书籍几
乎都没有必要看,这类书籍大多刚一出版就过时了。
那入门类书籍里哪些比较有价值呢?我比较推荐涉及的技术相对比较稳定的书。比如,Linux基本的体系结构和命令一般都是经久不变的,甚至从上古时期的Unix开始就没太多变化,这类书籍讲解的知识也是以后大幅提高我们的生产力的基础。比如《鸟哥的Linux私房菜》
,比如《Unix Power Tools》
(中译名是“UNIX超级工具”),或者是为Linux+认证考试准备的《Linux+ Study Guide》
。当然,这一类书籍其实都不必精读,快速浏览之后作为工具书备查就可以了。
编程类
类Unix系统的编程书籍里,最经典的莫过于简称为APUE的《Advanced Programming in the UNIX Environment》
(中
译名是“Unix环境高级编程”),这本书被广大Unix程序员(包括Linux)捧为“圣经”。借用葛大爷的广告词:“这就像进馆子一样,一条街上,哪
家人多我进哪家”。APUE对类Unix系统的编程接口讲解的非常全面详细,对于这本书,我们不仅要精读,还应该放在案头常备。
但是,APUE对于Linux编程初学者似乎稍深了一点,而且很多细节在Linux中并不会用到。讲述Linux编程的书籍里,《Advanced Linux Programming》
应该更加适合初学者。不要被书名中的“Advanced”吓到,书里的内容还是很容易理解的。看完这本书再看APUE应该效果会更好。
如果要开发GUI程序,上面两本书就无能为力了。在Linux世界里,最常用的GUI Toolkit是GTK+和QT。
GTK+的书籍并不多,在线文档只适合查阅,并不是一个完整的学习体系。《Foundations of GTK+ Development》
是其中很不错的一本书,喜欢GTK+的开发者可以拿来作为入门书籍。
相对来说,QT的书籍就很丰富了,这和QT具有良好的跨平台能力有很大关系,QT的书籍并不只是写给Linux程序员看的,在Windows和MAC OSX下同样可以使用QT开发程序。比较值得一看的QT类书籍有《C++ GUI Programming with QT4》
、《Foundations of QT Development
》、《The Art of Building QT Applications》
,这三本都比较适合QT初学者阅读。另外,《Advanced Qt Programming
》会介绍到QT一些比较高级的用法,适合有一定QT基础的读者阅读。
内核类
对于Linux内核或者设备驱动的开发者,最全面最直接的学习资料一定是Linux内核代码及其文档。Linux内核的发布周期很短,相关书籍的出版完全
跟不上脚步。但随着内核代码的日益庞大,学习曲线越来越陡峭,入门者又非常需要书籍来作为指导,这确实是非常矛盾的事情。所幸,很多Linux内核技术作
家也是很勤奋的,经常会更新自己的作品。就像Robert Love,以2.6内核为蓝本的《Linux Kernel Development
》已经更新到第三版了。LKD是非常适合内核初学者阅读的一本好书,对它的评价可以引用陈莉君老师的译者序:
相对于 Daniel P. Bovet 和 Marco Cesati 的内核巨著《 Understand the Linux Kernel
》,它少了五分细节,相对于实践经典《 Linux Device Drivers 》,它多了五分说理。可以说,本书填补了 Linux
内核理论和实践之间的鸿沟,“一桥飞架南北,天堑变通途”。
谢谢陈老师,她的译者序帮我引出了另外要谈到的两本经典书籍,对,就是《Understanding the Linux Kernel》
和《Linux Device Drivers
》。对于这两本书,如果要挑它们的缺点,我只能说,内容有点老,很多知识点都需要更新了,除此之外,我要说的是,是它们把我带上了内核驱动开发这条路上来,当然,还有LKD。
最近,我又发现一本分析Linux内核的优秀书籍,就是《Professional Linux Kernel Architecture》
。这本书我目前正在读,写得非常好,而且因为此书相对较新(只是相对,2.6.24内核在现在看来也很老了),没有看过ULK的同学可以直接看这本书。
工具类
工欲善其事,必先利其器。进行Linux开发,相关工具还是需要熟练使用的。比如,GNU Tool Chain、自动构建工具、编辑器、版本控制工具等等。
这里有一本包罗万象的书,叫做《Handbook of Open Source Tools
》,书中介绍了各种各样的开源工具,可称之为开源技术的总决式。这本书试图面面俱到,因此并不深入,粗读即可。
GNU Tool Chain参考Redhat的《The GNUPro Toolkit
》已经足够了,如果单独把makefile拎出来,还可以参考《Managing Projects with GNU Make
》。
自动构建工具可以参考《Autotools
》。如果您准备使用cmake,推荐cjacker的《Cmake实践
》。《Mastering CMake
》据说是cmake的权威书籍,但一直无缘得见啊。
说到编辑器,在Linux里最著名的莫过于Vim和Emacs,关于这两者的背景,可以去看看《为何Emacs和Vim被称为两大神器
》。我几乎没用过Emacs,曾经在当当做活动时花9块钱买了一本《学习GNU Emacs
》,有这本书作为Emacs的入门我想应该够了。Vim是我经常使用的编辑器之一(另一个是Kate,最初喜欢上Kate的原因之一就是它提供了Vim编辑模式),相关的书籍有两本值得一读:《A Byte of Vim
》和《Hacking Vim 7.2
》,但是对于初学者,首先跟着Vim自带的vimtutor练习效果会更好。
Linux下的版本控制工具很多,有传统的Subversion,也有现在非常流行分布式工具如Git等。Subversion可以参考这本《Version Control with Subversion
》,Git可以参考《Version Control with Git
》或者《Git Internals
》或者《Pro Git
》。
其它
除了以上几个类别,还有一些书籍值得推介。
比如《The Art of Unix Programming
》,主要介绍了Unix系统领域中的设计开发哲学、思想文化体系以及社群文化等,覆盖面非常广。书中的一些内容和《Revolution OS
》有相似之处,大家可以自己印证一下。对于这本书,我们也完全可以把它当做小说或者历史书来看,可以躺在床上看,也可以瘫在沙发上看,或者像怪怪那样坐在马桶上看,总之,不必一定要端坐在书桌前。
《Computer Systems: A Programmer's Perspective
》
很多人都推荐过,这是一本非常经典的计算机体系方面的教材。CSAPP的内容基础全面,讲解简明扼要,易于理解,仔细读完之后对理清计算机体系结构甚至是
Linux内核都非常有帮助的。虽然中文名被译为《深入理解计算机系统》(这个译名很不贴切),但相比之下,为什么会让人感觉国内的同类教材更加“深奥”
呢?也许,这就是作者功力的差距吧。
分享到:
相关推荐
应用广泛的嵌入式操作系统——ZZ-Linux.pdf
base zz zz zz zz zz base zz zz zz zz zz base zz zz zz zz zz base zz zz zz zz zz
### Linux经典书籍资源 #### 1. Linux经典书籍概述 根据所提供的信息,这些资源都是关于Linux的经典书籍,涵盖了从基础到高级的各种主题。由于这些资源来源于网络,并且没有明确的时间限制或版权说明,因此在使用...
在Linux操作系统中,`util-linux`工具包是一个不可或缺的部分,它包含了大量用于系统管理、文件操作和用户交互的命令行工具。源码分析对于开发者和系统管理员来说具有很高的价值,因为它允许他们理解这些命令的工作...
ZZ561401.CAB ZZ561401.CAB ZZ561401.CAB
详细讲解linux操作系统安装7z压缩程序步骤,介绍7z软件使用,还有错误处理说明。
Linux 内核版本格式为 XX.YY.ZZ: - XX 表示主版本号。 - YY 表示次版本号。 - ZZ 表示修订版本号。 如果 YY 是偶数,则表示这是一个稳定性版本;如果是奇数,则表示是开发版本。例如,2.6.0 是一个稳定性版本。 ...
我的资源zzzzzzzzzzzzz
Linux入门基础教程旨在引导初学者理解并掌握这个开源操作系统的基础知识。Linux是一套遵循POSIX标准的类Unix系统,它的核心在于多用户、多任务、多线程和多CPU的支持,能够运行各种UNIX工具软件、应用程序和网络协议...
wincc SIMATIC WinCC是第一个使用最新的32位技术的过程监视系统,具有良好的开放性和灵活性。 从面市伊始,用户就对SIMATIC WinCC印象深刻。
在Linux中,文件权限通过rwx三位权限位表示,分别代表读、写和执行权限,对于用户、用户组和其他用户有独立的权限设定。 **第三部分:Linux编程基础** 3.1 **VI编辑器的使用**:VI(Visual Editor)是Linux中的一个...
2. **版本控制**:Linux内核采用开发版本和稳定版本并存的策略,版本号格式为xx.yy.zz,其中xx为主版本号,yy为次版本号,zz为修订版本号。 3. **开源软件项目**:例如Firefox、OpenOffice和Apache,它们遵循GPL或...
- 内核版本格式为`XX.YY.ZZ`,其中`XX`为主版本号,`YY`为次版本号(奇数表示开发版,偶数表示稳定版),`ZZ`表示小版本号。 - **GPL与LGPL协议**: - **GPL(GNU General Public License)**: - 允许用户复制、...
我们研究了四轻子最终状态ℓ+ℓ-ℓ+ℓ-的产生,这些状态主要由一对弱电Z玻色子ZZ产生。 使用LoopSim方法,我们合并ZZ和ZZ + jet的NLO QCD结果,并获得ZZ产生的近似NNLO预测。 还包括对ZZ过程的精确胶子融合环平方的...
在CAD中想要快速测量长度,在CAD工具栏找到加载应用程序,再点击加载 加载成功后在输入栏输入“zz”(不分大小写)在选择你需要测量的线段即可。
Linux 内核采用了稳定版本和开发版本并存的版本控制方式,版本号的命名格式为 x.yy.zz,其中 x 为主版本号,yy 为次版本号,zz 表示修订的版本号。 二、Linux 系统的安装 Linux 的主流发行版本有 Red Hat、Novell...
cad标高归零,好用的
根据 7zip 官方版本制作的 deb 安装包,可以直接在Linux 系统上使用 `dpkg...本资源仅仅是为方便安装进行的deb包封装,并对可执行文件 `7zz` 进行了重命名复制为 `7zip`,因此安装后使用时可以直接使用`7zip`作为命令。
7. 创建 testnode 节点,关联字符串"zz" create /zk/testnode "zz" 8. 查看节点内容 get /zk/testnode 9. 设置节点内容 set /zk/testnode abc 10. 删除节点 delete /zk/testnode ZooKeeper 工作模式 ZooKeeper ...