大数据|04-Linux之Linux软件安装、三剑客和Shell编程

1.9 Linux的软件安装 1.9.1 环境变量的配置

  1. 环境变量是指
    当我们配置了环境变量后, 执行相应的命令,告诉系统命令搜索的文件夹,当我们执行一个命令的时候,默认从当前路径开始查找,如果当前路径找不到对应的命令文件,从环境变量$PATH查找
    • 如果配置的过个文件夹都包含命令abc,默认执行第一个文件夹中abc,所以要把重要的放在最前面
    • 环境变量尽量配置一些重要的文件夹目录(如java),减少命令检索的时间
    • Linux中 $PATH的配置文件在 /etc/profile
    • window 路径与路径之间用; (分号)连接,Linux路径与路径之间用:(冒号)连接
    • Linux每次修改完成之后,需要重新加载文件 source /etc/profile
1.9.2 软件安装的方式
1.RPM安装 RedHat Package Manager,它属于红帽的一种包管理方式
  1. 通过RPM命令安装软件
    rpm -ivh jdk-8u231-linux-x64.rpm
  2. 查询软件
    rpm -qa | grep jdk
    rpm -q jdk
  3. 卸载
    rpm -e jdk-1.8.0_231-fcs.x86_64
  4. 需要手动配置Java的环境变量
    进入到文件中:vim /etc/profile
    在最后添加相应的信息
    export JAVA_HOME=/usr/java/1.8.0_231 export PATH=$JAVA_HOME/bin:$PATH

  5. 重新加载配置文件
    source /etc/profile
  6. 查看java的PATH配置信息
    【大数据|04-Linux之Linux软件安装、三剑客和Shell编程】echo -$PATH
    -/usr/java/1.8.0_231/bin:/usr/local/sbin:/usr/local/bin:/usr/sb in:/usr/bin:/root/bin

    即配置成功
  7. 配置JAVA_HOME
    • 打开配置文件
      • vim /etc/profile
    • 文件最后添加
      export JAVA_HOME=/usr/java/jdk1.8.0_231-amd64 export PATH =$JAVA_HOME/bin:$PATH

    • 让配置文件生效
      • source /etc/profile
2.压缩包解压安装
  1. 解压文件
    • tar -zxf apache-tomcat-7.0.61.tar.gz
  2. 拷贝到/opt/bdp目录下
    mkdir -p /opt/lucky cp -r apache-tomcat-7.0.61 /opt/bdp

  3. 启动tomcat
    cd /opt/bdp/apache-tomcat-7.0.61/bin/ ./startup.sh

3. YUM安装
  1. yum的作用
    • 可以帮我们管理RPM包
    • 可以帮我们安装软件,
    • 如果软件有其他依赖,会帮我们安装依赖后在安装软件
    • 类似于Maven
  2. yum命令
    • search 查询命令或者软件
      • yum search ifconfig
    • info
      • 查看包的信息
    • list / list jdk
      • 查询安装的rpm包,或者只查询某一周
  3. 更换yum源
    • 首先安装wget
      yum install wget -y
    • 将系统原始配置文件失效
      mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    • 使用Wget获取阿里yum源配置文件
      wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
      wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    • 清空以前yum源的缓存
      yum clean all
    • 获取阿里云的缓存
      yum makecache
4.Linux下安装MySQL
#----------安装Mysql依赖【perl net-tools】 yum install perl net-tools -y #----------卸载mariadb rpm -qa | grep mariadb rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64 #----------安装mysql tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm #----------启动mysql systemctl start mysqld #----------查找密码并登陆Mysql cat /var/log/mysqld.log | grep password mysql -u root -p #----------修改Mysql密码 5.0版本输入命令: set global validate_password.policy=LOW; set global validate_password.length=6; #更改加密方式 ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER; #更新用户密码 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; #刷新权限 FLUSH PRIVILEGES; #----------修改Mysql密码 5.7版本输入命令: set global validate_password_policy=LOW; set global validate_password_length=6; alter user root@localhost identified by '123456'; #----------修改Mysql链接地址 use mysql; update user set host='%' where user = 'root'; commit; exit; systemctl restart mysqld; #----------使用Navicat连接Mysql

