Linux Bash编程与脚本应用实战(txt+pdf+epub+mobi电子书下载)


发布时间:2020-11-26 22:54:18

点击下载

作者:马玉军,郝军

出版社:清华大学出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Linux Bash编程与脚本应用实战

Linux Bash编程与脚本应用实战试读:

前言

为何选择Bash Shell?

Linux系统的发布版本目前有很多,而Debian系列的Ubuntu系统是使用率较高的Linux系统,在Ubuntu系统中默认安装的Bash也是所有Linux系统中使用率较高的脚本语言,因此本书采用Linux Bash来讲解脚本语言编程与应用。本书真的适合你吗?

本书旨在帮助那些刚接触Linux系统以及Shell编程的“新人”,提供Shell编程中的常用语法以及使用率较高的知识;本书涉及Shell编程中的变量使用、条件结构、循环结构、函数、正则表达式、grep命令、sed编辑器、gawk编辑器的常用方式,读者可以根据自己的需要选择全部学习或只学习部分内容。

本书是一本全面的Shell脚本编程技术书,是比较实用的Shell编程案例书,部分实例和框架在下面给读者做一个预览。涉及的示例和案例

使用Shell操作MySQL数据库

系统内存监控

系统硬盘空间监控

进程空闲监控

日志定时备份

计算器模拟

后台程序运行过程控制

前台程序暂停及继续执行

使用键盘发送信号控制进程的执行

正则表达式的使用

gawk编辑器的使用

sed编辑器的使用

算术运算的实现

函数的递归调用

函数的嵌套使用

数组在函数中的应用

循环结构的使用

循环结构的控制

条件结构的使用

测试命令的使用

设备文件的挂载和卸载

输入输出的重定向

引号的使用

元字符的使用

通配符的使用

管道的使用

位置变量的使用

环境变量的使用本书特点● 本书介绍的知识以及实例来自于多位“奋斗”在Linux系统中的

开发人员和实施维护人员,结合众人多年对Shell脚本编程的了

解和独特见解,因此本书的实用性是非常强的。书中所述内容不

管是对理论知识的介绍,还是具体实例的开发,都是从实际应用

角度出发,精心选择在实际项目中使用的实例进行细致的讲解和

分析。● 深入浅出、轻松易学,以实例为主线,激发读者的阅读兴趣,让

读者能够真正学习到在Linux系统下如何使用Shell脚本解决实际

问题。● 贴近读者、贴近实际,本书中的实例大部分都紧跟一个知识点,

做到理论和实际相结合,用大量的实例说明如何使用讲述的知识

来编写Shell脚本,从而解决实际问题。贴心提醒

本书根据在实际编写Shell脚本的过程中出现的种种问题,在各章使用了很多“注意”等小提示,让读者可以在学习过程中更轻松地理解相关知识点及概念。面向读者● Linux系统Shell编程初学者● Linux环境开发人员● Linux系统管理员● 网络管理员● 服务器管理员资源下载

本书配套示例脚本包下载地址(请注意字母大小写和数字)如下:

http://pan.baidu.com/s/1bnER5SF

如果下载有问题,请发邮件到电子邮箱booksaga@163.com,邮件标题为“求bash脚本”。

本书第1~15章由南阳理工学院的马玉军编写,第16~18章由郝军编写,其他参与编写的人员还有李光明、史帅、庞国威、娄晓东、郭刚、李兰英、林龙、张泽娜、李春城、宋楠、李为民、祝明慧、周瑞、潘承恩、殷龙。编者2014年9月第1章学习Shell的背景知识——Linux系统Shell脚本的编写依赖于Linux系统,因为脚本的编写、执行、修改都需要在Linux系统之上。所以在正式介绍Shell脚本的相关内容之前,首先介绍Linux的基础知识,从而为后面讲解如何编写Shell脚本打下基础。本章的主要内容如下:● Linux系统基础介绍● Linux系统的文件系统介绍● Linux系统的基本使用● Shell的基本介绍1.1 Linux系统基础

Linux系统最初源于Unix系统,是一套 Unix-like 的作业系统,也是 Unix 的一种,Linux系统是一类Unix计算机操作系统的统称。Linux操作系统也是自由软件和开放源代码发展中最著名的例子,发展到现在已经经历了二十余年,下面将简要介绍Linux系统的发展以及它与Windows系统的区别。1.1.1 Linux系统的发展

对于Windows系统来说,其核心代码是不对外公布的。这样虽然对于系统的保密性和安全性起到了一定的作用,但从长远来说,不利于技术的发展和进步。1983年,理察·马修·斯托曼(Richard Stallman)创立了GNU计划(GNU Project)。这个计划的目标是发展一个完全免费自由的Unix-like操作系统,从而打破操作系统的源码只在少数人手中的限制,打破软件技术发展的瓶颈。

1991年4月,芬兰赫尔辛基大学学生林纳斯·托瓦兹(Linus Torvalds)由于不满意Minix这个教学用的操作系统,出于个人爱好,开发出了Linux系统的第一个版本Linux 0.01。此时的Linux系统还需要运行在Minix系统之下,林纳斯宣布该系统可以被任意地下载和修改,希望大家能够对这个系统进行完善。许多专业程序员加入其中,他们自愿地开发Linux系统的应用程序,并借助Internet拿出来让大家一起修改,所以它周边的程序越来越多,Linux本身也逐渐发展壮大起来。在所有开发人员的共同努力下,GNU组件可以运行于Linux内核之上。直到1994年3月,Linux1.0版正式发布,自此,Linux系统以崭新的形式投入到市场中。

Linux系统是一种free的操作系统,这种free不单单指可以自由地从互联网上传、下载Linux操作系统,对于大多数人来说,free最重要的含义是Linux系统是一种自由软件,用户可以自由地修改Linux系统的源代码,从而满足自己的实际需要。当修改完以后,还可以将修改的内容上传到互联网上,供其他人员学习或修改。这样既提高了个人的能力,也帮助了Linux系统修复BUG和进行系统的更新,从而提高了Linux系统的稳定性和执行效率。

