1.Vim文本编辑器
默认安装在当前所有Linux系统中的文本编辑器,有三种模式:
1.命令模式:控制光标移动,可对文本复制、粘贴、删除、查找等。
2.输入模式:正常的文本录入。 3.末行模式:保存或退出文档,以及设置编辑环境。默认为命令模式,需先切换至输入模式再进行文档编写,编写完毕需先返回命令模式,再进入末行模式,执行文档保存或退出。无法直接从输入模式切换至末行模式。
Vim中的常用命令:
- dd:删除(剪切)光标所在行
- 5dd:删除(剪切)从光标处开始的5行
- yy:复制光标所在行
- 5yy:复制从光标处开始的5行
- n:显示搜索命令定位到的下一个字符
- N:显示搜索命令定位到的上一个字符
- u:撤销上一步操作
- p:粘贴之前删除(dd)或复制(yy)的数据到光标后
末行模式中可用的命令
- :w :保存
- :q :退出
- :q! :强制退出(放弃对文档的修改)
- :wq! :强制保存退出
- :set nu :显示行号
- :set nonu :不显示行号
- :命令 :执行该命令
- :整数 :跳转到该行
- :s/one/two :将当前光标所在行的第一个one替换成two
- :s/one/two/g :将当前光标所在行的所有one替换成two
- :%s/one/two/g :将全文中所有的one替换成two
- ?字符串 :在文本中从下至上搜索该字符串
- /字符串 :在文本中从上至下搜索该字符串
1.1 编写简单文档
首先打开文档practice.txt,如果文档不存在,则创建一个临时的输入文件。
这里默认是命令模式,不能随意输入文本,需要按下a、i 或 o 键方能切换至输入模式,其中,a 和 i 分别表示在光标后一位和光标当前位置切换到输入模式,o 则是在光标的下面再创建一个空行,此时敲击 a 键进入输入模式。
然后便可以输入文本。
如果想要保存,必须先按下Esc键退出输入模式 返回命令模式,然后再输入 :wq! 切换到末行模式才能完成保存退出操作。
然后就可以查看文档的内容了
如果要在原有文档后面追加内容,则从命令模式切换至输入模式时,使用 o 键更加方便。
1.2 配置主机名称
为了便于在局域网中查找某台特定的主机,或者对主机进行区分,除了要有IP地址外,还要为主机配置一个主机名,主机之间可以通过这个类似于域名的名称来相互访问。在Linux
系统中,主机名大多保存在/etc/hostname文件中,接下来将/etc/hostname文件的内容修改为“linuxprobe.com”,步骤如下。
第1步:使用Vim编辑器修改“/etc/hostname”主机名称文件。
第2步:把原始主机名称删除后追加“linuxprobe.com”。注意,使用Vim编辑器修改主机名称文件后,要在末行模式下执行:wq!命令才能保存并退出文档。
第3步:保存并退出文档,然后使用hostname命令检查是否修改成功。
hostname命令用于查看当前的主机名称,但有时主机名称的改变不会立即同步到系统中,所以如果发现修改完成后还显示原来的主机名称,可重启虚拟机后再行查看
1.3 配置网卡信息
网卡IP地址配置的是否正确是两台服务器是否可以相互通信的前提。在Linux系统中,一切都是文件,因此配置网络服务的工作其实就是在编辑网卡配置文件
在RHEL 7中,网卡配置文件的前缀以ifcfg开始,加上网卡名称共同组成了网卡配置文件的名字,例如ifcfg-eno16777736,ifconfig-ens32 等
配置网卡设备为开机启动,并且IP地址、子网、网关等信息由人工指定,步骤如下:
首先切换到 /etc/sysconfig/network-scripts 目录中(存放着网卡的配置文件)
使用Vim编辑器修改网卡文件ifcfg-ens32,逐项写入下面的配置参数并保存退出。由于每台设备的硬件及架构是不一样的,可使用ifconfig命令确认网卡的默认名称
TYPE=Ethernet
BOOTPROTO=static NAME=ens32 ONBOOT=yes IPADDR=192.168.10.10 NETMASK=255.255.255.0 GATEWAY=192.168.10.1 DNS1=192.168.10.1
- 重启网络服务并测试网络是否连通
执行重启网卡设备的命令(在正常情况下不会有提示信息),然后通过ping命令测试网络能否联通。由于在Linux系统中ping命令不会自动终止,因此需要手动按下Ctrl-c键来强行结束进程。
1.4 配置Yum软件仓库
Yum软件仓库的作用是为了进一步简化RPM管理软件的难度以及自动分析所需软件包及其依赖关系的技术。可以把Yum想象成是一个硕大的软件仓库,里面保存有几乎所有常用的
工具,而且只需要说出所需的软件包名称,系统就会自动为您搞定一切。
搭建并配置Yum软件仓库的大致步骤如下所示。
第1步:进入到/etc/yum.repos.d/目录中(因为该目录存放着Yum软件仓库的配置文件)。
第2步:使用Vim编辑器创建一个名为rhel7.repo的新配置文件(文件名称可随意,但后缀必须为.repo),逐项写入下面的配置参数并保存退出(不要写后面的中文注释)。
[rhel-media] :Yum软件仓库唯一标识符,避免与其他仓库冲突。
name=linuxprobe:Yum软件仓库的名称描述,易于识别仓库用处。
baseurl=..)、HTTP(..)、本地(..)。
enabled=1:设置此源是否可用;1为可用,0为禁用。
gpgcheck=1:设置此源是否校验文件;1为校验,0为不校验。
gpgkey=。
第3步:按配置参数的路径挂载光盘,并把光盘挂载信息写入到/etc/fstab文件中。
第4步:使用“yum install httpd -y”命令检查Yum软件仓库是否已经可用。
2.编写Shell脚本
Shell脚本命令的工作方式有两种:交互式和批处理。
交互式(Interactive):用户每输入一条命令就立即执行。
批处理(Batch):由用户事先编好一个完整的Shell脚本,Shell会一次性的执行脚本中的诸多命令。
查看SHELL变量发现系统已默认使用Bash作为命令行的终端解释器了。
2.1 编写简单的脚本
创建example.sh并写入如下内容
Shell脚本的文件可以任意命名,但是为了避免被误认为普通文件,一般以 .sh 后缀命名。
上面的文件中出现了三总不同的元素:
第一行的脚本声明(#!)告诉系统使用哪种Shell解释器执行脚本;
第二行的注释信息(#)是对脚本功能和某些命令的介绍;
第三、四行是可执行语句,即Linux命令。
执行结果如下:
除了通过bash命令直接运行Shell脚本之外,还可以通过输入完整路径的方式来执行。这种方式默认会因为权限不足报错,此时只需为脚本文件增加执行权限即可。
2.2 接收用户的参数
上文脚本命令过于死板,为了能够接收用户的参数,可以使用Linux内设的用于接受参数的变量。
$0:当前Shell脚本程序的名称
$#:总共有几个参数 $*:所有位置的参数值 $?:显示上一次命令的执行返回值 $1、$2、$3...分别对应第1个、第2个、第3个位置的参数值,以此类推。examle.sh:
执行
2.3 判断用户的参数
Shell脚本中的条件测试语法可以判断表达式是否成立,若成立返回数字0,否则返回其他随机数。条件测试语句格式:[ 条件表达式 ],条件表达式两边均应有一个空格。
按测试对象划分,条件测试语句可分为四种:文件测试语句、逻辑测试语句、整数值比较语句、字符串比较语句。
文件测试即使用指定条件来判断文件是否存在 或 权限是否满足等情况的运算符。文件测试的运算符及其作用:
-d:测试文件是否为目录类型
-e:测试文件是否存在 -f:判断是否为一般文件 -r:测试当前用户是否有权限读取 -w:测试当前用户是否有权限写入 -x:测试当前用户是否有权限执行判断 /etc/fstab 是否为一个目录类型的文件,返回值不是0,所以不是一个目录类型的文件。
返回值为0,所以 /etc/fstab 是个一般文件。
&& 在Shell中是逻辑“与”的运算符,表示前面的命令执行成功才会执行它后面的命令。
|| 表示逻辑“或”,前面命令执行失败才会执行后面的。
还有一种逻辑语句是“非”,符号为感叹号(!),表示把条件测试中的判断结果取相反值。
整数比较运算仅是对数字的操作,不能将数字与字符串、文件等内容一起操作,而且不能想当然的使用日常生活中的大于小于和等号。因为等号与赋值命令冲突,大于小于号与输出和输入重定向符号冲突。规范的整数比较运算符如下:
-eq:是否等于
-ne:是否不等于 -gt:是否大于 -lt:是否小于 -le:是否小于或等于 -ge:是否大于或等于字符串比较语句用于判断测试字符串是否为空,或两个字符串是否相同。运算符如下:
=:比较字符串是否相同
!=:比较字符串是否不同 -z:判断字符串内容是否为空String变量为空,即未定义该变量。
3.流程控制语句
3.1 if条件测试语句
① if条件语句的单分支结构由if、then、fi 关键字组成,语法格式:
if 条件测试操作
then 命令序列 fi此例即为通过单分支的if语句完成的文件创建。
② if的双分支结构由if、then、else、fi 关键字组成,语法格式:
if 条件测试操作
then 命令序列1 else 命令序列2 fiping命令测试与对方主机网络联通性,-c 规定尝试次数, -i 定义每个数据包的发送间隔, -W 定义等待超时时间。
③ if多分支结构由if、then、else、elif、fi 关键字组成,语法格式:
if 条件测试操作
then 命令序列1 elif 条件测试操作2 then 命令序列2 else 命令序列3 firead命令用于读取用户输入信息,能把接收到的用户输入信息赋值给后面的指定变量, -p 表示向用户显示一定的提示信息。
3.2 for条件循环
for循环允许脚本一次读取多个信息,然后逐一对信息进行操作处理,语法格式:
for 变量名 in 取值列表
do 命令序列 done3.3 while条件循环语句
语法格式:
while 条件测试操作
do 命令序列 done以下便是一个通过while循环来猜测数值大小的脚本 Guess.sh
$RANDOM变量表示调取一个随机数(范围0~32767),这里把它对1000进行取余操作。此脚本可以让用户与程序互动,最终得出正确的随机数,执行结果如下:
3.4 case条件测试语句
语法结构:
case 变量值 in
模式 1) 命令序列 1 ;; 模式 1) 命令序列 2 ;; ...... *) 默认命令序列 esac在while循环的例子中有个缺陷,就是输入只能为数字,如果输入非数字脚本就会崩溃。这个时候就可以通过case结合通配符来解决这个问题。
4.计划任务服务程序
计划任务分为一次性计划任务与长期性计划任务,可以按照如下方式理解:
一次性计划任务:今晚11点30分开启网站服务。
长期性计划任务:每周一的凌晨3点25分把/home/wwwroot目录打包备份为backup.tar.gz
顾名思义,一次性计划任务只执行一次,一般用于满足临时的工作需求。我们可以用at命令实现这种功能,只需要写成“at 时间”的形式就可以。如果想要查看已设置好但还未执行的一次性计划任务,可以使用“at -l”命令;要想将其删除,可以用“atrm 任务序号”。在使用at命令来设置一次性计划任务时,默认采用的是交互式方法。例如,使用下述命令将系统设置为在今晚23:30分自动重启网站服务。
如果希望Linux系统能够周期性地、有规律地执行某些具体的任务,那么Linux系统中默认启用的crond服务简直再适合不过了。创建、编辑计划任务的命令为“crontab -e”,查看当前计划任务的命令为“crontab -l”,删除某条计划任务的命令为“crontab -r”。另外,如果您是以管理员的身份登录的系统,还可以在crontab命令中加上-u参数来编辑他人的计划任务。
使用crond服务设置任务的参数格式:“分、时、日、月、星期 命令”。
假设在每周一、三、五的凌晨3点25分,都需要使用tar命令把某个网站的数据目录进行打包处理,使其作为一个备份文件。我们可以使用crontab -e命令来创建计划任务。为自己创建计划任务无需使用-u参数,具体的实现效果的参数如crontab -l命令结果所示:
需要说明的是,除了用逗号(,)来分别表示多个时间段,例如“8,9,12”表示8月、9月和12月。还可以用减号(-)来表示一段连续的时间周期(例如字段“日”的取值为“12-15”,则表示每月的12~15日)。以及用除号(/)表示执行任务的间隔时间(例如“*/2”表示每隔2分钟执行一次任务)。
如果在crond服务中需要同时包含多条计划任务的命令语句,应每行仅写一条。例如我们再添加一条计划任务,它的功能是每周一至周五的凌晨1点钟自动清空/tmp目录内的所有文件。尤其需要注意的是,在crond服务的计划任务参数中,所有命令一定要用绝对路径的方式来写,如果不知道绝对路径,请用whereis命令进行查询,rm命令路径为下面输出信息中加粗部分。
计划任务中的“分”字段必须有数值,绝对不能为空或是*号,而“日”和“星期”字段不能同时使用,否则就会发生冲突。