一、編寫shell程序,實現自動刪除50個帳號的功能。帳號名爲stud1至stud50。
一句話思路:找出規律,循環解決
for((i=1;i<51;i++));do userdel -r stud$i ;done
知識點:for循環,固然是用while循環也是能夠的,until也行。
二、某系統管理員需天天作必定的重複工做,請按照下列要求,編制一個解決方案:
(1)在下午4 :50刪除/abc目錄下的所有子目錄和所有文件;
(2)從早8:00~下午6:00每小時讀取/xyz目錄下x1文件中每行第一個域的所有數據加入到/backup目錄下的bak01.txt文件內;
(3)每逢星期一下午5:50將/data目錄下的全部目錄和文件歸檔並壓縮爲文件:backup.tar.gz;
一句話思路:主要考驗管理員對於計劃任務的熟悉程度
crontab -e
50 16 * * * rm -rf /abc/*
* 8-18/1 * * * awk '{print $1 > "/backup/bak01.txt"}' /xyz/x1
50 17 * * 1 tar -czf backup.tar.gz /data
知識點:awk的輸出重定向,固然用管道也是能夠的。tar命令打包參數,這樣作會有一個提示,只是去掉了目錄不用理會。
三、gameser這個服務啓動命令爲./gameser服務,請寫一個腳本,當服務宕掉,腳本自動拉起gameser服務。
一句話思路:進程管理
#!/bin/bash
while true;do
result=`ps aux | grep gameser | wc -l`
if [ $result -lt 2 ];then ./gameser; fi
sleep 5
done
知識點:還可使用pgrep命令。
四、linux crontab;請在3月23號21點18分的時候,重啓服務器
一句話思路:計劃任務+關機
crontab -e
18 21 23 3 * init 6
知識點:可能會延展提問到最安全的關機命令,「寫緩存」sync 最好兩遍,有人說三遍,其實四遍也行,要不乾脆仍是別關機了!
五、你想天天23:00運行xxxx.sh腳本。並自動進行日誌分析。第2天上班的時候看到分析結果 給出你的部屬方案
一句話思路:計劃任務,日誌分析
0 23 * * * sh ****.sh;err=$?;logger -p cron.err $err
知識點:第一個參數必定要寫零,不然在定義的23點裏每分鐘都會執行。計劃任務只有當報錯的時候纔會以郵件形式發送給用戶,因此這裏使用logger命令將消息發送給日誌服務器,這裏只是發送了命令返回值,你能夠隨意發送內容,看你喜歡了。
六、要求:運行腳本輸入兩個數獲得以下結果:
#sh xxx.sh 2 3
**
***
*****
一句話思路:看到這個第一反應就是循環唄。
#!/bin/bash
line1=$1
line2=$2
let line3=$1+$2
while [ $line1 -gt 0 ];do
echo -n *
let line1=$line1-1
done
echo
while [ $line2 -gt 0 ];do
echo -n *
let line2=$line2-1
done
echo
while [ $line3 -gt 0 ];do
echo -n *
let line3=$line3-1
done
echo
知識點:若是你的第一反應是使用循環,那就進入一個死循環了,由於根本就沒有規律。咱們都知道,循環是依靠必定規律的。echo 的 -n參數。*在shell中是通配符,因此要加轉義字符。(但願你能給出更好的解決方案!)
九、查找文件後綴是log的 三天前的文件刪除
一句話思路:查找就必定是find
find / -name "*.log" -and -mtime +3 -exec rm -rf {} ;
知識點:-mtime + 表明後面數字以外的,- 就是以內的。
十、寫一個腳本將目錄下大於100kb的文件移動到/tmp下
一句話思路:同上
find ./ -size +100k -exec mv {} /tmp ;
知識點:-exec {} ; 標準寫法,沒有好辦法,背吧。
php
11 、日誌以下統計訪問IP最多的前10個
192.168.0.6 - - [25/Nov/2010:13:55:10 +0800] "GET /cacti/images/auth_login.gif HTTP/1.1" 200 21265 "http://192.168.0.104/cacti/graph_view.php?action=tree&tree_id=2&leaf_id=8&page=3" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.1)"
192.168.0.6 - - [25/Nov/2010:13:55:14 +0800] "GET /favicon.ico HTTP/1.1" 404 287 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.1)
這個題在前一篇中已經給出答案,這裏就再也不贅述。
http://7648853.blog.51cto.com/4990508/851407
十二、過濾出當前目錄下全部以字母(不區分大小寫)開頭的文件
一句話思路:過濾就是grep
ls | grep -P "^[a-zA-Z]"
ls | grep -P -i "^[a-z]"
知識點:正則表達式,使用-i參數讓grep命令不區分大小寫。
1三、文件A.txt內容爲"12:34:68",只輸出A.txt中的"34"
一句話思路:提取內容就是awk
awk -F ":" '{print $2}' A.txt
知識點:awk 域,-F參數指定分隔符,默認分隔符是空格。
1四、用sed命令實現直接將文件B.TXT中的全部123替換成345
一句話思路:沒思路了,人家都說了用sed
sed -i 's/123/456/g' B.TXT
知識點:-i參數讓sed修改文件,默認不修改源文件。題目中提到了全部字樣,因此要使用g參數。
1五、用sed修改文件mailbox.txt的20行的zhango爲wang
一句話思路:命題做文sed,沒有瞎想空間
sed -i '20s/zhango/wang/' mailbox.txt
知識點:上題是全局,這題規定了行。若是寫成這樣"/20/",就是正則表達式了。
1六、正則表達式,IP地址的匹配,寫一下
一句話思路:遙想當年,web開發程序員面試不出意外的第一道題。
([0-9]{1,3}.){1,3}([0-9]){1,3}
知識點:正則表達式,寫個簡單的,這個答案不嚴謹,但考慮到只是面試,因此將就將就也能用。
1七、寫出命令。統計日誌文件weblog.log中 今天14:00~15:00的記錄條數(時間格式:2011-01-01—15:30:11)
一句話思路:第一反應,這個要用awk,分析統計嘛。可真要用awk麻煩就大了。
sum14=`grep -c "2011-01-01-14" weblog.log`
sum15=`grep -c "2011-01-01-15" weblog.log`
echo $[$sum14+$sum15]
知識點:grep命令-c參數,統計匹配的行數。shell中的數學計算。
1八、求一組數的最大值和最小值
一句話思路:運維愈來愈像開發了,冒泡法都有了。愈來愈難混了,一個運維不看手冊,要看算法了。
知識點:去看書吧,看算法的。
1九、將當前目錄全部文件擴展名改成log
一句話思路:若是你的第一反應是使用find命令,那麼恭喜你,你中了敵人的奸計,不是不能實現,是很麻煩。
for file in `ls ./ | grep -P "(.*)(..*)"`;do echo $file | mv $file `sed -r 's#(.*)(..*)#1.log#'`; done
for file in `ls ./ | grep -P "(.*)(..*)"`;do echo $file | mv $file `echo ${file%.**}`.log; done
知識點:第一個方法中使用了sed,第二個方法中使用了字符操做,#從前向後數,%從後向前數。其實說白了,就是爲了拼湊出 mv 參數1 參數2。其實不少時候,編寫shell腳本的時候要學會反向推導,逆向思考。
還有一種方法是使用cut命令,但若是遇到文件有兩個擴展名的狀況下就會出現問題。redhat as4 安裝完成後,在root目錄下會生成install.log install.log.syslog這兩個文件,若是使用cut就會出現錯誤。具體緣由 在這裏就不說了。運維嘛,須要的是嚴謹!
20、用shell在/usr/local下 創建20個子目錄 xunlei1-xunlei20,再在這個子目錄下分別建255個子目錄dir1-dir255,再在255個子目錄下建立10000個文件xunlei1.html-xunlei10000.html
一句話思路:這有啥,{}大括號唄。
mkdir -p /usr/loca/xunlie{1..20}/dir{1..255}/
touch /usr/loca/xunlie{1..20}/dir{1..255}/xunlei{1..10000}.html
知識點:若是你就這麼寫上去,那你又中計了。爲何呢,由於超過了shell命令參數的最大限制。shell中參數的限制是:5452。因此要分着寫。html