当前位置: 代码迷 >> Android >> shell脚本学习(3),android 文件系统
  详细解决方案

shell脚本学习(3),android 文件系统

热度:38   发布时间:2016-04-28 04:29:08.0
shell脚本学习(三),android 文件系统

最近工作中,调试主要使用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




  相关解决方案