一、序言
前幾天一個做開發的朋友發給我一個鏈接,http://oldboy.blog.51cto.com/2561410/1632876?from=singlemessage&isappinstalled=0
是老男孩出的企業面試題培訓叫做:合格linux運維人員必會的30道shell編程面試題及講解,於是乎,,我打算每個都自己寫一遍,,
PS:我是不是閒的蛋疼!!!
二、開擼
企業面試題1:(生產實戰案例):監控MySQL主從同步是否異常,如果異常,則發送短信或者郵件給管理員。提示:如果沒主從同步環境,可以用下面文本放到文件裏讀取來模擬:
階段1:開發一個守護進程腳本每30秒實現檢測一次。
階段2:如果同步出現如下錯誤號(1158,1159,1008,1007,1062),則跳過錯誤。
階段3:請使用數組技術實現上述腳本(獲取主從判斷及錯誤號部分)
##這個還沒寫,,因爲還要搞mysql主從複製的環境,,寫把下面簡單的擼了先。。
企業面試題2:
使用for循環在/oldboy目錄下通過隨機小寫10個字母加固定字符串oldboy批量創建10個html文件,名稱例如爲:
-
[root@oldboy oldboy]
-
[root@oldboy oldboy]
-
coaolvajcq_oldboy.html qnvuxvicni_oldboy.html vioesjmcbu_oldboy.html
-
gmkhrancxh_oldboy.html tmdjormaxr_oldboy.html wzewnojiwe_oldboy.html
-
jdxexendbe_oldboy.html ugaywanjlm_oldboy.html xzzruhdzda_oldboy.html
-
qcawgsrtkp_oldboy.html vfrphtqjpc_oldboy.html
############我的腳本2############################################
-
[root@cjy linux-20]
-
-
-
WORK_DIR=/oldboy/
-
-
create(){
-
-
i=1
-
while (($i<11))
-
do
-
cd $WORK_DIR && touch `tr -dc "a-z"</dev/urandom |head -c 10`_oldboy.html
-
i=$(($i+1))
-
done
-
}
-
-
check(){
-
if [ -d $WORK_DIR ];
-
then
-
create
-
else
-
mkdir $WORK_DIR
-
create
-
fi
-
}
-
-
check
-
[root@cjy linux-20]
-
-
[root@cjy linux-20]
-
daijyyadst_oldboy.html mjmcfvvjcq_oldboy.html qmgbrihbco_oldboy.html yrxovjbwlv_oldboy.html
-
djfhdphvqf_oldboy.html mohijpfehs_oldboy.html xdtspqouln_oldboy.html
-
gjczumsnfy_oldboy.html nfwzssqtus_oldboy.html yhqruiiota_oldboy.htm
企業面試題3:請用至少兩種方法實現!
將以上文件名中的oldboy全部改成oldgirl(用for循環實現),並且html改成大寫。
############我的腳本3_1############################################
-
[root@cjy linux-20]
-
-
-
change_name(){
-
DIR=/oldboy
-
FILE=`ls /oldboy`
-
GIRL=_oldgirl.HTML
-
-
for i in $FILE
-
do
-
c=`echo $i | cut -c 1-10`
-
mv $DIR/$c* $DIR/$c$GIRL
-
done
-
}
-
-
change_name
############我的腳本3_2############################################
-
[root@cjy linux-20]
-
-
-
change_name(){
-
DIR=/oldboy
-
FILE=`ls /oldboy`
-
GIRL=_oldgirl.HTML
-
-
for i in $FILE
-
do
-
c=`echo $i | awk -F '_' '{print $1}'`
-
mv $DIR/$c* $DIR/$c$GIRL
-
done
-
}
-
-
change_name
-
[root@cjy linux-20]
-
[root@cjy linux-20]
-
daijyyadst_oldgirl.HTML mjmcfvvjcq_oldgirl.HTML qmgbrihbco_oldgirl.HTML yrxovjbwlv_oldgirl.HTML
-
djfhdphvqf_oldgirl.HTML mohijpfehs_oldgirl.HTML xdtspqouln_oldgirl.HTML
-
gjczumsnfy_oldgirl.HTML nfwzssqtus_oldgirl.HTML yhqruiiota_oldgirl.HTML
企業面試題4:
批量創建10個系統帳號oldboy01-oldboy10並設置密碼(密碼爲隨機8位字符串)。
############我的腳本4############################################
-
[root@cjy linux-20]
-
-
-
USER=oldboy
-
create_user(){
-
-
for i in {01..10}
-
do
-
RPASSWD=$(tr -dc [:alpha:] < /dev/urandom |head -c 8)
-
useradd $USER$i
-
echo $RPASSWD|passwd $USER$i --stdin
-
echo $USER$i----$RPASSWD >> /oldboy/userpasswd.txt
-
done
-
}
-
-
del_user(){
-
-
for j in {01..10}
-
do
-
userdel $USER$j
-
rm -rf /home/$USER$j
-
done
-
}
-
-
case $1 in
-
create)
-
create_user
-
;;
-
del)
-
del_user
-
;;
-
*)
-
echo "Usage:Please use $0 create or $0 del."
-
echo "####################################"
-
echo "create: create user $USER 01-10 and give it random passwd."
-
echo "del: delete $USER 01-10 and /home/$USER 01-10 directory. "
-
;;
-
esac
-
[root@cjy linux-20]
-
Usage:Please use ./4.sh create or ./4.sh del.
-
-
create: create user oldboy 01-10 and give it random passwd.
-
del: delete oldboy 01-10 and /home/oldboy 01-10 directory.
-
-
[root@cjy linux-20]
-
正在創建信箱文件: 文件已存在
-
更改用戶 oldboy01 的密碼 。
-
passwd: 所有的身份驗證令牌已經成功更新。
-
正在創建信箱文件: 文件已存在
-
更改用戶 oldboy02 的密碼 。
-
passwd: 所有的身份驗證令牌已經成功更新。
-
正在創建信箱文件: 文件已存在
-
更改用戶 oldboy03 的密碼 。
-
passwd: 所有的身份驗證令牌已經成功更新。
-
正在創建信箱文件: 文件已存在
-
更改用戶 oldboy04 的密碼 。
-
passwd: 所有的身份驗證令牌已經成功更新。
-
正在創建信箱文件: 文件已存在
-
更改用戶 oldboy05 的密碼 。
-
passwd: 所有的身份驗證令牌已經成功更新。
-
正在創建信箱文件: 文件已存在
-
更改用戶 oldboy06 的密碼 。
-
passwd: 所有的身份驗證令牌已經成功更新。
-
正在創建信箱文件: 文件已存在
-
更改用戶 oldboy07 的密碼 。
-
passwd: 所有的身份驗證令牌已經成功更新。
-
正在創建信箱文件: 文件已存在
-
更改用戶 oldboy08 的密碼 。
-
passwd: 所有的身份驗證令牌已經成功更新。
-
正在創建信箱文件: 文件已存在
-
更改用戶 oldboy09 的密碼 。
-
passwd: 所有的身份驗證令牌已經成功更新。
-
正在創建信箱文件: 文件已存在
-
更改用戶 oldboy10 的密碼 。
-
passwd: 所有的身份驗證令牌已經成功更新。
-
-
[root@cjy linux-20]
-
oldboy01:x:503:503::/home/oldboy01:/bin/bash
-
oldboy02:x:504:504::/home/oldboy02:/bin/bash
-
oldboy03:x:505:505::/home/oldboy03:/bin/bash
-
oldboy04:x:506:506::/home/oldboy04:/bin/bash
-
oldboy05:x:507:507::/home/oldboy05:/bin/bash
-
oldboy06:x:508:508::/home/oldboy06:/bin/bash
-
oldboy07:x:509:509::/home/oldboy07:/bin/bash
-
oldboy08:x:510:510::/home/oldboy08:/bin/bash
-
oldboy09:x:511:511::/home/oldboy09:/bin/bash
-
oldboy10:x:512:512::/home/oldboy10:/bin/bash
-
-
[root@cjy linux-20]
企業面試題5:
寫一個腳本,實現判斷10.0.0.0/24網絡裏,當前在線用戶的IP有哪些(方法有很多)
############我的腳本5############################################
-
[root@cjy linux-20]
-
-
-
tmp_fifofile=/tmp/$$.fifo
-
mkfifo $tmp_fifofile
-
exec 6<> $tmp_fifofile
-
rm -rf $tmp_fifofile
-
-
thread=254
-
for ((i=0;i<$thread;i++))
-
do
-
echo >&6
-
done
-
-
for ((i=2;i<255;i++))
-
do
-
read -u6
-
{
-
ip=172.16.27.
-
ping $ip$i -c 1 >/dev/null && echo $ip$i:live || echo $ip$i:dead >>123
-
echo >&6
-
}&
-
done
-
wait
-
exec 6>&-
-
-
exit 0
-
[root@cjy linux-20]
-
[1] 22668
-
[root@cjy linux-20]
-
172.16.27.23:live
-
172.16.27.25:live
-
172.16.27.27:live
-
172.16.27.28:live
-
172.16.27.24:live
-
172.16.27.26:live
-
172.16.27.21:live
-
172.16.27.31:live
-
172.16.27.30:live
-
172.16.27.37:live
-
172.16.27.54:live
-
172.16.27.61:live
-
172.16.27.80:live
-
172.16.27.254:live
企業實戰題6:請用至少兩種方法實現!
寫一個腳本解決DOS攻擊生產案例
提示:根據web日誌或者或者網絡連接數,監控當某個IP併發連接數或者短時內PV達到100,即調用防火牆命令封掉對應的IP,監控頻率每隔3分鐘。防火牆命令爲:iptables -I INPUT -s 10.0.1.10 -j DROP。
企業實戰題7:
開發mysql多實例啓動腳本:
已知mysql多實例啓動命令爲:mysqld_safe--defaults-file=/data/3306/my.cnf &
停止命令爲:mysqladmin -u root -poldboy123 -S /data/3306/mysql.sockshutdown
請完成mysql多實例啓動啓動腳本的編寫
要求:用函數,case語句、if語句等實現。
企業實戰題8:如何實現對MySQL數據庫進行分庫備份,請用腳本實現
企業實戰題9:如何實現對MySQL數據庫進行分庫加分表備份,請用腳本實現
企業面試題10:請用至少兩種方法實現!
bash for循環打印下面這句話中字母數不大於6的單詞(崑崙萬維面試題)。
I am oldboy teacher welcome to oldboy training class.
-
-
-
-
echo '###Usage1#####'
-
a='I am oldboy teacher welcome to oldboy training class.'
-
-
for i in $a
-
do
-
NUM=`echo $i |wc -L`
-
if [ $NUM -le 6 ];then
-
echo $i
-
fi
-
done
-
-
-
echo '###Usage2######'
-
-
for i in $a
-
do
-
if [ ${
-
echo $i
-
fi
-
done
-
-
I
-
am
-
oldboy
-
to
-
oldboy
-
class.
-
-
I
-
am
-
oldboy
-
to
-
oldboy
-
class.
企業面試題11:開發shell腳本分別實現以腳本傳參以及read讀入的方式比較2個整數大小。以屏幕輸出的方式提醒用戶比較結果。注意:一共是開發2個腳本。當用腳本傳參以及read讀入的方式需要對變量是否爲數字、並且傳參個數做判斷。
企業面試題12:打印選擇菜單,一鍵安裝Web服務:
[root@oldboyscripts]# sh menu.sh
1.[install lamp]
2.[install lnmp]
3.[exit]
pls input the num you want:
要求:
1、當用戶輸入1時,輸出“startinstalling
lamp.”然後執行/server/scripts/lamp.sh,腳本內容輸出"lampis installed"後退出腳本;
2、當用戶輸入2時,輸出“startinstalling
lnmp.”然後執行/server/scripts/lnmp.sh輸出"lnmpis installed"後退出腳本;
3、當輸入3時,退出當前菜單及腳本;
4、當輸入任何其它字符,給出提示“Input error”後退出腳本。
5、要對執行的腳本進行相關條件判斷,例如:腳本是否存在,是否可執行等。
-
-
-
echo "1.[install lamp]"
-
echo "2.[install lnmp]"
-
echo "3.[exit]"
-
-
read -t 30 -p "Please input tut the num you want:" a
-
-
case $a in
-
1)
-
if
-
[ -f lamp.sh ];then
-
./lamp.sh
-
sleep 3
-
echo "lamp is installed!"
-
else
-
echo "no lamp.sh!"
-
fi
-
;;
-
-
2)
-
if
-
[ -f lnmp.sh ];then
-
./lnmp.sh
-
sleep 3
-
echo "lnmp is installed!"
-
else
-
echo "no lnmp.sh!"
-
fi
-
;;
-
-
3)
-
exit 0
-
;;
-
-
*)
-
echo "Input error"
-
exit 0
-
esac
-
[root@cjy linux-20]
-
1.[install lamp]
-
2.[install lnmp]
-
3.[exit]
-
Please input tut the num you want:1
-
no lamp.sh!
企業面試題13:
1、監控web服務是否正常,不低於3種監控策略。
2、監控db服務是否正常,不低於3種監控策略。
要求間隔1分鐘,持續監控。
企業面試題14:監控memcache服務是否正常,模擬用戶(web客戶端)檢測。
使用nc命令加上set/get來模擬檢測,以及監控響應時間及命中率。
企業面試題15:面試及實戰考試題:監控web站點目錄(/var/html/www)下所有文件是否被惡意篡改(文件內容被改了),如果有就打印改動的文件名(發郵件),定時任務每3分鐘執行一次(10分鐘時間完成)。
企業面試題16:企業案例:寫網絡服務獨立進程模式下rsync的系統啓動腳本
例如:/etc/init.d/rsyncd{start|stop|restart} 。
要求:
1.要使用系統函數庫技巧。
2.要用函數,不能一坨SHI的方式。
3.可被chkconfig管理。
企業面試題17:老男孩教育天津項目學生實踐抓鬮題目:
好消息,老男孩培訓學生外出企業項目實踐機會(第6次)來了(本月中旬),但是,名額有限,隊員限3人(班長帶隊)。
因此需要挑選學生,因此需要一個抓鬮的程序:
要求:
1、執行腳本後,想去的同學輸入英文名字全拼,產生隨機數01-99之間的數字,數字越大就去參加項目實踐,前面已經抓到的數字,下次不能在出現相同數字。
2、第一個輸入名字後,屏幕輸出信息,並將名字和數字記錄到文件裏,程序不能退出繼續等待別的學生輸入。
企業面試題18:老男孩linux企業面試題:
已知下面的字符串是通過RANDOM隨機數變量md5sum|cut-c 1-8截取後的結果,請破解這些字符串對應的md5sum前的RANDOM對應數字?
21029299
00205d1c
a3da1677
1f6d12dd
890684b
企業面試題19:批量檢查多個網站地址是否正常
要求:shell數組方法實現,檢測策略儘量模擬用戶訪問思路
http://www.etiantian.org
http://www.taobao.com
http://oldboy.blog.51cto.com
http://10.0.0.7
企業面試題20(中企動力)::用shell處理以下內容
1、按單詞出現頻率降序排序!
2、按字母出現頻率降序排序!
the squid project provides a number of resources toassist users design,implement and support squid installations. Please browsethe documentation and support sections for more infomation
-
[root@cjy linux-20]
-
the squid project provides a number of resources toassist users design,implement and support squid installations.Please browsethe
-
documentation and support sections for more infomation
-
[root@cjy linux-20]
-
-
-
sed -i 's/\,\|\./ /g' test
-
-
for i in `cat test`
-
do
-
echo $i
-
done
-
[root@cjy linux-20]
-
2 support
-
2 squid
-
2 and
-
1 users
-
1 toassist
-
1 the
-
1 sections
-
1 resources
-
1 provides
-
1 project
-
1 Please
-
1 of
-
1 number
-
1 more
-
1 installations
-
1 infomation
-
1 implement
-
1 for
-
1 documentation
-
1 design
-
1 browsethe
-
1 a
-
[root@cjy linux-20]
-
-
-
sed -i 's/\,\|\./ /g' test
-
-
for i in `cat test`
-
do
-
for j in `echo $i`
-
do
-
echo $j | awk -F '' '{for(i=1;i<=NF;i++)print $i}'
-
done
-
done
-
[root@cjy linux-20]
-
19 s
-
17 e
-
16 o
-
14 t
-
12 n
-
12 i
-
11 r
-
9 a
-
8 u
-
7 p
-
7 d
-
6 m
-
4 l
-
4 c
-
3 f
-
2 q
-
2 h
-
2 b
-
1 w
-
1 v
-
1 P
-
1 j
-
1 g
企業面試題21:輸出正方形、等腰三角形、直角梯形,見如下內容
http://oldboy.blog.51cto.com/2561410/1718607
企業面試題22:開發通過web界面展示監控Nginx代理節點狀態,效果圖如下。
lvs+keepalived集羣部分Shell企業案例:
企業面試題23、【LVS主節點】手工開發ipvsadm管理lvs的腳本ip_vs
實現:/etc/init.d/lvs {start|stop|restart}
企業面試題24、【LVS主節點】模擬keepalived健康檢查功能管理LVS節點,
當節點掛掉(檢測2次,間隔2秒)從服務器池中剔除,好了(檢測2次,間隔2秒)加進來
提示:利用ipvsadm命令實現添加和減少LVS節點。
企業面試題25、【LVS客戶端節點】開發LVS客戶端設置VIP以及抑制ARP的管理腳本
實現:/etc/init.d/lvsclient {start|stop|restart}
企業面試題26、【LVS備節點】模擬keepalved vrrp功能,監聽主節點,如果主節點不可訪問則備節點啓動並配置LVS實現接管主節點的資源提供服務(提醒:注意ARP緩存)
企業面試題27、請用shell或Python編寫一個正方形(oldboy_square.sh),接收用戶輸入的數字。
例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
[root@oldboy ~]
Please Enter a number:5
++++++++++
++++++++++
++++++++++
++++++++++
++++++++++
[root@oldboy ~]
Please Enter a number:9
■■■■■■■■■
■■■■■■■■■
■■■■■■■■■
■■■■■■■■■
■■■■■■■■■
■■■■■■■■■
■■■■■■■■■
■■■■■■■■■
■■■■■■■■■
|
-
[root@cjy linux-20]
-
-
-
-
read -p "Please Enter a number:" a
-
-
-
for ((i=1;$i<=$a;i++))
-
do
-
for ((j=1;j<=$((2*$a));j++))
-
do
-
echo -e "+\c"
-
done
-
echo
-
done
-
[root@cjy linux-20]
-
Please Enter a number:5
-
++++++++++
-
++++++++++
-
++++++++++
-
++++++++++
-
++++++++++
-
[root@cjy linux-20]
-
-
-
read -p "Please Enter a number:" a
-
-
-
for ((i=1;$i<=$a;i++))
-
do
-
for ((j=1;j<=$a;j++))
-
do
-
echo -e "■ \c"
-
done
-
echo
-
done
-
[root@cjy linux-20]
-
Please Enter a number:9
-
■ ■ ■ ■ ■ ■ ■ ■ ■
-
■ ■ ■ ■ ■ ■ ■ ■ ■
-
■ ■ ■ ■ ■ ■ ■ ■ ■
-
■ ■ ■ ■ ■ ■ ■ ■ ■
-
■ ■ ■ ■ ■ ■ ■ ■ ■
-
■ ■ ■ ■ ■ ■ ■ ■ ■
-
■ ■ ■ ■ ■ ■ ■ ■ ■
-
■ ■ ■ ■ ■ ■ ■ ■ ■
-
■ ■ ■ ■ ■ ■ ■ ■ ■
企業面試題28、請用shell或Python編寫一個等腰三角形(oldboy2_triangle.sh),接收用戶輸入的數字。
例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[root@oldboy ~]
Please Enter a number:5
*
***
*****
*******
*********
[root@oldboy ~]
Please Enter a number:8
*
***
*****
*******
*********
***********
*************
***************
|
-
[root@cjy linux-20]
-
-
-
read -p "Please Enter a number:" a
-
-
-
for ((i=1;$i<=$a;i++))
-
do
-
for ((h=$((2*$a-2*$i));h>=0;h--))
-
do
-
echo -e " \c"
-
done
-
for ((j=1;j<=$((2*$i-1));j++))
-
do
-
echo -e "*\c"
-
done
-
echo
-
done
-
[root@cjy linux-20]
-
Please Enter a number:5
-
*
-
***
-
*****
-
*******
-
*********
-
[root@cjy linux-20]
-
Please Enter a number:8
-
*
-
***
-
*****
-
*******
-
*********
-
***********
-
*************
-
***************
企業面試題29、請用shell或Python編寫一個畫直角梯形程序(oldboy4.sh),接收用戶輸入的參數n,m
例如:
1
2
3
4
|
[root@oldboy ~]
****
*****
******
|
27,28,29三道題參考http://oldboy.blog.51cto.com/2561410/1718607
-
[root@cjy linux-20]
-
-
-
if [[ -n $1 ]] && [[ -n $2 ]];
-
then
-
-
for ((i=$1;$i<=$2;i++))
-
do
-
for ((j=1;j<=$i;j++))
-
do
-
echo -e "*\c"
-
done
-
echo
-
done
-
else
-
echo "No given two int arguments,such as $0 5 6!"
-
fi
-
[root@cjy linux-20]
-
****
-
*****
-
******
企業面試題30:寫一套簡單的企業代碼上線發佈系統案例,利用SVN對代碼及配置文件進行管理,在辦公室服務器上從svn取出指定版本的代碼和配置,發佈到IDC機房分發機服務器上,在分發服務器或者負載均衡器上或者應用服務器本地實現代碼平滑發佈、上線、回滾腳本(具體設計請參考課堂講解的企業代碼發佈方案)。