+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
張賀,多年互聯網行業工做經驗,擔任過網絡工程師、系統集成工程師、LINUX系統運維工程師
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-node
寫出常見的打包工具和解壓縮工具mysql
//打包/etc/passwd文件和/etc/issue文件,並以當前時間命名,保存到/tmp目錄
tar -zcf /tmp/$(date +%Y-%m-%d-%H-%M-%S).tar.gz /etc/passwd /etc/issue
vim的三種模式:編輯模式(進入時的默認模式)、插入模式、末行模式nginx
vim的替換如何作,例如把txt,替換成sh:%s@txt@sh@g面試
// 把/etc/中大於50k小於200k的普通文件,複製到/tmp目錄下面(四種方法)
cp -arp `find /etc/ -size +50k -a -size -200k` /tmp
find /etc -size +50k -a -size -200k -exec cp -arp {} /tmp \;
find /etc/ -size +50k -a -size -200k | xargs cp -t /tmp
find /etc/ -size +50k -a -size -200k | xargs -i cp -arp {} /tmp
//在/tmp目錄下查看七天前建立的文件刪除之
find $Path -type f -mtime +7 | xargs rm -f
三劍客
用一條命令添加zhanghe01,zhanghe02,zhanghe03,zhanghe04,zhanghe05,使用固定密碼cba-123,不容許用循環。正則表達式
第一步:生成用戶
[root@centos7 ~]# echo zhanghe{01..05}
zhanghe01 zhanghe02 zhanghe03 zhanghe04 zhanghe05
[root@centos7 ~]# echo zhanghe{01..05} | tr ' ' '\n'
zhanghe01
zhanghe02
zhanghe03
zhanghe04
zhanghe05
[root@centos7 ~]# echo zhanghe{01..05} | xargs -n1
zhanghe01
zhanghe02
zhanghe03
zhanghe04
zhanghe05
第二步:生成命令
[root@centos7 ~]# echo zhanghe{01..05} | xargs -n1 | sed -r 's@(.*)@useradd \1;@g'
useradd zhanghe01;
useradd zhanghe02;
useradd zhanghe03;
useradd zhanghe04;
useradd zhanghe05;
[root@centos7 ~]# echo zhanghe{01..05} | xargs -n1 | sed -r 's@(.*)@useradd &;@g'
useradd zhanghe01;
useradd zhanghe02;
useradd zhanghe03;
useradd zhanghe04;
useradd zhanghe05;
[root@centos7 ~]# echo zhanghe{01..05} | xargs -n1 | sed 's#.*#useradd &;#g'
useradd zhanghe01;
useradd zhanghe02;
useradd zhanghe03;
useradd zhanghe04;
[root@centos7 ~]# echo zhanghe{01..05} | xargs -n1 | sed 's#.*#useradd &;echo cba-123 | passwd --stdin &#g'
useradd zhanghe01;echo cba-123 | passwd --stdin zhanghe01
useradd zhanghe02;echo cba-123 | passwd --stdin zhanghe02
useradd zhanghe03;echo cba-123 | passwd --stdin zhanghe03
useradd zhanghe04;echo cba-123 | passwd --stdin zhanghe04
useradd zhanghe05;echo cba-123 | passwd --stdin zhanghe05
第三步:交給bash
[root@centos7 ~]# echo zhanghe{01..05} | xargs -n1 | sed 's#.*#useradd &;echo cba-123 | passwd --stdin &#g' | bash
更改用戶 zhanghe01 的密碼 。
passwd:全部的身份驗證令牌已經成功更新。
更改用戶 zhanghe02 的密碼 。
passwd:全部的身份驗證令牌已經成功更新。
更改用戶 zhanghe03 的密碼 。
passwd:全部的身份驗證令牌已經成功更新。
更改用戶 zhanghe04 的密碼 。
這個題只是一個例子,重點還要掌握其思路,經過echo加序列的方式打開出全部的用戶,而後再經過sed取出全部的用戶,再而後經過sed 替換強行將取出的值塞入命令當中,最後交給bash,一樣的,刪除這些用戶也是一樣的思路,以下所示:redis
echo zhanghe{01..09} | xargs -n 1 | sed -r 's@(.*)@userdel -r \1@g' | bash
請從test.txt文件當中過濾出正確的的身份證號碼算法
[root@localhost test.dir]# cat test.txtsql
趙 370831199405162458vim
錢 370831199305162kjlcentos
孫 37083119920516245X
李 37083110516245887k
張 37083KKKKKKK990516
在LINUX當中,咱們要過濾文本時,咱們必定要搞清楚,要過濾的文本有什麼特徵,那麼問題來了,身份證號有什麼特徵?
好,那事情就簡單了!
咱們先來知足第一個要求,即身份證號都是18位,18位!如何用正則表達式表示呢?其實沒法用基本的正則表達式表達18位數字,須要用到擴展的正則表達式,即:{18};第二個要求就有點麻煩了,最後一位是什麼不肯定,最後一位要麼是數字要麼是大寫的X,「或」的關係,或的關係用擴展的正則表達式如何表達呢?要用到"|"這個符號,前面的17位數字卻是容易了,數字經過[0-9]就能夠表示了。
好,注意了,來了啊!兩種方法均可以:
[root@localhost test.dir]# egrep '[0-9]{18}|[0-9]{17}X' test.txt
趙 370831199405162458
孫 37083119920516245X
#查找有18位數字的或者前17位是數字最後一位是X的行,把徹底是數字的號碼與數字X混雜的號碼分開考慮
[root@localhost test.dir]# egrep '[0-9]{17}[0-9X]{1}' test.txt
趙 370831199405162458
孫 37083119920516245X
#查找前17位是數字後面跟一位數字或大寫的X的行,把徹底是數字的號碼與數字X混雜的號碼放在一塊兒考慮
好,如今增長難度!如今文件變成這樣了:
[root@localhost test.dir]# cat test.txt
趙 370831199405162458
錢 370831199305162kjl
孫 39083119920516245X
陳 37083119920516245X377
李 37083110516245887k
張 37083KKKKKKK990516
[root@localhost test.dir]# egrep '[0-9]{18}|[0-9]{17}X' test.txt
趙 370831199405162458
孫 39083119920516245X
陳 37083119920516245X377 #出現了這個,不符合咱們的需求 #爲何不符合要求呢?由於這這一行明顯是超過了18位的要求
[root@localhost test.dir]# egrep '[0-9]{17}[0-9X]{1}' test.txt
趙 370831199405162458
孫 39083119920516245X
陳 37083119920516245X377 #出現了這個,不符合咱們的需求
怎麼辦呢?咱們怎樣才能只過濾出18位的呢?能夠這樣,以下所示:
//對egrep使用-w選項,-w精確匹配
[root@localhost test.dir]# egrep '[0-9]{18}|[0-9]{17}X' test.txt -w
趙 370831199405162458
孫 39083119920516245X
[root@localhost test.dir]# egrep '[0-9]{17}[0-9X]{1}' test.txt -w
趙 370831199405162458
孫 39083119920516245X
-w是什麼意思呢?即錨定連續的字符,即錨定單詞,精確匹配單詞,仔細體會一下!
[root@n9 ~]# cat test2.txt
23
2423
7235
423
zh230.
[root@n9 ~]# egrep 23 test2.txt
23
2423
7235
423
zh230.
[root@n9 ~]# egrep -w 23 test2.txt
23
//切的思路,awk實現最快
[root@n9 ~]# ifconfig eth0 | awk 'NR==2{print $2}'
192.168.80.59
//替換的思路
ifconfig eth0 | sed -n 2p | sed -r 's@[[:space:]]+inet (.*) netmask.*@\1@g'
//過濾的思路
ifconfig eth0 | sed -n 2p | egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}" | head -1
192.168.80.59
存儲相關
緩衝和緩存在計算機的不少領域都有用到,咱們能夠將其從IT領域內部抽離出來,用咱們生活的例子來講。
我喜歡吃瓜子,一個個的吃不爽,我先忍住不吃,剝開以後都放到一個瓶子裏面,等到這個瓶子裝滿以後,我一口氣將全部的瓜子吃光,對我來講,這個瓶子就是緩存。
剝下來的瓜子皮我不想一個個的扔,由於我住在七樓,我把全部的瓜子皮都放在一個小垃圾桶裏面了,等到這個小垃圾桶滿了以後我再去扔,對我來講,這個小垃圾桶就是緩衝。
軟連接和硬連接的理解要創建在文件系統的理解之上,這裏就再也不贅述了。
硬連接:
硬連接是通往同一個inode塊的不一樣的名字而已,就像是超市有多個入口,堵上一個入口還能夠從別的入口進去,硬連接能夠用來備份。
硬連接不能對目錄使用,也不能跨越分區,只能在同一個分區內對文件系統使用。
硬連接爲何不能對目錄使用呢?網上有不少人對這個機制有各類猜想,我則認爲這沒有什麼意義!系統能夠本身在目錄下面對目錄自己建立硬連接,可是不容許用戶建立,就當這是一個硬性的規定,不用多去深研究。
對於硬連接不能跨文件系統這一點很好理解,不一樣的文件系統內部的結構不一樣的,好比這一個分區的inode塊是66,而另外一個分區可能根本沒有66號inode塊,好比FAT文件系統,裏面根本沒有inode塊!
軟連接:
軟連接就是一個文件,文件的內容不是文件的內容而是文件的路徑。
軟連接能夠對目錄使用,也能夠跨越分區。
前兩年,支付寶中止服務半小時,這對大型互聯網公司來講是很是嚴重的。像支付寶的的備份、容災作的是很是好的(我猜應該是兩地三中心),可是當他們的光纜被施工隊給挖壞了以後,他們並無立馬進行切換到異地的數據中心,而是等待光纜搶修恢復,這是爲何呢?即便作了異地的容災爲何不用?當咱們作了異地的容災,本地出了意外,咱們就要馬上立刻恢復數據嗎?
咱們首先要考慮的是什麼?業務!成本!後果!風險!
咱們先說一下若是支付寶不切換數據中心的話,後果是什麼?直接的損失就是用戶的體驗,半個小時以內不能用支付寶了,用戶的錢還老老實實的存放在本地的數據中內心面,並且運營商會賠償一部分的給支付寶的;若是支付寶切換數據中心的話,後果是什麼?後果是頗有可能形成數據不一致的問題,由於用戶的實時數據都在本地機房,把外網線給挖斷了,可能有一部分數據沒有實時同步到異地的數據中心,這時若是切換數據中心,頗有可能形成數據的不一致問題,這種問題就大了,假設用戶帳戶裏面一共只有100萬,當天消費了90萬,還有10萬,這個記錄是存放在本地的數據中心,尚未同步到異地,切換了數據中心以後,該用戶再次查看發現帳戶上居然還有100萬!若是用戶趁這個機會,把這100給花了,這筆帳應該算到誰的頭上?
支付寶的運維團隊權衡利弊以後,權衡的什麼?用戶體驗和用戶的資金,考慮以後仍是決定等待光纜搶修恢復,這樣用戶雖然暫時不能用支付寶,用戶體驗有所損失,可是用戶的錢不會出現意外,涉及到金錢的問題,安全和穩定壓倒一切。
一樣的問題,若是是快手和抖音這樣的公司遇到呢?他們會不會切換數據中心呢?這個就不必定了,抖音和快手的用戶就算是暫時丟失一部分數據,其實也沒什麼大不了的,又不是什麼關鍵數據,我想快手和抖音的運維團隊就頗有可能會進行數據中心的切換。
因此結論就是具體業務、具體問題,具體分析,技術要和業務掛鉤才能更有價值。
raid 0 :空間疊加,無冗餘,幾塊盤 均可以作,性能提高
reid 1 ;鏡像卷,空間損失一半,有冗餘,性能提高
raid 5 :起碼三塊盤,""加數+被加數=和"的關係,有冗餘,性能提高。
定時任務例0:天天凌晨3點作一次備份,備份/etc/目錄到/backup下面
將備份命令寫入到一個腳本中,天天備份文件名要求格式:當前時時間_文件名_tar.gz,不輸出任何信息,存放的備分內容只存放三天的數據
[root@nginx scripts]# vim backup.sh
#!/bin/bash
tar -czf /backup/$(date +%F)_etc_tar.gz /etc/ &>/dev/null
find /backup -name *.tar.gz -mtime +3 | xargs rm -f
[root@nginx ~]# chmod +x /server/scripts/backup.sh
[root@nginx ~]# crontab -e
0 3 * * * /bin/bash /backup/backup.sh
例2:每20秒打印hello!
***** for i in {0,1,2};do /bin/echo 「hello!」; sleep 20 ;done
這就表明每分鐘,一分鐘到了以後i就等於0,而後就運行echo hello!運行完成以後就睡20秒,20秒睡完了,i又等於1了,而後再打印,而後再睡20秒,而後i等於3,再打印,再睡着.............從而實現每隔20秒打印一次的效果。
網絡相關三次握手、四次揮手
以及實時的變化狀態
8:請求
0:響應
將192.168.80/24劃分紅四個子網。
答:掩碼變成26位,即192.168.80.0/26
第一個子網範圍:00
第二個子網範圍:01
第三個子網範圍:10
第四個子網範圍:11
-c :count指定個數
-I(大I)interface指定網卡
-s:size指定包的大小,經常使用於分析
橙白 | 橙 | 綠白 | 藍 |藍 白 | 綠 |棕 白| 棕
SSL ***
IPSEC ***
L2TP ***
MPLS ***
//修改IP
ifconfig eth0 192.168.80.8/24
ip addr add 192.168.80.99/24 dev eth0
//默認IP配置文件經常使用參數
[root@n9 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"
NAME="eth0"
BOOTPROTO="static"
DEVICE="eth0"
ONBOOT="yes"
IPADDR=192.168.80.59
GATEWAY=192.168.80.1
PREFIX=24
DNS1=223.6.6.6
DNS2=8.8.8.8
//路由相關操做
route add default gw 192.168.80.1 eth0
route add -net 192.168.70.0/24 gw 192.168.80.1 eth0
route del -net 192.168.70.0/24
//修改DNS
[root@n9 ~]# cat /etc/resolv.conf
nameserver 192.168.80.1
nameserver 223.6.6.6
nameserver 8.8.8.8
二層交換機沒有路由功能,而三層交換機有路由功能。
物理層、鏈路層、網絡層、傳輸層、會話層、表示層、應用層。
A類:(1.0.0.0-126.0.0.0)(默認子網掩碼:255.0.0.0或 0xFF000000)第一個字節爲網絡號,後三個字節爲主機號。該類IP地址的最前面爲「0」,因此地址的網絡號取值於1~126之間。通常用於大型網絡。
B類:(128.0.0.0-191.255.0.0)(默認子網掩碼:255.255.0.0或0xFFFF0000)前兩個字節爲網絡號,後兩個字節爲主機號。該類IP地址的最前面爲「10」,因此地址的網絡號取值於128~191之間。通常用於中等規模網絡。
C類:(192.0.0.0-223.255.255.0)(子網掩碼:255.255.255.0或 0xFFFFFF00)前三個字節爲網絡號,最後一個字節爲主機號。該類IP地址的最前面爲「110」,因此地址的網絡號取值於192~223之間。通常用於小型網絡。
D類:是多播地址。該類IP地址的最前面爲「1110」,因此地址的網絡號取值於224~239之間。通常用於多路廣播用戶[1] 。
在IP地址3種主要類型裏,各保留了3個區域做爲私有地址,其地址範圍以下:
A類地址:10.0.0.0~10.255.255.255
B類地址:172.16.0.0~172.31.255.255
C類地址:192.168.0.0~192.168.255.255
dhcp是動態地址分配協議。
當主機啓動以後會廣播發送discover包,dhcp服務器收到單播offer包,客戶再廣播request,dhcp服務器再單播ack包。
遞歸:
老闆問我哪一家川菜館好吃?我歷來沒去過川菜館,我是不知道的,但我一個同窗的女友是四川人,因而我找到個人同窗,個人同窗又問了他女友,他女友將答案告訴了他,他又將答案告訴了我,我又將答案告訴了老闆,這個過程對於老闆來講就是遞歸。
迭代:
老闆問我哪個洗腳城有那種服務?我從業沒去過洗腳城,我是不知道的,我讓老闆問問公關部的李經理,老闆找到李經理,李經理對老闆說讓他問問銷售部小孫,老闆因而又找到小孫,小孫將答案告訴了老闆,這個過程對老闆來講就是迭代。
假如說一家飯店只能接待100位客人,有一羣流氓進入飯店,也不吃飯就那裏坐着,並且把坐位都坐滿了,結果正常的客戶也沒法進去吃飯,就這樣耗着,這就是DDOS。
在運維筆試的時候,回答DNS解析的過程,不能寫一大堆,一是不美觀,二是浪費時間,應該怎麼寫呢?我以爲這樣寫比較好。
一、客戶端:chche----hosts
二、DNS服務器:cache---遞歸---將遞歸回來的結果緩存一份併發送一份到客戶端。
三、客戶端:客戶端緩存並使用
客戶端解析的時候用udp,而區域傳送時使用tcp
大多數狀況下,DNS解析請求和響應都很小,使用UDP協議更加高效,雖然沒有TCP可靠,可是速度快,消耗的系統資源更少,很是適合少許數據包的傳輸。
一些DNS事務,好比區域傳輸或其餘附加查詢,可能會產生大於512字節的數據包,所以使用TCP更加可靠,使用TCP會減小丟包和從新發包的狀況,所以更加可靠與高效。
正向區域就是咱們日常使用的將域名解析成ip地址
反向區域經常使用於郵件領域,作反垃圾郵件時使用,將IP地址解析成域名。
最先接觸NAT是在作網絡工程師的時候,NAT是作網絡工程師必需會的知識點和技能,後來在面試運維的時候也常常被用到,在運維的某些知識點當中也會被引用到,如iptables當中,LVS當中。
爲何須要NAT(網絡地址轉換)?由於IPV4時代公網IP地址缺,因此公司內部一般用的就是私網地址,公司內網的數據想要在互聯網上傳播就要將私網的地址轉換爲公網的地址,NAT技術就要用來作這個事情的,所謂的轉換其實就將私網地址替換成公網地址,就是這麼簡單。
網絡地址轉換分爲源地址轉換和目的地址轉換。源地址轉換就是將源地址轉換一下,如何轉換呢?就是將私網的源IP替換成公網接口的IP,替換的時候會有替換對應的記錄,在路由器會體現爲一張表。那爲何會用到這張表呢?內網有不少電腦,都使用一個公網IP地址向公網發送數據包,那麼當數據包回來的時候路由器怎麼知道要將回包發送給哪個私網電腦,因此路由器在進行源地址轉換的時候就須要生成一張對應表,這張對應表的做用就是當數據包回來的時候,路由器能夠根據這張表知道將數據轉發給哪個私網電腦。以上就是源NAT轉換的基本原理,源NAT轉換的根本目的是節省IPV4的公網地址。
此外還有一個目的地址轉換,那麼目的地址轉換用在什麼地方呢?目的地址轉換用在內網DMZ區有服務器使用私網地址將服務發佈到公網的場景中,客戶端訪問公網IP時,路由器就將公網IP替換成私網IP轉換給私網DMZ區的服務器。
那麼NAT地址用在什麼地方呢?以前都是用在路由器上,但如今中低端的的路由器和防火牆逐漸有了整合的趨勢,因此NAT也常見部署於網絡出口防火牆上。
此外LVS裏面的模式也有用到LVS的,原理差很少, 這裏就不仔細說了。
若是筆試的時候若是問到這個問題,讓咱們闡述NAT的原理?如何用最簡單、直白的方式說明呢?不能長篇大論吧,寫的多了即影響美觀又浪費時間,最好的方式就是畫圖了,因此咱們去面試的時候最好是帶着文具盒去,準備鉛筆和橡皮,最好準備幾張白紙,機會老是留給有準備的人。
DNS/CDNDNS解析原理
遞歸和迭代的區別
什麼是CDN?
常見的CDN廠商:阿里雲CDN、騰訊雲CDN、360CDN、又拍雲CDN、七牛雲CDN。
如何購買CDN?
CDN的原理?
redis是什麼?
偵聽哪一個端口?6379
redis和memcache的區別?
redis持久化的兩種類型(RDB、AOF)
主從複製基於哪一種持久化類型?
解決一下RDB和手工和自動兩種模式?
AOF有些相似於binlog日誌,很是精細。
redis的數據類型?(字符、字典、列表、集合、有序集合)
redis和mysql是如何解決數據一致性問題?
解釋一下哨兵機制(sentinel)?
如何作主從複製?
memcache是什麼?兩個做用?與redis有什麼區別?
端口11211
memcache的讀寫流程?
Memcached服務特色及是什麼? (c/s、鍵值存儲、異步IO模型、非持久化、可設置過時時間)
memcach的內存管理機制?
刪除機制?
分佈式機制?
監控哪些指標:端口、命中率,反應時間
lvslvs的原理?
lvs、nginx、haproxy最本質的區別?
會話保持的三種方法?(調度到同一臺服務器、會話複製、會話服務器)
怎樣實現調度到同一臺服務器?(ip/cookie/url/)
解釋一下lvs的四種模型?NAT的缺點。
說出經常使用的LVS算法?
lvs+firewall mark是爲何解決什麼問題?以及如何解決這種問題的?
lvs有描述哪三種方式能夠實現持久鏈接?(port/sh、firewall-mark、每客戶端持久)
三種健康檢查方式?
ldirectord 的做用是什麼?與keepaalived有什麼不同?
keepalived爲何須要keepalived
keepalived與lvs的關係?
keepalived的兩種功能?
keepalived的原理?至關於vrrp的原理
爲何會有腦裂問題?如何解決?