1.10 Linux的三剑客 对于三剑客的理解:
awk、grep、sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。
总结:
  1. 都是处理文本的命令,其中awk功能最强大,也最复杂
  2. grep适合单纯的查找或者匹配文本
  3. sed 更适合编辑匹配到的文本
  4. awk 更适合格式化文本,对文本进行较复杂的格式处理,比如
1. 普通三剑客
  1. cut
    • 用指定的规则来切分文本
    • cut -d’:’ -f1,2,3 passwd | grep bdp
  2. sort
    • sort lucky
      • 对文本中的行进行排序
    • sort -t’ ’ -k2 lucky
      • 对每一行的数据进行切分,按照第二列进行排序
    • sort -t’ ’ -k2 -r lucky
      • 逆序
    • sort -t’ ’ -k2 -n lucky
      • 按照数值大小进行排序,如果有字母,字母在前
  3. wc
    • 统计单词的数量
    • wc lucky
    • 4 15 79 lucky
      • l line
      • w word 以空格来分割单词
      • c char
2.剑客1号:grep
  1. 可以对文本进行搜索
  2. 同时搜索多个文件
    • 从文档中查询指定的数据
    • grep adm passwd
    • grep bdp passwd lucky
  3. 显示匹配的行号
    • grep -n bdp passwd
  4. 显示不匹配的忽略大小写
    • grep -nvi root passwd --color=auto
  5. 使用正则表达式匹配
    • grep -E “[1-9]+” passwd --color=auto
3.剑客2号:sed 对sed的使用理解:
sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace ),接着用sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’ 的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出或-i。
功能:主要用来自动编辑一个或多个文件, 简化对文件的反复操作
  1. Sed 是Stream Editor(字符流编辑器)的缩写,简称流编辑器
  2. Sed软件从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一
    行…
  3. 一次一行的设计使得sed软件性能很高
  4. vi命令打开文件是一次性将文件加载到内存
  5. 了解即可
    https://www.cnblogs.com/chensiqiqi/p/6382080.html
  6. 行的选择模式
    • 10 第十行
    • m,n --> 第m行到第n行 [m,n]
    • m,+n–>第一行到第四行 [m,m+n]
    • m~n–>从m行开始,依次累加n
    • m,$ -->从m开始到最后一行
    • /bdp/ -->匹配到bdp的行
    • /u1/,/u4/–>从匹配u1到匹配u4

    • sed ‘2a luckyisgood’ passwd
    • sed ‘2i luckyisgood’ passwd
      • 打印到控制台
    • sed -i ‘2a luckyisgood’ passwd
      • 直接修改到文件

    • sed ‘3,10d’ passwd

    • 整行替换
      • sed ‘3,20c hahaha’ passwd
      • sed ‘3~1c hehehe’ passwd
    • 字符替换
      • sed ‘1,5s/root/lucky/g’ passwd
      • sed ‘1,5s#/#-#g’ passwd
4.剑客3号:awk
  1. 它不是一个剑客,它是一门语言
  2. 了解即可
    https://www.cnblogs.com/chensiqiqi/p/6481647.html
  3. 模式与动作
    awk -F ":" 'NR>=2&&NR<=6' /etc/passwd awk -F ":" '{print NR,$1}' /etc/passwd awk -F ":" 'NR>=2&&NR<=6 {print NR,$1}' /etc/passwd awk -F ":" 'NR==1{print NR,$1}NR==2{print NR,$NF}' /etc/passwd

