Linux運維(三)

    好幾天沒複習了,腦袋已經反應不過來了,被問到本身研究過的,絕對SB,前功盡棄!但願明天接到電話啊,進入嚮往的電商公司!html


一、一個sql語句查詢很慢怎麼辦?mysql

答:(1)登陸到Mysql,show global status;和show processlist查看數據庫系統狀態linux

(2)查看慢查詢日誌,show variables like '%slow%',分析是那些SQL語句拖慢了系統ios

(3)vi /etc/my.cnf配置文件,對參數進行修改,好比最大鏈接數和表緩存程序員

(4)合理添加索引web


二、哪些字段適合看成索引,哪些字段不適合創建索引?內鏈接外鏈接的區別?面試

答:適合:外鍵字段、主鍵字段、在where子句中的字段。正則表達式

不適合:更新頻繁的數據不適合創建索引、全表掃描比創建索引快則不須要創建索引、like查詢以%開頭、有or語句的不適合創建索引sql

內鏈接:匹配左右兩表某個列值的相同的記錄行shell

外鏈接:又分爲左外鏈接、右外鏈接、全外鏈接,返回某一個表相匹配的行,並在另外一表不匹配的行爲空值

左外鏈接就是以左表爲準,去匹配右表,若是有匹配的則返回,若是不匹配,則對應的列爲空值。左表有多少條數據,結果就是多少條數據 


三、事務隔離級別?

答:(1)未提交讀,能夠讀取未提交事務的數據,也稱爲髒讀

(2)提交讀,只能讀取已經提交事務的數據,也稱爲未重複讀

(3)可重複讀,這個事務在讀取某一行的時候,另外一個事務又對這行數據進行修改並提交,那麼以前的事務就會看到新的行,也稱爲幻讀

(4)串行化讀,強制事務順序,使之不可能衝突,從而解決幻讀問題


四、mysql數據庫cpu飆升到500%的話他怎麼處理?

答:(1)多實例的服務器,先top查看是那一個進程,哪一個端口占用CPU多;

(2)show processlist查看是否因爲大量併發,鎖引發的負載問題;

(3)不然,查看慢查詢,找出執行時間長的sql;explain分析sql是否走索引,sql優化;

(4)再查看是否緩存失效引發,須要查看buffer命中率


五、bash for循環打印下面這句話中字母數不大於6的單詞(崑崙萬維面試題)

I am oldboy teacher welcome to oldboy training class.
#!/bin/bash
for word in I am oldboy teacher welcome to oldboy training class
  do
     if [ `echo ${word}|wc -L` -le 6 ]   ## -L, --max-line-length顯示最長行的長度
     then
        echo $word
     fi
  done

  

六、正則表達式匹配具備IP地址的行

答:grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" test.txt  ##事實上,這不是正確答案,還須要細分255等,可是這個好記,通常適用,還必須是擴展的


七、[1,15,4,6,29,22] 把他進行排序,並去掉中括號和逗號 (這要是筆試題遇到,跪了)

答:(1)sed -i 's/,/ /g ;s/\[//g ;s/\]//g ' test.txt  ##把逗號變爲空格,並刪除中括號,-i改變原文件,可是-i不會輸出該文件

(2)sed -i 's/ /\n/g' test.txt |sort -nr ##把空格變爲換行,並進行逆向排序

(3)sed -i 's/\n/ /g' test.txt  ##已經排完序,可是須要改成橫行輸出


八、設置網卡MTU爲1K的命令是

答:臨時生效:ifconfig eth0 mtu 1024 

永久生效:echo "MTU=1024" >>/etc/sysconfig/network-scripts/ifcfg-eth0


9:將當期Linux終端的系統環境變量改成GB2312; 

答:export LANG=zh_CN.GB2312


十、創建一個用戶組(group)group1,該組只能對目錄/opt/dir1進行讀取; 

答:groupadd group1;setfacl -m g:group1:r-- /opt/dir1


十一、若是天天3:00時,須要將進程myproc自動強行終止掉(使用kill中止),以後並從新啓動(執行 myproc命令便可),則應該執行的腳本命令分別是:

0 3 * * * /bin/pkill -18 myproc 


十二、用awk實現以下結果?(若是不知道paste命令,很難作出來)

cat 1.txt

1 2 3

1 2 3

cat 2.txt

a b c 

a b c

實現:2 a c

 2 a c 

答:paste 1.txt 2.txt |awk '{print $2,$4,$6}'


1三、MySQL的鎖類型,什麼時候會觸發鎖?

答:頁級:引擎 BDB。

表級:引擎 MyISAM , 理解爲鎖住整個表,能夠同時讀,寫不行

行級:引擎 INNODB , 單獨的一行記錄加鎖

