運維屌絲回答網傳Linux運維面試題(二)


繼續屌絲回答網傳面試題


後續將整理出豪鷲親身經歷面試過的公司運維技術面的題目(非筆試題目,技術面運維經理的提問),並也附上答案。

敬請期待。。。。。



上海某證券公司:


  1. Linux開機流程


答:過程如下:

<1>開啓電源,加載BIOS————當你按下電源按鈕時,服務器會檢測系統外圍關鍵設備(如:CPU、內存、顯卡、I/O、鍵盤鼠標等)是否正常,加載BIOS信息,因爲BIOS中包含了CPU的相關信息,設備啓動順序信息,硬盤信息,內存信息,時鐘信息等等,加載之後,服務器知道應該去讀取哪個硬件設備了。

<2>讀取MBR————硬盤上第0磁道第一個扇區被稱爲MBR(Master Boot Record,主引導記錄),大小是512字節,存放了預啓動信息和分區表信息

<3>Boot Loader————Boot Loader就是在操作系統內核運行之前運行的一段小程序,通過這段小程序,可以初始化硬件設備,建立內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,以便爲最終調用操作系統內核做好一切準備。Boot Loader有若干種,其中以Grub、Lilo最爲常見,以Grub爲例,系統讀取內存中的grub配置信息(centos 6.x是grub.conf),並按照此配置信息來啓動不同的操作系統。

<4>加載內核————根據grub設定的內核映像所在的路徑,系統讀取內存映像,並進行解壓縮操作,此時屏幕一般會輸出“Uncompressing linux”的提示,當解壓縮內核完成後,屏幕輸出“OK,booting the kernel”。

<5>用戶層init依據inittab文件來設定運行等級————內核被加載後,第一個運行的程序便是/sbin/init,該文件會讀取/etc/inittb文件,並依據此文件來進行初始化工作。一般情況下,要麼是等級3(命令行界面),要麼是等級5(圖形化界面)。

<6>init進程執行rc.sysinit————在設定了運行等級之後,Linux系統執行的第一個用戶層文件就是/etc/rc.d/sysinit腳本程序,它的工作包括設定PATH、設定網絡配置、啓動swap分區、設定/proc等等。

<7>啓動內核模塊————具體是依據/etc/modules.conf文件或/etc/modulefiles(centos 6.x)目錄下的文件來裝載內核模塊。

<8>執行不同運行級別的腳本程序————根據運行級別的不同,系統會運行rc0.d到rc6.d中相應的腳本程序來完成相應的初始化工作和啓動相應的服務。

<9>執行/etc/rc.d/rc.local————rc.local就是在一切初始化工作後,linux留給用戶進行個性化的地方,可以把你想設置和啓動的東西放到這裏。

<10>執行/bin/login程序,進入登錄狀態————此時,系統哥已經進入到等待用戶輸入username和password的時候了。




2.TCP三次握手,四次揮手


答:在TCP/IP協議中,TCP協議提供可靠的連接服務,採用三次握手建立一個連接。

說明:SYN(synchronous建立聯機) ACK(acknowledgement 確認) PSH(push傳送) FIN(finish結束) RST(reset重置) URG(urgent緊急)

Sequence number(順序號碼) Acknowledge number(確認號碼)

第一次握手————建立連接時,客戶端發送syn包(syn=j)到服務器,並進入syn_send狀態,等待服務器確認;

第二次握手————服務器收到syn包,必須確認客戶的syn(ack=j+1),同時自己也發送一個syn包(syn=k),即syn+ack包,此時服務器進入syn_recv狀態;

第三次握手————客戶端收到服務器的syn+ack包,向服務器發送確認包ack(ack=k+1),此包發送完畢,客戶端和服務器進入established狀態,完成三次握手,客戶端與服務器開始傳送數據。


第一次揮手————客戶端發送一個FIN,用來關閉客戶端到服務器的數據傳送,客戶端進入FIN_WAIT_1狀態;

第二次揮手————服務器收到FIN後,發送一個ACK包給客戶端,確認序號爲收到序號+1(與SYN相同,一個FIN佔用一個序號),服務器進入CLOSE_WAIT狀態;

