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
bj_liyanliang@163.com
阿里云为例
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.三剑客习题
//www.greatytc.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<<EOF
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<<EOF
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