关于Linux和Shell的相关书籍

2023-11-20

入门类 
    一直认为,在一个系统上学习开发之前,首先需要熟悉这个系统的使用。鉴于天朝的国情,绝大部分人第一个接触的操作系统就是Windows,因此对于这绝大部分人来说,如果要学习Linux开发,学会使用这个系统都是必不可少的一个环节。
    现在的Linux初学者是幸福的,随着Linux桌面环境越来越易用,入门一个新的系统是非常容易的事情。虽然命令行对于提高工作效率更加有效,但我们完 全可以把熟悉命令的过程放到日常使用中进行。无论学习什么知识,在实践中学习都是高效而且有趣的。在这个阶段,我们也未必一定需要书籍。现在很多Linux发行版的Wiki写得都非常详细,在使用某一种发行版时找到相应的Wiki阅读查询就可以了。而且,桌面环境变化太快,关于桌面的介绍类书籍几乎都没有必要看,这类书籍大多刚一出版就过时了。
    那入门类书籍里哪些比较有价值呢?我比较推荐涉及的技术相对比较稳定的书。比如,Linux基本的体系结构和命令一般都是经久不变的,甚至从上古时期的Unix开始就没太多变化,这类书籍讲解的知识也是以后大幅提高我们的生产力的基础。比如《鸟哥的Linux私房菜》 ,比如《UnixPower Tools》 (中译名是“UNIX超级工具”),或者是为Linux+认证考试准备的《Linux+Study Guide》 。当然,这一类书籍其实都不必精读,快速浏览之后作为工具书备查就可以了。

编程类 
    类Unix系统的编程书籍里,最经典的莫过于简称为APUE的《AdvancedProgramming in the UNIX Environment》 (中 译名是“Unix环境高级编程”),这本书被广大Unix程序员(包括Linux)捧为“圣经”。借用葛大爷的广告词:“这就像进馆子一样,一条街上,哪家人多我进哪家”。APUE对类Unix系统的编程接口讲解的非常全面详细,对于这本书,我们不仅要精读,还应该放在案头常备。
    但是,APUE对于Linux编程初学者似乎稍深了一点,而且很多细节在Linux中并不会用到。讲述Linux编程的书籍里,《Advanced Linux Programming》 应该更加适合初学者。不要被书名中的“Advanced”吓到,书里的内容还是很容易理解的。看完这本书再看APUE应该效果会更好。
    如果要开发GUI程序,上面两本书就无能为力了。在Linux世界里,最常用的GUIToolkit是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 》、《TheArt of Building QT Applications》 ,这三本都比较适合QT初学者阅读。另外,《Advanced Qt Programming 》会介绍到QT一些比较高级的用法,适合有一定QT基础的读者阅读。

内核类 
    对于Linux内核或者设备驱动的开发者,最全面最直接的学习资料一定是Linux内核代码及其文档。Linux内核的发布周期很短,相关书籍的出版完全跟不上脚步。但随着内核代码的日益庞大,学习曲线越来越陡峭,入门者又非常需要书籍来作为指导,这确实是非常矛盾的事情。所幸,很多Linux内核技术作 家也是很勤奋的,经常会更新自己的作品。就像RobertLove,以2.6内核为蓝本的《LinuxKernel Development 》已经更新到第三版了。LKD是非常适合内核初学者阅读的一本好书,对它的评价可以引用陈莉君老师的译者序:
    相对于Daniel P. Bovet 和Marco Cesati 的内核巨著《Understand the Linux Kernel 》,它少了五分细节,相对于实践经典《Linux Device Drivers 》,它多了五分说理。可以说,本书填补了Linux 内核理论和实践之间的鸿沟,“一桥飞架南北,天堑变通途”。
    谢谢陈老师,她的译者序帮我引出了另外要谈到的两本经典书籍,对,就是《Understanding the Linux Kernel》 和《LinuxDevice Drivers 》。对于这两本书,如果要挑它们的缺点,我只能说,内容有点老,很多知识点都需要更新了,除此之外,我要说的是,是它们把我带上了内核驱动开发这条路上来,当然,还有LKD。
    最近,我又发现一本分析Linux内核的优秀书籍,就是《ProfessionalLinux 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编辑模式),相关的书籍有两本值得一读:《AByte of Vim 》和《HackingVim 7.2 》,但是对于初学者,首先跟着Vim自带的vimtutor练习效果会更好。
    Linux下的版本控制工具很多,有传统的Subversion,也有现在非常流行分布式工具如Git等。Subversion可以参考这本《Version Control with Subversion 》,Git可以参考《VersionControl with Git 》或者《GitInternals 》或者《ProGit 》。

