chmod -R 755 加权限后的修复方法

发布时间:2020-02-01编辑:脚本学堂
chmod -R 755 加权限后的修复方法

首先,遍历文件系统的C程序a.c:
 

复制代码 代码如下:

#include <sys/stat.h>
#include <ftw.h>
int list(const char *name, const struct stat *status, int type)
{
   if(type == FTW_NS)
    return 0;

    printf("%s 0%3on", name, status->st_mode & 07777);
return 0;
 }

int main(int argc, char *argv[])
{
    if(argc == 1)
   ftw(".", list, 1);
    else
   ftw(argv[1], list, 1);
   exit(0);
}

编译成a.out可执行文件,我这里不是一次遍历整个根(/)目录,因为不是所有目录的权限都需要改,比如说/proc目录、再比如为了装oracle建的/u01目录。我只扫描我认为需要修改权限的目录,如下执行:./a.out  /bin  >bin.txt … 每个目录的文件及权限保存在独立的文件中,下面是我新装as 4系统下/bin目录下的文件权限(bin.txt的部分内容):
/bin 0755
/bin/traceroute6 04755
/bin/setserial 0755
/bin/rview 0755
/bin/touch 0755
/bin/linuxjishu/13830.html target=_blank class=infotextkey>awk 0755
/bin/mt 0755
/bin/ash 0755
… …

然后写个更改权限的简单脚本chgperm.sh:
 

复制代码 代码如下:

#!/bin/sh
if [ $# != 1 ]
then
 echo Usage : $0 <filename>
  exit
fi

PERMFILE=$1
cat $PERMFILE |
while read LINE
do
   FILE=`echo $LINE | awk '{print $1}'`
   PERM=`echo $LINE | awk '{print $2}'`
   chmod $PERM $FILE
done

echo change perm finished!

如下执行即可:
sh  chgperm.sh  bin.txt
… …

如果系统中有getfacl 的命令的话,脚本都不用写了,直接用getfacl 获取正常系统的文件权限,到出问题的机器上用 setfacl 恢复。

在一台别的系统上
getfacl -R / > acl.bak

把acl.bak的文件copy过来
setfacl --restore acl.bak