常見的高頻Linux面試題目如下:
(1)最近登入的5個帳号
當執行
last -n
5指令時,輸出的内容如下:

則需要用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