cleanup: 一个清空/var/log目录下的日志文件的脚本

80497310 2011-06-23

1.脚本编写

#!/bin/bash
# Cleanup, 版本 3

#  注意:
#  -------
#  这个脚本使用了相当多的特性,这些我们稍后将会解释.
#
#  到那时,你已经学了这本书的一半了,你将不会再对shell感觉神秘了。
#



LOG_DIR=/var/log
ROOT_UID=0     # 只有用户ID变量$UID值为0的用户才有root权限.
LINES=50       # 默认的行数
E_XCD=66       # 不能进入到目录时的退出代码值
E_NOTROOT=67   # 不是root用户时退出的代码值


# 必须以root用户运行,以下进行检测
if [ "$UID" -ne "$ROOT_UID" ]
then
  echo "Must be root to run this script."
  exit $E_NOTROOT
fi  

if [ -n "$1" ]
# 测试是否提供了命令行参数(即是测试命令行参数至少有一个参数)
then
  lines=$1
else  
  lines=$LINES # Default, if not specified on command line.
fi  


#  Stephane Chazelas建议,
#+ 下面是一种更好的检测命令行参数的方法,
#+ 但是对于现在来说还是有些高级。
#
#    E_WRONGARGS=65  # 不是数字参数 (参数格式不对)时的退出码
#
#    case "$1" in
#    ""      ) lines=50;;
#    *[!0-9]*) echo "Usage: `basename $0` file-to-cleanup"; exit $E_WRONGARGS;;
#    *       ) lines=$1;;
#    esac
#
#* 可以跳到"循环"那章阅读开头一部分去了解上面的代码意思.


cd $LOG_DIR

if [ `pwd` != "$LOG_DIR" ]  # 也可以用  if [ "$PWD" != "$LOG_DIR" ]
                            # 如果工作目录不在/var/log里?
then
  echo "Can't change to $LOG_DIR."
  exit $E_XCD
fi  #在操作清空日志文件之前再次检查是否在正确的目录里

# 可以像下面再次确定是否在正确的目录里:
#
# cd /var/log || {
#   echo "Cannot change to necessary directory." >&2
#   exit $E_XCD;
# }




tail -$lines messages > mesg.temp # 保存message日志文件最后面几行日志信息到临时文件.
mv mesg.temp messages             # 然后用临时文件覆盖messages日志文件


# cat /dev/null > messages
#* 上面这句把messages日志文件全部清空,这样没有上面那样保留最后几行安全

cat /dev/null > wtmp  #  ': > wtmp' and '> wtmp'  have the same effect.
echo "Logs cleaned up."

exit 0
#  
#一个脚本以0为退出代码表明脚本执行成功.

2.脚本运行

你可以:chmod 555 scriptname (使每个人都有读和执行的权限)也可以chmod +rx scriptname (使每个人都有读和执行的权限)chmod u+rx scriptname (仅仅使脚本文件拥有者有读和执行的权限)3.

相关推荐