二、Shell编程 2.1 Shell编程概述 对于Shell的理解:
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至编写一些程序。
Shell是命令解释器(command interpreter),是Linux操作系统的用户接口,程序从用户接口得到输入信息,shell将用户程序及其输入翻译成操作系统内核(kernel)能够识别的指令,并且操作系统内核执行完将返回的输出通过shell再呈现给用户,下图所示用户、shell和操作系统的关系:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aboZAqei-1655131018137)(大数据开发.assets/20201102213118.png)]
2.1.1 Shell 名词解释
  1. Kernel
    Linux内核主要是为了和硬件打交道
  2. Shell
    • 命令解释器(command interpreter)
    • Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
    • Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务
    • 一个系统可以存在多个shell,可以通过cat /etc/shells命令查看系统中安装的shell,不同的shell可能支持的命令语法是不相同的
      # cat /etc/shells

  3. Shell种类
    • 操作系统内核(kernel)与shell是独立的套件,而且都可被替换:
    • 不同的操作系统使用不同的shell;
    • 同一个kernel之上可以使用不同的shell
    常见的Shell两大主流
    • sh
      • Bourne shell(sh) ,Solaris,hpux默认shell
      • Bourne again shell(bash) ,Linux系统默认shell
    • csh
      • C shell(csh)
      • tc shell(tcsh)
  4. #! 声明Shell文件
    • 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序]
      • vi hello.sh
    #!/bin/bash echo "Hello World !"

    • 修改创建的Shell文件的权限
      • chmod 764 hello.sh
    • 执行脚本(三种方式)
2.1.2 Shell脚本的执行的三种方式
  1. 直接打开脚本文件(绝对或者相对路径)
    ./hello.sh
    要求文件必须是可执行文件
  2. 使用sh命令执行文件
    sh hi.sh
    即使文件不具有执行权限,也可以被调用
  3. 使用source命令执行文件
    source byte.sh
三种方式的区别与联系
  1. 前面两种方式其实都是一样的:都是在当前父进程下的子进程中执行,子进程完成后,子进程中的各项变量或操作将会结束而不会传回到父进程中,具体的效果就是执行后再看脚本中的两个变量,在父进程中不起作用!
    测试代码如下
    • vi var.sh
      #!/bin/bashecho "hello var1"echo $helloecho "hello var2"

    • 设置变量
      hello=admin

    • 执行命令
      [root@basenode ~]# ./var.sh hello var1hello var2 [root@basenode ~]# sh var.sh hello var1hello var2 [root@basenode ~]# source var.sh hello var1 admin hello var2

  2. 第三种是不会出现这种问题是因为是在一个进程(shell)中进行的,只有source在当前进程执行脚本时,所有可以继续使用当前进程的变量
    前两种方式时开启了一个新进程执行脚本,原来进程的变量就访问不到了
  3. 解决方案:
    export 可以让子进程继续使用父进程的变量
    将来配置profile的时候 所有的变量前必须加export
    注意:因此:如要想不注销系统,并让全局配置文件生效,则必须用source命令:
    比如说: 在全局配置文件中/etc/profile添加了JAVA_HOME,要让他对整个环境生效
    export JAVA_HOME=/usr/java/jdk1.7.0_75,就必须执行source /etc/profile
    代码测试
    [root@basenode ~]# export password=123456 [root@basenode ~]# echo $password 123456 [root@basenode ~]# vi var.sh [root@basenode ~]# ./var.sh hello var1 123456hello var2 [root@basenode ~]# sh var.sh hello var1 123456hello var2 [root@basenode ~]# source var.sh hello var1 123456 admin hello var2

2.2 Shell基础入门 2.2.1 shell 变量
  1. 定义变量时,变量名不加美元符号
    • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
    • 中间不能有空格,可以使用下划线(_)。
    • 不能使用标点符号。
    • 不能使用bash里的关键字(可用help命令查看保留关键字)
  2. 变量的类型
    • 局部变量
      • 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
    • 环境变量
      • 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证
        其正常运行。
    • Shell变量
      • shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是
        局部变量。
# 变量的声明 name="zhangsan" for file in `ls /etc` 或 for file in $(ls /etc) # 变量的调用 echo $name echo ${name} for skill in Ada Coffe Action Java; do echo "I am good at ${skill}Script" done # 只读变量 /bin/sh: NAME: This variable is read only. 也不能删除 url="https://www.google.com" readonly url url="https://www.runoob.com" # 删除变量 unset name

