#!/bin/bash
#:lwp
#收集异常信息文件存放目录
COLLECT_CHECK_SAVE_PATH="/data"
#版本信息
#VERSION_PATH="/appversion"
#检测目录列表
DIR_LIST=(
/usr/bin/
/usr/sbin/
/bin/
/sbin/
)
#允许无执行权限文件
FILE_LIST=(
dont-tar-files.list
)
if [ -f "${COLLECT_CHECK_SAVE_PATH}/permissionfile" ]; then
cat /dev/null >"${COLLECT_CHECK_SAVE_PATH}/permissionfile"
else
touch "${COLLECT_CHECK_SAVE_PATH}/permissionfile"
fi
#重定向文件或创建文件失败则退出
if [ ! $? -eq 0 ];then
exit
fi
#标示权限异常信息文件是否为空
info_perm=""
per_val=""
num=0
dir_name=""
file_perssiom=""
file_name=""
get_file=""
flag=0
for dir_name in "${DIR_LIST[@]}"
do
file_perssiom=$(ls -l "$dir_name")
echo "$file_perssiom" | sed -n "2,$"p | while read -r line #sed -n "2,$"p 表示从第二行到最后一行
do
num=0
flag=0
per_val=$(echo "$line" | awk '{print $1}')
#对权限的x进行计数
num=$(echo "$per_val" | tr -cd x | wc -c)
if [ "$num" -lt 3 ];then
get_file=$(echo "$line" | awk '{print $9}')
#判断无执行权限的文件是否是允许文件
for file_name in "${FILE_LIST[@]}"
do
if [ x"$file_name" = x"$get_file" ];then
flag=1
fi
done
#否则,则存在无运行权限的文件,将文件名echo到记录文件中
if [ "$flag" -eq 0 ];then
echo "$dir_name $(echo "$line" | awk '{print $9" "$1" "$6"-"$7"-"$8}')" >>"${COLLECT_CHECK_SAVE_PATH}/permissionfile"
fi
fi
done
done
info_perm=$(cat "${COLLECT_CHECK_SAVE_PATH}/permissionfile")
#x是一个占位符,用于避免变量为空时出现语法错误;这里判断记录文件是否为空,为空则删除记录文件
if [ x"$info_perm" = x ];then
rm "${COLLECT_CHECK_SAVE_PATH}/permissionfile"
echo "success.no error"
fi
#如果不为空,则输出记录文件
if [ -f "${COLLECT_CHECK_SAVE_PATH}/permissionfile" ];then
echo "ERROR! ${COLLECT_CHECK_SAVE_PATH}/permissionfile exists, include NOPERMISSION file"
fi
可直接查看代码注释