描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302508137丛书名: 21世纪高等学校计算机系列规划教材
本书可作为大学本科计算机相关专业的教材,也可作为从事Linux操作系统应用、开发工作相关技术人员的培训教材和参考资料。
1.1Linux概述1
1.1.1Linux的起源和发展1
1.1.2Linux的特点2
1.1.3常见Linux发行版本4
1.2安装Linux5
1.2.1在虚拟机上安装Linux5
1.2.2在计算机上直接安装Linux17
1.3网络配置20
1.3.1桥接模式21
1.3.2仅主机模式21
1.3.3NAT模式21
本章小结23
本章习题23
第2章Linux操作系统管理常用命令24
2.1Linux常用命令24
2.2命令高级操作26
2.2.1命令补全26
2.2.2使用历史命令26
2.2.3输入/输出重定向27
2.2.4管道功能27
2.3文件操作命令27
2.4用户与组管理命令37
2.5网络管理命令46
2.6进程管理命令49
2.7帮助命令58
本章小结60
本章习题60第3章Shell编程61
3.1Shell概述61
3.1.1Shell的分类61
3.1.2Shell的功能62
3.1.3Shell脚本的建立与执行62
3.2Shell中的变量64
3.2.1Shell的环境变量64
3.2.2Shell的系统变量66
3.2.3Shell的用户自定义变量66
3.2.4Shell中变量的数学运算67
3.3Shell的特殊字符68
3.3.1Shell的通配符68
3.3.2Shell的元字符69
3.3.3Shell的转义符69
3.4Shell中的控制语句70
3.4.1条件测试语句70
3.4.2if条件语句74
3.4.3select语句75
3.4.4case语句75
3.4.5for语句77
3.4.6while语句79
3.4.7break语句和continue语句81
本章小结82
本章习题82
第4章Linux常用开发工具83
4.1Linux编程环境及工具83
4.2VI编辑器84
4.2.1命令模式85
4.2.2底行命令模式86
4.3GCC编译器87
4.4GDB调试工具89
本章小结92
本章习题92
第5章文件系统与操作93
5.1磁盘的结构93
5.1.1磁盘的物理结构93
5.1.2Linux文件系统目录95
5.1.3inode97
5.2Linux文件系统98
5.2.1Linux常用文件系统98
5.2.2对文件系统的操作104
5.3Linux文件类型和权限107
5.3.1文件类型107
5.3.2文件的权限110
5.4文件操作112
5.4.1文件描述符112
5.4.2文件操作相关函数113
本章小结120
本章习题121
第6章内存管理122
6.1Linux内存管理机制122
6.1.1虚拟内存管理机制122
6.1.2线性地址空间与物理地址空间125
6.2内存的控制128
6.2.1内存分配与释放128
6.2.2内存映射131
6.3内存操作函数135
6.3.1内存复制135
6.3.2向内存赋值136
6.3.3在某一内存区域查找指定字符137
6.3.4比较内存内容137
6.3.5取得内存分页大小138
本章小结139
本章习题139
第7章Linux进程管理140
7.1进程概述140
7.1.1进程的概念140
7.1.2进程分类141
7.1.3进程属性142
7.2进程控制函数144
7.2.1fork函数144
7.2.2vfork函数145
7.2.3system函数146
7.2.4execve函数147
7.2.5getpid函数149
7.2.6getppid函数149
7.2.7exit函数150
7.3进程同步151
7.3.1wait函数152
7.3.2waitpid函数154
本章小结156
本章习题156
第8章信号157
8.1信号的概念157
8.1.1信号的状态159
8.1.2信号的处理方式159
8.2信号产生的条件160
8.2.1系统调用160
8.2.2kill命令162
8.2.3软件条件163
8.3信号操作相关函数165
8.3.1信号捕获165
8.3.2信号阻塞168
8.3.3pause函数171
8.3.4sigsuspend函数172
本章小结174
本章习题174
第9章进程间通信176
9.1管道176
9.1.1匿名管道176
9.1.2命名管道181
9.2消息队列184
9.2.1消息队列接口函数184
9.2.2使用消息队列实现进程间通信187
9.3信号量189
9.3.1信号量接口函数190
9.3.2使用信号量实现进程间通信191
9.4共享内存195
9.4.1共享内存接口函数196
9.4.2使用共享内存实现进程间通信197
本章小结200
本章习题200
第10章网络编程基础201
10.1计算机网络概述201
10.1.1网络协议202
10.1.2端口与地址203
10.2socket网络编程204
10.2.1socket的函数接口205
10.2.2socket通信流程208
10.3网络编程实例210
10.3.1基于TCP网络编程210
10.3.2基于UDP网络编程213
10.3.3基于socket的本地通信216
本章小结219
本章习题219
参考文献220
Linux是一种自由和开放源代码的类UNIX操作系统,它的发布遵循GNU通用公共许可证(GNU General Public License,GNU GPL/GPL),任何单位和个人都可以自由地使用Linux的所有源代码,也可以自由地修改和再发布。在自由软件领域,有大量的开源程序资源,用户可以方便地得到程序的源码,为学习Linux提供了丰富的素材。
CentOS Linux(Community Enterprise Operating System,社区企业操作系统)是现在应用为广泛的Linux发行版本之一,它是由Red Hat Enterprise Linux依照开放源代码规定发布的源代码所编译而成,具备Red Hat Enterprise Linux的所有功能,特别适合对稳定性、可靠性和功能要求较高的用户。本书以CentOS Linux为蓝本,介绍了在Linux环境下系统管理的常用指令及Shell编程基础,以及使用高级语言进行编程开发的基本方法。
“Linux系统应用及编程”属于计算机专业基础课,本书的编写目的就是为广大应用型本、专科计算机专业学生提供一本学习Linux操作系统的教材。本书内容遵循由浅到深、循序渐进的编写原则,在编写时考虑到读者大部分是初学者,在本书中使用了大量的实例进行讲解。本书主要内容包括Linux操作系统的基本操作方法、系统命令、Shell编程,以及在Linux环境进行系统开发的基础等内容,帮助读者掌握Linux操作系统的基础理论和基本知识,使读者逐步掌握Linux操作系统的使用方法,了解Linux操作系统工作原理,掌握在Linux操作系统上进行开发的基本技术,为适应今后的计算机专业技术工作,提高计算机系统开发能力打好基础。本书共分为10章,每章都举出大量的实例进行讲解,各章的主要内容如下。
第1章对Linux操作系统进行了简介,介绍了Linux的起源和发展、自由软件的概况、CentOS的安装和系统配置。
第2章介绍了Linux系统管理常用命令,包括文件管理、用户管理、网络通信管理、进程管理等基本命令,这些命令也是使用Linux操作系统的基础。
第3章介绍了Shell编程的相关知识,包括变量的定义及赋值、特殊符号、流程控制语句等,通过Shell编程可以将Linux的系统命令有序组合起来,对系统进行高效管理。
第4章介绍了Linux环境下常用开发工具的使用方法,包括VI编辑器、GCC编译器、GDB调试工具的使用,熟练掌握这些开发工具是后续章节各种编程技术实现的基础。
第5章介绍了Linux文件系统的基本概念、文件系统的组织方式、文件的访问权限,以及用户如何编程实现对文件系统的访问。
第6章介绍了Linux内存管理机制,包括内存的分配与释放、内存操作的方法等。
第7章介绍了Linux操作系统中进程的概念,以及用户操作、控制进程、进程同步的方法。
第8章介绍了Linux操作系统信号的概念、信号的产生以及信号操作的相关函数。
第9章介绍了Linux操作系统中实现进程间通信的方式方法,详细说明了使用管道、消息队列、信号量、共享内存进行通信的相关函数。
第10章介绍了计算机网络的基本通信协议、通信接口socket的基本概念,并举例说明如何使用socket编写通信程序。
本书由耿朝阳、肖锋主编。参加本书编写、排版、校对的人员还有高芬莉、宋鹏、王峰辉、田沙沙、刘雪苗等,在此谨向各位做出的辛勤工作表示衷心感谢。本书在编写过程中,得到许多老师的关心和帮助,赵莉、姚红革、雷松泽等老师提出许多宝贵的修改意见,对于他们的关心、帮助和支持表示十分感谢。清华大学出版社的编辑在本书的申请及出版过程中做了细致周密的指导工作,在此表示由衷的感谢。
由于Linux操作系统的各种发行版本众多,而且版本更新速度很快,不断有新知识、新技术、新概念出现,同时编者水平、时间与精力有限,对本书内容的取舍把握可能不够准确,书中难免存在疏漏与不妥,恳请同行专家和广大读者批评指正。
编者2018年3月
第3章Shell编程Shell是UNIX/Linux操作系统中用户与系统交互的接口。它是一个命令行解释器,为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以使用Shell来启动、挂起、停止,甚至是编写一些程序。Shell有自己的编程语言用于对命令的编辑,易编写,易调试,灵活性较强。
Shell除了作为命令行解释器以外,还是一种高级程序设计语言,利用Shell编程可以把命令进行有机结合,形成功能强大、代码简洁的新命令。熟练掌握Shell编程可以极大地提高用户管理使用UNIX/Linux操作系统的效率。
本章从Shell的基本概述开始,介绍了Shell脚本程序设计中的语法结构、变量定义、特殊字符、控制语句等内容,并且给出了简单的实例。
本章主要学习以下内容。
了解Shell的基本概念、分类和功能等。
熟练掌握Shell脚本的建立与执行方法。
掌握Shell变量及特殊字符。
熟练掌握常用的Shell程序设计逻辑结构语句。
3.1Shell概述
Linux操作系统的Shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。
作为程序设计语言来说,Shell是一种脚本语言,而脚本语言的优点在于简单易学。相比C、Java等高级语言更能给使用者带来很大的方便。
3.1.1Shell的分类
Shell作为UNIX/Linux操作系统的标准组成部分,正如UNIX版本众多一样,Shell也产生了多个版本。目前,比较常见的几种Shell如下所述。
(1) Bourne Shell: Bourne Shell是美国AT&T公司的Bell实验室的史蒂夫·伯恩(Stephen Bourne)为AT&T的UNIX开发的,于1979年年末在UNIX的第7版中推出,用作者的名字命名,简称为sh。Bourne Shell当时主要用于系统管理任务的自动化。此后,Bourne Shell更是凭借着其简单、高效的功能广受欢迎,并且很快成为当时流行的Shell。尽管Bourne Shell在Shell编程方面相当优秀,但是仍然缺少一些交互的功能,如命令作业控制、历史和别名等。
(2) C Shell: C Shell是比尔·乔伊(Bill Joy)在加州大学伯克利分校读书期间为BSD UNIX开发的,简称为csh。其语法类似于C语言。此外,C Shell提供了增强交互使用的功能,如作业控制、命令行历史和别名等。
(3) Korn Shell: Korn Shell是Bell实验室的戴维·科恩(David Korn)在20世纪80年代早期开发的,简称为ksh。它完全向上兼容Bourne Shell并且包含了C Shell的很多特性,功能更强大。
(4) BourneAgain Shell: BourneAgain Shell是由Bourne Shell发展而来,在1987年由布莱恩·福克斯(Brian Fox)为了GNU计划编写,简称bash。它与sh稍有不同,包含了csh和ksh的特色,但是绝大多数的脚本都可以不加修改地在BourneAgain Shell上运行。BourneAgain Shell是绝大多数Linux发行版的默认Shell,也是本文介绍的Shell。
3.1.2Shell的功能
Shell主要有两个功能,一个是命令解释器;另一个是作为一种高级程序设计语言可以编写出代码简洁、功能强大的程序。
Shell作为命令解释器的具体功能: 它接收用户输入的命令,进行分析,创建子进程,由子进程实现命令所规定的功能,等子进程终止后,发出提示符。它的作用类似于Windows操作系统中的命令行,但是Shell的功能远比命令行强大得多。
Shell作为一种高级程序设计语言,它几乎有高级语言所需要的所有元素,包括变量、关键字、各种控制语句等,而且还拥有自己的语法结构。Shell有自己的编程语言,用于对命令的编辑,它允许用户编写由Shell命令组成的程序。
Shell另一个功能是提供个人化的使用者环境,这通常在Shell的初始化文件中完成(.profile、.login、.cshrc、.tcshrc等)。这些文件包括了设定终端机键盘和定义窗口的特征;设定变量,定义搜寻路径、权限、提示符号和终端机类型;以及设定特殊应用程序所需要的变量,例如,窗口、文字处理程序及程序语言的链接库。
3.1.3Shell脚本的建立与执行
在UNIX或者Linux操作系统中,Shell既是用户交互的界面,也是控制系统的脚本语言。用户可以通过使用Shell使大量的任务自动化,以此来提高系统管理的效率。
Shell脚本(Shell Script)是指使用用户环境Shell提供的语句所编写的命令文件。Shell脚本可以包含任意从键盘输入的Linux命令。
1. Shell脚本的建立
建立Shell脚本的方式同建立普通文本文件的方式相同,可以利用Linux操作系统下的文本编辑器进行编辑工作。VI是Linux操作系统下常见的文本编辑器,在终端输入命令:[root@localhost ~]# vi mytest
进入VI编辑器,输入如图31所示两行程序语句,保存mytest文件,就完成了一个Shell脚本文件的建立。
图31VI编辑窗口
2. Shell脚本的执行
1) 脚本名作为Shell参数的执行方法
基本语法格式如下: sh script-name
或者bash script-name
这种方法是当脚本文件本身没有可执行权限(文件权限执行位为)时常使用的方法,或者脚本文件开头没有指定解释器时需要使用的方法。
例如,执行一个已经建立的Shell脚本mytest,执行方式如下: [root@localhost ~]# sh mytest
first shell program
2018年 01月 24日 星期三 23:11:04 CST
2) 修改为可执行权限的执行方法
脚本文件在建立时,其访问权限和普通文本文件一样,没有可执行权限。先用chmod语句将脚本文件的可执行权限加上(文件权限执行位为x),然后在终端直接输入脚本名称的路径或者相对路径就可以。
例如,对已经建立的Shell脚本mytest加上可执行权限,然后直接执行: [root@localhost ~]# ls -l mytest
-rw-r–r–. 1 root root 31 1月24 23:10 mytest
[root@localhost ~]# chmod a x mytest
[root@localhost ~]# ls -l mytest
-rwxr-xr-x. 1 root root 31 1月24 23:10 mytest
[root@localhost ~]# ./mytest
first shell program
2018年 01月 24日 星期三 23:11:04 CST
3) source或者“.”命令
基本语法格式如下: source script-name
或者. script-name
第1)、2)种执行方法都是在当前Shell中新建一个子Shell,在子Shell中执行脚本语句;而source或者“.”命令(注意: “.”后面要加空格)的功能是直接在当前Shell中读入脚本并执行脚本语句,而不是产生一个子Shell来执行文件中的命令。
同样执行一个已经建立的Shell脚本mytest,执行方式如下: [root@localhost ~]# source mytest
first shell program
2018年 01月 24日 星期三 23:11:04 CST
3.2Shell中的变量
在任何程序设计语言中,变量都是一个不可缺少的元素。从本质上讲,变量就是在程序中保存用户数据的一块内存空间,而变量名就是这块内存空间的地址。Shell变量的名字可以由数字、字母和下划线组成,并且只能以字母或者下划线开头。
Shell变量有两种类型,即Shell环境变量(Shell Environment Variable)和用户自定义变量(User Define Variable)。
3.2.1Shell的环境变量
Shell的环境变量是所有的Shell程序都可以使用的变量。Shell程序在运行时,都会接收一组变量,这组变量就是环境变量。环境变量会影响到所有脚本的执行结果。表31列出了常用的Shell环境变量。续表表31常用的Shell环境变量环 境 变 量说明PATH指定命令的搜索路径,以冒号为分隔符HOME指定用户的主工作目录(用户登录到Linux操作系统中时,默认的目录)HISTFILE命令历史文件HISTSIZE保存历史命令记录的条数LOGNAME当前的登录名HOSTNAME主机的名称SHELLShell的全路径名TERM用户控制终端的类型PWD当前工作目录的全称PS1命令基本提示符,对于root用户是“#”,对于普通用户是“$”环境变量一般都是大写的,系统启动后自动加载,可写的环境变量用户也可以随时进行修改。在脚本中,可以在环境变量名称前加上美元符号“$”来使用这些环境变量。
Linux也提供了一些修改和查看环境变量的命令。表32列出了常用的修改和查看环境变量的命令。表32常用的修改和查看环境变量的命令命令说明命令说明echo显示某个环境变量值set显示本地定义的Shell变量export设置一个新的环境变量unset清除环境变量env显示所有环境变量readonly设置只读环境变量【例31】用echo指令显示系统提示符环境变量PS1的值。[root@localhost ~]# echo $PS1
[\u@\h \w]\$
【例32】将某个变量设为环境变量,并查看环境变量。[root@localhost ~]# export myname=geng
[root@localhost ~]# env
ORBIT_SOCKETDIR=/tmp/orbit-g
HOSTNAME=localhost.localdomain
GIO_LAUNCHED_DESKTOP_FILE_PID=3482
IMSETTINGS_INTEGRATE_DESKTOP=yes
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
…
myname=geng
…
COLORTERM=gnome-terminal
XAUTHORITY=/var/run/gdm/auth-for-g-eF04zj/database
_=/usr/bin/env
执行完export myname=geng语句,环境变量中就多了一个myname,可以使用env指令查看所有的环境变量。
评论
还没有评论。