第三次揮手————服務器發送一個FIN,用來關閉服務器到客戶端的數據傳送,服務器進入LAST_ACK狀態;

第四次揮手————客戶端收到FIN後,客戶端進入TIME_WAIT狀態,接着發送一個ACK給服務器,確認序號爲收到序號+1,服務器進入CLOSED狀態,完成四次揮手。




3.如何將本地80端口的請求轉發到8080端口,當前主機IP爲192.168.16.1,其中本地網卡eth0


答:iptables -t nat -A PREROUTING -i eth0 -d 192.168.16.1 -p tcp -m tcp –dport 80 -j REDIRECT –to-ports 8080



4.什麼是NAT,常見分爲那幾種,DNAT與SNAT有什麼不同,應用事例有那些?

答:NAT(Network Address Translation,網絡地址轉換)是將IP數據包頭中的IP地址轉換爲另一個IP地址的過程。分爲DNAT (目的網絡地址轉換)和SNAT(源網絡地址轉換)……



5.包過濾防火牆與代理應用防火牆有什麼區別,能列舉幾種相應的產品嗎?

答:包過濾防火牆是根據包頭進行的過濾,並且是處於網絡層的,根據包的源ip地址,目標ip地址,協議類型,端口號,進行過濾;代理應用防火牆工作在應用層,他使用代理服務器技術,將內網對外網的訪問,變爲防火牆對外網的訪問,可以對包的內容進行分辨,從而過濾。


代理應用防火牆:天融信GFW4000

包過濾防火牆:華爲 NE 16E


6.iptables是否支持time時間控制用戶行爲,如有請寫出具體操作步驟。

答:iptables+crontab。


7.說出你知道的幾種linux/unix發行版本。

答: Linux:Redhat、CentOS、Fedora、SuSE、Gentoo、Debian、Ubuntu

Unix:FreeBSD、Solaris、AIX、HP


8.列出linux常見打包工具並寫相應解壓縮參數(至少三種)

答:tar -zxf 、  gzip -d  、 unzip  、 bzip2 -d 、 unrar 




9.計劃每星期天早8點服務器定時發送一封內容爲:test的郵件。發信人:[email protected] 收信人:[email protected],如何實現?

答:豪鷲習慣用sendEmail工具發送郵件

安裝:

tar zxf sendEmail-v1.56.tar.gz

cd sendEmail-v1.55

cp sendEmail /usr/local/bin 

chmod 0755 /usr/local/bin/sendEmail

chown nagios:nagios /usr/local/bin/sendEmail


/usr/local/bin/sendEmail -f [email protected] -t [email protected] -s smtp.163.com -u "this is test" -xu username -xp password -m test


選項參數說明:

-f 表示發送者的郵箱

-t 表示接收者的郵箱

-s 表示SMTP服務器的域名或者ip

-u 表示郵件的主題

-xu 表示SMTP驗證的用戶名

-xp 表示SMTP驗證的密碼(注意,這個密碼貌似有限制,例如我用f!2dafaffad就不能被正確識別)

-m 表示郵件的內容

-cc 表示抄送

-bcc 表示暗抄送

-o message-file=mail.html               以mail.html文件的內容作爲郵件內容發送

-o message-content-type=html   郵件內容的格式,html表示它是html格式

-o message-charset=utf8        郵件內容編碼&lt;/pre&gt;

-a /data/site/a.rar            發送ttlsa.rar這個文件, 作爲郵件附件




10.當用戶在瀏覽器當中輸入一個網站,說說計算機對dns解釋經過那些流程?注:本機跟本地dns還沒有緩存。

答:

1、當客戶機在瀏覽器輸入網站地址,並回車,客戶機發出查詢請求,首先在本地計算機的緩存中查找。如果在本地無法獲得查詢信息,則將查詢請求發給DNS服務器。

2、首先客戶機將域名查詢請求發送到本地DNS服務器,當本地DNS服務器接到查詢後,首先在該服務器管理的區域的記錄中查找,如果找到該記錄,則利用此記錄進行解析;如果沒有區域信息可以滿足查詢要求,服務器在本地的緩存中查找。

