赞
踩
环境变量是指
当我们配置了环境变量后, 执行相应的命令,告诉系统命令搜索的文件夹,当我们执行一个命令的时候,默认从当前路径开始查找,如果当前路径找不到对应的命令文件,从环境变量$PATH查找
$PATH
的配置文件在 /etc/profile
下source /etc/profile
RedHat Package Manager,它属于红帽的一种包管理方式
通过RPM命令安装软件
rpm -ivh jdk-8u231-linux-x64.rpm
查询软件
rpm -qa | grep jdk
rpm -q jdk
卸载
rpm -e jdk-1.8.0_231-fcs.x86_64
需要手动配置Java的环境变量
进入到文件中:vim /etc/profile
在最后添加相应的信息
export JAVA_HOME=/usr/java/1.8.0_231
export PATH=$JAVA_HOME/bin:$PATH
重新加载配置文件
source /etc/profile
查看java的PATH配置信息
echo -$PATH
-/usr/java/1.8.0_231/bin:/usr/local/sbin:/usr/local/bin:/usr/sb
in:/usr/bin:/root/bin
即配置成功
配置JAVA_HOME
打开配置文件
文件最后添加
export JAVA_HOME=/usr/java/jdk1.8.0_231-amd64
export PATH =$JAVA_HOME/bin:$PATH
让配置文件生效
解压文件
拷贝到/opt/bdp目录下
mkdir -p /opt/lucky
cp -r apache-tomcat-7.0.61 /opt/bdp
启动tomcat
cd /opt/bdp/apache-tomcat-7.0.61/bin/
./startup.sh
#----------安装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
对于三剑客的理解:
awk、grep、sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。
总结:
cut
sort
wc
可以对文本进行搜索
同时搜索多个文件
显示匹配的行号
显示不匹配的忽略大小写
使用正则表达式匹配
对sed的使用理解:
sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace ),接着用sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’ 的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出或-i。
功能:主要用来自动编辑一个或多个文件, 简化对文件的反复操作
Sed 是Stream Editor(字符流编辑器)的缩写,简称流编辑器
Sed软件从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一
行…
一次一行的设计使得sed软件性能很高
vi命令打开文件是一次性将文件加载到内存
了解即可
https://www.cnblogs.com/chensiqiqi/p/6382080.html
行的选择模式
增
删
改
它不是一个剑客,它是一门语言
了解即可
https://www.cnblogs.com/chensiqiqi/p/6481647.html
模式与动作
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的理解:
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至编写一些程序。
Shell是命令解释器(command interpreter),是Linux操作系统的用户接口,程序从用户接口得到输入信息,shell将用户程序及其输入翻译成操作系统内核(kernel)能够识别的指令,并且操作系统内核执行完将返回的输出通过shell再呈现给用户,下图所示用户、shell和操作系统的关系:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KJwH5aId-1655292818527)(https://s2.loli.net/2022/06/15/m5XaJKLr86nNb3H.png)]
Kernel
Linux内核主要是为了和硬件打交道
Shell
命令解释器(command interpreter)
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务
一个系统可以存在多个shell,可以通过cat /etc/shells命令查看系统中安装的shell,不同的shell可能支持的命令语法是不相同的
# cat /etc/shells
Shell种类
常见的Shell两大主流
#! 声明Shell文件
#!/bin/bash
echo "Hello World !"
直接打开脚本文件(绝对或者相对路径)
./hello.sh
要求文件必须是可执行文件
使用sh命令执行文件
sh hi.sh
即使文件不具有执行权限,也可以被调用
使用source命令执行文件
source byte.sh
三种方式的区别与联系
前面两种方式其实都是一样的:都是在当前父进程下的子进程中执行,子进程完成后,子进程中的各项变量或操作将会结束而不会传回到父进程中,具体的效果就是执行后再看脚本中的两个变量,在父进程中不起作用!
测试代码如下
vi var.sh
#!/bin/bash
echo "hello var1"
echo $hello
echo "hello var2"
设置变量
hello=admin
执行命令
[root@basenode ~]# ./var.sh
hello var1
hello var2
[root@basenode ~]# sh var.sh
hello var1
hello var2
[root@basenode ~]# source var.sh
hello var1
admin
hello var2
第三种是不会出现这种问题是因为是在一个进程(shell)中进行的,只有source在当前进程执行脚本时,所有可以继续使用当前进程的变量
前两种方式时开启了一个新进程执行脚本,原来进程的变量就访问不到了
解决方案:
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 123456 hello var2 [root@basenode ~]# sh var.sh hello var1 123456 hello var2 [root@basenode ~]# source var.sh hello var1 123456 admin hello var2
# 变量的声明 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
# 声明字符串 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}
# 定义数组 括号来表示数组,数组元素用"空格"符号分割开
数组名=(值1 值2 ... 值n)
favs=("足球" "蓝球" "乒乓球球" "保龄球")
# 读取数组 ${数组名[下标]}
fav=${favs[1]}
# 使用 @ 符号可以获取数组中的所有元素
echo ${favs[@]}
# 获取数组的长度
length1=${#favs[@]}
length2=${#favs[*]}
#-------------------------------------------- # 这是一个注释 # author: # site: #-------------------------------------------- ##### 服务器配置-start ##### # # # # # ##### 服务器配置-end ##### # 特殊的多行注释 :<<EOF 注释内容... 注释内容... 注释内容... EOF :<<! 注释内容... 注释内容... 注释内容... !
参数处理 | 参数说明 |
---|---|
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
$0 | 执行的文件名 |
#!/bin/bash
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
# ./hello.sh 11 22 33 44
运算符的分类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7eBB2hb3-1655292818529)(https://s2.loli.net/2022/06/15/74gdleiPwhbNQWC.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-rKEqRk5n-1655292818531)(https://s2.loli.net/2022/06/15/1M5sdCzuyfbZGvx.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-kUulNk6y-1655292818531)(https://s2.loli.net/2022/06/15/jUiSo9L26yKsOPv.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-3yBMRtQy-1655292818533)(https://s2.loli.net/2022/06/15/mvSViAzUu7HxwT2.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-G6CeTt5N-1655292818534)(https://s2.loli.net/2022/06/15/GnCPdbRYj68Fit5.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
#!/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
0 | halt (关机) |
---|---|
1 | Single user mode(单用户模式) |
2 | Multiuser, without NFS(多用户模式,但是无网络状态) FS–>FileSystem |
3 | Full multiuser mode(多用户完整版模式) |
4 | unused (保留模式) |
5 | X11(用户界面模式) |
6 | reboot(重启模式) |
id:3:initdefault:
默认runlevel为3,以runlevel=3开始启动对应的服务和组件rc.local
chkconfig
#!/bin/bash
#chkconfig: 2345 88 99
#description:auto_run
# 开机自启动同步时间
yum info ntp && ntpdate cn.ntp.org.cn
在系统服务中心,crond负责周期任务
systemctl status crond.service
添加任务,编辑当前用户的任务列表
crontab -e
编辑任务
**** command
举例
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 --(功能描述:显示年月日时分秒
重启crontab,使配置生效
通过crontab -l
查看任务的历史
清除任务
#!/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
##三台主机分别生成秘钥
【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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。