推荐一些Linux基础学习书籍
这是我给我司同事推荐的关于Linux基础学习的一些书籍,稍作整理放到这里。其中1/2/3三本属于入门书籍,4/5两本属于进阶书籍,最后几本则稍微难点。
1. The Linux Command Line
这本书是我见过的介绍Linux命令行最好的材料,也是较好的Linux入门书籍之一。整本书的结构非常清晰,书中提到的命令行也是恰到好处的简单——但确实又是一些非常有用、常用的命令,即使没怎么接触过Linux的同学,读起来应该也不用花多少精力,而且对于每个专题下面作者还会有相应介绍,有助于理解背景和使用场景。这本书大家最好能够全部阅读,推荐大家一边阅读一边找台Linux的机器上尝试一下,估计你们最多一个星期的晚上就能看完。
2. Beginning Linux Programming 4th Edition
Linux 编程的入门书籍,这本书大家可以跳着看。对于软件人员来说,我推荐大家阅读第3章、第4章、第7章文件锁一节、以及第11章到15章。虽然这本书部分内容和APUE(Advanced Programming in Unix Env)有些重叠——比如像IPC之类核心部分,但是考虑到APUE介绍这些内容时,通常还会介绍其他类UNIX的实现,可能会对大家的理解造成某些混淆。所以我还是推荐大家看这部分内容,应该花不了多长时间。
3. The Unix Programming Environment
Unix的诞生地Bell实验室计算机的科学家、《C语言程序设计》的作者Kernighan写1983年写的,经典成就经典。这是我接触的第一本Unix/Linux的学习书籍,多年以后想来依旧很美好。不推荐大家都去看了,仅仅推荐那些有情怀的同志们去看看。
4. Advanced Programming in the Unix Environment
简称APUE,被称为Unix及Linux系统编程领域“圣经”。这本书被人推崇的原因——用现在流行的话来说,就是“干货十足”,书中对于进程、进程间的关系、进程控制和同步、线程、线程控制和同步、Daemon、IPC、同步IO异步IO等内容的讲解是本书的精华部分,当你看完这些内容,然后去实践一段时间(比如看看平台CCS的代码),然后再回来看这书可能就会有这种感受。这本书是一本大块头的书,英文版本有1000多页,中译版本有700多页(中文翻译的不怎么样)。虽然如此,我还是推荐大家耐心的读一下整本书籍,同时最好能够把里面的一些代码示例都敲到电脑里面试一下。
5. Linux.Kernel.Development.3rd.Edition
Linux内核入门书籍。Linux内核有多少行呢?3.17.x版本的大概是1200多万行,最新的.0版本应该更多,这么庞大的一个代码库对大家来说简直是汪洋大海!所以给大家推荐此书。考虑有二:一个是简单——如果大家有前面的基础之后,看下来应该不会有什么大碍,不至于退却;另一个是到位,内容覆盖应该都是很核心的内容,可以很好的让你建立一个知识图谱,又摒弃了很多操作系统设计里面的很多细枝末节。这本书最好全部阅读。
6. Linux Kernel Driver and Professional Linux Kernel Architecture
这两本书可以作为参考书籍。你需要了解某些内容的时候,如果这两本书里面有,就可以找到对应的章节去翻一下。比如前段时间,在我司项目上需要共享内存,但DSP使用的物理地址的模型,ARM使用的虚拟地址模型,怎么办呢?我就挑选了Linux Kernel Driver的DMA章节看了一下,然后找了一个比较合理的解决方案出来;另如,之前一直有ARM上面的时钟精度不够的问题,为了了解能不能满足我们的实时性要求,我就挑了PLKA里面的时间管理相关的章节看了看。如此等等,不过大家对这两本书不用强求。
7. 深入调试的技术和工具(Debug.Hacks中文版)
工具书。这本书我推荐大家在开始干活的时候就去大概晃一眼。对Linux应用层的程序员来说,strace, valgrind, gdb, coredump等都是必要的调试工具,Kernel的一些调试技术大家可在需要的时候去看看。
8. TCP/IP 详解(卷一)
推荐大家去晃一下ARP,IP,TCP,UDP等基础协议内容。
