Linux编程技术总结

前言

所谓Linux编程技术就是在Linux操作系统环境下进行软件开发时所使用的各种编程技术。

一 常见的Linux系统发行版

在介绍常见的 Linux 系统版本之前,首先需要区分 Linux 系统内核与 Linux 发行版系统的不同。
Linux 系统内核 指的是一个由 Linus Torvalds 负责维护,提供硬件抽象层、硬盘及文件系统控制及多任务功能的系统核心程序。
Linux 发行版系统 是我们常说的 Linux 操作系统,也即是由 Linux 内核与各种常用软件的集合产品。

全球大约有数百款的 Linux 系统版本,每个系统版本都有自己的特性和目标人群,下面将可以从用户的角度选出最热门的几款进行介绍。
➢ 红帽企业版Linux(Linux RedHat Enterprise Linux,RHEL

红帽公司是全球最大的开源技术厂商, RHEL 是全世界内使用最广泛的 Linux 系统。 RHEL 系统具有极强的性能与稳定性,并且在全球范围内拥有完善的技术支持。 RHEL 系统也是本书、红帽认证以及众多生产环境中使用的系统。

➢ 社区企业操作系统(Community Enterprise Operating System,CentOS)通过把RHEL系统重新编译并发布给用户免费使用的Linux系统,具有广泛的使用人群。CentOS当前已被红帽公司“收编”。CentOS 系统是通过把 RHEL 系统释放出的程序源代码经过二次编译之后生成的一种 Linux 系统,其命令操作和服务配置方法与 RHEL 完全相同,但是去掉了很多收费的服务套件功能,而且还不提供任何形式的技术支持,出现问题后只能由运维人员自己解决。最主要的原因就是CentOS是免费的!

Fedora:由红帽公司发布的桌面版系统套件(目前已经不限于桌面版)。用户可免费体验到最新的技术或工具,这些技术或工具在成熟后会被加入到RHEL系统中,因此Fedora也称为RHEL系统的“试验田”。运维人员如果想时刻保持自己的技术领先,就应该多关注此类Linux系统的发展变化及新特性,不断改变自己的学习方向。

openSUSE源自德国的一款著名的Linux系统,在全球范围内有着不错的声誉及市场占有率。

Debian稳定性、安全性强,提供了免费的基础支持,可以良好地支持各种硬件架构,以及提供近十万种不同的开源软件,在国外拥有很高的认可度和使用率。

Ubuntu是一款派生自Debian的操作系统,对新款硬件具有极强的兼容能力。Ubuntu与Fedora都是极其出色的Linux桌面系统,而且Ubuntu也可用于服务器领域。

二 Linux的使用

 对于程序员/运维人员而言,一般都是在Linux操作系统平台下进行软件开发/运维管理工作,并且很多时候都是通过Windows系统下的安全终端模拟软件连接Linux服务器主机的方式,常用的终端模拟软件有: Xshell、SecureCRT、putty等。因此,通常情况下,都是使用Linux命令的方式来使用和管理Linux操作系统的。

2.1 Linux基础篇

1、Linux的起源和发展

2、Linux的发行版

3、Linux的安装

4、Linux基础配置

5、桌面环境的使用

2.2 系统管理篇

1、Linux常用命令的使用

2、设备管理,设备文件

3、文件和目录管理

4、软件包管理

5、磁盘和文件系统管理

6、用户和用户组管理

7、进程管理

2.3 网络管理篇

1、网络配置

2、浏览网页

3、收发邮件

4、传输文件

5、远程登录

2.4 程序开发篇

1、Linux编程

  • Linux C/C++ 程序开发
  • Linux系统编程
  • Linux内核开发
  • Linux驱动开发
  • Linux嵌入式开发
  • Linux网络编程

2、Shell 脚本编程

  • 正则表达式
  • grep/egrep,awk/gawk,sed工具的使用。

2.5 服务器配置篇

1、Linux服务器基础知识

2、HTTP服务器,也称为Web服务器

3、FTP服务器

4、Samba服务器

5、网络硬盘(NFS)

6、Tomcat服务器

7、Linux集群

2.6 系统安全篇

1、任务计划:crontab

2、防火墙和网络安全

3、病毒和木马

<参考>

《Linux典藏大系:Linux从入门到精通(第2版)》

三 Linux系统编程

3.1 系统编程主要概念

1、系统调用(syscall)

2、C库,C库由GNU libc提供,简称为glibc库。

3、C编译器,即GCC编译器,还有GDB调试器。

4、标准

(1)POSIX(Portable Operating System Interface,可移植操作系统接口)标准 和 SUS(Single UNIX SPecification,单一UNIX规范) 标准

(2)C语言标准。目前主要使用的是C语言标准是 ISO C99,Linux系统下的C语言标准是 GNU C99,完全兼容 ISO C99。

(3)Linux系统一般认为是按照POSIX.1 和 SUSv3 标准实现的。Linux开发标准为LSB(Linux Standard Base,Linux基本规范),LSB扩展了POSIX 和 SUS,添加了自己的标准。

<参考>

Linux开发标准LSB简介:Linux Standard Base

3.2 Linux系统/环境编程主要内容

1、文件I/O

2、文件和目录管理

3、标准I/O库

4、高级文件I/O

5、进程、进程控制、守护进程、进程间通信(IPC)

6、线程、线程控制:线程属性、线程同步

7、网络IPC:socket套接字

8、内存管理

9、信号(Signal)。使用 kill -l 命令可以打印出Linux支持的所有信号,一共有64个。

10、定时器和时间管理。

11、POSIX IPC、POSIX 消息队列、POSIX 信号量、POSIX 共享内存。

12、Socket套接字网络编程

<参考>

《UNIX环境高级编程(第3版)》

《Linux _Unix系统编程手册(上下版)》

《The Linux Programming Interface(英文版)》

四 Linux内核编程

4.1 系统内核编程主要内容

1、处理器体系结构。主要有 x86 和 arm 两种处理器架构。

2、Linux内核体系结构

(1)Linux内核模式。操作系统的内核模式分为整体式的单内核模式和层次式的微内核模式。最初的Linux 0.12版本内核是采用的单内核模式,现在的Linux则采用的是微内核模式。

(2)Linux内核对内存的管理和使用。物理内存,内存地址空间,内存分段机制,内存分页管理,虚拟地址、线性地址和物理地址的关系。

(3)中断机制

(4)Linux系统调用

(5)系统时间和定时器

(6)Linux进程控制

(7)Linux系统中堆栈的使用方法

(8)文件系统

(9)Linux内核源代码的目录结构

(10)内核系统和应用程序的关系

3、中断和中断处理

(1)中断的概念理解

(2)Linux系统中断管理机制、中断处理程序

(3)注册中端处理程序

(4)编写中断处理程序

(5)中断上下文

(6)中断处理机制的实现

(7)中断控制

4、系统调用(syscall)

(1)应用程序与内核进行通信

(2)系统调用API。基于POSIX标准的应用编程接口。

(3)系统调用号

(4)系统调用处理程序

(5)系统调用的实现

(6)系统调用上下文

5、进程管理

(1)进程描述符、进程控制块(PCB)

(2)进程的创建、进程的生命周期

(3)进程的终止

(4)进程的调度算法

(5)进程地址空间

(6)进程的上下文切换

6、文件系统

(1)文件系统的基本概念

(2)Linux虚拟文件系统

7、内存管理

(1)物理内存初始化、页表映射过程、内核内存布局

(2)slab 分配器

(3)内存管理单元(MMU)、页表、页面、内存管理区等概念

(4)内存映射

(5)malloc、mmap的实现

(6)内存管理数据结构和API

8、内核同步

(1)内核同步基本概念

  • 临界区和竞争条件
  • 互斥锁
  • 死锁

(2)内核同步方法

  • 原子操作与内存屏障
  • Mutex 互斥体
  • 自旋锁
  • 读写锁
  • 信号量
  • 顺序锁

9、定时器和时间管理

(1)内核中的时间概念

(2)硬时钟和定时器

(3)时钟中断处理程序

(4)定时器

(5)延迟执行

<参考>

《Linux系统编程(第2版)》

《Linux内核设计与实现(原书第3版)》

《O'Reilly:深入理解LINUX内核(第3版)》

五 Linux网络编程

5.1 Linux网络编程主要内容

1、 TCP/IP 网络基础

(1)ISO/OSI 的网络模型架构

  • ISO(International Standardization Organization,国际标准化组织)
  • OSI(Open Systems Interconnection Reference Model,开放互联参考模型)
  • OSI 的 7层网络结构
  • OSI 参考模型中的数据传输

(2)TCP/IP网络模型

  • TCP/IP 协议栈参考模型
  • OSI 网络模型 与 TCP/IP 网络模型的区别

(3)网络层的IP协议、ICMP协议、地址解析协议 ARP协议

  • IP(Internet Protocol,互联网协议)协议的报文数据格式
  • ICMP(Internet Control Messages Protocol,网际控制报文协议)
  • ARP(Address Resolution Protocol,地址解析协议)

(4)TCP/IP网络模型中的传输层协议:TCP和UDP协议、SCTP协议

  • TCP(Transmission Control Protocol,传输控制协议)协议的报文数据格式
  • TCP连接的建立的释放过程,俗称为三次握手和四次握手过程。
  • TCP报文的封装和解封过程
  • UDP(User Datagram Protocol,用户数据报协议)协议的数据格式
  • UDP数据的传输过程
  • TCP 与 UDP 的区别
  • SCTP(stream control transmission protocol,流控制传输协议)协议的报文数据格式
  • SCTP 与 TCP 协议的区别

(5)IP地址的组成、掩码、子网划分及端口的含义

  • IP地址的分类
  • 子网掩码
  • 端口

(6)主机字节序和网络字节序

  • 小端字节序、大端字节序
  • 网络字节序的转换

(7)IPv6

  • IPv6 的特点
  • IPv4 与 IPv6 的比较
  • IPv6 头部数据格式

2、Socket 网络编程基础

(1)Socket套接字描述符。

一个socket连接 = [源IP地址:源端口号] + [目的IP地址:目的端口号]

(2)套接字地址结构

  • sockaddr、sockaddr_in、in_addr、sockaddr_in6、in6_addr

(3)Linux网络编程基础

  • 创建socket:socket() 系统调用
  • 命名socket:bind() 系统调用
  • 监听socket:listen() 系统调用
  • 接收连接:accept() 系统调用
  • 发起连接:connect() 系统调用
  • 关闭连接:close() 系统调用
  • 数据读写

<1> TCP数据读写:recv()、send()

<2> UDP数据读写:recvfrom()、sendto()

<3> 通用数据读写:recvmsg()、sendmsg() 或者使用系统调用:read()、write()。

  • 地址信息函数:getsockname()、getpeername()。
  • socket 套接字选型:setsockopt()、getsockopt()。
  • 字节序转换函数:htonl()、htons()、ntohl()、ntohs()。
  • IP 地址转换函数:inet_addr()、inet_aton()、inet_ntoa()。
  • 网络信息API

<1> gethostbyname()、gethostbyaddr()

<2> getservbyname()、getservbyport()

<3> getaddrinfo()、getnameinfo()

3、TCP网络编程流程

(1)TCP服务端

(2)TCP客户端

4、UDP网络编程流程

(1)UDP服务端

(2)UDP客户端

5、SCTP网络编程流程

(1)SCTP服务端

(2)SCTP客户端

6、网络I/O模型

  • 阻塞I/O(Blocking I/O) 模型
  • 非阻塞I/O(Non-blocking I/O) 模型
  • I/O复用(I/O Multiplexing) 模型
  • 信号驱动I/O(Singnal driven I/O) 模型
  • 异步I/O(Asynchronous I/O) 模型

Tip:前四种都是同步I/O,只有最后一种才是异步I/O。

7、I/O复用的实现

  • select、poll、epoll 系统调用
  • 三组I/O复用函数的区别

8、Linux服务器网络编程

(1)循环服务器模型

(2)并发服务器模型

<1> 简单并发服务器模型

[1] 多进程并发模型、进程池技术

[2] 多线程并发模型、线程池技术

特点:并发服务器对客户端的服务请求进行并发处理,服务端每接收一个服务请求,就创建一个进程或线程,然后使用这个新创建进程或线程单一处理对应客户端的服务请求。

<2> TCP的高级并发服务器模型

[1] 单客户端单进程,统一accept()

[2] 单客户端单线程,统一accept()

[3] 单客户端单线程,各线程独自accept(),使用互斥锁进行线程同步

<3> I/O 复用循环服务器模型

上面介绍的并发服务器模型,有一个重大的缺陷,就是它需要创建多个并发执行的处理单元(进程/线程)。当客户端增加时,随着处理单元的增加,系统的负载会逐渐地转移到并发处理单元的现场切换上,频繁的进程或是线程切换,会降低系统的运行效率,甚至导致系统崩溃。而I/O服务循环服务器,则不会造成系统并发处理单元的增加,而处理能力与CPU和内存的速度直接相关。这个服务器模型,在系统开始的时候,会建立不同工作类型的处理单元,例如处理连接的单元、处理业务的单元等。在客户端连接到来的时候,将客户端的连接放到一个状态池中,对所有客户端的连接状态在一个处理单元中进行轮询处理。

5.2 Linux内核网络编程

1、Linux内核中网络部分结构以及分布

2、netfilter 框架

3、Linux防火墙架构 iptalbes。

<参考>

《Linux典藏大系:Linux网络编程(第2版)》

《UNIX网络编程卷1:套接字联网API(第3版)》

《UNIX网络编程卷2:进程间通信(第2版)》

《Linux高性能服务器编程》

《Linux _Unix系统编程手册(下版)》

 

你可能感兴趣的:(Linux编程,Linux编程,Linux)