Linux運維:面試題

統計web日誌中IP訪問次數

有一個大於10G的apache訪問日誌,要求找出訪問/stat.php頁面次數大於1000次的前100個IP
日誌樣本以下:php

212.11.129.182 - [26/Mar/2015:03:00:01 +0800] "GET/stat.php?pid=016 HTTP/1.1" 302 20-"-" "-" ""Mozllia/4.0(compatible;MSIE 6.0;Windows NT 5.1)"

解析:10G的日誌已經很大了,直接使用grep或者awk進行分析會很慢,對服務器內存消耗大,若是服務器配置低,能夠考慮把日誌切割,好比切割成100個100M的文件,而後針對這100個文件分別進行統計排名前100的IP,得出結果後合併到一個文件中,再進一步分析。
答案:web

#!/bin/bash
sta(){
    grep '/stat.php' $1|awk '{print $1}' | sort -n |unic -n|sort -n|tail -100
}
logfile=/data/logs/access.log
mkdir /data/logs/tmp
cd /data/logs
# 分割成100個100M的文件
split -b 100M access.log smallfile
mv smallfile* tmp
cd tmp
# 把分割後的文件中的ip前100個計算出來
for f in `ls smallfile*`
do
    sta $f >> top100.txt
done
# 編寫函數,計算每一個IP出現的次數
count_sum(){
    sum=0
    for f in `ls smallfile*`
    do
        n=`grep "$1" $f|wc -l`
        sum=$[$sum+$n]
        echo $sum $1
   done
}
# 把獲得的IP進行去重,做爲遍歷對象,把全部出現的IP次數統計出來
for ip in `awk '{print $2}' top100.txt|sort -n|uniq`
do
    count_sum $ip >> ip.txt
done
# 先把IP大於1000次的過濾出來,而後按照IP次數進行排序,獲得前100個
awk '$1>1000' ip.txt|sort -nr|head -100

find命令

題:寫一個腳本或者一條命令查找/var/log目錄下,最後修改時間大於30天,後綴爲*.log的文件並刪除。
答:面試

find /var/log/ -mtime +30 -name "*.log" -exec rm -rf {}\;

題:寫一個腳本或者一條命令將/data目錄下大於100K的文件移動到/tmp目錄下
答:apache

find /data -size +100k -exec mv {} /tmp \;

iptables

題:如何將192.168.10.2主機80端口的請求轉發到172.116.10.3的8080端口?
答:bash

iptables -t nat -A PREROUTING -d 192.168.10.2 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.116.10.3:8080

題:只容許遠程主機訪問本地80端口,寫出iptables規則?
答:服務器

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -P INPUT DROP

網絡面試題

一、劃分vlan有什麼做用?
二、路由器都哪些協議?路由器的做用是什麼?
三、如何劃分子網?
四、ping命令是用哪一種協議?
五、OSPF的工做原理?
六、簡述一下TCP三次握手和四次揮手?
七、個人遊戲裏有個頁面,用戶進入那個頁面報網絡不通或者網絡緩慢,你應該怎麼排查?
八、OSI七層模型分別是什麼?
九、會不會思科路由器的配置命令?
十、簡述一下https中的三次握手?
十一、Dos攻擊和DDos攻擊有什麼區別?網絡

相關文章
相關標籤/搜索