其它 
    除了以上几个类别,还有一些书籍值得推介。
    比如《The Art of Unix Programming 》,主要介绍了Unix系统领域中的设计开发哲学、思想文化体系以及社群文化等,覆盖面非常广。书中的一些内容和《Revolution OS 》有相似之处,大家可以自己印证一下。对于这本书,我们也完全可以把它当做小说或者历史书来看,可以躺在床上看,也可以瘫在沙发上看,或者像怪怪那样坐在马桶上看,总之,不必一定要端坐在书桌前。

   《Computer Systems:A Programmer's Perspective 》很多人都推荐过,这是一本非常经典的计算机体系方面的教材。CSAPP的内容基础全面,讲解简明扼要,易于理解,仔细读完之后对理清计算机体系结构甚至是Linux内核都非常有帮助的。虽然中文名被译为《深入理解计算机系统》(这个译名很不贴切),但相比之下,为什么会让人感觉国内的同类教材更加“深奥”呢?也许,这就是作者功力的差距吧。

 

操作系统
《Linux内核设计与实现(第2 版)》
《深入理解Linux内核(第二版)》
《Linux内核分析与编程》
Linux方面的好书最多。其中《Linux 内核设计与实现(第2版)》(RobertLove著,机械工业出版社出版译
著)属短小精悍之作,用作《操作系统概念》的配套正好。
《深入理解Li n u x 内核(第二版)》(Daniel Bovet著,中国电力出版社出版译著)分析全面透彻,不过国外已经出版的最新版尚未引进。
此外,倪继利的《Linux内核分析与编程》(电子工业出版社)是国人的经验总结,赵炯的《Linux内核完全注释》分析的是0.11版内核,适合初学者,都可以列入候选。

驱动程序开发
《Linux设备驱动程序》(第三版)
驱动程序的开发和操作系统内核其实息息相关。所以本书的内容与前面的大类难免会有一些重叠。作为黑客世界的经典,本书实在不需要我多加推荐了。值得一提的是译者(魏永明、耿岳、钟书毅)都是国内Linux界有数的顶尖人物。

系统编程
《UNIX环境高级编程》(英文影印版)(第2版)
R. Stevens也许是有史以来最伟大的技术图书作家,虽然他辞世日久,但是人们对他的景仰反而因为其著作的少有褪色而与日俱增。如果本文的范围扩大到网络编程,他的另外两部“圣经级”著作《TCP/IP详解》和《UNIX 网络编程》也绝对应该入选。本书的地位相当于甚至还超过了Richter著作在Windows世界的地位

转自:http://hi.baidu.com/cchaha0227/blog/item/1b98afce335a5a0493457e70.html

 

入门篇 
    《LINUX权威指南》书不错,写的很全面也比较广,涉及的不深,做为入门书籍不错,可以比较全面的了解linux。另外比较热门的也可以看看《鸟哥的私房菜》等书,偏管理类的书。如果想做server方向的可以找来看看。 

驱动篇 
    《LINUX设备驱动程序 》就是网上说的“LDD”,经典之作,必备书籍。国产经典《Linux驱动详细解》也是一本非常不错的书,很实用,书中源代码分析比较多,基于2440的,对linux外围驱动有很全面的讲解 

内核篇 
    浙江大学的《LINUX内核源代码情景分析》,外国鬼子的《莱昂氏UNIX源代码分析》还有《深入理解linux内核》都是出名的经典巨作。另外赵炯的《LINUX内核完全剖析--基于0.12内核》也非常不错,对内核代码进行了详细的注释,非常有助于对内核的理解和代码的分析。 

Shell 
    《LINUX与UNIX Shell编程指南》 

应用编程 
    不用说了肯定是《unix环境高级编程》被称为unix编程的圣经。 

TCP/IP 
    《TCP/IP详解》作者W.RichardStevens也是《unix环境高级编程》的作者,牛人出的书没有一本不是经典的。但是英年早逝,默哀一下。 

C语言 
    《The C Programming Language》正是作者造出来的c语言,书能垃圾就怪了 
    《c和指针》和《c缺陷和陷阱》两本必备。包含了c语言最容易出错的地方,加深c语言功力的好材料。 


算法 
    《算法导论》

转自:http://yuyunxin511.blog.163.com/blog/static/6137357201010122580223/

 

