课堂笔记 4.8-4.12

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


[email protected]


阿里云为例

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

你可能感兴趣的:(课堂笔记 4.8-4.12)