Linux系统发展至今存在很多的发行版本。在每一种发行版本中都包括Linux内核、必备的GNU程序库和工具、命令行Shell、图形界面的X Window系统和相应的桌面环境,并且还有数量众多的应用软件和应用程序。应用范围比较广泛的发行版本如下:● Ubuntu● Red Hat● Suse● Fedora Core● Red Flag(红旗)

在上面的Linux系统发行版本中,每一种发行版本都可以独立使用。用户可以根据自己的需要来选择使用相应的版本。1.1.2 Linux系统和Windows系统的区别

在日常工作和生活中,一般使用的操作系统为Windows操作系统,Linux系统与Windows的主要区别是Linux是自由的软件。

Linux对硬件要求较低,而Windows要求较高。Windows一般都要求硬件有最低配置,这个最低配置仅是保证Windows系统能够正常运行。而对于Linux系统来说,保证Windows系统正常运行的最低配置就是可以使得Linux系统运行得非常顺畅,即使增加几个应用程序,也同样可以正常使用。

Linux系统和Windows系统都提供了较好的网络功能,但是在安全与稳定方面却存在着差异。Linux提供对当前TCP/IP协议的完全支持,并且包括对下一代Internet协议IPv6的支持。Linux内核还包括了IP防火墙代码、IP防伪、IP服务质量控制及许多安全特性。因此,其网络性能要优于Windows系统。

微软的Windows产品是专门为桌面系统设计的,面向中、低端用户,友好的界面使其在计算机操作系统市场占据了较高的市场份额。虽然Linux有两个不错的图形操作界面(GMONE和KDE),也能提供不错的桌面服务,但不及Windows系统方便灵活,这严重影响了它的普及率。

由于源代码开放的特点,成千上万的人可以开发Linux,快速找到并修改其错误码,而且许多硬件厂商也可以直接阅读其源代码,从而迅速提供对它的支持。1.1.3 Linux的启动过程

Linux系统的启动过程是指从用户开机、通电到可以输入用户名和密码登录系统的这段过程,当计算机执行这段过程时,所有的信息都在屏幕上一闪而过,并且会出现很多的信息。因此对于初学者来说,Linux的系统启动过程会显得非常“神秘”,但是实际上Linux的启动并不是想象中的那么复杂。Linux系统的启动过程如图1-1所示。图1-1 Linux系统启动示意图

当电脑开机后,首先会启动BIOS程序进行系统自检。当自检通过后就会进入到硬盘的MBR(主引导记录)中执行存储在该区域的程序。这个程序就是Linux系统中的grub程序(系统引导程序),grub程序的主要作用就是确定存储在硬盘中的操作系统从什么地方启动,配置文件/boot/grub/grub.conf存储了在硬盘中记载的所有的操作系统以及操作系统的存储信息,该文件的内容如下: # DO NOT EDIT THIS FILE # # It is automatically generated by /usr/sbin/grub-mkconfig using templates # from /etc/grub.d and settings from /etc/default/grub # ### BEGIN /etc/grub.d/00_header ### if [ -s $prefix/grubenv ]; then load_env fi set default="0" if [ ${prev_saved_entry} ]; then set saved_entry=${prev_saved_entry} save_env saved_entry set prev_saved_entry= save_env prev_saved_entry set boot_once=true fi function savedefault { if [ -z ${boot_once} ]; then saved_entry=${chosen} save_env saved_entry fi } ……//省略部分文件内容 ### BEGIN /etc/grub.d/40_custom ### # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. ### END /etc/grub.d/40_custom ###

在配置文件/boot/grub/grub.conf中,语句default是指默认使用哪个操作系统,所有的操作系统都在Grub画面中显示。在启动系统时,Grub将直接体现为操作系统选择菜单。在系统启动时,会出现一个操作系统选择菜单,用户可以根据需要选择需要启动哪个。其基本内容如图1-2所示。图1-2 操作系统选择菜单

对于图1-2中的操作系统选择菜单来说,光标所在的位置就是马上要进行启动的操作系统。在实际使用时,可以根据实际需要使用上下箭头来选择启动哪个系统。而如果在默认的时间中没有选择,系统自动选择两条所在的位置所指示的系统进行启动。该默认时间也可以在配置文件grub.conf中进行修改。

图1-2中所示的操作系统选择菜单仅是在硬盘中包含多个操作系统时才会出现。而且该菜单显示的内容和本机上安装的是哪些系统有关系,因此,其现实的内容不会都是一样的。一般情况下,操作系统选择菜单中显示的内容和配置文件grub.conf中的title后面的内容相同,存在多少个title,那么在选择菜单中就出现多少个选项。如果只存在一个操作系统,那么在操作系统选择菜单中仅显示一条选项。在配置文件grub.conf中设定default的数值是多少,那么默认的操作系统就是哪一个。注意

default的初始值为0,而不是1,因此在确定默认的操作系统时要注意选项的位置为default值再加1。

配置文件中title开始的部分的下一行为确定操作系统存储位置。在Linux系统中,使用hd表示硬盘,紧跟其后的数字表示第几块硬盘。逗号后面的数字则表示该硬盘的第几个分区。如语句root(hd0, 0)就表示第一块硬盘的第一个分区。括号中的数字和default的数值是一一对应的。这就可以知道是启动的是哪一个操作系统。

紧跟其后的kernel指代存放Linux内核的位置。(hd0,0)指代boot目录,所以这个文件在boot目录中。而语句ro root=LABEL=/就是设置根目录的位置,root前面的ro表示read only,所以有这行的设定,才能读取根目录。

在选择了合适的操作系统以后就启动init服务对操作系统进行初始化。启动init服务实际上就是执行init程序,该程序是Linux系统运行的第一个程序,也是在Linux系统中运行的第一个进程,该程序根据启动模式(即run_level)确定如何启动系统。

