Linux下shell编程完结篇(shell编程的相关练习(ssh的管理及数据库的管理),数组,随机数,Linux6.5环境下nginx服务的搭建,及Linux6.5环境下nginx启动脚本的编写。)

一.shell编程的相关练习

1.练习题1:ssh的管理

编写脚本实现功能:

(1)在/var/log/secure查找连接失败的主机,并统计次数
(2)累计连接失败超过3次,将此主机加入系统黑名单(/etc/hosts.deny),黑名单的格式为sshd:IP

脚本内容:

或者:

脚本运行结果:

2.练习题2:数据库的管理

实验环境:安装好数据库并进行安全初始化

<1>编写脚本实现功能:

(1)建立三个数据库,名字分别为tom,harry,natasha

(2)并分别对其进行压缩备份到/home/backup目录下,备份文件名称为“库名称_日期.sql.gz”。其中日期是通过"data  +%F"命令得到的。

脚本内容:

脚本运行结果:

<2>编写脚本实现功能:

(1)在已有的tom,harry和natasha数据库中创建test数据表,并向数据表中插入值

脚本内容:

  1. 值的注意的是11行中,进入数据库,创建表,以及插入数据,必须写在一个命令中,不能分开写;
  2. 11行中要进入数据库,这里使用的是USE $daname,这里必须是双引号,(也不可以USE $daname用单引号,给里面的$dbname加上双引号。)否则识别不了$dabname这个变量的值。
  3. varchar类型的必须是单引号,不可以是双引号。

脚本运行结果:

<3>编写脚本实现功能:

(1)显示已有的tom,harry和natasha数据库中test数据表中的内容

脚本内容:

脚本运行结果:

<4>编写脚本实现功能:

(1)数据库备份,执行script.sh   $dbpasswd 备份数据库中所有库(除了mysql数据库)到/mnt/mysqldump目录中,备份文件名称为“库名称.sql”,

(2)当此文件存在时进入交互模式,询问动作,输入“s”跳过备份,输入“b”,备份“库名称.sql”为“库名称_backup.sql”,输入“O”时,覆盖原文件,e表示退出

脚本内容:

或者(teacher)

脚本运行结果:

二.数组

        所谓数组,是有序的元素序列。 [1]  若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的 各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。 [1]  这些无序排列的同类数据元素的集合称为数组。

        数组是用于储存多个相同类型数据的集合。

1.数组的定义方法

        数组的定义方法主要有三种:

<1>方法一:

一对括号表示是数组,数组元素用“空格”符号分割开。

<2>方法二:

一对括号表示是数组,数组元素用“空格”符号分割开。

<3>方法三:动态定义数组变量,并使用命令的输出结果作为数组的内容(其中命令的输出结果有两种表示形式)

使用命令的结果作为数组的内容。

2.数组的打印

<1>数组中元素的打印

数组中单个元素的打印

数组中全部元素的打印

用${数组名[下标]} 下标是从0开始 下标是:*或者@ 得到整个数组内容

<2>数组中元素个数的打印

