Linux運維學習中shell有哪些重要知識點?Linux面試題分享
第1章 Shell1 選擇1.1 改變bash的提示符實際上就是改變變數()$HOME $PWD $PS1 $PS2
1.2 在shell指令碼中,用來讀取檔案內各個域的內容並將其賦值給shell變數的命令是__fold join tr read
1.3 從後臺啟動程序,應在命令的結尾加上符號()A:& B:@ C:# D:$
1.4 不是shell具有的功能和特點是()A:管道 B:輸入輸出重定向 C:執行後臺程序 D:處理程式命令
1.5 退出互動模式的shell,應鍵入()A: B:^q C:exit D:quit
1.6 shell不僅僅是使用者命令直譯器,同時一種強大的程式語言,linux預設的shell是bash ruby PHP perl
1.7 以下函式中,和其他函式不屬於一類的是Read pread write pwrite fseek lseek
1.8 下列變數名中有效的shell變數名是:__-2-time _2$3 trust_no_1 2004file
1.9 下列對shell變數FRUTT操作,正確的是__為變數賦值:$FRUTT=apple 顯示變數的值:fruit=apple
顯示變數的值:echo $FRUTT 判斷變數是否有值:[ -f --$FRUTT || ]
1.10在shell程式設計中關於$2的描述正確的是程式後攜帶了兩個位數引數 宏替換
程式後面攜帶的第二個位置引數 攜帶位置引數的個數
1.11在shell環境下想把‘gyyx’值賦給變數company,下面哪個是正確的:company = gyyx $company=gyyx company='gyyx' company=gyyx
1.12下面sed刪除行,下面哪個指令碼是錯誤的是sed -e '/man/d' filename sed -e '1,3d' filename sed -e '1,/man/d' filename sed -e '/man/3d' filename
1.14下列程式碼樣例中,哪個存在錯誤:for filename in $(ls) do cat $filename done
for((i=0;i<10;i++)) do echo $i done
x=1 sum=0 while [ $x -le 10 ] do let sum=sum+$x let x=x+1 done echo\ $sum
for $i in 1 2 3 4 5 do echo $i done
1.15在shell指令碼中,用來讀取檔案內各個域的內容並將其賦值給shell變數的命令是:Fold join tr read
1.16shell中如何跳出當前迴圈繼續之後的迴圈break continue exit kill
1.17shell指令碼中的註釋符# // /**/ " "
1.18採用bash執行shell指令碼時加上哪個引數可以跟蹤執行指令碼過程-x -u -f -p
1.19以下命令執行後,結果為()Var1=abcdedf
Var2=abcded
Echo “$var1” |grep -q “$var2” && echo “yes” ||echo “no”
無結果 語法錯誤 yes no
1.20在shell比較運算子中,數值測試“等於則為真”的是()-ne -ge -eq -le
2 填空2.1 在shell程式設計中,如果要訪問變數值,可以變數前加一個——符號2.2 請說出以下符號在bash shell中的意義$0 $n $# $? $* $$ ${#aa}
2.3 編寫shell程式之前必須賦予該指令碼_2.4 Linux系統shell指令碼第一行需寫__代表什麼意義_2.5 編寫shell指令碼時註釋符是_2.6 shell命令“sed -i s/\r/ /g test.txt”實現的是_3 簡答3.1 在shell中,$0,$n,$#,$*,$@,$?分別是什麼含義?3.2 統計/var/log下檔案的個數。3.3 如何將F1檔案的執行結果輸出到F2.txt裡?3.4 寫一個指令碼實現判斷192.168.1.0/24 網路裡,當前線上的ip有哪些,能拼通則認為在哪3.5 根據以下資訊:IP_Address MAC_Address Interface Static
10.66.10.250 80:71:7A:33:CA:A7 br on
10.66.10.249 5C:50:15:7F:3B:F5 br on
將以上檔名稱test.txt檔案中IP_Address,MAC_Address, Interface三項下的內容取出來,值以“:”分割,並呈格式顯示出來。注:
10.66.10.250:80:71:7A:33:CA:A7:br
10.66.10.249:5C:50:15:7F:3B:F5:br
3.6 在shell中變數的賦值有四種方法,其中採用name=jfedu.net的方法稱:直接複製 使用read命令 使用命令列傳參 使用命令輸出
3.7 編寫一個指令碼,5分鐘檢查一次日誌,發現有暴力SSH破解現象的,提取此類IP地址,並去重,並按降序排序。要求:同一個IP暴力破解超過10次,自動遮蔽IP地址,指定辦公室IP地址(192.168.100.100)為可信任IP地址,不受遮蔽規則限制,以下為日誌格式:
日誌樣式:
May 4 03:43:07 tz-monitor sshd{14003}: Failed password for root from 124.232.135.84 port 25251 ssh2
Myy 4 03:43:07 tz-monitor sshd{14082}: invalid user postgres from 124.232.135.84
3.8 檢查OSPF route-ID配置,配置如下,請用shell編寫程式碼,條件如下:a.檢查ospf的route-id值,route-id值必須與interface LoopBack0的IP地址值相同,如果兩個值不相等打印出ospf的route-id的值,並且ospf的route-id值必須以139開頭,如139.xx.xx.xx,否則也打印出route-id的值ofpf 100
route-id 139.11.0.1
area 0.0.0.0
network 139.11.0.1 0.0.0.0
network 140.11.0.0 0.0.0.3
network 140.11.0.8 0.0.0.3
network 140.11.0.16 0.0.0.3
network 140.11.0.24 0.0.0.3
network 140.11.0.32 0.0.0.3
interface LoopBack0
ip address 139.11.0.1 255.255.255.255
3.9 檢查IP地址合規,請用shell編寫程式碼,列出不以199或200開頭的IP地址,如199.x.x.x 或200.x.x.xInterface Physical Protocol IP Adderss
Eth1/0/1 up up 199.11.250.1
Eth1/0/2 up up 200.11.250.5
Loop0 up up(s) 199.11.250.1
Vlan1 *down down unassigned
Vlan500 down down 139.100.1.157
Vlan900 up up 140.11.250.41
3.11在單臺伺服器Linux作業系統環境下,寫一行命令,將所有該機器的所有以“.log.bak“為字尾的檔案,打包壓縮並上傳到ftp上,FTP地址為123.234.25.130的/home/bak資料夾3.12Linux指令碼:現在要刪除本機中若干檔案,/root/file.list中記錄了這些檔案的絕對路徑,請用指令碼實現。/root/file.list內容範例:/tmp/1.file3.13說出shell的種類,已經常用的shell3.14下面程式碼會輸出什麼:def f(x,1=[]);
for i in range(x);
1.append(i*i)
print 1
f(2)
f(3,[3,2,1])
f(3)
3.16建立一個函式,能接受兩個引數;(1) 第一個引數為URL,即可下載的檔案;第二個引數為目錄,即下載後儲存位置;
(2) 如果使用者給的目錄不存在,則提示使用者是否建立;如果建立就繼續執行,否則函式返回一個51的錯誤值給呼叫指令碼
(3) 如果給的目錄存在,則下載檔案;下載命令執行結束後測試檔案下載成功,如果成功,則返回0給呼叫指令碼,否則,返回52給呼叫指令碼;
3.17有一個長度為n序列,需要移除掉裡面的重複元素,但是對於每種元素保留最後出現的那個。輸入描述:輸入包括兩行第一行為序列長度n(1≤ n≤ 50)
第二行為n個數scqucencel,以空格分隔
輸出描述
輸出消除重複元素之後的序列,以空格分隔,行末無空格
輸入例子
100 100 100 99 99 99 100 100 100
輸出例子
99 100
3.18使用一個佇列模擬一個棧,在空白處實現下面類中的方法即可。class Queue(objec ):
defenqueue(self,item):
"''""入隊""""
defdequcue(self):
""""出隊"""
測試
q = Queue()
9 enqucue (1)
輸出q [1]
q.enqueue(4)
輸出q [1,4]
q.dequeue()
輸出14
3.20一個文字檔案info.txt每行都是以逗號分隔,其中第二列都是數字,請對該檔案按照第二列從小到大排列。aa,101
bb,302
cc,222
dd,44
b.以詳細格式顯示test使用者的家目錄內容,包含隱藏檔案
c.進入根目錄
d.顯示/etc/passwd文字檔案的內容
e.顯示/etc/passwd檔案的後十行內容
3.23用netstat統計系統當前tcp連線的各種狀態的連線數3.24寫一個指令碼,實現判斷10.10.10.0/24網路裡,當前線上的ip有哪些。注:能ping通則認為線上。3.25怎麼把指令碼新增到系統服務裡,即使用service來呼叫。3.26統計指定檔案中每個單詞出現的次數;如cat /etc/fstab\# /etc/fstabUUID=94e4e384-Oace-437f-bc96-057dd64f42ee / ext4 defaults.barrier=0 1 1tmpfs /dev/shm tmpfs defults 0 0
3.27練習:寫一個指令碼列出如下選單給使用者
disk) show disks info;
mem) show memory info;
cpu) show cpu info;
*) quit;
提示使用者給出自己的選擇,而後顯示對應其選擇的相應系統資訊
3.28請寫出一個shell指令碼希望把結構表顯示出來3.29求出a.log中的waring 但是不包括waring的行3.30說明以下shell 程式碼,所完成的功能n=1while [ $n -lt 1000 ]; do cd /root/perl_test/testdir touch sn.txt n=expr $n + 1done
3.31用最熟悉的指令碼語言實現如下功能
如果在/home/pushmail目錄下不存在leadtone目錄,則建立該目錄,並將/var/sync/bin目錄下的所有檔案複製到leadtone目承下,但是不能夠複製檔案長
度大於1M的檔案。
3.32根據要求寫出linux命令a.顯示當前目錄的內容
b.以詳細格式顯示test使用者的家目錄內容,包含隱藏檔案
c.進入根目錄
d.顯示/etc/passwd文字檔案的內容
e.顯示/etc/passwd檔案的後十行內容
3.33查詢含有特定字元的檔案3.34Centos作業系統歷史命令記錄中,執行次數最多的5條3.35寫一個指令碼,判斷一個指定的指令碼是否是語法錯誤,如果有錯誤,則提醒使用者鍵入Q或者q無視錯誤並退出其它任何鍵可以透過vim開啟這個指定的指令碼3.36用Shell程式設計,判斷一檔案是不是字元裝置檔案,如果是將其複製到 /dev 目錄下3.37寫一個指令碼,實現批次新增20個使用者,使用者名稱為user01-20,密碼user後面跟5個隨機字元3.38統計nginx訪問日誌,找出訪問次數前10的IP3.39找出在檔案a中但不在檔案b中的內容,用命令後編寫指令碼實現3.40對檔案test中,1>第一列為aaa的行求和;2>對偶數行求和;3>求檔案test中的最大值3.41Case語句的語法?while 語句的語法?continue命令的作用?3.42請寫出下列shell指令碼:使用for迴圈在/opt目錄下透過隨機小寫10個字母加固定字串test批次建立10個html檔案,建立完成後將test全部改為test_done(for迴圈實現),並且html大寫3.44如何在每天23:59分時,將apache的accesslog中,訪問次數最多的前10個ip以及訪問量最多的10個檔案儲存到/var/Top.log中3.45寫一個指令碼,判斷一個指定的指令碼是否是語法錯誤。如果有錯誤,則提醒使用者鍵入Q或q無視錯誤並退出其它任何鍵可以指定的指令碼3.46shell指令碼程式設計:求100以內的質數3.47如果有10個資料夾,每個資料夾都有1,000,000個url,每個url對應一個訪問量,請問如何最快找出前1,000,000個訪問量最高的url3.48建立一個shell指令碼,它從使用者那裡接收10個數,並顯示已輸入的最大的數3.49設計一個shell程式,在每月第一天備份並壓縮/etc目錄的所有內容,存放在/root/bak目錄裡,且檔名為如下形式yymmdd_etc,yy為年,mm為月,dd為日。shell陳旭fileback存放在/usr/bin目錄下3.50找出系統中父程序號為105的所有程序,並將其結束3.51如何從history記錄中分析最近500次內執行最多的命令?如何查詢當前目錄90天以前的檔案並將其刪除?3.52寫出命令統計當前連線到本機6379埠連線數最高的ip地址和連線個數,檢視自己的ip地址,看這個ip地址所在網段都有哪些機器,任意檢視此網段的另外一個ip地址有哪些埠開放了。簡述tcp的幾種連線狀態,高併發伺服器一般會遇到什麼問題?3.53下面給出了一個shell程式,試對其行後有#(號碼)形式的語句進行解釋,並說明程式完成的功能#!/bin/bashDICNAME=`ls /root |grep bak` #(1)if [ -z "$DICNAME" ] then #(2)mkdir /root/bak cd /root/bak #(3)fiYY=`date +%y` MM=`date +%m` DD=`date +%d` #(4)BACKETC=$YY$MM$DD_etc.tar.gz #(5)tar zcvf $BACKETC /etc #(6)echo "fileback fiaished!"
3.54試編寫一個Shell程式,該程式能接收使用者從鍵盤輸入的100個整數,然後求出其總和、最大值及最小值3.55請用自己熟悉的指令碼語言,快速替換notice服務下config.properties配置檔案中所有變數值為jdbc.username,jdbc.password的值為blue和pass1234 說明:配置檔案的目錄/opt/blue/notice/conf/config.properties
config.properties檔案格式如下:
zookeeper.server=127.0.0.1:2181
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://lx-db:3306/gudong
jdbc.username=lanxin
jdbc.password=OnLIDX5
3.56會哪些程式語言?寫過哪種shell指令碼?請現場編寫一組3.57判斷數字大於500則執行big.sh 小於等於500則退出指令碼,並輸出報錯資訊3.59檔案ip.txt中包含很多IP地址(以及其它非IP資料),請打印出滿足A.B.C.D 其中A=172 C=130 D<=100 條件的所有IP(請用AWK實現)3.60請編寫一個可遞迴建立3級hash目錄的shell指令碼,hash目錄名分別為 a b c d e f 0 1 2 3 4 5 6 7 8 9 (請用bash實現)3.61統計web伺服器上網路連線的各個狀態(ESTABLISHED/SYN_SENT/SYN_RECV等)的個數並按倒序排列3.62指令碼測試test.txt檔案1 2 3
4 5 6
7 8 9
打印出每一列的累加值
3.63請在linux下寫個bash shell 程式,目的如下:查詢/opt/mp3目錄下所有mp3字尾的檔案,然後計算下每個md5值,檔名跟md5值寫入新的檔案mp3-md5.txt檔案3.64請寫出完成下面工作的Linux shell命令或指令碼(1)檢視伺服器的硬碟佔用量
(2)將/usr/test目錄下大於100K的檔案轉移到/tmp目錄下
(3)殺死所有啟動的servicefx_asr程序
(4)假設某nginx server的日誌access.log如下:
198.24.230.194 - - [10/Oct/2015:10:23:50 +0800] “POST /asr/recognize HTTP/1.1 200 177 “-” ”-”
請查詢在2015/10/10,10點這一個小時內,訪問“/CheckAuth”介面的IP一共有幾個,每個各訪問了多少次
3.65執行$ time sleep 2 輸出如下real 0m2.003s
user 0m0.004s
sys 0m0.000s
請說明real、user、sys三者具體代表的意思和區別
3.66編寫指令碼完成以下工作某目錄下有兩個檔案a.txt和b.txt,檔案格式為(ip username),例如:
a.txt b.txt
127.0.0.1zhangsan 127.0.0..4lixiaoliu
127.0.0.1wangxiaoer 127.0.0.01lisi
127.0.0.2lisi
127.0.0.3wangwu
每個檔案至少有100萬行,請使用Linux命令完成下列工作
1)兩個檔案各自的IP數,以及總IP數
2)出現再b.txt而沒有出現再a.txt的IP
3)每個username出現的次數,以及每個username對應的IP數
3.67現在一個REST API服務(名稱為ab-service),程序啟動後佔用8038埠進行網路通訊。現需要一個Bash Shell指令碼(start.sh),在一臺Linux機器上啟動這個服務,並透過8038埠對所有內外網IP服務。請寫出完整的可執行指令碼,並儘量考慮可能出現的情況並處理