天天看點

Linux面試題

常見的高頻Linux面試題目如下:

(1)最近登入的5個帳号

當執行

last -n 

5指令時,輸出的内容如下:

Linux面試題

則需要用awk輸出名稱即可,具體如下:

last -n 5 | awk  '{print $1}'
      

-n表示number,有多少行需要顯示。讀入有'\n'換行符分割的一條記錄,然後将記錄按指定的域分隔符劃分域(預設為空白符),$0則表示所有域,$1表示第一個域,$n表示第n個域。預設域分隔符是"空白鍵" 或 "[tab]鍵",是以$1表示登入使用者,$3表示登入使用者ip,以此類推。  

(2)用awk統計文本行數

awk '{count++} END{print "user count is ", count}' /etc/passwd
 
awk 'END{print "user count is " NR}' /etc/passwd      

NR表示awk開始執行程式後所讀取的資料行數

或者還可以使用wc指令,如下:

wc -l /etc/passwd         

其中的指令參數-l還可以是--lines,表示顯示行數。

(3)Test内容如下:

zhangsan     80
lisi         81.5
wangwu       93
zhangsan     85
lisi         88
wangwu       97
zhangsan     90
lisi         92
wangwu       88
      

要求輸出格式:  

name#######average#######total 
zhangsan   xxx      xxx 
lisi       xxx      xxx 
wangwu     xxx      xxx  
      

其中average為平均成績,而total為總成績  

awk '{a[$1]+=$2;b[$1]++};END{for(i in a)print i,a[i]/b[i],a[i]}' test.txt  
      

居然能用$1來當資料索引。END之前的逗号有沒有都可以。  

(4)這個檔案夾裡面每一層級都有個.svn隐藏檔案夾,需要删除,使用如下指令:  

$find . -type d -name "*.svn" | xargs rm -rf
      

-type指定為d,而d表示為目錄。-f 即使原檔案屬性設為唯讀,亦直接删除,無需逐一确認。-r 将目錄及以下之檔案亦逐一删除。

(5)統計以p開始的行的個數:  

find -name test.sh -type f -print|xargs awk '/^p/{count++}END{print count}'
      

-type指定為f,表示普通檔案。-print表示将結果輸出到标準輸出。

使用了xargs,将找到的檔案名做為參數傳遞給awk指令,如果輸出的是一行行内容,就沒有必要加xargs了,如下: 

$cat a.txt |awk  '{print $2}'
      

xargs 與exec作用相同 ,起承接作用。差別在于 |xargs 主要用于承接删除操作 ,而 -exec 都可用 如複制、移動、重命名等,如:

find /bin -name bash -exec ls -l '{}' \;
      

對比對的檔案執行該參數所給出的shell指令。 形式為command {} \;,注意{}與\;之間有空格 

(6)提取檔案中含有"apa"的單詞并輸出到一個檔案中

find . -name "*.txt"|xargs grep -oE "[a-zA-Z]*apa[a-zA-Z]*"|awk -F: '{print $2}'
      

sed 指令可以很好的進行行比對,但從某一行中精确比對某些内容,則使用 grep 指令并輔以 -o 和 -E 選項可達到此目的。其中 -o 表示“only-matching”,即“僅比對”之意。光用它不夠,配合 -E 選項使用擴充正規表達式則威力巨大。

(7)端口被占用 

在 Web 開發中,經常會遇到「端口被占用」的場景

正常解決方案是:

  • 使用 lsof -i 指令查詢占用端口的程序 PID
  • 利用 kill -9 PID 幹掉目标程序

雖然隻有 2 步,我也覺得很繁瑣,即:既要記住指令,又要輸入兩次 

8、linux檢視tcp指令 

使用netstat指令,或者用神器lsof指令 

9、使用Linux指令找出日志檔案中通路量最大的top10 IP位址 

檢驗你是否熟悉Linux指令的常見問題:使用 Linux指令找出日志檔案中通路量最大的top10 IP位址 

日志檔案test.log格式如下: 

時間  IP   ****
      

linux 指令如下: 

cat  test.log|awk -F " " '{print $2}'|sort|uniq -c|sort -nrk 1 -t' '|awk -F" " '{print $2}'|head -10
      

問題剖析: 

1.cat  *.log将文本内容列印到螢幕 

2.使用awk指令可以按照分割符将一行分割為多個列,第一列用$1表示,第二列用$2表示,依次類推 

awk -F " " '{print $2} // 表示用空格作為分隔符進行分割,列印出第2列
      

3.sort 進行排序,預設是按照ascii碼進行排序的 

4.uniq -c 統計相鄰的行的重複數量,結果是類似 3  127.13.13.13,前面的數字代碼重複的行數 

sort|uniq -c   // 統計重複的行數
      

5.sort -n是按照數值進行由小到大進行排序, -r是表示逆序,-t是指定分割符,-k是執行按照第幾列進行排序 

sort -nr -k 1 -t ' '
      

6.使用awk指令可以按照分割符将一行分割為多個列,第一列用$1表示,第二列用$2表示,依次類推 

awk -F " " '{print $2}'    // 表示用空格作為分隔符進行分割,列印出第2列
      

7.head -n表示取前n個 

head -10