![在 / 作为 root 下意外 chown](https://linux22.com/image/31573/%E5%9C%A8%20%2F%20%E4%BD%9C%E4%B8%BA%20root%20%E4%B8%8B%E6%84%8F%E5%A4%96%20chown.png)
我不小心以 root 身份运行了以下命令,
chown mike -Rf / backups
重点是我在 / 之间添加了一个空格,并备份了我的错误,我在 1-2 秒后停止了该命令,我该如何恢复?我现在在使用 DirectAdmin 时遇到问题,例如在访问它时收到错误:
Unable to determine Usertype
user.conf needs to be repaired
http://help.directadmin.com/item.php?id=456
或者我停止接收电子邮件,我什至不知道现在还有什么问题......
答案1
由于系统不跟踪所有权的修订,因此无法在不恢复备份的情况下将其更改回来。
最好是立即进行备份,以便可以回滚任何进一步的更改。
在系统上重新安装软件包可能可以解决大部分所有权问题。在 Debian/Ubuntu 上我会这样做:
apt-get install --reinstall package
在一个rpm
基础系统上,类似rpm -Uvh --force package.rpm
任何造成麻烦的事情。如果正确设置,包将不会覆盖您更改的配置文件。
如果您有另一个类似的系统或备份,您可以从中检索原始所有权信息并将其应用于您的系统。首先列出您有兴趣使用的文件和目录:
find / -user mike
并使用该列表在备份或类似系统中查找非迈克拥有的文件。
答案2
这取决于您正在运行的操作系统。
如果是 Solaris 10 及更早版本,您可以使用以下命令修复影响属于某个包的文件和目录的所有所有者问题:
pkgchk -f
对于 Solaris 11,这将是:
pkg fix
我相信 AIX 有类似的 package fix 命令。
如果您运行基于 rpm 的操作系统(Red Hat、Fedora 等),您应该能够运行
rpm -aV
检测与包数据库存在差异的文件和目录。然后您可以通过运行以下命令来修复它们:
rpm --setugids <package-name>
但您需要传递每个受影响的包名称。或者,您可以简单地运行:
for package in $(rpm -qa); do rpm --setugids $package; done
如果您运行的是基于 debian 的操作系统,恐怕文件所有权不会存储在软件包数据库中,因此您需要使用备份(如果有)作为恢复所有权的参考,或者找到一个类似的系统来恢复所有权。
答案3
我犯了完全相同的错误,是句子末尾的印刷错误
chown -R root:root /folder/subfolder /
我没有意识到斜杠之前的空格:(
希望在这里询问,最终我解决了这个问题,从另一个已安装的 Debian 服务器获取所有者和组。在该服务器中,我做了:
find / -not -path '/proc/*' -not -path '/var/www/*' -not -path '/home/*' ! \( -name root -o -group root \) | xargs stat --format 'chown %U:%G %n' | sort -k 2,3 > chown_owner_and_group.sh
chmod +X chown_owner_and_group.sh
然后,我将文件复制到需要恢复文件所有者和文件组的服务器,并执行以下操作:
./chown_owner_and_group.sh
答案4
恐怕您唯一的解决方案是与同一发行版的另一个安装进行比较并正确重置所有者。