Day27
一离斩、知識點回顧
1、網(wǎng)絡(luò)瘪匿?
1跛梗、 傳輸介質(zhì)
2、 硬件
2棋弥、兩臺主機之間進行通信核偿?
3、交換網(wǎng)絡(luò)(局域網(wǎng)內(nèi) 多臺計算機之間通訊)
交換機的原理(2層網(wǎng)絡(luò) ?數(shù)據(jù)鏈路層 ?MAC---->表)
|----->主機-----MAC地址
廣播風暴的問題
|--->降低 減輕 ?
1顽染、路由器的概念 ???
2漾岳、子網(wǎng)掩碼(劃分)
交換網(wǎng)絡(luò)中的數(shù)據(jù)格式
源信息(MAC地址)+目地信息(MAC地址)+數(shù)據(jù)內(nèi)容 = 數(shù)據(jù)格式
??? ARP ??
4轰绵、局域網(wǎng)和局域網(wǎng)之間計算機之間的通訊(路由器 ?3級網(wǎng)絡(luò)設(shè)備)
路由器的概念
路由器的工作原理
|---->主機 ----IP地址
路由表
|---->靜態(tài) ?優(yōu)點 ???大型 ??快 ???專業(yè)人士
|---->動態(tài) ?優(yōu)點 小型慢一般
5、TCP/IP協(xié)議名詞解釋
IP協(xié)議
TCP協(xié)議
UDP協(xié)議
ICMP協(xié)議
DNS協(xié)議
ARP協(xié)議
6尼荆、OSI和TCP/IP模型
7層 ???5(4)層
7.TCP/IP協(xié)議名詞解釋
TCP/IP協(xié)議的報文格式
TCP/IP協(xié)議的C/S 建立連接 3次握手的過程
TCP/IP協(xié)議的C/S 斷開連接 4次揮手的過程
TCP/IP協(xié)議的C/S 建立連接 3次握手的過程 狀態(tài)轉(zhuǎn)換
TCP/IP協(xié)議的C/S 斷開連接 4次揮手的過程 狀態(tài)轉(zhuǎn)換
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網(wǎng)關(guān)地址 -1
(網(wǎng)關(guān)地址 有可能是192.168.0.1 也有 192.168.0.254)
???127.0.0.1
等
9.子網(wǎng)掩碼
255.255.255.0 ??C類
???255.255.0.0 ?
???255.0.0.0 ??
10、網(wǎng)絡(luò)劃分
1.C類網(wǎng)絡(luò)中 ?192.168.0.100 ?50臺主機 劃分網(wǎng)絡(luò) 計算子網(wǎng)掩碼耀找。 2^n-3 公式
二翔悠、靜態(tài)路由項目
1、網(wǎng)絡(luò)中比較重要的協(xié)議
1野芒、DNS 域名解析協(xié)議
ARP交換機 ?主機-----MAC地址
路由器主機-----IP地址
DNS域名 域名-----IP地址
2蓄愁、47.75.85.161 域名
??????www. baidu.com
3、購買自己的一個域名
區(qū)塊鏈公司買域名BTCVC ?ZB.COM
根域名服務(wù)器大多是在國外美國居多日本英國等13臺
頂級域名服務(wù)器
com ????????????cn ?????????org ????edu等
公司商業(yè)組織地區(qū)中國
萬網(wǎng)
.vip
bj_liyanliang@163.com
阿里云為例
A記錄 ?WWW 網(wǎng)站 ??www.baidu.com ??記錄值 ?IP地址 ?47.75.80.160 ?
DNS優(yōu)化 ?阿里云加速
百度云加速css ?js ??html預(yù)加載到服務(wù)器上 CDN 加速
2、企業(yè)真實的需求
1、HOSTS文件
2赁炎、內(nèi)網(wǎng)DNS服務(wù)器
Linux服務(wù)器 DNS
1锅尘、本地服務(wù)器解析 www.baidu.com
2、轉(zhuǎn)發(fā)器
|----->主路由---->DNS---->公網(wǎng)IP DNS---->域名 ?實現(xiàn)外網(wǎng)的訪問案训。
?Windows Server 2008R2
3、常見的網(wǎng)絡(luò)命令
3.1 ping命令
ping域名 DNS問題
ping www.baidu.com無應(yīng)答 DNS沒有配置 ?DNS有問題
ping公網(wǎng)IP ???
?????47.75.80.160
ping網(wǎng)關(guān)
??192.168.1.1
3.2 iftop監(jiān)控網(wǎng)絡(luò)流量用的
Linux服務(wù)器下用的 第三方的命令
yum install iftop -y
4、企業(yè)網(wǎng)絡(luò)出現(xiàn)問題的排查流程
第一步檢查硬件網(wǎng)卡(燈) ?網(wǎng)線(水晶頭)_路由器(WAN LAN) 交換機
交換法
|--->網(wǎng)線
網(wǎng)卡
第二步Ping網(wǎng)關(guān)(路由)
第三步公網(wǎng)IP
第四步DNS
第五步Ping自己服務(wù)器地址
5乖酬、靜態(tài)路由項目
1、準備3臺虛擬機
第一臺一塊網(wǎng)卡10.0.0.11
第二臺二塊網(wǎng)卡10.0.0.12 ?192.168.0.12
第三臺一塊網(wǎng)卡192.168.0.13
2融求、在第一臺主機
從主機一10.0.0.11----->主機2---->192.168.0.
跨網(wǎng)段訪問
2.1不認識
添加一條靜態(tài)的路由信息
?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轉(zhuǎn)發(fā)
192.168.0.13需要 192.168.0.12進行轉(zhuǎn)發(fā)
192.168.0.12
10.0.0.12主機2 ?信息跟主機2沒關(guān)系
echo “net.ipv4.ip_forward=1”>>/etc/sysctl.conf
sysctl -p
3咬像、擴展不要求掌握
3.1 iptables實現(xiàn)跨網(wǎng)段實現(xiàn)上網(wǎng)
端口映射
行為管理
3.2買企業(yè)級路由
下午
三劍客:
grep? 過濾
-E
支持擴展正則===egrep
-o
只顯示匹配到的內(nèi)容? 顯示grep執(zhí)行過程
-v
取反
-i
不區(qū)分大小寫? 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? ? 過濾 替換 修改文件內(nèi)容 增刪改查
awk? ? 過濾 取列 統(tǒng)計計算
三劍客
grep
sed
awk
Unix中在當前目錄下所有.cc 的文件中找到含有“asiainfo”內(nèi)容的文件,命令為_______
找出當前目錄下包含127.0.0.1關(guān)鍵字的文件生宛?
寫出查詢file.txt以abc結(jié)尾的行
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”內(nèi)容的文件县昂,命令為_______
find
find .
find /oldboy/ -type f -name "*.cc" |xargs grep 'asiainfo'
grep 'asiainfo'? /oldboy/*.cc
#find命令可以找出這個目錄下面所有層的內(nèi)容
[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關(guān)鍵字的文件?
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結(jié)尾的行
寫出刪除abc.txt文件中的空行
基礎(chǔ)
[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]+ 連續(xù)數(shù)字
[a-Z]+ 連續(xù)的字母(大小寫)
cat file.txt|grep -v "^$"|grep -v "^ +$"
cat file.txt|grep -v "^$"? ×××××? 脫褲子方P
grep -v '^$' file.txt
1個英文的字符 占1個字節(jié)
1KB=1024字節(jié)
1MB=1024KB
1GB=1024MB=1024^3字節(jié)
sed? "/[? ]/d" 555?
sed? "/^$/d" 555
三劍客老二-sed命令
https://www.processon.com/view/link/5bea32c5e4b0ad314e894f53
老男孩教育-sed命令執(zhí)行過程
[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命令的后向應(yīng)用或反向引用 :
sed -r 's#()#\1#g'
核心: 先保護陷舅,后使用
先把你要的內(nèi)容通過()括起來,然后在后面通過\數(shù)字 進行使用倒彰。
[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列和最后一列調(diào)換位置
題目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列和最后一列調(diào)換位置
[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后向引用調(diào)換/etc/passwd第1列和最后一列
https://www.processon.com/view/link/5cab2621e4b087434367338b
題目2:取出里面的644或0644 sed后向引用方法
老男孩IT教育出品-sed命令反向引用取出/etc/hosts文件權(quán)限
https://www.processon.com/view/link/59fbc9c0e4b0f84f89765231
課后:
1.三劍客習題
http://www.reibang.com/p/61d8883719ac
2.每個人找出2-3個 三劍客題目
day28
Shell編程3小時光速入門
因為Web集群架構(gòu)會用到Shell編程基礎(chǔ),提前講莱睁。
跟老男孩學(xué)Linux運維:Shell編程實戰(zhàn)
https://item.jd.com/12117874.html
1待讳、為什么要學(xué)習Shell編程?
Linux系統(tǒng)中會大量的使用Shell仰剿,工作中我們也需要自動化實現(xiàn)業(yè)務(wù)耙箍,
例如:自動備份、監(jiān)控酥馍、自動安裝服務(wù)辩昆。
Shell編程是Linux運維人員必須要會的編程語言。最簡單的編程語言旨袒。
編程也是運維人員必須具備的本領(lǐng):
Shell汁针、Python是運維人員必須具備的本領(lǐng)
2术辐、什么是Shell?
Shell就是一個命令解釋器(翻譯官)施无,命令行的命令以及腳本都會通過shell解釋辉词,
傳給操作系統(tǒng),處理后在輸出給用戶猾骡。
[root@oldboyedu ~]# tail -1 /etc/passwd
oldgirl1:x:8889:8889::/home/oldgirl1:/bin/bash #<==創(chuàng)建用戶時瑞躺,系統(tǒng)指定的翻譯官。
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腳本?
程序厂画、命令放入文件里執(zhí)行凸丸,這個文件稱之為Shell腳本文件。
工作中最多的編程寫腳本袱院,存放在文件里屎慢。
6、Shell變量:
? a.全局變量(環(huán)境變量)
? 在整個系統(tǒng)中生效坑填、一般是大寫抛人、系統(tǒng)中默認就
? 存在一些這樣的變量弛姜,滿足系統(tǒng)和程序運行的需求脐瑰。
系統(tǒng)自帶的環(huán)境變量;
[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
自定義環(huán)境變量:
方法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
老男孩推薦以后把環(huán)境變量放入/etc/bashrc
[root@oldboyedu ~]# tail -1 /etc/bashrc
export OLDBOY="I am oldboy."
[root@oldboyedu ~]# . /etc/bashrc
[root@oldboyedu ~]# echo $OLDBOY #<==輸出一個變量內(nèi)容就加$變量名
I am oldboy.
安裝java服務(wù)的時候就會配置環(huán)境變量。
b.局部變量(普通變量)
是編寫Shell腳本最常用的變量廷臼。
變量名=值
a=1
變量名:數(shù)字苍在、字母、下劃線荠商,不能是數(shù)字開頭寂恬。
? ? ? oldboy、 123a莱没、_abc
= 等號:賦值符初肉,把什么東西給誰。賦值符號兩邊不能有空格饰躲。
值:東西牙咏,變量內(nèi)容臼隔。
? ? 引用內(nèi)容的符號:單引號、雙引號妄壶、反引號摔握、不加引號
[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"? #<==讓括號的內(nèi)容進行計算。
[root@oldboyedu ~]# echo $y
2
[root@oldboyedu ~]# a=1
[root@oldboyedu ~]# echo ${a}b
1b
《九陰九陽》是金庸新著 和金庸屁關(guān)系沒有丁寄。
{金庸新}著
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
整數(shù)表達式:
>? ? ? -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)整數(shù)表達式符 兩端必須要有空格
2)中括號里面兩端必須要有空格壤蚜。
3)變量和比較的內(nèi)容,不需要加引號徊哑。
字符表達式:
-z 變量內(nèi)容長度為0時袜刷,為真(表達式正確)。zero
-n 變量內(nèi)容長度【不】為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 "先和你談?wù)勁笥?
else
? ? echo "白白"
fi
[root@oldboyedu ~]# sh test.sh
先和你談?wù)勁笥?/p>
[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
一起去旅游吧
實現(xiàn)多條件
[root@oldboyedu ~]# cat judge_date.sh
if [ $(date +%w) -eq 6 ] || [ $(date +%w) -eq 0 ]
then
? ? echo "一起去旅游吧"
else
? ? echo "還是好好上課吧"
fi
read命令 交互式讀取用戶輸入
-p "提醒:"
-t "多長時間內(nèi)等待輸入"
[root@oldboyedu ~]# read? -p "請輸入一句話:" boy
請輸入一句話:潛力股
[root@oldboyedu ~]# echo $boy
潛力股
相當于boy="潛力股"
[root@oldboyedu ~]# cat test.sh
#!/bin/bash
read -p "請輸入你喜歡的男孩的一句話:" boy
if [ "$boy" ==? "潛力股" ]
then
? ? echo "先和你談?wù)勁笥?
else
? ? echo "白白"
fi
[root@oldboyedu ~]# sh test.sh
請輸入你喜歡的男孩的一句話:我沒錢
白白
[root@oldboyedu ~]# sh test.sh
請輸入你喜歡的男孩的一句話:潛力股
先和你談?wù)勁笥?/p>
[root@oldboyedu ~]# cat test.sh
#!/bin/bash
read -p "請輸入你喜歡的男孩的一句話:" boy
if [ "$boy" ==? "潛力股" ]
then
? ? echo "先和你談?wù)勁笥?
elif [ "$boy" ==? "老爸是李剛" ]
then
? echo "直接嫁給你"
elif [ "$boy" ==? "二環(huán)內(nèi)有套房" ]
then
? echo "立馬領(lǐng)證"
else
? ? echo "白白"
fi
練習題:Shell編程實現(xiàn) 兩個整數(shù)比較大小
[root@oldboyedu ~]# cat com_num.sh
#!/bin/sh
read -p "請輸入兩個整數(shù):" 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
請輸入兩個整數(shù):2 3
2<3
[root@oldboyedu ~]# sh com_num.sh
請輸入兩個整數(shù):3 3
3=3
[root@oldboyedu ~]# sh com_num.sh
請輸入兩個整數(shù):3 4
3<4
[root@oldboyedu ~]# sh com_num.sh
請輸入兩個整數(shù):3 2
3>2
特殊位置變量:
$1 腳本文件的第一個參數(shù)賦值給$1
$2 腳本文件的第二個參數(shù)賦值給$2
[root@oldboyedu ~]# cat t.sh
echo $1 $2
[root@oldboyedu ~]# sh t.sh oldboy oldgirl
oldboy oldgirl? #<==oldboy就是$1輸出的結(jié)果梢莽,oldgirl就是$2輸出的結(jié)果萧豆。
[root@oldboyedu ~]# cat com_num.sh
#!/bin/sh
#read -p "請輸入兩個整數(shù):" 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循環(huán)
for n in 取值列表
do
? 執(zhí)行命令
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、比較整數(shù)大小昏名。
? ? ~]# vim hh.sh
#!/bin/bash
read -p "請輸入整數(shù):" 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、取出當前系統(tǒng)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地址為系統(tǒng)IP地址時,給出某IP是系統(tǒng)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結(jié)尾司蔬。
2.腳本開頭第一行 #!/bin/bash 腳本內(nèi)容由誰解釋。
? 由于Linux下默認是bash姨蝴,所以也可以不寫這一行俊啼。
1、什么是集群左医?
簡單地說授帕,集群就是一堆機器做同一件事,
例如:www.jd.com提供賣東西服務(wù)這就是一件事浮梢,可能是幾千臺服務(wù)器跛十,在背后運轉(zhuǎn)支撐這個網(wǎng)站。
? ? ? www.baidu.com看著就是一個搜索框秕硝,背后可能是上萬臺服務(wù)器芥映。
2、為什么企業(yè)要用集群远豺?
? a.7*24服務(wù)奈偏,需要多臺機器同時工作,互為實時備份躯护。
? b.高并發(fā)訪問惊来,需要多臺服務(wù)器同時提供服務(wù)。
3.集群特點
? a.數(shù)據(jù)量大棺滞、用戶多
? b.7*24持續(xù)服務(wù)
? c.高并發(fā)
? d.用戶分布廣泛裁蚁,網(wǎng)絡(luò)情況復(fù)雜
4.形象描述集群
基礎(chǔ)優(yōu)化:
1、規(guī)范目錄
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.基礎(chǔ)優(yōu)化操作項:更新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移必、安全優(yōu)化
# 1室谚、關(guān)閉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、關(guān)閉firewalld防火墻服務(wù)
systemctl stop firewalld
systemctl disable firewalld
5.基礎(chǔ)優(yōu)化操作項:設(shè)置普通用戶提權(quán)操作(可選優(yōu)化)
# 提權(quán)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.設(shè)置系統(tǒng)中文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.基礎(chǔ)優(yōu)化操作項:時間同步設(shè)置
# 設(shè)置系統(tǒng)時間同步
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.基礎(chǔ)優(yōu)化操作項:提升命令行操作安全性(可選優(yōu)化)
# 提升命令行安全(可選配置)
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.基礎(chǔ)優(yōu)化操作項:加大文件描述符
# 實例演示:加大文件描述
echo '*? ? ? ? ? ? ? -? ? ? nofile? ? ? ? ? 65535 ' >>/etc/security/limits.conf
tail -1 /etc/security/limits.conf
ulimit -SHn? 65535
ulimit -n #<==命令方式查看配置結(jié)果
10.基礎(chǔ)優(yōu)化操作項:優(yōu)化系統(tǒng)內(nèi)核
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
#以下參數(shù)是對iptables防火墻的優(yōu)化避凝,防火墻不開會提示舞萄,可以忽略不理眨补。
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.基礎(chǔ)優(yōu)化操作項:安裝系統(tǒng)常用軟件
CentOS6和CentOS7都要安裝的企業(yè)運維常用基礎(chǔ)工具包
yum install tree nmap dos2unix lrzsz nc lsof wget tcpdump htop iftop iotop sysstat nethogs -y
CentOS7要安裝的企業(yè)運維常用基礎(chǔ)工具包
yum install psmisc net-tools bash-completion vim-enhanced -y
獨行快管削,眾行遠〕怕荩——老男孩
12.基礎(chǔ)優(yōu)化操作項:優(yōu)化SSH遠程連接效率
禁止root遠程連接
修改默認22端口含思,改為52113
監(jiān)聽內(nèi)網(wǎng)服務(wù)器IP
練習不動。
13.擴展優(yōu)化操作項-修改yum.conf文件配置信息
保留yum安裝的軟件包
將/etc/yum.conf中的keepcache=0改為keepcache=1,為日后一鍵安裝網(wǎng)站集群留好rpm及依賴工具包含潘。
14. 鎖定關(guān)鍵系統(tǒng)文件如/etc/passwd饲做、/etc/shadow、/etc/group遏弱、/etc/gshadow盆均、/etc/inittab,
處理以上內(nèi)容后把chattr漱逸、lsattr改名為oldboy泪姨,轉(zhuǎn)移走,這樣就安全多了饰抒。
15. 清空/etc/issue肮砾、/etc/issue.net,去除系統(tǒng)及內(nèi)核版本登錄前的屏幕顯示袋坑。
16. 清除多余的系統(tǒng)虛擬用戶賬號仗处。
17. 為grub引導(dǎo)菜單加密碼(自學(xué))。
18. 禁止主機被ping(內(nèi)核參數(shù))枣宫。
19. 打補丁并升級有已知漏洞的軟件婆誓。
? ? yum update
20.精簡開機自啟動服務(wù)
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
保留服務(wù):
sshd|crond|sysstat|rsyslog|NetworkManager|irqbalance
企業(yè)生產(chǎn)最小化原則:
1、安裝軟件包最小化也颤。
2旷档、用戶權(quán)限最小化。
3歇拆、目錄文件權(quán)限最小化鞋屈。
4、自啟動服務(wù)最小化故觅。
5厂庇、服務(wù)運行用戶最小化。
[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服務(wù)器1 ? ? 10.0.0.7/24 ? ? 172.16.1.7/16 web01
C1-NFS存儲服務(wù)器 10.0.0.31/24 172.16.1.31/16 nfs01
C2-rsync備份服務(wù)器 10.0.0.41/24 172.16.1.41/16 backup