3、如果本地服務器不能在本地找到客戶機查詢的信息,將客戶機請求發送到根域名DNS服務器。

4、根域名服務器負責解析客戶機請求的根域部分,它將包含下一級域名信息的DNS服務器地址返回給客戶機的DNS服務器地址。

5、客戶機的DNS服務器利用根域名服務器解析的地址訪問下一級DNS服務器,得到再下一級域我的DNS服務器地址。

6、按照上述遞歸方法逐級接近查詢目標,最後在有目標域名的DNS服務器上找到相應IP地址信息。

7、客戶機的本地DNS服務器將遞歸查詢結果返回客戶機。

8、客戶機利用從本地DNS服務器查詢得到的IP訪問目標主機,即想訪問的網站,也就完成了一個解析過程。




11.我們都知道,dns既採用了tcp協議,又採用了udp協議,什麼時候採用tcp協議?什麼時候採用udp協議?爲什麼要這麼設計?

答:

A.從數據包大小上分:UDP的最大包長度是65507個字節,相應dns查詢的時候數據包長度超過512個字節,這時解析器通常使用TCP重發原來的請求,因爲tcp協議主要用於DNS服務器之間傳遞較大塊的信息,例如同步數據庫,UDP用戶普通的dns查詢。

B.從協議本身分:大部分的情況下使用UDP協議,大家都知道UDP協議是一種不可靠的協議,dns不像其它的使用UDP的Internet應用 (如:TFTP,BOOTP和SNMP等),大部分集中在局域網,dns查詢和響應需要經過廣域網,分組丟失和往返時間的不確定性在廣域網比局域網上更 大,這就要求dns客戶端需要好的重傳和超時算法,這時候使用TCP。

這樣設計是因爲傳輸數據的尺寸比較大,並且對數據的精確要求比較高,採用tcp的方式可以保證數據的完整性和正確性。




12.一個EXT3的文件分區,當使用touch test.file命令創建一個新文件時報錯,報錯的信息是提示磁盤已滿,但是採用df -h命令查看磁盤大小時,只使用了,60%的磁盤空間,爲什麼會出現這個情況,說說你的理由。

答:磁盤配額或者inode耗盡。



13.我們都知道FTP協議有兩種工作模式,說說它們的大概的一個工作流程?





14.編寫個shell腳本將當前目錄下大於100K的文件轉移到/tmp目錄下

答:豪鷲提供兩種方法————

A.使用for循環結合awk去讀取目錄下列出的文件大小,大於100k的文件mv到tmp下;

B.使用find命令;


具體如下:

法1:for結合awk

[root@zintao01 file]# cat mvfile.sh 

#!/bin/bash

#script for move currently dir to /tmp which size is bigger than 100k;

#create by haojiu;

#date 2015-x-x


for file in `ls -l | sed -e '1d' | awk '$5 > 102400 {print$NF}'`;

do 

mv $file /tmp/

done



法2:find命令

[root@haojiu file]#  find ./ -type f -size +100k -exec mv {} /tmp/ \;




15.apache有幾種工作模式,分別介紹下其特點,並說明什麼情況下采用不同的工作模式?

答:apache主要有兩種工作模式:prefork(預派生,默認安裝模式)和worker(支持混合的多線程多進程的多路處理模塊,可以在編譯的時候加參數–with-mpm- worker選擇工作模式)

prefork的特點:

1、prefork MPM 使用多個子進程,每個子進程只有一個線程。每個進程在某個確定的時間只能維持一個連接。這種模式可以不必在請求到來時再產生新的進程,從而減小了系統開銷。

2、可以防止意外的內存泄漏,但這種模式消耗的內存比較大;

3、在服務器負載下降的時候會自動減少子進程數


worker的特點: 

