• 6

大清早求救...LINUX


其他小問題我都還能解決
目前最大的問題還是在這
FIND一堆訊息中挑出符合的檔名
然後在導入別的地方
在判斷那些導入的檔名是否有.LOG在挑出
其中一題是這樣的

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分鐘執行一次

----------------------------------------------------------

不知兄臺有沒有好主意
已經邁入第八小時的奮戰了...
下面這一段是, 挑選*.log(注意大小寫)的檔案且之後再挑選大於等於10000大小的檔案,show出容量.
這只是非常簡短的一段程式, 其他就照其他大大所說得修改,這我剛在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成。給樓主參考。
#!/bin/sh
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成。給樓主參考。
如果執行ls -l | grep *.log
-rw-r--r-- 1 jack 1003 5651456 Feb 1 16:16 aaa.log

那要如何從這斷訊息中抓出aaa.log?
然後自動進行壓縮呢

這就是我很難明白的從一堆訊息中抓出關鍵字方法
畢竟這一整條的訊息不能直接執行
很少看到在01問作業沒被砲的...
不過樓主是已經作過功課才上來問的, 大家都能接受吧?

上面網兄提示但是樓主你看不懂的部份,還是麻煩你自行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了.
所以你真的需要好好加油喔!
  • 6
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?