2.2.2 Shell的字符串
  1. 字符串是shell编程中最常用最有用的数据类型,字符串可以用单引号,也可以用双引号,也可以不用引号。
  2. 单引号
    • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
    • 单引号字串中不能出现单独一个的单引号,但可成对出现,作为字符串拼接使用。
  3. 双引号
    • 双引号里可以有变量
    • 双引号里可以出现转义字符
# 声明字符串 str1="hello world 1" str2='hello world 2' # 字符串拼接--双引号 name='sunwukong' name1="hello, "$name" !" name2="hello, ${name} !" # 字符串拼接--单引号 passwd='123456' passwd1='hello, '$passwd' !' passwd2='hello, ${passwd} !' echo $passwd2 # hello, ${passwd} ! # 字符串的长度 email="123456@qq.com" echo ${#email} echo ${email:1:4}

2.2.3 Shell数组
  1. bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
  2. 数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0
# 定义数组 括号来表示数组,数组元素用"空格"符号分割开 数组名=(值1 值2 ... 值n) favs=("足球" "蓝球" "乒乓球球" "保龄球") # 读取数组 ${数组名[下标]} fav=${favs[1]} # 使用 @ 符号可以获取数组中的所有元素 echo ${favs[@]} # 获取数组的长度 length1=${#favs[@]} length2=${#favs[*]}

2.2.4 Shell的注释
  1. 以 # 开头的行就是注释,会被解释器忽略。
  2. 通过每一行加一个 # 号设置多行注释
#-------------------------------------------- # 这是一个注释 # author: # site: #-------------------------------------------- ##### 服务器配置-start ##### # # # # # ##### 服务器配置-end ##### # 特殊的多行注释 :<

2.2.5 Shell参数传递
  • 执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字
参数处理 参数说明
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
$0 执行的文件名
#!/bin/bash echo "Shell 传递参数实例!"; echo "执行的文件名:$0"; echo "第一个参数为:$1"; echo "第二个参数为:$2"; echo "第三个参数为:$3"; # ./hello.sh 11 22 33 44