用索引字段作爲條件進行修改時, 是否表鎖的取決於這個索引字段可否肯定記錄惟一,當索引值對應記錄不惟一,會進行鎖表,相反則行鎖。

讀鎖應該是第一個sql就釋放,寫鎖在整個事務結束時釋放


1四、session和cookie的區別

答:(1)cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。

(2)cookie不是很安全,別人能夠分析存放在本地的COOKIE並進行COOKIE欺騙,考慮到安全應當使用session,由於它不會任意讀取客戶存儲的信息。

(3)單個cookie保存的數據不能超過4K,不少瀏覽器都限制一個站點最多保存20個cookie。


1五、MySQL的索引的實現方式?索引類型?

答:方式:B+樹、散列索引、位圖索引   類型:普通索引、主鍵索引、惟一索引、彙集索引

參考文檔:http://www.cnblogs.com/barrywxx/p/4351901.html


1六、session原理和共享方式。

答:(1)定義:session是由服務器維持的一個存儲空間,用戶鏈接服務器時,會由服務端生成一個惟一的session_ID,該session_ID被稱爲標識符來存取服務端的session存儲空間。

(2)原理:sessionID這一數據是保存在cookie中的,用戶提交頁面時,會將這一sessionID提交到服務端,用於存取session數據。可是不會徹底依賴於cookie,能夠經過服務端自動URL重寫方式來傳遞sessionID的,而且整個過程對程序員透明。

(3)方式:基於cookie的共享,基於數據庫的共享,基於memcached的共享

參考文檔:http://blog.csdn.net/zhuanshenweiliu/article/details/38844741


1七、取出/etc/passwd中shell出現的次數?(awk數組解決)

答:awk -F ":" '{arr[$NF]++}END{for (shell in arr){print shell,arr[shell]}}' /etc/passwd


1八、合併文件問題(這題比上面更難一些,主要是排序問題和大小變換問題)

a.txt

100 $5,000 

200 $500 

300 $3,000 

400 $1,250


b.txt

100 Json Smith 

200 John Doe 

300 Sanjay Gupta 

400 Ashok Sharma

要求結果

400 ashok sharma $1,250

200 john doe $500

100 json smith $5,000

300 sanjay gupta $3,000


答:paste b a|awk '{print $1,$2,$3,$5}'|tr [:upper:] [:lower:]|sort -k 2 >c.txt

##tr命令將大寫轉爲小寫,sort -k根據關鍵字排序,2表示第二列


1九、打印本機交換分區大小,輸出以下:(這題是很難的,若是不是上機,很難作出來)

Swap: 2016M

答:free -m|grep -i swap|awk '{print $1,$2"M"}'或者下面第二種方法

top -n 1|grep Swap|sed 's/k.*//g'|awk '{print $1,$2/1024"M"}'

##top 命令顯示系統資源佔用狀況,-n 1表示只調用1次,Swap: 16779884k total 將k以及後面的字符串替換爲空,這樣這剩下Swap: 16779884,除以1024便可



20、測試輸出本機建立20000個目錄所用的時間?(我日,這題要是沒見過覺得是世紀難題!)

time for i in `seq 1 20000`; do mkdir "$i" &>/dev/null; done

輸出;

real0m0.065s

user0m0.015s

sys0m0.024s

##值得注意的是do後面沒有分號,另外/dev/null只是把屏幕產生的結果放在黑洞中,可是依然會產生這些目錄


2一、求root用戶登錄了多少時間。

答:用如今的時間減去登錄時間,一步作不了用腳本

#!/bin/bash
login=`who am i | awk '{print $4}'`
logintime=`date -d $login +%s`   ##%s是取到秒的意思,由於上面只有小時:分鐘
now=`date +%s`  ##-d顯示指定字符串所描述的時間,而非當前時間
let last=now-logintime   ##用let命令進行計算操做時不須要用$符號
let lasttime=last/3600
echo "logged on for $lasttime hours"


2二、Nagios監控linux服務器的通訊過程?

答:當Nagios須要監控某個遠程linux主機的服務或者資源狀況時:

1)nagios會運行check_nrpe插件,咱們要在nagios配置文件中告訴它要檢查什麼(/usr/local/nagios/etc/objects/commands.cfg)

2)check_nrpe插件會經過SSL鏈接到遠程的NRPE daemon

3)NRPE daemon會運行相應的nagios插件來執行檢查本地資源或服務

4)NRPE daemon將檢查的結果返回給check_nrpe插件,插件將其遞交給nagios程序作處理

5)CGI圖形顯示展示給用戶

注意:NRPE daemon須要nagios插件安裝在遠程被監控linux主機上,不然,daemon不能作任何的監控


2三、有商品表, 有主鍵goods_id, 欄目列cat_id, 價格price,在價格列上已經加了索引,但按價格查詢仍是很慢,多是什麼緣由。

