为什么呢?有什么区别吗?请给出一个简单的解释,因为我只是一个普通的桌面用户。你绝对不应该使用普通的sudo来以Root身份启动图形应用程序。
为什么呢?有什么区别吗?请给出一个简单的解释,因为我只是一个普通的桌面用户。你绝对不应该使用普通的sudo来以Root身份启动图形应用程序。
HOME
环境变量。(您可以使用echo $HOME
自行检查它)。这就是为什么你应该使用图形界面的sudo
前端来运行图形应用程序,而不是直接使用sudo
的主要原因。在Ubuntu和它的大多数衍生版(包括Xubuntu和Lubuntu)中,标准的图形界面前端是{{link1:gksu
/gksudo
}}。在Kubuntu中是{{link2:kdesudo
}}。(这取决于所使用的桌面环境。)
如果你想直接使用sudo
来运行像gedit
这样的图形应用程序,你可以运行:
sudo -H gedit
-H
标志使得 sudo
将 HOME
设置为指向 root
的主文件夹(即 /root
)。
这仍然不能自动处理 .Xauthority
的所有权,也不能将其复制到临时文件夹中(这是图形化 sudo
前端为您处理的另一件事情)。但是,在不经常发生的情况下,如果无法访问 .Xauthority
,您将收到一个错误提示,然后可以通过删除它(sudo rm ~/.Xauthority
)来解决问题,因为它会自动重新生成。因此,保护 .Xauthority
的所有权和权限比保护配置文件的所有权和权限更不重要。
root
所有的.Xauthority
不同,当配置文件变为root
所有时,问题往往不太明显(因为图形程序通常会运行,但效果不佳,并且不会将任何有用的错误输出到控制台)。而且有时候修复起来更麻烦,特别是如果你希望你的家目录中的一个或多个文件归属于其他人(因为这样你不能简单地递归地将所有文件的所有权重新设置为自己来修复它)。sudo
(至少不带-H
)来运行图形应用程序。sudo chmod -R $USER:$USER ~
不幸的是,这些条件并不总是适用。如果您有需要保留组所有者的文件,您可以运行 sudo chmod -R $USER ~
。通常情况下,这已经足够了。(如果您的主目录中有需要由其他用户拥有的文件,即使使用这个命令也会有问题。) - Eliah Kagansudo
方式运行图形应用程序作为root用户,也有可能你很幸运地没有任何属于root用户的配置文件。(这种情况可能发生在它从未创建过文件的情况下,因为这是文件变为root所有的主要情况。)如果你没有遇到任何问题,我不会担心。 - Eliah Kaganchmod
真的能做到吗?我一直以为是chown
来完成这个任务的。chmod
从来没有对我起作用过。 - Wyatt Wardchown
而不是 chmod
。对此我感到非常抱歉,也感谢你指出来! - Eliah Kagangksudo
你就不必担心这个问题了。当你使用gksudo
或者kdesudo
来运行一个图形界面程序时,你的家目录中不会出现意外的以root所有的文件。这就是为什么它们是理想的选择。你还会得到一个图形化的密码提示,所以你可以从运行对话框(Alt+F2)或终端中使用它们。我提到sudo -H
的原因是因为只有一些Ubuntu版本预装了gksudo
或kdesudo
。你仍然可以安装gksudo
。(kdesudo
只适用于KDE系统。)但如果你不想安装,sudo -H
是一个合理的选择,比裸sudo
要好得多。 - Eliah Kagangksudo
,我也不建议将sudo
设置为其别名。对于非图形界面命令,有时您可能想保留$HOME
;gksudo
需要一个可用的显示器(尝试使用DISPLAY= gksudo ls
与使用sudo
进行比较);sudo
和gksudo
具有不同的选项,一些“相同”的选项如-k
是无关的;而且即使您刚刚成功运行了它,gksudo
也会提示您输入密码。此外,您仍然需要小心,因为别名并不总是被扩展。 - Eliah Kagansudo -H echo $HOME
仍然返回我的普通用户的主目录,而不是/root或/home/root目录(在Linux Mint 19.1上使用sudo版本1.8.21p2)。 - The Quarksudo -H echo $HOME
中,你的 shell(以你的身份而不是 root 身份运行)对 $HOME
进行 参数扩展,获取 你 的主目录路径,然后将其传递给 sudo
,而 sudo
又将已经扩展的值传递给 echo
,最后打印出来。sudo -H printenv HOME
、sudo -H bash -c 'echo $HOME'
和 sudo -H sh -c 'echo $HOME'
都会打印 /root
。这在概念上类似于 x=a echo "$x"
不会打印 a
(除非 x
已经有了值 a
),尽管机制不同。 - Eliah Kagansudo -i
而已。 - mchid从 Ubuntu 19.10 开始,输入 sudo some_command
的效果与输入 sudo -H some_command
相同。这意味着任何被操作的配置文件所在的目录将位于 /root
目录而不是 /home/regular_userID
目录(也就是 $HOME
)。
对于 Ubuntu 19.10 及更高版本的用户来说,这使得整个问题和答案在很大程度上变得无关紧要。
要查看你的发行版是否像 sudo -H
一样工作,请尝试以下简短测试:
$ sudo printenv | grep HOME
HOME=/home/rick
$ sudo -H printenv | grep HOME
HOME=/root
sudo
并不像sudo -H
那样工作,因此使用普通的sudo
可能会损坏你的用户配置文件。
nautilus-admin
插件可替代 gksu nautilus
、gksu gedit
或 sudo -H gedit
。它允许您在Nautilus中浏览文件和目录,然后以 root (管理员) 身份打开它们。sudo apt install nautilus-admin
gedit
作为 root 用户不能使用首选项当您以 root 用户身份运行 gedit
时,无法使用您作为普通用户设置的制表位、将制表符转换为空格、字体名称、字体大小、自动换行等首选项。
为解决此问题,我编写了脚本 sgedit
,用于继承用户首选项并将其应用于 root:如何将我的 root gedit 与用户 gedit 的首选项同步?
sgedit 文件名1 文件名2 ...
进行调用sudo -H
以保留文件所有权并获取root权限。sudo
已超时,则请求密码。gedit
,使终端提示立即重新出现。sudo {GUI命令}
,就像我们在gksudo被移除之前使用gksudo {GUI命令}
一样? - TrailRider