Linux本质上是一种运行于PC或PC服务器上的一种UNIX。
UNIX自1969年至今已经有几十年的历史,积累了大量的技术和知识。作为目前最重要的生产环境,Linux在工业界的应用涉及系统管理、部署和运维、服务端开发、嵌入式开发、内核裁剪等等。每一种技能都需要大量的时间进行学习,并需要实际操作进行磨砺。这使得初学者面临海量知识无从下手,学习困难,比较茫然。
为了解决这一问题,本课程选择讲授以Linux系统调用和系统原理为主,系统使用为辅。系统调用是操作系统的接口,不仅定义了操作系统所需要提供的功能,同时也定义了应用程序的行为。通过学习系统调用,不仅能掌握系统级编程本身,向下可以学习操作系统原理,了解内核的功能;向上可以编写系统命令——既然能够编写,使用系统命令更是易如反掌。
通过本课程的学习,学生可以掌握Linux原理以及在Linux下进行系统级开发的相关知识,具体包括:Linux使用,包括GNU Unix命令、man手册、vi编辑器、文件系统管理、shell编程;Linux下使用C语言进行程序开发,我们将学习文件描述符、用户、文件系统、信号、进程、重定向和管道、网络编程、应用服务器、多线程、共享内存、信号量、I/O多路复用等相关的系统调用及开发技术。
当你学习完本课程后,将具备设计、开发和维护大型Linux网络应用程序的能力。往届学生反映,凭借在本课学习的知识,使他们成长为后端开发工程师、运维工程师、以及架构师。希望你也能通过本课程的学习,培养出扎实的操作系统理论基础和系统级软件开发的基本功。
这门课的内容很多,希望你能坚持到最后。
本课程内容目录如下。
第一章 Linux操作系统概述
第二章 基本命令和C语言开发环境
2.1 用语言来操作Linux——会说英语就会用Linux
2.2 man手册——你不需要买任何参考书了!
2.3 管道符和重定向符
2.4 Vi编辑器——初学者的噩梦
2.5 C程序的编译和运行
第三章 文件描述符
3.1 文件描述符——用于表示一个打开文件的非负整数
3.2 读文件-模仿cat命令
3.3 一切皆是文件——只要会读写文件,你能做任何事!
3.4 修改文件描述符的属性
第四章 用户
4.1 用户分类
4.2 如何在系统中表示一个用户?——系统配置文件多在/etc
4.3 添加/删除用户——系统管理命令?就是帮你修改文件而已
4.4 如何在系统中表示一个“已登录”的用户?
4.5 编写who命令
第五章 文件系统
5.1 目录也是文件
5.2 Unix文件系统结构
5.3 编写ls命令
5.4 ls -l详解
5.5 mode详解
5.6 用stat获取文件属性
5.7 位运算和掩码——把bit从整数中抠出来
5.8 编写ls -l
5.9 chmod和umask
5.10 文件的创建和复制:编写cp命令
第六章 信号
6.1 什么是信号?——信号=死亡?
6.2 信号处理
6.3 sleep函数的实现——天天用sleep,你真的懂吗?
6.4 间隔计时器
第七章 进程
7.1 进程概念和进程监视
7.2 进程从哪里来?
7.3 让进程运行程序
7.4 进程是怎么没的?——wait系统调用
7.5 僵尸进程和孤儿进程
第八章 I/O重定向和管道
8.1 标准输入、标准输出与标准错误输出
8.2 最低可用文件描述符原则
8.3 I/O重定向
8.4 管道
第九章 网络编程
9.1 TCP/IP和Socket编程接口
9.2 TCP socket系统调用
9.3 写一个简单的TCP服务器
9.4 写一个简单的TCP客户端
第十章 Web服务器
10.1 HTTP到底是什么?
10.2 编写单进程单线程Web服务器
10.3 编写多进程Web服务器——打电话的客户太多了?多雇一些话务员吧
10.4 编写prefork的Web服务器——客户来了再雇人?我建议你提前雇一些
第十一章 线程
11.1 线程到底是啥?
11.2 POSIX多线程编程
11.3 线程同步:生产者消费者
11.4 消除僵尸线程
11.5 多线程的Web服务器
第十二章 进程间通信
12.1 进程间通信(IPC)
12.2 System V共享内存编程
12.3 使用POSIX信号量进行进程同步
第十三章 I/O多路复用
13.1 什么是I/O多路复用(Multiplexing)?
13.2 select和基于select的Web服务器
13.3 基于epoll的Web服务器
第十四章 调试
14.1 Linux_ELF文件格式
14.2 gdb基本调试方法
14.3 gdb高阶用法
14.4 coredump文件的生成与解析
14.5 常用命令介绍