worker MPM 使用多個子進程,每個子進程有多個線程。每個線程在某個確定的時間只能維持一個連接。通常來說,在一個高流量的HTTP服務器上,Worker MPM是個比較好的選擇,因爲Worker MPM的內存使用比Prefork MPM要低得多。但worker MPM也由不完善的地方,假如一個線程崩潰,整個進程就會連同其任何線程一起"死掉".由於線程共享內存空間,所以一個程式在運行時必須被系統識別爲"每 個線程都是安全的"。




16.編寫shell腳本獲取本機的IP/netmask。


答:豪鷲提供以下幾種獲取方法,僅供參考;

法1:直接通過截取ifconfig命令運行結果

[root@zintao01 ~]# cat getIP.sh 

#!/bin/bash

#This script using for get IP and NETMASK.

#create by haijiu

#date 2015-x-x

#獲取IP和NETMASK也可以有以下幾種方法,任選其一即可;



#IP=`ifconfig eth0|grep -w 'inet'|sed 's/^.*addr://g'|sed 's/ Bcast.*$//g'`

#NETMASK=`ifconfig eth0 |grep -w 'inet'|sed 's/^.*Mask://g'`


#IP=`ifconfig eth0|grep 'inet addr'|cut -d ":" -f2|cut -d " " -f1`

#NETMASK=`ifconfig eth0|grep 'inet addr'|cut -d ":" -f4`


IP=`ifconfig eth0 |grep "inet addr"|awk -F: '{print $2}'|awk '{print $1}'`

NETMASK=`ifconfig eth0 |grep "inet addr"|awk -F: '{print $4}'|awk '{print $1}'`


echo "$IP/$NETMASK"


法2:通過ifconfig-eth0配置文件獲取(此種方法適用於有固定的靜態IP地址,不過通常服務器都是有固定IP地址的~_~)


[root@haojiu ~]# cat getIP.sh 

#!/bin/bash

#This script using for get IP and NETMASK.

#create by haijiu

#date 2015-x-x

#此種方法適用於有固定的靜態IP地址

#同樣豪鷲這裏也提供兩種獲取方法,僅供參考;



file=”/etc/sysconfig/network-scripts/ifcfg-eth0″

    if [ -f $file ] ;then

          #IP=`grep "IPADDR" $file|awk -F"=" '{ print $2 }'`

          #NETMASK=`grep "NETMASK" $file|awk -F"=" '{ print $2 }'`

  #IP=`grep IPADDR $file|cut -d= -f2`

          #NETMASK=`grep NETMASK $file|cut -d= -f2`

  IP=`cat $file|grep IPADDR|cut -d= -f2`

  NETMASK=`cat $file|grep NETMASK|cut -d= -f2`

           echo "$IP/$NETMASK"

     exit 1

     fi






17.簡述DDOS***的原理,有沒有解決辦法?有,如何解決?

答:分佈式服務拒絕***就是用一臺主服務器來控制N臺肉雞對目標服務器進行合理的資源請求,導致服務器資源耗盡而不能進行正常的服務。

幾種流行的DDOS***方式:SYN/ACK FLOOD***、TCP全連接***、CC***(百科:***者藉助代理服務器生成指向受害主機的合法請求,實現DDOS,和僞裝就叫:cc(ChallengeCollapsar)。CC主要是用來***頁面的。)


一個簡單的測試: 首先是網站如果打不開的話,可以嘗試着用3389連接一下服務器看看,然後還可以用PING命令來測試,再一種方式就是用telnet來登錄80端口看看,看會不會出現黑屏。如果這些方式測試都連接不上的話,那就說明受到DDOS***了。

然後如果除了80端口之外的其他端口連接都正常,PING命令測試也正常,但就是80端口訪問不了,然後看看IIS是否正常,可以把80端口改成其他端口測試,如果可以正常訪問,那就說明很可能受到CC***。


防禦DDOS***:

<1>要有充足的網絡帶寬和穩定安全的機房:選擇口碑好、服務好、安全防護好點的機房,網絡帶寬直接決定了能抗受***的能力。

<2>軟硬設備的防護:硬件DDOS防火牆黑洞、冰盾都不錯,軟件如web服務器都有相應的ddos防護模塊,iptables,做單IP的併發限制,流量限制,syn及部分***限制。

