linux就该这么学--课程第五天

Posted 岩小鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux就该这么学--课程第五天相关的知识,希望对你有一定的参考价值。

学习内容

  Vim文本编辑器

  编写shell脚本

  流程控制语句

  计划任务服务程序

1. Vim文本编辑器

  1.1 三种模式: 

    命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。

    输入模式:正常的文本录入。

    末行模式:保存或退出文档,以及设置编辑环境。

    

 

 

   

     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
?字符串 在文本中从下至上搜索该字符串
/字符串 在文本中从上至下搜索该字符串

      使用a、i、o三个键从命令模式切换到输入模式。

      其中,a键与i键分别是在光标后面一位和光标当前位置切换到输入模式,

         o键则是在光标的下面再创建一个空行,此时可敲击a键进入到编辑器的输入模式

  1.2 配置主机名称

    为了便于在局域网中查找某台特定的主机,或者对主机进行区分,除了要有IP地址外,还要为主机配置一个主机名,主机之间可以通过这个类似于域名的名称来相互访问。在Linux系统中,主机名大多保存在/etc/hostname文件中,接下来将/etc/hostname文件的内容修改为“ytt.com”

    第1步:使用Vim编辑器修改“/etc/hostname”主机名称文件。

    第2步:把原始主机名称删除后追加“ytt.com”。注意,使用Vim编辑器修改主机名称文件后,要在末行模式下执行:wq!命令才能保存并退出文档。

    第3步:保存并退出文档,然后使用hostname命令检查是否修改成功。

    hostname命令用于查看当前的主机名称,但有时主机名称的改变不会立即同步到系统中,所以如果发现修改完成后还显示原来的主机名称,可重启虚拟机后再行查看: 命令行中输入 hostname 即可

  1.2 配置网卡信息

    网卡IP地址配置的是否正确是两台服务器是否可以相互通信的前提。在Linux系统中,一切都是文件,因此配置网络服务的工作其实就是在编辑网卡配置文件.

    在RHEL 5、RHEL 6中,网卡配置文件的前缀为eth,第1块网卡为eth0,第2块网卡为eth1;以此类推。而在RHEL 7中,网卡配置文件的前缀则以ifcfg开始,加上网卡名称共同组成了网卡配置文件的名字,例如ifcfg-eno16777736;好在除了文件名变化外也没有其他大的区别。

    现在有一个名称为ifcfg-eno16777736的网卡设备,我们将其配置为开机自启动,并且IP地址、子网、网关等信息由人工指定,其步骤应该如下所示。

    第1步:首先切换到/etc/sysconfig/network-scripts目录中(存放着网卡的配置文件)。

    第2步:使用Vim编辑器修改网卡文件ifcfg-eno16777736,逐项写入下面的配置参数并保存退出。由于每台设备的硬件及架构是不一样的,因此请读者使用ifconfig命令自行确认各自网卡的默认名称。

    第3步:重启网络服务并测试网络是否联通。

    进入到网卡配置文件所在的目录,然后编辑网卡配置文件,在其中填入下面的信息:

    

 

 

     执行重启网卡设备的命令(在正常情况下不会有提示信息),然后通过ping命令测试网络能否联通。由于在Linux系统中ping命令不会自动终止,因此需要手动按下Ctrl-c键来强行结束进程。

 

 

   1.4 配置Yum仓库

    Yum软件仓库的作用是为了进一步简化RPM管理软件的难度以及自动分析所需软件包及其依赖关系的技术。可以把Yum想象成是一个硕大的软件仓库,里面保存有几乎所有常用的工具,而且只需要说出所需的软件包名称,系统就会自动为您搞定一切。

    第1步:进入到/etc/yum.repos.d/目录中(因为该目录存放着Yum软件仓库的配置文件)。

    第2步:使用Vim编辑器创建一个名为rhel7.repo的新配置文件(文件名称可随意,但后缀必须为.repo),逐项写入下面加粗的配置参数并保存退出(不要写后面的中文注释)。

[rhel-media] :Yum软件仓库唯一标识符,避免与其他仓库冲突。

name=linuxprobe:Yum软件仓库的名称描述,易于识别仓库用处。

baseurl=file:///media/cdrom:提供的方式包括FTP(ftp://..)、HTTP(http://..)、本地(file:///..)。

enabled=1:设置此源是否可用;1为可用,0为禁用。

gpgcheck=1:设置此源是否校验文件;1为校验,0为不校验。

gpgkey=file:///media/cdrom/RPM-GPG-KEY-redhat-release:若上面参数开启校验,那么请指定公钥文件地址。

    第3步:按配置参数的路径挂载光盘,并把光盘挂载信息写入到/etc/fstab文件中。

    第4步:使用“yum install httpd -y”命令检查Yum软件仓库是否已经可用。

    进入/etc/yum.repos.d目录中后创建Yum配置文件:

      

 

 

     创建挂载点后进行挂载操作,并设置成开机自动挂载(详见第6章)。尝试使用Yum软件仓库来安装Web服务,出现Complete!则代表配置正确:

 

 

 

 

2. 编写shell脚本

  2.1 接收用户的参数

    Linux系统重大shell脚本语言内设了用于接收参数的变量,变量之间可以使用空格间隔。

    $0对应的是当前Shell脚本程序的名称,

    $#对应的是总共有几个参数,

    $*对应的是所有位置的参数值,

    $?对应的是显示上一次命令的执行返回值,

    $1、$2、$3……则分别对应着第N个位置的参数值

 

 

 

     

  vim example.sh