答:在實際場景中,一個電商網站的商品分類不少,直接在全部商品中,按價格查商品,是極少的,通常客戶都來到分類下,而後再查.

改正: 去掉單獨的Price列的索引, 加 (cat_id,price)複合索引再查詢


2四、解釋varchar(30)中的30、int(20)中20的涵義?爲何這麼設計?int(20)存儲的數字的上限和下限是多少?

答:20表示最大顯示寬度爲20,但仍佔4字節存儲,存儲範圍不變;varchar(30)中30的涵義最大存儲30個字符,它是可變長度。

設計緣由:實際業務有這樣的需求。4個字節是32位,多是第一位爲0,則正數是2^32,可能第一位是1,則負數是-(2^32-1)


2五、MySQL主從複製binlog 日誌格式

答:row:只須要記錄哪一條記錄被修改了,修改爲什麼樣了

statment:每一條會修改數據的SQL語句都會記錄到 master 的bin-log中

mixed:就是前兩種模式的結合


2六、如何將本地80端口的請求轉發到9000端口,當前主機IP爲192.168.2.1(這題常常搞混)

答:iptables -A PREROUTING  -d 192.168.2.1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0.18:9000


2七、處理如下oldboy.log,將域名取出並進行計數排序

http://www.etiantian.org/index.html

http://www.etiantian.org/1.html

http://post.etiantian.org/index.html

http://mp3.etiantian.org/index.html

http://www.etiantian.org/3.html

http://post.etiantian.org/2.html

答:awk -F "/" '{print $3}' oldboy.log |sort|uniq -c


2八、如何提升MySql的安全性?

答:(1)若是MYSQL客戶端和服務器端的鏈接須要跨越並經過不可信任的網絡,那麼須要使用ssh隧道來加密該鏈接的通訊。

(2)使用set password語句來修改用戶的密碼,先「mysql -u root」登錄數據庫系統,而後「mysql> update mysql.user set password=password(’newpwd’)」,最後執行「flush privileges」就能夠了。

Mysql須要提防的***有,防偷聽、篡改、回放、拒絕服務等,不涉及可用性和容錯方面。對全部的鏈接、查詢、其餘操做使用基於acl即訪問控制列表的安全措施來完成。也有一些對ssl鏈接的支持。

(3)設置除了root用戶外的其餘任何用戶不容許訪問mysql主數據庫中的user表;加密後存放在user表中的加密後的用戶密碼一旦泄露,其餘人能夠隨意用該用戶名/密碼相應的數據庫;

(4)使用grant和revoke語句來進行用戶訪問控制的工做;

採用防火牆能夠去掉50%的外部危險,讓數據庫系統躲在防火牆後面工做,或放置在dmz區域中;

(5)爲了防止被惡意傳入非法參數,例如where id=234,別人卻輸入where id=234 or 1=1致使所有顯示,因此在web的表單中使用」或」"來用字符串,在動態url中加入%22表明雙引號、%23表明井號、%27表明單引號;傳遞未檢查過的值給mysql數據庫是很是危險的;

(6)確信在mysql目錄中只有啓動數據庫服務的用戶才能夠對文件有讀和寫的權限;


2九、線程通訊、以及線程同步機制?

答:通訊:跟進程同樣,消息隊列、共享內存、套接字、信號、信號量、管道通訊

同步:(1)、臨界區:經過對多線程的串行化來訪問公共資源或一段代碼,速度快,適合控制數據訪問。在任意時刻只容許一個線程對共享資源進行訪問,若是有多個線程試圖訪問公共資源,那麼在有一個線程進入後,其餘試圖訪問公共資源的線程將被掛起,並一直等到進入臨界區的線程離開,臨界區在被釋放後,其餘線程才能夠搶佔。 

(2)、互斥量:採用互斥對象機制。 只有擁有互斥對象的線程纔有訪問公共資源的權限,由於互斥對象只有一個,因此能保證公共資源不會同時被多個線程訪問。互斥不只能實現同一應用程序的公共資源安全共享,還能實現不一樣應用程序的公共資源安全共享 

(3)、信號量:它容許多個線程在同一時刻訪問同一資源,可是須要限制在同一時刻訪問此資源的最大線程數目 

(4)、事 件: 經過通知操做的方式來保持線程的同步,還能夠方便實現對多個線程的優先級比較的操做


30、mysql優化?

答:(1)表的設計合理(符合3NF)(2)添加適當索引(3)分表技術(4)讀寫【update/insert/delete】分離(5)存儲過程【模塊化編程】(6)mysql配置文件優化【配置最大併發數、緩存大小】(7)硬件升級(固態硬盤或RAID陣列)(8)定時清除不須要的數據,定時碎片整理

相關文章
相關標籤/搜索