<3>網站架構優化,避免單點提供服務,集羣,冗餘,負載均衡、緩存技術的架設。

<4>服務器系統自身的優化及安全參數調配

<5>採用高性能的網絡設備




18.簡述linux下編譯內核的意義與步驟,有做過LFS嗎?有,請簡述過程,注意哪些,意義。

答:編譯內核的意義在於使系統更加精簡化,更爲適合自身業務提供服務,減去很多不必要的預安裝功能,使系統能更穩定提供服務;

內核編譯的一般步驟:

1、準備工作:備份相關文件,下載並解壓Linux新內核;

2、清除從前編譯內核時殘留的.o文件和不必要的關聯;

3、配置內核,修改相關參數;

4、正確設置關聯文件

5、make clean

6、編譯內核

7、編譯模塊

8、安裝模塊

9、使用新內核

10、重新生成ram磁盤

11、重啓服務器





19.你的5W,併發是如何做的,架構是什麼?LVS,採用什麼模式?這個模式的優點是什麼? 採用的什麼調度方法?爲什麼採用這個調度方法?你還知道哪些?前端調度有幾臺服務器,單臺機器併發多少?你是如何優化系統的?做了那些配置?

答:一般來講,lvs架構頂住5w併發是沒問題的。具體看公司的服務器架構,一般使用最多的是DR模式,其優點是:調度器只是分發請求,應答包通過單獨的路由方法返回給客戶端,與TUN模式相比,DR模式不需要隧道結構,






20.raid原理

答:raid中文是“獨立冗餘磁盤陣列”,它的工作原理:RAID按照實現原理的不同分爲不同的級別,不同的級別之間工作模式是有區別的。整個的RAID結構是一些磁盤結構,通過對磁盤進行組合達到提高效率,減少錯誤的目的。

RAID 0————無差錯控制的帶區組,要實現RAID0必須要有兩個以上硬盤驅動器,RAID0實現了帶區組,數據並不是保存在一個硬盤上,而是分成數據塊保存在不同驅動器上。在所有的級別中,RAID0的速度是最快的。但是RAID0沒有冗餘功能的,如果一個磁盤(物理)損壞,則所有的數據都無法使用。


RAID 1————鏡象結構,RAID 1的數據安全性在所有的RAID級別上來說是最好的。但是其磁盤的利用率卻只有50%,是所有RAID級別中最低的。 


RAID5————分佈式奇偶校驗的獨立磁盤結構,RAID5的讀出效率很高,寫入效率一般,塊式的集體訪問效率不錯,允許單個磁盤出錯,,任何一個硬盤損壞,都可以根據其它硬盤上的校驗位來重建損壞的數據。硬盤的利用率爲n-1。 但是它對數據傳輸的並行性解決不好,而且控制器的設計也相當困難。


RAID10————高可靠性與高效磁盤結構,這種結構無非是一個帶區結構加一個鏡象結構,因爲兩種結構各有優缺點,因此可以相互補充,達到既高效又高速還可以的目的。大家可以結合兩種結構的優點和缺點來理解這種新結構。這種新結構的價格高,可擴充性不好。主要用於容量不大,但要求速度和差錯控制的數據庫中。




21.如何查看佔用80端口的進程,並清理該端口進程。

答:使用命令lsof -i:80查看佔用80端口的進程,使用命令pkill該進程

或者直接使用命令:lsof -i:80|sed '1d'|awk '{print $1}'|xargs kill




22.你對什麼數據庫比較瞭解?oracle裝過嗎?什麼版本?mysql,說說有那些引擎,對mysql優化怎麼看?備份都是怎麼備份的。主從複製,是實時的嗎?有添加過10W條左右的數據測試過嗎?還問了些mysql的基礎問題。

答:豪鷲個人的情況,一個一個問題來:

A.平時用mysql比較稍微多些,oracle也用過,但也只是接觸一些皮毛,因爲有專門的DBA管理和權限控制的原因;


B.本地虛擬機和公司測試環境還是有安裝過oracle,版本是Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production;


