1. 前置工作
創造一個文字檔,大小超過2M,副檔名 .log ,並將其放於 /var/log下
2. 寫一支shell log_manager.sh
a. 檢查目錄中所有大於 2M的文字檔(用find指令),將其路徑,檔名,大小以及現在時間紀錄於 /var/log/log_manager.log
,需用累加的方式
b. 如果此超過2M的文字檔副檔名為.log,則複製此檔為 xxx.log.date,其中date為現在時間,格式為
year-month-day-hour-minute,並將此檔案壓縮成 xxx.log.date.tgz後將其搬移到另一掛載的磁碟(假設為/mnt/extradisk),而原來的文字檔內容清空
; 整個過成如果有任何錯誤也有把錯誤訊息放在 /var/log/log_manager.log
c. 執行b步驟時,如果發現掛載磁碟已經有之前備份相同大小的同檔案,則不做備份
3. 放到 crond
將第二步驟寫的 log_manager.sh放入 crond ,每3分鐘執行一次
----------------------------------------------------------
不知兄臺有沒有好主意
已經邁入第八小時的奮戰了...
這只是非常簡短的一段程式, 其他就照其他大大所說得修改,這我剛在Solaris上面有試沒問題.
不過你還是需要修改一下成你要的結果.
雖然很想幫你寫完, 不過我覺得這樣不太好, 還是要靠自己探索才能學到更多東西的.

#!/bin/sh
file=`ls -l | grep *.log | awk '{print $5}'`
for i in $file
do
if [ $i -ge 10000 ] ; then
echo $i
fi
done
還有下面這行可以造出一個2MB的空檔案filename!
# dd if=/dev/null of=filename bs=1M count=2
不過有我看不懂的東西
或許是另一種解法
不過看不懂很難成為自己的東西
#!/bin/sh
file=`ls -l | grep *.LOG | awk '{print $5}'`
for i in $file
do
if [ $i -ge 10000 ] ; then
echo $i
fi
done
紅色部份我不懂
那是屬於什麼東西的參數?
我目前是寫到這裡
#!/bin/bash
for filename in $(find /var/log -size +2M)
do
ls -l $filename >> /var/log/log_manager.log
if file $filename | grep ASCII > /dev/null
then
echo "it is a ascii file"
# DATE=`date +%y-%m-%d-%H-%M-%S`
# cp $filename /home/ray/$filename.DATE
else
echo "it is not a ascii file"
fi
done
另外兩m的檔案要聞字檔
不能是空的未知檔案
find /var/log/ -name "*.log" -size +2M -exec sh /root/bin/step-2.sh {} \;
其中需要的 bash script /root/bin/step-2.sh :
echo "---- ls -l $1 ----" >> /var/log/log_manager.log
ls -l $1 >> tmp/log_manager.log 2>>/var/log/log_manager.log
echo "---- cp -a $1 tmp/ ----"$(date) >> /var/log/log_manager.log
cp -a $1 tmp/ 2>>var/log/log_manager.log
對原題達成率 8成。給樓主參考。
file=`ls -l | grep *.LOG | awk '{print $5}'`
for i in $file
do
if [ $i -ge 10000 ] ; then
echo $i
fi
done
我把他分開執行你就會懂了:
1. 執行ls -l
-rw-r--r-- 1 jack 1003 14432128 Jun 11 13:55 1.pkg
-rw-r--r-- 1 jack 1003 14473056 May 11 15:03 2.pkg
-rw-r--r-- 1 jack 1003 14464864 May 27 17:42 3.pkg
-rw-r--r-- 1 jack 1003 14353136 Jan 29 17:42 4.pkg
-rw-r--r-- 1 jack 1003 5651456 Feb 1 16:16 aaa.log
2.執行ls -l | grep *.log
-rw-r--r-- 1 jack 1003 5651456 Feb 1 16:16 aaa.log
3.執行ls -l | grep *.LOG | awk '{print $5}
14432128
14473056
14464864
14353136
5651456
最後就可以取得所有檔案容量, 之後再迴圈裡面判斷你要得大小,
if [ $i -ge 10000 ]
a1 -qe a2 是整數的a1小於等於a2
你可以在shell下分段執行,你就會知道意思了.
因那算是linux/Unix下很基本的東西
看來你還需要多多加油喔!

加油吧!

不過小弟未能完全明白
摸索一下
這是完全不同的解法
執行:
find /var/log/ -name "*.log" -size +2M -exec sh /root/bin/step-2.sh {} \;
其中需要的 bash script /root/bin/step-2.sh :
echo "---- ls -l $1 ----" >> /var/log/log_manager.log
ls -l $1 >> tmp/log_manager.log 2>>/var/log/log_manager.log
echo "---- cp -a $1 tmp/ ----"$(date) >> /var/log/log_manager.log
cp -a $1 tmp/ 2>>var/log/log_manager.log
對原題達成率 8成。給樓主參考。

不過樓主是已經作過功課才上來問的, 大家都能接受吧?
上面網兄提示但是樓主你看不懂的部份,還是麻煩你自行google, 這邊恐怕沒辦法幫你
及時完成作業.... 例如awk指令, 我用google找了"linux awk 指令", 一秒鐘就有答案了.
而且寫的很完整. (這邊也順便教了您怎麼用google找linux的指令用法)
Regular Expression真的一定要學, 學了絕對有很大的好處~!!
Linux是不太好學, 不過如果你能精通shell script, 那絕對對你以後出社會有很大的幫助!!
作業沒作完沒什麼大不了的, 重要的是要學會這個作業想要讓你學會的東西.
剛剛google的時候瞄到一篇Linux自動備份的文章, 如果把它看懂自己改造應該不錯.
但是也來不及了...有空可以再看看:
http://www.techbang.com.tw/posts/306
與失敗為伍者,天天靠盃都是別人的錯。
與成功為伍者,天天跟失敗切磋直到不再出錯。
wrh7415369 wrote:
如果執行ls -l ...(恕刪)
ls -l | grep *.LOG | awk '{print $9}'
只要把這段後面改成9就可以了!
我盡量用不複雜的語法來跟你說,應該會比較簡單易懂一點.
所以你執行之後就可以只得到aaa.log, 也就是你就可以取得檔名.
竟然你都可以取得檔名,後面你要幹麼都可以了. 要壓縮,要解壓縮,要.......都可以!
看你的應用.
#ls -l | grep *.LOG | awk '{print $9}'
aaa.log
如同bluesystem大大說得, google一下一堆資料且這是linux/Unix系統很基本的東西
尤其是awk 指令這是寫shell程式最常用的指令之一.
還有Regular Expression不會這個,那就不用寫shell script了.
所以你真的需要好好加油喔!

內文搜尋


























































































