今天由于权限问题zz一般把/usr/bin和/usr/lib两个目录用chmod -R 777执行了一遍,结果各种问题出现,su root就报su:鉴定故障的错误。然后上网找教程很多都要求在root权限下操作来修复,真是悔不当初,哭都哭不出来,只想剁手。幸好最好予以解决了,不然就真得重装系统了(那估计又是摸鱼几天来恢复系统),在此把解决方案记录下来,希望能给踩到坑的朋友抢救一下。

step1

新建一个.c文件,在这里我命名为chmodfix.c,把如下内容写到这个.c文件中

#include <stdio.h>                                                                              #include <stdlib.h>
#include <string.h>
#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, 2);
exit(0);
}

然后在终端命令行下使用gcc编译得到可执行文件chmodfix.com

gcc chmodfix.c -o chmodfix.com

step2

新建一个.sh文件,在这里我命名为chmodfix.sh,把如下内容写到这个.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
#echo "chmod $PERM $FILE"
done
echo "change perm finished! "

step3

找到另一台装有centos7并且系统权限正常的电脑,利用step1中得到的chmodfix.com从这台电脑上获取被你损坏的目录下所有文件的正常权限

# 假设原电脑上权限损坏的目录为/usr/bin
./chmodfix.com /usr/bin >> chmodfix.txt

输出文件chmodfix.txt的内容形式如下

/usr/bin 0755 /usr/bin/cp 0755

/usr/bin/lua 0755

/usr/bin/captoinfo 0755

/usr/bin/csplit 0755

/usr/bin/clear 0755

/usr/bin/cut 0755

将得到的权限文件chmodfix.txt复制到权限受损的电脑上

step4

这时候由于电脑权限损坏无法切换到root用户从而无法直接修改根目录下被损坏文件的权限,需要切换到centos的emergency mode(ubuntu的用户对应进入到recovery mode)。那么如何进入到emergency mode呢?开机启动的grub界面处对对应系统按下e键,就进入到如下画面

然后将上图中红圈标示的ro替换成rw init=/sysroot/bin/sh,然后根据底下提示按下ctrl+x启动系统则进入到emergency mode,首先执行命令chroot /sysroot以获取直接访问真实系统文件的权限,然后进入到chmodfix.sh和chmodfix.txt所存放的文件夹下,执行chmodfix.sh以根据chmodfix.txt恢复受损文件的正确权限

bash chmodfix.sh chmodfix.txt

由于涉及的文件可能很多,这个过程可能比较长,耐心等待一下,执行结束后在命令行下输入以下命令来重启系统

exit
reboot

结束

重启之后在终端下执行su root若能成功切换到root用户而没有提示su:鉴定故障的错误则表明文件修复成功,也可以通过ls -l file来查看文件权限

>ls -l /usr/bin/python
lrwxrwxrwx. 1 root root 7 2月 22 11:25 /usr/bin/python -> python2

血淋淋的教训(一怒之下险些要重装系统了),通过这篇日志把此次重大事故记录下来,希望能帮助到同我一样踩到雷的朋友顺利解决。同时,吃一堑长一智以后可不能再随便使用chmod -R 777修改大批量系统文件的权限,也望各位引以为鉴。