在进行系统的启动时,Ubuntu中的init进程并不会直接去目录文件/etc/init.d或者/etc/rc${runlevel}.d/中查找相应的文件并且执行,而是采用了折衷的办法,通过/etc/init下的相应配置文件来调用/etc/rc${runlevel}.d/中的脚本以启动采用旧式System V-style的服务。对于Ubuntu系统来说,其启动文件存在于以下3个目录中:● /etc/init● /etc/init.d● /etc/rc${runlevel}.d

在启动系统时,首先判断启动模式(即run_level),即使用何种方式启动Linux系统。/etc/init.d/rc被调用了,并且传入了早前设置好的系统runlevel作为参数。而/etc/init.d/rc会根据传入的runlevel参数调用/etc/rc${runlevel}.d/下的脚本(以S开头)以启动服务。

对于Ubuntu系统来说,启动模式run_level一般分为7种,其相应的作用如表1-1所示。在一般情况下,采用的run_level为1、3、5这3种启动模式。对于启动模式0和6来说,一般不会设定启动模式,否则在开机以后就会直接关机或重启,而无法正常使用系统。表1-1 Linux系统的启动模式启动模式作用介绍(run_level)0关机1单用户模式,只允许root账号登录2无NFS网络功能登录3文本模式登录4用户自定义模式登录5图形界面方式登录6重启

在确定启动模式后,进而执行/etc/rc.d/rc.sysinit程序进行操作系统的初始化,对系统的初始化主要是对系统进行初始化的设定,如设定主机名、系统时间、键盘布局等。然后进入目录/etc/rc.d执行run_level所表示的目录rc.5,依次执行该目录中的所有内容。最终创建tty1~tty6共6个虚拟控制台,注意

对于Ubuntu系统和Red Hat系统来说,启动文件是不同的,/etc/inittab是Red Hat系统中的文件,该文件中存储着和系统启动相关的文件。1.2 Linux文件系统基础介绍

文件系统是操作系统对系统中所有文件存储空间的组织和分配,是操作系统基本的功能之一。文件系统主要负责文件的存储并对存入的文件进行保护和检索。具体地说,文件系统实现了对文件的增加、修改、删除以及检索的功能,在本节中将对Linux系统的文件系统结构进行讲述。注意

在本书中所有的操作都是基于Ubuntu 10.04这一操作系统版本,而其他的操作系统和该版本存在一定的差别,但是其基本的使用方式一致。因此在后面的章节中将使用Ubuntu代替Linux系统。1.2.1 必须了解的节点inode

在任何一个操作系统中都存在着数以千百计的文件,文件系统的作用就是对这些数量众多的文件进行组织和管理,从而及时响应用户的访问,并且使得文件不会丢失。常见的文件系统类型包括:● fat系列● ntfs● ext系列

对于Linux系统来说,采用了与Windows系统完全不同的文件系统结构,在Windows系统中,常用的文件系统类型为NTFS或FAT32这两种形式,而在Linux系统中采用的是ext文件系统。ext文件系统是一种日志式文件系统,使用该类型的文件系统除了保存文件的内容之外,还存储了文件的许多属性和权限,因此,在Linux系统中,一般使用节点(inode)的方式来存储文件。

对于任何系统来说,系统中的文件都存储在磁盘中。磁盘中最小的存储单位是扇区,每一个扇区只有512个字节。对于现在的磁盘来说,扇区的数量是非常多的,并且不利于文件内容的存储。因此在Linux系统中实际上是按照块来进行存储的。一个块一般由8个连续的扇区组成。在块中,存储着文件的创建者、创建日期、上一次的修改日期、文件的大小等基本信息,这些储存文件基本信息的区域就称为inode,即索引节点,一个索引节点对应着一个文件,索引节点的内容如下:● 文件的大小。● 文件创建者,使用ID表示。● 文件的所属组。● 文件的读、写、执行权限。● 文件的时间属性,包括上一次inode被修改时间、文件内容上一

次修改时间、上一次打开时间。● 链接数,包括软连接和硬链接两种。● 文件中数据block的位置。

从上面的介绍中可以看出,在Linux系统中,一个完整的文件信息包含以下两部分:● inode信息。● 数据信息。

数据信息显然是存储文件的具体数据,而inode信息则存储文件的索引信息,该部分信息同样占用硬盘空间。每个inode节点的大小一般是128字节或256字节。inode节点的总数是在磁盘格式化时指定的。如果指定的inode节点全部被使用了,那么就不允许再创建新的文件。注意

使用stat命令可以查看文件的索引节点inode信息,并且在索引节点中不包含文件名。1.2.2 Linux系统文件结构

Linux系统的文件系统结构采用了一种称为树形结构的组合方式,所谓树型结构就是所有的文件的父级目录最终都能归结到一个相同的目录中,这个目录被称为系统的根目录,使用符号“/”表示,在根目录中存在着其他的子目录。Linux系统的目录结构如图1-3所示。图1-3 Linux系统目录结构

从图1-3中可以看出,在根目录中包含很多目录,就像是树的枝叶一样,依赖于根的存在,从而“生枝发芽”。根目录中的每一个目录在Linux系统中都有着不可替代的作用。这些目录的作用如表1-2所示。表1-2 Linux系统中目录及其作用目录名称作用/系统的根目录,包含系统中其他的所有文件root用户的主目录,存放启动Linux系统的核心文件,如root操作系统内核、引导程序Grub等普通用户的主目录,存放普通用户的个人信息。按照系home统中用户的登录名而使用不同的目录文件bin存放系统启动时需要执行的二进制文件可执行文件目录,存放系统管理的命令,root用户或具sbin有root权限的用户的才能执行里面的命令,普通用户无法使用存放Linux系统的所有内核参数以及系统的配置信息,proc按照进程的编号进行存取usr用户目录,存放用户文件boot存放系统启动时需要的文件lib存放系统需要的动态库以及核心模块etc存放各种配置文件var包含了运行时要改变的数据用于挂载系统之外的文件系统。需要提前创建挂载的目mnt录临时文件目录,系统启动后的临时文件均存放在/var/tmptmp中在文件系统修复时恢复的文件,系统错误时,存放错误lost_found的内容opt通常用来安装第三方的软件包

