- #!/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
可直接查看代码注释