最近工作中,调试主要使用nfs网络挂载开发板,但是android 的nfs有时会无缘无故启动不起,有可能是某个文件被删了,也有可能是某个文件的权限不对了,也有可能某个可执行文件被损坏了
写了个脚本,检测某些文件的权限是否正确,检测是否缺失一些文件
下载路径:
里面有4个文件
check-android-file.sh:执行脚本
root-installed-files:根目录下的一些文件,检测nfs根目录下的文件是否存在时,以它为标准,可以适当修改
system-installed-files:system目录下的一些文件,检测nfssystem目录下的文件是否存在时,以它为标准,我这里是把android的out/target/product/generic/installed-files.txt文件重命名为system-installed-files作为标准
mod-files:一些文件和文件夹的权限配置
效果如下:
1:check-android-file.sh脚本:
########################################################################## File Name: check-android-file.sh# Created Time: Thu 31 Jul 2014 09:36:51 PM##########################################################################!bin/shfunction checkfile(){ DIR=$1 SOURCE=$3 if [ ! -e "$DIR$SOURCE" ] ; then echo -e "checking $DIR$SOURCE" "\033[31m" "FAILED" "\033[0m" fi }function changestrtonum(){ TYPE=$1 MIN=1 MAX=4 NUM=0 while [ $MIN -le $MAX ] do FILETYPE=$( echo $TYPE | cut -b $MIN ) case $FILETYPE in "r") NUM=`expr $NUM + 4`;; "w") NUM=`expr $NUM + 2`;; "x") NUM=`expr $NUM + 1`;; "-") NUM=`expr $NUM + 0`;; esac MIN=`expr $MIN + 1` done echo "$NUM" }function checkfilemode(){ DIR=$1 MODE=$2 TYPE=$3 SOURCE=$4 FILETYPE=$( ls $DIR$SOURCE -l 2>&1 >/dev/null | head -n 1 | cut -b 1 ) if [ "$FILETYPE" = "d" ] && [ "$TYPE" = "f" ]; then echo -e "checking $DIR$SOURCE" "\033[31m" " should be file , but now it is dir" "\033[0m" fi if [ "$FILETYPE" = "-" ] && [ "$TYPE" = "d" ]; then echo -e "checking $DIR$SOURCE" "\033[31m" " should be dir , but now it is file" "\033[0m" fi MODE_CAL= MODE_CAL="$MODE_CAL"$( changestrtonum $( ls $DIR$SOURCE -l 2>&1 >/dev/null | cut -b 2-4 )) MODE_CAL="$MODE_CAL"$( changestrtonum $( ls $DIR$SOURCE -l 2>&1 >/dev/null | cut -b 5-7 )) MODE_CAL="$MODE_CAL"$( changestrtonum $( ls $DIR$SOURCE -l 2>&1 >/dev/null | cut -b 8-10 )) if [ "$MODE_CAL" -ne "$MODE" ] && [ -e "$DIR$SOURCE" ]; then #echo -e "mode no match, $DIR$SOURCE" "mode should be ""\033[31m" "$MODE" "\033[0m" chmod $MODE $DIR$SOURCE 2>&1 >/dev/null fi }usage(){ echo "example: ./check-android-file rootfs"}CHECK_SYSTEM_FILE=system-installed-filesCHECK_ROOT_FILE=root-installed-filesCHECK_MODE_FILE=mod-filesROOTFS_DIR=$1################################################################################# MAIN################################################################################if [ "$#" -ne "1" ] ; then usage exit 1fi#check root fileswhile read linedo checkfile $ROOTFS_DIR $line done < $CHECK_ROOT_FILE#check system fileswhile read linedo checkfile $ROOTFS_DIR $line done < $CHECK_SYSTEM_FILE#check and change files modewhile read linedo checkfilemode $ROOTFS_DIR $line done < $CHECK_MODE_FILE
2:root-installed-files:
1 /default.prop2 /file_contexts3 /fstab.freescale4 /init5 /init.freescale.rc6 /init.freescale.usb.rc7 /init.rc8 /init.trace.rc9 /init.usb.rc10 /property_contexts11 /sbin/adbd12 /sbin/ueventd13 /sbin/watchdogd14 /seapp_contexts15 /sepolicy16 /ueventd.freescale.rc17 /ueventd.rc
3:mod-files:
771 d /data755 d /dev760 d /sbin755 d /sys755 d /system644 f /system/build.prop644 f /default.prop750 f /init750 f /init.rc750 f /init.usb.rc750 f /init.freescale.rc750 f /init.freescale.usb.rc750 f /init.trace.rc750 f /ueventd.freescale.rc750 f /ueventd.rc664 f /file_contexts664 f /fstab.freescale775 d /proc664 f /property_contexts664 f /seapp_contexts664 f /sepolicy