错误地将家中所有文件和文件夹的所有权更改为“root”

Edw*_*lds 6 ownership

chown -R root:root *当我拥有 root 权限时,我错误地在我的主文件夹中运行(实际上我应该在其他文件夹中这样做:-/)我如何恢复?

这不是它显示的内容的重复。我没有任何问题.gvfs; 受影响的文件夹包括桌面、文档、下载、音乐、图片和视频。默认情况下,shell globbing*不包含隐藏文件。

0x2*_*fa0 16

运行此命令:

sudo chown -R ${USER}:$(id -g -n $USER) ~/*
Run Code Online (Sandbox Code Playgroud)
  • sudo: 以 root 身份运行以下命令。
  • chown:更改文件/文件夹的所有者

    • -R:递归(将该所有者应用于文件夹及其内容)
    • ${USER}:$(id -gn)

      • ${USER}:默认情况下包含您的用户名的变量。
      • ::这将用户名从组中分​​离出来。
      • $(id -gn) 这将返回组,但它应该与用户相同。
        • $():这是一个命令替换,这些标签内部的所有代码都将被执行,然后这将作为一个包含这些命令输出的变量。
        • id: 打印指定 USERNAME 的用户和组信息,或(省略 USERNAME 时)当前用户的信息。
        • -gn:(的缩写-g -n
        • -g: 只打印有效的组 ID。
        • -n: 打印组名而不是组 ID。
    • ~/*:对主文件夹的所有内容执行所有这些操作。

  • @bodhi.zazen `$USER` 在 sudo 发挥作用之前由 shell 评估。例如,如果您在脚本中使用 `$USER` 或使用 `sh -c` 命令,就会出现问题。 (6认同)
  • @bodhi.zazen 不,它没有,不,它不能。 (5认同)
  • @Rmano `.gvfs` 在我的情况下不归 root 所有,如果没有证据,我拒绝相信我家中的任何东西*应该*归 root 或其他用户所有。如果某些程序需要它,我将提交错误报告。你可能在某个时候用一些 GUI 程序运行了 `sudo`,而没有使用 `sudo -H` 或 `gksudo`。 (4认同)
  • @bodhi.zazen 正如穆鲁所说,对于命令`sudo echo $USER`,shell 执行[参数扩展](https://gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion)在`$USER`(用它的值替换它)*之前*调用`sudo`。`sudo` 永远不会看到文本 `$USER`,它会看到 shell 替换它的内容,即调用 shell* 中变量 `USER` 的值。尽管 `sudo` 在运行命令时会改变环境,但这与像 `sudo echo $USER` 这样的命令的行为无关,因为文字文本 `$USER` 不是 `sudo` 运行命令的一部分。 (4认同)
  • @Helio 在这种情况下不是,因为 OP 使用了 `*`。但更一般地说,我只会做`sudo chown "$USER:$(id -g $USER)" ~ -R`。 (2认同)
  • @bodhi.zazen 因为我们使用 $USER 不能等于 `root`,试试这个 `sudo echo $USER` (2认同)
  • 由于 $USER 是一个变量,因此可以用不同的方式对其进行评估。默认情况下是调用 sudo 的用户,但它可以作为 root 进行评估,或者可能需要为第二个用户以 root 身份调用此修复程序。在这两种情况下, $USER 都不起作用。请参阅 https://help.ubuntu.com/community/RootSudo#Special_notes_on_sudo_and_shells 和 http://www.sudo.ws/sudoers.man.html 请参阅“命令环境”部分。现在我知道这些可能很少见,但仍有一些用户使用这些选项。 (2认同)