也可以看看:
为什么“chmod -R 777 /”是破坏性的?
我通过执行sudo chmod -R / 777
在根目录下recursion地改变了文件权限,之后我的系统不能启动(我得到了很多“权限被拒绝”的错误)。
请帮忙。
你正在看失败的原因。 保存您需要的数据,然后重新安装操作系统。
我知道dpkg存储在数据库中的权限,我发现以下脚本谷歌可能有所帮助。
编辑:我实际上已经快速看过脚本,它看起来好像缺less一些从PERMS到MODE的魔法,例如dpkg -c给出例如“-rw-r – r–”但是你想0644,我现在正在工作,所以我不确定我有时间在这个时刻进行转换,但是如果没有其他人跳过来补充那一点,我可能会回来。
这里有一个脚本,看起来很有趣
#!/bin/bash # Restores file permissions for all files on a debian system for which .deb # packages exist. # # Author: Larry Kagan <me at larrykagan dot com> # Since 2007-02-20 ARCHIVE_DIR=/var/cache/apt/archives/ PACKAGES=`ls $ARCHIVE_DIR` cd / function changePerms() { CHOWN="/bin/chown" CHMOD="/bin/chmod" PERMS=$1 OWN=`echo $2 | /usr/bin/tr '/' ':'` PATHNAME=$3 echo -e "$CHOWN $OWN $PATHNAME" #`$CHOWN $OWN $PATHNAME` #`$CHMOD $MODE $PATHNAME` } for PACKAGE in $PACKAGES; do echo -e "Getting information for $PACKAGE\n" FILES=`/usr/bin/dpkg -c "${ARCHIVE_DIR}${PACKAGE}"` for FILE in "$FILES"; do FILE_DETAILS=`echo "$FILE" | awk '{print $1"\t"$2"\t"$6}'` changePerms $FILE_DETAILS done done
从这样一个混乱的情况可以回来 ,而不需要重新安装系统。 那么,如果你有一个双启动系统,更准确地说,从一个USB钥匙或者一个Virutal Box(或者如此)上运行一个全新的系统。
我又碰到类似的问题(我正在编写一个脚本中的一些错误)并解决了这个问题,但是你需要问一些专家的帮助。 非常友善!
首先,我的情况比较容易解决,因为我有一个双启动系统(Ubuntu和我的老fedora安装),但运行系统的USB密钥(或者CD / DVD)应该做同样的事情。
M点= /安装/ ubuntu的
首先,我安装了我的文件系统(不要忘记创build挂载点):mount / dev / ubuntu / root $ MPOINT mount / dev / ubuntu / home $ MPOINT / home
然后,我运行了下面的命令(我的问题只是在几个关键的目录中),将权限从正在运行的系统复制到乱七八糟的一个(实际上,在我的情况下,我在Fedora下的VirtualBox中安装了一个Ubuntu系统并获得了权限):
find / etc / usr / bin -exec stat –format“chmod%a $ {MPOINT}%n”{} \; > /tmp/restoreperms.sh
然后我运行了restoreperms.sh脚本。
我可以再次启动在Ubuntu上。
restoreperms.sh的内容将如下所示:
(...) chmod 755 /mount/ubuntu//etc/ppp chmod 755 /mount/ubuntu//etc/ppp/ipv6-up chmod 2750 /mount/ubuntu//etc/ppp/peers chmod 640 /mount/ubuntu//etc/ppp/peers/provider chmod 755 /mount/ubuntu//etc/ppp/ipv6-up.d chmod 777 /mount/ubuntu//etc/ppp/resolv.conf (...)
我没有testing它,但它也必须为所有者和所有者组工作。 就像是:
find / etc / usr / bin -exec stat –format'chown%U:%G $ {MPOINT}%n'{} \; > /tmp/restoreperms.sh^
(...) chown root:root /mount/ubuntu//etc/obex-data-server/imaging_capabilities.xml chown root:root /mount/ubuntu//etc/obex-data-server/capability.xml chown root:dip /mount/ubuntu//etc/ppp chown root:root /mount/ubuntu//etc/ppp/ipv6-up chown root:dip /mount/ubuntu//etc/ppp/peers chown root:dip /mount/ubuntu//etc/ppp/peers/provider chown root:root /mount/ubuntu//etc/ppp/ipv6-up.d chown root:root /mount/ubuntu//etc/ppp/resolv.conf (...)
当然,在这里要小心,两个系统的UID和GID是一样的,但对于系统相关的用户和组,这不应该是一个问题。
RK:
一个重要的事情是保持安装磁盘与您正在使用的版本同步,或至less使用当前的Ubuntu版本。 现在,我有一个cronjob命令,每天运行(可能是几周),以保持这些信息。 这会让下一次的解决scheme变得更容易,但是当然,现在我已经拥有了这个解决scheme,它永远不会再发生。 ;-)像这样的东西:
0 12 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chmod %a %n" {} \; |/bin/bzip2 -c > /tmp/restore_chmod.$(/bin/date +%w).sh.bz2 0 13 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chown %U:%G %n" {} \; |/bin/bzip2 -c > /tmp/restore_chown.$(/bin/date +%w).sh.bz2
编辑:支持链接,组合的命令是:
/usr/bin/find / -exec /usr/bin/stat --format="[ ! -L {} ] && /bin/chmod %a %n" {}
我从上面修改脚本,看起来像这样:
#!/bin/bash # Restores file permissions for all files on a debian system for which .deb # packages exist. # # Author: Larry Kagan <me at larrykagan dot com> # Since 2007-02-20 ARCHIVE_DIR=/var/cache/apt/archives/ PACKAGES=`ls $ARCHIVE_DIR` cd / function changePerms() { CHOWN="/bin/chown" CHMOD="/bin/chmod" PERMS=`echo $1 | sed -e 's/--x/1/g' -e 's/-w-/2/g' -e 's/-wx/3/g' -e 's/r--/4/g' -e 's/rx/5/g' -e 's/rw-/6/g' -e 's/rwx/7/g' -e 's/---/0/g'` PERMS=`echo ${PERMS:1}` OWN=`echo $2 | /usr/bin/tr '/' '.'` PATHNAME=$3 PATHNAME=`echo ${PATHNAME:1}` # echo -e "CHMOD: $CHMOD $PERMS $PATHNAME" # result=`$CHOWN $OWN $PATHNAME` # if [ $? -ne 0 ]; then # echo -e $result # exit 123; # fi echo -e "CHOWN: $CHMOD $PERMS $PATHNAME" result=`$CHMOD $PERMS $PATHNAME` if [ $? -ne 0 ]; then echo -e $result fi } for PACKAGE in $PACKAGES; do if [ -d $PACKAGE ]; then continue; fi echo -e "Getting information for $PACKAGE\n" FILES=`/usr/bin/dpkg -c "${ARCHIVE_DIR}${PACKAGE}"` for FILE in "$FILES"; do #FILE_DETAILS=`echo "$FILE" | awk '{print $1"\t"$2"\t"$6}'` echo "$FILE" | awk '{print $1"\t"$2"\t"$6}' | while read line; do changePerms $line done #changePerms $FILE_DETAILS done done
同意blueben,只是重新安装可能比分析哪个文件/目录需要哪个权限更快。 但是,如果重新安装不是一种select,这是一个想法:
find / | xargs stat -c 'chmod %a "'%n'"' > /tmp/chmod.sh
find / | xargs stat -c 'chmod %a "'%n'"' > /tmp/chmod.sh
chmod.sh
复制到具有错误权限的计算机上 chmod +x /tmp/chmod.sh && /bin/bash /tmp/chmod.sh
错误到我的post发布为用户user100740:要支持链接,组合的命令是:
/usr/bin/find / -exec /usr/bin/stat --format="[ ! -L {} ] && /bin/chmod %a %n" {} \; -exec /usr/bin/stat --format="/bin/chown -h %U:%G %n" {} \; |/bin/bzip2 -c > /tmp/restore_fileperms.$(/bin/date +%w).sh.bz2
如果你仍然可以启动/usr/sbin/synaptic
,它通常是可以修复的。
按状态对软件包进行分类(安装在最上面的软件包),select所有安装的软件包,右键单击并select重新安装。 然后申请,这将提示dpkg
重新提取这些包的所有文件。 (你将失去任何本地修改(但不会改变configuration文件)。)
它可能不会让所有的东西都固定。
另一件事是,如果你进入/var/cache
,你可以为每个安装的包调用dpkg -x <package name> /
,然后调用dpkg --reconfigure -a
。 另外,如果您使用的是Ubuntu,您可以进行远程升级,通常可以修复大量错误(假设您尚未安装最新版本)。 一般来说,当我试图修复这样的错误时,我会尝试这些简单的修复,如果他们不只是使它再次工作,那么是时候重新安装。
从Live CD启动。 然后启动shell,然后sudo -s。 然后chmod 777 / *,然后chmod 600 / etc / passwd。 如果init / lib / init脚本不可执行,将会发生内核崩溃。 启动到单用户模式,对于Lilo Linux 1,并运行上面的user102453的脚本。 这将得到系统启动提示。 仍然需要让X运行。
设置/的权限为755为我工作。
所以先检查一下
root@ubuntu:/# cd / root@ubuntu:/# ls -ld
权限应该是“drwxr-xr-x”(755)。