您的位置:首页 > 运维架构 > Linux

学习linux/unix编程方法的建议

2015-10-04 22:34 309 查看
看了这篇文章,看来自己的路还很长,想成为一个合格的程序员,并不是一件简单的事情。努力吧,呆娃!下面是原文,转过来,作为我程序员之路的一个参考!

------------------------------------------------------------------------------------------------------------------------------------
首先先学学编辑器,vim, emacs什么的都行。 然后学make file文件,只要知道一点就行,这样就可以准备编程序了。
  然后看看《C程序设计语言》K&R,这样呢,基本上就可以进行一般的编程了,顺便找本数据结构的书来看。

  如果想学习UNIX/LINUX的编程,《APUE》绝对经典的教材,加深一下功底,学习《UNP》的第二卷。这样基本上系统方面的就可以掌握了。

  然后再看Douglus E.Comer的《用TCP/IP进行网际互连》第一卷,学习一下网络的知识,再看《UNP》的第一卷,不仅学习网络编程,而且对系统编程的一些常用的技巧就很熟悉了,如果继续网络编程,建议看《TCP/IP进行网际互连》的第三卷,里面有很多关于应用协议telnet、ftp等协议的编程。 如果想写设备驱动程序,首先您的系统编程的接口比如文件、IPC等必须要熟知了,再学习《LDD》2。

------------------------------------------------------------------------------------------------------------------------------------

对于几本经典教材的评价:

  《The C Programing Language》K&R 经典的C语言程序设计教材,作者是C语言的发明者,教材内容深入浅出。虽然有点老,但是必备的一本手册,现在有时候我还常翻翻。篇幅比较小,但是每看一遍,就有一遍的收获。另外也可用谭浩强的《C语言程序设计》代替。

  《Advanced Programing in Unix Envirement》 W.Richard Stevens:也是非常经典的书(废话,Stevens的书哪有不经典的!),虽然初学者就可以看,但是事实上它是《Unix Network Programing》的一本辅助资料。国内的翻译的《UNIX环境高级编程》的水平不怎么样,现在有影印版,直接读英文比读中文来得容易。

  《Unix Network Programing》W.Richard Stevens:第一卷讲BSD Socket网络编程接口和另外一种网络编程接口的,不过现在一般都用BSD Socket,所以这本书只要看大约一半多就可以了。第二卷没有设计到网络的东西,主要讲进程间通讯和Posix线程。所以看了《APUE》以后,就可以看它了,基本上系统的东西就由《APUE》和《UNP》vol2概括了。看过《UNP》以后,您就会知道系统编程的绝大部分编程技巧,即使卷一是讲网络编程的。国内是清华翻译得《Unix网络编程》,翻译者得功底也比较高,翻译地比较好。所以建议还是看中文版。

  《TCP/IP祥解》一共三卷,卷一讲协议,卷二讲实现,卷三讲编程应用。我没有怎么看过。,但是据说也很经典的,因为我没有时间看卷二,所以不便评价。

  《用TCP/IP进行网际互连》Douglus.E.Comer 一共三卷,卷一讲原理,卷二讲实现,卷三讲高级协议。感觉上这一套要比Stevens的那一套要好,就连Stevens也不得不承认它的第一卷非常经典。事实上,第一卷即使你没有一点网络的知识,看完以后也会对网络的来龙去脉了如指掌。第一卷中还有很多习题也设计得经典和实用,因为作者本身就是一位教师,并且卷一是国外研究生的教材。习题并没有答案,留给读者思考,因为问题得答案可以让你成为一个中级的Hacker,这些问题的答案可以象Douglus索取,不过只有他只给教师卷二我没有怎么看,卷三可以作为参考手册,其中地例子也很经典。如果您看过Qterm的源代码,就会知道Qterm的telnet 实现部分大多数就是从这本书的源代码过来的。对于网络原理的书,我推荐它,而不是Stevens的《TCP/IP祥解》。

  《Operating System - Design and Implement》这个是讲操作系统的书,用Minix做的例子。作者母语不是英文,所以英文看起来比较晦涩。国内翻译的是《操作系统 设计与实现》,我没看过中文版,因为翻译者是尤晋元,他翻译的《APUE》已经让我失望头顶了。读了这本书,对操作系统的底层怎么工作的就会有一个清晰的认识。

  《Linux Device Driver》2e ,为数不多的关于Linux设备驱动程序的好书。不过内容有些杂乱,如果您没有一些写驱动的经验,初次看会有些摸不着南北。国内翻译的是《Linux设备驱动程序》第二版,第一版,第二版的译者我都有很深的接触,不过总体上来说,虽然第二版翻译的有些不尽人意,但是相比第一版来说已经超出了一大截。要读这一本书,至少应该先找一些《计算机原理》《计算机体系结构》的书来马马虎虎读读,至少应该对硬件和计算机的工作过程有一些了解。

------------------------------------------------------------------------------------------------------------------------------------

学习linux/unix编程方法的建议,学习Linux的四个步骤:

假设你是计算机科班出身,计算机系的基本课程如数据结构、操作系统、体系结构、编译原理、计算机网络你全修过。

我想大概可以分为4个阶段,水平从低到高:从安装使用=>linux常用命令=>linux系统编程=>内核开发阅读内核源码