ABS,高级Bash脚本编程指南,http://www.tsnc.edu.cn/default/tsnc_wgrj/doc/abs-3.9.1_cn/html/

推荐看这本:《Learningthe bash shell》(http://book.douban.com/subject/3296982/)
内容清晰,提纲挈领
书不是很厚,可以很快看完,然后投入实践

1. < < Advanced Bash-Scripting Guide > > ,即ABS,http://tldp.org/LDP/abs/html/。
经典的Online教程,内容全面,对每一个知识点都有相当多的实例,适合系统的学习。之前有翻译的版本出到过3.9.1。

2. < < UNIX Shells by Example Fourth Edition > >
这本书适合用的时候查询,结构很清晰,以语法为主。它的亮点在于将几种常用的不同种类的Shell分开来描述。

3. < < Linux Command Line and Shell Scripting Bible > >

4. < < LINUX与UNIXShell编程指南> >

< < UNIX Shells by Example Fourth Edition > > 推荐这本,网上有中文版pdf。内容丰富,讲解也不错。每个例子都是cshell ,ksh,bash三种都有,最好着重学习一个,个人喜欢bash,简练且紧凑。c shell的交互功能做的倒是不错,不过要是用它写脚本你会想去撞墙。
其实学什么教材倒是其次,坚持只用Linux做桌面环境才是关键,同时拔掉你的鼠标。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于Linux和Shell的相关书籍 的相关文章

  • vue 资料合集

    div class show content p UI组件 br a href https github com ElemeFE element target blank element a 11612 饿了么出品的Vue2的web UI工
  • virtualbox 网络地址转换(NAT)

    因为个人在工作的时候条件比较充足 基本上不需要用到 virtualbox 或者 vmware 等这些虚拟软件 一个是因为他们占用本机的资源挺大的 电脑配置稍微低点就很难受了 所以说的条件充足是因为我多了一台电脑 这台就被我当作练习使用 用的
  • SpringBoot中实现文件的上传和下载

    文件上传 实现策略 将文件上传到指定路径 并将文件的路径信息存储到数据库中 文件上传前台
  • IDEA如何进行debug调试

    IDEA如何进行debug调试 第一步 设断点 打开debug 第二步 使用Debug调试的功能键 程序调试 相信是所有程序员必经之路 因为程序写出来是不可能没有错误的 当然除了非常简单的一些程序之外 相信大家肯定使用过不同的编译软件 都有
  • Vs2019 社区版 内网登录

    问题概述 1 Vistual Studio Community 是免费版 但需要登陆授权 2 由于办公使用的是内网 也是使用离线下载方法安装的 因此无法联网登陆 解决方法 1 外网打开Vistual Studio Community 201
  • 第二十一章 webpack5原理loader概述

    简介 loader其实是一个函数 用来帮助 webpack 将不同类型的文件转换为 webpack 可识别的模块 loader的分类以及执行顺序 1 分类 pre 前置loader normal 普通loader inline 内联load
  • 编译型语言和解释型语言各自的特点和区别,Python的解释器

    编译型语言和解释型语言各自的特点和区别 Python的解释器 编译型语言 将源代码通过编译器编译生成可执行文件 机器指令 再由机器运行机器码 解释型语言 通过解释器逐行解释每一句源代码 打个比方 编译型相当于用中英文词典 翻译器 将一本英文
  • Vue如何封装组件

    要封装一个 Vue 组件 可以按照以下步骤进行操作 创建一个新的 Vue 单文件组件 vue 文件 并命名为你的组件名 例如 MyComponent vue 在组件文件中 使用
  • 关于python传参引发的一些思考

    人总有不会的 遇到一些问题深究下去必定有所收获 这个问题是在我写python爬虫项目的时候的疑问 可能是我太菜了 以前没学透彻 也可能是上学期学Java的时候按值传递的特点给搞混了 因为当时在用多线程的生产者消费者问题处理资源队列 参考别人
  • task_5 - 副本

    Task01 Task06树模型与集成学习笔记整理 1 Task01 信息论基础 决策树分类思想 用树的节点代表样本集合 通过某些判定条件来对节点内的样本进行分配 将它们划分到当前节点下的子节点 这样决策树希望各个子节点中类别的纯度之和应高
  • 内存文件系统提升磁盘性能瓶颈

    author skate time 2011 08 22 提升磁盘性能瓶颈 linux的内存文件系统 ramdisk ramfs tmpfs ramdisk 是块设备 在使用它们之前必须用选择文件系统将其格式化 并且调整文件系统大小比较麻烦
  • 【廖雪峰python进阶笔记】模块

    1 导入模块 要使用一个模块 我们必须首先导入该模块 Python使用import语句导入一个模块 例如 导入系统自带的模块 math import math 你可以认为math就是一个指向已导入模块的变量 通过该变量 我们可以访问math
  • Python Pandas导出Hbase数据到dataframe

    Python导出Hbase数据的思路 使用happybase连接Hbase 使用table scan 扫数据 将得到的数据整理为dataframe格式 将从Hbase中得到的byte类型的数据转为str类型的数据 示例代码 import h
  • 数据结构之哈希(C++实现)

    数据结构之哈希 C 1 哈希概念 顺序结构以及平衡树中 元素关键码与存储位置之间没有对应关系 因此在查找一个元素的时候 要经过关键码多次比较 顺序表查找的时间复杂度为O N 而平衡树中树的高度为O log 2 N 搜索的效率取决于搜索过程中
  • Mybatis

    文章目录 前言 业务逻辑 使用Mybatis实现 使用Mybatis plus实现 前言 工作的时候 遇到了需要将一个数据库的一些数据插入或更新到另一个数据库 一开始使用insert into TABLE col1 col2 VALUES
  • 全国大学生计算机技能应用大赛Java模拟题

    全国大学生计算机技能应用大赛Java模拟题 竞赛官网 http www cnccac com 单选题 1 以下哪个不是java的垃圾回收算法 A 标记清除算法 B 空间分配算法 C 标记整理算法 D 分代回收算法 2 下列名称在java语言
  • cocos 基础动作加上简单特效

    使用文理缓存创建精灵 cc Director getInstance getTextureCache addImage WechatIMG3 png localsp cc Sprite createWithTexture cc Direct
  • Error inflating class androidx.constraintlayout.widget.ConstraintLayout

    今天下载了android studio 3 3 1体验体验新版本来着 没想到新建项目直接来了个这个 android view InflateException Binary XML file line 2 Error inflating c
  • 常见的距离算法和相似度(相关系数)计算方法

    摘要 1 常见的距离算法 1 1欧几里得距离 Euclidean Distance 以及欧式距离的标准化 Standardized Euclidean distance 1 2马哈拉诺比斯距离 Mahalanobis Distance 1
  • vue3 ---- 递归组件生成menu菜单 && 路由守卫鉴权

    目录 递归组件 el menu 父组件 子组件 路由 Vue路由守卫实现登录鉴权 全局守卫 路由独享的守卫 组件内的守卫 完整的导航解析流程 菜单权限 按钮权限 对于一些有规律的DOM结构 如果我们再一遍遍的编写同样的代码 显然代码是比较繁

随机推荐

  • IDEA切换分支导致项目异常, 部分类爆红问题解决

    关于idea切换分支导致项目异常爆红的方式解决两种办法 1 maven 并没有及时刷新 所以 当我们第一时间出现这个问题的时候 首选是刷新maven 如图所示 2 如果刷新mavne 还是没有解决idea 项目爆红的情况的话 那我们就需要考
  • 计算机不能创建用户,Windows10系统无法创建新用户该怎么办?

    由于工作需要 需要对同一台计算机创建多个用户帐户 Windows7操作系统创建新用户的方法很简单 简单几步就能够轻松完成创建 参照Windows7操作系统创建新用户的步骤 发现并不适用于Windows10操作系统 系统会提示需要登录Micr
  • CocosCreator波浪Shader

    waveEffect effect Copyright c 2017 2020 Xiamen Yaji Software Co Ltd CCEffect techniques passes vert sprite vs vert frag
  • Serverless 的前世今生

    作者 阿里云用户组 从云计算到 Serverless 架构 大家好 我是阿里云 Serverless 产品经理刘宇 很高兴可以和大家一起探索 Serverless 架构的前世今生 从云计算到云原生再到 Serverless 架构 技术飞速发
  • 【推荐算法】双塔模型代码(tensorflow)

    推荐算法 双塔模型介绍 MachineCYL的博客 CSDN博客 上文介绍了双塔模型的原理和结构 这篇介绍一下双塔模型的代码实现 我使用的是tensorflow来实现双塔模型和模型训练 一 前期准备 tensorflow使用的版本是2 0
  • 正激拓扑的复位电路

    正激拓扑的复位电路 1 杂谈 2 原理简介 3 分类 3 1 有源钳位 3 2 绕组复位 3 3 RCD复位 3 4 谐振复位 1 杂谈 我发现我有个最大的缺点是不会讲话 每次跟不熟悉的人讲话或者汇报时 就毫无逻辑 紧张的要死 被讨厌的勇气
  • Navicat设置id自增,并随时设置自增的起始值

    一 问题背景 有时候数据里面的表的id为 1 4 13 15等等 如下图 怎么重新设置自增的起始值 使它变成每个增加1 而不是散列的数 如下效果 二 解决方法 选中要修改的表 点击设计表 如下 然后点击 选项 在自动递增那里改为1即可 点击
  • 2022全国职业技能大赛-网络安全赛题解析总结④(超详细)

    2022全国职业技能大赛 网络安全赛题解析总结 自己得思路 模块A 基础设施设置与安全加固 20分 模块B 网络安全事件响应 数字取证调查和应用安全 40分 模块C CTF夺旗 攻击 20分 模块D CTF夺旗 防御 20分 有什么不懂得可
  • MATLAB实现PSO-SVM多输入单输出回归预测(粒子群算法优化支持向量机)

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab仿真内容点击 智能优化算法 神经网络预测 雷达通信 无线传感器 电力系统 信号
  • 循环 for while do..while 以及break和continue

    循环 for 双重for while dowhile continue break 一 for循环 被循环的执行语句为循环体 是否继续执行取决于终止条件语句 所以 循环语句由 循环体和循环的终止条件组成的语句 语句结构 for 初始化变量
  • 桌面怎么设置 计算机 网络连接,电脑桌面的本地连接ip地址可以设置吗_本地连接ip地址设置方法 - 驱动管家...

    1 首先在Win7桌面上找到 网络 入口 如下图 进入Win7网络 2 进入网络之后我们再点击顶部的 网络共享中心 如下图 进入Win7网络共享中心 3 进入Win7网络共享中心之后 我们再点击左侧的 更改网络适配器 如下图 选择更改网络适
  • 经典,一文讲透ESD原理和设计

    一直想给大家讲讲ESD的理论 很经典 但是由于理论性太强 任何理论都是一环套一环的 如果你不会画鸡蛋 注定了你就不会画大卫 先来谈静电放电 ESD Electrostatic Discharge 是什么 这应该是造成所有电子元器件或集成电路
  • Ubuntu20.04通过rsync和inotify实现定时备份与实时备份

    通过rsync和inotify实现定时备份与实时备份 为了避免主服务单点故障 可以将数据备份到远程备份机器 可以使用rsync工具同步Jenkins home到远程 可以利用rsync工具的 exclude from FILE 功能 定制一
  • KVM热迁移

    KVM热迁移 介绍 KVM热迁移的前提是拥有共享存储 以下通过NFS实现KVM热迁移 迁移过程 将一处于运行状态的KVM虚拟机从节点kvm 01迁移到kvm 02后继续运行 准备 主机准备 hostname IP地址 系统 配置 kvm 0
  • Docker 国内镜像地址

    http f1361db2 m daocloud io http hub mirror c 163 com https docker mirrors ustc edu cn
  • c++中的类模板

    C 的类模板为生成通用的类声明提供了一种更好的方法 模板提供参数化类型 即能够将类型名作为参数传递给接收方来建立类或者函数 一 定义类模板 include
  • IndexError: index 5 is out of bounds for axis 1 with size 5

    keras中报错 IndexError index 5 is out of bounds for axis 1 with size 5 原因 大概率是你的数据集label没有设置好 keras中数据集标签需要从0开始 并且连续 类似于下图这
  • Unity WebGL错误集锦

    ips 0 Unity的PlayerSettings的otherSettings或者Publish Settings里面的Enable Exceptions里面选择Full StackTrace 可以在打出的包中的浏览器的webgl打印出错
  • 【计算机基础

    定点数的表示 定点数 小数点的位置固定 例 996 007 常规计数 浮点数 小数点的位置不固定 例 9 96007 10 2 科学计数法 二进制的定点数 浮点数也类似 无符号数 整个机器字长的全部二进制位均为数值位 没有符号位 相当于数的
  • 关于Linux和Shell的相关书籍

    入门类 一直认为 在一个系统上学习开发之前 首先需要熟悉这个系统的使用 鉴于天朝的国情 绝大部分人第一个接触的操作系统就是Windows 因此对于这绝大部分人来说 如果要学习Linux开发 学会使用这个系统都是必不可少的一个环节 现在的Li