2.3 Shell高级进阶 2.3.1 Shell运算符
  1. 运算符的分类
    • 算数运算符
    • expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EeeAv1MI-1655131018139)(大数据开发.assets/1655119980556.png)]
    #!/bin/bash a=10 b=20 val=`expr $a + $b` echo "a + b : $val" val=`expr $a - $b` echo "a - b : $val" val=`expr $a \* $b` echo "a * b : $val" val=`expr $b / $a` echo "b / a : $val" val=`expr $b % $a` echo "b % a : $val" if [ $a == $b ] then echo "a 等于 b" fi if [ $a != $b ] then echo "a 不等于 b" fi

    • 关系运算符
      • 关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KDtigNcA-1655131018140)(大数据开发.assets/1655120004102.png)]
    #!/bin/bash a=10 b=20 if [ $a -eq $b ] then echo "$a -eq $b : a 等于 b" else echo "$a -eq $b: a 不等于 b" fi if [ $a -ne $b ] then echo "$a -ne $b: a 不等于 b" else echo "$a -ne $b : a 等于 b" fi if [ $a -gt $b ] then echo "$a -gt $b: a 大于 b" else echo "$a -gt $b: a 不大于 b" fi if [ $a -lt $b ] then echo "$a -lt $b: a 小于 b" else echo "$a -lt $b: a 不小于 b" fi if [ $a -ge $b ] then echo "$a -ge $b: a 大于或等于 b" else echo "$a -ge $b: a 小于 b" fi if [ $a -le $b ] then echo "$a -le $b: a 小于或等于 b" else echo "$a -le $b: a 大于 b" fi

    • 布尔运算符
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6w8rASru-1655131018140)(大数据开发.assets/1655120061668.png)]
    #!/bin/bash a=10 b=20 if [ $a != $b ] then echo "$a != $b : a 不等于 b" else echo "$a == $b: a 等于 b" fi if [ $a -lt 100 -a $b -gt 15 ] then echo "$a 小于 100 且 $b 大于 15 : 返回 true" else echo "$a 小于 100 且 $b 大于 15 : 返回 false" fi if [ $a -lt 100 -o $b -gt 100 ] then echo "$a 小于 100 或 $b 大于 100 : 返回 true" else echo "$a 小于 100 或 $b 大于 100 : 返回 false" fi if [ $a -lt 5 -o $b -gt 100 ] then echo "$a 小于 5 或 $b 大于 100 : 返回 true" else echo "$a 小于 5 或 $b 大于 100 : 返回 false" fi

    • 字符串运算符
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IiNwrKVN-1655131018141)(大数据开发.assets/1655120080169.png)]
    #!/bin/bash a="abc" b="efg" if [ $a = $b ] then echo "$a = $b : a 等于 b" else echo "$a = $b: a 不等于 b" fi if [ $a != $b ] then echo "$a != $b : a 不等于 b" else echo "$a != $b: a 等于 b" fi if [ -z $a ] then echo "-z $a : 字符串长度为 0" else echo "-z $a : 字符串长度不为 0" fi if [ -n "$a" ] then echo "-n $a : 字符串长度不为 0" else echo "-n $a : 字符串长度为 0" fi if [ $a ] then echo "$a : 字符串不为空" else echo "$a : 字符串为空" fi

    • 文件测试运算符
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ctceIFuA-1655131018142)(大数据开发.assets/1655120096278.png)]
    #!/bin/bash file="/var/node/test.sh" if [ -r $file ] then echo "文件可读" else echo "文件不可读" fi if [ -w $file ] then echo "文件可写" else echo "文件不可写" fi if [ -x $file ] then echo "文件可执行" else echo "文件不可执行" fi if [ -f $file ] then echo "文件为普通文件" else echo "文件为特殊文件" fi if [ -d $file ] then echo "文件是个目录" else echo "文件不是个目录" fi if [ -s $file ] then echo "文件不为空" else echo "文件为空" fi if [ -e $file ] then echo "文件存在" else echo "文件不存在" fi

