1. 程式人生 > >Shell練習(七)

Shell練習(七)

linux shell

習題1:統計日誌大小

要求:假如我們需要每小時都去執行你寫的腳本。在腳本中實現這樣的功能,當時間是0點和12點時,需要將目錄/data/log/下的文件全部清空,註意只能清空文件內容而不能刪除文件。而其他時間只需要統計一下每個文件的大小,一個文件一行,輸出到一個按日期和時間為名字的日誌裏。 需要考慮/data/log/目錄下的二級、三級、… 等子目錄裏面的文件

參考答案:

#!/bin/bash
# date:2018年2月25日
logdir="/data/log/"
t=`date +%H`
d=`date +%F-%H`
[ -d /tmp/log_size ] || mkdir /tmp/log_size
for log in `find $logdir -type f`
do
   if [ $t == "0" ] || [ $t == "12" ]
   then
	true > $log
   else
	du -sh $log >> /tmp/log_size/$d
   fi
done

習題2:統計常用命令

要求:

寫一個shell腳本來看看你使用最多的命令是哪些,列出你最常用的命令top10。

思路:我們要用到一個文件就是.bash_history,然後再去sort、uniq,剩下的就不用我多說了吧。很簡單一個shell。

參考答案:

#!/bin/bash
# date: 2018年2月25日
sort /root/.bash_history|uniq -c|sort -rn|head

習題3:獲取文件列表

要求:

有一臺服務器作為web應用,有一個目錄(/data/web/attachment)不定時地會被用戶上傳新的文件,但是不知道什麽時候會上傳。所以,需要我們每5分鐘做一次檢測是否有新文件生成。

請寫一個shell腳本去完成檢測。檢測完成後若是有新文件,還需要將新文件的列表輸出到一個按年、月、日、時、分為名字的日誌裏。請不要想的太復雜,核心命令只有一個 find /data/web/attachment -mmin -5

思路: 每5分鐘檢測一次,那肯定需要有一個計劃任務,每5分鐘去執行一次。腳本檢測的時候,就是使用find命令查找5分鐘內有過更新的文件,若是有更新,那這個命令會輸出東西,否則是沒有輸出的。固,我們可以把輸出結果的行數作為比較對象,看看它是否大於0

參考答案:

#!/bin/bash
# date: 2018年2月25日
d=`date -d "-5 min" +%Y%m%d%H%M`
basedir=/data/web/attachment
find $basedir -type f -mmin -5 > /tmp/newfile.txt
n=`wc -l /tmp/newfile.txt`
if [ $n -gt 0 ];then
    /bin/mv /tmp/newfile.txt /tmp/$d
fi


Shell練習(七)