用${#数组名[@或*]} 可以得到数组长度

<3>数组中元素长度的打印

用${#数组名[下标]} 可以得到数组中元素的长度

3.数组的赋值

直接通过数组名[下标] 就可以对其进行引用赋值(覆盖原来的值),如果下标不存在,自动添加新一个数组元素

4.数组的删除

直接通过:unset 数组[下标] 可以清除相应的元素,不带下标,清除整个数据。

5.数组内容的截取(分片)和替换

<1>数组内容的截取(分片)

从下标为0的字符出发,显示两个字符。

直接通过 ${数组名[@或*]:起始位置:长度} 切片原先数组,返回是字符串,中间用“空格”分开,因此如果加上”()”,将得到切片数组,上面例子:c 就是一个新数据。

<2>数组内容的替换

调用方法是:${数组名[@或*]/查找字符/替换字符} 该操作不会改变原先数组内容,如果需要修改,可以看上面例子,重新定义数据。

6.数组中for和while循环的遍历

案例1:利用循环输出数组元素

方法一:利用for循环

方法二:利用while循环

案例2:利用循环打印下面这句话中字母个数小于6的单词
I  am  linux  student  welcome  to student  training  class

方法一:利用for循环

方法二:利用while循环

三.随机数

1.常见产生随机数的方法

<1>方法一:通过系统环境变量($RANDOM)实现(产生的主要是数字)

RANDOM的随机数范围为0~32767,因此,加密性不是很好,可以通过在随机数后增加加密字符串(就是和密码生成有关的字符串)的方式解决,最后再一起执行md5sum操作并截取结果的后n位,这样一来,就无法根据随机范围0~32767猜出具体结果了。

示例:取出5-15位

<2>方法二:通过openssl产生随机数(产生的主要是字母)

openssl rand 用于产生指定长度个bytes的随机字符。

可以看见,这10个字节的随机数显示为乱码。

-base64 / -hex   对随机字符串进行base64编码或用hex格式显示

注意:这里的10是10个字节。

令数字与大小写字符相结合,并带上特殊字符,可以达到很长的位数,这样的随机数很安全。

2.md5sum命令

<1>背景

        在网络传输、设备之间转存、复制大文件等时,可能会出现传输前后数据不一致的情况。这种情况在网络这种相对更不稳定的环境中,容易出现。那么校验文件的完整性,也是势在必行的。

        md5sum命令用于生成和校验文件的md5值。它会逐位对文件的内容进行校验。是文件的内容,与文件名无关,也就是文件内容相同,其md5值相同。md5值是一个128位的二进制数据,转换成16进制则是32(128/4)位的进制值。

        md5校验,有很小的概率不同的文件生成的md5可能相同。比md5更安全的校验算法还有SHA*系列的。

       在网络传输时,我们校验源文件获得其md5sum,传输完毕后,校验其目标文件,并对比如果源文件和目标文件md5 一致的话,则表示文件传输无异常。否则说明文件在传输过程中未正确传输。

<2>md5sum命令的重要选项

  • -b 以二进制模式读入文件内容
  • -t 以文本模式读入文件内容
  • -c 根据已生成的md5值,对现存文件进行校验
  • --status 校验完成后,不生成错误或正确的提示信息,可以通过命令的返回值来判断。

<3>使用案例

测试文件

测试过程:

  • (1)生成文件md5值:ma5sum   filename

md5sum校验的是文件内容,与文件名无关

以文本模式或二进制模式读入文件并对其进行校验

        -b 以二进制模式读入内容
        -t 以文本模式读入文件内容进行校验
        虽然是不同的读入模式,但是在进行求md5的时候,是一样的,因为是逐位校验的。
        如下文本文件,无论通过哪种模式读取md5都一致。

  • (2)md5值重定向

        将生成md5值重定向到指定的文件,通常文件的扩展名我们会命为.md5

  • (3)md5校验:md5sum   –c   .md5

         -c选项来对文件md5进行校验。校验时,根据已生成的md5来进行校验。生成当前文件的md5,并和之前已经生成的md5进行对比,如果一致,则返回OK,否则返回错误信息。

        修改文件后,文件md5变化

         再次进行校验,会出现如下的错误信息。

        --status,不显示校验信息,以命令返回值来判断
                 校验一致返回0,不一致返回1

3.随机数案例

<1>案例1:面试题:

使用for循环在/xin目录下批量创建10个html文件,其中每个文件需要包含10个随机小写字母加固定字符串"_xin.html"

说明:这里不使用第一种生成随机数的方法来裁剪10位小写字母的原因是,第一种方法产生的随机数的位数是不确定的,可能裁剪不出来10位随机数,而第二种方法可以改变后面接的字节数来使得其位数增多,裁剪出来10位小写字母的可能行比较大。

<2>案例2:

建立xin01-xin10十个用户,并给每个用户随机生成10位密码,将用户及其对应的密码存储在一个/xin/passwd文件中(存储格式为:"user:用户名     passwd:密码值")。

方法一:

方法二:(teacher)

值的注意的是:第2行,14-19行是为了实现下面的is  ok的效果。

四.Linux6.5环境下nginx服务的搭建

1.Linux6.5系统如何对服务进行控制

Linux6版本的系统对服务的控制不同于Linux7版本

<1>设置服务开启/关闭/重启/查看状态

systemctl

  • Linux7版本使用"systemctl  start|stop|restart|status    服务名称"命令

/etc/init.d/

  • Linux6版本使用脚本来对服务进行控制(脚本所在目录:/etc/init.d/):"/etc/init.d/服务名称    start|stop|restart|status"命令

<2>设置服务开机自启和开机不自启

systemctl

  • Linux7版本使用"systemctl  enable|disable    服务名称"命令

chkconfig

  • 而Linux6版本使用

    chkconfig   服务名称   on 设置某个服务开机启动(默认在2345四个模式下执行)

    chkconfig   服务名称    off 设置某个服务开机不启动(默认在2345四个模式下执行)

2nginx服务介绍

Nginx是一款相当优秀的用于部署动态网站的轻量级服务程序,它最初是为俄罗斯门户站点而开发的,因其稳定性、功能丰富、占用内存少且并发能力强而备受 用户信赖。Nginx服务程序的稳定性源自于采用了分阶段的资源分配技术,降低了CPU与内存的占用率,所以使用Nginx程序部署的动态网站环境不仅十 分稳定、高效,而且消耗的系统资源也很少。更重要的事,Nginx还支持热部署技术,可以7X24小时不间断提供服务,还可以在不暂停服务的情况下直接对 Nginx服务程序进行升级。

3.Linux6.5环境下nginx服务的搭建的系统环境

  1. rhel6.5操作系统
  2. Nginx-1.14.0.tar.gz
  3. 服务器IP地址:172.25.83.183
  4. yum源:172.25.83.83

网络配置过程

yum源配置过程

4.Linux6.5环境下nginx服务的搭建过程

<1>将压缩包Nginx-1.14.0.tar.gz通过scp命令传到Linux6.5系统的虚拟机的家目录下,并将其解压到家目录下

值的注意的是,有时候安装的Linux6.5系统在安装时没有支持scp命令的安装包,此时,就需要安装相应的软件包(openssh-clients)来使得系统支持scp命令。

<2>修改配置文件

[root@localhost ~]# cd   nginx-1.14.0
[root@localhost nginx-1.14.0]# vim   src/core/nginx.h

 14 #define NGINX_VER          "nginx/"NGINX_VERSION

改为

 14 #define NGINX_VER          "nginx/"

[root@localhost ~]# cd   nginx-1.14.0
[root@localhost nginx-1.14.0]# vim   auto/cc/gcc

将172行注释

172 #CFLAGS="$CFLAGS -g"

<3>安装依赖包

[root@localhost ~]# yum  install   gcc   -y

[root@localhost ~]# yum  install   pcre-devel   -y

[root@localhost ~]# yum  install   openssl-devel   -y

<4>配置编译安装(./configure)——需要在nginx-1.14.0目录下(有configure这个文件)执行此操作

首先介绍./configure,make和make  install命令

基本信息

        1、./configure 是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。

  2、make 是用来编译的,它从Makefile中读取指令,然后编译。

  3、make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。

详细解释

1、configure命令

  这一步一般用来生成 Makefile,为下一步的编译做准备,你可以通过在 configure 后加上参数来对安装进行控制,比如代码:./configure –prefix=/usr 意思是将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share(而不是默认的/usr/local/share)。同时一些软件的配置文件你可以通过指定 –sys-config= 参数进行设定。有一些软件还可以加上 –with、–enable、–without、–disable 等等参数对编译加以控制,你可以通过允许 ./configure –help 察看详细的说明帮助。

  2、make

  这一步就是编译,大多数的源代码包都经过这一步进行编译(当然有些perl或 python编写的软件需要调用perl或python来进行编译)。如果 在 make 过程中出现 error ,你就要记下错误代码(注意不仅仅是最后一行),然后你可以向开发者提交 bugreport(一般在 INSTALL 里有提交地址),或者你的系统少了一些依赖库等,这些需要自己仔细研究错误代码。

  可能遇到的错误:make *** 没有指明目标并且找不到 makefile。 停止。问题很明了,没有Makefile,怎么办,原来是要先./configure 一下,再make。

  3、make insatll

  这条命令来进行安装(当然有些软件需要先运行 make check 或 make test 来进行一些测试),这一步一般需要你有 root 权限(因为要向系统写入文件)。

[root@localhost nginx-1.14.0]# ./configure  --prefix=/usr/local/nginx --with-threads --with-file-aio --with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx

没有报错,表示成功

<5>编译安装(make,make  install)

[root@localhost nginx-1.14.0]#make  &&  make  install

<6>创建nginx用户

[root@localhost nginx-1.14.0]# useradd   nginx

<7>建立软链接,便于系统管理

[root@localhost nginx-1.14.0]# ln  -s  /usr/local/nginx/sbin/nginx   /usr/local/sbin/            #让系统识别命令

 

软链接做好之后

nginx         #启动nginx服务

killall  -1  nginx      #重启nginx服务

killall   -3   nginx    或  killall   nginx     #关闭nginx服务

<8>启动nginx服务

(1)在没有进行第7步操作(建立软链接)之前:启动nginx服务的方法——进入(/usr/local/nginx/sbin),执行(./nginx)

其中/usr/local/nginx是之前执行(./configure命令指定的目录)

通过查看端口的方式,可以看到nginx服务已经开启(nginx服务的端口为80,与httpd服务的默认侦听端口一致,所以,不能同时开启httpd服务和nginx服务)

(2)在进行第7步操作(建立软链接)之后:启动nginx服务的方法——直接执行(nginx)命令

因为nginx服务已经开启,再次开启会报错,所以,必须先关掉nginx服务,然后再打开nginx服务

<9>编辑nginx服务的默认发布文件,关闭防火墙进行,测试

(1)编辑nginx服务的默认发布文件(/usr/local/nginx/html/index.html)

[root@localhost nginx-1.14.0]# cd   /usr/local/nginx/html/
[root@localhost html]# ls
50x.html  index.html
[root@localhost html]# vim   index.html

(2)关闭防火墙,并将其设置为开机不自启——iptables(Linux6版本的防火墙只有iptables;Linux7版本的防火墙有firewalld和iptables)

[root@localhost html]# /etc/init.d/iptables   stop          #关闭iptables         

[root@localhost html]# chkconfig iptables off              #设置iptables开机不自启

值的注意的是:ip6tables可关可不关,对ip6tables的操作,同iptables。

(3)在浏览器中输入IP地址进行测试

五.Linux6.5环境下nginx服务启动脚本的编写

使用源码包安装的nginx没办法使用"/etc/init.d/nginx   start|stop|restart|status"命令对nginx服务进行控制。所以写了以下脚本来实现使用命令"/etc/init.d/nginx   start|stop|restart|status "对nginx服务的控制。

编写监控nginx服务的shell脚本,实现功能:输入"/etc/init.d/nginx   start",就启动nginx服务;输入"/etc/init.d/nginx   stop",就关闭nginx服务;输入"/etc/init.d/nginx   restart",就重启nginx服务;输入"/etc/init.d/nginx   status",就查看nginx服务的状态。

1.制作管理脚本

在/etc/init.d/目录下,编写名为nginx的脚本文件

第一种

第二种(teacher)

#!/bin/bash

. /etc/init.d/functions

function usage() {
    echo $"usage:$0 {start|stop|restart}"
    exit 1
}

function start() {
    rsync --daemon
    sleep 1
    if [ `netstat -antlpe | grep rsync | wc -l` -ge 1 ];then
        action "rsyncd is started." /bin/true
    else
        action "rsyncd is started." /bin/false
    fi
}

function stop() {
    killall rsync &> /dev/null
    sleep 1
    if [ `netstat -antlpe | grep rsync | wc -l` -eq 0 ];then
        action "rsyncd is stoped." /bin/true
    else
        action "rsyncd is stoped." /bin/false
    fi
}

function main() {
    if [ $# -ne 1 ];then
        usage $0
    fi
    case $1 in
        start)
        start
	;;
	stop)
	stop
	;;
	restart)
	stop
	start
	;;
	*)
	usage $0
	;;
    esac
}

main $*

2.赋予nginx可执行权限

3.运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值