C.mysql的存儲引擎有很多,常用的有四種存儲引擎:MyISAM、InnoDB、MEMORY和MERGE,其中以MyISAM和InnoDB最爲常見。

MyISAM:不支持事務,也不支持外鍵,尤其是訪問速度快,對事務完整性沒有要求或者以SELECT、INSERT爲主的應用基本都可以使用這個引擎來創建表。

InnoDB:InnoDB給MySQL提供了具有提交,回滾和崩潰恢復能力的事務安全存儲引擎。InnoDB鎖定在行級並且也在SELECT語句提供一個Oracle風格一致的非鎖定讀。這些特色增加了多用戶部署和性能。但是對比MyISAM的存儲引擎,InnoDB寫的處理效率差一些並且會佔用更多的磁盤空間以及保留數據和索引。

MEMORY:memory使用存在內存中的內容來創建表。每個MEMORY表實際對應一個磁盤文件,格式是.frm。MEMORY類型的表訪問非常快,因爲它到數據是放在內存中的,並且默認使用HASH索引,但是一旦服務器關閉,表中的數據就會丟失,但表還會繼續存在。

MERGE:merge存儲引擎是一組MyISAM表的組合,這些MyISAM表結構必須完全相同,MERGE表中並沒有數據,對MERGE類型的表可以進行查詢、更新、刪除的操作,這些操作實際上是對內部的MyISAM表進行操作。


補充:MyISAM存儲引擎和InnoDB存儲引擎的區別————MyISAM類型不支持事務處理等高級處理,而InnoDB類型支持。MyISAM類型的表強調的是性能,其執行數度比InnoDB類型更快,但是不提供事務支持,而InnoDB提供事務支持以及外部鍵等高級數據庫功能。

 兩種類型最主要的差別就是Innodb支持事務處理與外鍵和行級鎖。而MyISAM不支持.所以MyISAM往往就容易被人認爲只適合在小項目中使用。作爲使用MySQL的用戶角度出發,Innodb和MyISAM都是比較喜歡的,如果數據庫平臺要達到需求:99.9%的穩定性,方便的擴展性和高可用性來說的話,MyISAM絕對是首選。而InnoDB的理想使用場合則是高併發,更新操作比較多的表。需要使用事務的表。對自動災難恢復有要求的表。


D.MySQL優化:




E.Mysql備份:豪鷲的備份策略是每週日凌晨3點做全備,每天凌晨3點做增備,以防萬一,我還保留9天內的binlog文件,備份好的文件在本地磁盤保留一份,同時通過ftp自動上傳到遠程的存儲服務器上,然後再利用腳本監控Mysql的備份腳本是否正常工作。


F.主從複製:有主從複製(異步)、半同步複製、基於SSL複製,豪鷲採用的是異步的主從複製,異步複製的好處在於它比同步複製快。



23.cacti和nagios各有什麼優勢,你用的cacti版本號多少?你都監控過哪些服務?報警是如何實現的?

答:cacti比較側重於流量方面的監控,畫圖也比較美觀,提供各種插件有針對性地進行監控,豪鷲見過有很多機房也採用cacti監控流量;而nagios則比較側重於監控網絡服務,提供接口可自定義腳本插件監控自定義的服務等;豪鷲最開始使用cacti的版本是0.8.7,後來升級到0.8.7g,再後來使用0.8.8a和0.8.8b版本;監控的對象包括:主機資源(CPU、內存、磁盤使用率、網卡流量、web服務、db狀態、tcp狀態以及其他根據業務自定義監控等),報警均使用139郵箱報警,綁定到手機(不過手機號碼最好是移動的號碼,如果是非移動號碼,是可以註冊開通139郵箱,但不能綁定到手機)。



24.你對系統安全,有什麼想法?常見***有哪些?DDos***,一般你會怎麼處理。對於,系統自身安全,你有那些見解。

答:



25.你平時用的最多的Linux發行版是什麼?

答:豪鷲用過Solaris系統,Centos5.x/6.x、redhat5.x/6.x、SUSE 11,當然還有其他系統,如:AIX,HP,FreeBSD,Fedora,Debian,Gentoo,Ubuntu……具體看個人。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章