#!/bin/bash
echo "当前脚本名称为$0"
echo "总共有$#个参数,分别是$*。"
echo "第1个参数为$1,第5个为$5。"
[root@linuxprobe ~]# sh example.sh one two three four five six
当前脚本名称为example.sh
总共有6个参数,分别是one two three four five six。
第1个参数为one,第5个为five。

  2.2 判断用户的参数

    Shell脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字0,否则便返回其他随机数值。条件测试语法的执行格式如下图所示。切记,条件表达式两边均应有一个空格

    

    按照测试对象来划分,条件测试语句可以分为4种:

      文件测试语句;

      逻辑测试语句;

      整数值比较语句;

      字符串比较语句。

    文件测试即使用指定条件来判断文件是否存在或权限是否满足等情况的运算符,具体的参数如表

操作符 作用
-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行

    使用文件测试语句来判断/etc/fstab是否为一个目录类型的文件,然后通过Shell解释器的内设$?变量显示上一条命令执行后的返回值。如果返回值为0,则目录存在;如果返回值为非零的值,则意味着目录不存在:

    

 

 

     再使用文件测试语句来判断/etc/fstab是否为一般文件,如果返回值为0,则代表文件存在,且为一般文件:

    

 

 

     逻辑"与&","或||","非!"

    

 

 

     命令A  &&  命令B  ||  命令C

    若A为真,则执行B; 反之执行C

  整数比较运算符仅是对数字的操作,不能将数字与字符串、文件等内容一起操作,而且不能想当然地使用日常生活中的等号、大于号、小于号等来判断。因为等号与赋值命令符冲突,大于号和小于号分别与输出重定向命令符和输入重定向命令符冲突。因此一定要使用规范的整数比较运算符来进行操作。可用的整数比较运算符如表

操作符 作用
-eq 是否等于
-ne 是否不等于
-gt 是否大于
-lt 是否小于
-le 是否等于或小于
-ge 是否大于或等于

    

 

 

 

 

   字符串比较语句用于判断测试字符串是否为空值,或两个字符串是否相同。它经常用来判断某个变量是否未被定义(即内容为空值),理解起来也比较简单。字符串比较中常见的运算符如表

操作符 作用
= 比较字符串内容是否相同
!= 比较字符串内容是否不同
-z 判断字符串内容是否为空

 

 

 

3. 流程控制语句

  3.1 if条件测试语句

   

 

 

   

 

 

 

 

   3.2 for条件循环语句

  

 

 

   3.3 while条件循环语句

   

 

 

   3.4 case条件测试语句

    

 

 4. 计划任务服务程序

  计划任务分为一次性计划任务与长期性计划任务:

    一次性计划任务:今晚11点30分开启网站服务。

    长期性计划任务:每周一的凌晨3点25分把/home/wwwroot目录打包备份为backup.tar.gz。

  4.1 at命令

  一次性计划任务只执行一次,一般用于满足临时的工作需求。可以用at命令实现这种功能,只需要写成“at 时间”的形式就可以。

  如果想要查看已设置好但还未执行的一次性计划任务,可以使用“at -l”命令;

  要想将其删除,可以用“atrm 任务序号”。

  使用at命令来设置一次性计划任务时,默认采用的是交互式方法。

  例如,使用下述命令将系统设置为在今晚23:30分自动重启网站服务。

  

 

   4.2 crontab命令

    希望Linux系统能够周期性地、有规律地执行某些具体的任务,那么Linux系统中默认启用的crond服务简直再适合不过了。

    创建、编辑计划任务的命令为“crontab -e”,

    查看当前计划任务的命令为“crontab -l”,

    删除某条计划任务的命令为“crontab -r”。

    另外,如果您是以管理员的身份登录的系统,还可以在crontab命令中加上-u参数来编辑他人的计划任务。

    需要说明的是,除了用逗号(,)来分别表示多个时间段,

    例如“8,9,12”表示8月、9月和12月。还可以用减号(-)来表示一段连续的时间周期(例如字段“日”的取值为“12-15”,则表示每月的12~15日)。以及用除号(/)表示执行任务的间隔时间(例如“*/2”表示每隔2分钟执行一次任务)。

    如果在crond服务中需要同时包含多条计划任务的命令语句,应每行仅写一条。

    例如我们再添加一条计划任务,它的功能是每周一至周五的凌晨1点钟自动清空/tmp目录内的所有文件。尤其需要注意的是,在crond服务的计划任务参数中,所有命令一定要用绝对路径的方式来写,如果不知道绝对路径,请用whereis命令进行查询,rm命令路径为下面输出信息中加粗部分。

    注意事项:   

    在crond服务的配置参数中,可以像Shell脚本那样以#号开头写上注释信息,这样在日后回顾这段命令代码时可以快速了解其功能、需求以及编写人员等重要信息。

    计划任务中的“分”字段必须有数值,绝对不能为空或是*号,而“日”和“星期”字段不能同时使用,否则就会发生冲突。

 

  

以上是关于linux就该这么学--课程第五天的主要内容,如果未能解决你的问题,请参考以下文章

linux就该这么学,第十天了

《Linux就该这么学》第七天课程

Linux就该这么学----第1课

linux学习第八天 (Linux就该这么学)

Linux就该这么学——第17章OpenLDAP部署目录服务

《Linux就该这么学》学习介绍