centos7下误执行chmod -R 777 /后的权限修复方法的更多相关文章

  1. 执行chmod -R 777 / 补救

    执行后千万不要退出当前窗口!!! 在自己的虚拟机上设置某个站的权限的时候,原来应该是chmod -R 777 ./*  结果少按了个点,执行了chmod -R 777 /*  因为执行时间超出自己的预 ...

  2. Ubuntu 执行chmod -R 777 / 挽救方法

    mgj怎么会有堪比rm -rf /*这样神奇的命令,本想着把当前目录下的权限改为777,没想到把整个/目录下全设成777了,直觉告诉我好像哪里有些不对劲,好在一顿xjb折腾最终弄好了,应该没啥大问题, ...

  3. Mac 因误使用chmod -R 777 命令更改 /usr/bin 造成终端不能实用,提醒进程已结束的完美解决方案!

    1.不用删除任何文件. 2.启动root用户权限 4.在用root用户登进去 5.在root用户中使用终端输入命令 chown root:wheel /usr/bin/login chmod u+s ...

  4. Linux系统目录权限chmod误操作权限修复方法

    Linux中,如果意外误操作将/目录权限批量设置,比如chmod -R 777 / ,系统中的大部分服务以及命令将无法使用,这时候可以通过系统自带的getfacl命令来拷贝和还原系统权限,若是其他系统 ...

  5. Linux:chmod -R 777 * 是什么意思?

    首先,chmod命令是linux上用于改变权限的命令,-R 是递归遍历子目录,因为你要操作的文件使用的*通配符.777,第一个7代表文件所属者的权限,第二个7代表文件所属者所在组的权限,第三个7代表其 ...

  6. Centos7下用户登录失败N次后锁定用户禁止登陆的方法

    前言 针对linux上的用户,如果用户连续3次登录失败,就锁定该用户,几分钟后该用户再自动解锁.Linux有一个pam_tally2.so的PAM模块,来限定用户的登录失败次数,如果次数达到设置的阈值 ...

  7. CentOS7下修改默认网卡名为eth0的两种方法

    前言 大家都知道CentOS7默认的网卡名称是和设备名称是随机的,如果要修改网卡名称以 eth 开头,有两种方式,如下: 第一种方式 这种方式适合在安装操作系统的时候进行设置, 点击 Tab,打开ke ...

  8. chmod用数字来表示权限的方法

    前提:  mode权限设定字串.格式:[ugoa...][[+-=][rwxX]...][,...] 当中u表示拥有者(user).g表示与拥有者属于同一个群体(group),o表示其它以外的人(ot ...

  9. win7系统盘扩容后不识别修复方法

    谢天谢地 终于在不重装系统的情况下,把C盘修复好了. win7系统,C盘之前是200G,使用中慢慢的就用完, 虽然把几乎所有的软件都移植到D盘了但是还是不能释放更多的空间.剩下60多G的空间,一般够用 ...

随机推荐

  1. CentOS Linux搭建SVN服务器

    Linux系统:CentOS 安装步骤如下: 1.yum install subversion 2.输入rpm -ql subversion查看安装位置,如下图: 可以看到 svn在bin目录下生成了 ...

  2. DW1000 用户手册中文版 第5章 媒体访问控制(帧过滤)

    由于已经在wode中排版无法直接复制到博客中,故本节博客发布使用了图片. PDF下载 http://bphero.com.cn/forum.php?mod=viewthread&tid=68

  3. [jzoj]3506.【NOIP2013模拟11.4A组】善良的精灵(fairy)(深度优先生成树)

    Link https://jzoj.net/senior/#main/show/3506 Description 从前有一个善良的精灵. 一天,一个年轻人B找到她并请他预言他的未来.这个精灵透过他的水 ...

  4. Linux下不同文件不同颜色的意义

    通常,我们使用ls查看文件时,会出现不同颜色的文件,今天我就大概写一下不同颜色的代表意义: 蓝色————目录: 绿色————可执行文件: 红色————压缩文件: 浅蓝色————链接文件: 紫红色——— ...

  5. DAY10函数

    函数 函数就是可以重复利用的工具 函数可以完成指定代码块,函数就是是存放代码块的容器 函数的有点: 1.避免出现重复冗余的代码 2.让程序代码结构更清晰增加可读性 3 定义函数的语法 1. 函数名:使 ...

  6. JSON File Parse

    1.write a json file base on website(在网站上写一个json文件) json文件网址:https://raw.githubusercontent.com/DJOSIM ...

  7. 使用bind提供域名解析服务搭建

    正向解析实验 1.安装bind服务 2.在/etc目录中找到该服务程序的主配置文件,然后把第11行和第17行的地址均修改为any 3.正向解析参数如下: 4.编辑数据配置文件,从/var/named目 ...

  8. 老桂.net core系列课程

    为了支持"首届dnc开源峰会"(dncNew.com)顺利举办,本人<.net core系列课程>进行一波优惠,每个课程优惠在立即购买上方,领取现金券即可.课程地址为腾 ...

  9. [.net 面向对象程序设计深入](18)实战设计模式——设计模式使用场景及原则

    [.net 面向对象程序设计深入](18)实战设计模式——设计模式使用场景及原则 1,什么是设计模式? 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计 ...

  10. 如何在微信小程序定义全局变量、全局函数、如何实现 函数复用 模块化开发等问题详解

    1.如何定义全局数据 在app.js的App({})中定义的数据或函数都是全局的,在页面中可以通过var app = getApp();  app.function/key的方式调用,不过我们没有必要 ...