使用 chown 命令将自己设置为 /etc 的所有者,现在出现各种错误

Raf*_*Raf 8 permissions chown ownership

我需要编辑一个.config文件(我知道它不会造成这些问题,只是为了清除它)并且它不会让我保存它,所以我/etc使用命令获得了所有内容的所有权,chown -hR username /etc这让我编辑.config文件,但现在每当我尝试安装任何软件包或使用任何 sudo 命令时,它都不起作用(我已经检查了 sudoers.d 中的 sudo 文件中的错误,并且没有任何问题)。

那么如何将其归还给以前的所有者呢?

ter*_*don 16

由于 中的某些文件/etc可能不属于root,如果您想避免重新安装,您可以执行以下操作:

  1. 启动到实时系统并挂载包含该/etc目录的分区。例如,如果您的/分区是/dev/sda1,您可以从实时系统执行此操作:

    sudo mount /dev/sda1 /mnt
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将所有文件的所有权设置为root

    sudo chown -R root /mnt/etc
    
    Run Code Online (Sandbox Code Playgroud)
  3. 此时所有文件都属于root。这可能是您需要的,但其中的某些文件/etc/可能具有不同的所有权。如果这些文件在实时系统中也不归 root 所有,您可以使用它们作为参考来更改已安装系统的权限:

    shopt -s globstar
    liveSystem="/etc"
    cd /mnt/etc
    for file in **/*; do 
        [ -e "$liveSystem/$file" ] &&
            echo sudo chown --reference "$liveSystem/$file" "$file"
    done
    
    Run Code Online (Sandbox Code Playgroud)

    如果您还更改了权限,请改为执行以下操作:

    shopt -s globstar
    liveSystem="/etc"
    cd /mnt/etc
    for file in **/*; do 
        [ -e "$liveSystem/$file" ] &&
            echo sudo chown --reference "$liveSystem/$file" "$file" &&
            echo sudo chmod --reference "$liveSystem/$file" "$file"
    done
    
    Run Code Online (Sandbox Code Playgroud)

    那只会打印将要运行的命令。一旦您看到了它的作用并且对它的正确性感到满意,请删除它echo以使其实际运行命令。

    现在这将遍历所有文件,包括所有权root在两个目录中的文件,但这并不重要。您可以编写更复杂的方法,但这不值得,因为这需要几秒钟。

  4. 重新启动您的机器:一切都应该恢复正常。

重要提示:如果您安装了不在实时系统上并且其文件/etc不属于root. 如果是这种情况,您要么需要找到您安装的内容并重新安装它,要么您可能需要重新安装系统。


Fra*_*que 2

启动进入恢复并发出以下命令:

mount -o remount,rw -n /
chown -R root: /etc
Run Code Online (Sandbox Code Playgroud)