清除/var/log下的log檔案
基本版:
1 # Cleanup 2 # 當然要使用 root 身份來運行這個指令碼 3 4 cd /var/log 5 cat /dev/null > messages 6 cat /dev/null > wtmp 7 echo "Logs cleaned up."
版本2:
1 #!/bin/bash 2 # 一個 Bash 指令碼的正確的開頭部分. 3 4 # Cleanup, 版本 2 5 6 # 當然要使用 root 身份來運行. 7 # 在此處插入代碼,來列印錯誤訊息,並且在不是 root 身份的時候退出. 8 9 LOG_DIR=/var/log 10 # 如果使用變數,當然比把代碼寫死的好. 11 cd $LOG_DIR 12 13 cat /dev/null > messages 14 cat /dev/null > wtmp 15 16 17 echo "Logs cleaned up." 18 19 exit # 這個命令是一種正確並且合適的退出指令碼的方法.
版本3:
1 #!/bin/bash 2 # 清除, 版本 3 3 4 # Warning: 5 # ------- 6 # 這個指令碼有好多特徵,這些特徵是在後邊章節進行解釋的,大概是進行到本書的一半的 7 # 時候, 8 # 你就會覺得它沒有什麼神秘的了. 9 # 10 11 12 13 LOG_DIR=/var/log 14 ROOT_UID=0 # $UID 為 0 的時候,使用者才具有根使用者的許可權 15 LINES=50 # 預設的儲存行數 16 E_XCD=66 # 不能修改目錄? 17 E_NOTROOT=67 # 非根使用者將以 error 退出 18 19 20 # 當然要使用根使用者來運行 21 if [ "$UID" -ne "$ROOT_UID" ] 22 then 23 echo "Must be root to run this script." 24 exit $E_NOTROOT 25 fi 26 27 if [ -n "$1" ] 28 # 測試是否有命令列參數(非空). 29 then 30 lines=$1 31 else 32 lines=$LINES # 預設,如果不在命令列中指定 33 fi 34 35 36 # Stephane Chazelas 建議使用下邊 37 #+ 的更好方法來檢測命令列參數. 38 #+ 但對於這章來說還是有點超前. 39 # 40 # E_WRONGARGS=65 # 非數值參數(錯誤的參數格式) 41 # 42 # case "$1" in 43 # "" ) lines=50;; 44 # *[!0-9]*) echo "Usage: `basename $0` file-to-cleanup"; exit $E_WRONGARGS;; 45 # * ) lines=$1;; 46 # esac 47 # 48 #* 直到"Loops"的章節才會對上邊的內容進行詳細的描述. 49 50 51 cd $LOG_DIR 52 53 if [ `pwd` != "$LOG_DIR" ] # 或者 if[ "$PWD" != "$LOG_DIR" ] 54 # 不在 /var/log 中? 55 then 56 echo "Can't change to $LOG_DIR." 57 exit $E_XCD 58 fi # 在處理 log file 之前,再確認一遍目前的目錄是否正確. 59 60 # 更有效率的做法是 61 # 62 # cd /var/log || { 63 # echo "Cannot change to necessary directory." >&2 64 # exit $E_XCD; 65 # } 66 67 68 69 70 tail -$lines messages > mesg.temp # 儲存 log file 訊息的最後部分. 71 mv mesg.temp messages # 變為新的 log 目錄. 72 73 74 # cat /dev/null > messages 75 #* 不再需要了,使用上邊的方法更安全. 76 77 cat /dev/null > wtmp # ': > wtmp' 和 '> wtmp'具有相同的作用 78 echo "Logs cleaned up." 79 80 exit 0 81 # 退出之前返回 0,返回 0 表示成功.