防偽碼:不要仰望別人,自己亦是風(fēng)景。
1、寫一個(gè)腳本查找最后創(chuàng)建時(shí)間是三天前,后綴是*.log的文件并刪除
1 | find .-ctime +3 -name '*.log' | rm -rf |
2、統(tǒng)計(jì)ip訪問情況,要求分析nginx訪問日志,找出訪問頁面數(shù)量在前十位的ip
1 | cataccess.log | awk '{print $1}' | uniq -c | sort -rn | head -10 |
3、使用tcpdump監(jiān)聽主機(jī)為192.168.1.1,tcp端口為80的數(shù)據(jù),同時(shí)將輸出結(jié)果保存輸出
到tcpdump.log。
1 | tcpdump 'host 192.168.1.1 and port 80' > tcpdump.log |
4、利用Python打印前一天的本地時(shí)間,格式為'2016-03-29 13:58:34'
1 | time .strftime( '%y-%m-%d%H:%M%:%S' time .locatime( time . time () -86400)) |
5、用Python將‘123456’反轉(zhuǎn)為‘654321’
1 | ‘123456’[::-1] |
6、利用Python執(zhí)行shell命令并取得返回結(jié)果
1 2 3 4 5 | >>> import subprocess >>> a=subprocess.popen( 'ls' ,shell=True,stdout=subprocoss.PIPE, stderr=subprocess.PIPE) >>>stdout,sterr = a.communicate() >>>print stdout |
8、請用Python繼承process,并寫一個(gè)并行執(zhí)行的類,并寫出使用過程。
1 2 3 4 5 6 7 8 9 10 11 12 | import multiprocessing import time class ClockProcess(multiprocessing.Process): def __init__(self, interval): multiprocessing.Process.__init__(self) self.interval = interval def run(self): n = 5 while n > 0: print( "the time is {0}" . format ( time .ctime())) time . sleep (self.interval) n -= 1 |
9、有文件file1
a、請用shell查詢file1 里面空行的所在行號
1 | #awk '$0 ~ /^$/ {print NR}' file1 |
或
1 | grep -n "^$" file1 |
b、編寫ShellScript查詢file1 以abc結(jié)尾的行
1 | grep "abc$" file1 |
或
1 | sed -n '/abc$/ p' file1 |
c、打印出file1 文件第1 到第3 行
1 | sed -n '1,3p' file1 |
10、如何將本地80 端口的請求轉(zhuǎn)發(fā)到8080 端口,當(dāng)前主機(jī)IP 為192.168.2.1
1 | Iptables –t nat -A PREROUTING -d 192.168.2.1 -p tcp –dport 80 -j REDIRECT --to 8080 |
11、在11 月份內(nèi),每天的早上6 點(diǎn)到12 點(diǎn)中,每隔2 小時(shí)執(zhí)行一次/usr/bin/httpd.sh 怎么
實(shí)現(xiàn)
1 | 0 6-12 /2 * 11 * /usr/bin/httpd .sh |
12、編寫個(gè)shell 腳本將/usr/local/test 目錄下大于100K 的文件轉(zhuǎn)移到/tmp目錄下
1 | find /usr/local/test - type f -size +100k - exec mv {} /tmp/ |
或
1 2 3 4 5 6 7 8 9 10 11 | #!/bin/bash filelist=$( ls /usr/local/test -l | grep "^-" | awk '{print $9}' ) filepath= "/usr/local/test" for file in $filelist do filesize=$( du -s $filepath$ file | awk '{print $1}' ) if [ $filesize -gt 100] then mv $filepath$ file /tmp/ fi done |
13、簡述raid0 raid1 raid5 三種工作模式的工作原理及特點(diǎn)。
1 2 | RAID 0:帶區(qū)卷,連續(xù)以位或字節(jié)為單位分割數(shù)據(jù),并行讀/寫于多個(gè)磁盤上,因此具有很高的數(shù)據(jù)傳輸率,但它沒有數(shù)據(jù)冗余, RAID 0 只是單純地提高性能,并沒有為數(shù)據(jù)的可靠性提供保證,而且其中的一個(gè)磁盤失效將影響到所有數(shù)據(jù)。因此,RAID 0 不能應(yīng)用于數(shù)據(jù)安全性要求高的場合。 |
1 2 | RAID 1:鏡像卷,它是通過磁盤數(shù)據(jù)鏡像實(shí)現(xiàn)數(shù)據(jù)冗余,在成對的獨(dú)立磁盤上產(chǎn)生互為備份的數(shù)據(jù),不能提升寫數(shù)據(jù)效率。當(dāng)原始數(shù)據(jù)繁忙時(shí),可直接從鏡像拷貝中讀取數(shù)據(jù),因此RAID 1 可以提高讀取性能。RAID 1 是磁盤陣列中單位成本最高的,鏡像卷可用容量為總?cè)萘康? /2 ,但提供了很高的數(shù)據(jù)安全性和可用性。當(dāng)一個(gè)磁盤失效時(shí),系統(tǒng)可以自動切換到鏡像磁盤上讀寫,而不需要重組失效的數(shù)據(jù)。 |
1 | RAID5:至少由3塊硬盤組成,分布式奇偶校驗(yàn)的獨(dú)立磁盤結(jié)構(gòu),它的奇偶校驗(yàn)碼存在于所有磁盤上,任何一個(gè)硬盤損壞,都可以根據(jù)其它硬盤上的校驗(yàn)位來重建損壞的數(shù)據(jù)(最多允許1塊硬盤損壞)。所以raid5可以實(shí)現(xiàn)數(shù)據(jù)冗余,確保數(shù)據(jù)的安全性,同時(shí)raid5也可以提升數(shù)據(jù)的讀寫性能。 |
14、oracle 數(shù)據(jù)庫備份方式
1 2 3 4 5 6 7 | 從物理與邏輯的角度分類: 物理備份:對數(shù)據(jù)庫操作系統(tǒng)的物理文件(如數(shù)據(jù)文件、控制文件、日志文件等)的備份,物理備份又分為冷備份和熱備份,前者是在關(guān)閉數(shù)據(jù)庫的時(shí)候進(jìn)行的,后者對正以歸檔日志方式進(jìn)行的數(shù)據(jù)庫備份,可以使用RMAN進(jìn)行數(shù)據(jù)庫的物理備份 邏輯備份:對數(shù)據(jù)庫邏輯組件(如表、表空間、存儲過程等數(shù)據(jù)庫對象)的備份邏輯備份的手段很多,如exp、數(shù)據(jù)泵expdp、數(shù)據(jù)庫閃回技術(shù)等 從數(shù)據(jù)庫的備份策略角度分類: 完全備份:每次對數(shù)據(jù)庫進(jìn)行完整備份 增量備份:只有那些在上次完全備份或者增量備份后被修改的文件才會被備份。 差異備份:備份那些自從上次完全備份之后被修改過的文件。 |
15、如何查看占用端口8080 的進(jìn)程
1 2 3 | netstat -anpt | grep 8080 或 lsof -i :8080 |
八、請寫出apache2.X 版本的兩種工作模式,以及各自工作原理。如何查看apache 當(dāng)前所支持的模塊,并且查看是工作在哪種模式下?
1 2 3 4 5 6 7 8 | prefork(多進(jìn)程,每個(gè)子進(jìn)程產(chǎn)生一個(gè)線程)和worker(多進(jìn)程多線程,每個(gè)進(jìn)程生成多個(gè)線程) 其主要工作方式是:當(dāng)Apache服務(wù)器啟動后,mpm_prefork模塊會預(yù)先創(chuàng)建多個(gè)子進(jìn)程(默認(rèn)為5個(gè)),每個(gè)子進(jìn)程只有一個(gè)線程,當(dāng)接收到客戶端的請求后,mpm_prefork模塊再將請求轉(zhuǎn)交給子進(jìn)程處理,并且每個(gè)子進(jìn)程同時(shí)只能用于處理單個(gè)請求。如果當(dāng)前的請求數(shù)將超過預(yù)先創(chuàng)建的子進(jìn)程數(shù)時(shí),mpm_prefork模塊就會創(chuàng)建新的子進(jìn)程來處理額外的請求。Apache總是試圖保持一些備用的或者是空閑的子進(jìn)程用于迎接即將到來的請求。這樣客戶端的請求就不需要在接收后等候子進(jìn)程的產(chǎn)生。 由于在mpm_prefork模塊中,每個(gè)請求對應(yīng)一個(gè)子進(jìn)程,因此其占用的系統(tǒng)資源相對其他兩種模塊而言較多。不過mpm_prefork模塊的優(yōu)點(diǎn)在于它的每個(gè)子進(jìn)程都會獨(dú)立處理對應(yīng)的單個(gè)請求,這樣,如果其中一個(gè)請求出現(xiàn)問題就不會影響到其他請求。Prefork在效率上要比Worker要高,但是內(nèi)存使用大得多不擅長處理高并發(fā)的場景。 Worker模式(多線程多進(jìn)程): 和prefork模式相比,worker使用了多進(jìn)程和多線程的混合模式,worker模式也同樣會先預(yù)派生一些子進(jìn)程,然后每個(gè)子進(jìn)程創(chuàng)建一些線程,同時(shí)包括一個(gè)監(jiān)聽線程,每個(gè)請求過來會被分配到一個(gè)線程來服務(wù)。線程比起進(jìn)程會更輕量,因?yàn)榫€程是通過共享父進(jìn)程的內(nèi)存空間,因此,內(nèi)存的占用會減少一些,在高并發(fā)的場景下會比prefork有更多可用的線程,表現(xiàn)會更優(yōu)秀一些;另外,如果一個(gè)線程出現(xiàn)了問題也會導(dǎo)致同一進(jìn)程下的線程出現(xiàn)問題,如果是多個(gè)線程出現(xiàn)問題,也只是影響Apache的一部分,而不是全部。 總的來說,prefork方式速度要稍高于worker,然而它需要的cpu和memory資源也稍多于woker。 可以通過命令httpd -M 或 httpd -l 可以查看apache 當(dāng)前的模塊 可以通過命令httpd -V查看是工作在哪種模式下 |
16、你使用過監(jiān)控軟件嗎?說說其特點(diǎn)
1 2 3 4 5 6 7 8 | 使用nagios對服務(wù)器進(jìn)行監(jiān)控,其特點(diǎn)側(cè)重于對檢測項(xiàng)的狀態(tài)監(jiān)控,主要通過nrpe實(shí)現(xiàn)對遠(yuǎn)程主機(jī)的監(jiān)控,但也可以通過snmp對設(shè)備(如路由器、交換機(jī))進(jìn)行監(jiān)控,可實(shí)時(shí)實(shí)現(xiàn)手機(jī)短信、電子郵件、MSN、飛信報(bào)警。 使用cacti 對服務(wù)器進(jìn)行監(jiān)控,其特點(diǎn)側(cè)重性能和流量監(jiān)控并通過圖表顯示,主要通過snmp協(xié)議收集監(jiān)測項(xiàng)數(shù)據(jù),可實(shí)時(shí)實(shí)現(xiàn)手機(jī)短信、電子郵件、 使用zabbix對服務(wù)器進(jìn)行監(jiān)控,zabbix是完全開源的工具,整合了cacti和nagios等特性。 zabbix可以對主機(jī)的性能監(jiān)控、網(wǎng)絡(luò)設(shè)備性能監(jiān)控、數(shù)據(jù)庫、FTP 等通用協(xié)議監(jiān)控、多種告警方式、詳細(xì)的報(bào)表圖表繪制 支持自動發(fā)現(xiàn)網(wǎng)絡(luò)設(shè)備和服務(wù)器(可以通過配置自動發(fā)現(xiàn)服務(wù)器規(guī)則來實(shí)現(xiàn)) 支持分布式,能集中展示、管理分布式的監(jiān)控點(diǎn),擴(kuò)展性強(qiáng) 可以自己開發(fā)完善各類監(jiān)控(根據(jù)相關(guān)接口編寫程序?qū)崿F(xiàn)),編寫插件容易,可以自定義監(jiān)控項(xiàng),報(bào)警級別的設(shè)置。 數(shù)據(jù)收集,支持 snmp(包括 trapping and polling ),IPMI,JMX,SSH,TELNET; |
17、你對現(xiàn)在運(yùn)維工程師的理解和以及對其工作的認(rèn)識
1 | 運(yùn)維工程師在公司當(dāng)中責(zé)任重大,需要保證時(shí)刻為公司及客戶提供最高、最快、最穩(wěn)定、最安全的服務(wù)。運(yùn)維工程師的一個(gè)小小的失誤,很有可能會對公司及客戶造成重大損失,因此運(yùn)維工程師的工作需要嚴(yán)謹(jǐn)及富有創(chuàng)新精神。 |
18、第一部分 基礎(chǔ)題
a. 僅列出 /test目錄下的所有目錄,請寫出完整命令
1 | ls /test -l | grep "^d" |
b. umask 022 ,請描述該命令的含義
1 | umask 設(shè)置文件或目錄的缺省權(quán)限, umask 022表示目錄的缺省權(quán)限為755,文件的缺省權(quán)限為644 |
c. 在排除 /test/a目錄的條件下,歸檔并gzip壓縮整個(gè)/test目錄,請寫出完整的操作命令t
1 | tar zcvf backup. tar .gz --exclude /test/a /test |
d. 查詢并列出 test進(jìn)程所打開的當(dāng)前所有文件,請寫出完整的操作命令
1 | lsof -c test |
e. 查詢并列出test.rpm包里所包含的所有文件,請寫出完整的操作命令
1 2 | rpm -qpl test .rpm |
f. 將 /test/a目錄建立軟鏈接到 /test/b目錄,請寫出完整的操作命令
1 | ln -s /test/a test /b |
g. 設(shè)置當(dāng)前用戶環(huán)境中 test變量為 123并使之立即生效,請寫出完整操作命令
1 | export test =123 |
h. 設(shè)置系統(tǒng)當(dāng)前運(yùn)行級別中 test服務(wù)狀態(tài)為啟動時(shí)自動加載,請寫出完整操作命令
假設(shè)運(yùn)行級別為3級別
1 | chkconfig --level 3 test on |
k. 列出當(dāng)前系統(tǒng)中所有的網(wǎng)絡(luò)連接(包含進(jìn)程名),請寫出完整操作命令
1 2 3 4 5 6 7 8 9 | netstat -antuple (-a 顯示所有socket,包括正在監(jiān)聽的。 -n 以網(wǎng)絡(luò)IP地址代替名稱,顯示出網(wǎng)絡(luò)連接情形。 -t 顯示TCP協(xié)議的連接情況 -u 顯示UDP協(xié)議的連接情況。 -p 顯示指定協(xié)議信息。 -l或--listening 顯示監(jiān)控中的服務(wù)器的Socket。 -e 顯示以太網(wǎng)統(tǒng)計(jì)。此選項(xiàng)可以與 -s 選項(xiàng)結(jié)合使用。 ) |
j. 實(shí)時(shí)抓取并顯示當(dāng)前系統(tǒng)中tcp 80端口的網(wǎng)絡(luò)數(shù)據(jù)信息,請寫出完整操作命令
1 | tcpdump -nn tcp port 80 |
19、第二部分綜合應(yīng)用
a. 請寫出5個(gè)你常用的系統(tǒng)或網(wǎng)絡(luò)維護(hù)工具的名稱
1 2 3 4 5 | rhel centos ubuntu iotop用于檢查 I /O 的使用情況 htop實(shí)質(zhì)上是 top 的一個(gè)增強(qiáng)版本。它更容易對進(jìn)程排序。 ping traceroute |
b.在nslookup使用中,請問如何查看test.com域中的MX記錄
1 2 3 4 5 6 7 | #nslookup > set type =mx > test .comc. ftp , ssh ,smtp,pop3,https,請寫出這些服務(wù)的默認(rèn)端口 ftp :21 ssh :22 smtp:25 pop3:110 https:443.25G) |
d. 請問如何用iptables工具阻斷來自 192.168.0.1的所有網(wǎng)絡(luò)連接
1 | iptable -I INPUT -s 192.168.0.1 -j DROP |
e. 請簡要描述Linux系統(tǒng)下源代碼編譯方式安裝軟件的大致步驟
1 2 3 4 5 | tar 釋放源碼包 cd 切換到解壓目錄 . /configure 配置 make 編譯 make install 安裝 |
f. 請寫出Tomcat程序的主配置文件名
1 | server.xml |
g. Mysql客戶端工具中,請問如何查詢當(dāng)前所有的連接進(jìn)程信息
1 2 | mysql -u user -p password -e "show processlist" |
20. 服務(wù)器開不了機(jī)怎么解決一步步的排查
1 2 3 | 硬件有無報(bào)警燈提示 主面板液晶面板有沒有提示什么報(bào)錯信息,例如raid錯誤的提示信息 先排除硬件還是軟件問題 |
十四. Linux開機(jī)模式
1 2 | 0 - 表示關(guān)閉系統(tǒng)(千萬不要把默認(rèn)設(shè)置成0哦?。? - 單用戶模式2 - 多用戶模式,沒有NFS服務(wù)3 - 多用戶文本模式5 - 圖形模式6 - 系統(tǒng)重新啟動 過修改 /etc/inittab ,使系統(tǒng)在啟動時(shí)進(jìn)入不同模式。 |
21. Linux系統(tǒng)中病毒怎么解決
1 2 3 4 5 | 找到病毒文件然后刪除;中毒之后一般機(jī)器cpu、內(nèi)存使用率會比較高,機(jī)器向外發(fā)包等異常情況,排查方法: linux服務(wù)器流量劇增,用iftop查看有連接外網(wǎng)的情況。 netstat 連接的外網(wǎng)ip和端口。 #top命令找到cpu使用率高的進(jìn)程,一般病毒文件命名都比較亂#可以用ps aux 查看是否有不明進(jìn)程,找出病毒文件的位置#rm -f 命令刪除病毒文件 #檢查計(jì)劃任務(wù)、開機(jī)啟動項(xiàng)和病毒文件目錄有無其他可疑文件等 chkconfig --list | grep 3:on 服務(wù)器啟動級別是3的,檢查一下了開機(jī)啟動項(xiàng),沒有特別明顯的服務(wù)。然后檢查了一下開機(jī)啟動的一個(gè)文件, more /etc/rc . local |
22. 發(fā)現(xiàn)一個(gè)病毒文件你刪了他又自動創(chuàng)建怎么解決
1 2 | ps axu一個(gè)個(gè)排查,方法是查看可疑的用戶和系統(tǒng)相似而又不是的進(jìn)程找出進(jìn)程可疑。 殺掉所有與病毒相關(guān)的進(jìn)程,然后刪掉病毒這個(gè)可執(zhí)行文件,最后刪除病毒創(chuàng)建的文件 |
十七. 日志文件很大,怎么把他們切分
1 2 3 4 5 6 7 8 9 | 針對這些日志按每或每周進(jìn)行分割,例如只保留一周的數(shù)據(jù),用logrotate來實(shí)現(xiàn)日志的輪替?;蛘呔帉懭罩疚募笮”O(jiān)控腳本,定期檢查該日志文件的大小,接近設(shè)定大小時(shí),進(jìn)行輪換。 如果日志文件存在并且很大,可以用Linux下的 split 進(jìn)行文件分割: 模式一:指定分割后文件行數(shù) Split:按指定的行數(shù)截?cái)辔募袷? split [-n] file [name]參數(shù)說明:-n: 指定截?cái)嗟拿恳晃募拈L度,不指定缺省為1000行 file : 要截?cái)嗟奈募ame: 截?cái)嗪螽a(chǎn)生的文件的文件名的開頭字母,不指定,缺省為x,即截?cái)嗪螽a(chǎn)生的文件的文件名為xaa,xab....直到xzz 模式二:指定分割后文件大小 命令: split -b 10m server.log server_part_ 其中server.log是要分割的文件,server_part_是分割文件的前綴。 對二進(jìn)制文件我們同樣也可以按文件大小來分隔 |
23. tcp/ip七層模型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 應(yīng)用層 (Application): 網(wǎng)絡(luò)服務(wù)與最終用戶的一個(gè)接口。 協(xié)議有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP 表示層(Presentation Layer): 數(shù)據(jù)的表示、安全、壓縮。(在五層模型里面已經(jīng)合并到了應(yīng)用層) 格式有,JPEG、ASCll、DECOIC、加密格式等 會話層(Session Layer): 建立、管理、終止會話。(在五層模型里面已經(jīng)合并到了應(yīng)用層) 對應(yīng)主機(jī)進(jìn)程,指本地主機(jī)與遠(yuǎn)程主機(jī)正在進(jìn)行的會話 傳輸層 (Transport): 定義傳輸數(shù)據(jù)的協(xié)議端口號,以及流控和差錯校驗(yàn)。 協(xié)議有:TCP UDP,數(shù)據(jù)包一旦離開網(wǎng)卡即進(jìn)入網(wǎng)絡(luò)傳輸層 網(wǎng)絡(luò)層 (Network): 進(jìn)行邏輯地址尋址,實(shí)現(xiàn)不同網(wǎng)絡(luò)之間的路徑選擇。 協(xié)議有:ICMP IGMP IP(IPV4 IPV6) ARP RARP 數(shù)據(jù)鏈路層 (Link): 建立邏輯連接、進(jìn)行硬件地址尋址、差錯校驗(yàn)等功能。(由底層網(wǎng)絡(luò)定義協(xié)議) 將比特組合成字節(jié)進(jìn)而組合成幀,用MAC地址訪問介質(zhì),錯誤發(fā)現(xiàn)但不能糾正。 物理層(Physical Layer): |
24. 你常用的Nginx模塊,用來做什么
1 2 3 4 5 6 7 | rewrite模塊,實(shí)現(xiàn)重寫功能 access模塊:來源控制 ssl模塊:安全加密 ngx_http_gzip_module:網(wǎng)絡(luò)傳輸壓縮模塊 ngx_http_proxy_module 模塊實(shí)現(xiàn)代理 ngx_http_upstream_module模塊實(shí)現(xiàn)定義后端服務(wù)器列表 ngx_cache_purge實(shí)現(xiàn)緩存清除功能 |
25、請列出你了解的web服務(wù)器負(fù)載架構(gòu)。
1 2 3 4 | Nginx haproxy keepalived lvs |
歡迎加技術(shù)群:323779636(Shell/Python運(yùn)維開發(fā)群)
本文出自 “一盞燭光” 博客,謝絕轉(zhuǎn)載!
更多建議: