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系统编程手册(下版)》

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux系统编程是指在Linux操作系统下进行程序开发的过程和技术。它包括了使用系统调用、编写应用程序、处理文件和目录、进程管理等一系列操作。 在Linux系统编程中,可以使用系统调用来获取系统相关的信息,比如时间和日期。你可以使用time函数来获取当前的系统时间,date函数来获取当前的日期。这些函数可以帮助你获取到你所需要的系统信息。 此外,你可以使用Linux系统下的/proc虚拟文件系统来获取更详细的系统信息。在/proc目录下,每个进程都有一个对应的子目录,其中包含了该进程的相关信息。你可以读取这些文件来获取进程的状态、文件描述符等详细信息。 在Linux系统编程中,你可以使用system函数来执行shell命令。这个函数可以让你在程序中方便地执行任意的shell命令。比如,你可以使用system("ls -la")来执行ls命令来列出当前目录下的所有文件和文件夹。你也可以使用system("echo HelloWorld")来执行echo命令打印出HelloWorld。 除了上述内容,Linux系统编程还涉及到进程管理、文件和目录操作、进程通信等方面的内容。你可以使用fork函数创建子进程,使用exec函数执行新的程序,在程序之间进行进程通信等等。这些都是Linux系统编程中常见的任务和技术总结起来,Linux系统编程是在Linux操作系统下进行程序开发的过程和技术,包括使用系统调用、处理文件和目录、进程管理、进程通信等一系列操作。通过使用系统调用和/proc虚拟文件系统,你可以获取到系统的相关信息。同时,使用system函数可以方便地执行shell命令。这些都是Linux系统编程中常见的内容和技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值