Linux系统按照表1-2中介绍的目录的作用对Linux系统中的文件进行处理,将所有的文件进行分门别类,按照每个文件的作用决定文件的存储位置。而对于用户来说,还有如下几个比较重要的目录:● usr目录● var目录● etc目录● proc目录

在上面4个目录中存储了Linux系统运行的常用信息,下面分别介绍这4个目录中存储的内容及其作用。

usr目录中存储的内容一般是用户文件,在usr目录中每个目录的作用也不尽相同。常用目录的作用如表1-3所示。表1-3 usr目录中的内容及作用目录作用bin存放用户可以直接执行的所有的命令存放与系统管理员相关的命令,如服务器的程序等,需sbin要root用户或具有root权限的用户才可以执行存放C和C ++语言的头文件,其他编程语言的相关文件include在其他的目录中local本地安装程序的默认安装目录man手动生成的目录info信息文档doc安装包的文档信息

var目录一般包含了运行时要改变的数据,这些数据不通过网络与其他的计算机共享。常用的目录及其作用如表1-4所示。表1-4 var目录中的内容及作用目录作用local/usr/tocal中安装程序的可变数据lock锁定文件,防止当前文件在使用时,被其他的程序修改存储系统的各种日志文件,存储Linux系统的所有操作log信息,如所有核心和系统程序信息run保存到下次引导前有效的关于系统的信息文件spool存储队列,涉及email、news、打印队列等存储临时性文件,存储的文件比/tmp中的文件要大或存tmp储的时间较长

在etc目录中,存放着系统中的所有的配置文件,如各种服务器、网络设备、系统的操作参数等文件,其主要的目录或文件如表1-5所示。表1-5 etc目录中的内容及作用目录作用rc或rc.d或rc*.d存储系统的启动脚本或改变运行级别的脚本系统的合法用户,包含用户名、主目录、密文形passwd式的登录密码以及其他信息,按照一定的格式进行存储group存储用户组的相关信息登录提示符前的输出信息,通常包括系统的一段issue短说明或欢迎信息。内容由系统管理员确定存储用户登录密码,明文和密文相对应,使用shadowmd5算法进行加密profile创建全局变量,一般存放的是环境变量shells包含可以使用的Shell

在proc目录中,存放着系统运行时的一些信息,如内存信息、设备信息、CPU信息等,这些信息记载着系统当前的运行状态,用户可以通过这些文件了解系统当前的运行状况,作为处理其他相关内容时的“参照”。Proc目录的内容如表1-6所示。表1-6 proc目录中的内容及作用目录作用存储进程init的信息,每一个进程号都有相应的目录文1件存储相关信息cpuinfo存储CPU相关信息,如制造商、基本性能参数等devices存储当前运行的核心配置的设备驱动列表dma显示当前使用的DMA通道loadavg显示平均负载,指示系统当前的工作量modules显示当前系统加载了哪些核心模块meminfo存储物理内存和交换内存的实用信息uptime系统启动的时间version核心版本

上面介绍的几个目录是系统的主要目录,也是在实际应用中操作频率较高的目录,但不表示其他的目录不重要,其他的目录中存储的信息在某些方面也是用户需要的内容,因此只有了解了所有的目录和文件的作用,就可以在需要的时候找到合适的目录,进而进行各种相应的处理。注意

对于除了用户的主目录之外的目录,都需要root权限或相应的权限才可以读取里面的文件内容,否则会提示“权限不足”。1.3 学会Linux系统的基本使用

在上面的章节中介绍了Linux系统的基本内容,如Linux系统的发展历史以及与Windows系统的区别,在本节中将详细介绍关于Linux系统的基本使用,如系统的登录与退出、Linux系统的启动过程、基本的系统选项配置等,这些内容是使用Linux系统的基本操作,因此需要读者熟练掌握。1.3.1 系统的登录与退出

Linux系统在使用之前必须要成功登录才能进入系统,而在登录时需要输入用户名和密码。用户名和密码是用户在安装系统时设定的,除此之外还可以选择使用任何合法的用户名登录。所谓的合法用户名是在Linux系统中能够找到并且具有一定权限的用户。登录界面如图1-4所示。图1-4 Ubuntu 10.04系统登录界面

在图1-4所表示的登录界面中,可以使用默认的用户登录,就是显示出来的第一个用户,也可以选择其他用户登录。在登录时不管使用哪个用户登录,都需要输入用户的登录密码。默认用户的登录密码是在安装Ubuntu系统时设定的密码,而其他的用户密码可以通过root用户来进行设定或密码的修改。

输入密码后系统验证密码以及用户的合法性,如果用户名和密码匹配成功,那么就会成功登录系统,如果不匹配,那么会提示用户名或密码错误,从而阻止用户的登录,如图1-5所示。图1-5 输入用户登录密码错误

在输入用户的登录密码错误以后,会自动回到登录界面,允许再次输入用户名和密码进行登录。使用默认用户登录以后执行命令时只有普通用户的权限,除了使用默认的用户登录系统之外,还可以使用系统中存在的其他合法的用户登录系统,可以使用root用户登录或者使用其他的用户登录。如果需将用户的权限提高,可以使用root用户登录,从而将用户的操作权限提到最高,从而便于对系统进行操作。但是使用root用户登录以后,容易对系统造成误操作,从而对系统造成破坏。使用其他用户登录时,也需要输入用户名以及对应的密码才能登录,如图1-6所示。图1-6 使用其他用户登录并输入密码注意

用户的密码可以通过命令进行修改,并且可以将用于登录的用户存储在特定的文件中,可以通过查看文件内容来明确可以使用哪些用户登录。

