前言
随着互联网的发展,计算机新技术如雨后春笋,层出不穷,这也促使越来越多的学子投入到计算机的学习与研发中;而二十多年来,Linux操作系统已逐渐被越来越多的人接受和认可,并被众多企业广泛应用到服务器以及嵌入式开发等领域。因此,Linux操作系统的使用以及基于Linux的应用开发成为计算机专业学子应掌握的必备技能。
然而,黑马程序员在近些年的观察和研究中发现: 面临就业的高校学子虽已经学习了编程语言与操作系统等的相关课程,但缺乏动手能力,难以将理论联系到实际。这皆因他们所用教材不是体系结构不够系统,就是知识不够全面,再加上讲解的知识较深奥,以至于学子难以掌握切实可用的实质。
针对这种现象,黑马程序员决定推出一本更符合学生实际需求的教材。为保障学生在学习的过程中能学有所得,在学习之后能学以致用,黑马程序员经过大量调研与长期编写,推出了本书,作为Linux课程的初级教材。
为什么要学习本书
Linux操作系统自诞生至今逐步发展并日渐完善,因其开源、安全、稳定等特性,成为众多企业与政府部门搭建服务器的首选平台。此外,Linux在移动应用与嵌入式开发领域也被广泛采用,因此掌握Linux系统的使用与Linux平台下的程序开发方法成为众多计算机从业人员需要掌握的必备技能。
本书在大纲制定上参照了传智播客C/C++学院数年来结合计算机发展趋势及企业需求所研发课程体系中的Linux系统编程部分,涵盖了Linux基本操作、常用工具、系统管理与网络编程等使用Linux系统以及在Linux环境下进行开发所需的必要知识;在内容安排上,由Linux环境搭建入手,逐步讲解了Linux的基本操作、常用工具、系统管理以及程序开发等知识,由浅入深,由易到难,循序渐进;在讲解方式上,将理论与实践相结合,为大多知识点都配备相应案例,保障读者能在掌握理论知识的同时强化动手能力。
如何使用本书
本书以与企业中所用环境(Red Hat Enterprise Linux)较为接近的Linux版本(CentOS 6.8)为开发环境,主要介绍Linux系统的使用与Linux环境下的程序开发。本书中涉及的命令、语法与系统调用都配备了具体的案例,旨在让读者了解Linux平台下的常用服务器前言Linux编程基础模型。
若本书用于课堂教学,建议教师在讲解理论知识后,先引导学生自主动手实现教材中提供的案例,培养学生思考问题、分析问题、解决问题的能力,以期学生可更深刻地理解、掌握相应知识。
若读者为自主学习者,建议您勤思考、勤练习、勤总结,尽量完成并熟练掌握教材中配备的案例,并通过章节配套测试题进行自我检测和查漏补缺。若您在学习的过程中遇到困难或者有疑惑,可向问答精灵咨询。
本教材共分11章,每章的大体内容如下。
第1章首先介绍Linux系统的背景,包括Linux的起源、发展、应用领域、常用版本,以及GNU项目计划和POSIX版本;之后介绍Linux环境搭建过程;最后介绍VMware虚拟网络配置、Linux的远程终端访问和远程文件管理。通过本章的学习,读者可对Linux系统的背景有所了解,并能顺利搭建Linux环境,掌握Linux的远程终端访问方式及远程文件的管理。
第2章讲解Linux系统中的基本命令与开发工具,其中基本命令部分介绍与文件、网络、通信、压缩解压及帮助相关的命令,开发工具部分介绍vi编辑器、GCC编译器与GDB调试工具。掌握本章所讲的知识,可提高Linux系统使用与Linux环境开发的效率。
第3章讲解Linux系统中与用户、用户组管理相关的知识。Linux是一个支持多用户的操作系统,通过本章的学习,读者应能掌握Linux系统中管理用户、用户组的命令,以及用户切换的方法。
第4章讲解Linux的内核——Shell的相关知识、Shell应用技巧以及Shell脚本编程的相关语法。其中Shell编程语法包括Shell变量、条件语句、循环语句、函数,4.6节还给出了Shell脚本的调试方法。
第5章讲解磁盘与目录、Linux文件系统、Linux文件类型与文件操作,其中重点为磁盘的逻辑分区方式、文件系统的结构、文件操作。通过本章的学习,读者应掌握以上重点知识,并熟悉磁盘分区、挂载、卸载的方式与创建文件系统的方法。
第6章讲解Linux进程管理相关的知识,包括进程处理机制、进程属性、进程控制以及进程管理命令。通过本章的学习,读者应熟练掌握进程的处理机制,以及控制进程的方法,包括创建进程、退出进程与进程同步等。
第7章讲解Linux系统中的信号机制,包括信号来源、产生方式、信号阻塞、信号捕获和时序竞态等知识。通过本章的学习,读者应能在终端与程序中使用信号管理和控制进程。
第8章讲解进程间通信的方式,包括管道通信、消息队列通信、信号量通信与共享内存通信。通过本章的学习,读者应熟悉Linux系统中进程通信的这几种机制,并能在程序中使用这些机制实现进程通信。
第9章主要讲解Linux系统中的线程,包括线程的定义、线程相关操作、线程的属性,以及实现线程同步的机制。线程操作包括创建线程、退出线程、终止线程、挂起线程和线程分离,通过设置线程的属性亦可实现其中的部分操作。线程同步可通过互斥锁、条件变量、信号量实现。学习本章之后,读者应能在Linux环境开发中熟练操作线程、掌握线程同步机制,并熟悉线程的属性、可通过线程属性设置线程的状态。
第10章主要讲解socket编程,即Linux系统中的网络编程。其中首先简述计算机网络的协议与体系结构,之后讲解了socket编程中用到的系统调用、基于TCP和UDP两种协议的通信流程并补充网络编程中所需的知识,通过实际案例展示了不同协议下基于C/S模型的通信方式,最后对socket本地通信作了简单介绍。
第11章对Linux系统中涉及的几种并发服务器模型作了讲解,包括多进程并发服务器、多线程并发服务器、I/O多路转接服务器、线程池,最后对epoll的工作模式进行了补充。通过本章的学习,读者应对Linux系统中的服务器有所了解。
读者若不能完全理解教材中所讲知识,可登录高校学习平台,配合平台中的教学视频进行学习。此外读者在学习的过程中,务必要勤于练习,确保真正掌握所学知识。若在学习的过程中遇到无法解决的困难,建议读者莫要纠结于此,继续往后学习,或可豁然开朗。
致谢
本教材的编写和整理工作由传智播客教育科技股份有限公司完成,主要参与人员有吕春林、高美云、薛蒙蒙、郑瑶瑶、韩冬、王晓娟、刘传梅、朱景尧、王保明、刘宗伟等。全体人员在这近一年的编写过程中付出了很多辛勤的汗水。
意见反馈
尽管我们尽了最大的努力,但教材中难免会有不妥之处,欢迎各界专家和读者朋友们来信来函给予宝贵意见,我们将不胜感激。您在阅读本书时,如发现任何问题或有不认同之处,可以通过电子邮件与我们取得联系。
请发送电子邮件至: itcast_book@vip.sina.com。
黑马程序员
2017年6月于北京