LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1153|回复: 10

一个小小的失误 ( chmod 660 -R /* )

[复制链接]
发表于 2007-4-27 15:42:48 | 显示全部楼层 |阅读模式
我在改变权限的时候,不小心将 chmod 660 -R ./* 写成了 chmod 660 -R /*
我用救援光盘启动后,输入了 chmod 755 -R /*

请问这对我的系统有什么影响没有啊?主要是我的是服务器,安全方面是否会产生很大的影响?

我是否须要重装一次系统啊?

谢谢指点
发表于 2007-4-27 16:13:16 | 显示全部楼层
就这失误还小啊,全部755肯定是不行的,如果可能还是重装吧。
回复 支持 反对

使用道具 举报

发表于 2007-4-27 16:36:50 | 显示全部楼层
呵呵……看来Shell应该在再加一个诸如undo之类的功能了……
回复 支持 反对

使用道具 举报

发表于 2007-4-27 17:27:59 | 显示全部楼层
Post by cashlu
呵呵……看来Shell应该在再加一个诸如undo之类的功能了……

这和 Shell 有什么关系?要加也不是在 Shell 中加。
回复 支持 反对

使用道具 举报

发表于 2007-4-27 18:31:41 | 显示全部楼层
我觉得吧, 平时最好使用非root用户.
再者, 不要以为UNIX/linux这样设计的不太好喔, 比如在gcc -o somefile.c somefile.c时, 这样虽然会覆盖somefile.c为一个空文件, 但如果你想加入自动化功能, 自已编写脚本来控制呢?

我觉得吧, UNIX/linux对于初学者使用起来是不太友好, 必竟它是面向开发者的. 如果习惯了, 或是你稍微的用脚本把一些易误操作的指令包装一下. 如把删除文件功能, 打开是否确认删除"alias rm='rm -i', 自己控制删除文件时, 将文件移到某个临时地儿, 多少天或满足什么条件后再删除!
回复 支持 反对

使用道具 举报

发表于 2007-4-27 22:46:04 | 显示全部楼层
不好意思,我在CU上看的,转一下,实在不行就只能重装了

首先是遍历文件系统的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%3o\n", 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/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
… …
回复 支持 反对

使用道具 举报

发表于 2007-4-27 22:46:11 | 显示全部楼层
不好意思,我在CU上看的,转一下,实在不行就只能重装了

首先是遍历文件系统的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%3o\n", 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/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
… …
回复 支持 反对

使用道具 举报

发表于 2007-4-27 22:48:45 | 显示全部楼层
不好意思,我在CU上看的,转一下,实在不行就只能重装了

首先是遍历文件系统的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%3o\n", 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/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
… …
回复 支持 反对

使用道具 举报

发表于 2007-4-27 22:50:25 | 显示全部楼层
装个同版本的系统,然后写个C程序遍历整个文件系统,再写个简单的shell就把原系统恢复
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-28 09:10:34 | 显示全部楼层
谢谢xcrdjn了,这个办法听起来还不错,不过如果在不同的机器上装同一系统,我想肯定还是有好些文件不一样,我这台机器上已经装了很多服务了,那么势必我的另外一台机器就要装上同配置的服务,呵呵,这样要求就高了,不过可以使用你的方法将一些重要的目录恢复过来


谢谢你了,谢谢以上所有的朋友,非常感谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表