Day27
一、知识点回顾
1、网络?
1、 传输介质
2、 硬件
2、两台主机之间进行通信?
3、交换网络(局域网内 多台计算机之间通讯)
交换机的原理(2层网络 数据链路层 MAC---->表)
|----->主机-----MAC地址
广播风暴的问题
|--->降低 减轻
1、路由器的概念
2、子网掩码(划分)
交换网络中的数据格式
源信息(MAC地址)+目地信息(MAC地址)+数据内容 = 数据格式
ARP
4、局域网和局域网之间计算机之间的通讯(路由器 3级网络设备)
路由器的概念
路由器的工作原理
|---->主机 ----IP地址
路由表
|---->静态 优点 大型 快 专业人士
|---->动态 优点 小型慢一般
5、TCP/IP协议名词解释
IP协议
TCP协议
UDP协议
ICMP协议
DNS协议
ARP协议
6、OSI和TCP/IP模型
7层 5(4)层
7.TCP/IP协议名词解释
TCP/IP协议的报文格式
TCP/IP协议的C/S 建立连接 3次握手的过程
TCP/IP协议的C/S 断开连接 4次挥手的过程
TCP/IP协议的C/S 建立连接 3次握手的过程 状态转换
TCP/IP协议的C/S 断开连接 4次挥手的过程 状态转换
8、IP地址
分类A B C D E
C类 面试 C类地址 192.168.0.x x主机位
D类 组播
特殊的IP地址
0.0.0.0没有意思
192.168.0.0没有 -1
192.168.0.255广播地址 -1
192.168.0.254网关地址 -1
(网关地址 有可能是192.168.0.1 也有 192.168.0.254)
127.0.0.1
等
9.子网掩码
255.255.255.0 C类
255.255.0.0
255.0.0.0
10、网络划分
1.C类网络中 192.168.0.100 50台主机 划分网络 计算子网掩码。 2^n-3 公式
二、静态路由项目
1、网络中比较重要的协议
1、DNS 域名解析协议
ARP交换机 主机-----MAC地址
路由器主机-----IP地址
DNS域名 域名-----IP地址
2、47.75.85.161 域名
www. baidu.com
3、购买自己的一个域名
区块链公司买域名BTCVC ZB.COM
根域名服务器大多是在国外美国居多日本英国等13台
顶级域名服务器
com cn org edu等
公司商业组织地区中国
万网
.vip
阿里云为例
A记录 WWW 网站 www.baidu.com 记录值 IP地址 47.75.80.160
DNS优化 阿里云加速
百度云加速css js html预加载到服务器上 CDN 加速
2、企业真实的需求
1、HOSTS文件
2、内网DNS服务器
Linux服务器 DNS
1、本地服务器解析 www.baidu.com
2、转发器
|----->主路由---->DNS---->公网IP DNS---->域名 实现外网的访问。
Windows Server 2008R2
3、常见的网络命令
3.1 ping命令
ping域名 DNS问题
ping www.baidu.com无应答 DNS没有配置 DNS有问题
ping公网IP
47.75.80.160
ping网关
192.168.1.1
3.2 iftop监控网络流量用的
Linux服务器下用的 第三方的命令
yum install iftop -y
4、企业网络出现问题的排查流程
第一步检查硬件网卡(灯) 网线(水晶头)_路由器(WAN LAN) 交换机
交换法
|--->网线
网卡
第二步Ping网关(路由)
第三步公网IP
第四步DNS
第五步Ping自己服务器地址
5、静态路由项目
1、准备3台虚拟机
第一台一块网卡10.0.0.11
第二台二块网卡10.0.0.12 192.168.0.12
第三台一块网卡192.168.0.13
2、在第一台主机
从主机一10.0.0.11----->主机2---->192.168.0.
跨网段访问
2.1不认识
添加一条静态的路由信息
route add -net 192.168.0.0/24 gw 10.0.0.12
route -n查看路由表
ping 192.168.0.12通了
2.2看看192.168.0.13能不能通
10.0.0.11需要 10.0.0.12转发
192.168.0.13需要 192.168.0.12进行转发
192.168.0.12
10.0.0.12主机2 信息跟主机2没关系
echo “net.ipv4.ip_forward=1”>>/etc/sysctl.conf
sysctl -p
3、扩展不要求掌握
3.1 iptables实现跨网段实现上网
端口映射
行为管理
3.2买企业级路由
下午
三剑客:
grep 过滤
-E
支持扩展正则===egrep
-o
只显示匹配到的内容 显示grep执行过程
-v
取反
-i
不区分大小写 ignore case find /oldboy -type f -iname "*.txt"
-n
显示行号 cat -n
-w
按照单词进行匹配
-A
9 after 显示grep找出的行及接下来的 9行
-B
9 before
-C
9 上下
-r
-l (小写字母L)
-P ??
sed 过滤 替换 修改文件内容 增删改查
awk 过滤 取列 统计计算
三剑客
grep
sed
awk
Unix中在当前目录下所有.cc 的文件中找到含有“asiainfo”内容的文件,命令为_______
找出当前目录下包含127.0.0.1关键字的文件?
写出查询file.txt以abc结尾的行
grep 'abc$' file.txt
写出删除abc.txt文件中的空行
mkdir -p /oldboy/alex/
for n in {1..5}
do
echo "oldboy 127.0.0.1" >/oldboy/$n.cc
echo "oldboy 127.0.0.1" >/oldboy/alex/$n.cc
done
Unix中在当前目录下所有.cc 的文件中 找到含有“asiainfo”内容的文件,命令为_______
find
find .
find /oldboy/ -type f -name "*.cc" |xargs grep 'asiainfo'
grep 'asiainfo' /oldboy/*.cc
#find命令可以找出这个目录下面所有层的内容
[root@oldboyedu ~]# find /oldboy/ -type f -name "*.cc" |xargs grep 'oldboy'
/oldboy/alex/1.cc:oldboy 127.0.0.1
/oldboy/alex/2.cc:oldboy 127.0.0.1
/oldboy/alex/3.cc:oldboy 127.0.0.1
/oldboy/alex/4.cc:oldboy 127.0.0.1
/oldboy/alex/5.cc:oldboy 127.0.0.1
/oldboy/1.cc:oldboy 127.0.0.1
/oldboy/2.cc:oldboy 127.0.0.1
/oldboy/3.cc:oldboy 127.0.0.1
/oldboy/4.cc:oldboy 127.0.0.1
/oldboy/5.cc:oldboy 127.0.0.1
#只用grep只能默认显示第1层
[root@oldboyedu ~]# grep 'oldboy' /oldboy/*.cc
/oldboy/1.cc:oldboy 127.0.0.1
/oldboy/2.cc:oldboy 127.0.0.1
/oldboy/3.cc:oldboy 127.0.0.1
/oldboy/4.cc:oldboy 127.0.0.1
/oldboy/5.cc:oldboy 127.0.0.1
找出当前目录下包含127.0.0.1关键字的文件?
grep -r '127.0.0.1' .
find
[root@oldboyedu ~]# grep -r 'oldboy' /oldboy/
/oldboy/test.sh:echo oldboy
/oldboy/alex/1.cc:oldboy 127.0.0.1
/oldboy/alex/2.cc:oldboy 127.0.0.1
/oldboy/alex/3.cc:oldboy 127.0.0.1
/oldboy/alex/4.cc:oldboy 127.0.0.1
/oldboy/alex/5.cc:oldboy 127.0.0.1
/oldboy/1.cc:oldboy 127.0.0.1
/oldboy/2.cc:oldboy 127.0.0.1
/oldboy/3.cc:oldboy 127.0.0.1
/oldboy/4.cc:oldboy 127.0.0.1
/oldboy/5.cc:oldboy 127.0.0.1
写出查询file.txt以abc结尾的行
写出删除abc.txt文件中的空行
基础
[root@oldboyedu /oldboy]# grep -v '^$' /oldboy/blank.txt
oldboy oldboy
oldboy
alex
lidao996
中级:文件中有些行包含空格(只有空格)
[root@oldboyedu /oldboy]# egrep -v '^$|^ +$' /oldboy/blank.txt
oldboy oldboy
oldboy
alex
lidao996
究极:
^ *$理解
^$ 当*表示0次的时候 就相当于是 ^$
^ +$ 当*表示1次及1次以上 ^ +$
[root@oldboyedu /oldboy]# egrep -v '^ *$' /oldboy/blank.txt
oldboy oldboy
oldboy
alex
lidao996
待解释方法:
grep "!^$" abc.txt
! find sed awk中表示取反
egrep -v "(^$| )" blank
egrep -v "(^$|^ $)" blank
egrep -n "[0-z]" oldboy.txt
'[0-Z]'
[root@oldboyedu /oldboy]# egrep -n "[0-z]" blank.txt
1:oldboy oldboy
4: oldboy
6:alex
7:lidao996
egrep "^[^$]" blank.txt
过滤出不是以$符号开头的行
egrep "[^$]" blank.txt
[root@oldboyedu /oldboy]# egrep "[^$]" blank.txt
oldboy oldboy
oldboy
alex
lidao996
$$$$$$####oldboyedu.com
[root@oldboyedu /oldboy]# #排除$符号
egrep -n "[0-9]+|[a-Z]+" 1.cc
[0-9]+ 连续数字
[a-Z]+ 连续的字母(大小写)
cat file.txt|grep -v "^$"|grep -v "^ +$"
cat file.txt|grep -v "^$" ××××× 脱裤子方P
grep -v '^$' file.txt
1个英文的字符 占1个字节
1KB=1024字节
1MB=1024KB
1GB=1024MB=1024^3字节
sed "/[ ]/d" 555
sed "/^$/d" 555
三剑客老二-sed命令
https://www.processon.com/view/link/5bea32c5e4b0ad314e894f53
老男孩教育-sed命令执行过程
[root@oldboyedu /oldboy]# sed -n '1,5p' maav.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@oldboyedu /oldboy]# sed -n '/101/,/105/p' maav.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
sed命令的后向应用或反向引用 :
sed -r 's#()#\1#g'
核心: 先保护,后使用
先把你要的内容通过()括起来,然后在后面通过\数字 进行使用。
[root@oldboyedu /oldboy]# echo {1..10}| sed -r 's#([0-9]+)#<\1>#g'
<1> <2> <3> <4> <5> <6> <7> <8> <9> <10>
后向引用
题目1:
cp /etc/passwd /oldboy/
把 /oldboy/passwd 第1列和最后一列调换位置
题目2:取出里面的644或0644 sed后向引用方法
[root@oldboyedu /oldboy]# stat /etc/hosts
File: ‘/etc/hosts’
Size: 158 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 16829878 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-10-26 03:47:16.874000256 +0800
Modify: 2013-06-07 22:31:32.000000000 +0800
Change: 2019-03-04 11:15:49.426692303 +0800
Birth: -
题目1:
cp /etc/passwd /oldboy/
把 /oldboy/passwd 第1列和最后一列调换位置
[root@oldboyedu /oldboy]# sed -r 's#(^.*)(:x.*:)(.*$)#\3\2\1#g' /oldboy/passwd
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
/bin/sync:x:5:0:sync:/sbin:sync
/sbin/shutdown:x:6:0:shutdown:/sbin:shutdown
/sbin/halt:x:7:0:halt:/sbin:halt
/sbin/nologin:x:8:12:mail:/var/spool/mail:mail
/sbin/nologin:x:11:0:operator:/root:operator
老男孩教育-sed后向引用调换/etc/passwd第1列和最后一列
https://www.processon.com/view/link/5cab2621e4b087434367338b
题目2:取出里面的644或0644 sed后向引用方法
老男孩IT教育出品-sed命令反向引用取出/etc/hosts文件权限
https://www.processon.com/view/link/59fbc9c0e4b0f84f89765231
课后:
1.三剑客习题
https://www.jianshu.com/p/61d8883719ac
2.每个人找出2-3个 三剑客题目
day28
Shell编程3小时光速入门
因为Web集群架构会用到Shell编程基础,提前讲。
跟老男孩学Linux运维:Shell编程实战
https://item.jd.com/12117874.html
1、为什么要学习Shell编程?
Linux系统中会大量的使用Shell,工作中我们也需要自动化实现业务,
例如:自动备份、监控、自动安装服务。
Shell编程是Linux运维人员必须要会的编程语言。最简单的编程语言。
编程也是运维人员必须具备的本领:
Shell、Python是运维人员必须具备的本领
2、什么是Shell?
Shell就是一个命令解释器(翻译官),命令行的命令以及脚本都会通过shell解释,
传给操作系统,处理后在输出给用户。
[root@oldboyedu ~]# tail -1 /etc/passwd
oldgirl1:x:8889:8889::/home/oldgirl1:/bin/bash #<==创建用户时,系统指定的翻译官。
3、Shell的分类
1. Bourne shell
Bourne shell又包括Bourne shell (sh)、Korn shell (ksh)、Bourne Again Shell(bash)三种类型。
2. C shell
C shell又包括csh、tcsh两种类型。
C7支持的shell:
[root@oldboyedu ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/sh是bash的软连接
4、C7:默认Shell
[root@oldboyedu ~]# echo $SHELL
/bin/bash
5、什么是Shell脚本?
程序、命令放入文件里执行,这个文件称之为Shell脚本文件。
工作中最多的编程写脚本,存放在文件里。
6、Shell变量:
a.全局变量(环境变量)
在整个系统中生效、一般是大写、系统中默认就
存在一些这样的变量,满足系统和程序运行的需求。
系统自带的环境变量;
[root@oldboyedu ~]# echo $PS1
[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\]\[\e[31;1m\] \w\[\e[0m\]]\$
[root@oldboyedu ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@oldboyedu ~]# echo $HOME
/root
[root@oldboyedu ~]# echo $SHELL
/bin/bash
[root@oldboyedu ~]# echo $UID
0
自定义环境变量:
方法1
export OLDBOY="I am oldboy."
方法2:
OLDBOY="I am oldboy."
export OLDBOY
[root@oldboyedu ~]# export OLDBOY="I am oldboy."
[root@oldboyedu ~]# echo $OLDBOY
I am oldboy.
/etc/profile==>~/.bash_profile===>~/.bashrc===>/etc/bashrc
老男孩推荐以后把环境变量放入/etc/bashrc
[root@oldboyedu ~]# tail -1 /etc/bashrc
export OLDBOY="I am oldboy."
[root@oldboyedu ~]# . /etc/bashrc
[root@oldboyedu ~]# echo $OLDBOY #<==输出一个变量内容就加$变量名
I am oldboy.
安装java服务的时候就会配置环境变量。
b.局部变量(普通变量)
是编写Shell脚本最常用的变量。
变量名=值
a=1
变量名:数字、字母、下划线,不能是数字开头。
oldboy、 123a、_abc
= 等号:赋值符,把什么东西给谁。赋值符号两边不能有空格。
值:东西,变量内容。
引用内容的符号:单引号、双引号、反引号、不加引号
[root@oldboyedu ~]# a=1
[root@oldboyedu ~]# echo $a
1
[root@oldboyedu ~]# y=$x+1
[root@oldboyedu ~]# echo $y
1+1
[root@oldboyedu ~]# y="$x+1"
[root@oldboyedu ~]# echo $y
1+1
[root@oldboyedu ~]# y='$x+1'
[root@oldboyedu ~]# echo $y
$x+1
[root@oldboyedu ~]# y=`$x+1`
-bash: 1+1: command not found
[root@oldboyedu ~]# let y="$x+1" #<==让括号的内容进行计算。
[root@oldboyedu ~]# echo $y
2
[root@oldboyedu ~]# a=1
[root@oldboyedu ~]# echo ${a}b
1b
《九阴九阳》是金庸新著 和金庸屁关系没有。
{金庸新}著
7、表达式
[ 表达式 ]中括号表达式,中括号里面两端必须要有空格。
字符串要加双引号
[root@oldboyedu ~]# [ "a" = "b" ] && echo 1||echo 0
0
[ "a" = "b" ] && echo 1||echo 0
如果表达式成立,打印1,否则打印0.
[ "a" = "b" ] && echo 1 #跟屁虫。
如果表达式成立,打印1
[ "a" = "b" ] || echo 0 #杠精。
如果表达式成立是假的,打印0
取反:
[ ! "a" = "b" ] && echo 1
整数表达式:
> -gt
>= -ge
< -lt
<= -le
= -eq
不等于 -ne
[root@oldboyedu ~]# a=1
[root@oldboyedu ~]# [ $a -eq 2 ] && echo 1||echo 0
0
[root@oldboyedu ~]# [ $a -eq 1 ] && echo 1 || echo 0
1
1)整数表达式符 两端必须要有空格
2)中括号里面两端必须要有空格。
3)变量和比较的内容,不需要加引号。
字符表达式:
-z 变量内容长度为0时,为真(表达式正确)。zero
-n 变量内容长度【不】为0时,为真(表达式正确)。not zero
a == a 字符串是否相同
说明:
1)字符串要加双引号
例子:
[root@oldboyedu ~]# oldboy="I am oldboy"
[root@oldboyedu ~]# [ -z "$oldboy" ] && echo 1 || echo 0
0
[root@oldboyedu ~]# oldboy=""
[root@oldboyedu ~]# [ -z "$oldboy" ] && echo 1 || echo 0
1
[root@oldboyedu ~]# [ -n "$oldboy" ] && echo 1 || echo 0
0
[root@oldboyedu ~]# [ "test" == "host" ] && echo 1 || echo 0
0
[root@oldboyedu ~]# [ "test" == "test" ] && echo 1 || echo 0
1
8.shell判断句:
如果...那么。
如果[ 你是潜力股 ]
那么
就和你谈朋友
否则
拜拜
果如
if判断句语法:
if [ 表达式 ]
then
命令
fi
如果[ 你是潜力股 ]
那么
就和你谈朋友
果如
[root@oldboyedu ~]# cat test.sh
#!/bin/bash
a=10
if [ $a -gt 1 ]
then
echo 1
fi
如果[ 你是潜力股 ]
那么
就和你谈朋友
否则
拜拜
果如
[root@oldboyedu ~]# cat test.sh
#!/bin/bash
a=1
if [ $a -gt 1 ]
then
echo 1
else
echo 0
fi
[root@oldboyedu ~]# cat test.sh
#!/bin/bash
boy="潜力股"
if [ "$boy" == "潜力股" ]
then
echo "先和你谈谈朋友"
else
echo "白白"
fi
[root@oldboyedu ~]# sh test.sh
先和你谈谈朋友
[root@oldboyedu ~]# cat judge_date.sh
if [ $(date +%w) -eq 6 ]
then
echo "一起去旅游吧"
else
echo "还是好好上课吧"
fi
[root@oldboyedu ~]# sh judge_date.sh
还是好好上课吧
[root@oldboyedu ~]# date
Tue Apr 9 11:33:13 CST 2019
[root@oldboyedu ~]# date -s '2019/4/13'
Sat Apr 13 00:00:00 CST 2019
[root@oldboyedu ~]# sh judge_date.sh
一起去旅游吧
实现多条件
[root@oldboyedu ~]# cat judge_date.sh
if [ $(date +%w) -eq 6 ] || [ $(date +%w) -eq 0 ]
then
echo "一起去旅游吧"
else
echo "还是好好上课吧"
fi
read命令 交互式读取用户输入
-p "提醒:"
-t "多长时间内等待输入"
[root@oldboyedu ~]# read -p "请输入一句话:" boy
请输入一句话:潜力股
[root@oldboyedu ~]# echo $boy
潜力股
相当于boy="潜力股"
[root@oldboyedu ~]# cat test.sh
#!/bin/bash
read -p "请输入你喜欢的男孩的一句话:" boy
if [ "$boy" == "潜力股" ]
then
echo "先和你谈谈朋友"
else
echo "白白"
fi
[root@oldboyedu ~]# sh test.sh
请输入你喜欢的男孩的一句话:我没钱
白白
[root@oldboyedu ~]# sh test.sh
请输入你喜欢的男孩的一句话:潜力股
先和你谈谈朋友
[root@oldboyedu ~]# cat test.sh
#!/bin/bash
read -p "请输入你喜欢的男孩的一句话:" boy
if [ "$boy" == "潜力股" ]
then
echo "先和你谈谈朋友"
elif [ "$boy" == "老爸是李刚" ]
then
echo "直接嫁给你"
elif [ "$boy" == "二环内有套房" ]
then
echo "立马领证"
else
echo "白白"
fi
练习题:Shell编程实现 两个整数比较大小
[root@oldboyedu ~]# cat com_num.sh
#!/bin/sh
read -p "请输入两个整数:" a b
if [ $a -gt $b ]
then
echo "$a>$b"
elif [ $a -eq $b ]
then
echo "$a=$b"
else
echo "$a<$b"
fi
[root@oldboyedu ~]# sh com_num.sh
请输入两个整数:2 3
2<3
[root@oldboyedu ~]# sh com_num.sh
请输入两个整数:3 3
3=3
[root@oldboyedu ~]# sh com_num.sh
请输入两个整数:3 4
3<4
[root@oldboyedu ~]# sh com_num.sh
请输入两个整数:3 2
3>2
特殊位置变量:
$1 脚本文件的第一个参数赋值给$1
$2 脚本文件的第二个参数赋值给$2
[root@oldboyedu ~]# cat t.sh
echo $1 $2
[root@oldboyedu ~]# sh t.sh oldboy oldgirl
oldboy oldgirl #<==oldboy就是$1输出的结果,oldgirl就是$2输出的结果。
[root@oldboyedu ~]# cat com_num.sh
#!/bin/sh
#read -p "请输入两个整数:" a b
a=$1
b=$2
if [ $a -gt $b ]
then
echo "$a>$b"
elif [ $a -eq $b ]
then
echo "$a=$b"
else
echo "$a<$b"
fi
[root@oldboyedu ~]# sh com_num.sh 2 3
2<3
[root@oldboyedu ~]# sh com_num.sh 2 2
2=2
[root@oldboyedu ~]# sh com_num.sh 3 2
3>2
9.for循环
for n in 取值列表
do
执行命令
done
[root@oldboyedu ~]# cat for1.sh
for n in 1 2 3 4 5
do
echo $n
done
[root@oldboyedu ~]# sh for1.sh
1
2
3
4
5
[root@oldboyedu ~]# sh -x for1.sh
+ for n in 1 2 3 4 5
+ echo 1
1
+ for n in 1 2 3 4 5
+ echo 2
2
+ for n in 1 2 3 4 5
+ echo 3
3
+ for n in 1 2 3 4 5
+ echo 4
4
+ for n in 1 2 3 4 5
+ echo 5
5
[root@oldboyedu ~]# cat for1.sh
for n in {1..5}
do
echo $n
done
[root@oldboyedu ~]# sh for1.sh
1
2
3
4
5
打印254个IP
10.0.0.1---10.0.0.254
[root@oldboyedu ~]# cat for1.sh
for n in {1..254}
do
echo "10.0.0.$n"
done
课后练习:
1、比较整数大小。
~]# vim hh.sh
#!/bin/bash
read -p "请输入整数:" a b
if
[ "$a" -gt "$b" ]
then
echo "$a>$b"
elif
[ "$a" -lt "$b" ]
then
echo "$a<$b"
else
echo "$a=$b"
fi
2、判断日期,每周六日去旅游,其它时间上课。
[root@songxvhao
~]# cat s.sh
if [ $(date +%w) -eq 6 ]
then
echo "去旅游"
elif [ $(date +%w) -eq 7 ]
then 19:01 2019/4/919:01 2019/4/919:01 2019/4/9
echo "去旅游"
else
echo "去上课"
fi
3、取出当前系统Ip地址,判断是否为10.0.0.31,如果是提示正确,如果不是给出提示。
~]# vim sss.sh
#!/bin/bash
a="$(ifconfig|awk 'NR==2{print $2}')"
if
[ "$a" == "10.0.0.200" ]
then
echo "正确"
else
echo "错误"
fi
4、打印10.0.0.1--10.0.0.254个Ip地址,当IP地址为系统IP地址时,给出某IP是系统IP的提示。
[root@songxvhao
~]# cat xx.sh
#!/bin/sh
for n in 10.0.0.{1..255}
do
echo "$n"
a=`hostname -I`
if
[ $a = "$n" ]
then
echo "$n为本地IP"
fi
done
书写脚本习惯:
1.以.sh结尾。
2.脚本开头第一行 #!/bin/bash 脚本内容由谁解释。
由于Linux下默认是bash,所以也可以不写这一行。
1、什么是集群?
简单地说,集群就是一堆机器做同一件事,
例如:www.jd.com提供卖东西服务这就是一件事,可能是几千台服务器,在背后运转支撑这个网站。
www.baidu.com看着就是一个搜索框,背后可能是上万台服务器。
2、为什么企业要用集群?
a.7*24服务,需要多台机器同时工作,互为实时备份。
b.高并发访问,需要多台服务器同时提供服务。
3.集群特点
a.数据量大、用户多
b.7*24持续服务
c.高并发
d.用户分布广泛,网络情况复杂
4.形象描述集群
基础优化:
1、规范目录
mkdir -p /server/tools
mkdir -p /server/scripts
2、配置所有主机域名解析
cat >/etc/hosts< 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.1.5 lb01 172.16.1.6 lb02 172.16.1.7 web01 172.16.1.8 web02 172.16.1.9 web03 172.16.1.31 nfs01 172.16.1.41 backup 172.16.1.51 db01 db01.etiantian.org 172.16.1.61 m01 EOF [root@oldboyedu ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.1.5 lb01 172.16.1.6 lb02 172.16.1.7 web01 172.16.1.8 web02 172.16.1.9 web03 172.16.1.31 nfs01 172.16.1.41 backup 172.16.1.51 db01 db01.etiantian.org 172.16.1.61 m01 [root@oldboyedu ~]# ping lb01 PING lb01 (172.16.1.5) 56(84) bytes of data. 3.基础优化操作项:更新yum源信息 第一个:就近使用yum源地址,安装软件更快。 curl -s -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 第二个:安装RHEL/CentOS官方源不提供的软件包 curl -s -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo 4、安全优化 # 1、关闭selinux sed -i 's#SELINUX=.*#SELINUX=disabled#g' /etc/selinux/config sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config grep SELINUX=disabled /etc/selinux/config setenforce 0 getenforce # 2、关闭firewalld防火墙服务 systemctl stop firewalld systemctl disable firewalld 5.基础优化操作项:设置普通用户提权操作(可选优化) # 提权oldboy可以利用sudo useradd oldboy echo 123456|passwd --stdin oldboy \cp /etc/sudoers /etc/sudoers.ori echo "oldboy ALL=(ALL) NOPASSWD: ALL " >>/etc/sudoers tail -1 /etc/sudoers visudo -c 6.设置系统中文UTF8字符集 [root@oldboyedu ~]# cat /etc/locale.conf LANG="en_US.UTF-8" 修改命令如下: cp /etc/locale.conf /etc/locale.conf.ori echo 'LANG="zh_CN.UTF-8"' >/etc/locale.conf source /etc/locale.conf echo $LANG cp /etc/locale.conf /etc/locale.conf.ori localectl set-locale LANG="zh_CN.UTF-8" cat /etc/locale.conf 7.基础优化操作项:时间同步设置 # 设置系统时间同步 yum install ntpdate -y /usr/sbin/ntpdate ntp3.aliyun.com echo '#crond-id-001:time sync by oldboy' >>/var/spool/cron/root echo "*/5 * * * * /usr/sbin/ntpdate ntp3.aliyun.com >/dev/null 2>&1">>/var/spool/cron/root crontab -l 8.基础优化操作项:提升命令行操作安全性(可选优化) # 提升命令行安全(可选配置) echo 'export TMOUT=300' >>/etc/profile echo 'export HISTSIZE=5' >>/etc/profile echo 'export HISTFILESIZE=5' >>/etc/profile tail -3 /etc/profile . /etc/profile 9.基础优化操作项:加大文件描述符 # 实例演示:加大文件描述 echo '* - nofile 65535 ' >>/etc/security/limits.conf tail -1 /etc/security/limits.conf ulimit -SHn 65535 ulimit -n #<==命令方式查看配置结果 10.基础优化操作项:优化系统内核 cat >>/etc/sysctl.conf< net.ipv4.tcp_fin_timeout = 2 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_keepalive_time = 600 net.ipv4.ip_local_port_range = 4000 65000 net.ipv4.tcp_max_syn_backlog = 16384 net.ipv4.tcp_max_tw_buckets = 36000 net.ipv4.route.gc_timeout = 100 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_synack_retries = 1 net.core.somaxconn = 16384 net.core.netdev_max_backlog = 16384 net.ipv4.tcp_max_orphans = 16384 #以下参数是对iptables防火墙的优化,防火墙不开会提示,可以忽略不理。 net.nf_conntrack_max = 25000000 net.netfilter.nf_conntrack_max = 25000000 net.netfilter.nf_conntrack_tcp_timeout_established = 180 net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120 net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60 net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.wmem_max = 16777216 net.core.rmem_max = 16777216 EOF sysctl -p 11.基础优化操作项:安装系统常用软件 CentOS6和CentOS7都要安装的企业运维常用基础工具包 yum install tree nmap dos2unix lrzsz nc lsof wget tcpdump htop iftop iotop sysstat nethogs -y CentOS7要安装的企业运维常用基础工具包 yum install psmisc net-tools bash-completion vim-enhanced -y 独行快,众行远。——老男孩 12.基础优化操作项:优化SSH远程连接效率 禁止root远程连接 修改默认22端口,改为52113 监听内网服务器IP 练习不动。 13.扩展优化操作项-修改yum.conf文件配置信息 保留yum安装的软件包 将/etc/yum.conf中的keepcache=0改为keepcache=1,为日后一键安装网站集群留好rpm及依赖工具包。 14. 锁定关键系统文件如/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow、/etc/inittab, 处理以上内容后把chattr、lsattr改名为oldboy,转移走,这样就安全多了。 15. 清空/etc/issue、/etc/issue.net,去除系统及内核版本登录前的屏幕显示。 16. 清除多余的系统虚拟用户账号。 17. 为grub引导菜单加密码(自学)。 18. 禁止主机被ping(内核参数)。 19. 打补丁并升级有已知漏洞的软件。 yum update 20.精简开机自启动服务 systemctl list-unit-files |grep enable|egrep -v "sshd.service|crond.service|sysstat|rsyslog|^NetworkManager.service|irqbalance.service"|awk '{print "systemctl disable",$1}'|bash systemctl list-unit-files |grep enable 保留服务: sshd|crond|sysstat|rsyslog|NetworkManager|irqbalance 企业生产最小化原则: 1、安装软件包最小化。 2、用户权限最小化。 3、目录文件权限最小化。 4、自启动服务最小化。 5、服务运行用户最小化。 [root@oldboyedu ~]# netstat -lntup Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 7072/sshd tcp6 0 0 :::22 :::* LISTEN 7072/sshd 克隆三台: B1-web服务器1 10.0.0.7/24 172.16.1.7/16 web01 C1-NFS存储服务器 10.0.0.31/24 172.16.1.31/16 nfs01 C2-rsync备份服务器 10.0.0.41/24 172.16.1.41/16 backup