除了使用图形界面方式登录系统之外,还可以通过命令行的方式登录。在Linux系统中设置了6个虚拟控制台,每个控制台都可以单独访问Linux系统,进入这6个控制台的方式是使用组合键Ctrl+Alt+F1到Ctrl+Alt+F6,当按下相应的按键后,系统自动进入虚拟控制台,使用合法的用户名和密码登录后,就可以操纵Linux系统了。

当系统使用完毕之后,需要退出系统。对于一般的Linux系统来说,可以通过以下3种方式退出:● 单击图标● 使用命令init● 使用命令shutdown

对于退出Linux系统来说,比较简单的方式是使用图形化操作环境,可以直接单击面板上的【关机】按钮退出系统。单击【关机】按钮以后,显示内容如图1-7所示。图1-7 关机界面

在弹出关机界面之后,可以根据需要选择重启系统还是直接退出系统,也可以单击【Cancel】按钮退出关机操作。1.3.2 系统基本选项配置

在成功登录Linux系统以后,可以根据用户的实际需要对系统进行各种设置。在安装的过程中,也需要进行一些必要的设置。对于Linux系统来说,可以在【系统首选项】菜单中进行配置,【系统首选项】的部分内容如图1-8所示。图1-8 【系统首选项】菜单

图1-8中显示了【系统首选项】菜单的部分内容,在该菜单中,可以实现网络连接的配置、鼠标的各种属性的配置以及其他常用设备的配置方式。读者可以在实际操作时,将每一个界面点开,查看具体的操作。注意【系统首选项】菜单的顶部和底部都各有一个箭头,说明该菜单只显示了部分内容,在上面和下面还有部分内容未显示。1.3.3 文本编辑器的使用

在Linux系统中常用的文本编辑器为Gedit、vi(vim)系列、Emacs等。Gedit编辑器类似于Windows系统中的记事本,该编辑器在图形界面系统中才能够使用,而vi(vim)以及Emacs编辑器属于文本编辑器,这两类编辑器即使没有图形界面也能够正常使用,虽然它们没有华丽的界面,也不能使用鼠标辅助操作,但是当图形桌面系统“挂掉”以后,文本编辑器就成了唯一的选择,因此学会使用文本编辑器是操作Linux系统的基础技能之一。

vim是vi的增强版,而vi是Linux系统中使用较早的文本编辑器,一般的Linux系统中都默认安装了vi编辑器。下面就介绍vi编辑器的使用方式。1.启动vi

vi属于文本编辑器,没有图形化的编辑环境,因此在Shell终端中输入vi命令后就能打开vi编辑器,从而进行文本的编辑。在启动vi编辑器时,一般还会使用一些选项来对打开的文件进行某些特定操作。常用的打开vi编辑器的方式如表1-7 所示。表1-7 vi编辑器打开方式vi命令常用选项功能vi打开vi文本编辑器vi filename打开文本编辑器,并且文件的名字为filenamevi –R filename只读方式打开文件名为filename的文件

对于表1-7中的打开vi编辑器的方式来说,直接使用vi命令将只能打开vi编辑器,在退出时需要保存文件名。除此之外还可以在打开编辑器时指定文件名,或者使用-R选项以只读的方式打开文件。对于一般情况来说,在打开vi编辑器的同时指定文件名,其操作方式如下所示。 ben@ben-laptop:~$ vi test.txt

在执行了上面的命令之后,vi编辑器就会根据文件名自动创建相应的文档,并且打开编辑器,从而使得用户可以对文件进行编辑。vi文本编辑器打开后的界面如图1-9所示。图1-9 vi文本编辑器界面

刚打开的vi编辑器默认处于命令行状态,此时是不能进行任何的文本输入的,只有转为插入模式才能进行文本的编辑。注意

如果打开的文件不是空文件,就会在vi编辑器中显示文件的内容。

命令行状态也可称为底行状态,因为所有的操作都是在vi编辑器的底部完成。在命令行模式下可以对文件进行各种操作,此时所有输入的内容都被当做命令来处理,常用的命令可以分为如下几类:● 文本删除类● 文本插入类● 屏幕翻滚类● 光标移动类

常用的文本删除类命令及其作用如表1-8所示。表1-8 底行模式中常用的文本删除类命令命令名称作用x删除光标所在字符dd删除光标所在行中所有的字符r修改光标的位置进入字符替换,使用新增文字替换原来的文字,可以按RESC键退出字符的替换s删除光标所在的字符,并进入编辑模式S删除光标所在的行,并进入编辑模式

在底行模式中可以使用相关的命令实现文本的删除操作,可以删除单个字符,也可以删除文本中的整行内容,并且能够进行简单的文字替换功能。