其中学习linux常用命令时就要学会自己编译内核,优化系统,调整参数 ,安装和常用命令书太多了,找本稍微详细点的就ok,其间需要学会正则表达式。系统编程推荐《高级unix环境编程》,黑话叫APUE,还有《unix网络编程》。这时候大概还需要看资料理解elf文件格式,连接器和加载器,cmu的一本教材中文名为《深入理解计算机系统》比较好。内核开发阅读内核源码阶段,从写驱动入手逐渐深入linux内核开发,

参考书如下《linux device drivers》,黑话叫ldd,《linux kernel development》,黑话叫lkd,《understading the linux kernel》,黑话叫utlk,《linux源码情景分析》。这四本书为搞内核的必读书籍。

最后,第三阶段和第四阶段最重动手,空言无益,光看书也不罩,不动手那些东西理解不了。

------------------------------------------------------------------------------------------------------------------------------------

linux后台开发必看书

程序设计类

《C++ PRIMER》

系统编程类

《UNIX环境高级编程》W.Richard Stevens:非常经典的书。虽然初学者就可以看,但是事实上它是《Unix Network Programing》的一本辅助资料。国内的翻译的《UNIX环境高级编程》的水平不怎么样,现在有影印版,直接读英文比读中文来得容易。

《Unix网络编程卷二》Unix网络编程卷第二卷没有涉及网络的东西,主要讲进程间通讯和Posix线程。

网络编程类

《Unix网络编程》第一卷讲BSD Socket网络编程接口和另外一种网络编程接口的,不过现在一般都用BSD Socket,所以这本书只要看大约一半多就可以了。

《TCP/IP详解》一共三卷,卷一讲协议,卷二讲实现,卷三讲编程应用,也很经典的。

《用TCP/IP进行网际互连》一共三卷,内容讲解十分精彩。卷一讲原理,卷二讲实现,卷三讲高级协议。感觉上这一套要比Stevens的那一套要好,就连Stevens也不得不承认它的第一卷非常经典。事实上,第一卷即使你没有一点网络的知识,看完以后也会对网络的来龙去脉了如指掌。第一卷中还有很多习题也设计得经典和实用,因为作者本身就是一位教师,并且卷一是国外研究生的教材。习题并没有答案,留给读者思考,因为问题得答案可以让你成为一个中级的Hacker,这些问题的答案可以象Douglus索取,不过只有他只给教师卷二我没有怎么看,卷三可以作为参考手册,其中地例子也很经典。

Linux系统管理类

《linux系统管理手册》《LINUX与UNIX SHELL编程指南》《Advanced Bash Scripting Guide》

系统内核类

《Linux内核代码情景分析》《深入Linux内核源码》

面向对象设计类

《设计模式》《敏捷软件开发:原则、模式与实践》《敏捷项目管理》

内功修炼类

《操作系统:设计与实现(第二版)》《操作系统概念》《数据结构与算法-面向对象的C++设计模式》《编译原理》国防陈火旺

《离散数学及其应用》《计算机组织与体系结构?性能分析》《深入理解计算机系统》【美】Randal E. Bryant David O'Hallaron著v.

初级:熟练使用命令、熟悉Shell编程、能配置简单的服务,清楚各类服务相关的配置文件的位置,能看懂并可修改系统提供的配置脚本(/etc/*.*)

推荐书籍:

《鸟哥的私房菜基础篇、高级篇》

《Advanced Bash Shell》

中级:熟悉TCP/IP原理、OS原理、熟练使用C语言、Linux系统编程、网络编程。

推荐书籍:

《The C Programming Language》

《Unix环境高级编程》

《Linux程序设计》

《TCP/IP协议详解卷一》

《Unix网络高级编程》

高级:

《Linux Device Driver》

《深入理解Linux内核》

《深入理解计算机系统》

《深入理解LINUX网络内幕》

-----------------------------------------------------------

Linux系统和内核编程学习路线

系统编程学习路线

这里推荐几本书,关于学习Linux或其他Unix系统编程,按照由浅入深的顺序:

1 入门篇

《Linux程序设计》,英文名《 Beginning Linux Programming 》

《Linux C编程一站式学习》,国内一老师写的,从C语言到系统编程,非常适合入门,强烈推荐:http://learn.akae.cn/media/

2 提高篇

《UNIX环境高级编程》,Unix系统编程的圣经,没有比这本书更经典的了,网友称呼这书为APUE

《Unix系统编程》,英文名《UNIX Systems Programming: Communication, Concurrency and Threads》,虽然名声没有APUE那么大,但是这本书侧重的并发和通信正好是APUE介绍的比较少的,非Stevens书不读的人要看完APUE之后在《Unix网络编程》第二卷中才能系统的学习到进程间通信。

3 进阶篇

《UNIX网络编程》卷一和卷二,学习到这一步建议就看英文原版了,卷一介绍Socket套接字,卷二介绍进程间通信:

4 高手篇(内核编程)

到这一步就该深人系统内核了,掌握内核可以帮助你更深入透彻的理解计算机系统,写出更好的系统程序。

内核编程从驱动入手不错的选择

1) Linux kernel design and implement Robert love

2) Understanding the Linux kernel

3) Understanding the Linux memory management system

4) Professional Linux kernel architecture

5) Linux device driver
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: