前言

所谓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编程技术总结相关推荐

  1. linux编程技术进程代码,Linux进程通信—信号量 代码实现

    1.信号量使用流程 (1)获得keyVal值.keyVal=ftok(PATH_SHM,PRI_SHM_ID); (2)创建信号量或打开信号量的键值nSemid=semget(keyVal,1,IPC ...

  2. java 编程 pdf linux_Linux编程技术详解.pdf

    Linux编程技术详解全面介绍了linux编程相关的知识,内容涵盖linux基本知识.如何建立linux开发环境.linux开发工具.linux文件系统.文件i/o操作.设备文件.进程与进程环境.守护 ...

  3. 运行时:Linux 和 Windows 2000上的高性能编程技术

    运行时:Linux 和 Windows 2000上的高性能编程技术 建立计时例程       级别: 初级 Edward G. Bradford, 高级程序员, IBM 2001 年 4 月 01 日 ...

  4. Linux运行项目部分空指针,技术文章—Linux编程时遇到Oops提示该如何排查?

    各位工程师在Linux下开发程序时,有没有遇到由于系统中存在某些小故障而跳出了"Oops"提示的情况,此时你是如何排查故障?一行行的查看代码吗?其实不用那么复杂,本文将为你介绍一种 ...

  5. 学习人工智能必须攻克三道门槛:数学基础、英语水平与编程技术

    来源:搜狐 广义的说,人工智能包含诸多不同方法,其主旨是让程序像一个智能体一样解决问题.机器学习是实现人工智能的一种方法,它不完全依靠预先设计,而是从数据中进行总结,达到模拟记忆.推理的作用.包括诸如 ...

  6. Android开发中的多线程编程技术

    Android开发中的多线程编程技术 [IT168技术]多线程这个令人生畏的"洪水猛兽",很多人谈起多线程都心存畏惧.在Android开发过程中,多线程真的很难吗?多线程程序的&q ...

  7. ole2高级编程技术 pdf_21天快速掌握Python语言,《21天学通Python》PDF版送给你去学...

    Python的学习书籍小编看过很多,但是这本<21天学通Python>真的是堪称极品! 本书的作者团队成员为一线开发工程师.资深编程专家或专业培训师,在编程开发方面有着丰富的经验,并已出版 ...

  8. 高等学校计算机科学与技术教材:tcp/ip网络编程技术基础,TCP/IP网络编程技术基础...

    TCP/IP网络编程技术基础 语音 编辑 锁定 讨论 上传视频 <TCP/IP网络编程技术基础>是2012年北京交通大学出版社出版的图书,作者是王雷. 书    名 TCP/IP网络编程技 ...

  9. 给大家推荐一个优质Linux内核技术公众号-Linux阅码场

    作为一个Linux 技术公众号的作者,我觉得有义务推荐优秀的公众号,推广内容,希望对大家的学习有所帮助~ Linux阅码场是一个专注Linux内核和系统编程与调试调优技术的公众号,它的文章云集了国内众 ...

最新文章

  1. 重庆大学转专业2019计算机,关于开展2018年本科学生转专业的通知
  2. 当UG的License服务器换了后, 客户端如何调整?
  3. Python小游戏之 - 飞机大战 !
  4. c语言图片效果,c语言能显示图片吗
  5. 宝贝,我帮你清了购物车哦!
  6. linux文件读保护,Linux Rootkit实现文件保护
  7. HTML5中的audio在手机端和微信端的不能自动播放
  8. python模拟登录淘宝直通车_Python实现的淘宝直通车数据抓取(1)
  9. 【DAY2】hadoop 完全分布式模式配置的学习笔记
  10. Python PIP Mysql-python 报错 ERROR: Command errored out with exit status 1: python setup.py egg_info C
  11. 为GitHub项目加入Travis-CI的自动集成
  12. matleb2016A安装教程
  13. c语言中等于号和大于号的优先级,C  读书笔记之 关系运算符重载 大于号 小于号  等于号==...
  14. 植树问题java,云南省优秀多媒体育软件大赛公示.doc
  15. SOX命令:音频位深度、采样率以及码率
  16. 如何重装windows10系统(超详细图文版)
  17. 前端工程师 后段工程师_如何像工程师一样思考
  18. Cesium添加geojson数据及WMS在线图层服务
  19. Brat文本注释工具的使用文档
  20. list集合移除指定元素

热门文章

  1. 怎么在word文档里面的方框里打勾?
  2. 查看windows系统默认编码 修改windows系统默认编码
  3. Mysql数据库知识点归纳汇总
  4. 程序员是什么又代表这多少角色?你想过吗?
  5. 常用Linux性能检测命令
  6. 2023哈尔滨工业大学计算机考研信息汇总
  7. 笔记本处理器排名_Intel十代处理器笔记本电脑排行榜 (附带推荐机型信息20191021)...
  8. FlutterWeb性能优化探索与实践
  9. 购物车里看中国:淘宝发布18年18件“时代宝贝”
  10. SQL注入:sqli-labs lesson-8 lesson -9 基于布尔值和基于时间的盲注!