在vi编辑器中不能使用鼠标进行辅助操作,因此,只能使用各种命令来进行光标的移动,常用的光标操作方式如表1-9所示。表1-9 光标操作常用命令命令名称作用h光标左移一个字符l光标右移一个字符space(空格光标右移一个字符键)BackSpace(光标左移一个字符字符删除键)k或Ctrl+p光标上移一行j或Ctrl+n光标下移一行)(右小括光标左移至行首号)((左小括光标左移至行尾号)H光标移至屏幕顶行M光标移至屏幕中间行L光标移至屏幕最后行0光标移至当前行首$光标移至当前行尾

如果打开的文件内容过多,会造成一屏幕无法全部显示,那就需要进行屏幕的滚翻,在vi编辑器中,屏幕滚翻相关的命令如表1-10所示。表1-10 常用屏幕滚翻类命令命令名称作用Ctrl+u向文件首翻半屏Ctrl+d向文件尾翻半屏Ctrl+f向文件首翻一屏Ctrl+b向文件首翻一屏将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕nz顶部。

vi编辑器的主要功能就是对文本文件进行编辑,在编辑时,可以在文档的各个位置进行数据的插入。常用的数据插入命令如表1-11 所示。表1-11 常用数据插入命令命令名称作用i在光标前插入I在当前行的行首插入a在光标后插入A在当前行的行尾插入o在当前行之下新开一行O在当前行之上新开一行r替换当前字符R替换当前字符及其后字符,直至按ESC键当光标的当前位置开始,以输入的文本替换指定个数的s字符S删除指定数目的行,并以输入的文本替换删除的内容

通过上面的表可以看出,熟练使用vi编辑器需要掌握很多命令。虽然命令相对较多,但是每一个命令在进行文本的编辑时都可能用到,因此需要读者花大力气进行反复的练习,从而掌握这些基本命令的使用。

上面的4类命令是使用vi编辑器常用的命令,除此之外还有其他许多命令需要读者了解,在此不做赘述,有兴趣的读者可以通过阅读其他相关资料进行学习2.文件编辑

在打开编辑器以后就可以根据实际需要进行文本的编辑了。但是刚打开的vi编辑器处于命令行模式,只有在输入特殊的命令字符后才可以进行文本的编辑操作。vi编辑器的这种操作模式称为命令行模式,除了命令行模式以外,vi编辑器还存在插入模式、底行模式。在进行文本编辑的过程中,这3种模式相互转化,从而完成整个文本的编辑过程。在不同的模式中需要使用不同的命令对编辑器进行各种操作。

输入字符i可以将vi编辑器从刚开始的命令行模式变成插入模式,这样就可以通过键盘输入字符,进行文本的编辑。编辑完成后如图1-10 所示。图1-10 vi编辑器的插入模式

在进行文本的编辑时不可以使用鼠标进行辅助操作,但是可以使用一些命令代替鼠标操作,常用的命令如表1-12所示。表1-12 vi编辑器插入模式中的常用命令命令名称作用i在光标前I在当前行首a光标后A在当前行尾o在当前行之下新开一行O在当前行之上新开一行r替换当前字符R替换当前字符及其后的字符,直至按ESC键从当前光标位置处开始,以输入的文本替代指定数目的s字符S删除指定数目的行,并以所输入文本代替之

当编辑文本结束后,需要及时保存文件并且安全退出vi编辑器,否则刚编写的文本内容不会储存在内存中,再次打开后也不会显示在文件中。在插入模式中按下键盘的ESC键,这样就可以从插入模式进入底行命令模式。在进入底行模式后,需要先输入冒号“:”,然后再输入相应的命令,这样命令才能够执行。在底行模式中常用的命令如表1-13所示。表1-13 底行模式中的常用命令及其作用命令名称作用q退出vi编辑器强制执行某个命令!x保存文件并且退出vi编辑器E创建新的文件名,并可以为文件命名N在当前vi编辑器窗口打开新的文件w保存文件,但是不退出vi编辑器set nu显示行号/查找匹配字符串功能?查找特定字符串%表示所有行

在底行模式中,常用的命令为q和w命令,这两个命令还可以和强制退出符号“!”一起使用,从而使得保存文本后,强制退出vi编辑器,但是一般不建议使用强制退出符号。退出vi编辑器的操作方式如图1-11所示。图1-11 退出vi编辑器

在退出vi编辑器之后,文档的编写就完成了,可以通过其他命令(如cat命令)来查看编辑的内容是否正确,如果不正确,还可以进行修改。也可以使用ls命令来查看新文件是否已经存在,如下所示: ben@ben-laptop:~$ ls -l test.txt -rw-r——r—— 1 ben ben 12 2014-05-29 21:25 test.txt ben@ben-laptop:~$ cat test.txt hello world

使用vi编辑器时要熟练掌握3种模式的相互转换方式以及能够进行的操作。在命令模式中可以通过命令来完成光标的定位、字符串的检索、文本的恢复/修改/替换/标记、行结合及文本位移等功能;插入模式能够实现文本的编辑功能;底行命令模式主要完成文本的全局替换、在文本中插入Shell命令、vi编辑器的设置、文本的存盘退出、文本块的复制、多个文本间的转换及缓冲区的操作功能。这3种模式的相互转换关系如图1-12所示。图1-12 vi编辑器3种模式相互转换示意图

通过图1-12可以看出,输入vi命令之后,默认进入命令行模式,而从命令行模式到插入模式只需要键入i键。当编辑完成后,可以使用ESC键+冒号的组合键进入底行模式,从而退出vi编辑器。从底行模式到命令行模式以及从插入模式到命令行模式,只需要按ESC键就可以实现。注意

vim编辑器的使用方式和vi相同,唯一的不同是创建文件时需要使用vim命令,而不是vi命令。1.4 走进Shell

X Windows等图形化系统的使用,使得Linux系统的操作变得和Windows系统一样方便,不少操作使用鼠标就可以完成。然而,许多的Linux系统功能必须使用Shell命令才能更加方便,并且效率要比使用图形化界面更高。虽然Shell没有图形界面那么直观,但是Shell伴随着Unix/Linux的发展,其功能也日趋完善。而且,在大部分的Linux服务器中是没有图形界面的,有的只有Shell。1.4.1 什么是Shell

Shell的中文意思为“贝壳”,在Linux系统中,Shell就类似于Linux系统的“贝壳”,在Linux系统的外部起着保护系统的作用,同时完成用户与Linux系统之间的数据以及信息的交互。对于任何系统来说,内核都是非常重要和脆弱的,如果内核受到损伤,会直接影响系统的稳定性。Shell的出现就起到了保护内核的作用。因为有了Shell以后,用户不会直接和内核进行“交流”,而是通过Shell进行信息和数据的转发,从而避免了内核直接暴露在用户面前,防止因为用户误操作造成内核的“受伤”。

Shell实际上是一个命令解释器,将用户的请求进行处理,翻译成Linux系统内核能够处理的内容。当需要执行的命令执行结束以后,将执行结果翻译成用户能够看懂的信息,并且显示在屏幕上。

Shell还是一种编程语言,其源文件一般被称为Shell脚本。Shell脚本类似于Windows系统中的批处理文件,能够将需要执行的命令放到脚本中,并且在脚本中能够定义变量、使用各种控制结构对命令的执行顺序做出限制。1.4.2 Shell在Linux系统中的作用

Shell在Linux系统的作用如图1-13所示。图1-13 Shell在Linux系统中的作用示意图

在图1-13中可以看出,Shell在Linux系统中的作用非常重要。当任何用户需要计算机完成某项功能时,发送的请求以Shell命令的方式首先由Shell解释成Linux内核能够理解的内容,然后才由Linux系统内核通过各种控制方式由特定的硬件设备完成用户的请求。而用户请求的最终结果则首先发送给Shell,然后由Shell解释成用户能够理解的方式并在适当的地方显示出来。

在使用Linux系统时,Shell具有双重含义。一种含义是指代Shell解释器,用来将用户输入的命令解释成内核能够“看懂”的语言,并且把命令的执行结果解释成用户能够看懂的信息。另外一种含义就是Shell脚本,可以理解为一种程序设计语言,在Shell脚本中定义了各种变量、各种内置参数,还能使用循环结构、分支结构等复杂的程序控制结构,可以用来实现“自动化”的处理。1.4.3 Shell的种类

随着Linux系统的发展,Linux系统中存在多种Shell可以使用,常用的Shell的类型如下:● Bourne Shell● Bash Shell● C Shell● Korn Shell

Bourne Shell是首个可以使用的Shell版本,在1977年底引入。Bourne Shell 既是一个交换式的命令解释器,又是一种命令编程语言。而对于一般的Linux系统来说,默认的Shell类型是Bash Shell。该类型的Shell源自于Bourne Shell(即sh)。Bash的全名为Bounce again Shell,是Linux系统发展早期较为重要的Shell版本,是GNU计划的一部分,用来替换Bourne Shell。当登录时,Shell会读取/etc/profile文件和用户主目录中的.profile文件,从而加载一些特定的信息,如环境变量等。

C Shell的主要作用是让用户更容易使用交互式功能,并且把ALGOL风格的语法变成了C语言的风格,从而方便了C程序员对Shell的操作。相对于Bourne Shell来说,C Shell新增了命令历史、别名、文件名替换以及作业控制等新功能。

在Linux系统发展的初期,只有两种Shell可以使用,一种是Bourne Shell,另外一种是C Shell,为了改变这种局面,Korn Shell被开发出来。Korn Shell融合了Bourne Shell和C Shell的优点,结合了C Shell的交互性,融合了Bourne Shell的语法,并且增加了数学计算、行内编辑等功能,

对于不同的操作系统来说,默认使用的Shell类型也不相同。不同系统的默认Shell如表1-14所示。表1-14 不同系统的默认Shell系统名称默认Shell类型AIXKorn ShellSolarisBourne ShellFreeBSDC ShellHP_UXPOSIX ShellLinuxBash

表1-14展示了不同系统中的默认Shell类型。本书主要以Bash作为默认的Shell类型,其他类型的Shell脚本的编写方式略有不同,在本书中暂不做介绍。有兴趣的读者可以参照相关的内容进行学习。注意

通过环境变量$SHELL可以判定当前系统默认的Shell类型。1.5 小结

本章是介绍Shell脚本的第一章,也是奠定Shell脚本基础的一章。本章主要介绍了Linux系统的一些基础内容,包括Linux系统的发展、Linux文件系统的结构、Linux系统的基本使用以及Shell的基础介绍。

Linux系统是一种类Unix系统,是林纳斯·托瓦兹出于个人兴趣爱好而开发出来的新的系统。该系统是一种free系统,它不单单是免费的系统,还可以自由地修改和发布,并且与Windows系统存在着本质的区别。

Linux系统的文件系统是采用日志式文件系统ext格式,目录结构采用树形结构,每一个目录都存储着和系统相关的部分内容。在系统中文件按照索引节点inode来进行存储,索引节点中包含着除文件内容和文件名之外的所有文件的基本信息。

Linux系统自使用之前需要登录,用户可以使用默认用户登录,还可以使用root用户登录。登录时需要输入用户对应的密码。只有用户名和密码相匹配,才可以进入系统。进入系统之后,可以通过菜单【系统管理】和【系统首选项】来对系统进行一些个性化设置。

Shell在Linux系统中既是一个“保护壳”,也是一个命令解释器,同时还是一种编程语言。Shell作为Linux内核和用户的沟通桥梁,可以将用户的的需求转换成内核能够执行的内容,同时还可以将内核运行的结果转换为用户可以看懂的内容。在不同的系统中,使用的Shell版本也不同,可以通过环境变量来查看默认的Shell是哪一种。第2章迈出Shell脚本编程第一步在Windows系统中经常需要使用批处理文件,就是使用一些DOS命令批量实现特定的功能。在Linux系统中,也存在这样的一类“批处理”文件。在文件中填写需要执行的Shell命令,使用这些Shell命令来解决一些特定的问题,这些“批处理文件”就是Shell脚本。本章作为Shell脚本的基础章节,主要介绍关于Shell脚本的基础知识,在后面的章节中将逐步介绍如何编写Shell脚本。本章的主要内容如下:● Shell脚本语言概述,包括Shell脚本基础内容以及如何使用Shell

终端● Shell命令格式● 如何编写最简单的Shell脚本2.1 Shell脚本语言概述

脚本语言是一种是特定的描述性语言,按照特定的格式编写成可执行文件,然后由计算机进行执行。一般来说,每一种系统中都会存在一种或多种脚本语言,来供用户使用这些语言编写相应的脚本程序,从而完成一些高级语言不适合完成的任务。

在Linux系统中,常用的脚本语言包括Shell脚本语言和Python脚本语言,本书中将主要介绍Shell脚本语言。对于Python脚本语言的使用,有兴趣的读者可以参考其他相关书籍来进行学习。2.1.1 Shell脚本语言的定义

Shell脚本,类似于Windows系统中的批处理命令,将Shell命令放入一个文本文件中,用正规表达式,实现管道命令、重定向等功能,还可以使用分支、循环以及逻辑判断等控制结构,以达到我们所想要的处理目的。通过执行该文本文件,执行放入文件中的所有的命令。这样可以方便系统管理员对系统进行批量化设置和处理,使用Shell命令来完成基本的操作,使得其执行效率比其他编程语言更高。

Shell脚本语言简单、易学、易用,而且还有很多是在Shell脚本中使用的小工具,如正则表达式、sed、gawk等,Shell脚本特别适合处理文件和目录之类的对象,从而以最简单的方式快速完成某些复杂的事情。

Shell 脚本语言是Linux/Unix系统上一种重要的脚本语言,在Linux/Unix领域应用极为广泛,熟练掌握Shell脚本语言是一个优秀的Linux/Unix开发者和系统管理员的成长必经之路。利用Shell 脚本语言可以简单地实现复杂的操作,而且Shell 脚本程序往往可以在不同版本的Linux/Unix系统上通用。2.1.2 Shell终端的基本使用

Shell命令需要在Shell终端中才能运行。Shell终端实现了命令解释器的作用,在安装完系统以后,一般都会默认安装Shell终端。打开Shell终端时需要按照下列路径进行:【应用程序】→【附件】→【终端】。打开Shell终端后,其窗口如图2-1所示。图2-1 打开的Shell终端示意图

在Shell终端中,输入的内容将从光标处开始,当命令输入完成之后,需要按下Enter键,那么Shell就将自动解释命令,并执行命令。

Shell终端的窗口和普通的Linux应用程序窗口一样,左上面的3个按钮分别是【关闭】按钮、【最小化】按钮、【最大化】按钮,这3个按钮对应着窗口的关闭、最小化到任务栏、全屏幕显示的功能,而在最上面显示的内容是Shell的命令提示符,显示了Shell终端当前的信息。

Shell终端的菜单栏中提供了Shell终端的常用功能,可以对Shell终端进行简单的设置。常用的设置包括设置Shell终端的首选项以及查看编码方式等。下面将对这些主要菜单的使用方式进行逐一介绍。2.1.3 Shell终端菜单的使用

Shell终端和普通的窗口一样,也存在菜单栏,在菜单栏中也有一些比较重要的菜单项。对于Shell终端来说,其菜单栏如图2-2所示。图2-2 Shell终端菜单栏

从图2-2中可以看到,Shell终端的菜单栏中都是些简单并且常用的菜单项。其中比较常用的菜单项有用于对Shell终端的基本配置进行修改的菜单【编辑(E)】中的【编辑配置文件】菜单项和用于打开子Shell标签的【文件(F)】中的【编辑配置文件】菜单项。该菜单项可以对Shell终端的基本配置进行修改,打开该子菜单以后,其内容显示如图2-3所示。图2-3 【编辑配置文件】菜单项内容示意图

通过图2-3可以看出,在子菜单中可以对Shell终端进行一些设置,如对标题、颜色、背景色等进行相关的设置。在进行了相应的设置以后,Shell终端会立即按照最新的配置进行显示,除非再改回原来的配置。2.2 Shell命令格式介绍

Shell脚本的基本元素是Shell命令,在Shell中执行任何命令都需要注意并不是每个命令的使用方式都是相同的,每个命令有每个命令特定的要求,因此需要注意Shell命令的格式。2.2.1 Shell命令格式

在每一次输入命令之前,在输入光标的前面都会出现同样的文字,这些文字在输入语句的前面始终存在,但是会随着系统中一些信息的变化而发生改变,这些信息的作用如图2-4所示。图2-4 命令提示符中符号的作用

通过图2-4可以看出,这些内容最前面的部分是当前用户的用户名。在图2-4显示的命令行提示符中,可以看到使用的用户名是ben用户,在符号“@”的后面是计算机名,这些在安装系统的时候会有专门的界面提示输入。命令行提示符会随着目录的变化而发生变化。当前登录用户发生变化时,符号“$”也会变成其他的字符。在Linux系统中,一般只有如下两种用户:● 普通用户● 超级用户

普通用户使用的提示符是美元符号“$”,而超级用户使用的符号是波浪线“~”,因此可以通过Shell终端中的命令提示符来判定当前的用户是普通用户还是超级用户,从而进一步得出是否具有操作某些命令的权限。2.2.2 命令行界面介绍

命令行界面就是在提示符下输入命令的界面,如打开的Shell终端界面以及在Windows系统中使用的DOS界面等。在命令行界面中没有图形化的操作环境,只能使用系统能够执行的命令完成一定的操作。虽然其操作不是很方便,但是其执行速度要比图形化操作更快,功能也更加强大。不足之处就是需要了解系统中存在哪些可以使用的命令,并需要了解每个命令的使用方式以及作用。

传统的Unix环境就是 CLI(Command Line Interface,命令行界面),包括最终的Linux系统也是使用命令行界面。在命令行界面中,只能在命令行下键入相应的命令来执行想要的操作。对于初学者来说,没有了鼠标的辅助操作后,只能依靠于键盘的操作,这样的操作显然是非常复杂的,但是其操作效率却比图形界面高,功能也更强大。

在Ubuntu系统中,除了存在桌面环境以外,还同时存在6个命令行界面,在命令行界面中,没有方便的鼠标操作和绚丽的图形化操作环境。在命令行环境中,只能使用系统支持的Shell命令来完成所有的操作,不能使用鼠标进行操作,类似于Windows操作系统中的DOS环境。在跳转到命令行环境时,首先需要使用正确的用户和密码进行登录,只有通过验证的用户才可以对系统进行操作。而在输入密码的时候,输入的内容是不可见的,因此要注意输入的正确性。登录部分如图2-5所示。图2-5 命令行界面的登录

通过图2-5可以看出登录成功后,就可以对系统进行操作了。在进行操作时,只能使用Shell命令来完成各种操作,而对于其他的,在图形化操作环境中可以使用的东西将不再使用。Ubuntu 10.04系统的命令行界面如图2-6所示。图2-6 Ubuntu 10.04系统的命令行界面

通过图2-6中显示的内容可以看出,在登录系统的时候也需要使

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载