本篇主要提供鸟哥的Linux私房菜 基础学习篇+Linux多线程服务端编程 使用muduo C++网络库电子书的pdf版本下载,本电子书下载方式为百度网盘方式,点击以上按钮下单完成后即会通过邮件和网页的方式发货,有问题请联系邮箱ebook666@outlook.com
本书是知名度颇高的Linux入门书《鸟哥的Linux私房菜基础学习篇》的新版,全面而详细地介绍了Linux操作系统。
全书分为五部分:第一部分着重说明计算机的基础知识、Linux的学习方法,如何规划和安装Linux主机以及CentOS 7.x的安装、登录与求助方法;第二部分介绍Linux的文件系统、文件、目录与磁盘的管理;第三部分介绍文字模式接口shell和管理系统的好帮手shell脚本,另外还介绍了文字编辑器vi和vim的使用方法;第四部分介绍了对于系统安全非常重要的Linux账号的管理、磁盘配额、高级文件系统管理、计划任务以及进程管理;第五部分介绍了系统管理员(root)的管理事项,如了解系统运行状况、系统服务,针对登录文件进行解析,对系统进行备份以及核心的管理等。
本书内容丰富全面,基本概念的讲解非常细致,深入浅出。各种功能和命令的介绍,都配以大量的实例操作和详尽的解析。本书是初学者学习Linux不可多得的一本入门好书。
鸟哥,中国台湾成功大学环境工程系博士,就学期间由于研究需要接触到Linux操作系统,又因实验室交接需求而建立“鸟哥的Linux私房菜”网站。因个人喜好“絮叨”,网站文章风格就此成形。曾任中国台湾多家知名Linux教育中心讲师,目前于中国台湾昆山科技大学资讯传播系教授Linux相关课程。专长是Linux操作系统、网站规划与维护、网络安全,兴趣是写作与阅读,研究方向是网络应用整合。
一部分 Linux的规则与安装
第0章 计算机概论 2
0.1 电脑:辅助人脑的好工具 3
0.2 个人电脑架构与相关设备组件 9
0.3 数据表示方式 23
0.4 软件程序运行 25
0.5 重点回顾 29
0.6 本章习题 29
0.7 参考资料与扩展阅读 30
第1章 Linux是什么与如何学习 32
1.1 Linux是什么 33
1.2 托瓦兹的Linux的发展 43
1.3 Linux当前应用的角色 51
1.4 Linux该如何学习 55
1.5 重点回顾 60
1.6 本章习题 61
1.7 参考资料与扩展阅读 62
第2章 主机规划与磁盘分区 63
2.1 Linux与硬件的搭配 64
2.2 磁盘分区 69
2.3 安装Linux前的规划 82
2.4 重点回顾 86
2.5 本章习题 87
2.6 参考资料与扩展阅读 87
第3章 安装CentOS7.x 88
3.1 本练习机的规划(尤其是分区参数) 89
3.2 开始安装CentOS7 91
3.3 多重引导安装步骤与管理(可选) 111
3.4 重点回顾 114
3.5 本章习题 115
3.6 参考资料与扩展阅读 115
第4章 首次登录与在线求助 116
4.1 首次登录系统 117
4.2 命令行模式下命令的执行 127
4.3 Linux系统的在线求助manpage与info page 133
4.4 超简单的文本编辑器:na 142
4.5 正确的关机方法 143
4.6 重点回顾 146
4.7 本章习题 146
4.8 参考资料与扩展阅读 147
第二部分 Linux文件、目录与磁盘格式
第5章 Linux的文件权限与目录配置 149
5.1 用户与用户组 150
5.2 Linux文件权限概念 152
5.3 Linux目录配置 165
5.4 重点回顾 173
5.5 本章练习 174
5.6 参考资料与扩展阅读 174
第6章 Linux文件与目录管理 175
6.1 目录与路径 176
6.2 文件与目录管理 181
6.3 文件内容查看 186
6.4 文件与目录的默认权限与隐藏权限 194
6.5 命令与文件的查找 201
6.6 极重要的复习,权限与命令间的关系 205
6.7 重点回顾 206
6.8 本章习题 207
6.9 参考资料与扩展阅读 208
第7章 Linux磁盘与文件系统管理 209
7.1 认识Linux文件系统 210
7.2 文件系统的简单操作 224
7.3 磁盘的分区、格式化、检验与挂载 231
7.4 设置启动挂载 248
7.5 内存交换分区(swap)之创建 252
7.6 文件系统的特殊观察与操作 255
7.7 重点回顾 257
7.8 本章习题 258
7.9 参考资料与扩展阅读 259
第8章 文件与文件系统的压缩 261
8.1 压缩文件的用途与技术 262
8.2 Linux系统常见的压缩命令 263
8.3 打包命令:tar 266
8.4 XFS文件系统的备份与还原 272
8.5 光盘写入工具 277
8.6 其他常见的压缩与备份工具 282
8.7 重点回顾 285
8.8 本章习题 286
8.9 参考资料与扩展阅读 287
第三部分 学习shell与shellscript
第9章 vim程序编辑器 289
9.1 vi与vim 290
9.2 vi的使用 291
9.3 vim的额外功能 299
9.4 其他vim使用注意事项 305
........
《Linux多线程服务端编程 使用muduoC++网络库》主要讲述采用现代C++在x86-64Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即oneloopperthread。这是在Linux下以native语言编写用户态高性能网络程序成熟的模式,掌握之后可顺利地开发各类常见的服务端网络应用程序。本书以muduo网络库为例,讲解这种编程模型的使用方法及注意事项。
《Linux多线程服务端编程 使用muduoC++网络库》的宗旨是贵精不贵多。掌握两种基本的同步原语就可以满足各种多线程同步的功能需求,还能写出更易用的同步设施。掌握一种进程间通信方式和一种多线程网络编程模型就足以应对日常开发任务,编写运行于公司内网环境的分布式服务系统。
陈硕,北京师范大学硕士,擅长C++ 多线程网络编程和实时分布式系统架构。曾在摩根士丹利IT 部门工作5 年,从事实时外汇交易系统开发。现在在美国加州硅谷某互联网大公司工作,从事大规模分布式系统的可靠性工程。编写了开源C++ 网络库muduo,参与翻译了《代码大全(第2 版)》和《C++ 编程规范(繁体版)》,整理了《C++ Primer (第4 版)(评注版)》,并曾多次在各地技术大会演讲。
第1 部分 C++ 多线程系统编程
第1 章 线程安全的对象生命期管理
1.1 当析构函数遇到多线程
1.1.1 线程安全的定义
1.1.2 MutexLock 与MutexLockGuard
1.1.3 一个线程安全的Counter 示例
1.2 对象的创建很简单.
1.3 销毁太难
1.3.1 mutex 不是办法
1.3.2 作为数据成员的mutex 不能保护析构.
1.4 线程安全的Observer 有多难.
1.5 原始指针有何不妥.
1.6 神器shared_ptr/weak_ptr
1.7 插曲:系统地避免各种指针错误.
1.8 应用到Observer 上
1.9 再论shared_ptr 的线程安全.
1.10 shared_ptr 技术与陷阱
1.11 对象池.
1.11.1 enable_shared_from_this
1.11.2 弱回调.
1.12 替代方案
1.13 心得与小结.
1.14 Observer 之谬.
第2 章 线程同步精要
2.1 互斥器(mutex) .
2.1.1 只使用非递归的mutex
2.1.2 死锁
2.2 条件变量(condition variable) .
2.3 不要用读写锁和信号量
2.4 封装MutexLock、MutexLockGuard、Condition
2.5 线程安全的Singleton 实现
2.6 sleep(3) 不是同步原语
2.7 归纳与总结.
2.8 借shared_ptr 实现copy-on-write
第3 章 多线程服务器的适用场合与常用编程模型
3.1 进程与线程.
3.2 单线程服务器的常用编程模型
3.3 多线程服务器的常用编程模型
3.3.1 one loop per thread
3.3.2 线程池.
3.3.3 推荐模式
3.4 进程间通信只用TCP .
3.5 多线程服务器的适用场合.
3.5.1 必须用单线程的场合.
3.5.2 单线程程序的优缺点.
3.5.3 适用多线程程序的场景
3.6 “多线程服务器的适用场合”例释与答疑
第4 章 C++ 多线程系统编程精要
4.1 基本线程原语的选用.
4.2 C/C++ 系统库的线程安全性.
4.3 Linux 上的线程标识
4.4 线程的创建与销毁的守则.
4.4.1 pthread_cancel 与C++ .
4.4.2 exit(3) 在C++ 中不是线程安全的.
4.5 善用__thread 关键字.
4.6 多线程与IO
4.7 用RAII 包装文件描述符.
4.8 RAII 与fork() .
4.9 多线程与fork() .
4.10 多线程与signal
4.11 Linux 新增系统调用的启示
第5 章 高效的多线程日志
5.1 功能需求
5.2 性能需求
5.3 多线程异步日志
5.4 其他方案
第2 部分 muduo 网络库
第6 章 muduo 网络库简介
6.1 由来.
6.2 安装.
6.3 目录结构
6.3.1 代码结构
6.3.2 例子
6.3.3 线程模型
6.4 使用教程
6.4.1 TCP 网络编程本质论.
6.4.2 echo 服务的实现.
6.4.3 七步实现finger 服务.
6.5 性能评测
6.5.1 muduo 与Boost.Asio、libevent2 的吞吐量对比
6.5.2 击鼓传花:对比muduo 与libevent2 的事件处理效率
6.5.3 muduo 与Nginx 的吞吐量对比.
6.5.4 muduo 与ZeroMQ 的延迟对比.
6.6 详解muduo 多线程模型.
6.6.1 数独求解服务器
6.6.2 常见的并发网络服务程序设计方案.
第7 章 muduo 编程示例
7.1 五个简单TCP 示例
7.2 文件传输
7.3 Boost.Asio 的聊天服务器.
7.3.1 TCP 分包
7.3.2 消息格式
7.3.3 编解码器LengthHeaderCodec
7.3.4 服务端的实现.
7.3.5 客户端的实现.
7.4 muduo Buffer 类的设计与使用.
7.4.1 muduo 的IO 模型
7.4.2 为什么nn-blocking 网络编程中应用层buffer 是必需的
7.4.3 Buffer 的功能需求
7.4.4 Buffer 的数据结构
7.4.5 Buffer 的操作.
7.4.6 其他设计方案.
7.4.7 性能是不是问题
7.5 一种自动反射消息类型的Google Protobuf 网络传输方案
7.5.1 网络编程中使用Protobuf 的两个先决条件.
7.5.2 根据type name 反射自动创建Message 对象
7.5.3 Protobuf 传输格式
7.6 在muduo 中实现Protobuf 编解码器与消息分发器
7.6.1 什么是编解码器(codec)
7.6.2 实现ProtobufCodec .
7.6.3 消息分发器(dispatcher)有什么用
7.6.4 ProtobufCodec 与ProtobufDispatcher 的综合运用.
7.6.5 ProtobufDispatcher 的两种实现
7.6.6 ProtobufCodec 和ProtobufDispatcher 有何意义.
7.7 限制服务器的大并发连接数
7.7.1 为什么要限制并发连接数
7.7.2 在muduo 中限制并发连接数
7.8 定时器.
7.8.1 程序中的时间.
7.8.2 Linux 时间函数
7.8.3 muduo 的定时器接口.
7.8.4 Boost.Asio Timer 示例
7.8.5 Java Netty 示例
7.9 测量两台机器的网络延迟和时间差.
7.10 用timing wheel 踢掉空闲连接
7.10.1 timing wheel 原理
7.10.2 代码实现与改进
7.11 简单的消息广播服务.
7.12 “串并转换”连接服务器及其自动化测试
7.13 socks4a 代理服务器
7.13.1 TCP 中继器
7.13.2 socks4a 代理服务器
7.13.3 N : 1 与1 : N 连接转发
7.14 短址服务
7.15 与其他库集成.
7.15.1 UDNS .
7.15.2 c-ares DNS .
7.15.3 curl .
7.15.4 更多
第8 章 muduo 网络库设计与实现
8.0 什么都不做的EventLoop .
8.1 Reactor 的关键结构
8.1.1 Channel class .
8.1.2 Poller class
8.1.3 EventLoop 的改动.
8.2 TimerQueue 定时器
8.2.1 TimerQueue class .
8.2.2 EventLoop 的改动.
8.3 EventLoop::runInLoop() 函数
8.3.1 提高TimerQueue 的线程安全性.
8.3.2 EventLoopThread class
8.4 实现TCP 网络库
8.5 TcpServer 接受新连接
8.5.1 TcpServer class
8.5.2 TcpConnection class .
8.6 TcpConnection 断开连接.
8.7 Buffer 读取数据
8.7.1 TcpConnection 使用Buffer 作为输入缓冲.
8.7.2 Buffer::readFd()
8.8 TcpConnection 发送数据.
8.9 完善TcpConnection
8.9.1 SIGPIPE
8.9.2 TCP o Delay 和TCP keepalive
8.9.3 WriteCompleteCallback 和HighWaterMarkCallback .
8.10 多线程TcpServer .
8.11 Connector .
8.12 TcpClient .
8.13 epoll
8.14 测试程序一览.
第3 部分 工程实践经验谈
第9 章 分布式系统工程实践
9.1 我们在技术浪潮中的位置.
9.1.1 分布式系统的本质困难
9.1.2 分布式系统是个险恶的问题.
9.2 分布式系统的可靠性浅说.
9.2.1 分布式系统的软件不要求7 24 可靠
9.2.2 “能随时重启进程”作为程序设计目标.
9.3 分布式系统中心跳协议的设计
9.4 分布式系统中的进程标识.
9.4.1 错误做法
9.4.2 正确做法
9.4.3 TCP 协议的启示
9.5 构建易于维护的分布式程序.
9.6 为系统演化做准备.
9.6.1 可扩展的消息格式
9.6.2 反面教材:ICE 的消息打包格式.
9.7 分布式程序的自动化回归测试
9.7.1 单元测试的能与不能.
9.7.2 分布式系统测试的要点
9.7.3 分布式系统的抽象观点
9.7.4 一种自动化的回归测试方案