2.3.2 Shell函数
  1. linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。
  2. 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
  3. 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。
    return后跟数值n(0-255
#!/bin/bash ## 第一个函数------------------------------ demoFun(){ echo "这是我的第一个 shell 函数!" } echo "-----函数开始执行-----" demoFun echo "-----函数执行完毕-----" ## 函数返回值------------------------------ funWithReturn(){ echo "这个函数会对输入的两个数字进行相加运算..." echo "输入第一个数字: " read aNum echo "输入第二个数字: " read anotherNum echo "两个数字分别为 $aNum 和 $anotherNum !" return $(($aNum+$anotherNum)) } funWithReturn # 函数返回值在调用该函数后通过 $? 来获得。 echo "输入的两个数字之和为 $? !" ## 函数参数------------------------------ funWithParam(){ echo "第一个参数为 $1 !" echo "第二个参数为 $2 !" echo "第十个参数为 $10 !" echo "第十个参数为 ${10} !" echo "第十一个参数为 ${11} !" echo "参数总数有 $# 个!" echo "作为一个字符串输出所有参数 $* !" } funWithParam 1 2 3 4 5 6 7 8 9

2.4 系统任务设置 2.4.1 系统启动流程
  1. 启动计算机的硬件(BIOS)
    • 读取时间
    • 选择对应的启动模式(USB HDD EFI)
  2. 如果是Linux系统,回去找/boot目录.引导这个系统启动
    • 计算机系统开始启动,读取初始化配置文件
    • vim /etc/inittab
    • 启动时控制着计算机的运行级别 runlevel
0 halt (关机)
1 Single user mode(单用户模式)
2 Multiuser, without NFS(多用户模式,但是无网络状态) FS–>FileSystem
3 Full multiuser mode(多用户完整版模式)
4 unused (保留模式)
5 X11(用户界面模式)
6 reboot(重启模式)
  1. id:3:initdefault: 默认runlevel为3,以runlevel=3开始启动对应的服务和组件
2.4.2 系统服务
  • 我们可以使用chkconfig命令查看当前虚拟机的服务
  • 通过查看可以得知不同的级别对应到每一个服务确定本次开机自动启动
  • 开机结束后,我们需要使用service(Centos6)Systemctl(Centos7)命令控制服务的开启或者关闭
2.4.3 开机自启动服务
  1. rc.local
    • 首先创建脚本存放的文件夹
      • mkdir -p /usr/local/scripts
    • 在文件夹中创建脚本文件
      • vim hello.sh
      • 给予执行权限
    • 去/etc/rc.d/rc.local文件中添加脚本的绝对路径
      • 给予rc.local执行权限
    • 修改系统时间
      • date -s ‘21-21-21’
    • 重启虚拟机
      • reboot
  2. chkconfig
    • 创建开机自启动脚本文件
      vim schoolntpdate.sh
    #!/bin/bash #chkconfig: 2345 88 99 #description:auto_run # 开机自启动同步时间 yum info ntp && ntpdate cn.ntp.org.cn

    • 给其设置执行权限
      • chmod u+x schoolntpdate.sh
    • 将脚本拷贝到 /etc/init.d目录下
      • cp schoolntpdate.sh /etc/init.d/
    • 添加到服务
      • chkconfig --add /etc/init.d/schoolntpdate.sh
    • 修改系统时间
      • date -s ‘21-21-21’
    • 重启服务器
      • reboot
2.4.4 定时任务
  1. 在系统服务中心,crond负责周期任务
    systemctl status crond.service
  2. 添加任务,编辑当前用户的任务列表
    crontab -e
  3. 编辑任务
    • **** command
      • 分 时 日 月 周 命令
      • 第1列表示分钟0~59 每分钟用*或者 */2表示
      • 第2列表示小时0~23(0表示0点)
      • 第3列表示日期1~31
      • 第4列表示月份1~12
      • 第5列标识号星期0~6(0表示星期天)
      • 第6列要运行的命令
      • *:表示任意时间都,实际上就是“每”的意思。可以代表00-23小时或者00-12每月或者00-59分
      • -:表示区间,是一个范围,00 17-19 * * * cmd,就是每天17,18,19点的整点执行命令
      • ,:是分割时段,30 3,19,21 * * * cmd,就是每天凌晨3和晚上19,21点的半点时刻执行命令
      • /n:表示分割,可以看成除法,*/5 * * * * cmd,每隔五分钟执行一次
    • 举例
      30 21 * * * /usr/local/etc/rc.d/lighttpd restart 上面的例子表示每晚的21:30重启apache。 45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart 上面的例子表示每月1、10、22日的4 : 45重启apache。 10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart 上面的例子表示每周六、周日的1 : 10重启apache。 0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart 上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。 0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart 上面的例子表示每星期六的11 : 00 pm重启apache。 * */2 * * * /usr/local/etc/rc.d/lighttpd restart 每两小时重启apache * 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart 晚上11点到早上7点之间,每隔一小时重启apache 0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart 每月的4号与每周一到周三的11点重启apache 0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart 一月一号的4点重启apache --(功能描述:显示年月日时分秒

  4. 重启crontab,使配置生效
    • systemctl restart crond.service
  5. 通过crontab -l
    • 查看当前的定时任务
  6. 查看任务的历史
    • vim /var/spool/mail/root
  7. 清除任务
    • crontab -r
2.4.5 虚拟机初始化脚本
#!/bin/bash ## -bash: ./bdp.sh: /bin/bash^M: bad interpreter: No such file or directory ## vim或者vi的命令模式下,输入命令 set fileformat=unix 即可解决换行问题 ## sed -i "s/\r//" init.sh echo -e "\e[1; 31m【----------------------------------------在opt和var创建bdp文件夹\e[0m" sleep 1 mkdir -p /opt/bdp mkdir -p /var/bdp mkdir -p /usr/local/script echo -e "\e[1; 31m【----------------------------------------禁用防火墙】\e[0m" sleep 1 systemctl stop firewalld systemctl disable firewalld systemctl status firewalld echo -e "\e[1; 32m【----------------------------------------修改selinux】\e[0m" sleep 1 sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config echo -e "\e[1; 32m【----------------------------------------安装wget】\e[0m" sleep 1 yum install wget -y echo -e "\e[1; 33m【----------------------------------------修改yum源】\e[0m" sleep 1 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum clean all yum makecache echo -e "\e[1; 33m【----------------------------------------安装常用软件】\e[0m" yum install man man-pages ntp vim lrzsz zip unzip net-tools telnet perl -y echo -e "\e[1; 34m【----------------------------------------同步系统时间】\e[0m" yum info ntp && ntpdate cn.ntp.org.cn echo -e "\e[1; 34m【----------------------------------------DNS域名配置】\e[0m" sleep 1 echo "192.168.88.100 basenode" >> /etc/hosts echo "192.168.88.101 node01" >> /etc/hosts echo "192.168.88.102 node02" >> /etc/hosts echo "192.168.88.103 node03" >> /etc/hosts echo -e "\e[1; 34m【----------------------------------------安装JDK】\e[0m" sleep 1 rpm -ivh jdk-8u231-linux-x64.rpm echo 'export JAVA_HOME=/usr/java/jdk1.8.0_231-amd64' >> /etc/profile echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile source /etc/profile echo -e "\e[1; 35m【----------------------------------------安装Tomcat】\e[0m" sleep 1 tar -zxf apache-tomcat-8.5.47.tar.gz mv apache-tomcat-8.5.47 /opt/bdp/ echo -e "\e[1; 35m【----------------------------------------安装Mysql】\e[0m" sleep 1 rpm -e --nodeps `rpm -qa | grep mariadb` tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm systemctl start mysqld systemctl enable mysqld temppasswd=`grep "A temporary password" /var/log/mysqld.log | awk '{ print$NF}'` mysql -uroot -p$temppasswd --connect-expired-password << EOF set global validate_password_policy=low; set global validate_password_length=6; alter user root@localhost identified by '123456'; use mysql; update user set host='%' where user = 'root'; commit; quit EOF systemctl restart mysqld echo -e "\e[1; 35m【----------------------------------------安装Nginx】\e[0m" sleep 1 echo -e "\e[1; 36m【----------------------------------------设置开机启动项】\e[0m" sleep 1 touch /usr/local/script/auto_ntpdate.sh echo '#!/bin/bash' >> /usr/local/script/auto_ntpdate.sh echo 'yum info ntp && ntpdate cn.ntp.org.cn' >>/usr/local/script/auto_ntpdate.sh chmod u+x /usr/local/script/auto_ntpdate.sh echo '/usr/local/script/auto_ntpdate.sh' >> /etc/rc.local chmod u+x /etc/rc.local echo -e "\e[1; 36m【----------------------------------------设置定时任务,更新时间】\e[0m" echo -e "\e[1; 36m【----------------------------------------删除文件】\e[0m" sleep 1 rm -rf apache-tomcat-8.5.47.tar.gz rm -rf jdk-8u231-linux-x64.rpm rm -rf mysql* rm -rf *.sh echo -e "\e[1; 36m【----------------------------------------关闭计算器,拍快照】\e[0m" sleep 1 shutdown -h now

2.4.6 虚拟机相互免秘钥
##三台主机分别生成秘钥 【123】ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa ##host验证 【123】vim /etc/ssh/ssh_config 在最后添加 StrictHostKeyChecking no UserKnownHostsFile /dev/null ##将秘钥分别拷贝给自己和别人 【123】ssh-copy-id -i ~/.ssh/id_rsa.pub root@node01 【123】ssh-copy-id -i ~/.ssh/id_rsa.pub root@node02 【123】ssh-copy-id -i ~/.ssh/id_rsa.pub root@node03 123456 ##关闭主机拍摄快照 power off

    推荐阅读